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)

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

На практике лично я почти не пользуюсь им.

ты очень крутой. где на тебя можно подписаться?

Проблема в том, что сопоставление - это широкая тема. Вряд ли то сопоставление, которое есть в языке «из коробки», будет подходить для всех случаев

Проблемы язычков с нереюзабельными макросами. В прогрессивных языках типа racket pattern matching тривиально расширяется на любые типы.

x4DA ★★★★★
()

к слову ats-1, он уже умет,так что меняться не будет.

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

Забываю, что где писать.

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

Это касается и претензии о большом стандарте - для изучения языка его читать не надо, есть другие книги, где и будут рассказывать как (теперь) надо делать.

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

Rust.

По твоему, он сильно функциональный?

Достаточно.

ovk48 ★★★
()
Ответ на: fix от ados

Я могу подкрепить свою позицию кое-какими источниками

Например SICP:

So long as we do not use assignments, two evaluations of the same procedure with the same arguments will produce the same result, so that procedures can be viewed as computing mathematical functions. Programming without any use of assignments, as we did throughout the first two chapters of this book, is accordingly known as functional programming.

А вот ты, только Васей.

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

Это называется определение ФП?

(defun square (x)
  (* x x))

Всё - по этому определению CL поддерживает парадигму ФП.

Кстати заметь - в стандарте хорошо уделяется внимание чистым функциям.

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

we do not use assignments

В любом языке можно не юзать присваивание. Соответственно, по твоему определению, все языки функциональные. Других нет.

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

P.S. Лиспы я бы не советовал, если ты не готов садиться за Emacs. Т.к. без Emacs это будет изврат.

Ну не удержусь от рекламы :) Я уже почти допилил свою среду, которая позволяет работать с лиспами без емакс. https://bitbucket.org/budden/clcon

Сегодня собираюсь очередной файловый релиз под офтопик выложить.

den73 ★★★★★
()
Ответ на: Ускорение ничтожно от Camel

Скорость написания ПО гораздо важнее скорости их исполнения.

Справедливо только для одноразового ПО или наколенных скриптов. Если маркетологи не постараются, тормозное ПО никто покупать просто так не будет.

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

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

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

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

Соответственно, по твоему определению, все языки функциональные. Других нет.

Все языки с функциями как объектами 1 класса — достаточно функциональные, на остальных иногда можно кодить в функциональном стиле (тот же C). Но вопрос ОПа немного о другом.

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

достаточно функциональные

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

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

Крайности зло

Справедливо только для одноразового ПО или наколенных скриптов. Если маркетологи не постараются, тормозное ПО никто покупать просто так не будет.

На самом деле мы с вами сейчас обсуждаем тему в которой обе крайности губительны, и преждевременная оптимизация, и чрезмерно упрощённое прототипирование. С одной стороны у нас примеры Twitter и Facebook, которые [были] написаны на Ruby и PHP, а другой, если бы они не переписывались на Go и не вложили много сил в компилятор PHP, то были бы в глубой жёппе.

Camel ★★★★★
()

VB.NET, без шуток. Блямбы есть, так что функциональный, строго типизированный, компилируемый, отличная обратная совместимость.

anonymous
()

Самого интересует вопрос ТС, только есть пункт 0. TrueЪ функциональный. Из него уже все остальные следуют.

Рассматриваю Idris (компилится в C и Javascript), Elixir, Elm.

Не знаю что лучше лучше|удобнее (зависимые типы, уникальные типы,монады) для лучшего понимания концепций функционального программирования

(Пункт 0 про это).

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

Тогда и Pascal ABC.Net

Правда в нём sql подобного синтаксиса LINQ нет.

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

Не знаю что лучше лучше|удобнее (зависимые типы, уникальные типы,монады) для лучшего понимания концепций функционального программирования

Типоориентированное программирование тоже стали к функциональному приплетать?

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

В любом языке можно не юзать присваивание.

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

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

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

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

В датацентрах от производительности софта зависит стоимость электроэнергии на питание и охлаждение серверов.

На питание и охлаждение вообще похрен. Может упереться в ресурсы машины. Ты с продакшеном работал-то, или в качестве продакшена - локалхост?

Да и персоналки уже перестали устаревать морально каждые 1.5 года

Ок-ок :)

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

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

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

Что посоветуете лучше, для понимания фп?

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

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

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

Иммутабельность - да.

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

Типобезопасность - вообще не причем. Есть и динамические ФЯ, и статические, но без 100% типобезопасности.

ovk48 ★★★
()

если фп в приоритете то можно erlang, clojure, rust, а если многопоточность то можно и go учить.

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

На питание и охлаждение вообще похрен. Может упереться в ресурсы машины.

Что может упереться в ресурсы машины?

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

Чем rust функциональнее, чем Nim, например?

А что в этом ниме такого функционального? Иммутабельность по дефолту, ФВП, паттерн-матчинг есть? Списки, кортежи, алгебраические типы? По-моему, нету там нихрена.

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

Nim, например

proc reverse(s: string): string =
  result = "" # implicit result variable
  for i in countdown(high(s), 0):
    result.add s[i]

Офигенно функциональный, да :)

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

Чтобы на вкус понять, чем функциональная архитектура отличается от процедурной, например.

На данный момент не слишком понимаю, чем отличается программа как функция и без состояний (одну из другой вызываем + композиция, если нужна) и от программы как процедуры и без состояний (одну из другой вызываем).

Я говорю про архитектуру, а не инструменты. Наличие lambda, map, reduce, каррирования и композиции в коде не даёт автоматически идеологически верной фп архитектуры.

Точно также как наличие классов и методов не даёт автоматически ооп архитектуру. Это просто способ организации кода. А вот если я начну работать с интерфейсами, наследоваться + переопределять то, что требуется => программа как взаимодействие объектов связанных между собой => 'это уже похоже на ооп, в моём понимании.

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

про elixir я не могу сказать ничего. Конечно я прошу прощение, но где вы прочли «многопоточность в go лучше чем в erlange»? Но вот все же отвечу, в Go возможен без усилии манипуляция каналами, минус в erlang «ждет ответа», а если ответ не приходит (заблокирован) дальше ждет,в го если ответа нет, то (бай) дальше робит. Это лишь то, что я знаю, за немногое изучение go. =) Чем rust функциональнее, чем Nim, например? --> ну на это тоже нет ответа, ибо я Nim в глаза не видела. тут скорее дело не в функциональности раста перед ним, тут дело в популярности тобиш тем, что для раст материала(инфы) больше чем для ним.

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

Для начала было бы неплохо пояснить свою терминологию :) Желательно с примерами.

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

Я не говорил, что Nim функциональный.

By default - https://www.reddit.com/r/programming/comments/2scodb/a_quick_comparison_of_ni....

Паттерн матчинг можно через макросы - https://github.com/andreaferretti/patty.

Красно-чёрные деревья - http://nycto.github.io/RBTreeNim/rbtree.html.

Алгебраические типы и возможность ФП - http://www.drdobbs.com/open-source/nimrod-a-new-systems-programming-languag/2...

goroutines - https://news.ycombinator.com/item?id=9640384

Гигиена макросов присутствует (в CL и без неё хорошо)- http://nim-lang.org/

Но всё перечисленное не делает Nim функциональным - он императивный. А Rust расстроил тем, что на легковесные потоки решили забить (изначально обещали).

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