LINUX.ORG.RU

Потрогать палочкой функциональщину

 


1

4

Привет всем. На фоне последних тем про всякие там лиспы и хаскелли возникло желание тоже стать «крутым» (ибо знание линукса уже крутостью не является) и поглядеть какой-нибудь из них.

А если серьезно, то хочется какой-нибудь функциональный язык, но не древний как экскременты мамонта и такой, чтобы хоть с вероятностью 0.0001 я мог бы применить в разработке. Что посоветуете? F#? Haskell? Scheme? Lisp?

чтобы хоть с вероятностью 0.0001% я мог бы применить в разработке.

Scala. Она, конечно, не чисто функциональная, зато вероятность применения не нулевая.

tailgunner ★★★★★ ()

Скалу с кложурой заюзай. Будет тебе вся java-инфраструктура искаропки. В разработке применяются.

Hertz ★★★★★ ()

Если будешь ковырять F#, то для начала будет нужна VS2010 (Голый Express подойдёт, на него можно накатить плагин с F#), т.к. в начале будет оч. туго с пониманием вывода типов.

Lisp не функциональный ЯП, хотя там можно писать и в функциональном стиле.

Я соглашусь с tailgunner, бери Scala.

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

Плюсую за scala. У нас она уже в реально работающих проектах пользуется. Правда пока в виде смеси java и scala кода.

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

Читай документацию к выбранному тобой языку, так надёжнее и практичнее. А бызовые идеи там везде одинаковы.

Ед. что, простой и понятный разбор идей функций высших порядков я видел в первом томе Мира лиспа. Правда ближе к концу.

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

Спасибо всем. Добавил в закладки fprog.ru

Ок, сейчас вот реально смотрю таки clojure vs scala. Вроде как, scala выглядит пободрее. Можно в двух словах `pros&cons` для каждого?

GreenBag ★★ ()

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

Попробуй все сам и сделай выбор.

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

Если будешь ковырять F#, то для начала будет нужна VS2010 (Голый Express подойдёт, на него можно накатить плагин с F#), т.к. в начале будет оч. туго с пониманием вывода типов.

Старьё, бери F# 3.0

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

Ох, а оно реально нужно? Или там таки уже ввели атрибут для обязательности хвостовой рекурсии (это ед. чего реально иногда не хватало).

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

Scala более классический ЯП, эдакий C#, только более функциональный. Собственно можно писать в ООП или ФП стиле в зависимости от потребностей.

Clojure лиспобразный и функциональный ЯП. Лисповость даёт макросы, а функциональщина - простоту паралелизма без косяков с изменяемыми состояниями. Но за это приходися платить большим порогом вхождения. Т.е. на Scala ты сможешь писать код через 3-4 часа, а на Clojure чераз пару дней (имеется в виду код для решения конкретных простых задачек по 1-2к строк кода).

Norgat ★★★★★ ()

C# или даже C++. Там вполне достаточно элементов функциональщины. Больше не надо.

anonymous ()

На фоне последних тем про всякие там лиспы и хаскелли возникло желание тоже стать «крутым»

Попса, уже не модно.

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

а теперь добавь fprog.ru/planet — агрегатор русскоязычных блогов по функциональщине

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

теперь читай programming in scala одерского и/или beginning scala поллака. ну и числа так 18 на курсере начнется курс по скале.

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

Scala более классический ЯП, эдакий C#, только более функциональный.

Тогда уж и Scala нифига не функциональная, но позволяет писать в функциональном стиле.

Автору. Если занимаешься вебом, то я бы выбирал между clojure и Scala, причем clojure концептуально чище и ближе к ФП. Если десктопными приложениями, то между F# и Common Lisp (LispWorks / Allegro CL). Если теориями, то Haskell. Еще может быть полезен Ocaml перед тем, как приступить к изучению Haskell.

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

в своем блоге отт постоянно исправляет этот список, добавляя всякие новые книги.

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

Ох, а оно реально нужно? Или там таки уже ввели атрибут для обязательности хвостовой рекурсии (это ед. чего реально иногда не хватало).

type Конечно = member val X = 0 with get, set //hallelujah
nCdy ()

чтобы хоть с вероятностью 0.0001 я мог бы применить в разработке

Да забей.

Что посоветуете?

Agda 2.

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

Или там таки уже ввели атрибут для обязательности хвостовой рекурсии (это ед. чего реально иногда не хватало).

Это я не понимаю, что значит «для обязательности хвостовой рекурсии» ?

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

А если не секрет, что Вы делаете с помощью CL?

В последнее время это компиляторы/трансляторы, а вообще по-разному. Иногда использую ECL в качестве встраиваемого скриптового языка.

staseg ★★★★★ ()

