LINUX.ORG.RU

выбор языков

 


1

3

этот баян спрашивают регулярно, можно я тоже разок спрошу?

короче, какие технологии-языки выбрать для кодинга на следующую пятилетку (десятилетку для дальностерлов)? Область - бэкенд (веб)сервисов.

есть популярное (благодаря самизнаетекому) мнение, что это Erlang+OCaml. Эрланг для бизнес-логики и коммуникаций, а окамл для математики.

Мне это разделение нравится, потому что в лучших говнокодерских традициях (на которые недавно нападал subwoofer) имхо лучше почти весь проект написать на нормальном удобном языке, а критические места переписать на чем-то быстром. И это «что-то быстрое» конечно не Си, Си остается как самый последний вариант, отступать некуда за нами Москва.

Тут бы и закончить, иди ботанить эрланг с окмлом. Но.

Живость проекта окамл непонятная. Вот смотрю на сайт Ирины, а там какой-то веб 1.0. То есть люди не позаботились даже чтобы потратить день работы дизайнера. Коммьюнити, общающееся в почтовых рассылках. Не то чтобы фейл, но звоночек - встречают по одежке. И как логичный результат — в массах его никто не знает, совсем. Короче, в народ эти люди не стремятся, на «язык будущего» он не годится.

Но раз мы говорим о суровой практике, интересно узнать живость собственно по коммитам, инновации в языке, появление новых батареек итп, как с этим? Не окажется ли что вложился в штуку, которую через пару лет никто кроме тебя уже юзать не станет, и перейдут на что там сейчас популярно (и только 3,5 анонимуса помнят)?

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

Есть ли еще какие-то хорошие варианты? По математике - Go, Rust, что-то такое? По процессингу - какие-нибудь язычки поверх эрланга, или может кто-то реально асилил использовать clojure?

Просто сейчас вот как получается, на словах-то мы все инноваторы, а на работе пишем на Java, C++ и JS. Бывают странные случаи, когда человек 10 лет писал на Java но так и не прошарил ее на уровне специалиста, тупо потому что он ее не любит (а любит лисп). Надо с этим как-то кончать что ли.

★★★☆☆

OCaml - весчь. Ну и к Go надо присмотреться. Они там женерики обещали запилить.

anonymous ()

Эриксон, который тоже не шевелится двигать язык в массы

не сказал бы, в год проходит 5-7 конференций, включая ежегодную Erlang User Conference, 21-я по счету которая пройдет в этом году Стокгольме, где выступают не только Elixir-фрики, но и например главдев Ericsson Erlang/OTP Team, как это было в прошлом году.

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

женерики обещали запилить

да ну нафиг? Накормили завтраком или что-то сделали? Они же везде писали, что женерики не нужны

stevejobs ★★★☆☆ ()

ocaml вполне себе жив, в opam'e все необходимое есть и шевелится. то, чего нет элементарно пишется (биндинги к сишным либам и пр.). по выразительности уступает лишь haskell'у, местами по вычурности синтаксиса свернет мозги любому. из минусов отмечу просто никакущую поддержку кросс-компиляции, версию 4.0.1 для x86_64 -> armv5, как я не выделывался , я так и не завел.

ну про эрланг много говорить не нужно - синтаксис, да странноватый и непривычный, OTP рулит и педалит, отличный вариант для бэкэнда в связке с ocaml'ом или с.

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

окей, а какие есть альтернативы? какие ты пробовал?

stevejobs ★★★☆☆ ()

Окамл да, дохловат. Эрланг — динамика во все края, что ОЧЕНЬ плохо, особенно если помножить на let it crash.

Пиши на Scala и учи Haskell.

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

тыкал еще python и haskell, но от них отказался. python сразу был отсеян за тормоза, haskell чуть позже, когда меня в край затрахали монады и неудовлетворительная скорость работы (отставание от с-версии в 3-4 раза) - в этом плане ocaml дает ему фору ибо спокойно дает без лишнего мозготраха заюзать мутабельность и императивщину там где это нужно.

посещали мысли go заюзать, но взглянув на него решил что проще erlang + drivers/ports для производительности там где это нужно.

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

Эрланг — динамика во все края, что ОЧЕНЬ плохо, особенно если помножить на let it crash

Лол, учитывая, что ему это обычно в плюсы ставят.

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

rust это где синтаксис еще более глазовыжигающий чем в c++?

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

зачем, если есть православные erlang, ocaml и haskell?

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

Хорошо, пусть будет Scala+Haskell. Пишем на скале, математику полируем на хашкеле. Хотя я не совсем понимаю, зачем именно Scala, она не выглядит как человеко-ориентированный язык.
Возникают тут же вопросы:
* Как быстро можно обучить команду хашкелю. Допустим, команда - обычные джависты, которые из «не си»-языков видели только лишп когда учились в институте.
* Как быстро можно обучить команду шкале. (ну тут уже наслышан - чуваки из Эксельсиора говорили, что втянулись за три недели).
* По обоим - нужны ли реальные специалисты, или хватит знания поверхностного апи, чтобы сразу рваться в бой и фигачить бизнес-логику.
* Какое время требуется на написание перехода между двумя платформами. То есть, могу ли я дешево ткнуть в любое место Scala-кода и сказать: а теперь вот этот кусок станет на хашкеле! Если писать переход каждый раз мучительно больно, то это не похоже на вариант.
* Сколько ресурсов это сожрет. Как обмениваться данными. Готовые протоколы?

