Re[9]: какой ЯП учить дальше?
От: maxkar  
Дата: 09.12.14 10:46
Оценка: 52 (4) +1
Здравствуйте, niXman, Вы писали:

X>а Haskell чем не подходит?


Год назад серьезно (несколько месяцев) с ним игрался и примерял под свой личный проект. В результате ушел на scala. Причины:
* Haskell на каком-то коде падал в compiler panic. Что-то внутри с матчами не проходило. Код был неправильный, но я все таки ожидал ошибки компиляции а не падения компилятора.
* Среда сборки и управления проектами (cabal). Я обожаю пилить приложение на кучу мелких-мелких модулей (порядка 1000 строк а то и меньше). Писать под каждую из них полноценный cabal-конфиг с версионированием и прочими плюшками — это кошмар. В sbt у меня подобное делается в одну строку: lazy val some_lib = library("lib/core/some_lib", dep1, dep2, dep3).
* Отсутствие нормальных ide и сложности с придумыванием цикла разработки.
* Проблемы у монад. Особенно при попытке типизировать монаду типом ошибки. fail :: String -> m a — это фейл (ибо не осилили строгую типизаци ошибок). Как только мы начинаем попытки использовать вместо этого Either Error a начинаются пляски для переоборачивания типов ошибок. Открытые case classes в scala позволяют обойти эту проблему.
* Реальным шоустоппером стал NIH (not-invented-here) синдром. Вместо того, чтобы использовать какую-нибудь сишную библиотеку и сделать к ней биндинг, они реализуют функциональность и при этом лажают.
Prelude> read "123E-12312312" :: Double
0.0
Prelude> read "123E-123123412341234123412341234123412" :: Double
Infinity
Prelude>

Вот этот вот пример был решающим. Сейчас я проверял в онлайне на ghc.io. Не знаю, какая версия там используется, но судя по всему, еще не пофиксили багу. python, java и c корректно дают нули в обоих случаях. Обходить баги в стандартной библиотеке мне как-то совсем не интересно.
Re[7]: какой ЯП учить дальше?
От: kaa.python Сингапур http://sysdev.me/
Дата: 09.12.14 11:42
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Там большой проект и большая команда, все нормально


А при этом ты можешь утверждать что использование такой экзотики было оправданно с учетом созданных проблем с поддержкой и поиском людей на развитие? А то я экзотику люблю, но у меня ну очень скептичное отношение подобным вещам в продашне.
Re[8]: какой ЯП учить дальше?
От: jazzer Россия Skype: enerjazzer
Дата: 09.12.14 12:24
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Здравствуйте, jazzer, Вы писали:


J>>Там большой проект и большая команда, все нормально


KP>А при этом ты можешь утверждать что использование такой экзотики было оправданно с учетом созданных проблем с поддержкой и поиском людей на развитие? А то я экзотику люблю, но у меня ну очень скептичное отношение подобным вещам в продашне.


Да, вполне могу.
Потому что в нашем банке то же самое, только самопальное (и язык, и экосистема).
Причем язык функциональный, потому что система представляет собой по сути мега-Excel с формулами в ячейках таблиц.
Так уж лучше Хаскель — народу на нем пишет на порядок больше, чем на нашем самопале, и найти замену легче в случае чего.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: какой ЯП учить дальше?
От: DarkEld3r  
Дата: 09.12.14 13:09
Оценка: +1
Здравствуйте, niXman, Вы писали:

X>как быть?

Если именно "сразу использовать в работе", то раст не советую, хотя сам как раз изучаю этот язык. Если отбросить нестабильность, то "всё здорово, но есть нюансы". Впрочем, это может быть последствием ломаемых привычек.

За хаскель тоже брался как-то, но цели были изначально другие — расширить кругозор. Эта цель была выполнена, да и на стиль написания кода это повлияло. Но мне так и не стало "комфортно" писать на этом языке. Со стабильностью всё хорошо (вроде), но если тебе так критична скорость, то копнуть придётся поглубже.
Ну и если проекты писать надо не одному, то не уверен, что остальные с энтузиазмом воспримут идею перейти на хаскель.

