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)

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

Я со скалой знаком секунд 40: попросили найти ошибку в коде - подошёл, превратил код в джаву (да да, скала может), уполз к себе.

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

С сишными указателями на функцию знаком. Я не так хорошо знаком с фп: прочитал книжку по Erlang, практически без практики (ну, если считать Erlang фп), понравилось чуток иное построение программ: попробовал в хаскель, обжёгся на некомпилируемости примеров из гугла, пошёл искать более опытных на лоре.

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

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

В большинстве примеров нужно поправить максимум одну-две строки, это не та проблема.

hateyoufeel ★★★★★
()

D заявляет себя мультипарадигменным, может, и для функциональщины подойдёт? Я не особо в теме, но там, например, есть слово pure для функций.

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

Слово pure не тру, слово dirty - тру

Не в том суть. Суть в том, что если функция pure, то она, по хорошему, и в трассировочный лог уже ничего писать не может. Да и невинное выделение памяти может сопровождаться таким побочным эффектом, как крах самой программы и даже операционной системы. Поэтому понятий чистоты много.

den73 ★★★★★
()
Ответ на: Go от anonymous

Go, конечно, замечательный язык, с удовольствием на нём пишу, но ТС он не подходит. Несмотря на то, что в нём есть ФВП и лямбды, за иммутабельностью нужно следить: большинство типов при передаче по значению, а не по ссылке будут скопированы, но это не касается ссылочных типов (slice, map), которые нужно копировать явно. Сопоставление с образцом отсутствует, также как дженерики и параметрический полиморфизм. Последний можно реализовать с помощью рефлексии, но это будут проверки типов в рантайме, что снижает производительность, и в целом является неидеоматичным кодом. Go не позиционируется как функциональный ЯП.

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

мне одному кажется что люди всерьёз обсуждающие 2,3 пункт в «unordered list» требований, мягко говоря далеки от ФП ?

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

Бинарник не будет нативным, внутри все равно cil.

Компилирует, в бинарник, что ещё надо? ТС о нативности не говорил.

Тем более памяти обычно ест меньше, чем scala.

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

D тоже интересен. Но интересного много, а времени мало. Малость знаю джавку, а она подобна Dlang, хоть и jvm а не бинарь. Поэтому dlang попозже.

Deleted
()

Всё ещё программа работающая за дорого ценнее программы пока не работающей никак.

На самом-то деле нет никакой связи между нативностью кода и скоростью разработки - Common Lisp тому доказательство. Язык более динамичный, чем какой-нибудь пистон, не говоря о Яве. При том компилирует в нативный код.

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

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

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

С телефона лень печатать лишние символы. Ради Вас поправлю (если еще можно).

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

ngen, crossgen, планируется поддержка в .NET native, что ещё нужно?

Плюс --aot=full в mono.

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

Абстрактные примеры абстрактны

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

Twitter. Появился на месяц раньше конкурентов, был написан на Ruby on Rails, тормозил под нагрузкой, нередко даже демонстрировал fail whale, то есть падал.

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

Может быть. Но первое впечатление «по одёжке» испортило.

А впечатление от C тебе ничего не испортило? Примеры из K&R так же не компилируются, но ты же об этом не ноешь.

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

то язык всё равно никак не относится к ФП?

А по какому определению его туда относить? Основываясь на мнении Васи Пупкина?

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

Например?

Например там в половине примеров отсутствует тип возвращаемого значения у функции, что давно запрещено стандартом.

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

У меня второе издание K&R: практически все компилируется. Нет не компилирующихся в начале.

Deleted
()
Последнее исправление: merhalak (всего исправлений: 1)
Ответ на: Абстрактные примеры абстрактны от Camel

Что-то мне думается, что в случае Twitter, livejournal, vkontakte, facebook, icq, skype и т.п. главное - это бюджет, связи в спецслужбах (ибо делается это всё для сбора персональной информации прежде всего, а не для денег) и еврейские приемчики на раскрутке.

Например, я ещё чуть ли не в конце 90-х пользовался программой speakfreely, для разговоров через интернет. Она опередила скайп ну, скажем, лет на 5. И трафика она ела меньше, чем скайп. И не падала. Объясни, где она и почему вместо неё стал скайп?

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

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

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

Даже с -std=c11 и gcc, и clang только выдают предупреждение. Да, новый стандарт запрещает, но я сомневаюсь, что компиляторы перестанут принимать такой код в каком-то хоть сколько-нибудь обозримом будущем. Согласись, не тянет на нарушение обратной совместимости в роде того, о чём говорил ТС.

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

Это если ты компилируешь с -std=c11, если правильно помню.

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

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