stevejobs ★★★☆☆ ()
Последнее исправление: stevejobs (всего исправлений: 2)

Я бы взял что нибудь популярное сейчас и Go.

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

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

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

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

очевидно, что просто начать на ней писать - благо спасает что платформа одна и все либы те же самые.

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

для haskell'а спец нужен однозначно, для scala - не обязательно.

* Какое время требуется на написание перехода между двумя платформами. То есть, могу ли я дешево ткнуть в любое место Scala-кода и сказать: а теперь вот этот кусок станет на хашкеле! Если писать переход каждый раз мучительно больно, то это не похоже на вариант.

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

* Сколько ресурсов это сожрет. Как обмениваться данными. Готовые протоколы?

Не слышал, чтобы скалу с хаскелем скрещивали в одном проекте.

anonymous ()

По математике - Go, Rust, что-то такое?

Haskell, Rust, Kotlin. Для любителей старины Fortran.

По процессингу - какие-нибудь язычки поверх эрланга

Erlang, Cloud Haskell, Skala (Akka), Rust.

outtaspace ★★★ ()

Haskell + C уже называли? Просто если называли, то не понятно, почему тред не отмечен как решенный.

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

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

http://www.well-typed.com/services_training/

можно найти дешевле.

Но хотя бы один спец в команде все равно будет нужен.

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

Я инвестировал в связку: C + CL + Erlang

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

расскажи, зачем CL и Erlang одновременно. Как они делят задачи?

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

Просто сейчас вот как получается, на словах-то мы все инноваторы, а на работе пишем на Java, C++ и JS

This. Ещё python и баш

vertexua ★★★☆☆ ()

У эрланга синтаксис странный наверное потому что никак не осилить emacs?

Нормальный у него синтаксис - то что нужно. Даже можно сказать, что правильный.

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

В целом, есть elixir, но мало знаком с ним, хотя идея выглядит интересно...

Синтаксис эрланг, это как санитар леса...

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

Протокол - два сервака-процесса, а между ними Protobuf/Thrift

vertexua ★★★☆☆ ()

Жаба, C# и даже пых-пых будут актуальными ближайшие 5 лет. А так пиши на чем понравится, хоть на лиспе.

peregrine ★★★★★ ()

Javascript, потому что за 5 лет мартышки такого понакодят, что возникнут тысячи новых рабочих мест.
Go, для души.
Java, есть куда сбежать с веб девелопмента.
Php, то что мертво умереть не может. Ну и плюс первый пункт.
П.С.
А вообще, ты уже не мальчик, через 10 лет будешь взрослым дядей, лучше либо уходить в специализацию, либо дальше в управление.

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

Да, закралось такое же сомнение. Если уж выбирать какой-то человеко-удобный человеко-понятный язык, то это должно быть что-то совсем более другое, чем Scala. По описанию мне нравится Clojure, но непонятно можно ли на этом вообще кодить по-нормальному, в смысле толпой ынтерпрайзный код (те кто продают идею использования кложура, вот все эти записи выступлений с ютуба, почему-то как один юзают ее на написанных в одно рыло прототипах, это никакой не показатель).

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

расскажи, зачем CL и Erlang одновременно. Как они делят задачи?

На ерланге очень _неудобно_ писать, что-то кроме сетевых сервисов, поэтому использую его только для раскидывания сообщений по бэкендам (тут Ерланг рулит), а там использую CL, если логика довольна сложна и не надо экономить на спичках, иначе — Си. В основном пишу порт-драйвер, иногда ноду. У меня есть самописный framework на CL :) генерирующий встраиваемый порт-драйвер, как отдельный процесс либо linkedin-драйвер (нужен коммерческий CL для генерации DLL-ек). Ерланговские термы транслируются в лисп типы автоматически.

Oxdeadbeef ★★★ ()

любит лисп. Надо с этим как-то кончать что ли.

Да.

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

Как быстро можно обучить команду хашкелю.

бизнес-логику.

бизнеск-логика на хаскеле, я не ослышался?

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

На ерланге очень _неудобно_ писать, что-то кроме сетевых сервисов

наверное имелось в виду, что в_эрланге_очень_неудобно_именовать_модули_и_хотелось_бы_пространств_имен

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

Как быстро можно обучить команду хашкелю.

Жабиста легко обучить хаскелю. Они не слишком сильно отличаются, на самом деле. Все та же многословность, BDSM, статика. Жабиста трудно обучить языкам типа руби, смоллток, практически невозможно, мозг уже вывихнут, а хаскель — самое то.

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

