2011-01-18 5 views
17

Люди have написал games для iPhone в схеме. Поскольку (некоторые) компиляторы Scheme компилируются до C, его легко смешивать с Objective-C и интегрировать с XCode.Есть ли компилятор Haskell/ML-like для C?

Я - aware из patches для компиляторов Haskell и OCaml для включения ARM/iOS-бэкендов. Но они кажутся неофициальными и экспериментальными/нестабильными.

Я предпочитаю статическую систему типа haskell/ML типа для динамической типизации схемы. Существует ли стабильный компилятор ML/SML/Haskell, который генерирует C-код, чтобы его можно было использовать аналогично Scheme/Gambit-C?

+4

В GHC есть встроенный сервер (опция -fvia-c) –

+3

@ SK-logic да, но C-сервер для ghc не перекрещивается. Это также действительно (теперь, когда у нас есть собственный код и llvm-серверы), все еще существуют для загрузки. – sclv

+0

Кстати, парень группы Gambit-C выпустил REPL на iOS: http://itunes.apple.com/us/app/gambit-repl/id434534076?mt=8&ls=1 – LennyStackOverflow

ответ

15

Я не могу помочь с ML, но вы посмотрели JHC? JHC целая программа-оптимизации Haskell компилятор, который нацелен на портативный C, и поддержка iPhone могут быть добавлены, поставив

[iphone] 
cc=arm-apple-darwin-gcc 
merge=le32 

в ~/.jhc/targets.ini

Более Haskell информация на Haskell wiki и руководство JHC.

+1

Я это рассмотрел, спасибо , У меня впечатление, что jhc не является полным. Я не хотел бы запускать проект на одном языке и в какой-то более поздний момент найти компилятор не поддерживает то, что я делаю. См. Ошибки компиляции: http://mirror.seize.it/report.html – LennyStackOverflow

+2

JHC - это AFAIK, почти полная реализация Haskell98 (есть несколько пробелов, но очень незначительный IIRC), однако он не поддерживает все Расширения GHC, такие как MPTC. Ваша ссылка на компиляцию ошибок, похоже, противоречит набору тестов GHC; Я бы не ожидал, что JHC сможет скомпилировать большую часть этого кода, поскольку в большинстве случаев это потребует дополнительных расширений GHC. –

+4

У меня довольно много опыта использования JHC, полнота функций - это не проблема (кроме расширений), проблема с текущей версией jhc - это стабильность генератора кода, который иногда на сложных выражениях генерирует ошибочный C-код, Я пытался помочь выявить эти проблемы, для которых некоторые из них были исправлены, но все еще есть проблемы. Вы также хотите убедиться, что вы включили -fjgc, который был протестирован больше (и может помочь сгенерировать действительный код C), чем без использования GC, и если вы используете библиотеки FFI, включите --optc = '- fno-strict-aliasing' , –

6

(я не уверен, что это Набор инструментов была предпринята именно на IPhone еще.)

MLTon является цельной программы оптимизации Standard ML компилятор. Вы можете держать вокруг кода C, передавая -keep g к MLTon при компиляции, например:

c:/Program Files (x86)/MLton/bin/mlton.bat" -verbose 1 -keep g test.sml

Он может также генерировать ARM код natively.

4

nhc98: http://www.haskell.org/nhc98/

Полный Haskell '98. Конечно, многие библиотеки теперь полагаются на более продвинутые функции ghc. Но Haskell'98 обладает множеством возможностей для программирования общего назначения.

+1

Есть ли причина предпочесть nhc over jhc? Я не использовал ни один экстенсивно. –

+0

@Michael Snoyman Я не знаю, факт, но я бы предположил, что он более стабилен, чем jhc, но вам все равно нужно построить nhc из исходного кода, чтобы сделать его кросс-компиляцией, где jhc - это истинный кросс-компилятор, для которого вы может определить целевой файл стиля inf, чтобы описать платформу и какой компилятор C использовать, чтобы сделать его тривиальным для целевых новых платформ. –

+1

nhc работает как кросс-компилятор, насколько мне известно - см. Документы здесь: http://haskell.org/nhc98/install.html. Хотя да, это требует компиляции nhc как кросс-компилятора, но это не должно быть сложно. – sclv