Мне кажется, что ты цепляешься за "нативность" — я и сам такой. Но ничего примечательного, кроме перечисленного, вроде нет. И если хочется "сразу в продакшн", то тоже питон предложу.
Re[10]: какой ЯП учить дальше?
От: DarkEld3r  
Дата: 09.12.14 13:22
Оценка:
Здравствуйте, maxkar, Вы писали:

M> * Среда сборки и управления проектами (cabal). Я обожаю пилить приложение на кучу мелких-мелких модулей (порядка 1000 строк а то и меньше). Писать под каждую из них полноценный cabal-конфиг с версионированием и прочими плюшками — это кошмар. В sbt у меня подобное делается в одну строку: lazy val some_lib = library("lib/core/some_lib", dep1, dep2, dep3).

Я так понимаю, что это проблема только если модули должны шариться между проектами. Иначе достаточно в конфиге проекта перечислить модули (в other-modules) и всё.
Re[11]: какой ЯП учить дальше?
От: Abyx Россия  
Дата: 09.12.14 13:49
Оценка: 1 (1) +1 :)
Здравствуйте, niXman, Вы писали:

X>еще раз посмотрел на Go. нет, какой-то не универсальный ЯП, и с большой склонностью под веб-сервисы, ИМХО...


не надо Go, он ужасен.
Обобщенного кода нет — значит нет ни алгоритмов ни контейнеров (например set<T> делается через map[T]bool)
Почти все функции возвращают больше одного значения, а значит нельзя написать f(g())
Есть боксинг в interface{}, но с ним есть гора граблей типа если есть "var x interface{} = nil", то "x != nil"
и еще куча всякой хрени. плохой язык.
In Zen We Trust
Re[7]: какой ЯП учить дальше?
От: Sinix  
Дата: 09.12.14 14:30
Оценка:
Здравствуйте, jazzer, Вы писали:

U>>А Lisp — нашевсё.

J>фускобкифу

((((забирай))((()((они()(даже()))))почти((())))(сбалансированы)(:))

*2admin: У вас там парсер сломался, в конце должно быть "::", не ":"

P.S. И да, there's an xkcd for that.
Re[6]: какой ЯП учить дальше?
От: ins-omnia СССР  
Дата: 09.12.14 14:38
Оценка:
Здравствуйте, uncommon, Вы писали:


U>Haskell — теоретическая фигня. А Lisp — нашевсё. Особенно Clojure. Он весь такой тёплый и ламповый.


Т.е. игрушка для умников. Или на нем уже что-то хорошее написали (очередная библиотека комбинаторов не считается)?
Откуда же его [независимый суд] взять, если в нем такие же как мы? (c) VladD2
Re[3]: какой ЯП учить дальше?
От: ins-omnia СССР  
Дата: 09.12.14 14:42
Оценка:
Здравствуйте, niXman, Вы писали:

X>пайтон — не вариант. я говорю о компилируемых в нативный код языках.


en.wikipedia.org/wiki/PyPy

PyPy is a Python interpreter and just-in-time compiler

Откуда же его [независимый суд] взять, если в нем такие же как мы? (c) VladD2
Re[12]: какой ЯП учить дальше?
От: chaotic-good  
Дата: 09.12.14 14:48
Оценка: +1 -2 :)
A>не надо Go, он ужасен.
A>Обобщенного кода нет — значит нет ни алгоритмов ни контейнеров (например set<T> делается через map[T]bool)
A>Почти все функции возвращают больше одного значения, а значит нельзя написать f(g())
A>Есть боксинг в interface{}, но с ним есть гора граблей типа если есть "var x interface{} = nil", то "x != nil"
A>и еще куча всякой хрени. плохой язык.

Если не прелюбодействовать на код и вспомнить, что он не ценен сам по себе, то внезапно, Go становится прекрасным языком. Предельно тупой, но очень интуитивный и предсказуемый, очень сильно снижает когнитивную нагрузку, позволяя думать о задаче а не о коде. Не нужно думать о том что будет, если ф-я выбросит исключение или о ломать голову над тем, как объекты будут размещены в памяти. Отличный туллинг, ничего похожего на go-tool нет ни в одном языке. Код на Go легко читать/писать/деплоить/публиковать/использовать. Вот все эти вещи, о которых типичный программист вообще никогда не думает, но которые сильно влияют на workflow. Я не хочу перед использованием библиотеки открывать 10-ти страничный талмуд с документацией и читать о том, какие конвенции были использваны в коде данного конкретного проекта. Я хочу прочитать пару абзацев и понять как оно работает и как это использовать. Вот почему-то с Go это все возможно, с питоном тоже, со всякими хитро*** языками с "современными системами типов" это редко получается. Обычно там все печально и контрпродуктивно.