наверное имелось в виду, что в_эрланге_очень_неудобно_именовать_модули_и_хотелось_бы_пространств_имен

С этим было бы, конечно, гораздо лучше.

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

Хотя есть еще довольно вкусный LFE: http://lfe.io

В бою еще не использовал, но возможно воспользуюсь в будущем.

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

Как быстро можно обучить команду

Никогда не задумывался.

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

могу ли я дешево ткнуть в любое место Scala-кода и сказать: а теперь вот этот кусок станет на хашкеле

Scala работает на JVM. Haskell на JVM не работает.

Сколько ресурсов это сожрет. Как обмениваться данными. Готовые протоколы?

Зависит от задачи. А что, где-то не так?

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

Scala работает на JVM. Haskell на JVM не работает.

и чо? В стандартном формате в пожатом виде кидаешь по локалке. «Ткнуть в любое место кода и сказать - вот этот кусок станет на Х!» значит - переписать его на другом языке, обернуть в отдельный сетевой сервис, установить протокол, настроить взаимодействие (что будет, если одна из нод упадет или захлебнется), итп. Вот и инетресна реальная практика, как это делается, какие средства используются. Что-то мне подсказывает, что тот же протокол не будешь менять «в зависимости от задачи» на каждый чих, надо отработать железно работающую систему и юзать ее везде как общее решение.

stevejobs ★★★☆☆ ()

D не рассматривал? Имхо приятный язык.

Deleted ()

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

anonymous ()

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

umren ★★★★★ ()

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

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

динамика во все края, что ОЧЕНЬ плохо

Есть удачные примеры, доказывающее это?

mv ★★★★★ ()

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

cab ★★★★ ()

для математики

Вот тут каждый второй высказывает своё мнение - на чём лучше писать «математику». Что за математика то?

Для ЧМов (линал, дифуры и т.п.) есть куча либ и писаны они на С/С++/Fortran. Самому писать - это надо быть сильно упоротым. А даже если, надо ясно понимать, что ЧМы это очень грязный, тупой, оптимизированный в каждом чихе код, никто в здравом уме на модных функциональных языках такое делать не будет.

Юзать готовые либы ЧМов можно откуда угодно.

Если не ЧМы, а так, stateless жонглирование какими-то application specific стуктурами данных (названное для солидности «математикой») - ну да, может быть, какой-то профит от ФП будет. Но в функциональном стиле можно писать почти на чём угодно! Хоть на Java, хоть на C++, хоть на C#. В реальном мире большой разницы по сравнению с более заточенными под ФП инструментами нет. Чуть более громоздко, чуть менее удобно где-то. Но это фигня! По большому счёту всё определется уровнем программиста, а не языком, если язык не совсем УГ.

Короче, C/C++/Java/C#/JS/Python - для вменяемого программиста будут годными инструментами ещё очень долго. Гики могут продолжать дрочить на что угодно.

Для общего развития знать экзотические языки очень полезно - многие идеи из них можно с успехом использовать в мейнстриме, пусть и не так красиво. И отдельные успешные проекты на экзотических языках, конечно, есть. В принципе можно задаться целью и найти работу или запустить стартап на том же Haskell. Но это уже сознательный выбор узкой ниши. Кто готов - пожалуйста.

Кого не устраивает узкая ниша - C/C++/Java/C#/JS/Python.

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

энергию anonimous'а да в верное русло бы. А то он занимается какой-то фигней, сравнивает Io с JS.

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

Для ЧМов (линал, дифуры и т.п.) есть куча либ и писаны они на С/С++/Fortran. Самому писать - это надо быть сильно упоротым.

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

Но в функциональном стиле можно писать почти на чём угодно! Хоть на Java, хоть на C++, хоть на C#.

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

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

В смысле, писать-то можно, но получается лютый треш и тотальный ахтунг

Это если руки из жопы и нет ясного понимания, в чём профит ФП.

Профит ФП не в том, чтобы вместо цикла из двух строчек зафигачить reduce/map/filter etc (как думают некоторые придурки) или заменить каждый цикл на хвостовую рекурсию. _Очень_ локальный state не есть большое зло.

Абсолютно пофиг на локальные не-const переменные и циклы, если они в рамках функции из 10 строк. Если функция уже не 10, а 100 строк и там есть переменные / вложенные циклы - уже совсем не пофиг. Такую функцию надо мочить и делать декомпозицю, если её логика хоть сколько-нибудь нетривиальна, причём докомпозицю делать так, чтобы максимально локализовать state (или вообще убрать его).

«Зло» с т.з. ФП - это когда state нелокален, и чем более нелокален, тем более зло. Нелокальность начинается от слишком большой функции и заканчивается (в пределе) глобальными переменными.

Функции с const-параметрами, возврат результата только через return - ещё один элемент функционального стиля в мейнстрим языках (в некоторых случаях излишний и дорогостоящий, но тем не менее). Опять же локализация state.

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

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