$ su
|
|
1 | |
OCaml12.08.2017, 00:15. Показов 824. Ответов 8
Метки нет (Все метки)
Собственно заинтересовал сабж, что думаете, кто использовал? Я так пробежался чем то на haskell похож, но как по мне проще, может я не тот раздел выбрал, но тут он более живой, интересно услышать ваши мнения. Заранее спасибо!
0
|
12.08.2017, 00:15 | |
Ответы с готовыми решениями:
8
Работа с подсписками на языке Ocaml или F# Вычисление суммы элементов списка, если они образуют арифметическую прогрессию [OCaml] Как собрать и установить ocaml и ocsigen? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
Модератор
|
|
12.08.2017, 15:07 | 2 |
На F# похож ещё больше. F# - это, можно сказать, "OCaml .NET".
Это всё языки с ML-овским синтаксисом. Когда я его "щупал", года 3-4 назад, был ещё менее дружествен к Windows чем Haskell. korvin_ и pycture могут знать больше.
1
|
4485 / 2720 / 485
Регистрация: 28.04.2012
Сообщений: 8,585
|
|
12.08.2017, 21:04 | 4 |
Хороший язык, только, к сожалению, очень вяло развивается. Из более современных и живых альтернатив — F#, да. pycture вроде его хорошо знает.
Из отличий от Хаскелла: – не ленив (есть пакеты для ленивости) – нет классов типов, для Ad-Hoc полиморфизма используются либо функторы (параметризируемые модули) (хотя они более «жирные» что ли, т.е. как модули/пакеты в других языках; читал рекомендацию не злоупотреблять ими, плохо на производительности сказывается) либо объекты (след. пункт) – явным образом поддерживает ООП с классами и объектами, причём как по мне, так сделано это лучше, чем во многих распространённых языках с Simula-подобным ООП, т.е. C++, Java, C#. Например, тип объекта и класс в Ocaml — разные вещи, классы используются фактически только для организации иерархии наследования, но типом объекта является его интерфейс (набор публичных методов), соответственно объектный тип можно объявлять обычным образом через type, и объекты создавать без использования классов. – нет такого строгого выделения чистых и не чистых (IO) функций. Обычное значение, объявленное let x = 123 является иммутабельным, но let x = ref 123 уже нет и если функция ссылается на такой внешний для неё x, из сигнатуры функции об этом не узнать (конечно, в Хаскелле тоже можно спрятать IO внутрь какого-то своего типа и никому об этом не говорить, но это уже другое), поля объектов так же мутабельны, есть цикл for. – AFAIK в Хаскелле система типов ушла за пределы возможностей Хиндли-Милнера, а с дополнительными фичами GHC — очень далеко ушла. В Ocaml'е же (если не считать объектов, наверное), чистый Х-М (или типа того), поэтому есть некоторые ограничения, а ля в типе функции нельзя использовать перерменные типы kind'а больше чем (*), т.е. в Хаскелле можно написать функцию f :: m a -> m a где m и a — переменные типы, при этом тип m имеет kind (* => *), а в Ocaml'е нельзя, только f : list 'a -> list 'a где list — конкретный тип. Но тут я могу ошибаться, да и давно Ocaml не смотрел.
2
|
4485 / 2720 / 485
Регистрация: 28.04.2012
Сообщений: 8,585
|
|
12.08.2017, 23:54 | 6 |
2
|
$ su
|
|
13.08.2017, 01:40 [ТС] | 7 |
Хорошо что есть такая возможность, а использовать её или нет на совести разработчика.
Да я читал, но мне не хотелось бы завязываться на .NET, а OCaml привлек более менее лаконичным синтаксисом(и плюшками которые вы перечислили) и то что он собирается в итоге в натив, другой вопрос я читал что у него что-то не так с много поточностью(хотелось бы узнать может уже все ок ибо источникам 3+ года). Спасибо что отозвались было приятно почитать.
0
|
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
|
|
20.08.2017, 17:14 | 9 |
нормальная вещь.
по сути золотая середина между функциональщиной и императивщиной. препроцессор camlp позволяет вытворять чудеса с синтаксисом https://camlp5.github.io/doc/htmlc/scheme.html не сидел бы на нете, возможно занялся бы этим плотно. f# ушел довольно сильно в бок. сравнивать их сейчас особо смысла нет.
1
|
20.08.2017, 17:14 | |