Это копия, сохраненная 1 декабря 2017 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Теперь придумай как себя развлечь.
.
.
.
Выучил сабж полтора года назад: пара книг, пара книг по эрлангу, пара велосипедов на гитхабе, работу на нем так и не нашел. Сейчас вроде в ДС есть вакансии, проблема в том, что как правило на сабж сьезжают с руби+рельс, об которые мне зашквариваться не приходилось. Как следствие требуется соответствующий опыт в этом говне, а твои соратники будут говнокодерами засоряющими глобальное пространство имен и не умеющие в многопоточность. Ах да, эрлангеры смотрят как на говно.
Ну эрлангеры на всех смотрят как на говно, лол.
А вообще как по мне в плане Эликсира ниибически круто учить как работать с веб-фреймворком phoenix.
Можно свою мелкоборду замутить, например.
К слову сам пока хочу только вкатиться в Elixir. Прикупил себе пикрилетейд. Очень интересно и доступно.
В общем, чувствую, что нас тут будут полтора человека. Хотя в тг немаленькая такая группа прогеров, хотя там правда один постоянно пиздит без остановки.
Если учить в удовольствие, то удовольствие ты свое получишь, как я в свое время. Потом будет разочарование из-за отсутствия сферы применения (читай на работу не пригласят, если ты не рубист, конечно). Я сейчас вспомнил, что прочитал не пару книг, а все кроме самой нубской от какого-то китайца, ну и еще по фениксу. Нахуй я это делал, лучше бы задрачивал олимпиадные задачки.
Это какая-то новая, видимо. По мне, самая заебатая была https://www.manning.com/books/elixir-in-action, но она для "продвинутых".
>
>Если учить в удовольствие, то удовольствие ты свое получишь, как я в свое время. Потом будет разочарование из-за отсутствия сферы применения (читай на работу не пригласят, если ты не рубист, конечно). Я сейчас вспомнил, что прочитал не пару книг, а все кроме самой нубской от какого-то китайца, ну и еще по фениксу. Нахуй я это делал, лучше бы задрачивал олимпиадные задачки.
Это все очень печально. И все-таки у тебя совсем пропало желание кодить на этом языке? Потому что мне как всегда что-то кодить одному западло, а запилить борду на эликсире прикольно и в принципе реально.
Ты прав. Только в прошлом году выпустили. А в этом перевели ее. Это нереально круто. У нас наконец стали переводить книги хотя бы спустя год, господи!
Спасибо за книжку, попробую ознакомиться, как будет время и желание, увы и ах.
Желание не пропало, я просто не хочу тратить свое время и деньги в пустую. Мнение такое, что углубляться в это стоит, если только намерен свалить в америку/европу - оттуда самый хайп валит эликсировский. В таком случае врывайся в гитхаб, лучше не велосипеды никому не нужные, а начинай контрибутить во что-то ценное и более-менее развитое, это на самом деле не сложно (при должном опыте в программировании, естсественно, ну и ангельский еще). Я свое время трачу как раз на это, правда на более актуальном стеке для этой страныдля какой угодно страны в ближайшие 10 лет
Ну и знание BEAM очень полезная штука для кругозора, даже если не будешь писать на эликсире/эрланге никогда.
>Мнение такое, что углубляться в это стоит, если только намерен свалить в америку/европу - оттуда самый хайп валит эликсировский.
В целом я уже устроился в одну американскую компанию, думаю постепенно качать скиллы английского и закономерно стать очередной реинкарнацией поросенка петра. Так что спасибо за информацию насчет хайпа, а то у меня до сих пор было ощущение, что я хочу изучать "Эрланг для детей" без какого-то шанс на трудоустройство. В общем, если покидаешь какие-нибудь полезные ссылки, книги, видеоуроки (все что когда-нибудь ты находил или доставал), то буду премного благодарен и оформлю в надлежащем виде в ОП-посте, потому что ну не хорошо это. Вроде борда программирования, а эрланга и эликсира нет тут и близко, пусть хоть для кого-то отдушина здесь будет.
>В таком случае врывайся в гитхаб, лучше не велосипеды никому не нужные, а начинай контрибутить во что-то ценное и более-менее развитое, это на самом деле не сложно (при должном опыте в программировании, естсественно, ну и ангельский еще)
Например? Очень интересно, что там на гитхабе можно хорошего контрибутить, лол.
>Ну и знание BEAM очень полезная штука для кругозора, даже если не будешь писать на эликсире/эрланге никогда.
Ты про саму виртуальную машину?
P.S. Я сам пока имею опыт в проганье в рамках перла\питона\пхп, какие-то учебные задачки делал и на си, и на асме, и на плюсах с си сярпом и о боже даже про лисп немного читал, но это не считается. Мне будет больно с функциональным программированием, лол?
>В целом я уже устроился в одну американскую компанию, думаю постепенно качать скиллы английского и закономерно стать очередной реинкарнацией поросенка петра
Добра тебе и успехов, искренне. Сам туда мечу.
>Ты про саму виртуальную машину?
Да, очень годный инженерный кусок годности. Там правда сама реализация на с++ во многих местах ебланами писана, но это применимо и к джаве/сишарпу. Сама задумка и архитектура просто космос.
>и о боже даже про лисп немного читал
Эликсир - это Clojure (лисп) поверх BEAM, только никому не говори, принято считать, что это руби. Более лисп только LFE.
>Мне будет больно с функциональным программированием, лол?
советую SICP для осознания своего места во вселенной.
>Например? Очень интересно, что там на гитхабе можно хорошего контрибутить, лол.
выбирай https://github.com/h4cc/awesome-elixir
>я почти перестал за всем этим следить лень перечислять, самым верным решением будет подписаться на твитеры уважаемых эликсирщиков/комьюнити/курэйтэд листы/рассылки и успевать фильтровать лгбт хуйню из ленты
>Добра тебе и успехов, искренне. Сам туда мечу.
Тебе тоже. Обязательно все получится.
>Да, очень годный инженерный кусок годности. Там правда сама реализация на с++ во многих местах ебланами писана, но это применимо и к джаве/сишарпу. Сама задумка и архитектура просто космос.
Где можно почитать\посмотреть\послушать про все это? Я боюсь, что я еще не дорос, чтобы нормально понимать код на плюсах.
>Эликсир - это Clojure (лисп) поверх BEAM, только никому не говори, принято считать, что это руби. Более лисп только LFE.
Слишком сложно. Всегда интересно узнавать об ЯП, о которых ты ранее и не слышал. Понимаешь, что мир не стоит на месте и бурный рост не только у чертового фронтенда, где придумывают сотню джаваскриптов одновременно, умудряясь еще и на бэк залазить между делом.
>советую SICP для осознания своего места во вселенной.
И почему я не удивлен. Я за нее брался, но дозировка Лиспа там явно в книге превышена, поэтому в какой-то момент реально не выдержал и бросил. Попробую еще раз, что тут скажешь.
Круто, спасибо!
>>я почти перестал за всем этим следить лень перечислять, самым верным решением будет подписаться на твитеры уважаемых эликсирщиков/комьюнити/курэйтэд листы/рассылки и успевать фильтровать лгбт хуйню из ленты
Бл, неужели там лгбт хуйня из всех щелей прям реально лезет? Ну ок. Вообще я сам дохера на твитторы подписан, но блждад я там почти не сижу. А вот подписать на рассылку на почту, как по мне годно, почту я частенько смотрю.
>Добра тебе и успехов, искренне. Сам туда мечу.
Тебе тоже. Обязательно все получится.
>Да, очень годный инженерный кусок годности. Там правда сама реализация на с++ во многих местах ебланами писана, но это применимо и к джаве/сишарпу. Сама задумка и архитектура просто космос.
Где можно почитать\посмотреть\послушать про все это? Я боюсь, что я еще не дорос, чтобы нормально понимать код на плюсах.
>Эликсир - это Clojure (лисп) поверх BEAM, только никому не говори, принято считать, что это руби. Более лисп только LFE.
Слишком сложно. Всегда интересно узнавать об ЯП, о которых ты ранее и не слышал. Понимаешь, что мир не стоит на месте и бурный рост не только у чертового фронтенда, где придумывают сотню джаваскриптов одновременно, умудряясь еще и на бэк залазить между делом.
>советую SICP для осознания своего места во вселенной.
И почему я не удивлен. Я за нее брался, но дозировка Лиспа там явно в книге превышена, поэтому в какой-то момент реально не выдержал и бросил. Попробую еще раз, что тут скажешь.
Круто, спасибо!
>>я почти перестал за всем этим следить лень перечислять, самым верным решением будет подписаться на твитеры уважаемых эликсирщиков/комьюнити/курэйтэд листы/рассылки и успевать фильтровать лгбт хуйню из ленты
Бл, неужели там лгбт хуйня из всех щелей прям реально лезет? Ну ок. Вообще я сам дохера на твитторы подписан, но блждад я там почти не сижу. А вот подписать на рассылку на почту, как по мне годно, почту я частенько смотрю.
>Где можно почитать\посмотреть\послушать про все это?
http://beam-wisdoms.clau.se/en/latest/
Довольно годно и понятно. Если будешь гуглить что-то вроде "(BEAM|erlang|OTP) (internals|runtime|garbage collection|memory model)" то будет попадаться как правило годнота, так как в этой сфере в основном бложат осиляторы. Можешь еще Erlang In Anger чекнуть, там хардкорненько, много про дебаг и траблшутинг.
>Я боюсь, что я еще не дорос, чтобы нормально понимать код на плюсах.
Не парься код на плюсах не только сложный, он еще и в каждом проекте разный, чтобы понимать/писать на уровне выше чем laba1 этим нужно заниматься профессионально на работе за деньги.
>Бл, неужели там лгбт хуйня из всех щелей прям реально лезет?
Это бич программирования, у меня от этого пичот больше чем от коллег даунов.
>Это бич программирования, у меня от этого пичот больше чем от коллег даунов.
Чот реально впервые про это. Ну я вообще по основной специальности сисадмин пока, может по этому еще нихера не знаю, что да как.
И да, спасибо за ссылку и запросы для гугла, полезно :)
А расскажи вообще про собеседование. Что будут спрашивать, может есть примеры тестовых задач, и вообще какие навыки\умения\знания должен продемонстрировать, чтобы меня взяли в качестве джуна?
Почему вы вообще решили, что называть язык в честь струн - хорошая идея?
Не слушай этого имбецила. Сейчас на рынке нету экосистемы найма эликсирщиков, поэтому в основной массе берут перекатщиков с других языков. Основной наниматель чисто эликсиров долгое время был starttrek и они по факту смотрели на то, понимаешь ли ты основы в целом, а уж в сам эликсир дают время вкатиться уже пост-фактум. Главное желание.
Работаю уже пару лет на нём. Хороший язык.
Особенно порадовало добавление GenStage в конце прошлого года, это был большой шаг.
Единственное что смущает, что несмотря на то, что всё типа community-driven, де-факто всё под контролем няшного фюрерка Хосе и его сподвижников chrismccord, michalmuskala и ericmj. Не знаю как они, но под акком Хосе, очевидно, работает целая команда. Пока что они слушают комьюнити, но если язык станет более менйстрим, то думаю, многое изменится.
Это что за мирок, где кто-то кодит за деньги на эликсире, а потом перекатывается на кложу? Удалёнка на буржуев?
>
>Не слушай этого имбецила. Сейчас на рынке нету экосистемы найма эликсирщиков, поэтому в основной массе берут перекатщиков с других языков. Основной наниматель чисто эликсиров долгое время был starttrek и они по факту смотрели на то, понимаешь ли ты основы в целом, а уж в сам эликсир дают время вкатиться уже пост-фактум. Главное желание
Спасибо за объяснение ситуации.
>удаленка на буржуев
верно
>>1015715
Все устраивает, хороший язык, если буду делать что-то распределенное или где будет жесточайшее требование по реалтайму то буду писать тока на эликсире. А вообще мне просто лисп нравится и я считаю кложу хорошим языком общего назначения поэтому укатываюсь туда
Я не про сложность технического собеседования. А про сложность убедить заказчика что ты охуенный профи с большим опытом на бэкенде, в эликсир как раз и требуют большой опыт разработки на бэкенде в целом, потому что как ты правильно заметил, берут перекатщиков из-за относительной молодости технологий. Я на этой хуйне собаку съел и знаю что такое работать с BEAM и какие спецы нужны.
Или если ты эрлангист толковый, то проблем с работой у тебя не будет ни с эрлангом ни с его младшим братом-сабжем
Усек, мудило?
>порог входа выше чтобы собес пройти в отличие от быдлорельс, питухона итд
Ничего не выше. По-факту ниже, ибо нет технических вопросов, максимум архитектурные. Так что хуй полямзай, экспириенс-телеком-дебил.
Расскажи как вкатился в функциональные языки и какие задачи решаешь на них.
А то я осенью начал Джунить на питоне, сейчас уже крепкий миддл и чувствую, что это путь в никуда.
Динамическая скриптопараша/10
Elixir <- Erlang <- Prolog
ML потому что ML.
От руби динамодрисня и синтаксис. От лиспов макросы.
>Erlang <- Prolog
http://erlang.org/faq/academic.html
> 10.3 Where does Erlang syntax come from?
Mostly from prolog. Erlang started life as a modified prolog. ! as the send-message operator comes from CSP. Eripascal was probably responsible for , and ; being separators and not terminators.
Эрланг позаимствовал (до определенного предела) синтаксис, и его первая наколеночная (PoC) реализация была на Прологе. Все. Эликсир имеет свой синтаксис, который позаимствовал (до определенного предела) у Руби.
Про МЛ аргумент уровня "Ты хуй".
> Elixir = Prolog + ML
Попробуй обоснуй еще раз.
> пруфану на Жозе и Криса и их телегу про Кложуре
https://youtu.be/Lqo9-pQuRKE?list=PLWbHc_FXPo2h0sJW6X2RZDtT1ndw6KKpQ
https://youtu.be/oZwfi8JZ3kU?list=PLWbHc_FXPo2h0sJW6X2RZDtT1ndw6KKpQ
https://pdincau.wordpress.com/2013/11/30/talking-about-elixir-and-the-erlang-vm-with-jose-valim/
CTRL+F clojure
>Erlang <- Prolog
http://erlang.org/faq/academic.html
> 10.3 Where does Erlang syntax come from?
Mostly from prolog. Erlang started life as a modified prolog. ! as the send-message operator comes from CSP. Eripascal was probably responsible for , and ; being separators and not terminators.
Эрланг позаимствовал (до определенного предела) синтаксис, и его первая наколеночная (PoC) реализация была на Прологе. Все. Эликсир имеет свой синтаксис, который позаимствовал (до определенного предела) у Руби.
Про МЛ аргумент уровня "Ты хуй".
> Elixir = Prolog + ML
Попробуй обоснуй еще раз.
> пруфану на Жозе и Криса и их телегу про Кложуре
https://youtu.be/Lqo9-pQuRKE?list=PLWbHc_FXPo2h0sJW6X2RZDtT1ndw6KKpQ
https://youtu.be/oZwfi8JZ3kU?list=PLWbHc_FXPo2h0sJW6X2RZDtT1ndw6KKpQ
https://pdincau.wordpress.com/2013/11/30/talking-about-elixir-and-the-erlang-vm-with-jose-valim/
CTRL+F clojure
В рокетбанк чиркани, маня.
Это не аргумент
Разве ее переводили? Перевели Введение в Эликсир, но не Эликсир в действии.
Не понял что он сказал, но похоже на какую то ерунду.
Возможность записать анонимную функцию двумя способами - это не называется много синтаксического сахара. В эликсире его как раз не очень много, где реально много, так это в кложе. А точка с запятой - это реально говно и в нормальной языке её быть не должно (во всяком случае в роли multiple statements separator, в роли clauses separator или просто disjunct - норм).
>А точка с запятой - это реально говно и в нормальной языке её быть не должно
Ты скозал? В ней нет ничего плохого. Что действительно говно - это бесскобочный отступной синтаксис питон-стайл.
>Ты скозал?
Нет, Алан Перлис https://en.wikiquote.org/wiki/Alan_Perlis
>А точка с запятой - это реально говно и в нормальной языке её быть не должно
Вкусовщина. Не значительный знак, особо не мешающий. А вот количество сахара в Эликсире просто огромно. Да и абстракций слишком много. Простотой и минимализмом в Эликсире и не пахнет. Язык нужен для борьбы со сложностью, а Эликсир приносит свои сложности.
Зачем лямбда-исчисление оборачивать в непонятное чудо?
Эрланг сложно читается, а Эликсир вообще читать невозможно. Хаскелл пример четкого читабельного синтаксиса. Программы на Хаскелле приятны глазу. Лисп тоже удобочитаем, сразу видно сущность кода. В Эликсире же сущность кода скрывается хитрыми синтаксическими конструкциями.
Есть что для веба, кроме Феникса?
>Эликсир - это Clojure (лисп) поверх BEAM, только никому не говори, принято считать, что это руби. Более лисп только LFE.
Кто тебе такое сказал? Что общего у Лисп и Эликсир?
>количество сахара в Эликсире просто огромно.
Вовсе нет, его там совсем не много.
>Да и абстракций слишком много.
Вовсе нет. Там их ровно столько, сколько нужно для удобной работы.
В эрланге просто не было элементарных вещей, типа Task/Agent/Registry, хотя они просятся и каждом эрланг проекте их приходилось велоспедировать по-новой. Отсутствие ленивости в виде стримов под предлогом что так проще - это вообще какой-то маразм, в эликсире она была из коробки, и теперь есть простые и понятные вещи типа async_stream. Это по сути всё то, что должно было быть в эрланге, но эриксоновцы ниасилили ибо усатым инженерам из 80х ненужно.
Касательно нового, GenStage - это реально развитие и шаг вперёд, пока Хосе адаптирует для BEAM dataflow/fbp упрощая построение конкурентных систем, ретрограды из эриксона выкатывают действительно мутные, сложные и никому не нужны хуйни, вроде gen_statem.
Еще один. Макросы (почти гомоиконность), протоколы. Много мелочей типо функций с такими-же названиями, кек. Разработчики открыто говорят, что много идей взято из Кложуры.
>Зачем лямбда-исчисление оборачивать в непонятное чудо?
Типа сразу писать на лямбда-исчислении Чёрча?
>Эрланг сложно читается
Щито? У него простейший минималистичный синтаксис, абсолютно очевидный (за каждой конструкцией прозрачно просматривается семантика).
Эликсир содержит лишь немного сахара. Эдакий эрланг для рубистов (без перлово-рубячей гипервариативности)
>Хаскелл пример четкого читабельного синтаксиса.
В голос с тебя, толстяк.
Почему тогда на непонятном эликсире любая только вкатившаяся с другого языка веб-макака играючи за два дня может накидать себе веб-прилагу на фениксе, а на стройном и понятном хаскеле запилить что-то на есоде - это всегда big deal?
В Лиспе код это данные + все есть выражение, то есть можно удобно комбинировать любые конструкции, при этом сохраняется читабельность.
Мало ли что там разработчики говорят. Разработчик Эликсира походу самоучка, при чем низкокачественный. У Эликсира нет целостного фундамента, просто надерганы фичи из разных языков.
Лисп это в первую очередь простота. Легкость это не простота. В Эликсире может быть легко как в Рельсах, но простотой там и не пахнет.
Разговор не об этом. У Эликсира отличная ВМ, отличное concurrency, но тяжелый синтаксис. Это перечеркивает его плюсы. В Хаскелле синтаксис минималистичный, неперегруженный, у него академический фундамент, поэтому минимум лишнего. У Эликсира откровенно хипстерский синтаксис, и все остальное тоже. Нет строгости, нет серьезности что ли.
Непонятна идея Эликсира, его принципы. Чем лг лучше того же Эрланга? Он не проще, он запутанный, он многословный. Чем он лучше других языков, в чем его фишка?
Мне не понятна идея, если это функциональный язык на принципах лямбда-исчисления, то зачем извращать все это хипстерскими штуками? Перегруженный синтаксис, тяжелые библиотеки, вот это вот всё.
Да при чем тут макросы. Лисп фактически состоит из АСТ. В этом весь плюс, сразу видно сущность. Кто пишет на Лиспе тот концентрируется на задаче, а не на языке. В Эликсире все наоборот, вся сложность вокруг языка.
Что значит тяжёлый синтаксис? Как по-мне он очень прост, привыкаешь за пол дня. А хаскельный синтаксис как раз перегруженный с кучей ключевых слов, это при том что в хаскеле и так можно одну и ту же вещь сделать минимум 4 способами.
> него академический фундамент
Штоу? как у синтаксиса может быть академический бекграунд? Что академического в <* $ >>>> /-> >=> -<< :: @!! ?
>У Эликсира откровенно хипстерский синтаксис, и все остальное тоже. Нет строгости, нет серьезности что ли.
Я вообще на подобную демагогию про синтаксис обычно отвечаю классической цитатой Луговского о синтаксисе, но тут ограничусь лишь тем, что скажу, что всё что ты несёшь - дикая вкусовщина + догадки человека, который даже дня не уделил на ознакомление.
>Непонятна идея Эликсира
Это эрланг доведённый до ума, на котором приятно и удобно разрабатывать не только прошивки для роутеров, но и типичные веб-сервисы. Содержит в себе все средства современных схожих по духу языков и технологий (clojure, akka) для быстрой и удобной разработки, и имеет хороший UX (ruby-style), чтоб разрабатывать было комфортно и весело. Вот моё определение (на мой взгляд наиболее полное).
На открытом АСТ пишут наркоманы. Нормальные люди пишут на языке (с синтаксисом). В кложе, кстати, Рич всех наркоманов отправил на хуй.
Ну то есть, я правильно понял, что по твоей логике, если язык ФП - то ему ничего не нужно, и писать надо прямо на лямбда-исчислении с синтаксисом Чёрча? И соответственно, продолжая эту мысль, если скажем, язык комбинаторный, то писать нужно даже не на Unlambda, а прямо на SKI-комбинаторах? А если императивный то на брейнфаке соответственно?
>как у синтаксиса может быть академический бекграунд?
У языка. В Хаскелле сразу виден почерк математиков.
>На открытом АСТ пишут наркоманы.
Почему? Дядя Вася скозал?
Если без шуток, то в АСТ писать легко и удобно. Код емкий, читабельный, незамусоренный. Думаешь только о задаче, а не о фишечках языка. В Лиспе есть все что нужно для решения любой задачи, а если нету, то это легко расширить.
Так если для решения любой задачи достаточно АСТ, то зачем все эти пустые навороты?
Всё давно понятно, что лисперы просто не осилили написать компилятор. Ублажнятели машины.
Однобуквенные переменные и односимвольные "ключевык слова".
Ещё раз, если лисп - это АСТ-наркомания для упоротых любителей метапарсеров метаконфигов, ебашущих DSL на каждую задачу - то Эликсир действительно не имеет к нему никакого отношения, потому что в нём, как и в Кложе метапрограммирование используется по назначению, а не как стиль жизни.
Дальше, если ты решил разводить тут типичную лисоблядскую демагогию, то мне не интересно, тут не подают, иди нахуй. Лавсан, ето ты?
Не правильно. Вот когда смотрю на Эликсир код, то сразу не вижу сущности. Все вот эти спецсимволы несут лишнюю нагрузку.
Мое мнение конечно субъективно, ибо на Эликсире кроме хеллоуворда ничего не писал. Но все же язык не располагает для того, чтобы его полюбить с первого взгляда.
Строгость, выражения максимально приближены к математическим. Поэтому думать на нем привычно и удобно.
(? (Почему (никто (не (может (объяснить (в (чем (состоит (наркомания (писать (в (АСТ)))))))))))))
Код замусорен скобками
5+23 vs (+ 5 ( 2 3))
Ты можешь сказать, что приоритеты дико нагружают твой мозг. Но это не так. Синтаксис для того и нужен, чтобы подстраиваться под удобство парсинга визуальной системой человека, а не под удобство парсинга машиной. Бесит синтаксис только аутистов из тех, что машинки в детстве по размеру раскладывал.
У математиков используются краткие обозначения типа i и j по одной простой причине - они выполняют символьные преобразования вручную, и бесконечно писать что-то длиннее коротких букв очень утомительно.
В программировании же, если у тебя часто повторяется идентификатор, значит ты делаешь что-то не так.
И короткие обозначения в хаскеле - это, с одной стороны, карго-культ (ыыы, мы мотематики), с другой - попытка хоть как-то совладать с избыточностью языка, в котором на каждый чих нужно что-то куда-то лифтить.
К примеру, возьмем функцию
>whenX :: X Bool -> X () -> X ()
>whenX a f = a >>= \b -> when b f
Эта функция является копией функции when для монады IO, только в этом случае для стэка из монад X. Но сама по себе функция when нужна тоже, чтобы распаковать IO и запаковать назад. И всем понятно, что функция - это просто ебота со стейтом, поэтому тут короткие буковки, которые особо никого не ебут.
И раз уж я открыл Control.Monad для исходного кода when, с этим же связано, такое чудо, как
liftM :: (Monad m) => (a1 -> r) -> m a1 -> m r
liftM f m1 = do { x1 <- m1; return (f x1) }
-- | Promote a function to a monad, scanning the monadic arguments from
-- left to right. For example,
--
-- > liftM2 (+) [0,1] [0,2] = [0,2,1,3]
-- > liftM2 (+) (Just 1) Nothing = Nothing
--
liftM2 :: (Monad m) => (a1 -> a2 -> r) -> m a1 -> m a2 -> m r
liftM2 f m1 m2 = do { x1 <- m1; x2 <- m2; return (f x1 x2) }
-- | Promote a function to a monad, scanning the monadic arguments from
-- left to right (cf. 'liftM2').
liftM3 :: (Monad m) => (a1 -> a2 -> a3 -> r) -> m a1 -> m a2 -> m a3 -> m r
liftM3 f m1 m2 m3 = do { x1 <- m1; x2 <- m2; x3 <- m3; return (f x1 x2 x3) }
-- | Promote a function to a monad, scanning the monadic arguments from
-- left to right (cf. 'liftM2').
liftM4 :: (Monad m) => (a1 -> a2 -> a3 -> a4 -> r) -> m a1 -> m a2 -> m a3 -> m a4 -> m r
liftM4 f m1 m2 m3 m4 = do { x1 <- m1; x2 <- m2; x3 <- m3; x4 <- m4; return (f x1 x2 x3 x4) }
-- | Promote a function to a monad, scanning the monadic arguments from
-- left to right (cf. 'liftM2').
liftM5 :: (Monad m) => (a1 -> a2 -> a3 -> a4 -> a5 -> r) -> m a1 -> m a2 -> m a3 -> m a4 -> m a5 -> m r
liftM5 f m1 m2 m3 m4 m5 = do { x1 <- m1; x2 <- m2; x3 <- m3; x4 <- m4; x5 <- m5; return (f x1 x2 x3 x4 x5) }
Если записать это не в одну строчку и с нормальными идентификаторами, бойлерплейт будет адский. А так вроде лаконичный язык, а кто не понял - тот тупой. Ага.
У математиков используются краткие обозначения типа i и j по одной простой причине - они выполняют символьные преобразования вручную, и бесконечно писать что-то длиннее коротких букв очень утомительно.
В программировании же, если у тебя часто повторяется идентификатор, значит ты делаешь что-то не так.
И короткие обозначения в хаскеле - это, с одной стороны, карго-культ (ыыы, мы мотематики), с другой - попытка хоть как-то совладать с избыточностью языка, в котором на каждый чих нужно что-то куда-то лифтить.
К примеру, возьмем функцию
>whenX :: X Bool -> X () -> X ()
>whenX a f = a >>= \b -> when b f
Эта функция является копией функции when для монады IO, только в этом случае для стэка из монад X. Но сама по себе функция when нужна тоже, чтобы распаковать IO и запаковать назад. И всем понятно, что функция - это просто ебота со стейтом, поэтому тут короткие буковки, которые особо никого не ебут.
И раз уж я открыл Control.Monad для исходного кода when, с этим же связано, такое чудо, как
liftM :: (Monad m) => (a1 -> r) -> m a1 -> m r
liftM f m1 = do { x1 <- m1; return (f x1) }
-- | Promote a function to a monad, scanning the monadic arguments from
-- left to right. For example,
--
-- > liftM2 (+) [0,1] [0,2] = [0,2,1,3]
-- > liftM2 (+) (Just 1) Nothing = Nothing
--
liftM2 :: (Monad m) => (a1 -> a2 -> r) -> m a1 -> m a2 -> m r
liftM2 f m1 m2 = do { x1 <- m1; x2 <- m2; return (f x1 x2) }
-- | Promote a function to a monad, scanning the monadic arguments from
-- left to right (cf. 'liftM2').
liftM3 :: (Monad m) => (a1 -> a2 -> a3 -> r) -> m a1 -> m a2 -> m a3 -> m r
liftM3 f m1 m2 m3 = do { x1 <- m1; x2 <- m2; x3 <- m3; return (f x1 x2 x3) }
-- | Promote a function to a monad, scanning the monadic arguments from
-- left to right (cf. 'liftM2').
liftM4 :: (Monad m) => (a1 -> a2 -> a3 -> a4 -> r) -> m a1 -> m a2 -> m a3 -> m a4 -> m r
liftM4 f m1 m2 m3 m4 = do { x1 <- m1; x2 <- m2; x3 <- m3; x4 <- m4; return (f x1 x2 x3 x4) }
-- | Promote a function to a monad, scanning the monadic arguments from
-- left to right (cf. 'liftM2').
liftM5 :: (Monad m) => (a1 -> a2 -> a3 -> a4 -> a5 -> r) -> m a1 -> m a2 -> m a3 -> m a4 -> m a5 -> m r
liftM5 f m1 m2 m3 m4 m5 = do { x1 <- m1; x2 <- m2; x3 <- m3; x4 <- m4; x5 <- m5; return (f x1 x2 x3 x4 x5) }
Если записать это не в одну строчку и с нормальными идентификаторами, бойлерплейт будет адский. А так вроде лаконичный язык, а кто не понял - тот тупой. Ага.
>(? (Почему (никто (не (может (объяснить (в (чем (состоит (наркомания (писать (в (АСТ)))))))))))))
Не пишу на лиспе но мозг вообще ни на секунду не затупил.
Просто все скобки пропустил.
Он и нетукое мкжнт на самчм дпле.
Так у него и не АСТ. АСТ бы выглядело как-то так http://www.nltk.org/book/tree_images/ch08-tree-4.png , только скобками вместо дерева - ( ( (the dog) ) ( ( (a) (man) ) ( ( (in))) ( (заебался) ) ) )
И читать-то просто, сложно писать (еще бы, ты делаешь работу за парсер), и глаза напрягаются, убирая все эти скобки. Синтаксис - великая вещь.
Прочитал статью Жозе Валима, и заинтересовался Эликсиром и Эрлангом. Вот статья если кому интересно - http://blog.plataformatec.com.br/2015/06/elixir-in-times-of-microservices/
https://elixirschool.com/ru/ - неплохие уроки для начала
Нашёл картинку. Это один из я/п третьего типа и его изучают со словами «а вдруг выстрелит», вот и всё.
Обмельчал нынче тролль.
Раба забыли спросить, иди таски закрывай, а то хозяин ругаться будет. И это, про паттерны не забывай да юнит-тестами код покрывай.
def loop(state) do
new_state =
receive do
:a_transforming_message -> transform(state)
anything_else -> state
end
loop(new_state)
end
Можно сделать чтобы код подсвечивался?
С чего ты взял что разработчик может уметь только в один язык и должен работать там где только одно средство применяется?
У нас стек технологий состоит из того что лучше подходит, а не из того во что лучше умеют люди. Людей можно обучить, а вот разработка от языка, а не от требований это пиздец.
def loop(state) do
new_state =
receive do
:a_transforming_message -> transform(state)
anything_else -> state
end
loop(new_state)
end
[/code]
Про который язык менеджерам в уши нассали-на том и пишут. Брать риск и писать на эзотерике, на которой нет специалистов, мало кто может себе позволить. Специалисту тоже нет резона тратить время на язык, на который нет вакансий.
Ты делаешь в жизни только те вещи, на которые есть вакансии? Хм, кхе.
Новые языки нужны чтобы расти как специалист. Язык определяет мышление. Если ты знаешь 1-2 языка и еще из одной парадигм, то у тебя мышление заточено только под них. Ты не можешь видеть с другой стороны, ты не можешь видеть парадигм, ты видишь только конструкции твоего языка.
Чем больше знаешь языков, тем меньше от них зависишь. Потому что начинаешь видеть что под языками, на чем они основываются, какие у них общие паттерны.
Не спроста на всех уважаемых курсах по Computer Science, преподают хотя бы по одному функциональному языку. Чтобы студенты могли шире смотреть на вещи. Не зацикливаться только на ООП, только на имеративном программирование, а видеть всю широту подходов.
>Специалисту тоже нет резона тратить время на язык, на который нет вакансий
Специалист должен знать модели конкурентного программирования? Должен. В Erlang/Elixir есть модель акторов. Как специалист будет знать о модели акторов не попробовав ее?
Так пробуй. Другим хочется Эрланга.
Хуй знает о чем ты вещаешь. У нас основной стек был на рубях. Сейчас паралелльно основному, сервисы пилятся как на рубях, так и на go, elixir. Кто как считает нужным.
И теперь вот все идет к тому что откроются доп вакансии на Go.
Если у тебя в компании стэк диктуется менеджерами безотносительно рода и природы задач - хуево тебе.
фишка языка в code reload. т.е. есть коммутатор телефонной станции. тебе нужно обновить ПО, но не прерывая соединений.
это можно сделать и на руби. ввести супервизор который будет хранить состояние процессов и перезапускать процессы. если процесс умер, супервизор запустит новый и передаст ему состояние. нужно чтобы процесс не хранил свое состояние тайно от супервизора. -- как пример, веб приложение. состояние в бд. супервизор - балансировщик, может перекинуть соединение другому процессу, только хуй знает если кто так делает.
в эрланг уже есть супервизор. так-как функциональщина, как бы состояние не скрыто, но можно легко это нарушить.
функциональщина -- важна для компилатора. он может, зная, что та или иная переменная не меняется, как бы предсказать, как поведет себя программа и оптимизировать: https://stackoverflow.com/questions/14357918/examples-where-compiler-optimized-functional-code-performs-better-than-imperativ
но императивный алгоритм уже не скопипастить, нужно будет подумать как перевести "функциональный".
у erlang - не блокирующий сборщик мусора и быстрый, не помню уже. нет глобальных блокировок как у руби. процессы легкие и можно раскидать по разным узлам на разных компьютерах. есть библиотека для коммуникационных програм, которая проверена.
как то так.
Трахаться. Если у него асинхронщина искаропки и неблокирующий ГЦ, то какие широкие возможности открываются для ымбеддинга в хардварные платформы! Стоит ли ждать порта экрланговской ВМ под различные ртос, шоб на ПЛК можно погонять было эту хуерагу?
Да знаю я все плюсы/минусы, Эрлангом одно время интересовался, всё круто, сложно и интересно. В целом я желаю Эликсиру только удачи и будет отлично, если когда-нибудь количество вакансий на ХХ перевалит за 50. У меня не об этом вопрос был.
Ептаааа... а я как дурак мечтал о пришествии ноды в индустриальный мир.
А вообще, сириусли, насколько прожорлива и требовательна к ресурсам эрлаговская виртуалка?
Для тривиальных io задач это оверкилл или норм?
Ну например, сделать софтверный гейт для межпроткольной трансляции , например, взаимодействовать с OPC-UA сервером и отдавать клиенту мессаджи через сокеты, для построения мелкой скады или hmi...
>А вообще, сириусли, насколько прожорлива и требовательна к ресурсам эрлаговская виртуалка?
Посмотри на rabbitmq и глянь какой поток она держит в бою у крупных компаний.
Ну и да, с этого
>а я как дурак мечтал о пришествии ноды в индустриальный мир.
Я люто проиграл.
Как была игрушкой для js-извращенцев, так и останется.
> взаимодействовать с OPC-UA сервером и отдавать клиенту мессаджи через сокеты
Запросто учитывая нативную работу с сетевым стеком, простую работу с бинарными данными.
>Посмотри на rabbitmq и глянь какой поток она держит в бою у крупных компаний.
Какой объем диска, такой поток и держит.
Причём тут неймспейсы? Они к лиспу ортогональны.
Феникс по дефолту использует 1й пока-что. 2й-ка сырая, на стадии pre. То есть, если тебе интересно ковыряться в двойке, репортить баги и дополнять документацию - то берёшь 2ку, если работать - то единичку.
Почитай LYSEFGG.
Можно, если на удалённой ноде есть тот же модуль.
>>1039272
Не понял твой вопрос.
> Насколько вообще оправдано использовать Elixir/Phoenix для не риалтайм вэб приложений?
Что значит не риалтайм? Весь веб-бекенд всегда риалтайм, даже на LAMP-стэке у тебя есть вполне риалтаймовый Apache веб-сервер который спаунит (или достаёт из пула) новые процессы в которых выполняется похапе-код. В Elixir для веба используется Phoenix веб-фреймворк, который работает так же: в поставке идёт вебсервер Cowboy который спаунит новые процессы на каждый простой http-реквест (вебсокетные соединения так же есть в фениксе, но они обрабатываются отдельно). То есть пишешь так же, как на самом обычном rails-like фреймворке.
Насколько оправданно судить тебе самому, лично мне Phoenix кажется просто суперудобным лучшим веб-фреймворком всех времён и народов, на котором писать легче и приятней даже, чем на рельсах.
Но он как бы только для бекенда. Ну то есть, там конечно есть шаблоны, и вьюхи, и прочее, как положено для веб-фреймворка, но если ты собрался делать rich-ui прилаги, тебе в любом случае JS-фреймворк на клиентсайде нужен будет, феникс его не заменит никак.
> Хочу вкатиться в эликсир из JS мира
Ебнутый? Учи что-нибудь для себя, что-нибудь фундаментальное, а эзотерическую пердоту оставь наркоманам.
А то как ни посмотришь на жсдебила, так в резюме написано "js, js_framework_name, GO, Haskell Elixir" ну и нахуй вы такие кому нужны?
Насколько оправдано использовать отбойный молоток? Зависит от задачи, некоторые задачи прекрасно решаются перфоратором. Определись что тебя привлекает в Эликсире. Может ФП ориентированность языка, может его возможности конкурентной и параллельной работы, или его экосистема, или же просто хочется потешить самолюбие (я знаю крутую редкую технологию). Проанализируй что тебя привлекает, и сравни с JS стеком, возможно JS не хуже решает задачи.
Изучать Elixir/Erlang полезно, потому что это другой подход к программированию.
>>1044418
Модель акторов, функциональное программирование, - это разве не фундаментальное? Elixir дает все это.
>>1043797
В Эрланге зеленые процессы, их можно создавать миллионами.
Dvachooyou. Net chtob djayvu ili pohape viuchit' chtob vse kak y lydei bilo.
>В Эрланге зеленые процессы, их можно создавать миллионами.
I chto teper' na majdane skakat'?
Dlya tipichnoj web-razrabotki eto nichego ne menyaet.
Еще как меняет. Процессы в Эрланге легковесные и быстрые. Виртуальная машина Эрланга стартует вроде за 50 миллисекунд. Таким образом можно обрабатывать тысячи вебсокет соединений на одной машине.
>>1048560
>I chto teper' na majdane skakat'?
Сдается мне ты олька на подсосе, пытаешься себя за программиста выдать. Мимо, тебя раскрыли.
Да меняется. В мейнстрим языках нет таких примитивов как акторы. Нельзя прийти с джавы или пхп и писать также на эликсире/эрланге.
Dlya web razrabotki nichego ne menyaetsya.
Ti beresh Phoenix i pishesh na nem tak ze kak na reljsah. Vse actori-huyaktori ostautsya pod kapotom Cowboya ili Phoenix-kanalov.
Чем эликсир хуже эрланга? Почему я должен выбрать не эту хипстерскую поделку, а трушный хардкорный оригинал?
Nichem. Elixir moget vse toze samoe 4to i Erlang. Transliruetsya v tot ze baitcod i vipolniaetsay na toi ze VM. Obratnoe vprincipe toze pravda, no tolko dohuja pridetsya rukami pisat.
A voobshe est' odna vesh'
Ia dumaiu elixirovskii compilyator daiet overhead. Ne tak mnogo chtob bilo zametno, no vse je.
Naprimer na proshloi conferencii Jose rasskazal chto oni teper' v baitcod kladut metainfo pro elixirovskii ishodnic tak 4to teper .beam faili budu zirnee i daje mozet bit' medlenee vipolniatsya.
Конечно медленнее, нужно тащить 100к строк кода языка, или сколько он там занимает, может даже больше.
Да причём тут код языка, он вообще к компилятору относится, скомпилированный эликсировский код - это обычный эрланговский байт-код. Просто теперь будут включать туда ещё какую-то эликсировскую метаинформацию, чтоб всякие тайпчекеры, линтеры, дебагеры, и тому подобное могли извлекать больше информации. Например, с версии 1.6 будут красивые сообщения об ошибках с полным трейсом что и где не сматчилось, и с чем оно пыталось сматчиться, а не злоебучий argument error.
Ну и что, кода же больше, библиотеки эликсира в придачу.
клон трелло уже написан
Коллега писал свой скайп в браузере. Имхо одно из самых лучших вещей попрактиковать свои скиллы в эрланге.
Дело, как водится, не в языке, а в людях.
Elixir слишком многое прячет под капотом. Люди, увидев новую руби-подобную игрушку, не осилив даже learyousomeerlang.com / Erlang in Anger / Erlang Efficiency Guide / OTP Design Principles (!), бегут писать код, которых после этого почему-то не перформит в проде и делает абсолютно странные вещи.
Библиотеки, которые написаны для Elixir, зачастую довольно говеного качества, если увидеть, как они работают в BEAM.
Есть и исключения, конечно. Чуваки из Discord пишут на Elixir и пишут отлично.
P.S. ну и REPL у Elixir ужасен. Я даже не смог list comprehension написать, что за?..
>Люди, увидев новую руби-подобную игрушку, не осилив даже learyousomeerlang.com / Erlang in Anger / Erlang Efficiency Guide / OTP Design Principles (!), бегут писать код, которых после этого почему-то не перформит в проде и делает абсолютно странные вещи.
Осилил всю приведенную тобой литературу, пильнул на гитхуб петпроджект, на работу не брали потому-что вместо опыта рельс был опыт jvm и .net (8 лет, с хайлоадами и байтоебством)
Мудаки какие-то, у него же от руби только синтаксис, неужели всем действительно так важен именно руби опыт?
напиши бота для discord, с нуля.
Оооо ебать здарова дедуля. Каково там писать на языке без фич, фреймворков, библиотек и комьюнити? Типо нужно обработать параллельно поток данных, нам ваш хипсиерских GenStage с его pull-семантикой, нахуй не нужно, достаем дедовский пулбой и хуярим на нем backpressure control и всю хуйню прямо руками. Какой то там dataflow придумали, нахуй его, акторы for life! Нужно работать с данными из БД? Нахуй все ORM, датамапперы, Ecto хуекто, напридумвали, щенки. Берешь божественный дедовский er|_mysql, все структуры, апи для запросов, обработку ответов, маппинг, все хуяришь прямо руками. Нужно веб-апи сделать? Не нужны нам эти вебфреймворки. Ты phoenix видел в эликсире? Да там же 1000% оверхэда! Просто берешь и прямо под ковбой ебашишь свои хендлеры с нуля. И то может лучше не брать ковбой, там столько оверхеда, надо чтото легче типа мисултин или вообще свой сделаем. Нужны макросы? Ну вот тебе огрызок парс_трансформ, там метапрограммирование на уровне JS или даже выше. Ах забыл, его задеприкейтили ещё хуй знает в какой версии. Ну вот есть какие то 2 либы : одна не работает, а во второй чёрт ногу сломить, но говорят что там можно на ней сделать. Нужны стримы? Да была какая то либа вроде... Может не нужны они тебе? Акторы ж есть, на них все сделаем Времени ж полно. Четыре дева на один спринт 3 такси по 2 пойнта, спешить некуда нахуй. Воистину эрлангист - байтоеб от мира concurency, даже годебилам фору даст.
Оно-то на в другой крайности конечно-же так, но тем не менее
> Люди, увидев новую руби-подобную игрушку, не осилив даже learyousomeerlang.com / Erlang in Anger / Erlang Efficiency Guide / OTP Design Principles (!), бегут писать код, которых после этого почему-то не перформит в проде и делает абсолютно странные вещи.
Библиотеки, которые написаны для Elixir, зачастую довольно говеного качества, если увидеть, как они работают в BEAM.
У тебя от рубиебства мозги заклинило. Если ты перечитаешь моё сообщение снова, ты увидишь, что проблема в людях, а не в языке. Что по твоему посту и видно.
И если долбоеба вроде тебя из проекта можно погнать ссаными тряпками за говнокод, то с особенностями эрланга-для-хипстеров в продакшене потом хуй знает что делать. Даже интроспекции в рантайм не завезли.
>>1052334
Как рубисту с трёхлетним стажем, умеющему оптимизировать код и писать расширения на Си, мне неприятны данные высказывания. Возможно, опытный программист на Руби, не имея опыта в Elixir, действительно не напишет оптимальный код на Elixir. Но разве архитектура языка не подталкивает к написанию оптимального кода тем, что часто только оптимальный является рабочим? Я вообще мимо проходил, но Elixir интересен. Не могли бы вы привести примеры библиотек на Elixir, написанных хуево из-за непривычки к ФП с иммутабельностью? Не верится что-то в ваших мифических рубихипсторов, не осиливающих Эрланг, с учётом того, что библиотеки на Руби в среднем куда выше по качеству кода, нежели на JS и Python, с которыми я тоже много работаю.
Тут дело не в фп с >>1052421
>Не могли бы вы привести примеры библиотек на Elixir, написанных хуево из-за непривычки к ФП с иммутабельностью?
Тут дело не в фп с иммутабельностью, а в системе акторов с генсерверами и супервизорами. Есть еще нюансы в сборке артифактов из кода - уже не помню точно, но суть в том, что есть флаги в mix.exs которые указывают как паковать проект и какие зависимости включать в конечный артифакт, с ними легко проебаться и не включить некоторые зависимости - в итоге при дебаге и тесте все будет ок, а собранный проект не заведется. Так вот года два назад дохуя говнобиблиотек на гитхабе были с криво прописанным mix.exs и в продакшен не годились, то есть проект с такими зависимостями просто бы не завелся. Это говорит о том, что авторы не запускали свое поделие после билда, хотя скурпулезно пердолили всякие ридми.мд и прочие код оф кондукт в репозитории.
>Как рубисту с трёхлетним стажем, умеющему оптимизировать код и писать расширения на Си, мне неприятны данные высказывания
Переходи на ноду.
Ну конечно проблема в головах, дедуль. В частности в головах эрланго-байтоебо-говноедов, как я описал в прошлом посте. Причём это даже не какие-то выдуманные мной говноеды, а самые настоящие, с которыми приходится сталкиваться IRL. И обьяснять им что на телебейсике из 80х на одних акторах и ОТП (из которого только половиной пользуются) разрабатывать это конечно можно если больше ничего под рукой нет, (ну или ты просто говноед, которому чужды все удобства) и нужны абстракции - это бесполезно. И судя по твоему охуенно содержательному ответу в стиле "сам дурак" ты к ним и относишься. И что ты там спизданул про интроспекцию? Она в эликсире точно такая же как в эрланге. А насчёт репла, ну в фениксе например, сделали автоматический код релод и интегрировали все это дело с браузером как в кложе, а у тебя что там, даже аналога эликсировского recompile в консоли нет, нужно или пердолится с purge, compile, load_file, или целый аппап накатывать.
Большинство эрланго быдлиотек тоже хуевого качества, только их ещё и мало и альтернатив нет. И дальше что?
Скорее всего рельсоконтора, переписывающая узкие места на эликсир.
>нашел технологии которые позволяют это делать изящней чем эликсир и выкатился
I chto ze eto?
Очевидный Idris. Создает зеленые треды еще на этапе компиляции.
>This book walks you through the right concepts at the right pace, as you >explore immutable values and explicit data transformation, functions, >modules, recursive functions, pattern matching, high-order functions, >polymorphism, and failure handling, all while avoiding side effects. To >get the most out of functional languages, you need to think functionally. >This book will get you there.
я пишу на эликсире в спейсмаксе, вообще его не конфигурировал, там репл и все батарейки в комплекте, на изучение спейсмакса правда надо потратить по хорошему денек
>спейсмакс
так, ты уже второй от кого я слышу про этот редактор
>на изучение спейсмакса правда надо потратить по хорошему денек
как раз выходные на носу
У Atom'a под Elixir много годных плагинов.
Почему Clojure? Чем он лучше elixir?
Конечно трогал, lisp, scala, js. Молчу про поделки в университете.
Без очень широких комптенеций в других языках, фрейкморвках и СУБД ни эрлангеры, ни эликсирщики не нужны нигде.
Не тратьте своё время.
То же самое относится к кложескале без джаваопыта, как и ко всем функциональным языкам. Но никто не мешает ему ковырять из интереса.
>>1063620
>Без очень широких комптенеций в других языках, фрейкморвках и СУБД ни эрлангеры, ни эликсирщики не нужны нигде.
>
>Не тратьте своё время.
Не завидуй. Человек хочет изучать, а ты настраиваешь его бездействовать. Потому что тебе завидно.
В Эрланге можно писать реалтайм программы без баз данных. Теперь ты будешь завидовать еще больше.
>Пасаны, стою перед сложным выбором. Хочу второй ЯП учить, стоит выбор между Rust, Clojure, Scala или этот ваш Elixir.
Что за мода пошла. Второй язык выбираешь как-будто жену на всю жизнь. Второй язык не есть последний.
Я например не работаю программистом (хобби), но перепробовал все языки, включая функциональные вроде Haskell. И это мне помогает, нет страха перед новыми языками. Нужно понять какие парадигмы доступны в языке. Главное парадигмы, но не языки. Понимая императивное программирование, можно же спокойно писать на всех императивных языках. Они почти не будут отличаться друг от друга. И также понимая функциональное программирование, можно писать на любом функциональном языке, они тоже не сильно будут отличаться.
Выбор языка это не выбор спутницы жизни. Нужно без раздумий брать любой язык и писать. Язык же инструмент. Никто ведь не осваивает один инструмент на всю жизнь. Инструментов нужно много, иначе задачи решать сложно. Как построить дом зная только один инструмент? Как решать любые задачи программирования зная один язык? На C++ программировать под веб тяжело, есть более подходящие языки для такой задачи. Трансляторы на C/C++ никто давно не пишет, потому что есть более подходящие языки. Поэтому чем больше языков, тем универсальнее инструментарий. Чем больше знаешь языков, тем лучше будешь ориентироваться в парадигмах.
Почему языков программирования так много, почему не ограничиться одним на все случаи? Почему продолжают появляться новые языки? Потому что нет идеально-универсального языка для всех случаев. Поэтому языки будут продолжать появляться, и каждый новый язык вероятно будет лучше решать какую-то из задач, которую плохо решали другие языки.
На питоне же можно писать декларативный (в ФП стиле) код. Что тебе не хватает? Новые языки нужны, но идеального языка ты не найдешь. Определись чего тебе не хватает в питоне, тогда поймешь какой новый язык тебе стоит потрогать. Нужны четкие требования, не просто "хочу", а необходимость.
Тебе с твоей колокольни, конечно, виднее сколько ЯП должен знать человек чтобы работать и зарабатывать. Очень ценно твоё мнение. на самом деле нет
Нет никакой зависти. Язык мне нравитяс, но в реальной разработке я его воспользовал один раз, и тот был на апворке по уже готовому проекту.
Ну это с точки зрения хеллоувордописателя свободного художника несомненно. Хотя забавно конечно читать от того, у кого ЯП - хобби, что ЯП - это инструмент.
Во-первых, ты преувеличиваешь схожесть языков. Например, кложа и хаскель оба ФЯ, но у них отличий больше, чем общего. Или питон и руби - оба скрипты с ООП, тем не менее отличаются они во многом.
Суть в том, что ЯП это не просто инструмент и это как раз понятно тем кто на нём работает. Потому что от языка зависит то с кем ты будешь работать и над какими задачами, какая будет инфраструктура, какое будет качество кода вокруг, и как будет считаться нормальным этот самый код писать, какое будет отношение к тестам и много других мелочей. Во-вторых, когда ты пишешь на языке, ты мыслишь категориями этого языка. С точки зрения инструментобляди программист в голове сначала генерирует некий абстрактный алгоритм, а потом перекладывает его на конкретный ЯП, но на практике это всё хуня и программист думает на языке на котором пишет. Более того, абстракции и их построение тоже надиктованы языком. Конечно в этом участвует много других факторов, вроде стайлгайдов, правилами по проект уже написан, какими-то сугубо личными предпочтениями и опытом, но это всё только увеличивает вариативность и зависимость от языка, а вовсе не сводит к знанию каких-то там парадигм. Парадигма сама по себе это лишь небольшое множество изначальных идей, наразвивать из них можно что угодно, вплоть до взаимоисключающих моделей.
Есть 2 способа писать программы, 2 основные парадигмы, императивная и функциональная (декларативная) парадигмы. Функциональная программа выглядит как математическое выражение или набор выражений, без какого-либо состояния. Результат функциональной программы - это результат конечного выражения. Императивная программа состоит из вычислителя, который последовательно меняет состояние. Результат императивной программы - конечное состояние.
Функциональная программа на Lisp и Haskell в целом будет выглядеть одинаково, независимо от отличий между Хасклелем и Лиспом. Императивная программа на любом императивном языке будет выглядеть также одинаково, независимо от отличий между императивными языками.
Ты рассматриваешь язык с точки зрения синтаксиса, но синтаксис не имеет значения, имеет значение каким парадигмам следует язык. На любом функциональном языке программа будет декларативной, независимо от синтаксиса. То же самое с императивными языками. Концепции программирования идут обособленно. Они влияют на языки, на их синтаксис и семантику, но не наоборот. Поэтому не имеет значение как различаются ML языки (Haskell) и Лиспы. Они имеют общие концепции под собой.
>На любом функциональном языке программа будет декларативной
>Функциональная программа на Lisp
Так бы сразу и сказал что ничего в этом не понимаешь, и не нужно было бы энциклопедические термины сюда копипастить с умным видом.
На CL можно писать как на ФЯ (можносделать, ага), но обычно его применяют как императивный ЯП, обмазываясь всякими CLOS, CLIM. Это вообще язык про метопрограммирование, а не про функциональщину.
Схемка была более блика к ФЯ, тем не менее это тоже мутабельное бестиповое говно и называть ее функциональной это приблизительно, что называть функциональным питон. Ну а call/cc - это обычный control-flow дроч, в котором декларативного нет нихуя.
Кложа вроде как ФЯ, но и она бестиповое говно с мутабельностью и неконтролируемыми сайд эффектами. Туда же эрланг и эликсир.
Чистый функциональный язык - это язык с ссылочной прозрачностью, а не что угодно с map/filter/reduce, hof, персистентными структурами и паттерн матчингом (которого в тех же лиспах нету). Так что чистые ФЯ, которые претендуют на какую-то там декларативность - это языки типа Haskell и Clean. Но даже в них есть иперативные элементы (do-семантика в Haskell, update-семантика в Clean). И все читают эти блоки как обычный императивный код на сишке, потому что никому нахуй не впёрлось конструировать в голове огромную лямбду, вместо понятного do this, then do that.
Но вообще я говорил не об этом. Вот кложа и хаскель. Вроде оба ФЯ (один не чистый, ну хуй с ним). При этом имеют совершенно разную философию в построении программ. Хаскель весь о типах, типы - это строительные блоки из которых ты строишь всю программу. И на хаскеле её обычно строят сверху-вниз, сначала типы, конкретные реализации в конце. В этом хасель похож на джаву больше, чем на кложу. Кложа же имеет пайтон-стайл философию KISS , Simple Made Easy, open system, и программы пишутся снизу вверх, то есть конкретные реализации без архитектуродрочерства, если что-то и обобщается, то в самом конце протоколам и утиной типизацией.
>На любом функциональном языке программа будет декларативной
>Функциональная программа на Lisp
Так бы сразу и сказал что ничего в этом не понимаешь, и не нужно было бы энциклопедические термины сюда копипастить с умным видом.
На CL можно писать как на ФЯ (можносделать, ага), но обычно его применяют как императивный ЯП, обмазываясь всякими CLOS, CLIM. Это вообще язык про метопрограммирование, а не про функциональщину.
Схемка была более блика к ФЯ, тем не менее это тоже мутабельное бестиповое говно и называть ее функциональной это приблизительно, что называть функциональным питон. Ну а call/cc - это обычный control-flow дроч, в котором декларативного нет нихуя.
Кложа вроде как ФЯ, но и она бестиповое говно с мутабельностью и неконтролируемыми сайд эффектами. Туда же эрланг и эликсир.
Чистый функциональный язык - это язык с ссылочной прозрачностью, а не что угодно с map/filter/reduce, hof, персистентными структурами и паттерн матчингом (которого в тех же лиспах нету). Так что чистые ФЯ, которые претендуют на какую-то там декларативность - это языки типа Haskell и Clean. Но даже в них есть иперативные элементы (do-семантика в Haskell, update-семантика в Clean). И все читают эти блоки как обычный императивный код на сишке, потому что никому нахуй не впёрлось конструировать в голове огромную лямбду, вместо понятного do this, then do that.
Но вообще я говорил не об этом. Вот кложа и хаскель. Вроде оба ФЯ (один не чистый, ну хуй с ним). При этом имеют совершенно разную философию в построении программ. Хаскель весь о типах, типы - это строительные блоки из которых ты строишь всю программу. И на хаскеле её обычно строят сверху-вниз, сначала типы, конкретные реализации в конце. В этом хасель похож на джаву больше, чем на кложу. Кложа же имеет пайтон-стайл философию KISS , Simple Made Easy, open system, и программы пишутся снизу вверх, то есть конкретные реализации без архитектуродрочерства, если что-то и обобщается, то в самом конце протоколам и утиной типизацией.
Так бы сразу и сказал, что не понимаешь различие декларативного и императивного кода. Абзац про лиспы не буду комментировать, так как до тебя все равно не дойдет. Лиспы следуют концепциям Лямбда-исчисления, а значит по определению код на них будет декларативным (должен быть таким, хотя дурак может и лом сломать).
Весь твой текст пропитан модными словечками, но за этим видно полное отсутствие фундаментальных знаний. Например:
>Кложа же имеет пайтон-стайл философию KISS
- такое даже комментировать сложно, всё сгрёб в одну кучу.
Мы говорим на разных языках. Мое первое сообщение большей частью касалось двух парадигм - Машины Тьюринга и Лямбда-исчисления. Ты начал что-то там противопоставлять этому, хотя ничего опровергнуть не можешь. Pure functional, типы в Хаскелл, типы в Лиспах, pattern-matching, еще что-то там, - как всё это относится к декларативному коду? По-твоему всё это определяет является ли код декларативным? На этом давай закончим. Убеждать тебя в чем-то не собираюсь. Можешь остаться при своем. Будут факты, пожалуйста, предоставь - обсудим. Без фактов ересь обсуждать не собираюсь. Ересью является в том числе твое личное мнение. Потому что ты пытаешься определять парадигмы программирования не по общепринятым меркам, а по твоему личному мнению, потому оно и ересь. Это равносильно тому, что оценивать световой поток солнца "на глаз", и потом еще доказывать свою правоту.
>Лямбда-исчисления, а значит по определению код на них будет декларативным
Пиздец ты животное. Это ты сам так решил или подсказал кто? Вот тебе код на схеме:
(def a 3)
(set! a 5)
(set! a 7)
Он декларативный? Подсказка: нет, ссылочная прозрачность нарушена
мимо-крок
А зачем ты так пишешь? Пиши так как заповедано, и будет все нормально. И кстати, здесь нет знака присваивания, нет абстрактного вычислителя, а значит код не императивный. Все что не императивно, то декларативно.
Декларативный язык, - это например, SQL - то есть исполнительная спецификация, которая говорит что делать (а не как делать). Императивный язык - это, например, сишка, где ты описываешь последовательность инструкций, которые будет выполнять машина.
> Лиспы следуют концепциям Лямбда-исчисления, а значит по определению код на них будет декларативным (должен быть таким, хотя дурак может и лом сломать).
Каким образом наличие лямбды сделает весь код декларативным? В CL - есть все те же самые control-flow примитивы, что и в сях и писать код там можно вполне императивно (обычный набор инструкций do this then do that).
В декларативном языке вообще не должно быть стэйта, присваивания, и сайд эффектов (т.е. язык должен быть ссылочно прозрачный). Много ты таких языков знаешь?
>- такое даже комментировать сложно, всё сгрёб в одну кучу.
Ну да, или кому-то сказать по существу нечего. Только энциклопедичную энтрилевельную хуйню остаётся повторять, хотя ты даже страничку wiki не осилил, иначе не писал бы такую чушь.
> двух парадигм - Машины Тьюринга и Лямбда-исчисления.
Лолшто? Лямбда и МТ - это абстрактные исполнители. Какое отношение это имеет к парадигмам программирования? Вот есть, например, парадигмы программирования: процедурное, структурное, модульное, объектно-ориентированное, функциональное, логическое, комбинаторное, конкатенативное, реактивное и т.д.
>как всё это относится к декларативному коду?
Я указал, что в CL пишут в основном императивно, и даже в чистых ФЯ типа хаскеля местами пишут императивно.
Но разговор изначально вообще о том, что твои обощения - вздор. Типа если два языка императивны - то и программы пишутся на них одинаково - это бред. Вон джава и сишка - и то и то императивные ЯП, код совершенно по разному пишется, в одном - процедурные портянки и байтоёбство, в другом - паттерноёбство. Твои обобщения - это результат больной редукции, голого теоретизирования и отсутствия реальной практики.
Мол, если в языке есть присваивание, точка с запятой (способ задания последовательности инструкций), ветвления, лупы и работа с внешним миром и ты этот ЯП выучил, то ты типа теперь все императивные языки знаешь, потому что у них в основе то же самое? Боюсь тебя расстроить, но реальность немного сложнее написания laba1.pas и какой-нибудь похапешник, перейдя куда-нибудь на цпп будет там насасывать независимо от опыта работы, хотя как же так, ведь в обоих языках присваивания, циклы, всё как Духаст Вечаслвавыч на лекции рассказывал. А по поводу чисто декларативных ЯП, так их и нету практически, и даже в Haskell, который вроде как декларативный, пацаны пишут:
do { x1 <- action1
; x2 <- action2
; mk_action3 x1 x2 }
а не
action1 >>= (\ x1 -> action2 >>= (\ x2 -> mk_action3 x1 x2 ))
если код сложнее хеллойворда.
Декларативный язык, - это например, SQL - то есть исполнительная спецификация, которая говорит что делать (а не как делать). Императивный язык - это, например, сишка, где ты описываешь последовательность инструкций, которые будет выполнять машина.
> Лиспы следуют концепциям Лямбда-исчисления, а значит по определению код на них будет декларативным (должен быть таким, хотя дурак может и лом сломать).
Каким образом наличие лямбды сделает весь код декларативным? В CL - есть все те же самые control-flow примитивы, что и в сях и писать код там можно вполне императивно (обычный набор инструкций do this then do that).
В декларативном языке вообще не должно быть стэйта, присваивания, и сайд эффектов (т.е. язык должен быть ссылочно прозрачный). Много ты таких языков знаешь?
>- такое даже комментировать сложно, всё сгрёб в одну кучу.
Ну да, или кому-то сказать по существу нечего. Только энциклопедичную энтрилевельную хуйню остаётся повторять, хотя ты даже страничку wiki не осилил, иначе не писал бы такую чушь.
> двух парадигм - Машины Тьюринга и Лямбда-исчисления.
Лолшто? Лямбда и МТ - это абстрактные исполнители. Какое отношение это имеет к парадигмам программирования? Вот есть, например, парадигмы программирования: процедурное, структурное, модульное, объектно-ориентированное, функциональное, логическое, комбинаторное, конкатенативное, реактивное и т.д.
>как всё это относится к декларативному коду?
Я указал, что в CL пишут в основном императивно, и даже в чистых ФЯ типа хаскеля местами пишут императивно.
Но разговор изначально вообще о том, что твои обощения - вздор. Типа если два языка императивны - то и программы пишутся на них одинаково - это бред. Вон джава и сишка - и то и то императивные ЯП, код совершенно по разному пишется, в одном - процедурные портянки и байтоёбство, в другом - паттерноёбство. Твои обобщения - это результат больной редукции, голого теоретизирования и отсутствия реальной практики.
Мол, если в языке есть присваивание, точка с запятой (способ задания последовательности инструкций), ветвления, лупы и работа с внешним миром и ты этот ЯП выучил, то ты типа теперь все императивные языки знаешь, потому что у них в основе то же самое? Боюсь тебя расстроить, но реальность немного сложнее написания laba1.pas и какой-нибудь похапешник, перейдя куда-нибудь на цпп будет там насасывать независимо от опыта работы, хотя как же так, ведь в обоих языках присваивания, циклы, всё как Духаст Вечаслвавыч на лекции рассказывал. А по поводу чисто декларативных ЯП, так их и нету практически, и даже в Haskell, который вроде как декларативный, пацаны пишут:
do { x1 <- action1
; x2 <- action2
; mk_action3 x1 x2 }
а не
action1 >>= (\ x1 -> action2 >>= (\ x2 -> mk_action3 x1 x2 ))
если код сложнее хеллойворда.
>здесь нет знака присваивания
А не похуй какого знака там нет? Это деструктивный апдейт, причём без какого-либо контроля со стороны типов, как результат референс трансперенти сломан, а значит это не декларативный код.
Да и, блять, как может быть декларативным что-то, что читается как сначала объявить а, потом изменить его значение на 5, а после этого изменить его значение на 7. Для большей наглядности нужно было ещё display после каждого set! оставить.
http://www.nobugs.org/blog/archives/2008/11/12/why-do-they-call-it-referentially-transparent/
https://stackoverflow.com/questions/210835/what-is-referential-transparency
как я понял, дело не в том, что должно выполняться условие:
f() + f() == 2f()
хотя, даже в твоем примере:
a + a == 2a
а в том, что:
x = f()
можно заменить на
x = value-of-f()
и программа будет работать так-же.
что можно сделать в любом языке программирование, или нет? приведи пример.
в натуральных языках, это не всегда можно сделать. по ссылкам выше есть примеры.
к примеру:
Олимпиада проходит в столице России
значит тоже самое, что:
Олимпиада проходит в Москве.
но
Москва - столица России начиная с __ года.
и
Москва - Москва начиная с __ года.
уже не верно, так-как Москва всегда была Москвой. --- не referential transparent.
http://www.nobugs.org/blog/archives/2008/11/12/why-do-they-call-it-referentially-transparent/
https://stackoverflow.com/questions/210835/what-is-referential-transparency
как я понял, дело не в том, что должно выполняться условие:
f() + f() == 2f()
хотя, даже в твоем примере:
a + a == 2a
а в том, что:
x = f()
можно заменить на
x = value-of-f()
и программа будет работать так-же.
что можно сделать в любом языке программирование, или нет? приведи пример.
в натуральных языках, это не всегда можно сделать. по ссылкам выше есть примеры.
к примеру:
Олимпиада проходит в столице России
значит тоже самое, что:
Олимпиада проходит в Москве.
но
Москва - столица России начиная с __ года.
и
Москва - Москва начиная с __ года.
уже не верно, так-как Москва всегда была Москвой. --- не referential transparent.
>В декларативном языке вообще не должно быть стэйта, присваивания
В Лиспах и нет присваивания.
>не должно быть
Кто вообще решает что должно быть, а чего быть не должно? Покажи где это написано. Похоже ты снова выдаешь свое мнение за истину в последней инстанции. Думаю дискутировать с тобой не имеет смысла.
>Лямбда и МТ - это абстрактные исполнители. Какое отношение это имеет к парадигмам программирования?
Самое прямое. Машина Тьюринга - основа императивной парадигмы, Лямбда-исчисление - функциональной.
>Я указал, что в CL пишут в основном императивно, и даже в чистых ФЯ типа хаскеля местами пишут императивно.
Если дураки забивают гвозди топором, то это их проблемы. Это во-первых. Ты не можешь знать как все пишут на лиспах и хаскелле, ты можешь знать только как пишут знакомые тебе люди, и то сомневаюсь в этом. Твое высказывание противоречит логике, а логика основа математики и программирования. Если ты в логике ноль, то о программировании и речи быть не может. Это второе. Математические выражения императивные или декларативные? Декларативные. Код на лиспах и хаскелле является математическим выражением? Является. Из этих фактов следует утверждение, что код на них декларативный. По крайней мере так задумано. Дураки же могут как всегда забивать гвозди топором, и потом говорить, что топор плохой инструмент, потому что им неудобно гвозди забивать.
>Типа если два языка императивны - то и программы пишутся на них одинаково - это бред. Вон джава и сишка - и то и то императивные ЯП, код совершенно по разному пишется, в одном - процедурные портянки и байтоёбство, в другом - паттерноёбство.
Ну и что дальше? Код на и на джаве и на си императивный. Потому что следует концепции Машины Тьюринга. Программа на джаве как и на си состоит из операторов присваивания и последовательного изменения состояния. Код на лиспах не такой, и на хаскелле тем более. Ты путаешь теплое с мягким.
>Мол, если в языке есть присваивание, точка с запятой (способ задания последовательности инструкций), ветвления, лупы и работа с внешним миром и ты этот ЯП выучил, то ты типа теперь все императивные языки знаешь, потому что у них в основе то же самое?
У тебя похоже проблемы с абстрагированием, это же основа, никак у тебя не получается абстрагироваться, и ты себя программистом еще зовешь. В программировании все абстрактно, нет ничего реального, все сущности выдуманы, чтобы было удобно абстрагироваться от реальности. Не вижу больших различий в рамках парадигм между C/C++ и PHP. Суть у них едина. Хотя пхп позволяет писать код в более-менее функциональном стиле.
Блять, какой же ты дегенерат. Феерический просто.
>В Лиспах и нет присваивания.
https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node79.html
И даже если бы не было, там можно определять переменные и позже деструктивно обновлять их значения, что аналогично.
>Покажи где это написано.
Ну, например, здесь.
Как следствие, декларативные программы не используют понятия состояния, то есть не содержат переменных и операторов присваивания (см. также ссылочная прозрачность).
https://ru.wikipedia.org/wiki/Декларативное_программирование
>Самое прямое. Машина Тьюринга - основа императивной парадигмы, Лямбда-исчисление - функциональной.
Охуеть теперь, а матлогика и теория доказательств - основа логического программирования, дальше что? Это не мешает иметь в Прологе механизм отсечений, который ни к какой матлогике не относится, а является чисто императивным хаком. Ну и функциональщина, за исключением пары чистых ФЯ - почти вся императивная со вкраплениями декларативщины.
>Если дураки забивают гвозди топором, то это их проблемы.
Ну конечно хеллоувордописателю виднее, что людям пишущим продакшн-код лучше использовать.
>ты можешь знать только как пишут знакомые тебе люди
И откуда этот дебильный вывод? А читать код основных библиотек, который весь в открытом доступе бог запретил?
>Код на лиспах и хаскелле является математическим выражением? Является.
Пиздец. Просто пиздец.
Я тебе на любом диалекте лиспа или на хаскеле напишу функцию с сайд-эффектом, которая при каждом вызове возвращает разные значения. Является эта функция функцией в математическом смысле? Нет. Являешься ли ты долбоёбом? Да.
>По крайней мере так задумано.
Кем задумано? Языки вообще то создают чтоб программы писать, а программы нужны для воздействия на мир, то есть для сайд-эффектов. А если есть сайд эффект - ты либо пытаешься их ограничивать монадками, либо не ограничиваешь вообще, как это в 95% языков и сделано, а если у тебя неограниченные сайд-эффекты в программе, о какой декларативности вообще идёт речь? Это как если бы один и тот же SQL-код постоянно работал бы по разному
>Дураки же могут как всегда забивать гвозди топором, и потом говорить, что топор плохой инструмент, потому что им неудобно гвозди забивать.
Лолблять. Ты сам же пишешь что нужно строго придерживаться одного из двух, типа выбрал лисп - всё, прощайте мутабельные ячейки, ООПэшечка, все control flow структуры, я теперь пишу строго на лямбда исчислении ееее. То что реальные задачи требуют куда большей вариативности у тебя вопрос не встаёт. Писать и читать (а в программировании код читается в 20 раз чаще, чем пишется, думаю ты об этом не знаешь) огромную лямбду, вместо простой и понятной do-нотации - это и есть забивать гвозди топором.
>>1064431
> Код на и на джаве и на си императивный.
И дальше что? Программы совершенно по разному построены. То что их можно редуцировать хоть до программ на brainfuck или машкодов не значит, что на этих языках программы строятся одинаково. В этом как бы и весь пойнт. Но ты реально тупой жопочтец.
>>1064433
Абстрагирование, это хорошо, но абстрагироваться можно на разный уровни.
>нет ничего реального
Ну в факториалах которые ты пишешь может и нет ничего реального. Но если в твоих программах нет ничего реального - как ты видишь результат их выполнения? Вот, например, указатель - это абстрактное понятие, но за ним стоят вполне реальные вещи. Указатель не реален, но вот адресация памяти это уже другой разговор.
Да и на высокоуровневом ЯП когда пишешь, то вообще то понимаешь, что твоя программа работает с сетью, с файловой системой, с памятью, занимает процессорное время, принимает данные из внешнего мира, отправляет данные во внешний мир. Всё это волне реальные вещи, ради которых собственно всё и делается. А академические языки, чисто для доказательства каких-то там концептов популярны только разве что у прыщавых сосок.
Блять, какой же ты дегенерат. Феерический просто.
>В Лиспах и нет присваивания.
https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node79.html
И даже если бы не было, там можно определять переменные и позже деструктивно обновлять их значения, что аналогично.
>Покажи где это написано.
Ну, например, здесь.
Как следствие, декларативные программы не используют понятия состояния, то есть не содержат переменных и операторов присваивания (см. также ссылочная прозрачность).
https://ru.wikipedia.org/wiki/Декларативное_программирование
>Самое прямое. Машина Тьюринга - основа императивной парадигмы, Лямбда-исчисление - функциональной.
Охуеть теперь, а матлогика и теория доказательств - основа логического программирования, дальше что? Это не мешает иметь в Прологе механизм отсечений, который ни к какой матлогике не относится, а является чисто императивным хаком. Ну и функциональщина, за исключением пары чистых ФЯ - почти вся императивная со вкраплениями декларативщины.
>Если дураки забивают гвозди топором, то это их проблемы.
Ну конечно хеллоувордописателю виднее, что людям пишущим продакшн-код лучше использовать.
>ты можешь знать только как пишут знакомые тебе люди
И откуда этот дебильный вывод? А читать код основных библиотек, который весь в открытом доступе бог запретил?
>Код на лиспах и хаскелле является математическим выражением? Является.
Пиздец. Просто пиздец.
Я тебе на любом диалекте лиспа или на хаскеле напишу функцию с сайд-эффектом, которая при каждом вызове возвращает разные значения. Является эта функция функцией в математическом смысле? Нет. Являешься ли ты долбоёбом? Да.
>По крайней мере так задумано.
Кем задумано? Языки вообще то создают чтоб программы писать, а программы нужны для воздействия на мир, то есть для сайд-эффектов. А если есть сайд эффект - ты либо пытаешься их ограничивать монадками, либо не ограничиваешь вообще, как это в 95% языков и сделано, а если у тебя неограниченные сайд-эффекты в программе, о какой декларативности вообще идёт речь? Это как если бы один и тот же SQL-код постоянно работал бы по разному
>Дураки же могут как всегда забивать гвозди топором, и потом говорить, что топор плохой инструмент, потому что им неудобно гвозди забивать.
Лолблять. Ты сам же пишешь что нужно строго придерживаться одного из двух, типа выбрал лисп - всё, прощайте мутабельные ячейки, ООПэшечка, все control flow структуры, я теперь пишу строго на лямбда исчислении ееее. То что реальные задачи требуют куда большей вариативности у тебя вопрос не встаёт. Писать и читать (а в программировании код читается в 20 раз чаще, чем пишется, думаю ты об этом не знаешь) огромную лямбду, вместо простой и понятной do-нотации - это и есть забивать гвозди топором.
>>1064431
> Код на и на джаве и на си императивный.
И дальше что? Программы совершенно по разному построены. То что их можно редуцировать хоть до программ на brainfuck или машкодов не значит, что на этих языках программы строятся одинаково. В этом как бы и весь пойнт. Но ты реально тупой жопочтец.
>>1064433
Абстрагирование, это хорошо, но абстрагироваться можно на разный уровни.
>нет ничего реального
Ну в факториалах которые ты пишешь может и нет ничего реального. Но если в твоих программах нет ничего реального - как ты видишь результат их выполнения? Вот, например, указатель - это абстрактное понятие, но за ним стоят вполне реальные вещи. Указатель не реален, но вот адресация памяти это уже другой разговор.
Да и на высокоуровневом ЯП когда пишешь, то вообще то понимаешь, что твоя программа работает с сетью, с файловой системой, с памятью, занимает процессорное время, принимает данные из внешнего мира, отправляет данные во внешний мир. Всё это волне реальные вещи, ради которых собственно всё и делается. А академические языки, чисто для доказательства каких-то там концептов популярны только разве что у прыщавых сосок.
В принципе любой язык со связыванием не референс транспарет. Определение RT:
a context K[ ] is RT if, for all M and N s.t. M = N, then K[M] = K[N]
Так вот, для связывания это всегда ломается:
K[ ] = let x = 5 in _
Подставляем в контекст x
Значение x на топ-левеле - undefined, но при этом не правда что
let x = 5 in x = let x = 5 in undefined
И вообще-то лямбда-исчисление не декларативно. Оно тьюринг-полное, и говорить что оно декларативно, это как говорить, что ассемблер - декларативный.
Декларативность - это свойства кода, а не языка или какой-то модели.
Ты можешь говорить, что какой-то код на лямбда-исчислении декларативный (что бы это не значило), но напиши на нём эмулятор X86, и скажи - много ли декларативного осталось в написанном коде?
Кстати SKI-исчислении по идее этой проблемы с RT нет, так как там нет связывания, только аппликация.
https://en.wikipedia.org/wiki/SKI_combinator_calculus
Короче, про то что не должно быть вообще никакого состояния, я не говорил. В целом подход написания кода на функциональных языках - декларативный. Нет там циклов, нет переменных, нет последовательного изменения состояния как результата программы. Состояния может быть и должно, потому что ты правильно заметил, что нужен как минимум IO, который будет изменяемым. Но в целом концепция написания программы другая. Ты можешь это понять?! Языки построенные на Лябда-исчислении предполагают декларативный код, в большей части. Императивные же предполагают полностью императивный код.
Состояние в программах на ФП языках должно быть минимальным. В этом должны быть заинтересованы программисты прежде всего. Но опять же в жизни все не так, люди забивают гвозди топором, копают совковой лопатой, а кидают песок штыковой, то есть всегда люди использовали и будут использовать инструменты не по назначению. Это проблемы тех людей, но не инструментов. Так что хватит обвинять инструменты, посмотри лучше на то что ты делаешь.
>Указатель не реален, но вот адресация памяти это уже другой разговор.
Да и на высокоуровневом ЯП когда пишешь, то вообще то понимаешь, что твоя программа работает с сетью, с файловой системой, с памятью, занимает процессорное время, принимает данные из внешнего мира, отправляет данные во внешний мир. Всё это волне реальные вещи, ради которых собственно всё и делается.
Да что ты говоришь?! А ничего что все тобой перечисленное это абстракции? Процессоров в природе не существует, их придумали люди и наделили именем процессор. Файловую систему вообще нельзя потрогать, это тоже абстракция. То что ты там где-то как-то пишешь какой-то код, еще не делает тебя профессионалом в Computer Science. Ты путаешься в понятиях. Отрицаешь фундаментальные вещи. В общем ставишь свое субъективное мнение - мерилом истинны.
>>1064424
>>1064421
>>1064384
>>1064333
>>1064100
Предположим что мы вернулись в начало 20-го века. Мы хотим программировать, но пока не знает что это будет из себя представлять, и как будет осуществляться. У нас есть математика, которая является абстракцией для вычислений. Есть математическая логика. Что нам нужно чтобы создать абстракции для программирования? В первую очередь нам нужна формальная вычислительная система (абстракция). Тьюринг придумал свою формальную систему, которая стала родоначальником императивного программирования. Чёрч придумал свою систему, которая стала родоначальником функционального программирования.
Эти две концепции фундаментальны. Ничего нового в теории вычислений с тех пор не придумано. Все языки следуют этим концепциям. Или одной из них, или обеим сразу. Можно с этим мириться, можно протестовать, но этого не изменить. Либо ты принимаешь это как данность, либо создай свою формальную систему, если ты считаешь, что лучше понимаешь какой должна быть вычислительная система.
> Нет там циклов, нет переменных, нет последовательного изменения состояния как результата программы.
Ну вот в эликсире есть присваивания, например.
>Императивные же предполагают полностью императивный код.
Лол, то есть если я в коде на питоне все лупы перепишу на map/filter/reduce, то питон станет от этого декларативным языком?
Сейчас почти все языки позволяют писать код как декларативно, так и императивно, к какой же категории их отнести в твоём бинарном мирке?
>Состояние в программах на ФП языках должно быть минимальным. В этом должны быть заинтересованы программисты прежде всего.
Ну спасибо, кэп. Я тебе скажу больше, работа с состоянием вообще должна быть сведена к минимуму в любых языках, и лучше бы её и не было вообще. Но вот только реальные программы, вроде базы данных, или хттп-сервера почти полностью занимаются исключительно работой с состоянием и внешним миром.
> Процессоров в природе не существует, их придумали люди и наделили именем процессор.
Охуеть, и что процессора теперь не существует? Он не реальный от этого стал? ФС - это абстракция, окей, но хард на котором она лежит - вполне реальный, как и инструкции которые данные на него пишут.
И да, я не специалист CS, это просто ты долбоёб. Если ты начинаешь спорить на тему декларативности и тем более математичности какого-то кода, то это как бы требует от тебя знания хотя бы таких понятий как чистота, ссылочная прозрачность (это разные вещи), тотальность, наконец. Но судя по той хуйне что ты тут выше понаписал, это как раз у тебя проблема с базовыми понятиями. В лиспе у него setq нету, и код там математический, вообще пиздец.
>>1064486
>Тьюринг придумал свою формальную систему, которая стала родоначальником императивного программирования.
>Чёрч придумал свою систему, которая стала родоначальником функционального программирования.
А кто стал родоначальником логического программирования, например?
>Эти две концепции фундаментальны.
Охуеть, а SKI-исчисление, а нормальные алгоритмы маркова?
И вообще всё это хуйня. Я предпочитаю думать иначе. Нет никаких "родоначальников".
В естественных науках, как и в инженерии формализация делается уже в конце, когда область построена, есть достаточно материала и частных случаев, которые теперь можно систематизировать. Спасибо конечно Тьюрингу за его вклад, но инженеры и без него бы разобрались как зделоть компуктер и как быдлокодить для него инструкции на перфокартах. Да и сегодняшнему программисту нахуй не нужно знать про какую-то там МТ, теорию вычислимости и т.д. Это развлечение для компуктер-сциентист мочёных и воннабишных аутистов, вроде тебя.
Кстати, здесь >>1064463 очень хороший пойнт.
Лямбда-исчисление полно по Тьюрингу.
В рамках полноты по Тьюрингу, язык должен иметь некоторые средства управления последовательностью действий. Но суть декларативности как раз в том, что там нет control-flow элементов (что делать, а не как делать же).
In computer science, declarative programming is a programming paradigm—a style of building the structure and elements of computer programs—that expresses the logic of a computation without describing its control flow
https://en.wikipedia.org/wiki/Declarative_programming
Так что лямбда -исчисление - не (полностью) декларативно.
> Нет там циклов, нет переменных, нет последовательного изменения состояния как результата программы.
Ну вот в эликсире есть присваивания, например.
>Императивные же предполагают полностью императивный код.
Лол, то есть если я в коде на питоне все лупы перепишу на map/filter/reduce, то питон станет от этого декларативным языком?
Сейчас почти все языки позволяют писать код как декларативно, так и императивно, к какой же категории их отнести в твоём бинарном мирке?
>Состояние в программах на ФП языках должно быть минимальным. В этом должны быть заинтересованы программисты прежде всего.
Ну спасибо, кэп. Я тебе скажу больше, работа с состоянием вообще должна быть сведена к минимуму в любых языках, и лучше бы её и не было вообще. Но вот только реальные программы, вроде базы данных, или хттп-сервера почти полностью занимаются исключительно работой с состоянием и внешним миром.
> Процессоров в природе не существует, их придумали люди и наделили именем процессор.
Охуеть, и что процессора теперь не существует? Он не реальный от этого стал? ФС - это абстракция, окей, но хард на котором она лежит - вполне реальный, как и инструкции которые данные на него пишут.
И да, я не специалист CS, это просто ты долбоёб. Если ты начинаешь спорить на тему декларативности и тем более математичности какого-то кода, то это как бы требует от тебя знания хотя бы таких понятий как чистота, ссылочная прозрачность (это разные вещи), тотальность, наконец. Но судя по той хуйне что ты тут выше понаписал, это как раз у тебя проблема с базовыми понятиями. В лиспе у него setq нету, и код там математический, вообще пиздец.
>>1064486
>Тьюринг придумал свою формальную систему, которая стала родоначальником императивного программирования.
>Чёрч придумал свою систему, которая стала родоначальником функционального программирования.
А кто стал родоначальником логического программирования, например?
>Эти две концепции фундаментальны.
Охуеть, а SKI-исчисление, а нормальные алгоритмы маркова?
И вообще всё это хуйня. Я предпочитаю думать иначе. Нет никаких "родоначальников".
В естественных науках, как и в инженерии формализация делается уже в конце, когда область построена, есть достаточно материала и частных случаев, которые теперь можно систематизировать. Спасибо конечно Тьюрингу за его вклад, но инженеры и без него бы разобрались как зделоть компуктер и как быдлокодить для него инструкции на перфокартах. Да и сегодняшнему программисту нахуй не нужно знать про какую-то там МТ, теорию вычислимости и т.д. Это развлечение для компуктер-сциентист мочёных и воннабишных аутистов, вроде тебя.
Кстати, здесь >>1064463 очень хороший пойнт.
Лямбда-исчисление полно по Тьюрингу.
В рамках полноты по Тьюрингу, язык должен иметь некоторые средства управления последовательностью действий. Но суть декларативности как раз в том, что там нет control-flow элементов (что делать, а не как делать же).
In computer science, declarative programming is a programming paradigm—a style of building the structure and elements of computer programs—that expresses the logic of a computation without describing its control flow
https://en.wikipedia.org/wiki/Declarative_programming
Так что лямбда -исчисление - не (полностью) декларативно.
Тебе как минимум надо самом разобраться в определениях. С декларативностью ты уже обосрался.
Насчёт определения функционального языка, правильно было бы сказать, что он отличается от императивного тем, что в нём функции являются функциями в математическом смысле (то есть они как минимум чистые).
In computer science, functional programming is a programming paradigm—a style of building the structure and elements of computer programs—that treats computation as the evaluation of mathematical functions and avoids changing-state and mutable data
https://en.wikipedia.org/wiki/Functional_programming
Проблема в том, что многие так называемые функциональные языки, могут содержать в функциях сайд-эфекты, следовательно они нихуя не функциональные в строго смысле. И даже чистые ФЯ, вроде Haskell имеют свои концептуальные проблемы. Например, выражение x :: IO () со многих точек зрения вполне себе чистое, ты можешь передавать его всем хаскельским функциям, и ничто его не изменит, но как-только ты положишь его в main, это заставит рантайм сделать что-то не чистое. Чистота в хаскеле относительна. Например, снаружи значение x :: State () вполне себе чистое, однако внутри State монады, x может быть втянут в не чистое монадическое вычисление. Это конечно охуенно что язык контролирует сайд-эфекты с помощью типов, но вот что насчёт математичности функций это вопрос. И этом затронуто только понятие чистоты, с RT и тотальностью, которыми тоже обладают математические функции всё ещё сложнее.
>Ну вот в эликсире есть присваивания, например.
Не знаю как в Эликсире, а в Эрланге нет присваивания.
>Сейчас почти все языки позволяют писать код как декларативно, так и императивно, к какой же категории их отнести в твоём бинарном мирке?
Учись видеть реальность, а не выдавать желаемое за действительное. Я уже писал, что языки могут поддерживать и императивное и функциональное программирование. Только у тебя глаза в другом месте, не буду говорить в каком.
>ФС - это абстракция, окей, но хард на котором она лежит - вполне реальный, как и инструкции которые данные на него пишут.
Диск это тоже абстракция. Когда до тебя дойдет, что всё в компьютерах абстракции? И железо и софт, все это вместе абстрагирует от реализации, и дает понятное формальное представление, такое как: hdd, cpu, gpu, os, network, assembler, etc. Всё это не более чем формализмы. Когда не было компьютеров, не было формальной системы для вычислений на компьютерах, тогда люди начали формализовывать эти понятия.
И вообще, перед кем я тут распинаюсь? Перед куском дерьма, которому чуждо уважительное отношение к другим. В который раз ты меня открыто оскорбляешь, и я еще пытаюсь тут с тобой беседовать. Да пошел ты нахер, сосунок ибучий, ты сука двоечник меня тут лечишь еще?! Ты же даже школьный курс математики не осилил, не говоря уже об высшей математике. У тебя в голове каша, ты даже школьную задачу на логику не решишь. Все твои высказывания полностью противоречат логике. Повторяю, все формальные система строятся на математической логике. И программирование здесь не исключение.
То что ты там в какой-то задрыпаной веб-студии на похапе обработчики говна в общественных туалетах пишешь, не делает тебя никем абсолютно. Да и то не факт, схуя тебе верить вообще?! Ты же сука школота, молокосос, по манере общения я это сразу понял. Тебе же язык вырвут если ты в реале пизданешь что-то подобное, что здесь пишешь. Я тебе и плохого слова не написал, псина ты сутулая. Но ты же в каждом посте писал про меня хуйню. На этом достаточно, хуй тебе позволю так с собой разговаривать. Ты сученок еще не обжигался, но у тебя еще все впереди. Твой гнилой язык тебе еще принесет проблем. Мнимая вседозволенность, которая у тебя выработалась в интернете, быстро рухнет когда в реальной жизни тебе придется ответить за слова. И хорошо если тебя нокаутируют. Может ведь быть кое-что похуже.
>Ну вот в эликсире есть присваивания, например.
Не знаю как в Эликсире, а в Эрланге нет присваивания.
>Сейчас почти все языки позволяют писать код как декларативно, так и императивно, к какой же категории их отнести в твоём бинарном мирке?
Учись видеть реальность, а не выдавать желаемое за действительное. Я уже писал, что языки могут поддерживать и императивное и функциональное программирование. Только у тебя глаза в другом месте, не буду говорить в каком.
>ФС - это абстракция, окей, но хард на котором она лежит - вполне реальный, как и инструкции которые данные на него пишут.
Диск это тоже абстракция. Когда до тебя дойдет, что всё в компьютерах абстракции? И железо и софт, все это вместе абстрагирует от реализации, и дает понятное формальное представление, такое как: hdd, cpu, gpu, os, network, assembler, etc. Всё это не более чем формализмы. Когда не было компьютеров, не было формальной системы для вычислений на компьютерах, тогда люди начали формализовывать эти понятия.
И вообще, перед кем я тут распинаюсь? Перед куском дерьма, которому чуждо уважительное отношение к другим. В который раз ты меня открыто оскорбляешь, и я еще пытаюсь тут с тобой беседовать. Да пошел ты нахер, сосунок ибучий, ты сука двоечник меня тут лечишь еще?! Ты же даже школьный курс математики не осилил, не говоря уже об высшей математике. У тебя в голове каша, ты даже школьную задачу на логику не решишь. Все твои высказывания полностью противоречат логике. Повторяю, все формальные система строятся на математической логике. И программирование здесь не исключение.
То что ты там в какой-то задрыпаной веб-студии на похапе обработчики говна в общественных туалетах пишешь, не делает тебя никем абсолютно. Да и то не факт, схуя тебе верить вообще?! Ты же сука школота, молокосос, по манере общения я это сразу понял. Тебе же язык вырвут если ты в реале пизданешь что-то подобное, что здесь пишешь. Я тебе и плохого слова не написал, псина ты сутулая. Но ты же в каждом посте писал про меня хуйню. На этом достаточно, хуй тебе позволю так с собой разговаривать. Ты сученок еще не обжигался, но у тебя еще все впереди. Твой гнилой язык тебе еще принесет проблем. Мнимая вседозволенность, которая у тебя выработалась в интернете, быстро рухнет когда в реальной жизни тебе придется ответить за слова. И хорошо если тебя нокаутируют. Может ведь быть кое-что похуже.
Все понятно, по твоему функциональных языков не существует, функционально писать невозможно, декларативного программирования нет в природе, и т.д. и т.п.
что-то ты зря бумкнул.
Нормально же общались вполне конструктивно.
Ну топит пацан за ссылочную прозрачность и все языки у него кроме хаскеля (да и он недостаточно) не функциональны и недекларативны.
Ничего страшного. Ты тоже начал в свою очередь затирать за то что деструктивные апдейты в коммон лиспе это декларативный код.
Я думаю тут надо быть менее строгим в своих определениях и если быть чуть менее строгим то твой поинт больше имеет смысл.
Если считать что декларативный язык это такой язык где все является лямбда выражением и весь процесс вычисления пораждается редукцией этого терма. То тогда лисп является декларативным языком. Но лисп никак не ограничивает тебя в сайдэффектах и поэтому можно писать код который не является в математическом смысле функциональным.
Я лично избегаю слова "функциональный" когда говорю про лиспы и эрланг с эликсиром. Всегда смогут вывернуть твои слова против тебя.
Как например этот прикол с лиспом. Код представляет из себя список деструктивных ассайнментов, чистая императивщина. Но весь код можно представить как лямбда терм который сворачивается по мере выполнения лисповым интерпретатором и опа. Тут уже декларативные приколы. А эвалюатор уже дергает код на котором реализована виртуальная машина и начинается опять императивный низкоуровневый мир.
В общем холиварная это тема, границы не определены и возможно никогда определены и не будут.
Так что надо остудить пукан и грамотно обрисовывать свою точку зрения. Это же вопрос парадигмы, именно борьба точек зрения. Чтобы твой оппонент тебе надо чтобы точка зрения чувака немного сдвинулась в твою сторону. Тогда ты победишь в споре.
Обзываться школьником на анонимной доске это как-то по школьному.
Давайте как-та конструктивнее няши
Все бы ничего, но получать каждый раз в ответ "ты долбоёб" как-то надоело. Это конечно меня не оправдывает, сильно я перегнул. Не нужно было мне оскорблять оппонента, не смотря ни на что.
Бери Scala, на крайняк Rust. Познакомиться с нормальными типизированными языками все-таки стоит. Есть шанс что скриптовые после этого рассматривать не будешь.
Я выше писал, что кложа, но на самом деле конечно бери Scala. Можешь прочитать Scala for the impatient, чтобы схватить весь синтаксис быстро для сениора-помидора, потом открывай Functional programming in Scala и охуевай, как можно.
>функциональных языков не существует
Тут всё дело формулировки.
Если определять ФЯ - как язык с наличием лямбд, то у тебя почти все современные ЯП будут функциональными.
Можно тогда расширить набор требуемых фич, добавив туда ещё персистентные структуры, TCO, pattern matching, набор стандартных комбинаторов, какой-нибудь lisp compehencions.
По всей видимости, в повседневной речи под ФЯ подразумевают именно это.
Но вообще стоит понимать, что если ты определяешь язык как функциональный просто по набору фич, то это хуйня, а не строгое определение.
Строго определение всегда было одно и лет 40 уже не менялось
ФП - парадигма программирования, в которой процесс вычисления трактуется как вычисление значений функций в математическом понимании последних.
То есть можно вообще выкинуть из языка почти всё что было перечислено выше, и при этом, если тебе удастся сделать его ссылочно прозрачным - то это и будет ФЯ. Другое дело, что без нормальной системы типов это сделать будет достаточно затруднительно.
>функционально писать невозможно
А что это вообще значит, функционально писать?
>декларативного программирования нет в природе
По поводу декларативности выше уже было сказано, что декларативность - это свойство конкретного кода, а не языка или модели. Ну хорошо, наверное, можно назвать декларативным язык, на которой любой код декларативный. Тогда, например, SQL - декларативный. Но только это язык запросов к базе а не программирования, или XML - но это язык описания данных. А вот языков программирования декларативных и при этом тьюринг-полных - нет. Но это изначально тупая затея называть язык декларативным.
А декларативное программирование - это что вообще такое? Заполнение конфигов или написание спецификации для какого нибудь router.ex - тоже можно считать декларативным программирование, но при чём тут лямбда-ямбда и ФП вообще?
Пиздец, какой же ты жопочтец.
Во-первых, я в первых постах пытался с тобой нормально общаться, не смотря на то, что половина твоих постов состояла из ad homien. В какой-то момент у меня просто бомбануло, что ты ТАКОЙ ТУПОЙ и при этом ещё умудряешься хамить в ответ, так что я перешёл на язык, которого ты достоин.
И даже вот этот твой высер, на который я сейчас зачем-то отвечаю, как и любой предыдущий твой высер, состоит из одного и того же: скипаешь половину моих аргументов, повторяешь какую-то хуйню n-й раз подряд, потому что читаешь посты жопой (это в принципе достаточное объяснение и для предыдущего пункта), дальше ad-homien и проекции на жопной тяге.
Вот так всегда, по доброте душевной начинаешь что-то объяснять малолетнему залётышу, которого даже в math загнали под шконку, а он тебя ещё и засирает в ответ.
>Если считать что декларативный язык это такой язык где все является лямбда выражением и весь процесс вычисления пораждается редукцией этого терма.
Декларативность, это в первую очередь отсутствие явного control-flow, то есть ты задаёшь спецификацию, описание задачи и ожидаемый результат, а не последовательность операций как эту задачу решать. Соответственно, если в коде есть какой-то "сначала сделать это, а потом сделать то" - он не декларативный. Но без такого кода, ты даже не выведешь на экран "EBA" "ETO" "TI?" в строгой последовательности.
>где все является лямбда выражением и весь процесс вычисления пораждается редукцией этого терма.
То есть если я весь код запихну в одну огромную лямбду на 10000 строк, то этот код станет декларативным? Он конечно же будет выглядеть как процедурная портянка, но всё ведь нормально, весь процесс будет процессом вычисления этой лямбды.
И в самом лямбда-исчислении тоже есть стейт очевидно (на нём же можно написать программу с изменяемым состоянием). Ну да, он не лежит где-то в явном виде, как в ассемблере, просто пробрасывается между функциями. Тем не менее, можно в любой момент вычисления сделать дамп и посмотреть это самое состояние, хоть оно и будет в размазанном виде. Кстати, не удивительно что современные ПК сделали как имплементацию МТ, а лисп-машины пылятся в музее - отлаживать это говно, наверное, было ужасно неудобно. Ещё и под лямбда-ямбда обязательно GC нужен же, ведь все его любители такие абстрактные, что не до памяти им.
>Декларативность, это в первую очередь отсутствие явного control-flow
Было бы интересно посмотреть на структуру данных с которой работает компилятор для идеального, декларативного языка. Отсутствие control-flow - это синоним отказа от перехода по дугам для абстрактного синтаксического дерева. Но как можно жить без AST? мимо какой-то аутист
А так продолжайте сраться, очень познавательно. Спасибо.
>Если определять ФЯ - как язык с наличием лямбд, то у тебя почти все современные ЯП будут функциональными.
>Можно тогда расширить набор требуемых фич, добавив туда ещё персистентные структуры, TCO, pattern matching, набор стандартных комбинаторов, какой-нибудь lisp compehencions.
Изначально я говорил больше о декларативности кода, нежели о функциональности. Приводя в пример бестиповое Лямбда-исчисление как парадигму описывающую "Что" мы хотим получить, в противовес тому "Как" мы хотим это получить. В pure Lambda calculus нет ничего, только объявление и вызов функции.
>ФП - парадигма программирования, в которой процесс вычисления трактуется как вычисление значений функций в математическом понимании последних.
Это не совсем правильное определение. Функциональное программирование - парадигма в которой программа есть выражение или набор выражений, а результат программы редукция этих выражений.
>Соответственно, если в коде есть какой-то "сначала сделать это, а потом сделать то" - он не декларативный. Но без такого кода, ты даже не выведешь на экран "EBA" "ETO" "TI?" в строгой последовательности.
ШТА? Что за выдуманные стереотипы. Вызов функции это чисто декларативный элемент. Даже в СИКП об этом сказано.
> Кстати, не удивительно что современные ПК сделали как имплементацию МТ, а лисп-машины пылятся в музее - отлаживать это говно, наверное, было ужасно неудобно. Ещё и под лямбда-ямбда обязательно GC нужен же, ведь все его любители такие абстрактные, что не до памяти им.
Современная архитектура компьютеров это победа тупости над разумом. Что уже доказало время. Мощность перестала расти. Начала расти многопроцессорность, но вот беда, императивные программы плохо параллелятся. Будем писать на функциональных языках, но тут снова беда, архитектура для них не совсем подходящая. Получается замкнутый круг.
Назови современные языки без сборщика мусора? Их почти нет. Напомнить где и когда он появился? Концепция нужная, раз все ее используют. Да и другие концепции заимствуют из ФП, но при этом поливают говном ФП как нежизнеспособный концепт. Двойные стандарты получаются.
>современные языки без сборщика мусора
С++17
С99
>inb4 кококо старые языки
Эти языки активно используются на сегодняшний день, весь высокопроизводительный код написан на них - значит это современные языки. Они адекватно решают задачи, поэтому заменять их нет необходимости.
>С++17
>С99
Хех, всего 2? Всего 2, Карл! Получается философия ФП и Лиспа в частности завоевала мир. Как греческая культура победила Римскую Империю, хотя римляне захватили Грецию.
На этих двух языках написан весь высокопроизводительный код в мире, благодаря которому летают самолеты и работают интернеты.
На ФП и Лиспе не написано практически ничего.
Раньше тоже вручную лопатами, морские проливы выкапывали. Но это же не показатель крутости, эффективности, разума в конце концов. Это просто была необходимость. Поэтому использование Си тоже было необходимостью. Если бы архитектура эвм была более совершенной, возможно не понадобились бы языки вроде Си.
Какой смысл выдавать костыли за достижения? Повторю, то что каналы в ручную копали это не достижение. И то что на Си писали много это тоже не достижение. Это применение костылей из-за необходимости.
Внезапно, прокопаные вручную каналы были огромным достижением для своего времени и охуенным бустом для торговли и промышленности.
>И то что на Си писали много это тоже не достижение
На чем есть, на том и писали. Реально работающий код - это огромное достижение по сравнению с пустыми фантазиями.
>Внезапно, прокопаные вручную каналы были огромным достижением для своего времени и охуенным бустом для торговли и промышленности.
Отнюдь. Это было просто необходимостью, и с такими неэффективными затратами, что достижением назвать это сложно. На это уходили годы, даже десятилетия. И ведь можно было найти решение получше. Например механическая машина. На человеческой тяге, на тягловом скоте, или с использованием воды в качестве тяги (водяные мельницы, водяные пилорамы, и т.п.). С голыми руками бросаться в такое дело, это не достижение, а глупость.
>На чем есть, на том и писали.
Да, но оно есть потому что они его создали. Сами создали проблему, и сами на эти грабли наступают. А почему ничего получше не использовали? Да гордыня не позволяла признать свои ошибки и переделать все заново. Поэтому сейчас имеем неспособные к развитию ЭВМ, и как следствие остановившуюся в развитии индустрию.
>можно было найти решение получше
Откуда ты знаешь, что можно было?
>почему ничего получше не использовали?
Что именно ты имеешь ввиду под получше?
Сила в простоте. Самая надежная конструкция - простая конструкция. Страуструп так гордится C++, впрочем кто пишет на нем тот не меньше гордится. Гордится то там нечем. Сплошное позорище. Спека больше 1000 страниц! Невозможность изменения, расширения, оптимизации.
Теперь сравним чистое лямбда-исчисление. Простота, минимализм. Возможность легко кодировать любые языковые сущности. Спеки нет вообще! Это тянет на Нобелевскую премию, не меньше. Но почему-то гордятся и пиарят C++. Да потому что большинство не могут критически мыслить. Они мыслят не собственной головой, а теми слухами, которые слышат везде. В телевизоре, от знакомых, от родителей, и т.д. Овощи одним словом. Они даже не различают самостоятельно добро и зло. Они мыслят и говорят примерно так: если мой сосед нападет на меня и ограбит, то это зло. А если я нападу на соседа и ограблю, то это добро. Такие вот моральные уроды. Разве можно воспринимать их как авторитетов? Конечно нет. Поэтому: "Мнение большинства всегда ошибочно, ибо большинство людей идиоты."
>Откуда ты знаешь, что можно было?
Водяные пилорамы? Водяные мельницы? Отличное решение. Вода может выдать огромную тяговую мощность. А уж приспособить вал для совершения механических действий, не проблема.
>Что именно ты имеешь ввиду под получше?
А что хорошего в C/C++?
>Теперь сравним чистое лямбда-исчисление. Простота, минимализм. Возможность легко кодировать любые языковые сущности. Спеки нет вообще! Это тянет на Нобелевскую премию, не меньше.
Кококо нинужно, нужен код этих ваших альтернативных язычках. Не уступающий С++ по скорости и превосходяший его по красоте. Видеокодек, например. Или физический движок для игр.
>А уж приспособить вал для совершения механических действий, не проблема.
Как ты предполагаешь копать канал с помощью водяной мельницы?
>А что хорошего в C/C++?
То, что ничего лучше нет.
>Кококо нинужно, нужен код этих ваших альтернативных язычках.
Формулируй точнее. Не понимаю что тут написано. Нужен код этих ваших альтернативных язычках? Во первых язычков наверное, а не языкчках. Во вторых не понимаю про какой код речь, код самих языков или код на языках? Ты с какой палаты? В школе учился вообще?
>нужен код на этих ваших альтернативных язычках
Пруфы превосходства нужны. Без них пустая болтовня.
>Как ты предполагаешь копать канал с помощью водяной мельницы?
Я никак не предлагаю. Лишь озвучил возможность создания мощного двигателя уже в то время. Уже тогда были водяные пилорамы, где пильное полотно двигалось водяным двигателем. Можно изготовить ковш, бур, или бульдозер, что позволит копать где угодно. Буром бурить твердое, ковшом и бульдозером убирать мягкое. Катапульты же огромные делали.
Точнее формулируй свои мысли, гадалки в отпуске. Превосходства чего над чем? Если ты не видишь превосходство лямбда исчисления, как мощнейшей вычислительной системы, и при этом простейшей, то это печально. Тебе наверное не нужно программирование, раз ты не понимаешь в выгоду разных концепций. Лямбда исчисление тянет минимум на Нобелевскую премию.
>То, что ничего лучше нет.
Лучше в чем нет? В скорости исполнения? Ну возможно. Да только скорость нужна в последнюю очередь. Нужны правильные абстракции в первую очередь. Когда будут они, тогда можно будет добиться хорошей скорости. А кроме скорости ничего хорошего в Си нет, про C++ даже заикаться не стоит, хуже язык сложно придумать.
>Пока превосходство не продемонстрировано, его нет.
Превосходство в каких аспектах? Лисп превосходит C/C++ во всем, кроме скорости выполнения. Но это и понятно, архитектура ЭВМ упоротая. Если говорить об абстракциях, о мощи программирования, то Лисп камня на камне не оставляет от C++.
>Да только скорость нужна в последнюю очередь.
Есть огромное количество областей где скорость (а также энергопотребление) нужна в первую очередь, и выигрыш в скорости равен миллиардам прибыли. Альтернативы С/С++ в этих областях нет.
>Ясно, фантазии
Обоснуй. Металлообработка уже была. Водяной двигатель уже был. Больше ничего не нужно. Водяные машины уже создавали. Вообще механические машины уже были. Так в чем проблема создать механическую машину для бурения/копания/сгребания грунта?
>выигрыш в скорости равен миллиардам прибыли
Ты в каком классе учишься?
>Есть огромное количество областей где скорость (а также энергопотребление) нужна в первую очередь
Ну назови хотя бы 5.
Каким образом ты создашь мобильную водяную машину?
Каким образом ты создашь водяную машину достаточной мощности (киловатт на 200 хотя бы)?
>Металлообработка уже была
Лол. До 19 века считай что не было.
>выигрыш в скорости равен миллиардам прибыли
Очень интересно где это скорость дает миллиарды прибыли. За счет чего? В мире единицы компаний и людей, которые зарабатывают в IT миллиарды, не говоря уже о том, чтобы они зарабатывали их на какой-то мифической скорости.
>Ну назови хотя бы 5.
Т.е. ты настолько тупой, что даже не знаешь для чего используется ПО в современном мире?
>Каким образом ты создашь мобильную водяную машину?
Руками. Лопасти с валом отдельно. Сама машина отдельно. В чем проблема не понимаю? Линейные корабли начали строить сотни лет назад. По размеру они сравнимы с большими современными зданиями.
>Лол. До 19 века считай что не было.
Чиво? Литья может и не было (высокоточного), но ковка была, штамповка была, и т.д.
Выигрышь в скорости = конкурентное преимущество = доминирование на рынке.
Напишешь ты мобильную операционку на лиспе, а окажется что с ней аккумулятор выжирается в 5 раз быстрее и все, доля рынка ушла к конкурентам.
Запилишь ты свой ютуб, сделаешь бэкэнд на лиспе (включая перекодирование видео) - и тут хуяк, оказывается что тебе требуется в 5 раз больше серверов, чем конкурентам, они за счет меньших расходов на инфраструктуру создают более вкусные условия для авторов и рекламодателей - и все, доля рынка проебана.
Про игры/кады/СУБДы/системное ПО даже говорить нет смысла.
>Т.е. ты настолько тупой, что даже не знаешь для чего используется ПО в современном мире?
Так ты за слова свои не отвечаешь? Ты же сказал, что есть огромное количество областей... Огромное это наверное больше 5-и. Но если ты и пять назвать не можешь, то слово огромное лучше не употреблять. Так а где платят миллиарды за скорость софта?
>Каким образом ты создашь водяную машину достаточной мощности (киловатт на 200 хотя бы)?
Как насчет механики, рычаги увеличивающие силу? Разного диаметра валы увеличивающие и скорость и крутящий момент?
Я прост не вижу смысла скатываться до объяснения очевидного когда опонент включает дурачка чтобы скрыть свой обсер
>Выигрышь в скорости = конкурентное преимущество = доминирование на рынке.
Приведи пример хоть одного продукта, который за счет скорости победил конкурентов. Таких нет.
>Напишешь ты мобильную операционку на лиспе, а окажется что с ней аккумулятор выжирается в 5 раз быстрее и все, доля рынка ушла к конкурентам.
Это твои домыслы. Веб-сервера на Clojure одни из самых быстрых и эффективных.
>Запилишь ты свой ютуб, сделаешь бэкэнд на лиспе (включая перекодирование видео) - и тут хуяк, оказывается что тебе требуется в 5 раз больше серверов, чем конкурентам, они за счет меньших расходов на инфраструктуру создают более вкусные условия для авторов и рекламодателей - и все, доля рынка проебана.
Снова твои домыслы. Не доказано, что для Лиспов нужно в 5 раз больше серверов.
>Про игры/кады/СУБДы/системное ПО даже говорить нет смысла.
Так архитектура на Цэ заточена. Но есть же эффективные компиляторы для функциональных языков, для ML точно есть. Haskell и Ocaml. Они почти не уступают Си. Сейчас и лисповые компиляторы довольно эффективны. Просто те кто не умеют думать, до сих пор гоняют сплетни 50-ти летней давности, о том, что Лисп медленный.
А теперь сравним другие показатели. Приложение на Лиспе пишется минимум в 2 раза быстрее. Кода меньше, он надежней, более читабельный, то есть более поддерживаемый. Получается мы сэкономили на времени, а время самый ценный ресурс. "Кто не может управлять своим временем, тот не сможет управлять ничем." П. Друккер.
Ты слился. Впрочем я не удивлен. Хотел излишне приукрасить словом огромное, да только обосновать это не сможешь.
>Рычаги не увеличивают мощность.
Рычаги увеличивают силу, а не мощность. Там слово "сила", не надо перевирать. Меньше всего мне хочется опровергать ложь.
Там было слово "мощность"
>Каким образом ты создашь водяную машину достаточной мощности (киловатт на 200 хотя бы)?
>Приведи пример хоть одного продукта, который за счет скорости победил конкурентов. Таких нет.
Так и продуктов на лиспах нет (кроме емакса, лол). Победа получается заочной: все понимают, что с тормознутым продуктом на рынок лучше не соваться и сразу пишут на С/С++.
>Веб-сервера на Clojure одни из самых быстрых и эффективных
Веб-сервера или веб-приложения, крутящиеся на веб серверах написаных на С и по сравнению с ПХП?
>Не доказано, что для Лиспов нужно в 5 раз больше серверов
Не доказано может оказаться что и в 50 раз. Потому что программисты на Лиспе ничего кроме болтовни не производят. Нет кода = нет данных для сравнения.
>Так архитектура на Цэ заточена
Что значит "заточена под С"? Каким образом кэш, набор инструкции, шина доступа к памяти и прочие вещи заточены под С?
>Но есть же эффективные компиляторы для функциональных языков, для ML точно есть. Haskell и Ocaml.
>сплетни 50-ти летней давности, о том, что Лисп медленный
Без пруфов это болтовня. Догоните С в реальных задачах - будет о чем говорить.
>Приложение на Лиспе пишется минимум в 2 раза быстрее.
Беспруфненько
>Получается мы сэкономили на времени, а время самый ценный ресурс.
Не всегда. Если мобильная операционка жрет в 5 раз больше энергии - то, что ее быстро написали не имеет никакого значения.
>Там было слово "мощность"
Зачем ты врешь? Вот моя цитата: >Как насчет механики, рычаги увеличивающие силу?
Где там слово мощность?
Вопрос был про мощность. А в ответ ты начал говорить про рычаги, что означает полное непонимание механики.
>сразу пишут на С/С++.
У тебя детское мышление. Измеряешь все крутостью. Бизнес измеряет все целесообразностью. На C/C++ пишут исключительно очень ответственные куски кода, только куски. Продукты же пишут на том, что проще, легче поддерживать, меньше писать кода, меньше тратить времени. Ни гугл, ни яндекс, ни майл.ру, почти не используют C/C++. Потому что это пережитки прошлого.
Ты мне надоел. Не моя забота тебя образовывать. Ты слился уже давно, да еще и переврал нагло мои слова. Так что всё, финита ля комедиа, ауфидерзейн.
Даже шутка в прошлом была: Eighty Megabytes And Constantly Swapping
И это самый успешный проект на лиспе
> На C/C++ пишут исключительно очень ответственные куски кода, только куски
Ну наконец-то и до тебя дошло, что ответственные куски кода надо писать на С/С++
>Продукты же пишут на том, что проще, легче поддерживать, меньше писать кода, меньше тратить времени.
И внезапно это не лисп или какая-то еще функциональная хрень!
>Так что всё, финита ля комедиа, ауфидерзейн.
Правильно, иди штаны стирай, лиспоребенок
http://fprog.ru/2010/issue4/vitaly-mayatskikh-lisp-abstractions-on-steroids/
фейспалм.джпг
>Консалтинговая компания «Flying Frog Consultancy», продвигающая решения на OCaml
>Flying Frog Consultancy
Это не статья, а какой-то сплошной стеб
Контента там тоже нет. Это сайт уровня сайтов на народе начала 2000х. Очень показательно.
Байтоебы даже мыслить самостоятельно не могут. Только копировать чужие мысли.
Идите нахуй байтоебы, этот тред про Elixir.
> Приводя в пример бестиповое Лямбда-исчисление как парадигму описывающую "Что" мы хотим получить, в противовес тому "Как" мы хотим это получить.
В том то и дело, что в лямбда-исчислении должны быть средства написания "как мы хотим получить", иначе бы оно не было тьюринг-полным.
>Это не совсем правильное определение.
Ну я не знаю тогда, это как бы официальное определение. Чем тогда у тебя функции в ФП отличаются от функций в императивных языках? Если я на императивном языке представлю программу как кучу функций, он функциональным от этого станет?
> парадигма в которой программа есть выражение или набор выражений
Вооо. Вот это уже ближе к делу
It is a programming paradigm, which means programming is done with expressions or declarations instead of statements.
Но только языки в которых стейтментов нет, а всё экспрешен - это исключительно чистые ФЯ, а чистый ФЯ подразумевает что все функции нём чистые. Есть всякие мультипарадигмальные и нечистые ФЯ, где нормальной разницы между стейтментом и экспрешеном просто вообще не проводят, типа даже если экспрешен выполняется в последовательном контексте, исключительно для сайд-эфекта и всегда возвращает какой-нибудь nil, и вообще то что он возвращает никогда нигде не используется - это типа всё ещё "экспрешен", хотя очевидно, что это стейтмент нахуй. Про ссылочную прозрачность и вообще идемпотентность таких вот охуительных "экспрешенов" я вообще молчу, потому что они не делает даже то, что должны делать по определению
is a combination of values and functions that are combined and interpreted by the compiler to create a new value.
>ШТА? Что за выдуманные стереотипы. Вызов функции это чисто декларативный элемент.
Вызов чистой функции - да. Я же говорю о вызове какого нибудь println, причём самое важно здесь - вызове в строгой последовательности. То есть мне нужны средства, которые бы гарантировали последовательный порядок выполнения, как ты понимаешь, здесь мы говорим о control-flow.
>На ФП и Лиспе не написано практически ничего
сколько там процентов телеком области обслуживает код на эрланге?
Я не знаю, сколько? И что именно там написано на Эрланге, уж не тонкий ли слой управляющей логики, который дергает АПИ операционки?
Парень, да ты же дурак. Про эрланг слышал? Кложур? Ты сейчас в треде эликсира находишься. Что на них пишут знаешь? Погуглил бы сначала.
>Я не знаю, сколько?
Нормально написано. Если будешь делать распределенную хуйню где будет много асинхронных долгоживущих процессов и потом эта хуйня должна будет еще быть трошки надежной. То так или иначе будешь писать концептуально на эрланге. Даже если ты пишешь на си. В самом эрланге определены примитивы для акторной модели и в OTP заложены принципы дизайна распределенных систем.
Еще я булькнул с первокурсника который назвал емакс самым крутым проектом написанном на лиспе кек. Вообще-та емакс написан на сишеньке, даже статью на лурке про емакс не потянул :(
На функциональных "язычках" сейчас пишут довольно много хорошего софта. Вот например первый результат гугла по ключу companies using clojure https://leonid.shevtsov.me/post/companies-that-are-using-clojure/
>Нормально написано.
Так сколько?
>То так или иначе будешь писать концептуально на эрланге. Даже если ты пишешь на си.
А я и не против.
>На функциональных "язычках" сейчас пишут довольно много хорошего софта
>companies using clojure
Вау-вау, полегче парень, ты как-то слишком быстро перешел от "много хорошего софта" до "companies using clojure". Такой маневр надо делать плавно, за несколько постов.
На них пишут куски фронтенда или бэкенда. То же самое, что и на Питоне или ПХП. Убожество по сравнению с элитными С и С++, на которых пишут критически важный для существования этого мира код.
Я писал и полностью бекенд на эликсире и полностью фронтенд на кложескрипте. Был еще опыт написания всего этого добра в фулстекджс на всяких бабелах и транспайлерах чтобы было менее рыготно. Субъективно я считаю что лучше писать всякую веб херню на языках с имьютабельностью. На много лучше дизайн получаецца кода имхо.
А вот на царском и божественном си и с++ я писал тока лабы в универе. И я бы низачто не писал бы на нем критически важный для существования софт лол :) Сишечка конечно нужна для написания виртуалочек быстрых, операционок и быстрых либ для числодрочения. Но писать на таком языке не верхнем уровне это ебланизм, в этом я надеюсь мы согласимся?
А за с++ еще xenocephal хорошо пояснил. С тех пор особо нихуя не поменялось :)
Erlang еще больше используют чем Clojure. Телефоны, роутеры, скорее всего ты каждый день сталкиваешься с Erlang софтом.
У тебя прослеживается юношеский максимализм. Ты мыслишь стереотипами о крутости C/C++. Такие же речи как у тебя, я слышал еще учась в школе. Школота поклонялась С/C++ даже не понимая, что эти языки не пригодны для серьезных проектов. Даже Яндекс отказался от C++ в пользу Go.
>В том то и дело, что в лямбда-исчислении должны быть средства написания "как мы хотим получить", иначе бы оно не было тьюринг-полным.
Не хочу тебя оскорблять, но ты выглядишь дауном. Ты не знаешь Лямбда-исчисления и начинаешь о нем рассуждать. В чистом нетипизированном Лямбда-исчислении нет ничего отвечающего на вопрос как. Все абсолютно декларативно. И это не мешает иметь полноту по Тьюрингу. Ты полный дилетант.
>>1065425
>Ну я не знаю тогда, это как бы официальное определение.
Врешь. В вики ты это прочитал.
>>1065425
>Чем тогда у тебя функции в ФП отличаются от функций в императивных языках?
Тем что это объект первого класса. В императивщине функции не объекты.
>>1065425
>Но только языки в которых стейтментов нет, а всё экспрешен - это исключительно чистые ФЯ, а чистый ФЯ подразумевает что все функции нём чистые.
Какой же ты тупой, уж извини. В pure Lambda calculus как и в любом функциональном языке - программа есть выражение, независимо от наличия императивных возможностей. Во время исполнения это выражение редуцируется. Никакого отношение к чистоте это не имеет.
>>1065425
>Вызов чистой функции - да. Я же говорю о вызове какого нибудь println
Даже вызов println является декларативным элементом. Также как в html ты выводишь текст на экран с помощью <p> например.
>>1065425
>причём самое важно здесь - вызове в строгой последовательности. То есть мне нужны средства, которые бы гарантировали последовательный порядок выполнения, как ты понимаешь, здесь мы говорим о control-flow.
Ты со своим контролфлоу заебал уже. Нахуй ты его в каждом сообщении лепишь? Какое блять отношение последовательности с декларативностью? Все, отдыхай, с тобой дискутировать себе дороже. Иди читай СИКПЫ, ТАПЛЫ, и все остальное. Нехуй людям мозги пудрить.
>В чистом нетипизированном Лямбда-исчислении нет ничего отвечающего на вопрос как.
Вай-вай, но правила редукции и есть это самое как.
Лямбда-выражения могут вести себя одинаково (редуцироваться к одинаковому результату), но настолько разными путями, что на практике различие между ними надо делать обязательно, см., например, различные варианты комбинатора неподвижной точки; ну или просто... разные алгоритмы сортировок. Т.е. некое "как" всё-таки заложено.
прости братишка, там в колонтитуле на каждой страничке вшита строка "Prepared exclusively for Anon Name", если подскажешь как ее в 2 клика вырезать из pdf - вырежи и скину.
>В чистом нетипизированном Лямбда-исчислении нет ничего отвечающего на вопрос как. Все абсолютно декларативно.
Окей, как на нём написать программу, которая просит у юзера ввести своё имя, и потом выводит на экран "Ti hui, %{username}"?
>Тем что это объект первого класса. В императивщине функции не объекты.
Во-первых, где ты вообще видел определение ФП, требующего наличия в языке hof?
Во-вторых, что мне мешает в императивном языке, скажем, в джаве, вместо hof использовать паттерн strategy с тем же результатом? Или даже в сях обычную структурку с указателем на функцию?
>Даже вызов println является декларативным элементом
Я конечно понимаю, что ты с отклонениями и отсталостью в развитии, иначе невозможно объяснить, как ты умудряешься писать весь этот феерический бред, и почему за всё время срача не осилил даже одного определения прочитать, но это уже полный пиздец. Нет, это не экспрешен, это вполне императивный стейтмент - "выведи на экран строку (после того и перед тем как)".
>Также как в html ты выводишь текст на экран с помощью <p> например.
"<p>" ничего не выводит на экран, это тег разметки. И html это не язык программирования. А вот язык, на котором написан движок, который эту спецификацию будет обрабатывать, как раз имеет вполне императивный println.
>Какое блять отношение последовательности с декларативностью?
В том, что в декларативном коде по определению не должно быть control-flow, может быть?
>Все, отдыхай, с тобой дискутировать себе дороже. Иди читай СИКПЫ, ТАПЛЫ, и все остальное.
Это говорит даун, с одной извилиной, который обосрался в каждом посте в этом треде.
> Нехуй людям мозги пудрить.
Ну, если для тебя "людям мозги пудрить" - это говорить очевидные вещи, с которыми можно ознакомится на страничке wiki, или в любой книге, касающейся этой темы, или вообще на любом ресурсе, который выдаст гугл по этой теме, то хуй знает.
>>1065777
>вызов println является декларативным элементом
Вот это знатно ты сам себя в рот выебал. Если у тебя println - это декларативный элемент, то очевидно, printFile и readFile тоже (концептуально это всё одинаковые операции). И управление последовательностью действий - у тебя тоже никак декларативности не противоречит. Так вот, ты вообще понимаешь, что эти вещи - это по-сути базовые операции МТ? Я не знаю, каким образом в твоей голове они умудряются оставаться декларативными при этом. Имея в языке возможность писать/читать файл и выполнять операции последовательно, ты можешь реализовать в нём всю императивщину: присваивания, лупы, явный стэйт и многое другое. И как же так вышло, что мы из "декларативных" элементов, вывели ассемблер, м?
SQL - декларативный волне.
Только это язык запросов, а не ЯП и уж тем более никакого отношения к лямбда-хуямбда не имеет.
>Мужики, о чём язык?
>Это эрланг доведённый до ума, на котором приятно и удобно разрабатывать не только прошивки для роутеров, но и типичные веб-сервисы. Содержит в себе все средства современных схожих по духу языков и технологий (clojure, akka) для быстрой и удобной разработки, и имеет хороший UX (ruby-style), чтоб разрабатывать было комфортно и весело.
Как и в эрланге, основной упор сделан на конкуретность/распределённость, но в отличие от него, помимо изначально хорошо подобранных примитивов, есть множество высокоуровневых фич для упрощения разработки сложных систем.
Выполняется на эрланговской VMке, и так как это система обкатанная в продакшне не один десяток лет, отсутствуют детские болезни и прочие неприятные неожиданности, которые обычно присущи новым технологиям.
>Что на нём можно сделать?
От бекенда для просто веб-прилаги, до супер-ёба распределённой системы, которая будет линейно масштабироваться на зиллион узлов, при этом один узел сможет держать 2кк+ соединений. При этом всё есть из коробки.
Ещё у нас есть лучший веб-фреймворк всех времён и народов. А ещё, за счёт того, что все прогрессивные рубисты перекатились сюда ещё 2 года назад, то почти всё, что было в рубимирке есть у нас, но лучше. Ну и плюс, за счёт полной совместимости с эрланг-кодом, и в связи с тем, что все прогрессивные эрлангисты перекатились сюда ещё 2 года назад, у нас есть всё, что было в эрланге или лучше.
Короче, если хочешь разрабатывать веб-прилаги, или вообще серверные системы любой сложности, и чтоб это прикольно, а не через аналные боли и превозмогания - тебе сюда.
С точки зрения похапешника - несомненно.
> От бекенда для просто веб-прилаги, до супер-ёба распределённой системы
Но зачем?
троллейбус из хлеба жпж
Что зачем?
>Ещё у нас есть лучший веб-фреймворк всех времён и народов.
Слишком громкое заявление. На счет этого можно поспорить.
>Reddit was originally written in Common Lisp but was rewritten in Python in December 2005.
Когда начинается серьезный бизнес, лиспоигрушки отправляются на помойку.
- насколько тяжело поддерживать кодовую базу, которую сам же писал, спустя, скажем, полгода-год?
- как состоят дела у эликсира и BEAM в общем с переносимостью? Т.е., существуют ли проблемы с переносом кода на другую ОС или архитектуру? Легко ли переносится код со средой исполнения, скажем, на другую машину без доступа к сети (проще говоря, достаточно ли просто скопировать проект и среду исполнения для последующего запуска)?
- существенно ли редьюсит кодовую базу Phoenix при разработке веб приложений, по сравнению с "голым" эликсиром, или особого смысла с ходу начинать изучение этого фреймворка нет?
Заранее спасибо за ответы.
Не знаток, но отвечу на пару вопросов.
>Т.е., существуют ли проблемы с переносом кода на другую ОС или архитектуру?
это байткод со всеми вытекающими
>скажем, на другую машину без доступа к сети
Докер контейнер тебе в помощь
http://jobs.elixirdose.com/
>>1067972
>насколько тяжело поддерживать кодовую базу, которую сам же писал, спустя, скажем, полгода-год?
Смотря как писал и как много кода. Ну и от самого проекта зависит.
>как состоят дела у эликсира и BEAM в общем с переносимостью? Т.е., существуют ли проблемы с переносом кода на другую ОС или архитектуру? Легко ли переносится код со средой исполнения, скажем, на другую машину без доступа к сети (проще говоря, достаточно ли просто скопировать проект и среду исполнения для последующего запуска)?
Гугли релизы. Для их сборки есть старый exrm, есть новый distillery. Собираешь на них релиз, теоретически он кроссплатформенный. Но на практике переносимость есть скажем между mac OS и линуксом, с виндой как всегда проблемы. Так чтоб иметь кроссплатформеность без геморроя то лучше юзай докер.
>- существенно ли редьюсит кодовую базу Phoenix при разработке веб приложений, по сравнению с "голым" эликсиром, или особого смысла с ходу начинать изучение этого фреймворка нет?
Для веба, даже если это простейший json api - очень существенно. Даже не задумывайся, сразу бери феникс, серьёзно. Там оверхеда почти нет, потому что феникс - это просто хорошо структурированный пайплайн, набор плагов и dsl'ей к ним.
Ну давай, назови что лучше? Надеюсь это не будет MVC+AR хуйня из нулевых и не неюзабельные говна типа Yesod.
Постой-ка, ты назвал Феникс лучшим, повторяю лучшим, не одним из лучших, а лучшим. Обоснуй свое утверждение. Почему Феникс лучший? Если ты не можешь обосновать, то и мне незачем называть альтернативы.
Ну чё ты доебался со своим тупняком? Может ты у меня ещё формальное доказательство попросишь? Или выкладку со строгим сравнением феникса со всеми существующими фреймворками? Или ты пойдёшь дальше, и доебёшься до универсальной квантификации в моём утверждении, и заставишь доказывать что в будущем тоже не будет фреймворка лучше? А может лучше ты перестанешь вести себя как даун и либо вступишь в срач, защищая своё говно и героически сливаешься в этой баталии против божественного феникса, или просто съебёшь отсюда нахуй?
Этот визг обиженного фанбоя
Ну если ты балабол, то так и скажи.
Феникс не привносит ничего нового. Все его фишки обусловлены фишками языка Эрланг и его виртуальной машиной. Ничего особенного в Фениксе нет, они не придумали ничего сверхъестественного.
>они не придумали ничего сверхъестественного.
ну так со времён машины тьюринга ничего нового никто не придумал
Ну ты и спизданул. Как Erlang/BEAM вообще относится к, например, переходу от сраного AR к использованию вещей типа Ecto? Где блять в Erlang были плаги, пайплайны, каналы, edsl'и и т.д? Почему тогда в Erlang отродясь не было нормального веб-фреймворка, а только говно уровня чикакогобос/мочивеб?
экто это просто макросы, еще это ебучий орм который как ты не засахаривай, а всеравно тебя он выебет в жопу. Потому что расширить экто - значит залезть в кишки весьма ублюдского синтаксиса и насмотрется на простыни паттерн матчинга на эликсировские формы.
Феникс и Экто это неплохие фреймворки. НО это фреймвоки, со всеми вытекающими, они диктуют тебе как писать код и как он будет выполнятся.
При всем при этом рельсы на руби всеравно остаются более удобным решением для написания вебоговна. Просто эликсир побеждает по фичам руби. Но феникс это калька с рельс, а рельсы это здоровенная MVC залупа которую надо долго обмазывать и она нихуя не такая класная и консистнтная, а некоторые вещи прикостылены вообще сбоку и по-ублюдски (вьюхи) и только для того чтобы рубикидам было полегче :)
Я ни в коем случае не говорю что феникс это плохо. Феникс это заебись и лучше все рельсисты пускай съебывают на феникс, от этого только все выиграют.
Но называть его ЛУЧШИМ фреймворком лол бля, там же бойлерплейта на каждый бздох надо генерить дохуя да и рахитектура его очень монструозна, как и во всех MVC поделиях.
Феникс нихуя не вершина вебостроения.
>экто это просто макросы
Там из макросов только описание схемы разве что, ну и едсл для Query (и то можешь вместо него простыми функциями все делать). Сама его суть - это использование обычных иммутабельных структур, вмеcто актив-рекорда, и идея таких же иммутабельных ченджсетов и их композиций, что просто и гениально. Не знаю, зачем тебе его расширять, на нем можно сделать все что угодно, разве что если ты хочешь добавить поддержку какого-то кастомного бекенда, или кастомного драйвера, но и это делается легко: есть документация, есть бихейвер, тебе нужно только имплементировать определенные функции.
>При всем при этом рельсы на руби всеравно остаются более удобным решением для написания вебоговна.
Ага, запихнуть еще больше говна в AR - это то как делаются улучшения в рельсках еще хуй знает с какого релиза.
И как раз феникс не MVC нихуя, он конечно берет определенные вещи из рельс, но далеко не все, как минимум потому что целевые языки совершенно разные.
>там же бойлерплейта на каждый бздох надо генерить дохуя
Как раз наоборот там его и нет.
>там же бойлерплейта на каждый бздох надо генерить дохуя
Кажется мне, что ты и не писал на нем нихуя кроме хеллоуворда. Потому что назвать монструозной комбинацию Plug.Conn + DSL для роутинга к ковбою + интеграцию с Ecto + двигло для темплейтов + пару интеграционных плагов, может только человек, который или феникс в глаза не видел, или у которого любой вебфреймворк монструозный по определению и вообще извращенное понятие о монструозности как у байтоеба. Там вообще нет ничего глобального, это не монолит как рельсы. Феникс MVC у него, вообще охуеть, там нет M в стандартном понимании этого паттерна. Там вообще другая идея, типа данные просто проходят через линзу из плагов и все.
Ну как уже было сказано выше, попытавшись написать средний вебапп на эликсире без феникса, ты гарантированно навелосепидируешь свой феникс, только кривой.
Феникс - вершина вебстроения или давай называй альтернативы. Из конкурентов принимаются вещи хотя бы уровня скалкиного Play 2, нодо/похапе/питонодрисню можешь сразу отложить в сторону.
>экто это просто макросы
Там из макросов только описание схемы разве что, ну и едсл для Query (и то можешь вместо него простыми функциями все делать). Сама его суть - это использование обычных иммутабельных структур, вмеcто актив-рекорда, и идея таких же иммутабельных ченджсетов и их композиций, что просто и гениально. Не знаю, зачем тебе его расширять, на нем можно сделать все что угодно, разве что если ты хочешь добавить поддержку какого-то кастомного бекенда, или кастомного драйвера, но и это делается легко: есть документация, есть бихейвер, тебе нужно только имплементировать определенные функции.
>При всем при этом рельсы на руби всеравно остаются более удобным решением для написания вебоговна.
Ага, запихнуть еще больше говна в AR - это то как делаются улучшения в рельсках еще хуй знает с какого релиза.
И как раз феникс не MVC нихуя, он конечно берет определенные вещи из рельс, но далеко не все, как минимум потому что целевые языки совершенно разные.
>там же бойлерплейта на каждый бздох надо генерить дохуя
Как раз наоборот там его и нет.
>там же бойлерплейта на каждый бздох надо генерить дохуя
Кажется мне, что ты и не писал на нем нихуя кроме хеллоуворда. Потому что назвать монструозной комбинацию Plug.Conn + DSL для роутинга к ковбою + интеграцию с Ecto + двигло для темплейтов + пару интеграционных плагов, может только человек, который или феникс в глаза не видел, или у которого любой вебфреймворк монструозный по определению и вообще извращенное понятие о монструозности как у байтоеба. Там вообще нет ничего глобального, это не монолит как рельсы. Феникс MVC у него, вообще охуеть, там нет M в стандартном понимании этого паттерна. Там вообще другая идея, типа данные просто проходят через линзу из плагов и все.
Ну как уже было сказано выше, попытавшись написать средний вебапп на эликсире без феникса, ты гарантированно навелосепидируешь свой феникс, только кривой.
Феникс - вершина вебстроения или давай называй альтернативы. Из конкурентов принимаются вещи хотя бы уровня скалкиного Play 2, нодо/похапе/питонодрисню можешь сразу отложить в сторону.
>Сама его суть - это использование обычных иммутабельных структур
ну да, эликсир жеж поддерживает иммутабельность :)
В плане структур данных как раз там хитрая беда, там не простые структуры данных, opaque data types. То есть ты рулишься со всей этой фигней как с сорт-оф объектами. Композить квери обжекты можно только через dsl и через интерфейсы определенные в модуле Query. То есть тут top-down подход к дизайну фреймворка где все пляшет вокруг интерфейсов, а не вокруг открытых структур данных, а чтобы эти интерфейсы сделать более юзабельными тебе предлагают навернуть dsl. Что в принципе не плохо. (Кстати changeset нихуя не простая абстракция, это какой-то дырявый пиздец, особенно когда доходит до вложенных ченджсетов вместе с сайдэффектами, которые надо объединить в одну транзакцию, для этого они даже завели еще одну дырявую абстракцию Multi, что символизирует, мы об нее всей тимой голову сломали, это пиздец же)
Но есть например еще и bottom-up подход, при котором ты можешь представить SQL запрос как простую структуру данных (список кортежей) и потом манипулировать этой структурой данных напрямую. Это на много более простое решение и более расширяемое, система открыта тебе вся, а не только верхние интерфейсы от которых ты пытаешься добиться нужного результата, часто протискивая слона через угольное ушко.
>>1069735
да нету никакой вершины, есть много разных подходов которые в разных ситуациях и с разными командами будут работать по разному. У феникса большое количество недостатков, простоты в фениксе не хватает, легкость для рельсопацанов есть, это хорошо. Но вот простоты не хватает :)
>ну да, эликсир жеж поддерживает иммутабельность :)
Не просто поддерживает, а там все структуры иммутабельны.
> То есть ты рулишься со всей этой фигней как с сорт-оф объектами.
Объекты - мутабельные, структуры - нет.
>Композить квери обжекты можно только через dsl и через интерфейсы определенные в модуле Query.
Не обязательно, можно композить через Ecto.Multi, например, он для этого и сделан.
> где все пляшет вокруг интерфейсов, а не вокруг открытых структур данных
Ты не прав, %Ecto.Query{} - эта обычная структура, которую можно передать в любую функцию, можешь её распечатать, сгенерировать в нужном виде, подменить, прикинуться ей используя Ecto.Queryable протокол (как для имён модулей схем, сделано, например). Это и есть open system, как и в кложе.
>Кстати changeset нихуя не простая абстракция
А что там сложного? Это в по сути заключённый в структуру набор изменений, которые нужно применить к сырым данным, чтобы получить то, что можно отправить в Ecto на выполнение.
>особенно когда доходит до вложенных ченджсетов вместе с сайдэффектами, которые надо объединить в одну транзакцию
Ну потому что ты делаешь это через жопу, очевидно. В ченджсетах не должно быть сайд-эфектов, это должна быть чистая трансформация данных, причём, касающаяся исключительно текущей схемы. Если тебе нужны сайд-эффекты - они выносятя отдельно. Multi - это в первую очередь для композиции, просто очевидно, что если ты хочешь выполнить банч изменений, то ты ожидаешь всё или ничего. Это простейшая свехтонкая штука от силы на 150 строк кода, при этом просто гениальная. По сути это такая монадка для бедных, причём, ещё и композится с другими Multi, так что на них можно реализовать самый изьёбистый flow, при этом всё будет подменяемое и реюзабельное. Не знаю, что там у тебя дырявое, использую её в каждом проекте, её минус разве что в том, что ошибка возвращаемая мульти не является Ecto.Changeset, но и сгенерировать её в нужном виде не проблема, тащемта, open system же. И уж точно это лучше, чем хуйня в стиле before_insert, after_update, как в большинстве мейнстримовых говен из нулевых.
>Но есть например еще и bottom-up подход, при котором ты можешь представить SQL запрос как простую структуру данных (список кортежей)
Чем тебе список кортежей отличается от обычного рекорда? И то и другое простая структура, которой ты там же манипулируешь напрямую.
>Это на много более простое решение
Ну да, а ещё более простым является хуярить SQL-запросы напрямую и генерировать все руками, от маппинга на существующие структуры, до обработки ошибок. Дали эрланго-байтоёбо-говноедам протоколы и полиморфизм хоть какой-то, а они так и не поняли нахуй это надо.
>ну да, эликсир жеж поддерживает иммутабельность :)
Не просто поддерживает, а там все структуры иммутабельны.
> То есть ты рулишься со всей этой фигней как с сорт-оф объектами.
Объекты - мутабельные, структуры - нет.
>Композить квери обжекты можно только через dsl и через интерфейсы определенные в модуле Query.
Не обязательно, можно композить через Ecto.Multi, например, он для этого и сделан.
> где все пляшет вокруг интерфейсов, а не вокруг открытых структур данных
Ты не прав, %Ecto.Query{} - эта обычная структура, которую можно передать в любую функцию, можешь её распечатать, сгенерировать в нужном виде, подменить, прикинуться ей используя Ecto.Queryable протокол (как для имён модулей схем, сделано, например). Это и есть open system, как и в кложе.
>Кстати changeset нихуя не простая абстракция
А что там сложного? Это в по сути заключённый в структуру набор изменений, которые нужно применить к сырым данным, чтобы получить то, что можно отправить в Ecto на выполнение.
>особенно когда доходит до вложенных ченджсетов вместе с сайдэффектами, которые надо объединить в одну транзакцию
Ну потому что ты делаешь это через жопу, очевидно. В ченджсетах не должно быть сайд-эфектов, это должна быть чистая трансформация данных, причём, касающаяся исключительно текущей схемы. Если тебе нужны сайд-эффекты - они выносятя отдельно. Multi - это в первую очередь для композиции, просто очевидно, что если ты хочешь выполнить банч изменений, то ты ожидаешь всё или ничего. Это простейшая свехтонкая штука от силы на 150 строк кода, при этом просто гениальная. По сути это такая монадка для бедных, причём, ещё и композится с другими Multi, так что на них можно реализовать самый изьёбистый flow, при этом всё будет подменяемое и реюзабельное. Не знаю, что там у тебя дырявое, использую её в каждом проекте, её минус разве что в том, что ошибка возвращаемая мульти не является Ecto.Changeset, но и сгенерировать её в нужном виде не проблема, тащемта, open system же. И уж точно это лучше, чем хуйня в стиле before_insert, after_update, как в большинстве мейнстримовых говен из нулевых.
>Но есть например еще и bottom-up подход, при котором ты можешь представить SQL запрос как простую структуру данных (список кортежей)
Чем тебе список кортежей отличается от обычного рекорда? И то и другое простая структура, которой ты там же манипулируешь напрямую.
>Это на много более простое решение
Ну да, а ещё более простым является хуярить SQL-запросы напрямую и генерировать все руками, от маппинга на существующие структуры, до обработки ошибок. Дали эрланго-байтоёбо-говноедам протоколы и полиморфизм хоть какой-то, а они так и не поняли нахуй это надо.
>Ну да, а ещё более простым является хуярить SQL-запросы напрямую и генерировать все руками, от маппинга на существующие структуры, до обработки ошибок. Дали эрланго-байтоёбо-говноедам протоколы и полиморфизм хоть какой-то, а они так и не поняли нахуй это надо.
:) ну ладно, мы не поняли. Если тебе нравятся абстракции и все ок, то заебись. Значит оно для тебя.
Но я не понял почему объект должен быть мутабельным?
Объект это некоторое состояние и поведение ассоциированное с этим состоянием, полиморфизм строится на протоколах, а инкапсуляция строится по принципу opaque data type. Наследование никому не надо по понятным причинам.
От того что объект иммутабельный он не перестает быть объектом. Ты связал состояние и поведение и закрыл кишки структуры данных (в документации нигде не описано какие ключи например в структуре Ecto.Query, это инкапсулированно)
> ты можешь представить SQL запрос как простую структуру данных (список кортежей)
Ну так структуры вместо списка кортежей списков хэшей кейвордов придумали, потому что они нормально матчится, во-вторых лучше структурируется. Реализуя SQL запросы во всём их многообразии + средства для их композиции ты или перезобретёшь Ecto.Query, или сделаешь что-то хуже, типа списка кортежей списков без вменяемого интерфеса к нему.
>>1070142
Ну я думал ты про объект в ООП смысле. Так-то в широком понимании объектом всё что угодно назвать, хоть каррирующую функцию.
>инкапсуляция
Никакой инкапсуляции там нет, это обычный struct, т.е. можешь где угодно создать свой %Ecto.Query{} с любыми значениями, или на основе уже имеющегося, тебе не нужен для этого специальный метод, который их генерирует или что-то типа того. Всё открыто. Вообще struct - это обычный map, просто со статически фиксированным набором полей. Можешь выполнить is_map(%Ecto.Query{}) чтоб убедиться.
>Состояние
Под состоянием обычно понимают то, что меняется со временем. Структуры иммутабельны, поэтому говорить что там есть какое-то состояние - глупо. С таким же успехом можно сказать что в списке [1,2,3] есть состояние.
>Ты связал состояние и поведение
Что ещё за глупости? Каким образом они связаны? У тебя есть просто структура, есть протокол, и есть модуль в котором определены функции работающие для этого протокола. Где у тебя что-то связалось? Ты применяешь термины инкапсуляция и состояние совершенно не по адресу.
>в документации нигде не описано какие ключи например в структуре Ecto.Query
https://hexdocs.pm/ecto/Ecto.Query.html#t:t/0
Кому-то стоит научиться читать доку на hexе.
>или сделаешь что-то хуже, типа списка кортежей списков без вменяемого интерфеса к нему
Не понимаю и в чем же сложность. Поискал где такой подход реализован и нашел весьма няшную библиотеку https://github.com/jkk/honeysql
такими структурами данных оперировать проще для меня чем ворочать %Ecto.Query{}, тут ты можешь тупо вставить один квери в другой без использования интерфейсных функций или dsl, выразить свой запрос чисто в данных. Ну как-то так.
>Ты применяешь термины инкапсуляция и состояние совершенно не по адресу
немного не так выразился.
У тебя есть модуль юзер и есть структура юзер
Потом у тебя в системе присутствует идентити юзер вася и ты это идентити изменяешь изменяя его состояние.
vasyan = %Lox.User{name: "vasya"}
vasyan1 = %{vasyan | lox?: false}
Так вот когда эта херня разрастется а состояния юзеров станут большими ты можешь управлять сложностью с помощью инкапсуляции, то есть это будет закрытый тип, как в случае с Ecto.Query обстоят дела.
Из-за того что в квери еще зашита инфа о ассоциациях, прелоадах и еще какая-то служебная инфа.
Такой дизайн у него, я подозреваю, из-за того, что они смотрели на рубиевский arel. То есть дизайнили сначала интерфейсы, а потом уже структуры данных которые нужны для реализации этих интерфейсов.
>такими структурами данных оперировать проще
Ну да, разыменовывать хэш списков кортежей очень удобно. И матчить его на весь экран (из-за жесткой позиционки) тоже удобно, пиздец.
По поводу изменения "состояния", вот что ты по сути говоришь:
>у тебя в системе присутствует map %{a:1, b:2} и ты это :a изменяешь изменяя его состояние.
>map = %{a:1, b:2}
>map1 = Map.replace!(map, :a, 3)
То есть по твоему [1,2,3] таки имеет состояние? У тебя путаница в терминологии, состояние - это то что меняется. [1, 2, 3] никогда не изменится, ты можешь создать только новый список. Вот про какой-нибудь gen_server можно сказать что у него есть состояние, потому что ты не создаешь новый, а меняешь стейт существующего.
Для юзера у тебя есть схемка, которая просто отображает сущность из БД на эликсировскую структуру. То есть это спека по которой генерится структура для модуля. Очевидно, она будет содержать релейшены и системную информацию, потому что они нужны. Опять же, тебе ничего не мешает где угодно сделать u = %User{name: "Vasya"} чтоб сгенерить ее с нужными параметрами, хоть напрямую, хоть через ченджсеты. Я не понимаю в чем у тебя проблема, и в чем тут заключается инкапсуляция. Икапсуляция - это когда, например, закрыл переменную в замыкании и все, хер ее достанешь, или аналог приватных полей с геттерами/сеттерами. Тут же никаких гетеров нет, все данные доступны, даже системные, типа __schema__, и сеттеров нет и замыканий, это такая же структура как твой уебищный список кортежей списков, только удобнее в использовании и лучше инфу структурирует. No objects, just data, епта.
Аrel в чем то похожа на Query (правда таких врапперов в любом языке дофига), все методы построенного обьекта - stateless, так что его можно считать просто модулем. Отличие же в том, что в Query тебе не нужно генерить объект таблицы - в функцию from, который возвращает Query ты можешь передать все что Querable в том числе и сам Query. И функции модуля Repo опять же работаеют для всего что Querable. То есть все компазабельно от начала и до конца, при этом работает с обычными данными, которые можно сгенерить где хочешь и как хочешь, не используя каких либо билдеров вообще. Можно вообще сделать свою кастомную структурку (есть тебе эктовская не нравится), реализовать для нее протокол и гонять по всему приложению. Все это вместе с открытостью данных позволяет тебе все что угодно распечатывать, подменять и тестировать даже то, что для тестирования не предназначалось.
>такими структурами данных оперировать проще
Ну да, разыменовывать хэш списков кортежей очень удобно. И матчить его на весь экран (из-за жесткой позиционки) тоже удобно, пиздец.
По поводу изменения "состояния", вот что ты по сути говоришь:
>у тебя в системе присутствует map %{a:1, b:2} и ты это :a изменяешь изменяя его состояние.
>map = %{a:1, b:2}
>map1 = Map.replace!(map, :a, 3)
То есть по твоему [1,2,3] таки имеет состояние? У тебя путаница в терминологии, состояние - это то что меняется. [1, 2, 3] никогда не изменится, ты можешь создать только новый список. Вот про какой-нибудь gen_server можно сказать что у него есть состояние, потому что ты не создаешь новый, а меняешь стейт существующего.
Для юзера у тебя есть схемка, которая просто отображает сущность из БД на эликсировскую структуру. То есть это спека по которой генерится структура для модуля. Очевидно, она будет содержать релейшены и системную информацию, потому что они нужны. Опять же, тебе ничего не мешает где угодно сделать u = %User{name: "Vasya"} чтоб сгенерить ее с нужными параметрами, хоть напрямую, хоть через ченджсеты. Я не понимаю в чем у тебя проблема, и в чем тут заключается инкапсуляция. Икапсуляция - это когда, например, закрыл переменную в замыкании и все, хер ее достанешь, или аналог приватных полей с геттерами/сеттерами. Тут же никаких гетеров нет, все данные доступны, даже системные, типа __schema__, и сеттеров нет и замыканий, это такая же структура как твой уебищный список кортежей списков, только удобнее в использовании и лучше инфу структурирует. No objects, just data, епта.
Аrel в чем то похожа на Query (правда таких врапперов в любом языке дофига), все методы построенного обьекта - stateless, так что его можно считать просто модулем. Отличие же в том, что в Query тебе не нужно генерить объект таблицы - в функцию from, который возвращает Query ты можешь передать все что Querable в том числе и сам Query. И функции модуля Repo опять же работаеют для всего что Querable. То есть все компазабельно от начала и до конца, при этом работает с обычными данными, которые можно сгенерить где хочешь и как хочешь, не используя каких либо билдеров вообще. Можно вообще сделать свою кастомную структурку (есть тебе эктовская не нравится), реализовать для нее протокол и гонять по всему приложению. Все это вместе с открытостью данных позволяет тебе все что угодно распечатывать, подменять и тестировать даже то, что для тестирования не предназначалось.
>То есть по твоему [1,2,3] таки имеет состояние? У тебя путаница в терминологии, состояние - это то что меняется. [1, 2, 3] никогда не изменится, ты можешь создать только новый список. Вот про какой-нибудь gen_server можно сказать что у него есть состояние, потому что ты не создаешь новый, а меняешь стейт существующего.
Ты упускаешь identity, состояние изменяется у identity.
Где проблема для меня, я описал, я считаю что выражать в данных лучше. Проблема в том что задизайнено все поверх интерфейсов, а не данных. Но это проблема моя личная, потому что мне другие подходы ближе.
>я считаю что выражать в данных лучше
А структ это что по-твоему, не данные? Это обычный хэш, или хэш у тебя тоже не данные? Список кортежей - данные, а хэш не?
И я не понял что ты говоришь про identity. И пикрелейтед твой не понял. Второй пик - это что-то про процессы, там стейт конечно есть, но причем это к обычным стейтлесс данным? И первый пик не понял, там опять же что-то про объекты про которые у нас речь не идет, и про стейт, которого в обычных иммутабельных данных нет.
>, чем конкурентам, они за счет меньших расходов на
А я слышал что до недавнего времени ютуб работал на джанге...
>Запилишь ты свой ютуб, сделаешь бэкэнд на лиспе (включая перекодирование видео)
>(включая перекодирование видео)
Специально для дебилов и любителей лиспа выделил жирным
Ну если чел дебил, то у него все будет из рук вон плохо, верно?
Ни лиспы ни эрланг не подходят для. На лиспе ты будешь дергать интерфейс какой-нибудь числодробилки написанной на чем-нить пошустрее. Кодеки для видео уже давно написаны, а дернуть их можно из любого языка.
Вообще Elixir постигает та же проблема, что многие гибридные языки, хотя гибридным он не является. Что очередной раз, кстати, показывает, что комьюнити, важнее, чем даже сам язык.
Вот сейчас комьюнити языка состоит из:
1) Erlang-байтоёбы, которые хоть и знают платформу , но катастрофически не могут ни во что новое.
2) Ruby-уёбки, которые делают что-то полезное, трудолюбиво портируя в Elixir все рубишные либы, но так как ни платформу, ни идеологию языка часто не знают, то иногда выдают совершенно дебильные либы, типа этого говношедевра: https://github.com/elixir-maru/maru
3) Фениксо-макаки, которых, видимо, большинство и которых кроме феникса ничего не знают. Образцовые фремворкослесари.
4) Так же, по всем ФП-языкам размазана тонким слоем секта аутистов-любителей хаскеля (которые на хаскеле найти работу по неведомым причинам не могут), большинство их, разумеется, размазано по статике, но и в динамику иногда заносит и они клепают и внедряют бессмысленную для динамики ебалу типа: https://github.com/expede/witchcraft
5) Интересные персонажи, которые могут вытащить ХЗ откуда какой-нибудь underrated концепт, типа FBP, понять что он неплохо сочетается с очередной эликсировской ёбой, и скрестить его с другим, менее эпичным, но зато полезным концептом, типа ROP, и выдать годноту типа: https://github.com/antonmi/flowex
которой судьба остаться незамеченной, потому что первым трём группам, из которых состоит 90% комьюнити на такое похуй.
Что касается мейнтейнеров, то фюрерок Жозе и его отважная команда chrismccord, michalmuskala и ericmj рулят куда хотят: могут забросить нудные доработки, переключиться на какую-то астральную хуйню, повыёбываться ей в течение года на всяких конференциях/митапах, потом забросить её и переключиться на что-то третье. Так-то жалоб нет: блокеры и критические баги своевременно фиксятся, полезные вещи пялиться, все стараются что-то улучшить, но общий вектор развития того же эликсира не понятен, по-моему, даже создателю.
Всё это создаёт раскол вместо единства, с ситуацией как в скале: кто-то на макросах точёных, кто-то на монадах дрочёных, а кто-то индус и пишет как на жабе с сахаром. В результате, всё разное и вместо единого комьюнити с единой экосистемой какие-то отдельные загоны со своим внутренним миром, различной степенью глубины.
С одной стороны интересно быть частью этого, чувствуешь себя на волне, с другой стороне будущее какое-то туманное. Хотя кого это ебёт, лол, о чём этот пост вообще нытьё какое-то.
Вообще Elixir постигает та же проблема, что многие гибридные языки, хотя гибридным он не является. Что очередной раз, кстати, показывает, что комьюнити, важнее, чем даже сам язык.
Вот сейчас комьюнити языка состоит из:
1) Erlang-байтоёбы, которые хоть и знают платформу , но катастрофически не могут ни во что новое.
2) Ruby-уёбки, которые делают что-то полезное, трудолюбиво портируя в Elixir все рубишные либы, но так как ни платформу, ни идеологию языка часто не знают, то иногда выдают совершенно дебильные либы, типа этого говношедевра: https://github.com/elixir-maru/maru
3) Фениксо-макаки, которых, видимо, большинство и которых кроме феникса ничего не знают. Образцовые фремворкослесари.
4) Так же, по всем ФП-языкам размазана тонким слоем секта аутистов-любителей хаскеля (которые на хаскеле найти работу по неведомым причинам не могут), большинство их, разумеется, размазано по статике, но и в динамику иногда заносит и они клепают и внедряют бессмысленную для динамики ебалу типа: https://github.com/expede/witchcraft
5) Интересные персонажи, которые могут вытащить ХЗ откуда какой-нибудь underrated концепт, типа FBP, понять что он неплохо сочетается с очередной эликсировской ёбой, и скрестить его с другим, менее эпичным, но зато полезным концептом, типа ROP, и выдать годноту типа: https://github.com/antonmi/flowex
которой судьба остаться незамеченной, потому что первым трём группам, из которых состоит 90% комьюнити на такое похуй.
Что касается мейнтейнеров, то фюрерок Жозе и его отважная команда chrismccord, michalmuskala и ericmj рулят куда хотят: могут забросить нудные доработки, переключиться на какую-то астральную хуйню, повыёбываться ей в течение года на всяких конференциях/митапах, потом забросить её и переключиться на что-то третье. Так-то жалоб нет: блокеры и критические баги своевременно фиксятся, полезные вещи пялиться, все стараются что-то улучшить, но общий вектор развития того же эликсира не понятен, по-моему, даже создателю.
Всё это создаёт раскол вместо единства, с ситуацией как в скале: кто-то на макросах точёных, кто-то на монадах дрочёных, а кто-то индус и пишет как на жабе с сахаром. В результате, всё разное и вместо единого комьюнити с единой экосистемой какие-то отдельные загоны со своим внутренним миром, различной степенью глубины.
С одной стороны интересно быть частью этого, чувствуешь себя на волне, с другой стороне будущее какое-то туманное. Хотя кого это ебёт, лол, о чём этот пост вообще нытьё какое-то.
Пролетарий не в курсе, что существуют низкоуровневые лишпы, существуют быстрые компилящиеся в си лишпы, существуют компиляторы коммон лишпа, которые на синтетических тестах кококо выдают более лучший быстрый код, чем си.
То ли дело православный кложур! Стабильность, интерпрайс, сириус бизнес. Не то что ваша хипстерская хуйня.
*Тот момент, когда понимаешь, что ты настолько стар, что кложа по сравнению с языкнейм выглядит стабильной, скучной и просто работающей.%%
>Clojure
>Стабильность, интерпрайс, сириус бизнес
Лол, нет конечно. Рич Хика и остальные мейнтейнеры кложи ещё более распиздяи, чем Жозе: баги годами висят не закрытыми. Вся штабильность достигается разве что анальной привязкой к JVM, на которой не через жопу работает только один язык.
>Что касается мейнтейнеров, то фюрерок Жозе и его отважная команда chrismccord, michalmuskala и ericmj рулят куда хотят: могут забросить нудные доработки, переключиться на какую-то астральную хуйню, повыёбываться ей в течение года на всяких конференциях/митапах, потом забросить её и переключиться на что-то третье. Так-то жалоб нет: блокеры и критические баги своевременно фиксятся, полезные вещи пялиться, все стараются что-то улучшить, но общий вектор развития того же эликсира не понятен, по-моему, даже создателю.
Вроде можно форкнуть и назвать Emulsum, не?
Гхм, нет, ты неправ. Стабильность достигается тем, что Хикка с самого начала дрочил на эту самую стабильность. Даже древние апи времен пре-1.2, которыми никто в здравом уме не пользуется, висят и будут висеть вечно - ибо ШТАБИЛЬНОСТЬ, НИЗЯ ПОЛОМАТЬ. Куча тикетов закрываются с пометкой "поломает обратную совместимость". Ну и у него целый ток-рант был про стабильность (ты смотрел? посмотри?) и про то, что семвер говно, веб-апи версионируем, а библиотеки - нет. Ну и как бы это, у них же (хикки и команды) весь бизнес построен на кложе (консалтинговая\аутсорсная кложегалера + датомик), так что "забросить нудное, переключиться на какую-то астральную хуйню" особо не получится.
Ну и это, какие баги-то висят? Некритичные же.
> анальной привязкой к JVM
А, ну и пикрелейтед.
Несколько лет хранил эту картинку специально для такого случая, лол, - я знал, что когда-нибудь она пригодится!111
ну а причем тут cljs, когда речь идет о кложе, где все построенно над джявавскими типами?
ну и в кложурскрипте типа поменяли анальную привязку к жвм, на анальную привязку к ноде?
Making this work meant porting the JVM-based code in the ClojureScript compiler to work under Lumo and the Node.js platform.
https://anmonteiro.com/2017/02/compiling-clojurescript-projects-without-the-jvm/
> the ClojureScript compiler
а если ты не про компиляцию, то про что?
или может ты имеешь в виду, что в кложурскрипте, в отличие от кложи, всё построено вокруг кложурных типов, а не джавовских? ну это + конечно, да
Ну ты говорил, что клжс анально привязана к ноде - что, разумеется, неверно. В "доказательство" этого привел ссылку на стороннюю библиотеку, к которой команда clojure/core отношения не имеет. Вот я и сижу тут, гадаю, что же с тобой делать.
Наконец, что значит "все построено вокруг джавовских\кложурских типов"? Базовые абстракции в жвм-кложе реализованы с помощью интерфейсов (в основном по историческим причинам), в клжс - с помощью протоколов. И интерфейсы, и протоколы кложурские, а не какие-то там еще. Лично ричным хиккой написанные. Что тебя в этом смущает? Или тебе не нравится, что базовые клжвм типы реализуют все соответствующие стандартные жвм-интерфейсы, чтобы их можно было прозрачно использовать из кода на других жвм-языках? Ну я не знаю, чем тебе тут помочь; не нравится - не вызывай.
Короче, я не знаю, что ты хочешь тут сказать, и не уверен, что ты сам это знаешь. В частности, вот это высказывание:
> Вся штабильность достигается разве что анальной привязкой к JVM, на которой не через жопу работает только один язык.
-- содержит как минимум три ложных утверждения. Надо нам дальше развивать эту тему, а?
>-- содержит как минимум три ложных утверждения. Надо нам дальше развивать эту тему, а?
Надо.
1) Ты корчишь из себя дурачка.
2) Анон все верно говорит.
3) Если ты действительно такой тупой, разверну.
1. Кложа разрабатывалась для работы поверх жвм, она полностью жвм центрична.
2. Поддержка всех остальных ВМ, хоть дотнет, хоть ноды, вторична и мягко говоря далека от уровня продакшена.
Тем более, что, не имеет смысла, весь смысл кложи в совместимости с жава кодом. Это основная и единственная фича.
3. Качество частей кложи не связанных с прямым взаимодействием с ЖВМ оставляет желать лучшего. (баги висят годами)
Если тебе все еще непонятно, советую найти фотографии своих родителей, и внимательно всмотреться в лица.
Мимокрокодил.
>далека от уровня продакшена
>Мимокрокодил.
Ну если ты не в теме - так проходи мимо молча. Не вижу смысла даже комментировать твой вскукарек.
Ты безпруфный безмозглый кукарекающий фанбой.
Как и предполагалось возразить тебе нечего.
Свой слив ты прикрываешь суперманяврами
>четы сказать то хотел я нипонил11111
>Ну ты говорил, что клжс анально привязана к ноде
Чем ты cljs компилировать собрался? Гугл кложур компайлером разумеется, он баз джава сдк заведётся?
> Базовые абстракции в жвм-кложе реализованы с помощью интерфейсов
Правильно, при этом они джава-совместимы, поддерживают джава-аннотиации и построены на джава-типах, defrecord вообще генерирует java class, в jvm кложе extend работает через стандартный джававский extend и т.д. В cljs всё немного лучше, потому что привязан не к джава типам, а кложуровским (которые привязаны к джава типам в свою очередь), да.
Суть в том что кложа - гостевой езык без платформы, как и Elixir, да. Разница правда в том, что Elixir является логичным продолжением Erlang, в том время как лисп с упором в ФП, коим является кложа, с джявой (а JVM это платформа для джавы, а не для всего подряд, чтобы там маркетолухи оракла не говорили) никак не сочетается.
>содержит как минимум три ложных утверждения. Надо нам дальше развивать эту тему, а?
Думаю, стоит. Давай начнём с того что на JVM нормально работает только джава (груви и прочую шелуху для скриптинга в расчёт не берём).
>Давай начнём с того что на JVM нормально работает только джава (груви и прочую шелуху для скриптинга в расчёт не берём).
Хочу заметить, что "нормально работает" - очень расплывчатое утверждение, хотя и в целом верное.
Я думаю вернее будет сказать, что, джава оптимальный образом сочетается с JVM, а все остальное является попыткой придать JVM свойства которыми она не обладает.
Понятно, что чудес не бывает, и происходит это добавлением замысловатых абстракций, часто глючных, и вносящий дополнительные проблемы с производительностью, которых JVM и так хватает, не говоря уже о снижении понимания происходящего под капотом программистом.
Плюс, в подобных системах вообще нет никакого смысла, если они несовместимы с обычными джава программами, отчего, даже самые красивые абстракции превращаются в мутировавшую подстреленную джаву.
То есть, попытка сделать из джавы не джаву обреченна на провал изначально.
Иди маме пожалуйся.
>>1079091
>>Ну ты говорил, что клжс анально привязана к ноде
>Чем ты cljs компилировать собрался? Гугл кложур компайлером разумеется
У тебя какая-то каша в голове. Клжс анально привязана к ноде, потому что компилируется гугл кложекомпайлером? Ты в курсе, что нода - это окружение для джаваскрипта, а не для джавы? Ты в курсе, что джаваскрипт и джава - разные языки, так?
И да, без джава-сдк гугл кложекомпайлер заведется, вот только что выше по треду это обсуждали, але блядь.
>jvm кложе extend работает через стандартный джававский extend
Охуенные истории. В следующий раз хоть что-то попытайся узнать о предмете, прежде чем пиздеть. О чем с тобой разговаривать после этого?
> В cljs всё немного лучше, потому что привязан не к джава типам, а кложуровским (которые привязаны к джава типам в свою очередь)
Клжс привязан к джава-типам... Еще раз: либо ты не понимаешь, что джаваскрипт и джава - это два разных языка. Либо ты не понимаешь, что такое "тип", чем интерфейс отличается от класса, как устроен пайплайн компиляции и кложи, и кложескрипта, что такое нода, какое у нее место в инфраструктуре жаваскрипа, ну и прочее, прочее. Короче, ты очень много не понимаешь, вести дискуссию с тобой бессмысленно, пытаться тебе все объяснить - долго, нудно и, учитывая твой тон, наверняка бесплодно.
> JVM это платформа для джавы
invokedynamic для джавы значит запилили, охуенные истории. Не шаришь - не пизди.
> Думаю, стоит.
А я думаю, что тебе стоит для начала почитать книжки. Второе издание "программинг кложур", например.
>Клжс анально привязана к ноде, потому что компилируется гугл кложекомпайлером?
Я этого и не говорил. Я говорю что либо ты будешь компилировать cljs как обычно, и тогда тебе надо джава-сдк (как в том же официальном cljs доке-имедже), либо ты будешь компилировать его чем-то вроде того, что я принёс по ссылке, и тогда вместо джавы, тебе понадобится нода. Странно, что ты не понял о чём я.
>И да, без джава-сдк гугл кложекомпайлер заведется
Да, только вместо него тебе понадобиться Lumo и node.js
>Охуенные истории.
ВыВсёВрёти! В кложе можно заэкстендиться от существующего джава-класcа, как в скалке, как это по-твоему работает?
>Клжс привязан к джава-типам...
Ты там в глаза ебёшься? Я этого не говорил. Я это сказал про кложу, а не cljs. И да, я, знаю разницу между джавой и джавоскриптом, а у тебя это вызывает сомнение, потому что ты читаешь жопой и считаешь, что все кто с тобой спорят долбоёбы, и за этот высокомерный тон тебе в ебало поссать нужно и мимо пройти.
Как по твоему у кложи интероп с джавой реализован, ты блять сам хоть знаешь? Все примитивные кложуровские типы - это джаватипы. Многие не примитивные кложуровские типы - тоже джаватипы. Defrecord - генерит тебе java class, reify - анонимный класс. Многие кложуровские вещи имплементят джаваинтерфейсы и после этого ты мне рассказываешь, что кложа не прибита гвоздями к жвм и жабе?
Оставшуюся часть поста ты там охуенно поговорил сам с собой, молодец. Можешь теперь идти нахуй. Не отвечай на этот пост.
> Я этого и не говорил.
Ок, тогда твой посыл сводится к следующему: "чтобы скомпилировать клжс нужен компилятор клжс". Какая глубокая мысль, гхм.
>Да, только вместо него тебе понадобиться Lumo и node.js
Почитай, что такое гугл кложекомпайлер и что такое Lumo. Ты опять несешь полнейшую хуйню.
>В кложе можно заэкстендиться от существующего джава-класcа
Вау! А теперь загугли, что такое extend в кложе. Ты же, блядь, даже не то что не писал, ты не читал про нее ничего, но хавалку свою раскрываешь. Нахуя так жить?
>Я этого не говорил.
>В cljs всё немного лучше, потому что привязан не к джава типам, а кложуровским (которые привязаны к джава типам в свою очередь)
У тебя какая-то неаристотелевская логика в голове, видимо, раз транзитивность не работает. Ну это так.
> Как по твоему у кложи интероп с джавой реализован, ты блять сам хоть знаешь?
Знаю. Я ей пользуюсь еще с тех времен, когда ты в начальную школу ходил deftype'ов не было, и не раз своими руками писал :gen-class декларации, например. Что сказать-то хотел?
> кложа не прибита гвоздями к жвм и жабе?
> и жабе
Ох...
> Не отвечай на этот пост.
Извени((
>>1079528
Вообще-то двачую, но кому-то же надо бампать тред, пока все молчат.
>Ок, тогда твой посыл сводится к следующему: "чтобы скомпилировать клжс нужен компилятор клжс". Какая глубокая мысль, гхм.
Нет, его посыл сводится не к этому.
>Знаю. Я ей пользуюсь еще с тех времен, когда ты в начальную школу ходил deftype'ов не было, и не раз своими руками писал :gen-class декларации, например. Что сказать-то хотел?
Ты все еще не понимаешь?
Ну ты и тупой тупень.
Речь идет о том, что кложа построена вокруг джавы, и тесно связанна как с жавой так и с JVM.
И за пределами джавамира имеет помойное качество и в принципе неприменима.
Если непонятные слова какие, ты спрашивай, анонимус тебе поможет разобраться.
Наркоман штоле?
>Зачем это нужно?
Modern web stack. Есть особая категория веб-фреймворков, например Ocsigen (OCaml), Nitrogen (Erlang), Lift (Scala), WebSharper (F#). N2O тоже из этой категории. Он основан на Nitrogen. N2O наиболее продвинутый из них. Еще очень крутой WebSharper, но он работает только на винде. Проблема в том, что автор не считает необходимым писать подробную документацию.
Сорри, я просто беру Phoenix если нужен веб-фреймворк. Erlang уже как года два пользую только для допила легаси а до этого веб-фреймворки мне особо не нужны были, хотя с чикагобоссом довелось чутка поработать, да.
N2O сильно отличается от rails-like и sinatra-like фреймворков, вообще от всех mvc фреймворков. Как и Websharper и другие. Это и не фреймворк собственно. Наиболее близкий подход у Clojure & ClojureScript, хотя на N2O страницы генерятся по другому. Все пишется на одном языке и бэкенд и фронтенд.
Максимка иди пиарь свое говно в жж
>то и не фреймворк собственно.
А что это? оно всего-лишь диктует как писать код :3
Неее, совсем не фреймворк.
Причем без документации.
Документация к вебшарперу тоже сосет, вместо того чтобы объяснить ЧТО ты делаешь тебе выкатывают целую простыню КАК делать. Никаких новых концепций, подходов, нихуя. Просто вот смотрите - кода мало, видали как я умею? Это хуйня из под коня.
Ты можешь вкратце объяснить чем они новые? На этом сайте уже не раз был и ничего такого не уяснил.
N2O не фреймворк, а набор взаимозаменяемых библиотек, как в кложур. В вебшарпере было реактивное программирование еще до того как его начали использовать везде. Весь код пишется на F#. Можно в одном файле писать контролы для сервера и клиента, клиентский код потом скомпилится в js, даже может компилиться в wasm. Там куча всяких фич, которых нет в мейнстриме. На вебшарпере поднимали 5 миллионов соединений на одной машине году так в 2012, что под силу только c & c++.
Можно так же само сказать, что Phoenix не фреймворк, а набор взаимозаменяемых плагов. И он не MVC, там просто компилируешь пайплайн вида
Plug.Conn |> :make |> :vse |> :zaebis' |> :response
и скармливаешь его ковбою.
>>1085063
Я вообще не понимаю откуда у упоротых маничка бекенд и фроентенд писать на одном языке (еще и в одном файле(!)), когда очевидно, что это совершенно разные подсистемы.
Даже в cljs куча какого-то кала, типа Holpon, которые пропихивают эту денегнератскую идею.
>>1085431
>В вебшарпере было реактивное программирование еще до того как его начали использовать везде.
Если ты про FRP, то от него уже и отказаться успели, в том же Elm. А на плафтормах, поумнее даже не тратили на него время, сразу взяли что-то удобнее.
>На вебшарпере поднимали 5 миллионов соединений
Там свой вебсервер?
>Plug.Conn |> :make |> :vse |> :zaebis' |> :response
Кстати оператор |> слизан с F#.
>>1085437
>Я вообще не понимаю откуда у упоротых маничка бекенд и фроентенд писать на одном языке (еще и в одном файле(!)), когда очевидно, что это совершенно разные подсистемы.
>Даже в cljs куча какого-то кала, типа Holpon, которые пропихивают эту денегнератскую идею.
На Qt разве не также пишут?
>>1085437
>Если ты про FRP, то от него уже и отказаться успели, в том же Elm. А на плафтормах, поумнее даже не тратили на него время, сразу взяли что-то удобнее.
За всех говоришь? Это плохой признак. В вебшарпере уже был свой React еще до того как он родился.
>>1085437
>Там свой вебсервер?
Представь себе да.
>вместо того чтобы объяснить ЧТО ты делаешь
У тебя дислексия? Зайди на https://websharper.com/ и прочитай. Вот я зашел и прочитал. Почему ты не можешь?
Да хуйня обосцанная. Я прочитал овервью https://developers.websharper.com/docs. Ты предлагаешь мне прочитать всю документацию чтобы понять чем он хорош? Какая ценность в этом фреймворке, ты так и не сказал чем он выгодно отличается от феникса, вместо этого напустил какой-то флёр ниебаца крутости и таинственности.
Ебашить на бекенде и фронтенде на f# в одном файле? Это киллер фича?
Проснись, ты обосрался
Смотри, давай я попробую пояснить, почему вебшарпер - ненужно.
Во-первых, он от майкрософта.
Во-первых, у него нет прозрачной интеграции с хостом. Чтобы использовать джаваскриптовую либу, для которой майрософтом не написана обертка, нужно ебаться. То есть это типичный (майкрософтовский) подход "закидать трупами" - вместо того, чтобы решить проблему концептуально, заваливать ее человекочасами. Это работает, пока ты сидишь в их стеке, но шаг влево-шаг вправо - и все, сиди и ебись. Не найс.
Во-вторых, все эти штуки, о которых они пишут на сайте - это очень древние штуки. "Сайтлеты"? Формлеты? Вообще-то в оригинале это было в scheme еще чуть ли не в 90-ые, хвала континуациям. И в смолтоковском сисайде. У них на сайте гордо висит надпись "since 2002". 15 лет.
Да и вообще, тот же шаринг через кодогенерацию используется в гугловском gwt. И они вроде как уже много лет от него постепенно отказываются. Это хорошо для каких-то внутренних проектов, интерпрайс по интранету там, все дела, но для веба - а тем более для мобильного веба - нутыпонел.
Далее, эти сайтлеты, как у них там написано, парсят хттп-запросы "ин э стронгли-тайпед уэй". Эндпоинты, методы, рест, ну все круто - за исключением того, что в вебе для клиент-сайд коммуникации рест уже фактически вытеснен графкуэлем и аналогичными решениями. Опять же, 10-15 лет назад это было бы круто, да.
А еще сайтлеты умеют генерить хтмл из темплейтов. Тоже круто, вот только у нас в 2017 клиентсайд строится на компонентах, так что ребята опять в пролете.
Короче, можно еще долго все эти вещи перечислять, но и так понятно. Подчеркну еще раз, что это типичный майкрософтовский подход: "у нас есть стопицот тысяч программистов, давайте запилим себе очередной фулстэк и сделаем обертки вокруг всего, чтобы завендорлочить любого, кто к нам сунется". Сравни это с тем же кложурскриптовым подходом: "у нас есть три с половиной программиста и полгода времени, давайте сядем и подумаем, как выжать максимум из того, что уже есть". В первом случае изобретение велосипеда - чуть ли не самоцель, во втором - тебе по умолчанию дается полная свобода реюзать удачные решения других людей и платформ. Работает - не трогай.
Но это, я как бы не хочу тут разжигать флеймвар клж вс фш. Тот факт, что под фшарп есть готовый и мачурный фулстек фреймворк с саппортом от йоба-корпорации - это заебись, ящитаю, тут все очевидно. Но не стоит забывать, что у него вполне конкретная область применения, и слишком переоценивать его инновационность тоже, как мне кажется, не стоит.
Смотри, давай я попробую пояснить, почему вебшарпер - ненужно.
Во-первых, он от майкрософта.
Во-первых, у него нет прозрачной интеграции с хостом. Чтобы использовать джаваскриптовую либу, для которой майрософтом не написана обертка, нужно ебаться. То есть это типичный (майкрософтовский) подход "закидать трупами" - вместо того, чтобы решить проблему концептуально, заваливать ее человекочасами. Это работает, пока ты сидишь в их стеке, но шаг влево-шаг вправо - и все, сиди и ебись. Не найс.
Во-вторых, все эти штуки, о которых они пишут на сайте - это очень древние штуки. "Сайтлеты"? Формлеты? Вообще-то в оригинале это было в scheme еще чуть ли не в 90-ые, хвала континуациям. И в смолтоковском сисайде. У них на сайте гордо висит надпись "since 2002". 15 лет.
Да и вообще, тот же шаринг через кодогенерацию используется в гугловском gwt. И они вроде как уже много лет от него постепенно отказываются. Это хорошо для каких-то внутренних проектов, интерпрайс по интранету там, все дела, но для веба - а тем более для мобильного веба - нутыпонел.
Далее, эти сайтлеты, как у них там написано, парсят хттп-запросы "ин э стронгли-тайпед уэй". Эндпоинты, методы, рест, ну все круто - за исключением того, что в вебе для клиент-сайд коммуникации рест уже фактически вытеснен графкуэлем и аналогичными решениями. Опять же, 10-15 лет назад это было бы круто, да.
А еще сайтлеты умеют генерить хтмл из темплейтов. Тоже круто, вот только у нас в 2017 клиентсайд строится на компонентах, так что ребята опять в пролете.
Короче, можно еще долго все эти вещи перечислять, но и так понятно. Подчеркну еще раз, что это типичный майкрософтовский подход: "у нас есть стопицот тысяч программистов, давайте запилим себе очередной фулстэк и сделаем обертки вокруг всего, чтобы завендорлочить любого, кто к нам сунется". Сравни это с тем же кложурскриптовым подходом: "у нас есть три с половиной программиста и полгода времени, давайте сядем и подумаем, как выжать максимум из того, что уже есть". В первом случае изобретение велосипеда - чуть ли не самоцель, во втором - тебе по умолчанию дается полная свобода реюзать удачные решения других людей и платформ. Работает - не трогай.
Но это, я как бы не хочу тут разжигать флеймвар клж вс фш. Тот факт, что под фшарп есть готовый и мачурный фулстек фреймворк с саппортом от йоба-корпорации - это заебись, ящитаю, тут все очевидно. Но не стоит забывать, что у него вполне конкретная область применения, и слишком переоценивать его инновационность тоже, как мне кажется, не стоит.
У тебя точно дислексия. Ну или ты просто дебил.
Во-первых, ты в двух с половиной анонах запутался (я - >>1085534-анон, а не >>1085431-анон).
Во-вторых, ты не можешь зайти на сайт и прочитать овервью. Овервью отвечает на вопрос, ЧТО ты делаешь, и на вопрос КАК ты делаешь в общих чертах тоже отвечает. Что тебе еще нужно пояснить - хуй знает, ты тоже не говоришь. Еще и на мимопроходилов с предъявами кидаешься.
За дебила извини.
ладно, дислексия так дислексия
>типа Holpon
Хоплон, конечно, говно и ненужно (не думаю, что его кто-то кроме авторов использует), но у него вроде нет хуйни в стиле "писать один код, который генерит код для клиента и сервера", не? Там есть рпц, но это все-таки отдельная библиотека, да и вообще не совсем то.
А если у тебя претензия исключительно к самому факту написания бекенда и фронтенда на одном языке, то ты хуй, конечно. Это же охуенно круто. Ты можешь шарить логику между двумя кодобазами. У тебя девелопмент экспириенс более смууф, ибо тулинг подточен друг к другу. Да и просто меньше переключений контекста.
Подчеркну еще раз, что это не то же самое, что формлеты\сайтлеты\хуятлеты\гвт - клиент и сервер у тебя слабо связаны, никакой монолитности и ничего такого. Это по-прежнему две разные кодобазы, просто ты можешь оче легко и просто вынести общие компоненты в третью кодобазу и прозрачно задепендиться об нее.
>>1085534
Откуда ты берешь то что пишешь? Единственный минус Web# это зависимость от .NET Framework, который зависит от Windows. Но уже есть подвижки, пилится поддержка .NET Core, и потихоньку отвязываются от System.Web.
То что тебе не нравится, это твое мнение, и твои проблемы. Твое мнение абсолютно не авторитетно, чтобы ему следовать. И вообще, пытаться менять мнения других, как делаешь ты, это детский лепет. Изначально вопрос был про N2O+Erlang. У меня Линукс, и мне нравится Эрланг. Когда Web# будет заводится на Линуксе, я буду юзать его. И да, F# не зависит от Майкрософт нисколько, он уже много лет в опенсорс под крылом F# Software Foundation. Спорить я с тобой не собираюсь, собственно и предмета спора нет. Я смотрел все фреймворки которые сейчас существуют, везде все одинаковое. Либо копия Rails, либо копия Sinatra.
> Phoenix не фреймворк
пикрелейтед :3
Все-таки само слово "плагины" подразумевает наличие какого-то общего фреймворка, куда эти плагины будут плагиниться. В кложуре же вся функциональность традиционно пихается во взаимозаменяемые (благодаря единому контракту данных) библиотеки, а потом уже на них наслаиваются тонкие opinionated фреймворки по вкусу. Ну или не наслаиваются, можно просто из темплейта сгенерить проджект и самому все разруливать, если у тебя специфическое окружение или задача.
Я н2о не трогал, но так понимаю тот анон имел в виду, что это как раз хттп-веб-асинк-мессаджпассинг-стек. Ну как WSGI\ринг, только шире.
Если неправ, пусть он меня поправит.
Лол, блядь. Ты тоже в двух с половиной анонах запутался.
>>1085531 - не я.
>>1085534 >>1085541 - я.
Причем тут мои мнения и мои вкусовые предпочтения я вообще не понял. Я тебе изложил в >>1085534-посте факты, а не мнения. О мнениях речи вообще не идет, и использовать\не использовать что-то я тебя, очевидно не заставляю.
> Откуда ты берешь то что пишешь?
Это тоже не понял. Из официальной документации вебшарпера, откуда ж еще. Или про что ты?
> Я смотрел все фреймворки которые сейчас существуют, везде все одинаковое. Либо копия Rails, либо копия Sinatra.
om.next - копия синатры? Ну хуй знает, чувак. Куда-то ты не туда смотрел.
Идея там простая, писать веб приложения также как десктоп. Чтобы не дрочиться с http, управлением состоянием, и прочей сложностью. Борьба со сложностью, это основная идея. Тебе походу нужны свистелки с перделками. Тупо слепая погоня за новиночками и фишечками. Таким вот образом и рождаются 100500+ одинаково беспонтовых фреймворков. Вместо того чтобы исправлять родовые травмы http, пишут еще один хипстерский фреймворчик, или язык вроде эликсира.
Я тебе и говорю, что этой идее два десятка лет, гугли "scheme formlets" и "smalltalk seaside" - написал же все в посте, блин. Гугли "google web toolkit", он уже хуй знает сколько лет в продакшене у гугла, и они с него уже хуй сколько лет мигрируют. Гугли graphql, который сейчас все используют для спа и мобильных приложений - узнаешь, как он исправляет родовые травмы хттп.
Блядь, я уж молчу про xml-rpc, corba и прочие "прелести", исправляющие родовые травмы хттп. Это все стафф из девяностых, кстати. Просто ты про это ничего не слышал, видимо, поэтому тебе вебшарпер кажется каким-то откровением. Но и про то, как веб пишут сегодня (graphql+flux во всех их вариациях), ты, получается, тоже не слышал. Ну так погугли, хуже-то точно не будет, так ведь?
>>1085575
Это клиент + интерфейсная часть сервера.
>Я тебе и говорю, что этой идее два десятка лет, гугли "scheme formlets" и "smalltalk seaside" - написал же все в посте, блин. Гугли "google web toolkit", он уже хуй знает сколько лет в продакшене у гугла, и они с него уже хуй сколько лет мигрируют. Гугли graphql, который сейчас все используют для спа и мобильных приложений - узнаешь, как он исправляет родовые травмы хттп.
Да все я это знаю. Повторяю, мне не важно из 90-х или из 60-х, я считаю нынешнее положение в IT ошибками прошлого.
>>1085585
>Блядь, я уж молчу про xml-rpc, corba и прочие "прелести", исправляющие родовые травмы хттп. Это все стафф из девяностых, кстати. Просто ты про это ничего не слышал, видимо, поэтому тебе вебшарпер кажется каким-то откровением. Но и про то, как веб пишут сегодня (graphql+flux во всех их вариациях), ты, получается, тоже не слышал. Ну так погугли, хуже-то точно не будет, так ведь?
Подожди, какое имеет значение про что я слышал или не слышал? Ты пытаешь соскочить с темы задев мою личность. Ты либо говоришь что ты чего то не знаешь, либо что твои знания никому не нужны. Это известная уловка. Я прекрасно знаю и про все новомодные штуки, и про старые, но при чем здесь это? Я написал, что мне нравится функциональный подход в N2O & WebSharper. Это единственные живые и юзабельные проекты такого толка на сегодняшний день. А ты мне начинаешь втирать что я чего то не знаю, или что знаю но не то. Ты бьешь по воздуху, меня не задевает никак. Я уже понял, что тебе нужны хипстерские новиночки, поэтому ты юзаешь Эликсир с Фениксом. Повторяю, мне не нужны хипстерские технологии, мне нужны те, которые я считаю наиболее подходящими. У меня свои критерии оценки, свои требования, и свое мнение на любой счет. Не надо пытаться это изменить, это не зрелый подход в общении. Инфантильный если уж на то пошло, и конформистский впридачу.
Ну под "фулстэк фреймворком" обычно понимают ебанину, которая и в базу ходит, и логи гонит, и разве что письку тебе во время компиляции не дрочит. А здесь - исключительно взаимодействие с клиентом, остальное он не трогает. Погуглил бы да прочитал доки уже, чо ты как это самое
>>1085594
> Да все я это знаю.
> Я смотрел все фреймворки которые сейчас существуют, везде все одинаковое. Либо копия Rails, либо копия Sinatra.
Лол, ну как скажешь.
>>1085594
> Ты пытаешь соскочить с темы задев мою личность.
> Твое мнение абсолютно не авторитетно
> как делаешь ты, это детский лепет.
ок-фейс.пнг
>Я написал, что мне нравится функциональный подход в N2O & WebSharper.
Нет, ты написал, что вебшарпер - это острие современных веб-технологий, в котором все что можно появилось раньше, чем у всех остальных, а у всех остальных только копии рельсов есть. Это ложная информация. Я на этот факт указал и подробно пояснил.
Еще раз заострю внимание на том, что мне ПОЕБАТЬ, что тебе или кому-то еще нравится или не нравится. Каждый дрочит так, как хочит. Мне на это вообще похуй, и не ебу, зачем ты об этом вообще разговор завел.
> ты юзаешь Эликсир с Фениксом
АЛЕ БЛЯДЬ ПОВТОРЯЮ ЕЩЕ РАЗ ТЫ ПЕРЕПУТАЛ МЕНЯ С ДРУГИМ АНОНОМ ПЕРЕЧИТАЙ ЭТОТ ПОСТ: >>1085563
СПАСИБО
> это не зрелый подход в общении.
> Инфантильный если уж на то пошло, и конформистский впридачу.
> Ты пытаешь соскочить с темы задев мою личность.
Нутыпонел.
Вот все-таки пиздос эти двощеры, любое обсуждение скатят в сеанс психотерапии по переписке.
Ну под "фулстэк фреймворком" обычно понимают ебанину, которая и в базу ходит, и логи гонит, и разве что письку тебе во время компиляции не дрочит. А здесь - исключительно взаимодействие с клиентом, остальное он не трогает. Погуглил бы да прочитал доки уже, чо ты как это самое
>>1085594
> Да все я это знаю.
> Я смотрел все фреймворки которые сейчас существуют, везде все одинаковое. Либо копия Rails, либо копия Sinatra.
Лол, ну как скажешь.
>>1085594
> Ты пытаешь соскочить с темы задев мою личность.
> Твое мнение абсолютно не авторитетно
> как делаешь ты, это детский лепет.
ок-фейс.пнг
>Я написал, что мне нравится функциональный подход в N2O & WebSharper.
Нет, ты написал, что вебшарпер - это острие современных веб-технологий, в котором все что можно появилось раньше, чем у всех остальных, а у всех остальных только копии рельсов есть. Это ложная информация. Я на этот факт указал и подробно пояснил.
Еще раз заострю внимание на том, что мне ПОЕБАТЬ, что тебе или кому-то еще нравится или не нравится. Каждый дрочит так, как хочит. Мне на это вообще похуй, и не ебу, зачем ты об этом вообще разговор завел.
> ты юзаешь Эликсир с Фениксом
АЛЕ БЛЯДЬ ПОВТОРЯЮ ЕЩЕ РАЗ ТЫ ПЕРЕПУТАЛ МЕНЯ С ДРУГИМ АНОНОМ ПЕРЕЧИТАЙ ЭТОТ ПОСТ: >>1085563
СПАСИБО
> это не зрелый подход в общении.
> Инфантильный если уж на то пошло, и конформистский впридачу.
> Ты пытаешь соскочить с темы задев мою личность.
Нутыпонел.
Вот все-таки пиздос эти двощеры, любое обсуждение скатят в сеанс психотерапии по переписке.
>А здесь - исключительно взаимодействие с клиентом, остальное он не трогает.
Я знаю что Om обертка к Реакту. Только какое это отношение имеет к серверным фреймворкам?
Как там с работой, хацкер?
>>>1085594
>> Ты пытаешь соскочить с темы задев мою личность.
>> Твое мнение абсолютно не авторитетно
>> как делаешь ты, это детский лепет.
>ок-фейс.пнг
Ну так ты начал писать типа WebSharper говно, использовать его это зашквар и т.д. Вот я и нписал, что твое мнение это твое мнение, для других оно не представляет авторитета. В чем я неправ? Я же твое мнение не пытаюсь изменить, просто расставляют точки над i. И даже если бы ты был авторитетным прогером, я бы все равно остался при своем мнении. У меня отсутствует стадный инстинкт.
>Нет, ты написал, что вебшарпер - это острие современных веб-технологий, в котором все что можно появилось раньше, чем у всех остальных, а у всех остальных только копии рельсов есть. Это ложная информация. Я на этот факт указал и подробно пояснил.
Так это правда. То что сейчас в мейстриме, то было в Вебшарпере уже давно.
>Еще раз заострю внимание на том, что мне ПОЕБАТЬ, что тебе или кому-то еще нравится или не нравится. Каждый дрочит так, как хочит. Мне на это вообще похуй, и не ебу, зачем ты об этом вообще разговор завел.
А вот тут ты лукавишь. Ты прямо написал, что это все говно, что я ничего не видел, не знаю и не понимаю. А теперь прикидываешься невинным. Все всё прекрасно поняли. Ты пытался перейти на личность, только не вышло.
>Нутыпонел.
Ничего я не понял. Понял только что ты гонишься за новомодными штучками, а все что имеет срок жизни несколько лет ты считаешь говном. Разве не так ведут себя хипстеры, школьники, конформисты? Я выбираю не потому что это модно, и не потому что так делает кто-то, а потому считаю это подходящим для меня.
>Нет, ты написал, что вебшарпер - это острие современных веб-технологий, в котором все что можно появилось раньше, чем у всех остальных, а у всех остальных только копии рельсов есть. Это ложная информация. Я на этот факт указал и подробно пояснил.
Да, совсем забыл, все современные фишки это хорошо забытое старое. Ничего нового не изобрели. В основном все современные фишки взяты из ФП и Лиспа. Тот же Om это лисповая либа.
Вот ты говоришь, что фишки Вебшарпера уже были раньше. Хорошо. А Om это новое изобретение? Это лисповая либа. Лисп появился в 1956 году. По твоей логике Om не нужно использовать, потому что это уже было, и это старье.
>ты написал, что вебшарпер - это острие современных веб-технологий, в котором все что можно появилось раньше, чем у всех остальных
Раньше чем у современного мейнстрима. Именно на это я указывал.
Прочитай доки у них на гитхабе, еще раз говорю.
>>1085640
>WebSharper говно, использовать его это зашквар
Чего блядь? Процитируй.
> В чем я неправ?
В том, что я не высказывал своего мнения, а приводил факты. Точнее высказал в самом конце, сказав, что фултсек на фшарпе - это заебись.
> У меня отсутствует стадный инстинкт.
Еще раз повторяю, что всем похуй. Мы не тебя тут обсуждаем, ну ебаный в рот.
>>1085643
>То что сейчас в мейстриме, то было в Вебшарпере уже давно.
Еще раз повторяю, что оно уже давно как не в мейнстриме, но да ладно, бесполезно.
> это все говно
Процитируй.
>>1085644
>ты гонишься за новомодными штучками, а все что имеет срок жизни несколько лет ты считаешь говном.
Чего блядь? Завязывай с голосами в голове разговаривать.
>>1085646
>Тот же Om это лисповая либа.
Эм... ну он как бы на кложе написан, да. Ты что сказать-то хотел?
> А Om это новое изобретение? Это лисповая либа. Лисп появился в 1956 году.
Проиграл с такого КРЕАТИВНОГО размышления, лол.
> По твоей логике Om не нужно использовать
Ты хуйню какую-то несешь. Перечитай мои посты и завязывай разговаривать с голосами в голове. Я выкатываюсь из треда.
Прочитай доки у них на гитхабе, еще раз говорю.
>>1085640
>WebSharper говно, использовать его это зашквар
Чего блядь? Процитируй.
> В чем я неправ?
В том, что я не высказывал своего мнения, а приводил факты. Точнее высказал в самом конце, сказав, что фултсек на фшарпе - это заебись.
> У меня отсутствует стадный инстинкт.
Еще раз повторяю, что всем похуй. Мы не тебя тут обсуждаем, ну ебаный в рот.
>>1085643
>То что сейчас в мейстриме, то было в Вебшарпере уже давно.
Еще раз повторяю, что оно уже давно как не в мейнстриме, но да ладно, бесполезно.
> это все говно
Процитируй.
>>1085644
>ты гонишься за новомодными штучками, а все что имеет срок жизни несколько лет ты считаешь говном.
Чего блядь? Завязывай с голосами в голове разговаривать.
>>1085646
>Тот же Om это лисповая либа.
Эм... ну он как бы на кложе написан, да. Ты что сказать-то хотел?
> А Om это новое изобретение? Это лисповая либа. Лисп появился в 1956 году.
Проиграл с такого КРЕАТИВНОГО размышления, лол.
> По твоей логике Om не нужно использовать
Ты хуйню какую-то несешь. Перечитай мои посты и завязывай разговаривать с голосами в голове. Я выкатываюсь из треда.
>> В чем я неправ?
>В том, что я не высказывал своего мнения, а приводил факты. Точнее высказал в самом конце, сказав, что фултсек на фшарпе - это заебись.
>>1085534
>Смотри, давай я попробую пояснить, почему вебшарпер - ненужно.
Это ты значит не свое мнение высказывал, и не писал что WebSharper говно?! И еще вопрос, кому не нужно? Если тебе нужно, то и не используй. Не нужно лезть со своей затычкой везде. Мне нужно, но твое мнение на этот счет меня не интересует.
>>WebSharper говно, использовать его это зашквар
>Чего блядь? Процитируй.
>>1085585
>Это все стафф из девяностых, кстати. Просто ты про это ничего не слышал, видимо, поэтому тебе вебшарпер кажется каким-то откровением. Но и про то, как веб пишут сегодня (graphql+flux во всех их вариациях), ты, получается, тоже не слышал.
Ты просто ничего не знаешь, это все старье, и бла-бла-бла. Вот твои слова.
>>ты гонишься за новомодными штучками, а все что имеет срок жизни несколько лет ты считаешь говном.
>Чего блядь? Завязывай с голосами в голове разговаривать.
Ты раз 5 написал, что это все старые фишки, так сейчас никто не пишет, а как сейчас и раньше писали я не знаю. И предложил мне погуглить как раньше писали, и как сейчас пишут. Это ты так написал, уже не буду вставлять цитату.
>>Тот же Om это лисповая либа.
>Эм... ну он как бы на кложе написан, да. Ты что сказать-то хотел?
То что кложа это лисп (лисп старое говно из 50-х по твоей логике). А еще то, что стек кложи скопирован с рельс. А еще то, что все новые фишки это забытые старые фишки.
>Кстати оператор |> слизан с F#.
Да, это так.
>На Qt разве не также пишут?
Да хоть в делфях, как будто крестовый фреймворк для десктопа вообще релевантен в данном обсуждении.
>За всех говоришь?
Нет, вроде бы ясно, про какие платформы я говорю.
>>1085560
>1. Framework
Дело не в том как автор его назвал, а что он из себя представлет
Некоторые и либу для валидации запросов фреймворком называют.
>Все-таки само слово "плагины" подразумевает наличие какого-то общего фреймворка, куда эти плагины будут плагиниться.
Еще раз, это просто набор плагов для работы c Plug.Conn, который частью феникса не является, а является открытой спецификацией.
Можно вообще выкинуть феникс и самому из плагов входящих в https://hexdocs.pm/plug/ и сторонних либ собрать свой феникс, в фениксе просто уже кое-что реализовано, но при желании ты можешь это вынуть и заменить на свое.
>>1085570
Понятно, значит очередное говно без задач.
Http (тем более 2.0) есть и будет есть, а выходки фриков, типа создателя N2O как раз и являются хипстерскими поделями.
>>1085555
>Это же охуенно круто.
>Ты можешь шарить логику между двумя кодобазами.
Ага, особенно учитывая что бек и фронт - две разные предметные области.
>Кстати оператор |> слизан с F#.
Да, это так.
>На Qt разве не также пишут?
Да хоть в делфях, как будто крестовый фреймворк для десктопа вообще релевантен в данном обсуждении.
>За всех говоришь?
Нет, вроде бы ясно, про какие платформы я говорю.
>>1085560
>1. Framework
Дело не в том как автор его назвал, а что он из себя представлет
Некоторые и либу для валидации запросов фреймворком называют.
>Все-таки само слово "плагины" подразумевает наличие какого-то общего фреймворка, куда эти плагины будут плагиниться.
Еще раз, это просто набор плагов для работы c Plug.Conn, который частью феникса не является, а является открытой спецификацией.
Можно вообще выкинуть феникс и самому из плагов входящих в https://hexdocs.pm/plug/ и сторонних либ собрать свой феникс, в фениксе просто уже кое-что реализовано, но при желании ты можешь это вынуть и заменить на свое.
>>1085570
Понятно, значит очередное говно без задач.
Http (тем более 2.0) есть и будет есть, а выходки фриков, типа создателя N2O как раз и являются хипстерскими поделями.
>>1085555
>Это же охуенно круто.
>Ты можешь шарить логику между двумя кодобазами.
Ага, особенно учитывая что бек и фронт - две разные предметные области.
Ты, блядь, просто конченый аутист. В третий раз повторяю, что ты меня перепутал с другим аноном. Попробуй читать посты, которые тебе пишут.
Все, отъебись от меня. Тред я не хочу скрывать, тут не ты один.
мужики сидят нормально общаются
Открываешь хипстерскую парашу:
пафосные педики весь тред кидаются говном,
потому что не поделили вибратор
>1. Framework
Бля, ну значит оба они фреймворки, а тот анончик напиздел. Повторюсь, что в н2о я не шарю, сори.
> Дело не в том как автор его назвал, а что он из себя представлет
С одной стороны - согласен, но все-таки это разделение расплывчатое, неформальное и довольно субъективное, так что часто получается, что последнее (точнее первое) слово как раз за автором. Ну типа, как вы лодку назовете, так на ней и поплывете.
> Еще раз, это просто набор плагов для работы c Plug.Conn, который частью феникса не является
А, ну ок, понял. Тогда ситуация та же, что с wsgi и ринг.
> в фениксе просто уже кое-что реализовано, но при желании ты можешь это вынуть и заменить на свое.
Ну смотри. Тот факт, что он основывается на общей спецификации, не делает его нефреймворком - джанга же тоже поверх всги сделана. Фреймворком его делает именно тот факт, что авторы феникса предполагают, что ты заходишь к ним на сайт и по рельсам пилишь весь свой аппликейшен с нуля - тут тебе и роутер, и тестирование, и темплейты.
В кложе, например, традиционно другой подход: любой код, который делает что-то полезное, пакуется в отдельную библиотеку. А фреймворки просто депендятся на эти библиотеки и добавляют немного структуры, освобождая юзера от необходимости писать бойлерплейт. Короче, либы - сырая функциональность, которую дергаешь ты; фреймворки - структура, которая сама дергает твой код.
Феникс предоставляет и то, и другое, поэтому он - фреймворк, и притом традиционный, жирный. Как-то так.
Но вообще - без разницы конечно, хоть пиздой его назови, хоть залупой, - лишь бы работало. Это я так, просто чтобы пояснить, что я имел в виду.
> Ага, особенно учитывая что бек и фронт - две разные предметные области.
И что? Две предметные области - две кодобазы, в чем проблема-то. У тебя никогда не возникало потребности расшарить хотя бы какой-нибудь utils.js между двумя кодобазами? А что насчет типов\контрактов?
Короче, ты либо оче сильно лукавишь, либо просто не пробовал писать бэк и фронт на одном языке.
>1. Framework
Бля, ну значит оба они фреймворки, а тот анончик напиздел. Повторюсь, что в н2о я не шарю, сори.
> Дело не в том как автор его назвал, а что он из себя представлет
С одной стороны - согласен, но все-таки это разделение расплывчатое, неформальное и довольно субъективное, так что часто получается, что последнее (точнее первое) слово как раз за автором. Ну типа, как вы лодку назовете, так на ней и поплывете.
> Еще раз, это просто набор плагов для работы c Plug.Conn, который частью феникса не является
А, ну ок, понял. Тогда ситуация та же, что с wsgi и ринг.
> в фениксе просто уже кое-что реализовано, но при желании ты можешь это вынуть и заменить на свое.
Ну смотри. Тот факт, что он основывается на общей спецификации, не делает его нефреймворком - джанга же тоже поверх всги сделана. Фреймворком его делает именно тот факт, что авторы феникса предполагают, что ты заходишь к ним на сайт и по рельсам пилишь весь свой аппликейшен с нуля - тут тебе и роутер, и тестирование, и темплейты.
В кложе, например, традиционно другой подход: любой код, который делает что-то полезное, пакуется в отдельную библиотеку. А фреймворки просто депендятся на эти библиотеки и добавляют немного структуры, освобождая юзера от необходимости писать бойлерплейт. Короче, либы - сырая функциональность, которую дергаешь ты; фреймворки - структура, которая сама дергает твой код.
Феникс предоставляет и то, и другое, поэтому он - фреймворк, и притом традиционный, жирный. Как-то так.
Но вообще - без разницы конечно, хоть пиздой его назови, хоть залупой, - лишь бы работало. Это я так, просто чтобы пояснить, что я имел в виду.
> Ага, особенно учитывая что бек и фронт - две разные предметные области.
И что? Две предметные области - две кодобазы, в чем проблема-то. У тебя никогда не возникало потребности расшарить хотя бы какой-нибудь utils.js между двумя кодобазами? А что насчет типов\контрактов?
Короче, ты либо оче сильно лукавишь, либо просто не пробовал писать бэк и фронт на одном языке.
Слушай сюда, ты потаскуха.
Хипстерская параша у вас в своем петушином загоне в С++ и JS тредах, где вы сосете друг другу валетиком.
А тут интеллигентные, образованные люди обсуждают вещи, которые за гранью понимания твоим выебанным мозгом.
Так что пиздуй от сюда байты чинить, императивный птушный дегенерат.
>Да хоть в делфях, как будто крестовый фреймворк для десктопа вообще релевантен в данном обсуждении.
Когда веба не было, был десктоп, и подходы разработки под десктоп были отлажены. Появился http который не хранит состояние, и нужно было решать эти проблемы. В десктопе не было проблем веба. Почему бы разрабатывать под веб также как под десктоп.
>>1085674
>Понятно, значит очередное говно без задач.
>Http (тем более 2.0) есть и будет есть, а выходки фриков, типа создателя N2O как раз и являются хипстерскими поделями.
Как раз таки HTTP как и HTTP 2 это хипстерские поделки. Из-за этих поделок уже 10 лет нормально под веб разрабатывать не научились. HTTP принес проблемы, и теперь эти проблемы решают, когда надо было изменить сам источник проблем. Как и ООП, оно создано не для решения проблем, оно само проблема. А решают пробемы ООП паттернами всякими.
>>1085674
>Ага, особенно учитывая что бек и фронт - две разные предметные области.
Никакие не разные. Десктоп софт тоже имеет фронтенд, но его почему то не пытаются отделить. Потому что это глупость. Вот из-за http и начали двигаться не в ту степь, разделять что-то там, принося все новые проблемы. Реакт например смешивает логику с html и css, хотя раньше все противились этому. Это снова подход из десктопа. Как не крути, а все придет снова к десктопной модели разработки. Хипстеры это конечно не заметят, потому что им главное хайп, крутость, свисто-перделки.
> ООП паттерн
При чем ООП паттерны имитируют функциональный подход. Так что по сути своей ООП это дерьмовый костыль.
Не важно что они имитируют. Важно что они решают проблему созданную ООП. Получается ООП не решает проблемы, а создает их.
>Почему бы разрабатывать под веб также как под десктоп.
Потому что веб он как бы распределенная сеть ага угумс
пиздец просто, где таких чудил рождают
интересно, сколько годиков этому долбоебу
Что ты вырываешь фразы из контекста. Ясно же написал, что http приносит свои проблемы, которых в десктопе нет. Поэтому разумно переносить подходы с десктопа в веб. Что собственно и происходит. Или у тебя зрение плохое, или... Читай внимательно.
Кстати спасибо что просветил, кэп.
>http приносит свои проблемы, которых в десктопе нет
>разумно переносить подходы с десктопа в веб
>. HTTP принес проблемы, и теперь эти проблемы решают
HTTP, - это протокол для передачи ГИПЕРТЕКСТОВЫХ ДОКУМЕНТОВ
HTML - Формат ГИПЕРТЕКСТОВЫХ ДОКУМЕНТОВ
Эти две сущности решали, и решают, реальные проблемы, очень эффективно.
А вот появляеться проблемы начали, в момент, когда с помощью технологий для создания и передачи ДОКУМЕНТОВ начали делать ПРИЛОЖЕНИЯ.
>Никакие не разные. Десктоп софт тоже имеет фронтенд, но его почему то не пытаются отделить. Потому что это глупость.
Ну, там есть WPF, QML.
Хотя, преимуществ у WPF по сравнению с Winforms я так и не обнаружил. Результирующее приложение получается сложнее, часть логики у тебя в граф морде, час в основном коде, зачем.
>Как и ООП, оно создано не для решения проблем, оно само проблема.
Лолнет.
ООП это круто. Другой вопрос что в крестах и сочувствующих ООП непонято и реализовано так, что действительно, больше проблем.
>HTTP, - это протокол для передачи ГИПЕРТЕКСТОВЫХ ДОКУМЕНТОВ
>HTML - Формат ГИПЕРТЕКСТОВЫХ ДОКУМЕНТОВ
Вот именно. Если бы ты умел читать, то прочел бы это в моем сообщении. Всё, мне надоело разговаривать со стеной. Научись читать для начала.
Жаль плюсануть нельзя. Меня тоже поразило. Увидев такую аргументацию, у меня отпало желание о чем либо дискутировать с человеком. Стало ясно что никакие аргументы не возымеют силы.
Можно было еще добавить "Стильно, модно, молодежно."
Но ъ-ооп (симула, смолток; в какой-то мере клос) - это действительно круто и интересно. Да и замыкания, как известно, сами знаете что.
>Вот именно. Если бы ты умел читать, то прочел бы это в моем сообщении. Всё, мне надоело разговаривать со стеной. Научись читать для начала.
Я вообще мимопроходил.
И решил дополнить твой пост.
Контролируй свой батхерт.
>Только не симула ни смолток не являются ъ-ооп языками.
Именно смалток и является тру ооп, лол.
Лиспы туда-же относятся.
Мда.
Smalltalk может использовать функции высшего порядка, лямбды, замыкания и т.п. Что не делает его pure OO.
Про лисп и вовсе даже говорить не стоит он еще более функциональный.
>Да и замыкания, как известно, сами знаете что.
Что? Замыкания это ФП фича. ООП нужно правильно использовать, и в небольших дозах.
Я уже проигрываю в голосину с этого дебила, лол.
Ему один раз ткнули мордой в то, что он нихуя не знает об окружающем мире - не, он сказал, что все знает.
Теперь мы выясняем, что в его манямирке симула - это не тру ооп, лол. Ждем новых откровений и срывов покровов. Подписался, лойс годному треду.
>>1085835
>Что?
Ну вот читал бы книжки - знал бы о чем речь, чучело. Лол.
>проигрываю
>голосину
>дебила, лол.
>не тру ооп, лол
>Подписался
>Лойс
>чучело. Лол.
Ты откуда вылез такой, молодой и веселый?
Пиздуй от сюда на свои хабры, сын спидозной шлюхи.
Я так понимаю это кто-то из вас, долбоебов, создал PLT тред и насрал в лиспотреде? Узнается этот гопнический стиль общения.
>расшарить хотя бы какой-нибудь utils.js между двумя кодобазами?
Конечно возникало. Выносишь в отдельную либу и подключаешь потом в виде зависимости. Другое дело, что бекенду фронтовые зависимости вообще не упали, как и наоборот.
>Smalltalk может использовать функции высшего порядка, лямбды, замыкания и т.п. Что не делает его pure OO.
Функции высшего порядка к ОО отношения не имеют вообще. Равно как и сишные классы снаследованием.
>pure OO
Чистота ЯП в том или ином смысле это уже сильно теоретические понятия. О которых лично Я, ничего и не говорил.
Один из создателей ООП, считает смалтак - тру ООП, тем самым, пресловутым, ООП.
И никакие мянямантры хипстерпов, которые еще спермой были, когда я первые программы писал, этого изменить не могут.
Ну с pure functional всё просто: все функции чистые - значит pure.
А вот pure OOP это действительно маразм. Ну считает Алан Кей свою поделку с сообщениями настоящим мужык ООP, а Симулу, которая была раньше, не считает, ну так это его дело. Точного определения всё равно нет, так что похуй кто там что считает, это личное дело каждого что считать тру: vtable или message passing с поздним связыванием. Другое дело что весь ОО-мэйнстрим симулоподобный, а смолтолк сообщения свои в гробу посылает и скоро к нему присоединиться последний из магикан Obj-C.
мимо
СИМУЛА - НЕ ООП!!
>Функции высшего порядка к ОО отношения не имеют вообще
О том и речь, дятел. Однако смолток их имеет, поэтому он не может считать чистым языком.
Если говорить о том, наиболее ли он объектно-ориентированный? То в этом да.
> тру ООП
Слушай, мы тут говорим о серьезных вещах, а тру не тру ты будешь в падике пацанам рассказывать. Так что выражайся в общепринятых научных терминах.
>И никакие мянямантры хипстерпов, которые еще спермой были, когда я первые программы писал, этого изменить не могут.
Да ты можешь себя убеждать в чем угодно, тут всем похуй вообще на тебя. Хоть ты за 50 килобайт в жопу давал, когда мы еще все спермой были.
>>1085913
>Ну с pure functional всё просто: все функции чистые - значит pure.
Так с любым языком просто. Есть какие то концепции в конкретной парадигме и если язык состоит только из этих концепций, то он может считаться чистым концептуальным языком. Если в нем присутствуют элементы из других концепций, то очевидно он не может считаться чистым.
Братишка, а поясни за замыкания. Замыкания - это же не объекты? А симула - не ооп?
Тут какие-то дятлы в гопническом стиле написали в википедию, что симула is considered the first object-oriented programming language - я вот думаю послать их на хабр, чтобы они там за 50 килобайт в жопу давали. Ты как, братишка, согласен?
Выручай, братишка. Без тебя никак.
Проблема в том, что точного определения и нет вовсе. Это что-то на уровне маркетинговой хуйни, типа жанров музыки. Т.е. Вася считает что pure FP - значит все функции чистые, Петя - что там есть HOF, иммутабельность, list-comprehensions, pattern matching и TCO, а википедия вообще говорит functional programming is a programming paradigm—a style of building the structure and elements of computer programs—that treats computation as the evaluation of mathematical functions, что является требованием куда более строгим, чем даже то, что Вася говорит. Так что тут смотря от чего изначально отталкиваться. Можно говорить только про некоторую общепринятое определение, но опять же, любой имеет полное право сказать, "а я в рот вашу википедию ебал, у меня свои взгляды" и будет прав, потому что строго и исчерпывающего определения попросту нет.
Ну так с ООП такое строгое определение как раз есть: если все в программе сводится к объектам (как в смолтоке, например), то это Ъ-ООП.
А определение той интересной личности в стиле "если в А, в котором все Х, можно реализовать Y, то оно уже не А" - оно, конечно, интересное. Особенно с учетом эквивалентности X и Y %)
мимо
>О том и речь, дятел.
Нахуй иди.
>Однако смолток их имеет, поэтому он не может считать чистым языком.
Держи нас в курсе.
>Слушай, мы тут говорим о серьезных вещах
>Да ты можешь себя убеждать в чем угодно, тут всем похуй вообще на тебя. Хоть ты за 50 килобайт в жопу давал, когда мы еще все спермой были.
Сорянчик анончик, но это отрицание 99 уровня.
Ненужно свои комплексы на других проецировать.
Признайся уже сам себе в том, что ищешь любви и признания на харкаче.
Можно сразу смело начинать с Elixir. Erlang как язык для бекграунда не нужен, а с платформой можно и по ходу дела разобраться. Ну т.е. знание Erlang может быть плюсом, но это чисто опционально, я бы время на отдельно его изучение тратить не стал.
эрлангист-перешел-на-эликсир-два-года-назад
А что замыкания? Функции первого класса. Почитай вики.
>симула is considered the first object-oriented programming language
И что ты тут странного находишь? Там ни слова нет про то что simula is pure object-oriented.
Так же как и С++ и Яву называют ООП языками, которые вообще далеко от ООП.
>>1085925
Слушай, ну это какой-то бред вася думает одно петя другое. Есть четкие критерии, по которым одно попадает в А категорию, а другое в В категорию. И есть научное сообщество, которое выделяет эти критерии из каких-то схожих черт какого-то феномена. Тут не такого, типа Я СКОЗАЛ ЗНАЧИТ ТАК И БУДИТ.
То что все называют какие-то языки ООП, какие-то ФП, значит лишь то, что они имеют больший уклон в какую-то сторону.
>А что замыкания?
Ну замыкания же не объекты? Братан, просвети! Ко мне тут какой-то тип подошел так близко-близко, и резко пояснил палкой за замыкания. Но я-то знаю, что симула не ооп, так что я ему не поверил. Братан, помогай, без тебя никак!
>simula is pure object-oriented
Братан, а поясни за пюре заодно? Как мне придумать что-то так, чтобы оно было пюре? А то вдруг я придумаю некий Х, а потом придет такой классный пацан, как ты, и скажет, что это не пюре Х - что мне тогда делать? Поясни, братан, за пюре! И за симулу поясни.
От того, что в языке всё есть объект, он смолтоком не станет. Например, Java считается Significant object-oriented, согласно той же википедии, хотя она симулоподобная.
> Есть четкие критерии
Где? Кто их ввёл и когда?
>есть научное сообщество
Какие блять учёные? Это Алан Кей учёный что-ли? Ещё раз, похуй что он там считает. Алан Кей сказал смолток тру, а Бьёрн Страуструп сказал нет иди нахуй, симула тру, а Лука Карделли сказал - я вас обоих в рот ебал пидоры гуманитарные. А ООП стало тем, что Стивы Макконелы, Мартины Фаулеры и сановские маркетолухи из 90х под ним понимали. Так то.
Т.е с чего бы я не начал время на изучение второго будет примерно одинаковым?
Что ты ссылки суешь, на вопрос прямо ответь. Замыкания ООП или ФП фича? Я спрашиваю не потому, что не знаю ответ, а потому что не уверен знаешь ли его ты.
Ты же меня дебилом назвал. Ну раз так, то свою позицию выдай, а не прячься за ссылками.
> Я спрашиваю не потому, что не знаю ответ, а потому что не уверен знаешь ли его ты.
Ох, золотце ты мое, лол. Ну ты ссылочку-то все-таки почитай на досуге.
Уходишь от ответа, значит не знаешь что сказать. Я как заявлял, так и заявляю, замыкания ФП фича, а не ООП. Обоснуй что я дебил.
>Алан Кей
Согласно википедии, он ученый и лауреат нескольких премий. Так же он создал замечательный язык смолтолк, который и по сей день берут за образец.
А страустроп поехавший шизик, создатель самого уродливого и монструозного языка в мире - с++, который признан во всем мире как harmful и с которого сейчас бегут все и который берут за образец только в качестве того, как не нужно делать.
То что там распиарили маркетологи уже другой вопрос и к делу не относится.
Позозреваю, что это то же самое чудо, которое выше рассказывало, что http изобрели жидорептилоиды хипстеры для того, чтобы поломать его qt:
> В десктопе не было проблем веба. Почему бы разрабатывать под веб также как под десктоп.
> Десктоп софт тоже имеет фронтенд, но его почему то не пытаются отделить. Потому что это глупость. Вот из-за http и начали двигаться не в ту степь, разделять что-то там, принося все новые проблемы.
Не удивлюсь, если у него в голове ученое сообщество занимается изучением вопроса, является симула ооп языком или не является.
Ага, но только смолток сдох ещё в 90е и нахуй никому не нужен, как и пейперы Алане Кея, а на цпп написано дохуя софта, и он до сих пор занимает множество ниш без альтернатив. Отсюда можно сделать вывод о пригодности идей нашего мочёного.
>смолток сдох ещё в 90е
Про руби товарищ крестовик не слышал? :3
> и нахуй никому не нужен
Ой, точно? https://insights.stackoverflow.com/survey/2017#most-loved-dreaded-and-wanted
> на цпп написано дохуя софта
На Коболе и пхп еще больше.
Этот >>1085955 все верно сказал.
На цпп дохуя написано потому что люди, думали что они смогут получить скорость С при этом оставаясь молодыми и шутливыми пишущими на ООП языке, но это все конечно была иллюзия и обман + маркетинг. Потом это покатилось все как снежный ком. Я сам писал на плюсах долгое время и только узнав их очень хорошо понял, что это днище язык с которого нужно перекатываться и правильно сделал, ибо щас все адекватные люди пишут на нормальных языках и только отбитые, либо повязанные с ним на легаси, продолжают жрать говно. Но скоро все это сойдет на нет, т.к. уже сделали достойные замены этому говну в виде Go, Rush, D. Да и то щас, все очень сместилось, кто раньше писал на нем десктоп приложения перекатываются на всякие C#, JS, Java и т.п. Серверные приложения тоже уже редко на нем пишут, системщину на нем никогда не писали там С господствует, остаются только игроделы повязанные на нем апи дирекс икса и потому что там уже так сложилось и то я думаю никому не в кайф на нем писать и может быть тот же раст или D станет заменой.
>руби
Руби как известно является смолтоком только во влажных мечтах. И то скоро будет вместе с ним и обж-Си в одной братской могиле.
>https://insights.stackoverflow.com/survey/2017#most-loved-dreaded-and-wanted
>JavaScript выше хаскеля
>Go выше кложи
Ебанутый список. Интересно было бы увидеть кол-во голосовавших. Но очевидно график хуйня: про смолток знает то процентов 5% от общего количества каких-нибудь джавистов. Вакансий нет, на tiobe нет, софтанет.
>На Коболе и пхп еще больше.
Это да, но речь ещё и о том, что из себя этот софт представляет.
Ну и всё это лирическое отступление сути не меняет. Какой-то хер придумал определение, какое-то время им выёбывался, в результате эпической битвы smalltalk vs с++ всем известно кто вышел победителем. Сегодня весь ОО-мейстрим симулоподобный, но раз "учёный" скозал, то всем нужно покатятся несомненно, а не продолжать хуй ложить на его мнение.
>Интересно было бы увидеть кол-во голосовавших
Да, я тоже что-то не увидел нигде, от какого числа эти проценты. Но в остальных вопросах там по стопицот писят тыщ человеков.
> знает то процентов 5% от общего количества
Да вряд ли, меметичный же язык. В универах про него рассказывают, да и в книжках про ООП в введении нет-нет да и скажут чего. Ну и я так думаю зарегестрированы на стаковерфлоу в основной своей массе более-менее туда-сюда норм пацаны. Ну может не прям уж в основной своей массе, но ты понял, короче.
> ОО-мейстрим симулоподобный
Но нам же выше интересная личность, он же чоткий пацан, он же срыватель покровов, короче - человек и пароход - он же нам пояснил твердо и четко, что СИМУЛА - НЕ ООП!, а ЗАМЫКАНИЯ - НЕ ОБЪЕКТЫ! Я бы не стал спорить с таким авторитетным человеком с такой глубокой душевной организацией.
Ну ты буквально обосрался по каждому пункту.
>будет вместе с ним и обж-Си в одной братской могиле
Обж-си никуда не денется ибо на нем написано 99% эпл софта. Руби может и да, т.к. тут есть слух что элексир щас замена руби и туда все перекатываются, но точно сказать не могу ибо в этой теме не барахтаюсь.
>Ебанутый список
>очевидно график хуйня
>про смолток знает то процентов 5%
Конечно все это потому что ты скозал.
>что из себя этот софт представляет
Так если ты имеешь ввиду, что на этих языках он представляет из себя хуйню, то спешу тебя разочаровать, что на с++ гораздо больше говна написано.
>smalltalk vs с++ всем известно кто вышел победителем
Если ты считаешь всеми ненавистный язык победителем, то я хз что тогда проигравший?
>"учёный" скозал
Опять по кругу. Важно не кто что сказал, а что в какую категорию попадает, что я уже описывал выше.
Во-первых, даун - это твой батя-алкоголик, ссыкло.
Во-вторых, ты назвал го "достойной заменой", в то время как го%вно% - это говно, а не язык, который ничем не лучше крестов, например. На нем пишут, буквально, потому что ой какой няшный синтаксис ой няшный маскот ой вау можно хуяк хуяк асинхронность ой как няшно го и го-блоки вау няняня :3:3 ^_^.
> На нем пишут, буквально, потому что ой какой няшный синтаксис ой няшный маскот ой вау можно хуяк хуяк асинхронность ой как няшно го и го-блоки вау няняня
Опять потому что ты скозал? Го императивный язык без всякого бесполезного ооп говна и шаблонов, которое в 95% случаев просто напросто не нужно. В го есть GC, корутины, что очень полезная вещь во всяких серверах и даже на десктопе с ГУИ. На мой взгляд, хорошая замена С++ для тех, кто не хочет писать на С.
>Обж-си никуда не денется
Денется и это вопрос времени. Новый софт пишут на Swift.
>Конечно все это потому что ты скозал.
Нет, это потому что видно, что этот график ебанутый.
Во-вторых, ну спроси у себя на работке к примеру, сколько людей знают про смолток и сколько про джаву.
>Если ты считаешь всеми ненавистный язык победителем
Да хули ты жопой вертишь, дебил. Смолток сдох? Сдох. C++ сдох? Нет. На этом всё. Ну и в ОО-мейнстриме (обновляющемся, а не некроговне, типа обж-си) влияния смолтолка 0.
> а что в какую категорию попадает
А кто эту категорию задаёт? Или она тебе богом дана?
Вот только там нет протоколов\тайпклассов, что уже делает его ненужным с учетом года его создания. Взлетает в 95% случаев говно, увы.
>Денется и это вопрос времени. Новый софт пишут на Swift.
На свифте пишется только App хуйня. Все интерналы по прежнему остаются на obj-c и plain c.
>видно, что этот график ебанутый.
Тут и добавить нечего к такому аргументу.
>Смолток сдох? Сдох. C++ сдох?
Так и С++ скоро сдохнет и ты сдохнешь. Все умирает и стареет.
Не понимаю к чему ты это вообще, мы кажется выясняли уже почему с++ стал популярным и что это нихуя не значит.
>А кто эту категорию задаёт?
Она задана законами логики. Я уже заебался писать про это. Перечитай что ли мои посты выше. Категории задаются параметрами присутствующими у множества схожих сущностей.
>>1085975
>Вот только там нет протоколов\тайпклассов
Так в С их тоже нету. А нахуя они?
>>1085976
>пук
>Так в С их тоже нету.
Давайте писать на асм теперь.
> А нахуя они?
Прочитай какую-нибудь книжку про программирование. Полиморфизм, карл!
>Давайте писать на асм теперь.
Все ясно.
Диагноз: Молодой и шутливый.
>Полиморфизм, карл!
Нахуя?
>Диагноз: Молодой и шутливый.
Просто нечего приводить идиотские аргументы - не придется и диагнозов ставить.
>Нахуя?
А сборка мусора нахуя?
>идиотские аргументы
То есть, по твоему, один из самых великих языков программирования, можно сказать, отец императивного программирования - С, на котором и по сей день разрабатывается огромная куча софта - это идиотский аргумент?
>А сборка мусора нахуя?
Сборка мусора это нужная вещь, т.к решает многие реальные проблемы. А вот тайпклассы синтаксический сахар, который в императивном языке нахуй не вперся.
>Категории задаются параметрами присутствующими у множества схожих сущностей.
Ну так джава, смолтолк и симула имеют множество схожих сущностей: программа представляется в виде объектов и связей между ними. Манямирок Алана Кея про мессадж пассинг как раз из этого множества выбивается.
Вообще он был фанбоем Хьюитта и Агха, модели акторов, всего этого и Smalltalk 72 был весь про асинхронность и вообще эдаким недоэрлангом своего времени. Там месседж пассинг имел смысл. Но в Smalltalk 80 от всего этого отказались, зделоли обычную сиквент парашу, а посылку сообщений и позднее связывание оставили как артефакт, который ни в пизду, ни в красную армию.
>Язык - это язык, а не аргумент. Хуйню не неси.
В основу go легло множество вещей из С, к тому же одним из создателей golang является сам Ken Thompson, думаю не стоит напоминать кто он такой.
И если ты, дегенеративное хуйло с php треда, не понимаешь что собой представляет язык С и какие принципы в нем заложены, то не неси хуйню, пожалуйста.
>А полиморфизм - нет, лол.
Молодой и шутливый, ты реально аутист или прикидываешься?
Хотя что взять с обезьяны не понимающий концепции ни процедурного, ни ОО, ни функционального программирования и что А != В. Задающей тупорылые вопросы про GC и сравнивающий его с полезностью вещей уровня синтаксического сахара.
А ты так реально дибил, иди нахуй в похапе тред или откуда ты там выкатился, начитавшись модных словечек из ФП и пытающийся их всунуть в любое предложение чтоб показаться модным, молодым и продвинутым, без понимания вообще сути вещей.
Зачем же ты так приложил этого омежного инвалида с девствнным голоском, который завидует полноценным физически и психически здоровым мужчинам? Он же сейчас порвётся и будет трясущимися ручонками пытаться доказать что он не омежка, что его не травят в пту колхозницы, ведь это единственное что ему остается делать. Бедная омежка.
Славно ты порвался, лол.
Императивное программирование впервые не в Си появилось, а в Машине Тьюринга. Потом в Фортране.
Че правда? Нихуя. Спасибо что просветил.
Пытаюсь зайти с браузера, получаю сообщение Неизвестный тип адреса, как это победить? Телеграм у меня не установлен, хочу чтобы открывал веб версию web.telegram.
Если и не банит, то с вероятностью 99% обматерит.
Репорти, оно по всей доске насрало.
Наверняка это не пакеты, как рекомендует официальная дока, а какой-то менеджер версий, типа как nvm для ноды или rvm для рубей.
и еще такой вопрос, а там есть подибие гемсетов или как в ноде локально ставятся либы или еще как?
2. hex обычно идёт сразу в поставке.
3. Либы/зависимости, как и почти всё в Elixir ставятся через mix.
Сам язык идет как либа, нет смысла для писать менеджер версий. Виртуальная машина Эрланга обновляется не очень часто, поэтому для нее тоже нет смысла в менеджере версий.
Проще всего подключить репозиторий, хотя можно и вручную ставить https://www.erlang-solutions.com/resources/download.html
>нет смысла для писать менеджер версий
>машина Эрланга обновляется не очень часто, поэтому для нее тоже нет смысла
Дооо, конечно.
Что на счет asdf https://github.com/asdf-vm/asdf скажите?
Для чего тебе разные версии Erlang VM & Elixir? Какой кейс? Ставишь репо и можно любую версию одним кликом установить. Какая ОС?
У меня еще нет кейса, я только хочу вкатиться, поэтому кончено мое мнение ни сколько не стоит. Но я очень хорошо знаю из практики, что без менеджера версий жить нельзя. И если за последние хотя бы 3 года были релизы, то ни о каких системных пакетах не может быть речи.
А исходя из того что я успел почитать - релизы были и разный эликисир работает с разным эрлангом. Все, этого достаточно. Последнее с чем я хочу ебаться это с инсталяциями.
Да блин, сам факт того что какие-то менеджеры существуют, уже говорит о том, что потребность есть.
В джаве нет менеджера версий, он там не нужен в принципе, и нормально живут. Erlang VM работает примерно также, ей не нужен менеджер версий. Последняя версия виртуальной машины может работать с кодом любой версии. Это не скриптовый язык где без менеджера версий нельзя жить. В Эрланге такой потребности нет. Не веришь, зайди в официальную группу эрлангистов в гугл, там спроси.
https://groups.google.com/forum/#!forum/erlang-programming
https://groups.google.com/forum/#!forum/erlang-russian - русскоязычная
В ноде в версионировании тоже уже потребности нет, одной достаточно.
> Сам язык идет как либа, нет смысла для писать менеджер версий.
> В джаве нет менеджера версий
Ой, че несет.
Раз язык идет как либа, значит она должна подключаться С УКАЗАНИЕМ ВЕРСИИ к сборке билд-тулом - мавеном, например, как в джаваленде. У меня такое чувство, что тот анон про это и спрашивает, а ты какую-то дичь впариваешь.
Вм и окрежние версионируется с помощью контейнеров, докер тот же, хуйбернеты всякие.
мимо
Чувак спрашивает про аналоги RVM/NVM. Такого нет и не нужно. И в джаве такого тоже нет.
Кто его использует? Маловато звезд для популярного инструмента.
Да и какой в нем смысл, если JVM в архиве распространяется?
Ну тогда ладно.
Это копия, сохраненная 1 декабря 2017 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.