Кроссплатформенный функциональный язык для Objective-C - PullRequest
4 голосов
/ 21 февраля 2011

РЕДАКТИРОВАТЬ: Потратив несколько часов на изучение этого, я не думаю, что я найду что-то, что действительно сэкономит мне время по сравнению с количеством времени и усилий по поиску подходящего языка, подходящих привязок и поддержание этой среды перед лицом изменений на всех этих платформах. Я принимаю ответ, который кажется наиболее реалистичным, потому что это будет лучшая идея для большинства людей. Мнение, которое я извлекаю из этих и других разговоров, заключается в том, что единственный верный путь вперед - это использовать функциональный язык, который может работать без внешних привязок, или что-то, что имеет привязки, поддерживаемые коммерческой организацией, такой как F #. Это слишком много работы и слишком мало спроса, и состояние того, что доступно в дикой природе, отражает это. Я надеюсь, что это изменится однажды.

Я бы хотел начать использовать функциональный язык в своем программном обеспечении, в дополнение к Objective-C, который является моим основным языком (C может работать в качестве связующего?). Должно быть кроссплатформенным, то есть Windows, Linux, OSX (x86) и iOS (ARM). Что я должен использовать и как этого добиться?

Я планирую в ближайшее время перейти на бэкэнд LLVM и Clang для моего Objective-C, если это что-то изменит.

У меня нет никаких "вложений в знания" ни в одном функциональном языке, хотя я немного обошелся. Я изучаю один с нуля, поэтому я хочу научиться чему-то нелогичному, если это возможно

  • Решение должно быть реальным , сделано много предварительных или опытных работ, но ..
  • Я использую цель C, и мне действительно нужны привязки Какао; потому что большое количество моих данных использует типы какао, так что в противном случае все будет беспорядочно. Кроме того, обмен сообщениями через цель-c не позволил бы мне создавать связующий код между статическими функциями C и моими экземплярами объекта Objective-C (это уже то, что вызовы методаjective-c делают встроенными ..)
  • Решение должно быть лицензировано для статической компоновки (требование iOS)

Вот примеры того, что я хотел бы сделать:

  • Обработка языка байтов, например, сетевого протокола.
    • Входные данные: байты и длина и вызывающий экземпляр методаjective-c
    • Вывод: возврат к вызывающему экземпляру методаjective-c, отправка ему аргументов контейнера-какао
  • Принимайте решения о лучшем «ходу» в настольной игре
    • Ввод: содержащиеся в какао данные о состоянии, вызывающий экземпляр методаjective-c
    • Вывод: возможно изменить данные состояния, возможно вызвать произвольный метод target-c, а затем вернуться к вызову экземпляра метода target-c, отправить ему аргументы контейнера-какао

Ответы [ 5 ]

6 голосов
/ 21 февраля 2011

Как отмечает Даниэль Бюнзли, у нас есть приложение OCaml для iPhone, которое сейчас продается в магазине приложений для iPhone.(Это карточная игра под названием Cassino, если вы хотите ее найти.) В сентябре 2010 года Apple отказалась от языковых ограничений, и мы не встретили никакого сопротивления (хотя, конечно, мы очень маленький игрок).

Я собрал несколько обучающих примеров для написания приложений для iOS в OCaml, которые вы можете найти на нашем сайте:

http://psellos.com/ocaml/example-app-portland.html
http://psellos.com/ocaml/example-app-slide24.html

Вы не упоминаете,хочу, чтобы код GUI был кроссплатформенным.Это гораздо сложнее.Наш код использует тонкие оболочки для доступа к собственным библиотекам Cocoa Touch, которые не будут работать в Linux или Windows.Они работают (по крайней мере, подмножество) в OS X. Вы можете увидеть некоторые пользовательские (очень упрощенные) оболочки Cocoa Touch в примерах учебного пособия.

OCaml, безусловно, хорошо работает на всех системах, о которых вы упомянули.Мне кажется, это довольно хороший выбор (несколько предвзятый энтузиаст OCaml).

4 голосов
/ 21 февраля 2011

OCaml не GPL'd.Сам компилятор распространяется под лицензией Q Public, а стандартная библиотека распространяется под LGPL с исключением статического связывания .Более подробную информацию смотрите здесь:

http://caml.inria.fr/ocaml/license.en.html

Некоторые из них уже создали приложения в OCaml, которые доступны в магазине приложений, вам не нужно платить 3000 €.Следуйте этим инструкциям:

http://web.yl.is.s.u -tokyo.ac.jp / ~ tosh / ocaml-on-iphone / index.html

http://psellos.com/ocaml/compile-to-iphone.html

3 голосов
/ 21 февраля 2011

Я действительно не знаю, что означает «функциональный язык для Objective-C или C», но GHC (Haskell) имеет лицензию BSD и имеет хороший CFI FFI. GHC также проделал большую работу на iPhone.

2 голосов
/ 21 февраля 2011

Гамбит или Цыпленок Схема, вероятно, ваш лучший выбор - они компилируются в C.

0 голосов
/ 05 июня 2014

Поддержка Xamarin для F # довольно хороша по состоянию на середину 2014 года.

...