LINUX.ORG.RU

Подскажите язык?

 , ,


2

4

Обязательно:

  1. Функциональный
  2. С отличной обратной совместимостью
  3. Компилируемый

Желательно:

  1. Сильная статическая типизация
  2. Умеет в многопоточность

Как я понимаю, Haskell отпадает по 2-му пункту. Нравящийся мне Erlang по 3-му. Какой пройдёт первые три условия? CL (SBCL) или OCaml? Как у них с обратной совместимостью?

Upd: компилируемый в бинарь

Upd: Я выслушал много Ваших мнений, мудрецы. Сворачиваем наш уютный срачик. Ща посмотрим, что пережуёт моя анальнозондированная. Надеюсь на CL, F#, OCaml (в этом порядке). Scala, Haskell и другие на старость.

Deleted

Последнее исправление: merhalak (всего исправлений: 4)
Ответ на: комментарий от Xelgun

Что ты будешь использовать при первой возможности - красно чёрные деревья или массивы? А если у тебя нет массивов, а есть только деревья?

Не понял, что ты хочешь сказать этим вопросом.

Чем Scala лучше, чем f# (ok, под mono)?

ХЗ, мне F# не сильно нравится исключительно по субъективным причинам.

Чем 2 верхних принципиально лучше OCaml?

Принципиально - пока только тем, что исполняются на ВМ с нативной поддержкой многоядерности, а на окамле соотв. рантайм никак не запилят. Ну и интегрированность в экосистему конечно решает.

Здесь есть люди (ника не помню), которые выбрали OCaml вместо Haskell -> из-за маргинальности или других причин (вопрос у ним|Вам)

Ну если бы у меня был именно такой выбор - я бы для реального промышленного приложения тоже выбрал окамл.

List comprehension ленивы в Haskell и OCaml (с батарейками) - ленивы ли они в Scala, F#, OCaml?

В скале comprehension не ленивый, т.к. списки не ленивые. В F# ленивые вроде. В окамле не знаю.

Почему большинство|многие|Вы забили на D и пишут на Scala|F#?

D-то тут еще причем?

ovk48 ★★★
()
Ответ на: комментарий от Xelgun

Чувак с переполнения стека пишет:

Так он пишет про библиотеку, а не про язык.

А если Idris взять - станет ли понятно почему зависимые типы, а не монады (или они в нём есть?)?

Зависимые типы и монады решают совершенно разные задачи, поэтому нет смысла говорить «почему ... а не ...»

Наверное он ниасилил GC отключить (тоже не знаю как).

Сомневаюсь, что в этом причина, т.к. если ему гц помешал, то он просто балбес :)

ovk48 ★★★
()
Ответ на: комментарий от ovk48

Зависимые типы и монады решают совершенно разные задачи, поэтому нет смысла говорить «почему ... а не ...»

Какие? Доказательство утверждений?

Фишка Nim в том, что виртуальная машина отключаема.

Xelgun
()
Ответ на: комментарий от gssomi

прошу прощения, я все прочитала. И вопрос возник а почему вы так боитесь динамичности? Хаскел не идеален, но если вам так хочется чистого фп и строгой статической, почему бы и нет. Да там нет ни иммутабельности, который можно заметить в кложуре, и не сказать, что его легко изучить. Но какое облегчение после того как вы его изучите, и сможете вертеть его многопоточностью, ленивыми вычислениями и т.д. Только надо к синтаксису привыкнуть

Я не боюсь динамичности. Если есть выбор между Python и Java - выбираю питон.

Вопрос в том - необходима ли статическая типизация для полноценной релизации ФП идей?

Про необходимость чистоты - молчу - нет формального описания чистоты (отсутствие сайд эффектов? а монады не для них ли?).

Любой язык поначалу может вертеть мой мозг на своём анафорическом макросе|монадном трансформере - это не проблема.

Xelgun
()
Ответ на: комментарий от KblCb

Монады не имеют к мутабельности примерно никакого отношения -> не могли бы вы просветить, что они делают? Видимо я толком не понимаю что в доках пишут.

IORef или TVar -> этих монстров не встречала.

gssomi ★★
()
Ответ на: комментарий от Xelgun

Вопрос в том - необходима ли статическая типизация для полноценной релизации ФП идей?

Нет.

отсутствие сайд эффектов? а монады не для них ли?

Нет :)

ovk48 ★★★
()
Ответ на: комментарий от gssomi

Видимо я толком не понимаю что в доках пишут.

Это в каких доках пишут, что монады нужны для мутабельности?

ovk48 ★★★
()
Ответ на: комментарий от Xelgun

Вопрос в том - необходима ли статическая типизация для полноценной релизации ФП идей?

ИМХО: Думаю одно другому отношение не имеет, то есть принципы и идеи фп можно понять даже утиной типизации. Проявление багов на уровне компиляции конечно хорошо, но место того что бы посмотреть как вы передвигаетесь, и получается ли то-что вы задумали вы будете получать ошибку при компиляции. Да и если учесть вывод ошибок того же haskella это, просто надо иметь железные нервы. Не то что бы я сторонник какого либо определенной типизации, просто мне как то бы хотелось видеть хотя бы что я делаю. а потом исправлять баги в той или иной строчке. Может я не права, и все у меня через жопу. У каждого свой путь.

