Подтвердить что ты не робот

Совместимость кода между OCaml и F #

Добрый день,

Я разрабатываю небольшой проект для хобби в OCaml. Мне было интересно, как легко было бы перенести его на F #. Я знаю, что у F # есть некоторые функции, которые OCaml не делает, но я надеялся, что мой OCaml-код потребует мало усилий для порта. Мне не обязательно мигрировать, я хочу сохранить/разработать на обеих платформах.

Спасибо заранее, Майкл

4b9b3361

Ответ 1

Написание кода кросс-компиляции выглядит для меня миром боли. Джон Уитингтон из Coherent PDF - единственный человек, которого я знаю о том, кто пытался сделать это в любой реальной степени.

Я перевел много кода OCaml в F # (возможно, больше, чем кто-либо еще в мире), а главными проблемами являются синтаксис #light, использование любых нетривиальных функций OCaml (объектов, полиморфных вариантов, модули порядка, помеченные и необязательные аргументы и т.д.), библиотеки (например, lablgl, lablgtk, ocamlgraph, laziness), макросы (синтаксический анализ, потоки, шаблонные соответствия) и изменения в базовом синтаксисе, такие как индексирование массива. Например, я просто попытался перенести тест Almabench с OCaml на F #, и потребовалось несколько часов, потому что мне пришлось переписать каждый a.[i] to a.(i) вручную из-за множества ошибок в компиляторе F #: его режим совместимости с OCaml довольно хрупкий.

Поэтому я бы посоветовал вам выбирать между языками, а не пытаться перекрестно скомпилировать.

Ответ 2

Вы должны прочитать последнюю часть спецификации

Особенности совместимости ML

и обязательно возьмите файл FSharp.PowerPack.Compatibility.dll из PowerPack для различных библиотек-совместителей.

Ответ 3

Я не делал OCaml для F # -портации, но я знаю, что F # был разработан с учетом совместимости с OCaml. Как я знаю, F # в основном является надмножеством базового OCaml.

Он должен поддерживать (и без #light ограничиваться) большинством ключевых слов OCaml и иметь эквиваленты большинства стандартных функций в основных библиотеках (или в .Net framework). Поэтому я бы предположил, что, по крайней мере, для хобби-проектов - портирование должно быть действительно легким.

F # не имеет системы OCAMl advanced module, поэтому у вас возникнут проблемы с реализацией, например. функторы.