совместимость кода между OCaml и F # - PullRequest
17 голосов
/ 21 ноября 2010

Добрый день всем,

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

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

Ответы [ 3 ]

15 голосов
/ 21 ноября 2010

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

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

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

7 голосов
/ 21 ноября 2010

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

Характеристики совместимости с ML

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

0 голосов
/ 21 ноября 2010

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

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

F # не имеет расширенной модульной системы OCaml, поэтому у вас будут проблемы с реализацией, например, функторов.

...