C++ я... ну почти изучаю. Вынужден в ВУЗе. Это не для души - копаться в куче нестиранного нижнего белья (плюсы, при хорошей обратной совмесимости похожи на кучу грязного белья из гардероба «модницы» Бьярне).

Хотя использовать можно, да. Но боюсь через 100 лет там будет тысячетомник стандарта, из которого 999 томов - unsafe и deprecated

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

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

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

Вы, кажется, путаете C11 и C++11. Вот, ради интереса проведите опрос на лоре, кто каким стандартом Си пользуется. Ставлю на лидерство C99 или ANSI C.

Deleted
()
Ответ на: Абстрактные примеры абстрактны от Camel

Twitter.

Вы игнорируете вещь, на которую было прямо указано: 10 лет назад ситуация выглядела несколько иначе. Twitter начался почти 10 лет назад, в 2006-ом. С тех пор утекло очень много воды. Например, рынка смартфонов в 2006-м году практически не было. Крупные Интернет-компании не так смотрели на энергозатраты своих дата-центров. Хайпа вокруг IoT не было, про умные дома и пр. вещи говорили значительно меньше.

Что поменялось с тех пор? Google создал Go дабы заменить Python, мол программы на Go пишутся так же быстро, как на Python-е, а работают в разы быстрее. Facebook занимался трансляцией PHP в C++, а потом взялся за HHVM, т.к. эксплутация тормозного PHP на сотнях тысяч серверов — это слишком накладно. Программы для iOS разрабатываются на языках Objective-C и Swift, в которых даже GC нет (т.к. в Apple считают, что это плохо сказывается на ресурсоемности приложений). Эксперты в области IoT говорят, что для того, чтобы умные сенсоры нашли массовое применение, должны быть устройства, которые смогут работать от одной батареи 10-15-20 лет.

В общем, ситуация меняется. А обсуждаемые здесь ФЯ, вроде Haskell и OCaml позволяют писать так же быстро, как какие-нибудь Ruby или Python, но при этом дают и большую производительность, и больший контроль за ошибками со стороны разработчика.

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

Обратную совместимость. Но и её делают вкусно (как в чашечке Java). Или это я уже пристрастился.

Обратная совместимость в плюсах больно бьёт по пальцам в разнице ручного/автоматического управления памятью. Забываю, что где писать. Да, это мои личные тараканы. Но в той же сишке нет инициализации = () ={} {}. Я в курсе, что последние две выполняют сужение множества (char'у 1e-2 не присвоишь). Но выглядит мерзопакостно.

Или использование в стандартной библиотеке naming_with_underlines, когда большинство библиотек переехало на camelCase (субъективщина).

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

Вы, кажется, путаете C11

Нет, не путаю. Если ты хочешь типы из stdint.h, atomics и прочие ништяки, тебе нужно минимум C99 (для atomics - C11). Но в этих стандартах запрещён K&R style объявления функций.

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

«={}» в сях есть, а насчёт управления памятью — это действительно твои тараканы, с практикой всё запоминается. Я бы не сказал, что полное отсутствие автоматического управления ресурсами как в сях — это преимущество.

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

Недавно на опеннете в новостях было про то, что RH хочет выкинуть _s из стандарта. Бедная gets.

Deleted
()

Из всего зоопарка подходит разве что F#. Компилируемый, строгая статическая типизация, язык не портят сменой синтаксиса (не уверен на 100%, но было так).

Только учти, что это либо .Net, либо Mono.

Если использовать под виндой и не мучать себя, то с ним вообще всё супер, т.к. поддержка в Visual Studio имеется, т.к. F# пилят ребята из MS Research.

А самое вкусное, что есть в F#, это возможность юзать .Net и все его плюшки. Т.е. если сильно сильно будет надо, то можно даже с C++ его подружить через unmanaged код или через C++/CLR (а это большой плюс, т.к. иногда бывает надо). Т.е. захочешь GUI, Web, графон или ещё что - это будет в том или ином виде.

По F# есть книжки и на русской, и на английском. Причём относительно свежие.

Общем, ты пойми, а накой оно тебе вообще надо и ищи язык под конкретную задачу. Если же тебе поиграться в функциональщину со строгой статической типизацией - ну бери Haskell (если хочешь больша жести и матана) или F# (если хочешь батарейки и функциональный язык который менее строг, но имеет возможность бескостыльно юзать обычный код).

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

Norgat ★★★★★
()

Сильная статическая типизация

В SBCL типизация используется для оптимизаций и проверок типов, прям вывода нет. По остальным пунктам проходит.

Компилируемый

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

loz ★★★★★
()

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

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

Например там в половине примеров отсутствует тип возвращаемого значения у функции, что давно запрещено стандартом.

А у меня компилирует.

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

Да, просто на лекции по экономике я это проверить не мог. Увы. Сейчас уже проверил.

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