Огромное количество успешных проектов на этом языке это все подвтерждает. Нельзя написать set<X>, нужно писать map[T]bool, простите-извините, зато в проекте на Go я никогда не увижу вот такой вот булшит — http://rsdn.ru/forum/cpp/5877778.1
Автор: Alexander G
Дата: 03.12.14
(это еще light, что-нибудь посерьезнее лень искать). Подумать только, а давайте напишем такой шаблон, чтобы потом с его помощью композировать enum-ы и получать другие enum-ы а не int-ы, зато потом, если кто-нибудь попытается передать int вместо enum-а, произойдет ошибка компиляции. О том что это все вводит дополнительную сущность, не имеющую отношения к решаемой задаче и повышает когнитивную нагрузку никто не подумал, конечно же. Весь этот ваш rust исходит из вот такого же стремления писать костыли, защищающие потенциального пользогвателя от возможных ошибок, ну и из предрассудков относительно GC.
Re[7]: какой ЯП учить дальше?
От: jazzer Россия Skype: enerjazzer
Дата: 09.12.14 17:29
Оценка:
Здравствуйте, ins-omnia, Вы писали:

IO>Здравствуйте, uncommon, Вы писали:



U>>Haskell — теоретическая фигня. А Lisp — нашевсё. Особенно Clojure. Он весь такой тёплый и ламповый.


IO>Т.е. игрушка для умников. Или на нем уже что-то хорошее написали (очередная библиотека комбинаторов не считается)?


оконный менеджер xmonad, например

в одном из банков весь риск на Хаскелле считют
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[8]: какой ЯП учить дальше?
От: ins-omnia СССР  
Дата: 09.12.14 17:32
Оценка:
Здравствуйте, jazzer, Вы писали:

IO>>Т.е. игрушка для умников. Или на нем уже что-то хорошее написали (очередная библиотека комбинаторов не считается)?


J>оконный менеджер xmonad, например

Я в курсе Это было о Кложуре.

J>в одном из банков весь риск на Хаскелле считют

А ещё штангисты создают на нем спецификации для железа
Откуда же его [независимый суд] взять, если в нем такие же как мы? (c) VladD2
Re[4]: какой ЯП учить дальше?
От: niXman Ниоткуда https://github.com/niXman
Дата: 09.12.14 18:17
Оценка:
Здравствуйте, ins-omnia, Вы писали:

IO>en.wikipedia.org/wiki/PyPy

рыбят, а кто-то имеет опыт использования PyPy в реальных, критичных к производительности проектах?
по тестам на их сайте — все гут, но реальные задачи, это все же несколько другое.
Слово "совпадение" появилось после падения сов.
Re[7]: какой ЯП учить дальше?
От: andyp  
Дата: 09.12.14 20:02
Оценка:
Здравствуйте, ins-omnia, Вы писали:

IO>Т.е. игрушка для умников. Или на нем уже что-то хорошее написали (очередная библиотека комбинаторов не считается)?


Есть такая система компьютерной алгебры (CAS)- maxima. Она вроде бы на лиспе сделана.
http://maxima.sourceforge.net/index.html
Re[8]: какой ЯП учить дальше?
От: ins-omnia СССР  
Дата: 09.12.14 20:10
Оценка:
Здравствуйте, andyp, Вы писали:

A>Есть такая система компьютерной алгебры (CAS)- maxima. Она вроде бы на лиспе сделана.

A>http://maxima.sourceforge.net/index.html

1) судя по сайту не живое
2) пользовательский язык — не лисп, что как бы намекает
3) единственный живой лисп на сегодня — именно кложурь, а вот что написали на ней как раз не понятно
Откуда же его [независимый суд] взять, если в нем такие же как мы? (c) VladD2
Re[13]: какой ЯП учить дальше?
От: Abyx Россия  
Дата: 09.12.14 20:15
Оценка: +4
Здравствуйте, chaotic-good, Вы писали:

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

