F # меняется на OCaml [закрыто]

"(?:\\"|.)*?"

Чередование \" и . проходит через экранированные кавычки, в то время как ленивый квантификатор *? гарантирует, что вы не проходите мимо конца строки с кавычками. Работает с классами .NET Framework RE

123
задан Guy Coder 5 March 2016 в 12:47
поделиться

5 ответов

Основные отличия - то, что F# не поддерживает:

  • функторы
  • OCaml-объекты-стиля
  • полиморфные варианты
  • camlp4/5 препроцессор или точки расширения (ppx)

, Кроме того, F# имеет другой синтаксис для маркированных и дополнительных параметров.

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

полный список различий здесь (примечание: замена archive.org битой ссылки).

87
ответ дан Anton Kochkov 5 March 2016 в 12:47
поделиться
  • 1
    Я wouldn' t говорят " большая часть cases" но это полезно, да. – skaffman 1 February 2011 в 22:21

Я всегда описываю F# как кузена OCaml, потому что OCaml имеет много функций, которые F# не имеет и вероятно, никогда не будет, получать. F# более тесно связан с предыдущим языком CAML. В частности, F# имеет очень ограниченную поддержку абстракции и никакую поддержку структурного ввода (как OCaml's объекты и полиморфные варианты ) вообще.

Вопреки тому, что записали некоторые респонденты, F# действительно имеет (ограниченную) поддержку маркированных ("именованных") и дополнительных аргументов.

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

я также обнаружил, что замечательная система модуля OCAML помогает параметризовать код по типам (таким как структуры данных), но альтернативы ООП не только отвратительны, но и почти совершенно не использованы на.NET. Кроме того, при попытке записать изящно параметризованные структуры данных я поразил десятки ошибок в компиляторе F#, потому что никто даже не попытался сделать это прежде. F# stdlib действительно содержит некоторые хорошие реализации структуры данных, но фактически никакое повторное использование, т.е. это - cut'n'paste задание.

16
ответ дан Gilles 5 March 2016 в 12:47
поделиться
  • 1
    Если Ваши пользователи действительно заботятся о числе фракционных секунд тогда все же it' s очень полезный. – dan carter 24 September 2013 в 14:16

F# поддерживает синтаксис OCaml непосредственно. Это не могло бы быть на 100% совместимо, но я думаю, что это достаточно близко.

http://plus.kaist.ac.kr/~shoh/fsharp/html/index.html

Вот является списком различий (не уверенный, насколько актуальный это)

http://plus.kaist.ac.kr/~shoh/fsharp/html/fsharp-vs-ocaml.html

2
ответ дан Lou Franco 5 March 2016 в 12:47
поделиться

F # и OCaml с таксономической точки зрения являются классами в семействе языков ML, которое включает в себя целый ряд других странных животных. F # новее, чем OCaml, и в нем пока нет ни функторов [функции модуля -> модуль], ни типов строк [классов объектов и полиморфных вариантов]. В совокупности эти два упрощения, вероятно, облегчат кривую обучения для тех, кто разрабатывает платформу .Net. К сожалению, эти две языковые функции являются чрезвычайно мощными в OCaml, поэтому чтение литературы по OCaml для понимания того, как кодировать для F #, вероятно, приведет к преждевременному разочарованию в последнем, хотя, вероятно, это отличная альтернатива C #, где доступны оба.

9
ответ дан 24 November 2019 в 01:07
поделиться

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

  • Единицы измерения , которые позволяют вам проверять тип кода, имеющего дело с числовыми вычислениями
  • Мета-программирование , используя цитаты (что делает можно использовать LINQ в F #, а также он важен для многообещающих проектов, таких как платформа WebSharper)
  • Активные шаблоны для создания абстракций для функциональных типов данных (и, как правило, очень полезная функция для более сложных приложений сопоставления шаблонов)
  • Выражения вычислений , которые являются языковыми функциями асинхронных рабочих процессов (библиотека для асинхронного ввода-вывода / веб-сервисов / программирования графического интерфейса пользователя)
  • .NET-совместимая объектная система , которая делает это возможным для полного взаимодействия с платформой .NET (OCaml также поддерживает объекты, но отличается - конечно, в обеих системах есть некоторые преимущества).
  • Перегруженные операторы - Насколько мне известно, OCaml не имеет перегруженных операторов - в F # вы можете использовать + для всех числовых типов, а также для тех, которые его поддерживают.

И, честно говоря, я думаю, что также стоит упомянуть Visual Studio IDE. Это не часть языка, но это действительно улучшает взаимодействие с пользователем (поддержка IntelliSense в Visual Studio действительно хороша!)

Если вы посмотрите на список, есть много вещей, которые в значительной степени способствовали популярности F #, так что это намного больше, чем просто «OCaml без функторов». F # определенно основан на OCaml (и заимствует идеи из других языков, таких как Haskell) и имеет много общего с ними, но есть и много других вещей.Я предполагаю, что без таких вещей, как асинхронные рабочие процессы, объектно-ориентированный объект в стиле .NET и метапрограммирование, Microsoft Developer Division никогда бы не включил F # в Visual Studio 2010.

118
ответ дан 24 November 2019 в 01:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: