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)

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

Scala, насколько я понимаю, вторична. Clojure - отдельный разговор - в основе языка идеи автора о конкурентности и т.д.(лисп синтаксис - дело случая).

Смущает, что Clojure родился на JVM (хотя есть ClojureScript и ClojureCLR). Вот если бы Clojure изначально в C код компилировался - тогда да.

Как-то (CL) SBCL, на первый взгляд, выигрывает у Clojure в плане изучение ФП + Emacs + с примерами из LOL можно побаловаться.

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

Concurrent Haskell - изврат для изучения ФП или нет?

Как я понял для понимания макросов, например, лучше использовать CL(SBCL), а не Template Haskell.

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

А Rust расстроил тем, что на легковесные потоки решили забить

Как будто в расте кроме отсутствия легковесных потоков больше ничего нет. Да и те может скоро запилят.

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

самое лучший помощник это ты сам. пройдись по фяп одним глазком, выбери то что по душе. плюсы: ты будешь знать общий «алгоритм» изученных яп и возможность сравнивать их. В будущем знать какой яп лучше подходит для определенной задачи. минусы: время.

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

Scala, насколько я понимаю, вторична.

Почему вторична?

Смущает, что Clojure родился на JVM

Почему смущает?

Как-то (CL) SBCL, на первый взгляд, выигрывает у Clojure в плане изучение ФП

Ты еще скажи, что коммон лисп более ФЯ, чем кложура. Спроси вон у местных лисперов, они тебе подтвердят, что это императивный язык.

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

Concurrent Haskell - изврат для изучения ФП или нет?

А обычный хаскель сейчас не concurrent что ли? Да и какая разница для изучения ФП, а не конкурентности?

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

Concurrent Haskell - изврат для изучения ФП или нет?

не изврат, но я бы сказал излишне

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

А Rust расстроил тем, что на легковесные потоки решили забить (изначально обещали).

Добавят в 2.0 уверен

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

Какие фп идеи есть только в скале? Jruby, Jython, Groovy втоиричны - есть Ruby и Python - Scala туда же записал, может погорячился - убедите.

Скажу, что кложура более ФЯ чем CL.

CL - CLOS + макросы + multiple dispatch (в кложуре и Nim тоже есть, да и в Haskell можно).

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

Как я понял для понимания макросов, например, лучше использовать

Если ты все еще про ФП, то макросы к нему не относятся.

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

Конкурентность - одно из явных преимуществ использования ФП. А явное лучше неявного =)

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

Какие фп идеи есть только в скале?

Так в хачкеле тоже нет идей, которых больше нигде нет. Он вторичный что ли теперь? :) Скала интересна не новыми мегаидеями, а тем, как там реализованы старые, плюс сочетанием ФП+ООП, плюс интероперабельностью с явой.

JRuby и Jython если чо - это и есть руби и питон, портированные на JVM.

CL - CLOS + макросы + multiple dispatch

Это не относится к ФП.

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

let s = "Aloha √"

echo s.reversed

echo s[.. ^1]

правда в сорцах reversed всё равно переменные используются.

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

Нативность и отсутствие зависимости от платформ.

а теперь подумай зачем это кложуре и что потеряли бы

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

А ещё - расширение сознания|смещение точки сборки

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

плюс сочетанием ФП+ООП

Для изучения ФП это минус, с моей точки зрения.

Если для Вас это плюс - чем плох Python

+ https://github.com/kachayev/fn.py

+ https://github.com/Suor/funcy

Или вот это https://github.com/hylang пользовать.

CL - CLOS + макросы + multiple dispatch

Это не относится к ФП.

Я и не утверждал такого. Это относится к преимуществам CL.

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

а теперь подумай зачем это кложуре и что потеряли бы

У JVM есть свои ограничения. С другой стороны, в кложуре, насколько я знаю, сборщик мусора всё равно не отключить.

Если понимать, что кложура - это идеи автора, а не лисп под jvm, то всё ok - ничего не потеряли бы.

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

Для того, чтобы выбрать - нужно обладать знаниями, каким должен быть ФЯ с точки зрения идеологии ФП.

Вот Elixir|Erlang - хороший кандидат или его динамичность только минус для изучения ФП?

Я не знаю - поэтому и спрашиваю совета здесь.

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

елексир годный для изучения, да. Только убей не понимаю накой он вообще нужен, кроме потыкать палочкой и расширить сознание. Ерланг полезнее

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

Вы будете смеяться, но в Erlang меня смущает подсветка синтаксиса (красным).

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

пройдись по фяп одним глазком

Прошёлся пот трём китам: Haskell, OCaml, SML(MLton)

Haskell - мейнстрим, что смущает + не уверен, что монады лучшее решение - спрашиваю совета у мудрецов.

OCaml - буква O отталкивает, если объекты не нужны.

SML(MLton) - объектов нет + стандартная библиотека неимперативна => Возможный кандидат!

Реквестирую совет по годности SML + идеальности Haskell для изучения ФП!

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

У Elixir есть Phoenix - замена RoR, если уеб понадобится. Из Elixir можно код Erlang свободно использовать => мягкий старт.

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

плюс сочетанием ФП+ООП

Для изучения ФП это минус, с моей точки зрения.

Это почему еще? Если что, скала в этом сочетании не ищет компромиссов, там обе парадигмы вполне друг другу ортогональны и не мешают.

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

У JVM есть свои ограничения.

Какие же ограничения JVM релевантны для типичного приложения на кложуре?

С другой стороны, в кложуре, насколько я знаю, сборщик мусора всё равно не отключить.

Млять, ЗАЧЕМ???

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

Реквестирую совет по годности SML

Нахрен не нужен. На окамле по крайней мере реальные программы пишут.

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

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

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

По годности для обучения ФП.

Понятно, что для трудоустройства нужна Scala, Clojure, F#, а не agda, idris и coq, но я про степень корелляции с основопологающими идеями фп спрашивал.

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

По годности для обучения ФП.

В плане поддержки ФП-фич окамл как минимум совершенно идентичен смлю, а кое в чем его расширяет. Ничего особо тру-ФП у смля нет.

Понятно, что для трудоустройства нужна Scala, Clojure, F#, а не agda, idris и coq, но я про степень корелляции с основопологающими идеями фп спрашивал.

У тебя есть какой-то список «основополагающих идей ФП», чтобы оценивать корреляцию языка с ними? Даже на лоре регулярно возникают споры о том, что такое ФП, из которых становится видно, что никто этого толком не знает, и кроме иммутабельности и first-class functions никто внятно к нему ничего присобачить не может.

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

Какие же ограничения JVM релевантны для типичного приложения на кложуре?

про ограничения jvm - слова создателя Nim.

What about JVM/CLR backends?
----------------------------

A JVM backend is almost impossible. The JVM is not expressive enough. It has never been designed as a general purpose VM anyway. A CLR backend is possible but would require much work.

ты пореш какую-то ахинею

Согласен. Кложура крута.

Только есть два момента:

1) Какая такая особенная иммутабельность в кложуре, в сравнении с Haskell.

2) Чья многопоточность, иммутабельность структур, макросы (нахрен гигиену!) лучше - Elixir или Clojure?

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

A JVM backend is almost impossible. The JVM is not expressive enough. It has never been designed as a general purpose VM anyway. A CLR backend is possible but would require much work.

без конкретики не стоит обращать на подобное вниманиме

1) Какая такая особенная иммутабельность в кложуре, в сравнении с Haskell.

да обычная иммутабельность, ничего особенного

2) Чья многопоточность, иммутабельность структур, макросы (нахрен гигиену!) лучше - Elixir или Clojure?

ничья, слишком разные vm чтобы сравнивать

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

монады, не?

Монады не имеют к мутабельности примерно никакого отношения. Я бы поверил если бы ты сказал IORef или TVar.

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

Вот они то меня и смущают. Являются ли монады лучшим в истории вселенной решением...

Посмотри Clean или Disciple. Там нет монад и есть линейные типы. Возможно тогда ты поймёшь почему в Haskell именно монады.

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

Это почему еще? Если что, скала в этом сочетании не ищет компромиссов, там обе парадигмы вполне друг другу ортогональны и не мешают.

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

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

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

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

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

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

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

монады, не?

Монады не вносят в язык мутабельность.

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

про ограничения jvm - слова создателя Nim.
A JVM backend is almost impossible. The JVM is not expressive enough.

Здесь написано лишь, что создатель Nim ниасилил JVM :) Я чего-то сильно сомневаюсь, что в этом языке есть какие-то ппц концепции, которые принципиально нельзя выразить на JVM (и которые реально кому-то нужны).

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

В плане поддержки ФП-фич окамл как минимум совершенно идентичен смлю, а кое в чем его расширяет. Ничего особо тру-ФП у смля нет.

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

The libraries and standard functions are dramatically different. The Caml library is very imperative, whereas the SML Standard Basis Library is more functional. For example, function composition is a top-level primitive in SML; it's not part of the Caml library. The Caml string library doesn't provide a fold function (at least not as of version 3.08). Implementations of many of the Caml List functions are unsafe for very long lists; they blow the stack.

Он прав?

У тебя есть какой-то список «основополагающих идей ФП», чтобы оценивать корреляцию языка с ними? Даже на лоре регулярно возникают споры о том, что такое ФП, из которых становится видно, что никто этого толком не знает, и кроме иммутабельности и first-class functions никто внятно к нему ничего присобачить не может.

Был бы список, было бы и понимание ФП => сам бы выбрал язык|использовал ФП в питоне, CL, Nim.

«Первоклассные» функции есть в питоне и не только (http://rosettacode.org/wiki/First-class_functions)

+ даже в дельфе возможны (http://habrahabr.ru/post/244945/)

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

Посмотри Clean или Disciple. Там нет монад и есть линейные типы. Возможно тогда ты поймёшь почему в Haskell именно монады

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

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

В Idris вместо монад эффекты ЕМНИП. Зачем нужны эффекты вместо монад или монады вместо эффектов хаскель-тусовка не может определится уже не первый год. На самом деле на уровне решаемых проблем и методов решения проблем это почти одно и тоже^W^W^W^Wочень похоже.

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

Здесь написано лишь, что создатель Nim ниасилил JVM :) Я чего-то сильно сомневаюсь, что в этом языке есть какие-то ппц концепции, которые принципиально нельзя выразить на JVM (и которые реально кому-то нужны).

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

В Nim взаимодействие с С и JavaScript отличное http://nim-lang.org/docs/backends.html (на jvm особо этим не пользовался - с JavaScript и там должно быть отличное (в 8й яве точно)).

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