Нет, когнитивная нагрузка в Go может быть очень велика.
Почему например плох ассемблер? Потому что он тупее некуда — просто последовательность инструкций типа cmp, add и mov. При этом простое действие превращается в десятки строк кода.
В Go та же история — язык примитивен, по этому надо писать огромное количество строк кода.
Там где в других языках надо одно выражение типа reduce(map(x, f), g) в Go надо фигачить циклы for
Даже простые вещи типа f(c ? "0" : "1") или f(str(int(c))) превращаются в ПЯТЬ строк кода
if c {
f("1")
} else {
f("0")
}

(причем "f" упоминается два раза, и код уже не является выражением)


CG>Я не хочу перед использованием библиотеки открывать 10-ти страничный талмуд с документацией и читать о том, какие конвенции были использваны в коде данного конкретного проекта. Я хочу прочитать пару абзацев и понять как оно работает и как это использовать.


был у меня случай, мне надо было вычесть 5 минут из var t0 time.Time
естественно это делается через метод Add и отрицательный интервал
t0.Add(-5 * time.Minute)

а почему не t0 — 5 * time.Minute ? потому что в языке нет перегрузки операторов
а почему не t0.Sub(5 * time.Minute) ? потому что в языке нет перегрузки функций (имя Sub уже занято под другое действие)
In Zen We Trust
Re[14]: какой ЯП учить дальше?
От: niXman Ниоткуда https://github.com/niXman
Дата: 09.12.14 20:16
Оценка:
Здравствуйте, Abyx, Вы писали:

A>естественно это делается через метод Add и отрицательный интервал

Слово "совпадение" появилось после падения сов.
Re[9]: какой ЯП учить дальше?
От: andyp  
Дата: 09.12.14 20:35
Оценка:
Здравствуйте, ins-omnia, Вы писали:

IO>Здравствуйте, andyp, Вы писали:


A>>Есть такая система компьютерной алгебры (CAS)- maxima. Она вроде бы на лиспе сделана.

A>>http://maxima.sourceforge.net/index.html

IO>1) судя по сайту не живое


Достаточно живое. Сегодня поставил свежую версию. Да это и в их гите видно
http://sourceforge.net/p/maxima/code/ci/master/tree/

Старушка нас всех переживет.

IO>2) пользовательский язык — не лисп, что как бы намекает


Там можно на лиспе програмить. Большего сказать не могу, так как сам не пользуюсь.

Я ее использую, чтобы закрыть свои простенькие потребности в символьном вычислении интегралов или проверить уже проведенные руками выкладки.
Re[9]: какой ЯП учить дальше?
От: jazzer Россия Skype: enerjazzer
Дата: 10.12.14 00:25
Оценка:
Здравствуйте, ins-omnia, Вы писали:

IO>Здравствуйте, jazzer, Вы писали:


IO>>>Т.е. игрушка для умников. Или на нем уже что-то хорошее написали (очередная библиотека комбинаторов не считается)?


J>>оконный менеджер xmonad, например

IO>Я в курсе Это было о Кложуре.

Аа

J>>в одном из банков весь риск на Хаскелле считют

IO>А ещё штангисты создают на нем спецификации для железа

Вот-вот
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[9]: какой ЯП учить дальше?
От: kaa.python Сингапур http://sysdev.me/
Дата: 10.12.14 01:35
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Потому что в нашем банке то же самое, только самопальное (и язык, и экосистема).

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

Если мне не изменяет память, Excel отлично обходится Basic-ом в своих расчетах. А это как бы намекает на то, что использование Haskell или еще хуже своего собственного языка несколько избыточный шаг. Понятно что все сложилось исторически, но можно сделать куда проще и дешевле взяв Python или Lua в качестве вспомогательных языков. Но да, Haskel куда как интереснее, с этим не могу не согласиться.

J>Так уж лучше Хаскель — народу на нем пишет на порядок больше, чем на нашем самопале, и найти замену легче в случае чего.


Да, а еще лучше что-то простое как 3 копейки (см. выше).
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.