Сравнение F # и OCaml

Я точно знаю, как F # и OCaml отличаются в терминах "особенностей" (например, функторов, camlp4, единиц измерения...).

Мне интересно следующее: Что касается кода, который не содержит указанных функций, есть ли разница в стиле кодирования (кроме соглашений об именах) между F # и OCaml? Иначе говоря, если какой-то (идиоматический) код F # можно перевести прямым способом (возможно, тривиально) в OCaml, приведет ли это преобразование к идиоматическому Ocaml?

Изменить: Из ссылок, предоставленных Guy Coder, я предполагаю, что какой-то "идиоматический" код OCaml не может напрямую перевести на "идиоматический" код F # из-за того, что в F # исключения (и более широко используются в OCaml), Как насчет другого направления? Будет ли какой-то код F # ish OCaml когда-либо спровоцировать реакцию в терминах "Не делайте XX таким образом, способ OCaml для выполнения XX с исключениями вместо XY.."

Как правило, каковы различия в использовании исключений в OCaml по сравнению с типичным использованием в F #. Существуют ли другие конструкции, которые по-разному используются на двух языках (например, из-за штрафов за производительность на одном языке)?

Ответ 1

Да, большинство пользователей OCaml будет считаться идиотским. Поскольку идиоматика не является точной нормой, невозможно измерить, насколько идиоматично.

Предостережение заключается в том, что вам придется изменить часть кода, чтобы использовать функции на одном языке, которые не находятся в другом. В частности, если функтор является идиоматическим способом сделать это в OCaml, тогда вам придется преобразовать код F # в Functor. Или, если F # широко использует библиотечный код .Net, вам придется воссоздать эти функции в OCaml или найти эквивалент.

Я перевел свою долю в ML и OCaml на F #, и, как вы заметили, и то, что я называю средой и этикой, - это действительно большие различия, например. функторы, camlp4, единицы измерения, Visual Studio, перемещение во времени, NUnit, WPF и т.д.

Помните, что F # запускался как OCaml при переносе, поэтому по большей части все еще много общего.

Если вы хотите, чтобы какой-то значительный код кода, сделанный в OCaml и F #, переводил почти строку для строки, взгляните на код "Справочник по практической логике и автоматическому обоснованию" Джона Харрисона.

F #

OCaml

Тогда вы можете судить сами.

Мне нужно отметить, что код "Справочник по практической логике и автоматизированному рассуждению" не использует классы, записи, события и т.п. Это почти чисто функции.

Еще один способ сравнить любые два языка в целом по idomaticness (ОК, поэтому я придумал это слово) - использовать Rosetta Code. Rosetta Code содержит решения задачи программирования, написанные на многих языках. Поэтому найдите задачу программирования, например. создать класс, а затем посмотреть OCaml и F #.

Не все задачи выполняются на всех языках, но любой может внести вклад или даже предложить новую задачу.