gssomi ★★
()
Ответ на: комментарий от Xelgun

выбрали OCaml вместо Haskell

В свое время я выбрал окамл вместо хаскеля по ряду причин:

  • опыт из SML удачно лег на камлорельсы;
  • энергичные языки более предсказуемы в плане производительности;
  • нет особых проблем с инфраструктурой.

Опять же, за последнее время хаскель-сообщество сделало очень большой шаг навстречу потенциальным пользователям: сандбоксы есть, либы более-менее стабилизировались, инструментальные средства пилят и вот это вот всё. Так что я не знаю, что бы я выбрал сейчас.

ymn ★★★★★
()
Ответ на: комментарий от gssomi

просто мне как то бы хотелось видеть хотя бы что я делаю. а потом исправлять баги в той или иной строчке

CL с его REPL в студию!

Xelgun
()
Ответ на: комментарий от Xelgun

SML => OCaml => Haskell => Haskell|Idris|CL|Elixir ?

Это примерно как «сухое - крепленое - водка - водка/метиловый спирт/ред булл/кока-кола».

ovk48 ★★★
()
Ответ на: комментарий от Xelgun

Идрис еще слишком молодой. А для Coq уже есть библиотеки, инструментальные средства, документация, учебная литература и т. д. и т. п.

ymn ★★★★★
()
Ответ на: комментарий от ovk48

Так надо водку с редбулом брать. Пьёшь водку|Haskell, а чтобы проснуться пьёшь редбул|CL.

Вот это дельный коммент был!

Xelgun
()
Ответ на: комментарий от ovk48

возможность писать программы с побочными эффектами без нарушения парадигмы функционального программирования с помощью монад;

gssomi ★★
()
Ответ на: комментарий от gssomi

не могли бы вы просветить, что они делают? Видимо я толком не понимаю что в доках пишут.

Во-первых монады не делают ничего. Примерно также как ничего не делают числа, списки и так далее.

Во-вторых монады это такое множество типов для которых можно особым образом скомбинировать пару вычислений. Как именно выглядит скомбинированное вычисление зависит от того о какой монаде идёт речь.

В-третьих когда о монадах говорят те кто не понимают первого и второго, они имеют в виду конкретную монаду IO на базе которой сделан ввод-вывод в стандартной библиотеке. Дело в том, что Haskell ленивый язык реализующий семантику редукции графа. Из-за этого: вычисления значение которых никто не использует (например пихнуть строку в stdout) могут быть не вызваны вообще (а в отдельных случаях просто выкинуты компилятором), вызовы функции с одними и теми же аргументами (например почитать символ из stdin) могут быть пошарены, а все кому повезло выжить после всего вышеописанного могут быть вызваны в порядке зависящим от входных данных. Для ввода-вывода такое поведение не подходит. Можно записать код таким образом, чтобы порядок вызовов был бы фиксированным и этих проблем не возникло, но тогда пришлось бы руками генерить кучу бойлерплейта. Так вот комбинация двух IO вычислений (смотри пункт два, такой комбинатор есть у всех монад и у каждой свой) и есть этот бойлерплейт в виде вызова библиотечной функции. Иными словами IO просто фиксирует последовательность вызовов и больше ничего.

IORef или TVar

этих монстров не встречала.

IORef — просто изменяемая ссылка на значение фиксированного типа, TVar делает вид что он примерно что-то такое же, но на самом деле это кусок STM'а.

KblCb ★★★★★
()
Ответ на: комментарий от KblCb

хмм, понятно спасибо за понятное объяснение.

gssomi ★★
()
Ответ на: комментарий от gssomi

возможность писать программы с побочными эффектами без нарушения парадигмы функционального программирования с помощью монад;

Так в хаскелле побочные эффекты не подразумевают мутабельности. Более того - в программе на хаскелле, даже с монадами во всем поля, побочных эффектов нет, и никаких конструкций, прямо описывающих побочные эффекты тоже, это все появляется только в рантайме.

ovk48 ★★★
()
Ответ на: комментарий от Xelgun

Насколько я знаю, кложуру с Emacs сложно подружить

Нормально кстати она дружится. По крайней мере в последних версиях. Я когда настраивал, даже удивился. И автокомплит, и paredit, и репл, и документация - все работает.

ovk48 ★★★
()
Последнее исправление: ovk48 (всего исправлений: 1)
Ответ на: комментарий от gssomi

я один из не осиляторов Emacs :)

А я неосилятор ErgoEmacs =) Надо было сразу нормальный ставить.

Xelgun
()
Ответ на: комментарий от Xelgun

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

gssomi ★★
()
Ответ на: комментарий от gssomi

Сначала пытаюсь сделать что-то *правильно*, потом уже,как удобнее|шмогла.

Что за работа, если не секрет? На моей только перпендикулярно работе можно емаксами заниматься.

Xelgun
()
Ответ на: комментарий от Xelgun

веб-разработчик :), мне разрешают юзать все что угодно. «делай что хочешь, юзай что тебе считаешь нужным, главное работай и не ной». ^_^

gssomi ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.