Scheme. И забудьте о SICP, в таком случае, читайте Sketchy Scheme, к примеру.

мог бы применить в разработке

J

buddhist ★★★★★ ()
Ответ на: комментарий от nCdy
[tailrec]
let rec foo x = ...

Типа такого, чтобы компилятор выдавал error если не удалось развернуть рекурсию в foo.

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

И ради этого ставить 3й F#? Имхо, бредово, особенно если учесть, что в ООП стиле писать легче на C#, разбавляя его модулями из F# (и не нужно никаких классов писать на F#, в крайнем случае - расширить шарповый класс).

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

В последнее время это компиляторы/трансляторы

Всегда умиляюсь таким заявлениям. Такое впечатление, что люди пишут по компилятору в месяц %)

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

Единственное, ради чего вроде стоит поставить 3й F# - провайдеры. Но я в них не особо копался, поэтому хз с чем их едят.

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

И ради этого ставить 3й F#? Имхо, бредово, особенно если учесть, что в ООП стиле писать легче на C#, разбавляя его модулями из F# (и не нужно никаких классов писать на F#, в крайнем случае - расширить шарповый класс).

не только ради этого, но F# позволяет писать ООП код, у меня нет предрассудков по этому поводу и желания для каждого класса цеплять C# проект нет тоже.

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

Всегда умиляюсь таким заявлениям.

Ну так ты известный лошок.

Такое впечатление, что люди пишут по компилятору в месяц %)

Поддержка одного большого компилятора - задача долгая. Наше местное поделие на C++ еще много человеколет сожрет. Платформа развивается, новые алгоритмы оптимизации появляются, да и язык меняется, хоть и медленно.

Кроме того, многие пишут компиляторы DSL (знаю, что опять дебилка про вавилон затявкает, ну да кого мнение дебилки-то волнует). А их действительно можно клепать по парочке в неделю.

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

Единственное, ради чего вроде стоит поставить 3й F# - провайдеры. Но я в них не особо копался, поэтому хз с чем их едят.

Действительно единственное из-за чего стоит его не ставить - это отказ руководства в обновлении студии, но я надеюсь, что это временный барьер.

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

Не, ну уж про кого-нибудь, но про tailgunner ты явно не в тему.

Да ну? Он последние десять (!!!) лет не меняется. Умнее не становится. Уже столько лет даже ocaml освоить не осиливает. Лошок и есть. Лу-у-у-узер!

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

Ну так ты известный лошок.

Я ждал тебя :)

Кроме того, многие пишут компиляторы DSL [...] их действительно можно клепать по парочке в неделю.

И компиляторы арифметических выражений.

ну да кого мнение дебилки-то волнует

Вполне очевидно, что мое мнение тебя волнует %)

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

И компиляторы арифметических выражений.

Я тебе уже говорил про типичные компилируемые DSL, используемые внутри компиляторов. Тот же Datalog, например (ты только тупо поржал, гы-гы-гы, потому что ты, очевидно, дебил). Да хотя бы на Tablegen в LLVM посмотри, дебил.

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

Еще может быть полезен Ocaml перед тем, как приступить к изучению Haskell.

Почему?

Если теориями, то Haskell.

И снова вопрос, почему?

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

Я тебе уже говорил

Мой же сосед, говорит, что пять женщин

За день имеет, а сам долгожитель,

Старше меня лет на десять, не меньше"...

- «А кто Вам мешает? И Вы говорите».

Тот же Datalog, например (ты только тупо поржал, гы-гы-гы

А вот здесь ты лжешь.

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

А вот здесь ты лжешь.

Сява, ты опупел. Искать мне пруфлинк лениво, но дело было именно так.

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

Сява, ты опупел.

Обиделся штоле?

Искать мне пруфлинк лениво

Пруфов от тебя никто и не ждал.

P.S. Был рад тебя видеть, продолжим срач в другом месте и другом времени.

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

Я трогал Haskell. Говорят, что он хорош. Чтобы потрогать лучше всего брать что-то популярное, но с не сильно упоротыми фанатами.

В разработке никак не применял. Но ту же Scala можно применить только если JVM.

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

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

Кстати, твоя неспособность отвечать за базар тоже за десять лет не изменилась. Такое же тупое ничтожество, как всегда!

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

Всегда умиляюсь таким заявлениям. Такое впечатление, что люди пишут по компилятору в месяц %)

Не понял, чему ты умиляешься.

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

Простая для новичка книжка о схеме (не умаляю крутости SICP, но он — не учебник по языку), в которой язык рассматривается во всей полноте.

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

Девальвации термина «компилятор».

«Компилятор» может использоваться как в смысле «продукт» (ГЦЦ, например), так и в более широком смысле решения задач обработки языков. «Продукты» каждый месяц я и правда не выпускаю.

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