Вы видите копию треда, сохраненную 19 января 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
(swap! threads update-in [:clojure :count] inc)
Кто использует clojure в продакшне?
Сбербанк, Walmart, CircleCI, Heroku, Puppet, Netflix, Soundcloud, Spotify, Facebook, Groupon, Red Hat, Oracle.
Какие приложения написаны на clojure?
Walmart eReceipts - бэкенд обработки данных о покупках во всех отделениях Walmart для их мобильного приложения.
https://www.datomic.com - распределенная транзакционная база данных с языком запросов на основе datalog.
http://status.im/ - мобильная блокчейн ОС на основе Ethereum'а и тулкит для создания p2p-приложений.
http://lighttable.com - расширяемая интерактивная IDE для clojure, python и javascript.
https://precursorapp.com - инструмент для коллективного прототипирования онлайн (рекомендую попробовать, зависимость есть).
http://circleci.com - Continuous Integration and Delivery. Бэкенд и фронтенд на clojure+clojurescript.
http://braid.chat/ - более лучший слак, опенсорсный и с историей (альфа).
http://putchar.org/ - реддит здорового человека (автор постит кучу интересных ссылок; алсо, код выложен на гитхабе).
http://maria.cloud/ - интерактивная онлайн-IDE для обучения программированию.
TL;DR
Начать: http://maria.cloud/
Читать: https://www.braveclojure.com
Решать: http://www.4clojure.com
Онлайн: https://repl.it/site/languages/clojure
Офлайн: https://leiningen.org
Зомби: http://www.parens-of-the-dead.com/
https://clojure.org/guides/getting_started
https://clojure.org/reference/documentation
https://github.com/bbatsov/clojure-style-guide
Clojurescript
https://clojurescript.org
https://figwheel.org
https://github.com/Day8/re-frame
Документация
https://clojuredocs.org/
https://clojure.org/api/cheatsheet && https://cljs.info/cheatsheet/
https://clojure.org/reference/documentation
Задачи
http://www.4clojure.com
http://clojurekoans.com
http://clojurescriptkoans.com
http://exercism.io/languages/clojure/about
Видео
https://github.com/tallesl/Rich-Hickey-fanclub#talks
https://www.youtube.com/user/ClojureTV
Комьюнити
https://www.reddit.com/r/Clojure/
https://clojureverse.org/
http://clojurians.slack.com/
#
https://groups.google.com/forum/#!forum/clojure
https://stackoverflow.com/questions/tagged/clojure
Блоги
Еженедельник: https://therepl.net
Все блоги: http://planet.clojure.in
Производительность: http://clojure-goes-fast.com
IDE
https://cursive-ide.com
https://cider.readthedocs.io/en/latest
http://lighttable.com
http://nightcoders.net
https://sekao.net/nightcode && https://sekao.net/lightmod
Библиотеки
https://clojars.org && https://www.clojure-toolbox.com
Web: http://www.luminusweb.net || https://github.com/weavejester/compojure
App Server: http://immutant.org || http://aleph.io || http://http-kit.org/
DI: https://github.com/weavejester/integrant || https://github.com/stuartsierra/component || https://github.com/tolitius/mount
SQL: https://github.com/layerware/hugsql || https://walkable.gitlab.io
UI (cljs): https://github.com/Day8/re-frame || https://github.com/omcljs/om || https://github.com/tonsky/rum
HTML: https://github.com/weavejester/hiccup
Macros: https://github.com/cgrand/macrovich
Spec: https://github.com/bhb/expound && https://github.com/jeaye/orchestra
Test: https://github.com/clojure/test.generative && https://github.com/bensu/doo (cljs)
FAQ
— СКОБКИ!!11
http://clochure.org/
— Кейворды?..
https://clojure.org/guides/faq#why_keywords
— Common Lisp же есть, нинужна!!1
Просто съеби.
— Что нужно для вкатывания?
Знать английский, не быть тупым, иметь опыт программирования.
— Хочу начать изучать программирование, clojure мне подойдет?
Лучше сперва возьми PLT Racket и читай SICP + http://htdp.org
— Обязательно знать джаву и жс?
На уровне чтения документации.
— Как без классов представлять бизнес-сущности?
Используй хэшмапы, namespaced keywords и spec. Не поддавайся искушению создавать рекорды на каждый чих. Все есть данные.
— Что по скорости?
Зависит от задачи. В среднем - медленнее скалы, быстрее рубипитонов.
— Печатаю элементы последовательности, а они не печатаются, ЧЯДНТ?
Ленивость + сайд-эффекты => используй doall или dorun.
— Итерируюсь по большой последовательности и получаю OutOfMemoryException, ЧЯДНТ?
https://clojure.org/reference/lazy#_don_t_hang_onto_your_head
— DSL - круто! Можно теперь все API делать на макросах?
The first rule of macro club is: "Don't write macros".
— Че там по пост-иронии?
https://www.youtube.com/watch?v=jlPaby7suOc
— Батя одобряет?
Да: https://www.youtube.com/watch?v=-ktUXFxkSkI&t=25m25s
Архивач: http://arhivachovtj2jrp.onion/thread/424353/
Прошлый тред: https://2ch.hk/pr/res/1139597.html (М) || https://arhivach.org/thread/339594/
Clojure
>1. Применимость к реальному современному миру. На нём можно писать действительно полезные вещи, и люди это делают.
4. Можно писать интерпрайс (бэкенд walmart'а), можно веб-макакить (putchar.org), можно писать SPA в браузере (precursorapp.com, circleci, maria.cloud, braid.chat), можно писать десктоп (lighttable), можно писать мобильные приложения (status.im), с недавнего времени можно компилять в нативный код через graal. Единственный язык, который реально (а не для галочки) работает на jvm, clr и js платформах. Не подходит для байтоебства и систем, где критично минимальное потребление памяти, поэтому снимаем балл.
>2. Универсальность.
5. Смотри предыдущий пункт.
>3. Технологичекое качество и надёжность получаемых систем.
4. У комьюнити и создателей языка стронг фокус на разбиение разрабатываемой системы на независимые части, декларативное описание связей и датафлоу, минимизацию зависимостей и упрощение ризонинга о поведении системы (слово decomplect даже является эдаким местным мемчиком). Плюс из коробки есть мощная инфраструктура для тестирования (в том числе генеративного, на основе инвариантов) и контрактного программирования. Язык динамически типизированный, поэтому снимаем балл за отсутствие инструментов для формального доказательства свойств программ.
>4. Скорость разработки.
5. Главная фича языка - интерактивная разработка, горячая компиляция (hot reloading) и выполнение кода прямо внутри работающего приложения (в том числе задеплоенного в продакшн, можно подключиться своей ide к серверу и залить хотфикс, включить дебаггер или просто проверить текущее состояние процесса). Вся инфраструктура под это заточено, в комьюнити много инструментов, упрощающих написание reloadable кода. Пожалуй, это главный selling point. Алсо, можно хуяк-хуяк и в продакшн.
>5. Масштабируемость. Насколько легко разобраться, поддерживать, рефакторить и развивать уже имеющуюся кодовую базу.
2-3. Отсутствие статической типизации заставляет разбивать монолитный проект на микроили не очень микросервисы с четко документированными апи впрочем, это в любом случае хорошая идея. Язык относительно молодой, поэтому нет такого количества накопленного опыта проектирования и устоявшихся паттернов, как например в джаве. С другой стороны, минимизация сайд-эффектов, явный датафлоу, декларативная конфигурация зависимостей между модулями - благодаря этому всему разбираться в чужом коде намного проще, чем в ооп-лапше, поэтому в сумме имеем положительную оценку (но есть куда расти).
>6. Простота. Простому языку можно обучить 9 миллионов индусов
-2. Индусам придется ломать мышление и перестраиваться на функциональный стиль. Архитектурные паттерны тоже немного не такие (в сравнении с джавой; жс-индусы знакомые с реакт\редукс будут чувствовать себя как дома). С другой стороны, это именно практический, рациональный, инженерный язык, а не академический исследовательский проект, так что теорию категорий и отличия монад от эндофункторов знать не нужно.
>7. Хорошая (и безболезненная) поддержка многопоточности.
5. Пожалуй, лучший язык по части многопоточности. Все стандартные структуры данных потокобезопасны. Из коробки есть compare-and-swap, транзакционная память, агенты (акторы), асинхронщина через го-блоки (csp). Даже если тупо в лоб писать код и не думать о многопоточности вообще, то все равно все будет работать. Язык изначально создавался как раз чтобы решить проблему сложности написания многопоточного кода на жвм.
>8. Трудоустройство: насколько легко найти работу соискателю, который его знает, и насколько легко найти сотрудников в проект, который на нём написан.
-1. Найти сотрудников в проект легко. Найти работу трудно (по крайней мере в России). Джуны никому не нужны; обычно предполагается, что если уж ты пишешь на сабже, то ты убергруппенфюрерсеньор. Компенсируется высокими зарплатами (по данным stackoverflow, это язык с самыми высокими зарплатами в мире в 17-18 годах) и удаленкой в Штатах\Европе.
>9. Активное комьюнити. Документация, туториалы, треды на дваче Stack Overflow, митапы, конференции.
3. Комьюнити оче welcoming и активное, в основном тусуется в слаке, на реддите и на clojureverse.org. Много обучающей литературы (в том числе бесплатной), есть интерактивные вводные туториалы, есть видеокурсы (в том числе бесплатные), есть отличные сайты с задачками (4clojure.org, экцерцизм и т.п.). С другой стороны, нет такого количества туториалов и документации, как например для жс, и нет онлайн-курса на MOOC-платформе типа курсеры, как у скалы.
>10. Удобные инструменты разработки. Комфортная IDE, быстрая сборка, понятные сообщения об ошибках, быстрая перезагрузка при изменениях, инструменты для юнит- и прочих тестов.
-5--5. Сложный вопрос. С одной стороны - есть поддержка во всех актуальных редакторах\ide; хороший тулинг с поддержкой interactive development везде, от браузера до мобилок; отличная интеграция тулинга с хост-платформами (maven, npm и т.д.), при этом нет зоопарка билд-тулов, как в жс; в целом, пожалуй лучший воркфлоу с точки зрения удобства разработчика. С другой стороны - хитровыебанные сообщения об ошибках с километровыми стектрейсами (вроде как уже исправлено в следующей (еще не зарелизенной) версии, но хз), не совсем тривиальный сетап этого тулинга (хотя и есть специальные ide для нубов по типу "нажал одну кнопку и все работает", но это несерьезно), и в целом некая общая недопиленность в мелочах. По умолчанию как бы предполагается, что разработчик знает, что делает, его не нужно вести за ручку, и он может сам взять напильник и допилить, если ему что-то нужно.
Вердикт: язык для опытных инженеров, которым нужен эффективный инструмент для создания robust продуктов.
Область применения: бэкенд с нетривиальной логикой, микросервисы, обработка данных, full-stack SPA с нетривиальным интерфейсом.
Сильные стороны: отличный дизайн языка, стабильность и отсутствие breaking changes, превосходная поддержка многопоточности и асинхронности, один язык на сервере и на клиенте, сильное комьюнити, тулинг.
Слабые стороны: тулинг, относительно высокий порог вхождения, небольшое число вакансий, отсутствие поддержки со стороны корпораций типа гугла.
Стоит ли изучать: нет, если это первый язык или если нужно найти работу через 2 месяца; да, если нет аллергии на динамическую типизацию и хочется подняться на новый уровень.
Clojure
>1. Применимость к реальному современному миру. На нём можно писать действительно полезные вещи, и люди это делают.
4. Можно писать интерпрайс (бэкенд walmart'а), можно веб-макакить (putchar.org), можно писать SPA в браузере (precursorapp.com, circleci, maria.cloud, braid.chat), можно писать десктоп (lighttable), можно писать мобильные приложения (status.im), с недавнего времени можно компилять в нативный код через graal. Единственный язык, который реально (а не для галочки) работает на jvm, clr и js платформах. Не подходит для байтоебства и систем, где критично минимальное потребление памяти, поэтому снимаем балл.
>2. Универсальность.
5. Смотри предыдущий пункт.
>3. Технологичекое качество и надёжность получаемых систем.
4. У комьюнити и создателей языка стронг фокус на разбиение разрабатываемой системы на независимые части, декларативное описание связей и датафлоу, минимизацию зависимостей и упрощение ризонинга о поведении системы (слово decomplect даже является эдаким местным мемчиком). Плюс из коробки есть мощная инфраструктура для тестирования (в том числе генеративного, на основе инвариантов) и контрактного программирования. Язык динамически типизированный, поэтому снимаем балл за отсутствие инструментов для формального доказательства свойств программ.
>4. Скорость разработки.
5. Главная фича языка - интерактивная разработка, горячая компиляция (hot reloading) и выполнение кода прямо внутри работающего приложения (в том числе задеплоенного в продакшн, можно подключиться своей ide к серверу и залить хотфикс, включить дебаггер или просто проверить текущее состояние процесса). Вся инфраструктура под это заточено, в комьюнити много инструментов, упрощающих написание reloadable кода. Пожалуй, это главный selling point. Алсо, можно хуяк-хуяк и в продакшн.
>5. Масштабируемость. Насколько легко разобраться, поддерживать, рефакторить и развивать уже имеющуюся кодовую базу.
2-3. Отсутствие статической типизации заставляет разбивать монолитный проект на микроили не очень микросервисы с четко документированными апи впрочем, это в любом случае хорошая идея. Язык относительно молодой, поэтому нет такого количества накопленного опыта проектирования и устоявшихся паттернов, как например в джаве. С другой стороны, минимизация сайд-эффектов, явный датафлоу, декларативная конфигурация зависимостей между модулями - благодаря этому всему разбираться в чужом коде намного проще, чем в ооп-лапше, поэтому в сумме имеем положительную оценку (но есть куда расти).
>6. Простота. Простому языку можно обучить 9 миллионов индусов
-2. Индусам придется ломать мышление и перестраиваться на функциональный стиль. Архитектурные паттерны тоже немного не такие (в сравнении с джавой; жс-индусы знакомые с реакт\редукс будут чувствовать себя как дома). С другой стороны, это именно практический, рациональный, инженерный язык, а не академический исследовательский проект, так что теорию категорий и отличия монад от эндофункторов знать не нужно.
>7. Хорошая (и безболезненная) поддержка многопоточности.
5. Пожалуй, лучший язык по части многопоточности. Все стандартные структуры данных потокобезопасны. Из коробки есть compare-and-swap, транзакционная память, агенты (акторы), асинхронщина через го-блоки (csp). Даже если тупо в лоб писать код и не думать о многопоточности вообще, то все равно все будет работать. Язык изначально создавался как раз чтобы решить проблему сложности написания многопоточного кода на жвм.
>8. Трудоустройство: насколько легко найти работу соискателю, который его знает, и насколько легко найти сотрудников в проект, который на нём написан.
-1. Найти сотрудников в проект легко. Найти работу трудно (по крайней мере в России). Джуны никому не нужны; обычно предполагается, что если уж ты пишешь на сабже, то ты убергруппенфюрерсеньор. Компенсируется высокими зарплатами (по данным stackoverflow, это язык с самыми высокими зарплатами в мире в 17-18 годах) и удаленкой в Штатах\Европе.
>9. Активное комьюнити. Документация, туториалы, треды на дваче Stack Overflow, митапы, конференции.
3. Комьюнити оче welcoming и активное, в основном тусуется в слаке, на реддите и на clojureverse.org. Много обучающей литературы (в том числе бесплатной), есть интерактивные вводные туториалы, есть видеокурсы (в том числе бесплатные), есть отличные сайты с задачками (4clojure.org, экцерцизм и т.п.). С другой стороны, нет такого количества туториалов и документации, как например для жс, и нет онлайн-курса на MOOC-платформе типа курсеры, как у скалы.
>10. Удобные инструменты разработки. Комфортная IDE, быстрая сборка, понятные сообщения об ошибках, быстрая перезагрузка при изменениях, инструменты для юнит- и прочих тестов.
-5--5. Сложный вопрос. С одной стороны - есть поддержка во всех актуальных редакторах\ide; хороший тулинг с поддержкой interactive development везде, от браузера до мобилок; отличная интеграция тулинга с хост-платформами (maven, npm и т.д.), при этом нет зоопарка билд-тулов, как в жс; в целом, пожалуй лучший воркфлоу с точки зрения удобства разработчика. С другой стороны - хитровыебанные сообщения об ошибках с километровыми стектрейсами (вроде как уже исправлено в следующей (еще не зарелизенной) версии, но хз), не совсем тривиальный сетап этого тулинга (хотя и есть специальные ide для нубов по типу "нажал одну кнопку и все работает", но это несерьезно), и в целом некая общая недопиленность в мелочах. По умолчанию как бы предполагается, что разработчик знает, что делает, его не нужно вести за ручку, и он может сам взять напильник и допилить, если ему что-то нужно.
Вердикт: язык для опытных инженеров, которым нужен эффективный инструмент для создания robust продуктов.
Область применения: бэкенд с нетривиальной логикой, микросервисы, обработка данных, full-stack SPA с нетривиальным интерфейсом.
Сильные стороны: отличный дизайн языка, стабильность и отсутствие breaking changes, превосходная поддержка многопоточности и асинхронности, один язык на сервере и на клиенте, сильное комьюнити, тулинг.
Слабые стороны: тулинг, относительно высокий порог вхождения, небольшое число вакансий, отсутствие поддержки со стороны корпораций типа гугла.
Стоит ли изучать: нет, если это первый язык или если нужно найти работу через 2 месяца; да, если нет аллергии на динамическую типизацию и хочется подняться на новый уровень.
Clojure. Динамически типизированный диалект Lisp.
Простота
Лично я вкатился на нее с Питона. Это было сравнительно просто, потому что оба языка типизированы неявно, строго и динамически. Здесь нет сложной системы статических типов, как в той же Скале, что очень упрощает код. Самым сложным было привыкание к синтаксису и к неизменяемым данным.
Вот несколько примеров кода на Питоне и на Кложуре:
print("Hello, World!")
(println "Hello, World!")
a, b, c = [1, 2, 3]
(let [[a b c] [1 2 3]]) ; после конца let, переменные перестают существовать, в отличие от питона
len([1, 2, 3]) # 3
(count [1 2 3]) ; 3
list(map(lambda x: x ∗ x, range(1, 4))) # [1, 4, 9]
(map (fn [x] (∗ x x)) (range 1 4)) ; [1 4 9]
В последнем примере, можно вместо формы fn написать #(∗ % %), как в Cкале с _.
JVM
Язык, как и Скала, хостится на JVM, то есть тебе доступны все Джавовские библиотеки.
Leiningen
Отличный сборщик проектов. Описываешь зависимости и настройки через Кложуровские структуры данных (которые напоминают JSON). Собирает, на мой вкус, долговато, но на что нам REPL?
REPL
Интерактивный интерпретатор. Многие редакторы/IDE могут подключаться к нему, слать туда код и выводить тебе результат прямо в редактор. Можно лайв-кодить даже веб.
Вообще, лисперы предпочитают именно лайв-кодить, а не пересобирать проект после каждого изменения. Изменил функу — можешь перегрузить чисто эту функу, отправив ее в REPL еще раз.
Синтаксис
Синтаксис очень простой. Почти везде тебе достаточно пары скобок. Поначалу охуевал с их обилия, но потом привык. С Paredit стало совсем заебись, сейчас юзаю его и в других языках.
Ориентированность на данные
В стандартной библиотеке есть множество мелких функций, позволяющих делать с данными что угодно. Язык вообще поощряет тебя, если ты работаешь с тупыми данными (деревьями из списков и словарей). Он под это заточен.
Неизменяемые данные по умолчанию
Охуеннейшая фича Кложуры. Можно слать данные в функи, отдавать потокам — делать что хочешь. Исходные данные не изменяются, если ты не обернешь их, например, в атом.
Атомы позволяют синхронизированно изменять данные в нескольких потоках.
Короче, очень трудно выстрелить себе в ногу в многопоточной среде.
Макросы
Фича Лиспа. Не имеют ничего общего с текстовыми макросами из C. Позволяют пилить собственный синтаксис, преобразовывая код. Многие стандартные операции реализованы именно через них. То есть, программист находится на том же уровне, что и автор языка, и может расширять язык удобным способом.
Один из самых нужных лично мне макросов — это "->". Позволяет чейнить несколько функций, передавая им нужные параметры. Для этого не нужны "Билдер Паттерны".
Задавай ответы, если заинтересовало.
Clojure. Динамически типизированный диалект Lisp.
Простота
Лично я вкатился на нее с Питона. Это было сравнительно просто, потому что оба языка типизированы неявно, строго и динамически. Здесь нет сложной системы статических типов, как в той же Скале, что очень упрощает код. Самым сложным было привыкание к синтаксису и к неизменяемым данным.
Вот несколько примеров кода на Питоне и на Кложуре:
print("Hello, World!")
(println "Hello, World!")
a, b, c = [1, 2, 3]
(let [[a b c] [1 2 3]]) ; после конца let, переменные перестают существовать, в отличие от питона
len([1, 2, 3]) # 3
(count [1 2 3]) ; 3
list(map(lambda x: x ∗ x, range(1, 4))) # [1, 4, 9]
(map (fn [x] (∗ x x)) (range 1 4)) ; [1 4 9]
В последнем примере, можно вместо формы fn написать #(∗ % %), как в Cкале с _.
JVM
Язык, как и Скала, хостится на JVM, то есть тебе доступны все Джавовские библиотеки.
Leiningen
Отличный сборщик проектов. Описываешь зависимости и настройки через Кложуровские структуры данных (которые напоминают JSON). Собирает, на мой вкус, долговато, но на что нам REPL?
REPL
Интерактивный интерпретатор. Многие редакторы/IDE могут подключаться к нему, слать туда код и выводить тебе результат прямо в редактор. Можно лайв-кодить даже веб.
Вообще, лисперы предпочитают именно лайв-кодить, а не пересобирать проект после каждого изменения. Изменил функу — можешь перегрузить чисто эту функу, отправив ее в REPL еще раз.
Синтаксис
Синтаксис очень простой. Почти везде тебе достаточно пары скобок. Поначалу охуевал с их обилия, но потом привык. С Paredit стало совсем заебись, сейчас юзаю его и в других языках.
Ориентированность на данные
В стандартной библиотеке есть множество мелких функций, позволяющих делать с данными что угодно. Язык вообще поощряет тебя, если ты работаешь с тупыми данными (деревьями из списков и словарей). Он под это заточен.
Неизменяемые данные по умолчанию
Охуеннейшая фича Кложуры. Можно слать данные в функи, отдавать потокам — делать что хочешь. Исходные данные не изменяются, если ты не обернешь их, например, в атом.
Атомы позволяют синхронизированно изменять данные в нескольких потоках.
Короче, очень трудно выстрелить себе в ногу в многопоточной среде.
Макросы
Фича Лиспа. Не имеют ничего общего с текстовыми макросами из C. Позволяют пилить собственный синтаксис, преобразовывая код. Многие стандартные операции реализованы именно через них. То есть, программист находится на том же уровне, что и автор языка, и может расширять язык удобным способом.
Один из самых нужных лично мне макросов — это "->". Позволяет чейнить несколько функций, передавая им нужные параметры. Для этого не нужны "Билдер Паттерны".
Задавай ответы, если заинтересовало.
>Безработные, поясните по простому что такое функциональное программирование и чем отличается от иного?
Основная идея в том, что в си-подобных языках у тебя состояние неявно размазано по всей программе, поэтому ты его не контролируешь. То же самое, что и с глобальными переменными, короче: у тебя возникает куча неявных неочевидных связей между разными частями программы, из-за чего ее сложнее поддерживать. В функциональщине глобальное состояние и взаимодействие с внешним миром изолируют от бизнес-логики.
Алсо, предметную область моделируют с помощью значений. В условной джаве объекты - это по сути старые-добрые указатели на куски памяти, которые смешивают в кучу identity и value. Вот смотри: x = 42. Здесь "икс" - это identity (что такое), а 42 - это value (чему оно равно). Если тебе нужно прибавить к иксу единицу, ты не изменяешь само число 42 - ты просто выкидываешь старое значение и приравниваешь икс к новому значению: x = 42 + 1. То же самое со строками: ты просто пишешь str = "foo" + "bar", выкидываешь старое значение и связываешь identity с новым значением. Но вот когда у тебя есть класс User, и у тебя юзер зашел на сайт и изменил свой адрес, например, то ты зачем-то меняешь само значение вместо того, чтобы привязать identity к новому значению (это как если бы ты менял само число 42 вместо того, чтобы написать x = 42 + 1). Представь, что было бы, если бы ты каждый раз менял само число 42? Вся математика бы постоянно ломалась в неожиданных местах, потому что это был бы глобальный, неконтролируемый эффект (эдакое "дальнодействие"), влияющий на все части математики (то есть твоей программы). А в примере с User ты именно это и делаешь, из-за чего возникает куча низкоуровневых проблем: как проверить, что два юзера равны друг другу (по ссылке или по значению?); как быть уверенным, что изменения в одном куске кода не затронут совершенно другой кусок кода; как сериализовать и восстанавливать состояние; как сделать копию юзера (нужен deep clone и т.п.); как откатить состояние на один шаг назад; наконец, если ты попытаешься в многопоточность, то это будет худший кошмар в твоей жизни (race condition'ы и дедлоки ждут тебя).
Неизменяемые данные решают все эти технические проблемы (естественные сравнения на эквивалентность и хэшируемость из коробки, lock-free concurrency, traveling time debugger, etc), попутно облегчая анализ логики твоего кода, потому что интуитивно проще рассуждать в терминах значений (данных), а не кусков памяти и указателей на них.
А вообще, изначально под "функциональным программированием" понимался любой язык со сборщиком мусора и лямбдами (анонимными функциями и функциями высшего порядка). Теперь эти фичи уже перекочевали во все языки (с запозданием на 10-20 лет), и иммутабельность по умолчанию потихоньку тоже перекочевывает в мейнстрим (гугл, например, давным-давно написал свою библиотеку иммутабельных коллекций для джавы вместо стандартной мутабельной; в том же жс реакт и прочее - это реализация идей функционального реактивного программирования, которым лет 15, плюс на современный фронтенд сильно повлияли элм и кложескрипт, и т.д.) Еще через 10-20 лет иммутабельность будет дефолтом во всех прикладных языках, поскольку она делает язык более высокоуровневым.
>Безработные, поясните по простому что такое функциональное программирование и чем отличается от иного?
Основная идея в том, что в си-подобных языках у тебя состояние неявно размазано по всей программе, поэтому ты его не контролируешь. То же самое, что и с глобальными переменными, короче: у тебя возникает куча неявных неочевидных связей между разными частями программы, из-за чего ее сложнее поддерживать. В функциональщине глобальное состояние и взаимодействие с внешним миром изолируют от бизнес-логики.
Алсо, предметную область моделируют с помощью значений. В условной джаве объекты - это по сути старые-добрые указатели на куски памяти, которые смешивают в кучу identity и value. Вот смотри: x = 42. Здесь "икс" - это identity (что такое), а 42 - это value (чему оно равно). Если тебе нужно прибавить к иксу единицу, ты не изменяешь само число 42 - ты просто выкидываешь старое значение и приравниваешь икс к новому значению: x = 42 + 1. То же самое со строками: ты просто пишешь str = "foo" + "bar", выкидываешь старое значение и связываешь identity с новым значением. Но вот когда у тебя есть класс User, и у тебя юзер зашел на сайт и изменил свой адрес, например, то ты зачем-то меняешь само значение вместо того, чтобы привязать identity к новому значению (это как если бы ты менял само число 42 вместо того, чтобы написать x = 42 + 1). Представь, что было бы, если бы ты каждый раз менял само число 42? Вся математика бы постоянно ломалась в неожиданных местах, потому что это был бы глобальный, неконтролируемый эффект (эдакое "дальнодействие"), влияющий на все части математики (то есть твоей программы). А в примере с User ты именно это и делаешь, из-за чего возникает куча низкоуровневых проблем: как проверить, что два юзера равны друг другу (по ссылке или по значению?); как быть уверенным, что изменения в одном куске кода не затронут совершенно другой кусок кода; как сериализовать и восстанавливать состояние; как сделать копию юзера (нужен deep clone и т.п.); как откатить состояние на один шаг назад; наконец, если ты попытаешься в многопоточность, то это будет худший кошмар в твоей жизни (race condition'ы и дедлоки ждут тебя).
Неизменяемые данные решают все эти технические проблемы (естественные сравнения на эквивалентность и хэшируемость из коробки, lock-free concurrency, traveling time debugger, etc), попутно облегчая анализ логики твоего кода, потому что интуитивно проще рассуждать в терминах значений (данных), а не кусков памяти и указателей на них.
А вообще, изначально под "функциональным программированием" понимался любой язык со сборщиком мусора и лямбдами (анонимными функциями и функциями высшего порядка). Теперь эти фичи уже перекочевали во все языки (с запозданием на 10-20 лет), и иммутабельность по умолчанию потихоньку тоже перекочевывает в мейнстрим (гугл, например, давным-давно написал свою библиотеку иммутабельных коллекций для джавы вместо стандартной мутабельной; в том же жс реакт и прочее - это реализация идей функционального реактивного программирования, которым лет 15, плюс на современный фронтенд сильно повлияли элм и кложескрипт, и т.д.) Еще через 10-20 лет иммутабельность будет дефолтом во всех прикладных языках, поскольку она делает язык более высокоуровневым.
>Где-то слышал миф, что для общего развития, кроме C/C++ ещё стоит выучить какой-нибудь диалект лиспа. Что это даст?
У лиспов (это семейство языков такое) две основных особенности, общие для всех языков семейства:
1) Гомоиконность. Это значит, что текст программы представлен не тупо потоком символов, как в си, а литеральными структурами данных. JSON видел? Ну вот его еще в 60-ых придумали, лол. И ты пишешь весь код не просто текстом, а структурами данных, как в жсоне. Это позволяет его легко и удобно парсить компьютером и человеком (нет неоднозначностей, все чотка и строго, не нужно запоминать приоритеты операторов и ставить точки с запятой, редактор может за тебя расставлять скобки и т.п.), и, что важнее, - позволяет реализовать мощную и простую систему метапрограммирования. Это когда ты пишешь программу, которая пишет другую программу. В си метапрограммирование ограничено текстовыми макросами, которые (как ты уже знаешь, если писал на си) сосут с проглотом. А тут ты можешь запускать при компиляции любые функции на том же языке, которые принимают и возвращают структуры данных (которые представляют код). Поэтому ты можешь иметь минималистичное ядро языка, а все остальное добавлять в него библиотеками с помощью макросов (в то время как в си тебе нужно менять компилятор для добавления любой фичи). Например, можно добавить систему типов (библиотекой!), можно добавить async\await или каналы и го-блоки, как в go (библиотекой!), можно добавить логическое программирование, и т.п. С метапрограммированием тебе в любом случае придется сталкиваться (к тому же сейчас его пытаются добавить в любой новый язык), и лучше его изучить на хорошем, корректно сделанном языке, чем на костылях типа шаблонов с++.
2) Интерактивность. В си ты меняешь код, компилируешь программу, запускаешь, видишь результат. Повторяешь все заново. В лиспах ты запускаешь программу, потом подключаешься прямо к этой работающей программе и меняешь код внутри нее прямо во время ее работы. Это абсолютно другой (и качественно лучший) воркфлоу, и - опять же - его сейчас везде пихают (пытаются запихать), от unity до жаваскрип-фреймворков. Поскольку это очень трендовая тема, опять же, с ней надо познакомиться. В других языках в силу их ограничений полной интерактивности до сих пор нет.
Алсо, если бы ты спросил лет 10-15 назад, то я бы добавил "функциональное программирование, функции высшего порядка и т.п." - теперь это уже (наконец-то) перекочевало в мейнстрим и трудно представить современный язык без поддержки ФП.
Алсо, если бы ты спросил лет 20-25 назад, то я бы добавил "сборщик мусора, автоматическое управление памятью и т.п." - теперь это уже (слава богу!) перекочевало в мейнстрим и трудно представить современный язык без поддержки какой-либо формы автоматического управления памятью.
>Где-то слышал миф, что для общего развития, кроме C/C++ ещё стоит выучить какой-нибудь диалект лиспа. Что это даст?
У лиспов (это семейство языков такое) две основных особенности, общие для всех языков семейства:
1) Гомоиконность. Это значит, что текст программы представлен не тупо потоком символов, как в си, а литеральными структурами данных. JSON видел? Ну вот его еще в 60-ых придумали, лол. И ты пишешь весь код не просто текстом, а структурами данных, как в жсоне. Это позволяет его легко и удобно парсить компьютером и человеком (нет неоднозначностей, все чотка и строго, не нужно запоминать приоритеты операторов и ставить точки с запятой, редактор может за тебя расставлять скобки и т.п.), и, что важнее, - позволяет реализовать мощную и простую систему метапрограммирования. Это когда ты пишешь программу, которая пишет другую программу. В си метапрограммирование ограничено текстовыми макросами, которые (как ты уже знаешь, если писал на си) сосут с проглотом. А тут ты можешь запускать при компиляции любые функции на том же языке, которые принимают и возвращают структуры данных (которые представляют код). Поэтому ты можешь иметь минималистичное ядро языка, а все остальное добавлять в него библиотеками с помощью макросов (в то время как в си тебе нужно менять компилятор для добавления любой фичи). Например, можно добавить систему типов (библиотекой!), можно добавить async\await или каналы и го-блоки, как в go (библиотекой!), можно добавить логическое программирование, и т.п. С метапрограммированием тебе в любом случае придется сталкиваться (к тому же сейчас его пытаются добавить в любой новый язык), и лучше его изучить на хорошем, корректно сделанном языке, чем на костылях типа шаблонов с++.
2) Интерактивность. В си ты меняешь код, компилируешь программу, запускаешь, видишь результат. Повторяешь все заново. В лиспах ты запускаешь программу, потом подключаешься прямо к этой работающей программе и меняешь код внутри нее прямо во время ее работы. Это абсолютно другой (и качественно лучший) воркфлоу, и - опять же - его сейчас везде пихают (пытаются запихать), от unity до жаваскрип-фреймворков. Поскольку это очень трендовая тема, опять же, с ней надо познакомиться. В других языках в силу их ограничений полной интерактивности до сих пор нет.
Алсо, если бы ты спросил лет 10-15 назад, то я бы добавил "функциональное программирование, функции высшего порядка и т.п." - теперь это уже (наконец-то) перекочевало в мейнстрим и трудно представить современный язык без поддержки ФП.
Алсо, если бы ты спросил лет 20-25 назад, то я бы добавил "сборщик мусора, автоматическое управление памятью и т.п." - теперь это уже (слава богу!) перекочевало в мейнстрим и трудно представить современный язык без поддержки какой-либо формы автоматического управления памятью.
>3 класса по вашему проще одной функции? Камон
----
Ты путаешь понятия "простота" (simplicity) и "легкость в изучении, использовании, etc" (easiness). Для обывателя это нормально, но если ты претендуешь на то, чтобы быть разработчиком, тебе нужно разбираться в этих вещах (принципах построения абстракций).
Увеличение простоты обычно ведет к разъединению (decomplection) сущностей. Увеличение легкости, напротив, обычно ведет к агрегации разных сущностей в одну.
Можно привести такую аналогию: отдельные клетки человека проще чем сам человек целиком - согласен? Каждый орган человека состоит из миллионов этих клеток - но это не делает сами эти клетки сложнее. Клетки проще чем орган, который из них состоит (несмотря на то, что их очень много). А сам этот орган (хоть он и один) сложнее этих клеток. При этом взаимодействовать с органом проще, чем с отдельными клетками. Если у тебя сбоит желудок, то ты во большей части случаев 1) поймешь, из-за чего это "пельмешки просроченные зохавал" 2) сможешь выпить таблетку\приложить подорожник и исправить проблему. Если у тебя сбоят клетки, то ты скорее всего сдохнешь от рака. Желудок люди умеют лечить давно, а с отдельными клетками до сих пор до конца не разобрались. Итак, клетки проще, но с ними труднее взаимодействовать; орган сложнее, но с ним проще взаимодействовать.
Простота\сложность - объективная собственная характеристика объекта (в нашем случае - абстракции), его внутренней структуры.
Легкость\трудность - субъективная характеристика, которая зависит от того, кто и в приложении к чему ее оценивает (легкость в изучении, легкость в использовании и т.п.).
http://circleci.com - Continuous Integration and Delivery. Бэкенд и фронтенд на clojure+clojurescript.
Полюзуюсь для CI этой няшей.
Ну, штош попробуем написать что-нибудь!
У Никиты Прокопова спроси, лол.
Бля, зайди и прочти.
Пушишь коммит в репу, оно за тебя В ОБЛАКЕ все собирает, развертывает, прогоняет тесты, показывает красивый отчетик в браузере.
Ну как бы да, я вообще не представляю, насколько 1сником надо быть, чтобы только сейчас впервые услышать про CI
https://www.youtube.com/watch?v=jlPaby7suOc
Обновленную шапку не читай @ ссылку в тред кидай :3
Совершенно топовый софтваре стендап кстати, лол, я больше проигрывал наверное только с wat
>>343273
>Web: http://www.luminusweb.net || https://github.com/weavejester/compojure
можешь еще pedestal упороться, если хочется поупарываться
(setq cider-show-error-buffer nil)
О рили? Установочник жалуется, что не установлен пакет, который он устанавливает? ЧТо за херня?
Нихуя не понял. Добавь в profiles.clj:
:aliases {"dev" ["trampoline" "repl" ":headless"]}
lein dev @ M-x cider-connect
>>343555
Можно (в крайнем случае можно написать, это пару строчек), но я хз зачем, так что не знаю, есть ли это из коробки. А нахуя тебе это? Я обычно выполняю текущий блок, текущий деф или текущий буфер - как-то даже не приходило в голову выполнять от начала до курсора.
Ну я работаю над файлом, сохраняю, выхожу, на следующий день возвращаюсь, и мне надо выполнить готовую часть кода, а 2-3 функции которые еще не закончены не выполнять.
Может оно и вправду нахуй надо, вряд ли такая ситуация часто будет случатся.
то, что описано в начале называется независимой организацией кода, и относится к фп настолько же как и к другим видам организации кода.
> изначально под "функциональным программированием" понимался любой язык со сборщиком мусора
любой язык основной логической единицей которого являлась функция, как и сейчас, собсна
обожаю разговоры с пастой
>то, что описано в начале называется независимой организацией кода
Нет, это называется изоляцией сайд-эффектов.
>и относится к фп настолько же как и к другим видам организации кода.
Нет, сайд-эффектфул код от чистого кода строго отделяют именно в фп (по определению).
>любой язык основной логической единицей которого являлась функция
Например, си и перл, ок.
лучша бы чукча был читатель, а не писатель
Боже, почему Clojure настолько проще чем Scala? Все просто, логично и самое главное лаконично. Открываешь библиотеку какого-нибудь хуя на гитхабе и сразу можешь читать и понимать код. Попробуй так со скалой, лол.
Рич Хикки действительно гений.
Не траллю, просто интересно, есть ли смысл изучать.
Поставил себе люминус пример проекта и охуел, он зависимости выкачивал минут 15, там библиотек в гостевухе больше чем у меня волос на голове.
Есть какой-то вкат в бекенд попроще? Хотя бы без mount, я с этой хуйни вообще сгорел.
Можно будет больше не писать на скале пека
А какие профиты вообще с того что ты знаешь несколько языков, к тому же столь мало популярных?
Так тебе не обязательно их всех использовать то. Да библиотеки там наверняка в основном жаваскриптовые дял cljs, их google closure при компиляции обрежет, оставив только нужные, да и в тех будет только тот код, который задействован в проекте.
так а я ебу что использовать а что нет. Я просто написал lein new lumius gostevuha, и там оно всё завязано.
Короче поищу че попроще, чтобы чисто веб-сервер, роутинг и jdbc и встроенный репл. Потом довезу чето для базы и темплейтинга, и только в самом конце ебучие маунты/компоненты, конфигурации и вот это всё.
> А какие профиты вообще с того что ты знаешь несколько языков, к тому же столь мало популярных?
В мейнстримных языках больше быдланов, вкатившихся ради бабла и прочих хипстеров. В малопопулярных языках чаще встречаются энтузиасты своего дела, какой-нибудь Васян-вкатывальщик лучше выучит JS или Java, а не Scala/Clojure/Haskell.
Понятно что выбор работы у тебя будет меньше, но если ты знаешь несколько таких языков, можно уже что-то повыбирать.
Я вот вкатился в Скалу, потому что не нашёл работу на Хаскелле, а потом втянулся.
>Я вот вкатился в Скалу, потому что не нашёл работу на Хаскелле
Так а работу то нашёл? Имеет смысл в скалу перекатиться?
> Так а работу то нашёл?
Нашёл.
> Имеет смысл в скалу перекатиться?
Откуда? Если с кложуры то я бы наверно искал зарубежную удалёнку, а не перекатывался.
Вообще, если тебе главное найти работу - ищи работу на Java, а там глядишь сможешь пересадить всех на кложуру. Если просто из интереса к языкам программирования - конечно стоит, но начать лучше с Хаскелля.
Не понимаю те компании которые использую не популярные языки и которые не быстрее пайтона или пхп.
Ну ты примерно ответил на свой вопрос, если еще есть, задавай.
Что их упомянутого им не быстрее питона или ПожалуйстаХватитПисатьнамне ?
http://clojure-goes-fast.com/blog/ https://dragan.rocks полуркай тут
>>344895
Нет ебли с типами, все максимально просто и понятно, уберстабильная стандартная библиотека, можно писать веб и мобилки.
Ну так это пример полноценного фулстак приложения, хуль ты хотел. Посмотри на структуру проекта, полистай код. Если хочешь попроще и с нуля ставь голый compojure и подключай сам, что тебе нужно, написано жеж:
>Web: http://www.luminusweb.net || https://github.com/weavejester/compojure
Алсо, поясни, чем тебе mount не понравился? Наоборот он самый легкий и наотъебись, если сравнивать с component и integrant - просто делаешь defstate вместо def и все. Главный минус имхо в том, что работает в кложе и кложескрипте немного по-разному.
> Это похоже на язык программирования инопланетян, ни черта не понятно, этот язык будут использовать три с половиною компаний на критичных участках.
Можно, пиши, на дваче разрешили.
Спасибо. Я не говорю что не нравится, просто надо по одному разбирать, наверное, а не сразу всё кучей.
Алсо, видел такое мнение от людей с пректами на кложе, что они скорее возьмут опытного разработчика и научат кложе, чем возьмут кложе июня. Что скажете, есть шансы вкатиться на кложе куда-то без многолетнего опыта?
М? Нет, не протухли. Вторая ссылка - старая версия на jvm и новая в браузере (последний коммит две недели назад). Третья ссылка - статья с описанием архитектуры. Вы там со своими жс-фреймворками совсем обезумели уже, счет протухания идет на часы?
>>345878
Шансы-то конечно есть, но вряд ли это будет какая-то вакансия с условного хх.ру, сам понимаешь.
А вон тут еще один туториал пацаны подогнали: https://circleci.com/blog/build-a-clojure-web-app-using-duct/
> В функциональщине глобальное состояние и взаимодействие с внешним миром изолируют от бизнес-логики.
> Нет, это называется изоляцией сайд-эффектов.
> >и относится к фп настолько же как и к другим видам организации кода.
> Нет, сайд-эффектфул код от чистого кода строго отделяют именно в фп (по определению).
Изоляция бизнес логики уж точно не специфичное только для фп действие и я определенно говорил про независимую организацию кода, когда бизнес логика является входными данными для не зависящего от нее кода.
Не очевидно если речь шла именно про сайд эффекты, однако вспоминая не мало известного Егора - ооп так же можно организовать без сайд эффектов.
Мой кейс лишь в том что это ни коем образом не относится исключительно к фп и потому мне странно почему это описано как одно из отличий.
> отделяют именно в фп (по определению)
Вбрось. У разных авторов разные определения.
>Изоляция бизнес логики уж точно не специфичное только для фп действие
А изоляция глобального состояния и сайд-эффектов - специфичное.
>я определенно говорил про независимую организацию кода
Не понял, мы же пасту обсуждаем, ее же не ты писал. В пасте написано про изоляцию стейта.
>бизнес логика является входными данными для не зависящего от нее кода.
Что-то не то, остальной код как раз зависит от бизнес-логики (а бизнес-логика от остального кода не зависит).
>вспоминая не мало известного Егора
Ну так он и пишет фпшный код с плохим синтаксисом, лол. На самом деле у него конечно очень своеобразное сочетание обоих подходов - он сам об этом писал, кстати.
>это ни коем образом не относится исключительно к фп и потому мне странно почему это описано как одно из отличий.
Ну смотри как это со стороны выглядит:
>изоляция состояния - одна из черт фп
>>а независимая организация кода свойственна всем парадигмам
>ок, но изоляция состояния - одна из черт именно фп
>>нет, независимоая организация кода не относится к фп
>...
Нутыпонел.
>Вбрось. У разных авторов разные определения.
Ну хуй знает, определение на википедии меня устраивает: https://en.wikipedia.org/wiki/Functional_programming
Короче, это все пустой пиздеж и спор о терминах энивей, просто возьми и напиши какой-нибудь тетрис или арканоид в функциональном стиле и все подобные вопросы отпадут, имхо. Алсо, можешь прочитать это (про state и identity самое важное):
https://clojure.org/about/rationale
https://clojure.org/about/state
https://clojure.org/about/functional_programming
>Изоляция бизнес логики уж точно не специфичное только для фп действие
А изоляция глобального состояния и сайд-эффектов - специфичное.
>я определенно говорил про независимую организацию кода
Не понял, мы же пасту обсуждаем, ее же не ты писал. В пасте написано про изоляцию стейта.
>бизнес логика является входными данными для не зависящего от нее кода.
Что-то не то, остальной код как раз зависит от бизнес-логики (а бизнес-логика от остального кода не зависит).
>вспоминая не мало известного Егора
Ну так он и пишет фпшный код с плохим синтаксисом, лол. На самом деле у него конечно очень своеобразное сочетание обоих подходов - он сам об этом писал, кстати.
>это ни коем образом не относится исключительно к фп и потому мне странно почему это описано как одно из отличий.
Ну смотри как это со стороны выглядит:
>изоляция состояния - одна из черт фп
>>а независимая организация кода свойственна всем парадигмам
>ок, но изоляция состояния - одна из черт именно фп
>>нет, независимоая организация кода не относится к фп
>...
Нутыпонел.
>Вбрось. У разных авторов разные определения.
Ну хуй знает, определение на википедии меня устраивает: https://en.wikipedia.org/wiki/Functional_programming
Короче, это все пустой пиздеж и спор о терминах энивей, просто возьми и напиши какой-нибудь тетрис или арканоид в функциональном стиле и все подобные вопросы отпадут, имхо. Алсо, можешь прочитать это (про state и identity самое важное):
https://clojure.org/about/rationale
https://clojure.org/about/state
https://clojure.org/about/functional_programming
Рич же говорил, что ему так и не удалось заработать на Clojure и его компания не принесла ни копейки.
Я думал, datomic таки покупают.
> >независимая организация кода свойственна всем парадигмам. Изоляция бизнес логики уж точно не специфичное только для фп действие
> А изоляция глобального состояния и сайд-эффектов - специфичное.
Окей, мне казалось что первое подразумевает второе, но наверно я не прав. Мне просто тяжело предоставить кейс в котором у может быть описан независимый код полагающийся на зависимые от бизнес логики стейты и сайдэффекты и конкретно это меня и смутило
Не понял, к чему это ты? Не вижу связи с постом, на который ты отвечаешь. Сама кложа (язык) денег разумеется не приносит - я слабо представляю, как язык может приносить какой-то доход, ну разве что кроме каких-то суперспецифичных областей, где нужны сертифицированные компиляторы со 100% доказательствами корректности и подобная байда. Когнитект зарабатывает консалтингом, разработкой интерпрайса и продажей датомика, насколько мне известно.
>как язык может приносить какой-то доход
Ну у LispWorks хорошо получается зарабатывать на их реализации CL + IDE
Вот сколько прохожу мимо вашего треда, посоны, и мне все время кажется что на четвертой пикче ОП-поста - СИЛЬНО спившаяся Рипли, которая уже задолбалась жизнью и борьбой с багами чужими.
мимо проходил
Пикрелейтед - моё актуальное лицо, когда прочитал про макрос loop в Common Lisp.
Серьёзно, что за нахуй? DSL для циклов с условием в стандарте? Не могли, как в концептуально стройной няшной Scheme сделать - вот тебе TCO, вот тебе named let, и крутись как хочешь. Нет блядь, надо нахуевертить, чтобы как в C++ было, только со скобочками))))))))))
Половина хейтит луп, половина мотает головой и повторяет: "да ну чо епт, да нормас епт, ДСЛ епты ж бля!".
В сабже кстати тоже есть что-то подобное ну не совсем, как бы круче, но и скоуп другой - манипуляции коллекциями, а не просто циклы: https://github.com/nathanmarz/specter - автор дико бугуртил по поводу того, что мол ну я ведь лучше сделал, работает быстрее, кода меньше, хуль вы в core это не пихаете... нутыпонел
Common Lisp -- outdated устаревшее говнецо, чего стоят хотя бы разные неймспейсы функций и переменных.
И я читал в свое время On List, да, еще когда Reddit был фан-сайтом Пола Грехема.
Алсо, помню Clojure еще в зародыше. Как я проиграл сейчас, увидев, что в его Rationale до сих пор упоминается SISC, который почил в бозе больше 10 лет назад.
И че я вам скажу, ребятки. Работа с сырой датой нудна и нескалабильна. Помню, как я охуел после курсов SICP и построения компиляторов на Scheme, когда на продвинутом курсе построения языков решил реализовать набор интерпретаторов на жабке. Как все просто оказалось-то с нормальным ООП! Интерпретатор Scheme легче реализовать на жабке, чем на Scheme, такие дела.
> Интерпретатор Scheme легче реализовать на жабке, чем на Scheme, такие дела.
Позволь с тобой не согласиться. Интерпретатор (или компилятор) простого, без выкрутасов подмножества Scheme на Scheme помещается в один экран. ООП - не панацея all heil closures, ну и в идее написания интерпретатора/компилятора на языке, им же обрабатываемом, есть что-то невыразимо фундаментально правильное (вроде бы в "Гёдель, Эшер, Бах" эта идея мусолится со всех сторон).
>ну и в идее написания интерпретатора/компилятора на языке, им же обрабатываемом, есть что-то невыразимо фундаментально правильное
Так появляются языки - DSL для написания интерпретаторов. И языки эти говно для большей части прикладных задач.
Да даже в простом интерпретаторе нужно постоянно парсить дату, а как только тебе нужно добавить что-то нетривиальное типа lazy evaluation, то пиши кранты. А на жабке я чуть оргазм не испытал, когда понял, что можно оверрайдить методы в классе Expression, например.
Кстати, посоны, че-то я не понял, пикрелейтед означает, что кложа сосет? Несмотря на третье тысячелетие? Это, типа, такой убийца Лиспа? Может оно еще и в call/cc не умеет?
>чего стоят хотя бы разные неймспейсы функций и переменных.
В этом нет ничего устаревшего, это просто две разных опции. На самом деле, это даже удобно, потому что в лисп-1 (в частности в кложе) часто локальные переменные затеняют функции из core (первый пример, что приходит на ум - name). Но да, лисп-1 концептуально гораздо более логичен, конечно, поэтому я предпочитаю его.
>Интерпретатор Scheme легче реализовать на жабке, чем на Scheme, такие дела.
Это неправда ложь, пиздежь и провокация хотя бы потому, что в scheme у тебя уже реализованы функции парсинга секспов, так что тебе элементарно нужно меньше реализовывать. Ну и да, простой интерпретатор - это полтора десятка строчек, помещается на один экран. На руби\схеме\питоне он будет проще и короче, чем на джаве, просто в силу специфики предназначения этих языков.
>>348748
>А на жабке я чуть оргазм не испытал, когда понял, что можно оверрайдить методы в классе Expression, например.
Гхм, ну... slowpoke.png
>пикрелейтед
Я понимаю, что ты троллишь прекрати, это не го-тред, но все равно отвечу на платину: https://clojure.org/about/functional_programming#_recursive_looping
> lazy evaluation
Дак это же традиционно добавляется макросом, который заворачивает выражение-аргумент в лямбду, не?
Ну не в этом суть, речь о том, что парсинг даты подходит лишь для простых задач. А для простых задач есть Питон! Который тоже не умеет в tail recursion, как и кложа — см. пикрелейтед.
> call/cc
Scheme, мне, конечно, нравится как эта няша вообще может кому-то не нравиться?, но call/cc - это, кмк, самая ёбнутая её фича. Понятно, конечно, что мощща, все дела, что всю муть типа try/catch, unwind-protect и прочего можно реализовать поверх call/cc, но всё равно такое.
> Ну не в этом суть, речь о том, что парсинг даты подходит лишь для простых задач.
Ну да, для сложных задач есть макросы которых, естественно, в гвидобейсике нет. Что не так-то?
Алсо, питон - это такая кривая пародия на Scheme с нескучным синтаксисом, это я говорю как человек, пишущий на этом говне года с двенадцатого и преподающий эту хуйню за деньги.
>но call/cc - это, кмк, самая ёбнутая её фича
Это потому что ты не умеешь ее готовить.
Мы через нее реализовывали co-routines, например.
И да, лучше язык с сильными фичами в ядре, поверх которых можно реализовать все остальное, чем нагромождение хаков в том же ядре. Факт, что хорошие интерпретаторы Scheme нормально и эффективно все реализовывали, тот же SISC, например.
>Не понял, о чём ты. Приведи пример?..
Не буду, потому что увидел тред и не хочу разводить срач в тематике
>Алсо, питон - это такая кривая пародия на Scheme с нескучным синтаксисом, это я говорю как человек, пишущий на этом говне года с двенадцатого и преподающий эту хуйню за деньги.
Вот нинада, нинада грязи. В третьем Питоне даже nonlocal есть для любителей SICP и курс тоже есть, и дизайн в нем заебись, весь такой математический, чего стоит хотя бы униформный подход к атрибутам класса — хочешь, static, хочешь, не static. Я преподавал SICP на Питоне за бабло, лол, и это гораздо приятнее, чем Scheme.
>но все равно отвечу на платину: https://clojure.org/about/functional_programming#_recursive_looping
И таки да, объясните тупому, позязя, почему вот это вот:
>Since Clojure uses the Java calling conventions, it cannot, and does not, make the same tail call optimization guarantees. Instead, it provides the recur special operator, which does constant-space recursive looping by rebinding and jumping to the nearest enclosing loop or function frame.
не является "я ниасилил, хнык хнык"? Зачем ему recur для tail call optimization внутри функции, и при чем здесь Java calling conventions, если это все исключительно внутри функции происходит? И почему SISC осилил полный tail recursion в JVM, а Clojure — ниасилил?
Ну фломастеры, да. Я не могу всерьёз воспринимать язык без TCO, сорь. Про макросы вообще молчу, таких же макросов, как в лиспах, вроде больше ни в одном языке нет.
> весь такой математический
Да брось. Фортран математический. Питон простой, как тяпка, из-за этого в него в начале 10-х хлынули толпы вкатывальщиков, а дух старой школы, unix-хакеры, все дела, соответственно, ушёл.
>>348759
А ты мне в личку напиши
> И почему SISC осилил полный tail recursion в JVM, а Clojure — ниасилил?
Кстати, присоединюсь к вопросу. Как я помню из упражнения 5.52 в SICP, хвостовая рекурсия не особо сложно реализуется, просто пара лишних мозговых трюков при компиляции вызова функции.
>>348747
>Не понял, о чём ты. Приведи пример?..
Короче, есть язык питон. Универсальный язык для людей. На котором имплементируются мощные вещи типа theano и tensorflow. И если присмотреться к нему, то у него важные куски типа парсера написаны на си.
А есть языки, при рассмотрении фич которых под микроскопом можно понять, что автор языка интересны языки и средства для написания языков. Он и язык свой рассматривает как штуку, на которой он напишет компилятор языка. И все фичи ориентированны на это. В итоге получается такой язык для написания DSL, на котором обыкновенные прикладные задачи писать неудобно.
>Я не могу всерьёз воспринимать язык без TCO, сорь. Про макросы вообще молчу, таких же макросов, как в лиспах, вроде больше ни в одном языке нет.
Запрет на хвостовую рекурсию спас язык от сотен гигабайт функциональной лапши. С макросами аналогично. Это прикольные фичи на поиграться, но потом эти игры кому-то поддерживать.
>Фортран математический
Ты его видел? То, что на нем много легаси-математики написано не делает его математическим языком, да и сам этот код от старости не стал лучше, типичный инженерный говнокод.
А питон далеко не прост, точнее его простота сложна с точки зрения проектирования. Просто спроектировать неортогональную поебень типа PHP или visual basic'а. Спроектировать питон сложно, даже он получился только с третьего раза и имеет шанс скатиться с уходом фюрера со сцены.
>Спроектировать питон сложно, даже он получился только с третьего раза и имеет шанс скатиться с уходом фюрера со сцены.
Вот-вот. Когда реализуешь а-ля SICP классы на Питоне, то понимаешь, насколько он охуенен.
https://wizardforcel.gitbooks.io/sicp-in-python/content/13.html
Вы все еще делаете аппликацию вместо композиции? Тогда вставайте к стенке!
>пикрелейтед
Анон, а ты не пробовал читать документацию к функциям, которые вызываешь? Ну чтоб не позориться тип. trampoline ожидает thunk с рекурсивным вызовом внутри, а ты написал какую-то хуйню, не имеющую никакого смысла. На этом, думаю, все разговоры о ГЛУБИННОЙ СУТИ языков с тобой можно закончить, ну сам как думаешь? Только честно. (trampoline (fn [x] (fn [] (x x))) (fn [x] (fn [] (x x)))) ну или (trampoline ((fn [x] (fn [] (x x))) (fn [x] (fn [] (x x))))), если хочется просто обернуть вызов как в оригинале
>>348775
Вторая ссылка в гугле: https://stackoverflow.com/questions/19462314/why-cant-tail-calls-be-optimized-in-jvm-based-lisps
>>348778
>На котором имплементируются мощные вещи типа theano и tensorflow.
Тензорфлоу по факту написан на крестах. Алсо, если уж сравнивать "мощные вещи", то на сабже написаны apache storm, onyx, riemann, neanderthal ну и собственно датомик. Что-то я сходу не назову проектов уровня датомик на питоне . Но в любом случае это довольно глупый и бессмысленный подход к сравнению языков.
В оригинале там и были комбинаторы, это уже скомпилированный результат, так сказать.
>Микросервисы и распределенные архитектуры подходят только для простых задач, мы тебя услышали.
Помню точно такие же аргументы 20-летней давности, только тогда это было про применение Лиспа для уберсложных систем заказа билетов и прочей хуиты типа систем символьной алгебры. По факту, это обычно какой-то фанатик в роли CTO пропихивает свои фетиши.
При чем тут лисп? Перечитай последние два поста в цепочке еще раз.
>Помню точно такие же аргументы 20-летней давности, только тогда это было про применение Лиспа для уберсложных систем заказа билетов и прочей хуиты типа систем символьной алгебры.
На Лиспе был написан (Полом Грэмом) первый генератор интернет магазинов Viaweb, типа нынешних Ecwid, InSales, и прочих. Это было в 90-х, когда динамических сайтов было по пальцам пересчитать. Потом его купил Yahoo, и благодаря этой продаже Пол Грэм стал миллионером.
Ну да, если иногда включать голову и читать документацию, то все вдруг начинает работать, кек. А если ничего из перечисленного не получается, то возможно и вправду будет "интерпретатор на жабке легче написать, чем на scheme". ¯\_(ツ)_/¯
>На Лиспе был написан (Полом Грэмом) первый генератор интернет магазинов Viaweb, типа нынешних Ecwid, InSales, и прочих
Типичное "какой-то фанатик в роли CTO пропихивает свои фетиши."
>Потом его купил Yahoo,
И все переписал
>и благодаря этой продаже Пол Грэм стал миллионером.
Во время доткомбума. В биткоины он не вложился случайно?
>пока весь этот пузырь символьных вычислений не крякнулся
Он не крякнулся, просто всякие медленные и неудобные Максимы))) были вытеснены лучшими инструментами.
Он крякнулся. Тогда это было примерно то же, что нейронки сейчас, панацея от всего.
А вольфрам.жпг молодец, единственный нормальный лисп в этом мире.
>Типичное "какой-то фанатик в роли CTO пропихивает свои фетиши."
Ты фанатик чепухи. Ты даже не можешь объяснить, что ты хочешь донести своими набросами. Ты как раз таки фанатик, только непонятно чего. А Грэм успешный программист и бизнесмен. Он создал множество успешных проектов. И коммерчески успешных и технически. Создал язык программирования. Написал несколько книг. Множество статей.
>>348878
>И все переписал
Это не имеет никакого значения. Когда Грэм вел проект, Лисп позволил им быть успешнее конкурентов. Они были первопроходцами в своем деле. И были такие же фанатики как и ты, которые хейтили их подход к разработке, к выбору инструментов. Но они не смотрели на таких, а просто делали дело.
>>348878
>Во время доткомбума.
Он с компаньеном продал рабочий продукт, который и после них работал, и если не ошибаюсь до сих пор существует под другим уже названием.
В общем я тебя понял. Ты обычный завистливый самодовольный хейтер. Сам ничего подобного не сделал. Завидуй молча.
Ну, начнем с того, что ты пиздоглазое мудило что я этот Clojure поставил на поиграться за 5 минут до того, в отличие от Scheme, на котором я компиляторы писал, например, а первые версии кложы я успел забыть уже ты тогда еще под стол пешком ходил, щенок ебаный. И ((lambda (x) (x x)) (lambda (x) (x x))) — первая вещь, которую я пробую на очередном убийце Лишпа, особенно если оно на JVM, потому что забавно читать неосиляторские отмазки, умея в байткод, например. Так что все с вашей кложей ясно, потому что поиграться гораздо комфортнее и правильнее будет с Chez Scheme, если хардкорно, или в DrRacket, если лениво. А норм проекты писать лучше на C++, жабке даже не Скале и Питончике, такие дела.
>А вольфрам.жпг молодец, единственный нормальный лисп в этом мире.
Эта... там же ядро с говнокодом на Си, не? А норм лисп это Maple же.
>Он создал множество успешных проектов. И коммерчески успешных и технически.
Это ты про Reddit. Ньюфаги не знают, но Реддит полностью провалился, как технический проект, потому что задумывался, как recommendation system для новостей, где каждый получает индивидуальную подборку под себя, а в результате получился более вылизанный Digg. И все потому, что гений Грэм выбрал для проекта дебилов-студентов, которые даже пароли хранили в открытом виде.
>Множество статей.
О да, графоман, прямо как Joel. И ценность статей аналогичная.
>Когда Грэм вел проект, Лисп позволил им быть успешнее конкурентов.
О, как. Объясняю малышне, как это работает на самом деле (тм). Новомодные языки, как та же кложа сейчас, позволяют набирать в сплоченную команду оче умных увлеченных программистов-рубистов (в основном свежевыпеченных студентов, но не только), которые к тому же никуда не уйдут потом, потому что ниша оче узкая. Именно это позволяет быть успешнее конкурентов, а не язык.
>Сам ничего подобного не сделал. Завидуй молча.
Лол, совсем недавно полсосача дрочили вприсядку на мои проекты. Впрочем, взгляни хотя бы на диаграмку своего гуры, щенок.
>совсем недавно полсосача дрочили вприсядку на мои проекты
Скажи мне, что это такой тонкий самоироничный троллинг, пожалуйста.
>О, как. Объясняю малышне, как это работает на самом деле (тм). Новомодные языки, как та же кложа сейчас, позволяют набирать в сплоченную команду оче умных увлеченных программистов-рубистов (в основном свежевыпеченных студентов, но не только), которые к тому же никуда не уйдут потом, потому что ниша оче узкая.
Ну предположим.
> Именно это позволяет быть успешнее конкурентов, а не язык.
> а не язык
А тут логическая ошибка, даже если "новомодные языки" привлекают умных программистов, то из этого не следует, что язык из-за своих свойств не увеличивает конкурентоспособность.
>Реддит полностью провалился
Пфф, пешы есчо, я записываю. Реддит обогнал фэйсбук по посещаемости в США, заняв 3-е место в США, и 6-е в мире по посещаемости.
https://tjournal.ru/flood/71525-issledovanie-reddit-obognal-facebook-i-voshel-v-troyku-samyh-populyarnyh-saytov-v-ssha
Посещаемость реддита сотни миллионов человек в месяц. Оценочная стоимость около 2-х миллиардов долларов.
Вообще то я имел ввиду Y Combinator, его создал Грэм. Но и в создании Reddit поучаствовал. Проинвестировал его, и направлял как ты говоришь "студентов" в нужное русло, чтобы они смогли выпустить рабочую версию продукта.
На этом ликбез закончен. Смотри не захлебнись желчью.
Дура, они писали на Common Lisp. При чем тут Clojure. И Clojure это Лисп, поэтому никак не может быть "новомодным". Лиспам уже больше 50-ти лет.
>я этот Clojure поставил на поиграться за 5 минут до того
Да все с тобой уже ясно, можешь не оправдываться. Впрочем, ты и сам наверняка понимаешь, как это со стороны выглядит.
Повторяйте за мной вслух и медленно.Республиканец. Штартапер. Из кремниевой. Долины.
Чувствуете божественную благодать?
Ну это только доказывает, что чувак шарит в жизни. Пойду Land of LISP читать, хотя раньше даже и не думал о лиспе!
Лулз, какой же ты тупой неудевительно, так как являешься адептом некроязыков.
Перечитай мой пост еще раз. Какая разница, кого там Реддит обогнал по посещаемости? Когда он создавался, и Грэм и фаундеры вопили о том, что он кардинально отличается от Дигга, но скачок в популярности состоялся лишь тогда, когда Дигг начал загибаться. Если бы Дигг не загнулся, о Реддите все уже давно забыли бы.
>Успех и не успех вовси, и милливоны долляров не миливоны)))
Анон раскрывает секреты успеха, спешите купить курсы.
Мимо другой анон.
>Если бы Дигг не загнулся, о Реддите все уже давно забыли бы.
Совковая логика. Нет никаких если. Ты не умеешь заглядывать в будущее, и знать что было бы если бы произошло "если". Как известно, если бы у бабушки был... Так что оставь свои манявры кому-нибудь другому. То что ты говоришь это детский лепет.
А если бы у бабушки тебя был хуй мозг, то она ты была бы дедушкой итт так не серил под себя, наверное.
Снова дура... Там написано, что успех был благодаря "новомодным языкам" наподобие Clojure. Дура, повторяю, они не писали на Clojure, и они не писали на "новомодном языке". Они писали на том, что школота называет "говном мамонта", "хуйней без задач", и тому подобными эпитетами. Как оказалось, такое говно позволяет писать проекты любой сложности в максимально сжатые сроки, и при этом иметь удобно поддерживаемый продукт, а не софт на выброс.
>Если ты такой умный, то где тваё бабло?
С таким подходом пиздуй в тред про пехопе, маня.
>>349128
Аналогично, речь о технологических преимуществах лишперов, а не о бабле.
Я хорошо помню развитие Реддита, долгое время это было обычное сектантское дрочерство на лишп/либертариантство/атеизм, с эпическими проебами, как когда у них увели базу данны с cleartext-паролями. Фаундеры там были истерички типа Скотта Ааронсона. С точки зрения технологии там нет ничего интересного вообще, они тупо скопипастили Дигг, а изначальную идею ниасилили.
>>349133
Лол, Грэм быстро начал пилить свой язык, и книжку про макросы он просто так написал.
>Как оказалось, такое говно позволяет писать проекты любой сложности в максимально сжатые сроки, и при этом иметь удобно поддерживаемый продукт
Лол, а ты это конечно пишешь с позиции опытного студента-иксперда, поддерживавшего проекты аж из трех файлов?
>>349137
>Я хорошо помню развитие Реддита
Опять обосрался. Речь была про Viaweb. Есть статья про него, называется "Lisp: побеждая посредственность".
http://www.nestor.minsk.by/sr/2003/07/30710.html
Этот проект сделал Грэма миллионером. Когда разрабатывали Reddit он уже был верчурным инвестором, а не стартапером или разрабом. В любом случае Reddit стал одним из успешнейших веб-проектов за всю историю.
>>349137
>Я хорошо помню развитие Реддита, долгое время это было обычное сектантское дрочерство на лишп/либертариантство/атеизм, с эпическими проебами, как когда у них увели базу данны с cleartext-паролями.
Что ты несешь дура. Тебе тогда еще сопли подтирали. Воспоминальщик хренов.
https://habr.com/ru/company/iticapital/blog/440540/
Шах и мат.
Ясно, студентик)))
А что обсуждать, кложу?
Кложа, это такое говно, чтобы опердени писать. Да, писать без омерзения, в отличии от жавки. Но только вот интересным языком она от этого не становится. Вот Common Lisp, в отличии от, интересный, поэтому и срёмся.
Если на форум нужны сервера за 300 лямов то извините но это пиздец.
>Common Lisp
>Clojure
Спор не об этом. А о том, что Лиспы крутые, и на них писали и пишут крутой софт.
ИЧСХ другим лисперам в лиспосрачах.
Если кто-то набрасывает, то почему бы не натыкать его носом. Я привел голые факты. От себя ничего не придумал. Нужно уметь доказывать свою точку зрения. Не просто говном кидаться, а делать это последовательно, стройно, методично. Этот навык очень полезен в жизни.
Раз ты у нас такой скимер, весь из себя, покажи какие-нибудь интересные примеры использования call/cc, только не генераторы и подобное.
>первая вещь, которую я пробую на очередном убийце Лишпа
Я не пони, а зачем ты эту вещь пробуешь? Во что по-твоему должна вычисляться омега?
Лекарство прими.
Если я правильно понял, то это синтаксис в форме Бэкуса - Наура (БНФ). Только и всего.
Есть, stalin Джеффри Сискинда. Заброшен в 2006, но до сих пор в бенчмарках по быстродействию не даёт за щёку только Chez, да и то только потому, что поддерживает только R4RS, и больше половины бенчмарков на нём тупо не запускаются.
Ну дык вон выше в треде анон поверх него корутины делал. Это ещё в TSPL было, как раз в главе про продолжения.
Откровения студентика с нулевым опытом в индустрии, обчитавшегося переводных сектантских статей, спешите видеть)))
Нет Chez лучше всех, там куча инноваций, которые долгое время были коммерчески закрыты. И вообще, лучшие реализации Scheme пришли из универа Индианы, это неспроста — тот же SISC, автор которого написал создал RabbitMQ для кложы, например. У меня лектор по построению компиляторов и по функциональщине тоже из Индианы был.
Элементарная проверка TCO, это ж азы.
>Это что такое? Опиши ее, пожалуйста.
Ты не знаешь что такое семантика? В двух словах я бы называл семантику Лиспа как Лямбда-исчисление в виде S-выражений.
С чего это вдруг? БНФ как я понял использовалась в ранних версиях Лиспа. Сейчас повсеместно прижился другой синтаксис. Но семантика осталась прежней.
>а анон, ты слился уже, причем в двух разных дискуссиях
Ты хочешь сказать, что этот ИТТ тхреад не состоит из семенов студентоты без опыта чуть менее, чем полностью? Аргументы-то про кложу для риал-ворлд, это примерно как Генту в дата центрах.
Ну с того, что он не имеет практически ничего общего с лямбда-исчислением. Да и вообще, утверждение вида "семантика х - это y в виде s-expr'ов", ну оно некорректное, потому что секспры - это же синтаксис, а не семантика.
Кстати, в ранних версиях Лиспа (именно Лиспа, не семейства, а конкретного языка от Маккарти) вроде использовались f-expr'ы, но я уже не помню деталей.
По-моему все-таки лиспы - это про синтаксис и некоторые вытекающие из этого особенности. Есть си-подобные языки, есть лиспообразные. В лиспах мы читаем поток символов и получаем структуру данных, которую можем потом ворочать макросами. В си-подобных мы ебемся в фигурные скобки. Плюс еще репл, но это неспецифично для лиспов, репл в форте и смолтоке тоже есть. Ну и еще важно не путать лиспы как семейство и Лисп как язык, который построил Джек придумал Джон.
>>350105
Я не знаю, из кого там что состоит, я не телепат. Я просто читаю тред и вижу то, о чем я написал в прошлом посте. Вот и сейчас ты продолжаешь то же самое (по-моему совершенно зря, но дело хозяйское).
>секспры - это же синтаксис, а не семантика
S-выражения это прежде всего структура данных. Может записываться по разному. В БНФ синтаксисе или по другому.
>>350126
>не имеет практически ничего общего с лямбда-исчислением
Как это не имеет. Лисп основан на математических моделях таких как теория рекурсивных функций, Лямбда-исчисление, Комбинаторная логика. Все это почти что одно и тоже.
>>350126
>Есть си-подобные языки, есть лиспообразные. В лиспах мы читаем поток символов и получаем структуру данных, которую можем потом ворочать макросами. В си-подобных мы ебемся в фигурные скобки.
Ты говоришь о синтаксисе, а не о семантике. JS хоть и имеет Си-подобный синтаксис, но также имеет в основе Лямбда-исчисление, которое не про синтаксис. Его легко можно использовать как язык подобный Лямбда-исчислению, так как в нем есть функции первого класса и высшего порядка. В ES6 синтаксис функций сделали еще более приближенным к синтаксису ЛИ.
Посмотри как выглядят выражения в синтаксисе Лямбда-исчисления и в синтаксисе JS. Это почти одно и тоже.
https://www.youtube.com/watch?v=3VQ382QG-y4
>S-выражения это прежде всего структура данных.
Ну вот википедия: In computing, s-expressions, sexprs or sexps (for "symbolic expression") are a notation for nested list (tree-structured) data - википедиоры опять все перепутали? Вот сам маккарти: http://www-formal.stanford.edu/jmc/recursive/node3.html
>В БНФ синтаксисе или по другому.
Блядь, какой еще бнф синтаксис вообще? БНФ - система записи кс-грамматики, при чем они тут?
>Как это не имеет.
Ну открой PCL или ansi cl и почитай.
>JS хоть и имеет Си-подобный синтаксис, но также имеет в основе Лямбда-исчисление
Блядь, жс имеет в основе императивную динамикодрисню, на которую сбоку прилепили лямбды. Ты уже совсем хуйню какую-то пишешь. Х-ль имеет в основе лямду (не простую, а систем ф), а жс и кл имеют к ней такое же отношение, как и с++. Иди смотри https://en.wikipedia.org/wiki/Lambda_cube
>Его легко можно использовать как язык подобный Лямбда-исчислению
С++ тоже можно, давай теперь говорить, что лямбда является формальной моделью крестов. Ну хуйня короче, разговор ни о чем.
Ну ладно тебе, дядь, вон на реддите тоже срутся: https://www.reddit.com/r/Clojure/comments/ari2vd/insideclojure_journal_20197_jdk_regression_spec/
nuuu tuuupye
>жс имеет в основе императивную динамикодрисню
JS испытал влияние Scheme. Функции в JS объекты первого класса, в отличие от Java например.
Нахуй он нужен?
Чтобы пилить динамические фулстак опердени в основном.
Только что узнал, что klipse оказывается на сабже написан:
https://github.com/viebel/klipse
И его автор еще пилит книжку по кложе для вкатывальщиков (никогда бы не подумал, что так можно было):
https://www.manning.com/books/get-programming-with-clojure?a_aid=viebel&a_bid=399d9d64
И вообще у него довольно интересный блог, есть вот очень понятное введение в re-frame (и все эти ваши редуксы\рефлуксы\эльм-архитектуры в целом):
https://blog.klipse.tech//clojure/2019/02/17/reframe-tutorial.html
У Reason есть поддержка крупного вендора. У ClojureScript такого нет. Экосистема CljS сильно размазана по полотну, нет целостности, так как нет вендора и соответственно вектора развития.
Что не так?
>У Reason есть поддержка крупного вендора.
Ризон - это просто нескучный синтаксис для окамла. Окамлом плотно занимается джейнстрит, хз насколько он крупный по сравнению с когнитектом.
>Экосистема CljS сильно размазана по полотну, нет целостности
Ты какую-то хуйню несешь, если честно, нафига спорить, если не шаришь в теме. Ты пришел по делу спросить или тупо срач устроить? Если тебе нужно прямо сейчас сесть и фигачить приложения в продакшн, то клжс для этого отлично подходит (и сравнивать его надо с жс и тайпскриптом, а не с ризоном), ибо есть относительно зрелая инфраструктура. Если тебе просто поиграться с функциональным языком, который может в компиляцию в жс, то я бы на твоем месте вообще взял чистый окамл, без надстройки от фб. С другой стороны, ризон удобнее в плане того, что любая жс-макака может одной командой его установить, это хорошо. С другой другой стороны, с окамлом у тебя есть опам и все, а с ризоном у тебя сразу же вагон билдтулов, половина из которых из жс, а половина в пермаментной альфе. Ну тут хуй знает, шило на мыло, но я бы все равно склонялся в сторону чистого окамла.
https://reasonml.github.io/en/users-of-reason
https://clojurescript.org/community/companies
>Ризон - это просто нескучный синтаксис для окамла.
На выходе JS как в случае с CljS.
>>351546
>Окамлом плотно занимается джейнстрит
Facebook вообще то.
>>351546
>ибо есть относительно зрелая инфраструктура
Вот с этим я и не согласен. Тулинг хреновый. Все размазано. Компилятором пользоваться неудобно. Поэтому запилили несколько разных оберток тоже не очень хорошего качества. Сами создателя языка тупо забили на тулинг. Для Clojure даже нет нативных пакетов под линукс.
Несколько оберток для реакта, непонятно зачем столько. Походу они все хреновые, раз постоянно появляются новые. Давно слежу за Clojure & ClojureScript, и вижу что за все время экосистема не стала лучше. Она загнивает. Экосистема Окамла (не Reason) намного превосходит. Все четко, все автоматизировано. В Clojure весь тулинг через зад сделан.
Все равно тулинг в OCaml/Reason четче. Все отточено и вылизано. В Clojure/ClojureScript тупо колхоз.
По финансовым и dev ресурсам один фэйсбук перевесит всех кто пользуется Clojurescript.
Если язык(два) с одним единственным инструментом по сути(ляйн) для тебя это >Все размазано
, то что для тебя туллинг в чисто js, где webpack, bable, npm, bower и еще 2 или 3 тулзы, это дэфолт, обязательный для каждого хелло-ворлда?
>Несколько оберток для реакта, непонятно зачем столько
Потому что библиотеки пилет комьюнити? Я могу еще одну обертку написать, или даже две, сам язые от этого станет хуже? Опять таки, в самом js сотни и тысячи фреймворков, это минус что ли?
Сайт Reason переведен на русский. Это подтверждает, что проект поддерживает крупный вендор, который заботится о пользователях. Не забивает болт на разработку. В противоположность этому, экосистема Clojure похожа на российскую деревню в глубинке. Уныние и разруха. Никто не хочет ничем заниматься и ничего менять.
>ляйн
Еще есть deps cli, который почему то появился только в прошлом году! через 12 лет после появления языка! Это говорит о том, что разработчикам похер на все. Они сидят в своем болоте, и думают что всем комфортно сидеть вместе с ними. Вся экосистема Clojure протухла. Хотя нет, она изначально была такой.
>>351578
>где webpack, bable, npm, bower и еще 2 или 3 тулзы, это дэфолт
Все это юзать не обязательно. Если нет задачи использовать ES8/9/10, то babel можно уже не юзать. NPM нормально решает свои задачи, и это нативный инструмент, а lein левая штука. В JS экосистема отточена. Это раньше было все плохо. Сейчас есть все что нужно, и все работает так как нужно.
>>351578
>Потому что библиотеки пилет комьюнити? Я могу еще одну обертку написать, или даже две, сам язые от этого станет хуже? Опять таки, в самом js сотни и тысячи фреймворков, это минус что ли?
Когда там ring обновляли? Последний релиз 28 октября прошлого года. В сообществе Clojure нет вектора развития. Поэтому я говорю что все размазано. Все либы пишутся непонятно кем и непонятно как.
>Опять таки, в самом js сотни и тысячи фреймворков, это минус что ли?
Не сотни и не тысячи. Для фронта и бэка по несколько штук. Но все они имеют четкий вектор развития, свою философию, поддержку, выполняют свою определенную задачу. В Clojure и близко нет библиотеки с такой же поддержкой. Половина либ тупо не документирована.
>то раньше было все плохо. Сейчас есть все что нужно, и все работает так как нужно.
Стало быть, это от хорошей жизни появлются всякие ризоны и слжсы, по 3 новых либы и фремворку каждый день, те самые >ES8/9/10, typescript и еще, еще, еще...
Да кложа сырая, юзай ризон, в чем проблема? В любом случае, любое говно лучше чем js, переход на что то другое, это путь в одну сторону, обратно уже не возвращаются.
JS очень приятный язык, с отличной экосистемой. Мне просто хочется чего то нового. Мне нравятся лиспы, но блин, в Clojure реально хреново с экосистемой. Сам язык хорош, но на все остальное забили болт. Печально.
>JS очень приятный язык, с отличной экосистемой
Начли следующий пост с буквы ж, если тебя держат в плену и тебе нужна помощь
>На выходе JS как в случае с CljS.
Блядь, ты даже ридми у него не осилил прочитать, ну анон. На выходе жс у окамла (баклскрипт). Ризон - это просто нескучный синтаксис для него. Иди ртфм.
>Facebook вообще то.
Джейнстрит, см. выше. Гугли, читай.
>Все размазано.
Что это значит? Я не понимаю, что такое "размазано", у тебя какая-то своя, особая уличная терминология, лол.
>Компилятором пользоваться неудобно. Поэтому запилили несколько разных оберток
Это примерно как говорить "v8 пользоваться неудобно, поэтому запилили npm", что-то из этой же серии. Ты по-моему путаешь компиляторы с системами сборки\пакадж менеджерами.
>Для Clojure даже нет нативных пакетов под линукс.
Эм, так она как бы на жвм работает, какие еще "нативные пакеты"?
>Несколько оберток для реакта, непонятно зачем столько.
А зачем столько фреймворков для жаваскрипта?))0) Ну анон, смешно же такие вопросы задавать. В клжс их, кстати, всего 3 штуки.
>Экосистема Окамла (не Reason) намного превосходит. Все четко, все автоматизировано. В Clojure весь тулинг через зад сделан.
Ну анон, учитывая, что ты путаешь ризон и окамл, и не можешь привести ни одной конкретной проблемы (кроме "все размазано", лол), возникает ощущение, что ты ни с тем ни с другим не работал и просто пришел сюда троллить, уж извини за прямоту.
>>351575
Колзох и все размазано, ага))0)
Ну так отличие в том, что фейсбуку положить хуй на ризон, у них просто была отдельная команда, которая занималась разработкой их компилятора для пхп (на котором написан фб), они работали на окамле и они же потом запилили ризон. Сам фейсбук использует жс, а это - сайд-проект отдельной команды. Так вот, отличие в том, что фейсбук может завтра взять и прекратить им заниматься (как например гугл взял и выкинул первый дарт, ну и десятки пользовательских сервисов), потому что он им не приносит никакого дохода, их бизнес на него никак не завязан. А тот же когнитект не может выбросить кложу, потому что у них все продукты на ней написаны, весь бизнес в итоге на нее завязан, и они полюбому будут вкладывать в нее деньги, пока все не помрут от старости.
Ну и насчет финансовых ресурсов, я еще раз говорю, посмотри на две странички по ссылкам. На первой - секси дизайн, красивые логотипы, хороший продажный текст, ну сразу видны финансовые ресурсы корочи, и 10 компаний. На второй - просто на отъебись одним чуваком выложен список в плейнтексте, и 100 компаний, в десять раз больше. В этом и отличие. Я же говорю, тут смотря что тебе надо: либо шашечки, либо ехать.
>Еще есть deps cli, который почему то появился только в прошлом году! через 12 лет после появления языка!
И в чем проблема? Ты уже определись: то тебе не нравится, что появился deps cli, то тебе не нравится, что он не появился на 12 лет раньше. А в джаве, питоне и жс до сих пор нет аналога deps cli, атата, какой кошмар, все размазано! В чем конкретно у тебя проблема-то, ты можешь сформулировать?
>Все это юзать не обязательно.
Ну если тебе нужно анимацию на жквери к форме прикрутить, тогда необязательно, да))0)
>NPM нормально решает свои задачи, и это нативный инструмент, а lein левая штука.
Шта? lein на кложе написан, что значит "левая штука"?
>Когда там ring обновляли? Последний релиз 28 октября прошлого года.
Блядь, ну это просто форменный жаваскрипт головного мозга. Если библиотеку не обновляли больше двух часов, значит она уже устарела и надо переходить на что-то более трендовое, ага. Слышали, знаем.
>>351585
>Но все они имеют четкий вектор развития, свою философию, поддержку, выполняют свою определенную задачу.
Ну так и с клжс фреймворками все то же самое. Есть дефолтный выбор (ре-фрейм), есть легковесный (ром), есть хитровыебанно-навороченный (ом). В чем у тебя проблема-то?
>>351593
>Мне нравятся лиспы
Ну потыкай ракетку, например, но по-моему ты просто (повторяюсь) либо троллишь, либо специально ищешь какие-то надуманные отговорки.
Хуета ваш Clojure. Колхоз ебучий. Языку хрен знает сколько лет, а они до сих пор не знают его правильно устанавливать. Мне неохота вот щас дрочиться отвечать на каждое предложение, а хочется, потому что в каждом у тебя написана хуета тупая.
Как бы мне не нравились лиспы, но вынужден признать, что даже экосистема racket намного круче чем в clojure. Clojure это вроде C++ в 90-е начало 2000-х, где не было ничего, ни пакетного менеджера, нихую. Хули тебе объяснять что то если ты ничего не видел, только кукарекаешь. Посмотри на экосистему эликсира, руби, или окамла, и сравни.
>Колхоз ебучий
Еще все размазано, да))0)
>Мне неохота вот щас дрочиться отвечать на каждое предложение
Просто ты пытаешься в жирнющий троллинг, а на факты тебе ответить нечего.
>Clojure это вроде C++ в 90-е начало 2000-х, где не было ничего, ни пакетного менеджера, нихую
Только тут есть пакетный менеджер и все остальное, а так да))00)0
>Посмотри на экосистему эликсира, руби, или окамла, и сравни.
Посмотрел. В окамле ад и пиздец по сравнению с сабжем, в эликсире до сих пор все в вечной альфе и релизы периодически поломанные, руби и эликсира нет на клиенте. А так спору нет, если для тебя главный критерий - это наличие документации на русском, лол, то руби для тебя единственный верный выбор а лучше жс а лучше 1с
tl;dr: иди троллить в другое место
Потому что нахуя писать типы, если можно не писать? Оверхеда и шума много, а профита хуй да нихуя.
Плюс вот ты затипизировал свою бизнес-логику, а когда полезешь склеивать все с другими либами - их-то авторы клали на них хуй, никому это не надо. В итоге получается, что тайпчекается у тебя та часть кода, которая в идеале и так полностью чистая, прозрачная, тестируемая, ну и от типов там никакого толку.
Алсо, для тех, кому хочется странного, есть https://github.com/arohner/spectrum
Ну и тащем-то
~> cljs
ClojureScript 1.10.516
cljs.user=> (defn foo [x] (if (string? x) (+ x 1)))
WARNING: cljs.core/+, all arguments must be numbers, got [string number] instead at line 1 <cljs repl>
#'cljs.user/foo
например
Бля, мне кажется, или nth должен принимать последовательность последним аргументом, а не первым? Для векторов же есть get
Лол, а кложурята забавные.
В CL вон, всё норм:
* (nth 2 '(1 2 3 4 5 6))
3
А в кложе можно вообще так:
user=> ([1 2 3 4 5] 0)
1
Не совсем понял, при чем тут CL - там же нет разделения на конкретные коллекции и последовательности, ну и соответственно соглашения что первые идут первым аргументом, а вторые (если их одна штука в сигнатуре) - последним.
>user=> ([1 2 3 4 5] 0)
Это да, но обычно позиционность имеет смысл в контексте трединг-макросов. Я вот как раз на автомате написал (->> чотатам (map хуяк) (iterate хуяк-хуяк) (nth эн)) - и тут понял, что ошибся.
Не, можно конечно скипнуть и взять голову, но блин... к тому же get работает для всего, где nth имеет смысл, для всяких там строк тоже.
> ну и соответственно соглашения что первые идут первым аргументом, а вторые (если их одна штука в сигнатуре) - последним.
В Кложе есть такое соглашение? Не знал.
>Это да, но обычно позиционность имеет смысл в контексте трединг-макросов. Я вот как раз на автомате написал (->> чотатам (map хуяк) (iterate хуяк-хуяк) (nth эн)) - и тут понял, что ошибся.
На самом деле, меня лично этот синтаксис (ну, реализация IFn (?) для коллекций и прочего, не суть важно) - раздражает, пропадает лисповая интуиция, что головная форма - это функция, инородно выглядит вообщем.
>Не знал.
Век живи - век учись! ^_^
Меня как раз поэтому и смущает nth, потому что вроде бы логически он в первую очередь нужен именно для последовательностей.
>интуиция, что головная форма - это функция
Так ведь она и есть функция, даже чисто с математической точки зрения. Я считаю, что особо усердствовать не надо конечно, иногда читабельней написать с get, а иногда - без него. Ну и всякие штуки типа (map {:from :to} coll) и (some #{:find-this} coll) довольно удобны и естественны.
Плюс есть еще довольно тонкие семантические нюансы, типа если пишешь (:k m), то подразумевается, что m - это не просто рандомная мапа, а какой-то бизнес-энтити, а если (m :k) - то просто мапа, в которой так уж получилось, что ключи - это кейворды. Ну типа а могло бы быть и (m "k") или (m 42). Но по-моему на практике эта грань зачастую слишком тонка, чтобы на нее не забить.
clojure - это игрушка для бездельников-студентиков.
ну или пидорасов, которые кроме трёпа на конференциях для тех же студентиков нихуя ничем не занимаются
работы нет
даже если вакансия есть, то по бабкам столько же сколько в жаве
максимум зачем нужна кложа - это потратить хуеву тучу времени (а оно в таком количестве есть только у школьников-студентов) и отрастить чсв. всё, больше ни для чего не годится
это никакой не троллинг, если чё. реально так думаю
Ок, Волмарт - бездельники-студенты. Я тебя услышал.
>потратить хуеву тучу времени
А ты, видимо, не очень умный. На что тут кучу времени тратить? Это не хаскель.
>это никакой не троллинг, если чё. реально так думаю
Сочувствую. Хотя чего еще ожидать от мелкобуквенного.
> clojure - это игрушка для бездельников-студентиков.
> ну или пидорасов, которые кроме трёпа на конференциях для тех > же студентиков нихуя ничем не занимаются
> работы нет
> даже если вакансия есть, то по бабкам столько же сколько в жаве
> это никакой не троллинг, если чё. реально так думаю
Продолжай так думать, тратя весь рабочий день на еблю с рейсами, дедлоками и обезумевшим стейтом. А я пока напишу очередной ETL или event stream за пару часов, запакую в контейнер и пойду заниматься своими делами, ночью отдам его заказчику, а утром письма о пополнение счета на 200$ и слова благодарности за то, что встало без проблем и работает, как надо.
извини, забыл, что shared mutable state - обязательное условие написания кода на жаве
>слова благодарности за то, что встало без проблем и работает, как надо
а слова "благодарности" от человека, которому твоё поделие достанется не хочешь выслушать? ты понимаешь, что он тебя будет проклинать за то, что ты решил выебнуться вместо того, чтобы выбрать инструмент, который знает каждый?
>ночью отдам его заказчику, а утром письма о пополнение счета на 200$
так ты фрилансер что ли? лол, так ты ничего серьёзного и не писал считай. говорю же - поделка для студентиков
естественно, что хеллоуворлды можно и на кложе написать, чтобы своё чсв потешить
>>355191
>поделка для студентиков
>хеллоуворлды
https://twitter.com/hlship/status/631935954039652352
>So, I'm using @CursiveClojure on a project with 66 modules, 3068 files totalling 561292 lines on my 2010 MacBook Pro.
Иди уже трусы стирай, у тебя манямирок из них вытекает.
Что ты хотел сказать, когда разместил ссылку на твит какого-то хуя с галеры?
Как его слова про то, что он запускает проект на макбуке 2010 года, опровергают мой главный тезис о том, что изучение кложи является нерациональной тратой времени?
Мимо-другой-анон
Должен заметить, что у тебя суждения просто пиздец. Стань гей шлюхой, нахуя вообще что то учить, если можно больше зарабатывать посасывая хуец 10 минут в день?
>howard lewis ship
>какого-то хуя с галеры
Ясно. Иди дальше лендинги верстать, мальчик, тут джавагоспода разговаривают.
Ну ты кроме как пука ничё не сказал. Ты апеллируешь к авторитету (по твоему мнению), который сказал, что он запускает кложепроект на макбуке 2010 года в ответ на мой аргумент, что кложа не стоит времени, которое нужно потратить. Всё блять. У тебя очень большие проблемы с логикой, как ты вообще программистом стал?
Так а мне тоже ответь, нахуя тратить время на программирование, если за 10 минут сосания хуйца в день можно зарабатывать больше и учиться не нужно?
>на кложе никто ничего не пишет, только студенты хелловорлды делают
>даешь ссылку на увожаемого господина с коммерческим проектом на 600k+ строк
>бля ну чо ты, ну я не это имел в виду, ну чо ты а?
>даешь ссылку на увожаемого господина с коммерческим проектом на 600k+ строк
из которых 599к - это юнит тесты!
at first I was like:
>clojure - это игрушка для бездельников-студентиков.
>говорю же - поделка для студентиков
but then I was more like:
>бля ну чо ты, ну я не это имел в виду, ну чо ты а?
Кек. Как что-то плохое.У типоблядков вон тоже факториал в одну строчку, тип на полэкрана, так что это норма (с)(тм).
Бля, пацаны, объясните, как так-то:
http://www.zetawar.com
Ну охуенная игра, спору нет, сейчас открыл и на джва часа завис. Но контента нет, прошел две карты и в принципе все.
https://www.kickstarter.com/projects/djwhitt/zetawar
>104 backers pledged $15,400 to help bring this project to life.
15 ШТУК БАКСОВ бля. Ну игра охуенная, ок, на полчасика погонять, но 15 штук? С какого хуя? Я вообще нихуя не понимаю этот ваш рыночек, буржуи там совсем ебнулись короче в своей загнивающей. небомбит.пнг
Можно сырцы посмотреть: https://github.com/Zetawar/zetawar
shared mutable state тем не менее очень важен в задач, где требуется перфоманс, иммутабл дрисня реально только для лаб годится и всякой некритичной бизнес-логики. Вычисления, IO, алгоритмы - настоящий праздник отсоса любителей имутабельных структур.
Тащем-то любителям иммутабельных структур итт никто не мешает использовать shared mutable state. Это ж кложа, а не хаскель хотя и в хаскеле можно, если очень хочется
другой
...тем временем простые сибирские пацаны честно зарабатывают свои пятьсот баксов в месяц на попенсорсе: https://www.patreon.com/tonsky
Ну и где справедливость, блядь, а? Куда смотрит профсоюз?
Хотя этот тоже буржуин зажравшийся, максимальный гоал у него стоит на 6 тысяч баксов в месяц за петпроджекты на жидхабе. Сука, он там черную икру вилкой собрался есть в своей сибири?! Вот уж верно говорят, что каждый пролетарий - это просто буржуа, испытывающий временные трудности.
>13 лет опыта
>40к/мес
Тут лохуня на жабе копипастит популюс и имеет в два раза больше.
https://www.patreon.com/thinmatrix
Он в Москве живет и у него депрессия после того как он работал за 5к бакинских в месяц на одну уважаемую контору за рубежом.
Ну а выше вон вообще пацан запилил игру уровня /gd и поимел с этого 15к. Я ж и говорю - никакой справедливости.
Алсо,
>40к/мес
Ты жопой читаешь?
>Two full days per month dedicated to open source
40к он получает за два дня работы.
>Он в Москве живет и у него депрессия
Как, опять? А я после последнего блогопоста думал, что он женился, всекакулюдей, все дела.
>>358840
Вот эта https://github.com/ruedigergad/cli4clj хуйня вроде работает с граалем, так что типа можно, но каждую либу надо проверять
А Patreon разве не зачисляет средства только в конце месяца?
Не совсем понял, а нахер тебе граалем компилировать веб-апп? Для веб-аппа он подходит, если у тебя например код на жс и на джаве (и на сабже), и тебе хочется из одного дергать методы другого. Ну и если вебстак тянуть, то бинарники жирные и будут. Зип-архив с джарниками джетти весит 20 мб, вот и считай.
Ну и я же написал:
>каждую либу надо проверять
Во-первых далеко не вся джава пока еще работает с граалем, во-вторых (это уже специфично для кложелиб) не должно быть рефлекшн варнингов.
Если тебе просто надо легкие микросервисы и всю хуйню, то просто бери кложескрипт+ноду. Грааль (как я его вижу) это в первую очередь херовина для того, чтобы оракл мог написать на джаве свой жс-движок и скомпилировать его в нативный код. Во-вторую очередь для того, чтобы можно было делать интероп между практически всеми существующими языками, и в третью - для небольших консольных утилит (размер все равно будет 10+ мегабайт).
Лично я жду, когда они запилят поддержку lwjgl и можно будет рисовать графику из нативных экзешников:
https://github.com/oracle/graal/issues/304
И US Army тоже на кложе ебашит, студентов берут:
https://www.reddit.com/r/Clojure/comments/axgz98/internships_for_clojure_programmers/
https://www.usajobs.gov/GetJob/ViewDetails/524774400
Боже, благослови Америку!
>4. Скорость разработки.
5. Главная фича языка - интерактивная разработка, горячая компиляция (hot reloading) и выполнение кода прямо внутри работающего приложения (в том числе задеплоенного в продакшн, можно подключиться своей ide к серверу и залить хотфикс, включить дебаггер или просто проверить текущее состояние процесса). Вся инфраструктура под это заточено, в комьюнити много инструментов, упрощающих написание reloadable кода. Пожалуй, это главный selling point. Алсо, можно хуяк-хуяк и в продакшн.
Тут нужно балл снять, потому что сейчас хуже чем в CL.
Ну у CL по этому параметру вообще 9000/10.
>>362097
https://pragprog.com/book/shcloj3/programming-clojure-third-edition
Ну или https://www.braveclojure.com/clojure-for-the-brave-and-true/ если шекелей жалко
Хотя в принципе если общелисп трогал и коаны проходил, то можешь просто порешать http://www.4clojure.com/problems и почитать доки: https://clojure.org/guides/getting_started + https://clojure.org/reference/reader
(по библиотекам шапку глянь)
https://www.youtube.com/watch?v=5n70q7FFZkY&list=PLdSfLyn35ej-n-SnvLkoTwdxhJWnfQ1QN
привет
Кекнул с вашего языка.
Кто вообще на нем пишет? Полторы калеки? Сомнительный график, даже если ему верить то котлин спустя год подобрался, а через год и вовсе обгонит вашего товарища.
Что за пиздец а не язык.
Ты доской ошибся, нахуй - это в /b/.
Неплохой тейк для мамкиных бизнесменов: https://medium.com/magnetcoop/so-whats-the-point-of-clojure-a-business-approach-1f16ea1f03c6
Кложа на го хипстерметер over 9000:
https://joker-lang.org
Кто-нибудь пользуется этой ебалой как линтером?
да, спрашивай
> лисповая интуиция, что головная форма - это функция
ну может с вектором это странно, зато map IFn это ванлав. потому что это же самый канон определения функции - отношение аргумента и результата. map это реально самая чистая и явная fn.
> смущает nth
мнемоническое правило - если fn работает с коллекцией как перебираемым множеством (map/filter/take/drop) и соответственно подходит как к vector, так и к lazy-seq & list то коллекция идет в конце и все это хорошо пишется с ->>
а если fn эксплуатирует вектор как структуру (единое) leveraging it's structure, то как и всякие fn подобные методам из ооп - главный объект будет первым аргументом, как в nth. по идее nth - fn именно для вектора.
однако у тебя там не вектор, а seq, но тут другая история:
1) то, что nth вообще работает с list/seq было признано старой ошибкой https://gist.github.com/reborg/dc8b0c96c397a56668905e2767fd697f#why-cannot-last-be-fast-on-vector (grep nth there)
2) т.к. у тебя там уже seq на входе, то это nth ничем не лучше чем (->> ... (take n) first)
вот я читаю это и плачу, потому что я уже лет 5 работаю с кожурой (и по фану и по работе), но ни вокруг себя в application-коде, ни в коде прикладных библиотек не видел использования чего-то кроме atom или (редко agent для запустил-и-забыл).
ref видел 1 (один) раз где-то внутри clojure.test для аггрегации результатов и репортинга, но и чувство, что это там костыль и можно было обойтись прямой передачей в агрументах и reduce-ом итд.
короче аноны, не шарьте это вражескому лагерю, а просто тыкните носом в гитхаб, где оно юзается
Мне это тоже кажется в чем-то даже забавным, что в реальном коде в 2k!9 на самом деле очень редко приходится иметь дело с обильной многопоточностью, когда важен write-параллелизм. Ну может еще лет через 10 наконец вырастет количество ядер и ситуация изменится, лол, но что-то я в этом не уверен.
русские в кложурь:
https://grishaev.me/clj-book-web-1
Оказывается есть такая штука, каталог проджект темплейтов (добавил в закладки):
https://clj-templates.com
Как написать квайн на сабже:
https://functional.works-hub.com/learn/an-interactive-quine-in-clojure-2c588
Эстонцы запустили фриланс-биржу специально для фп-блядков, если кто хочет попробовать найти одноразовую работу на кложе\элике\расте\прочих прикольных штука - регайтесь:
https://newlambda.com/blog
https://github.com/mtgred/netrunner
https://codepunk.io/codepunk-038-android-netrunner-jinteki-and-clojure/
то чувство, когда узнаешь о годной киберпанковой карточной игре через девелоперский реддит
да ну ладно, есть же вакансии. Другое дело, что я вот в русскоязычный чатик вкатился, они там каждый день обсуждают реакт компоненты, цсс, вебпаки и прочую жс дрысню.
> Другое дело, что я вот в русскоязычный чатик вкатился, они там каждый день обсуждают реакт компоненты, цсс, вебпаки и прочую жс дрысню.
Кстати, два чаю этому. Родина дала им современный лисп - пиши! Пиши метагенераторы абстрактных оперденей! Не хочу, хочу жс-говно жрать! Что такое? Это программисты?! Суки... Мудачьё - кложуристы. Вебпаком обмазались и на реакте говно жрут - пидоры, блядь, ёбаные...
не обессудьте, что один чатик на всех, вот на прошлой неделе целый день срались за парсергенераторы
Даже канал отдельный про клжс есть, там и говорят. А о чем еще там говорить-то, на канале про клжс?
https://functional.works-hub.com/jobs/1502?utm_source=reddit&utm_medium=jobwefarm&utm_campaign=m.samuel - у меня одного не открывается? РКН блокирует сайты с вакансиями в Лондоне, чтобы пидоры никуда не уехали, кек?
Кек. Ну у них так принято, хуль. Я вообще проигрываю, когда вижу вакансии на уберсиньоров $300k в секунду, и при этом половина текста вакансии про то, какие у них там парки хорошие и речки красивые, лол.
Кложуристам отвалили 5 миллионов баксов на какую-то йобадинамическую уберопердень:
https://medium.com/red-planet-labs/introducing-red-planet-labs-2a0304a67312
Это кстати тот же чувак, что написал apache storm и https://github.com/nathanmarz/specter
Нет, не он. Просто он тоже любит отваливать миллионы баксов и лисп, я же говорю.
>Я думал он кложу не сильно любит.
Почему? Я как-то не в курсе. У него вроде был свой (довольно маргинальный емнип) язык, но он не взлетел.
Ну он точно в проде же пользовал clisp, вот и подумал что он по нему угорает.
640x360, 1:54
https://www.youtube.com/watch?v=wXE3L8EU5U4
лампово выглядит. Но если копнуть глубже, то бессмысленная хуйня.
В чем прикол? Это не имеет отношения к кложе вообще. Человек это не быстро сделал, потратил время на нахождение конкретной библиотеки (а скорее и сравнения), более менее в голове отложил API, подключил на экран трехмерный вывод, ну и естественно изучил формулы для построения данной опердени. От кложи тут только репл. Так же бы получилось в любом интерпретируемом языке
Всем, кто кукарекает про "фп жи медленно ойойой иммутабельность тормозить будет", посвящается:
https://medium.freecodecamp.org/a-realworld-comparison-of-front-end-frameworks-with-benchmarks-2019-update-4be0d3c78075
Ангуляр сосет абсолютно по всем фронтам кто бы сомневался, ре-фрейм на первом месте по краткости и выразительности и в лидерах по производительности, эльм вон вообще по скорости на втором месте.
И еще раз, медленно: ре-фрейм быстрее, чем реакт+редукс. Иными словами, в 2k20 жс уже ненужен. Оправдывайтесь, макаки.
Пугает состояние Clojure на отечественном рынке. На HH всего 25 вакансий и то там какая-то мешанина из Go/Ruby и Data Science позиций. На Scala уже получше - порядка 540 вакансий и практически все подразумевают бэкэнд разработку.
Неужели все так плохо и работу на кложуре можно найти только на удаленке?
как же кложуристы живут без hibernate и spring framework?
о какой серьезной разработке может идти речь без этих чудесный фреймворков?
ты чё, бот? речь про преимущества божественных удалёнщиков над жалким офисобыдлом, а не про бирюльки из жабы
Вот когда ответите почему на легко-сопровождаемом (по вашим словам) языке мало кто пишет, тогда и можно начинать беседу с "за и против". А пока это выглядит как тупой маркетинг, уж простите.
Не думаю что будет ответ, но хотя бы проветрил от приторного запаха маркетинга
(Автор этого поста был забанен. Помянем.)
>http://circleci.com - Continuous Integration and Delivery. Бэкенд и фронтенд на clojure+clojurescript.
Как подобные проекты в принципе остаются на плаву? Всякие CircleCi и TravisCi, со своими конскими ценниками в 20-70 бакинских. Это же сюр какой-то. Кто этим пользуется и главное зачем? Почему нельзя купить VPS у какого-нибудь хетзнера и развернуть там тот же Jenkins или TeamCity?
Да нет, просто в это время произошла миграция в слак и дискурс. Ирц, например, тоже практически опустел, и гуглгруппа тоже. Это вообще печальная общемировая тенденция, имхо.
>Почему нельзя купить VPS
А когда одной впс станет мало? А точно ли дешевле нанимать в штат админа\деплой инженера?
Хуй знает. Надуманная проблема на самом деле. TeamCity с полпинка заводится на каком-нибудь AWS. AWS сервер стоит копейки. Стало мало одного, смигрируй виртуалку на сервер побольше. Я просто не догоняю, кто можешь башлять всем этим CircleCI и TravisCi, когда можно поднять собственное решение или воспользоваться Google Cloud Build.
Там ценник совсем смешной. 120 минут бесплатно в день, потом $0.003 в минуту.
>Я просто не догоняю, кто можешь башлять всем этим CircleCI и TravisCi, когда можно поднять собственное решение
Я думаю все дело в низкой культуре деплоймента в Восточной Европе, лол.
>Там ценник совсем смешной. 120 минут бесплатно в день, потом $0.003 в минуту.
Ну в сирклсиай так-то тоже не особо какой ценник в новых планах, сто баксов в месяц за премиум-аккаунт. К тому же емнип он появился раньше, не?
Ну это не объяснение.
Как переезд из чатиков связан с потребностью в ответах на SO, если сам SO это как раз альтернатива чатиков и форумов?
(Автор этого поста был забанен. Помянем.)
Ты серьезно? Вот смотри: раньше у тебя был выбор, спросить в списке рассылке, на СО или в ирц. Теперь у тебя выбор спросить на дискурсе или в слаке.
Ээм, нафига спрашивать в сраках и каких-то дискурсах? Мой вопрос на SO и чей-то ответ - помогут тысячам, а в твоих чатах уплывет или смешается с флудом. И потом придет еще один анон и спросит тоже самое и потом еще раз.
Ох уж эти гуманитарии.
(Автор этого поста был забанен. Помянем.)
>Единственный язык, который реально (а не для галочки) работает на jvm, clr и js платформах.
Все трансляторы для галочки, а у нас не для галочки. Классика же.
>Можно писать
Всем известное "можно" с большим "НО". Проходили.
>за отсутствие инструментов для формального доказательства свойств программ.
В этом весь ФП, формально там что-то друг другу доказывают, воздух сотрясают, а по факту ФП где-то в андеграунде а в реале тупо усиленное процедурное программирование
>Главная фича языка - интерактивная разработка, горячая компиляция
Сомнительная радость при большом числе нюансов. Ну, то есть, проще ребутнуть, чем словить магические ошибки.
>Отсутствие статической типизации заставляет разбивать монолитный проект на микроили не очень микросервисы с четко документированными апи
Вот это я понимаю - маня-фантазия!
>Пожалуй, лучший язык по части многопоточности
Пока программа будет клонировать тонну иммутабельных данных на каждый чих записи, мы еще позавидуем 50 наносекундам синхронайза.
>Найти сотрудников в проект легко.
Ох! Это чудесно.
>Много обучающей литературы
5 minutes later
>С другой стороны, нет такого количества туториалов и документации, как например
У меня от тебя мозаичное мышление.
(Автор этого поста был забанен. Помянем.)
Это прекрасно. Процитирую словами из этого треда:
>...благодаря этому всему разбираться в чужом коде намного проще, чем в ооп-лапше
Глазки не прячь, лучше расскажи чем фундаментально ФП от процедурного отличается? Именно парадигмы, а не набор фич. в вики не подглядываем
Собственно вот и все что нужно знать о ФП фанбоях, они даже не до конца осознают фундаментальную разницу.
(Автор этого поста был забанен. Помянем.)
>Ээм, нафига спрашивать в сраках и каких-то дискурсах?
Потому что удобнее, быстрее, уже открыто, еще что-нибудь. Попробуй провести опрос и выяснить, почему люди предпочитают слак и дискурс, я-то тут при чем.
>>378854
>Все трансляторы для галочки, а у нас не для галочки
Ты не разбираешься в вопросе, анон. На кложе для всех трех платформ существуют крупные проекты и хороший тулинг. В большинстве других платформ это именно что трансляторы для галочки. Кстати, если ты будешь продолжать аватаркофажествовать, то тебя зарепортят и все твои посты удалят.
Остальной пост состоит из каких-то ахов, вздохов и смехуечек, так что не вижу смысла это как-то комментировать.
Прискорбно это все. Остается только заботать Clojure только ради того, чтобы запилить на нем свой SaaS стартап и рубить капустку!
>Кстати, если ты будешь продолжать аватаркофажествовать, то тебя зарепортят и все твои посты удалят.
Какая потеря.
(Автор этого поста был забанен. Помянем.)
tower of interpreters:
https://www.reddit.com/r/Clojure/comments/becsoj/tim_baldridge_presents_his_pl_research_heliotrope/
https://www.youtube.com/watch?v=bi2Zd4ZmIsw
https://github.com/halgari/heliotrope
Еще вон пацаны за спек как замену тдд перетирают:
https://www.reddit.com/r/Clojure/comments/be77sn/specdrivendevelopment/
Очевидные кластеры метапарадигм
https://functionaljobs.com/jobs/9166-full-stack-developer-at-red-pineapple-media
>We’re looking for full-stack software developers with an interest in one or more of: Clojure(Script), JavaScript, and DevOps.
>Work visa and assistance for folks outside Germany;
https://grishaev.me/clj-book-spec
>В этой главе мы рассмотрим clojure.spec – библиотеку для проверки данных в Clojure.
>Free event in London for anyone who identifies as female/non-binary and wants to learn Clojure!
>0 points
>Are these sessions that packed that we have to exclude people based on sex and sexual orientation. What a backwards view of the world.
>13 points
Лисперы спасут индустрию от SJW-скама, аминь.
Именем Столлмана.
https://www.learnreframe.com - для любителей видеокурсов годноту подогнали
https://medium.com/@shivekkhurana/what-i-learned-after-writing-clojure-for-424-days-straight-8884ec471f8e - норм питч, объективно и по делу
Тем не менее. Слегка ломает представление о сбере как какой-то дремучей немодной попильной госговноконторе, которое есть у некоторых.
А что там по части фронтенда на сабже было? В порядке эксперимента пробовали?
Ну понятно. Перформанс говно. Динамическая типизация из-за которой нужно писать 100500 никому ненужных юнит-тестов. Хуевые библиотеки из-за которых приходится использовать тот же Hibernate для работы с базой данных. Отсутствует нормальные фреймворки или библиотеки для разработки. Найс язык и экосистема, лул.
>приходится использовать тот же Hibernate для работы с базой данных
До этого было просто упитанно, но на этом моменте ты начал вытекать из треда.
Достаточно напомнить любителям кложи, как в языке реализовано отображение стектрейсов и все встанет на свои места. Кому всрался этот язык? Уж лучше тогда Erlang/Elixir заюзать в новом проекте. Там хоть имеются интересные концепции и с языком идет толковый рантайм. Ну или Scala, если хуй еще стоит.
> как в языке реализовано отображение стектрейсов
Поздравляю с подключением к интернету, в 1.10 стектрейсы переделали, чтобы было, как везде а не как в тонкой лисповой обёртке над JVM.
Отображение ошибок до сих пор работает через задницу. Это одна из проблем из-за которой компании спешно переходят с Clojure на Kotlin или Scala.
define "через задницу"
>компании спешно переходят с Clojure на Kotlin или Scala
И вот опять сперва было упитанно, но на этом моменте взял и начал вытекать.
clj unity arcadia:
https://www.youtube.com/watch?v=Enumt6qxAgc
native clj with graalvm:
https://www.youtube.com/watch?v=topKYJgv6qA
Shenandoah GC in Detail:
https://www.youtube.com/watch?v=JBaZ4lK6OBk
https://www.youtube.com/watch?v=HBWaffsl7fo
http://heck.8620.cx/
https://github.com/uosl/heckendorf
Снова про компиляцию в нативн через грааль:
https://github.com/BrunoBonacci/graalvm-clojure/blob/master/doc/clojure-graalvm-native-binary.md
И видосы с последней конфы подоспели:
https://www.youtube.com/watch?v=VBIlk3GMmNc
https://www.youtube.com/watch?v=dzXZVnfp2TA
https://www.youtube.com/watch?v=l1b7Da2DnPo
https://www.youtube.com/watch?v=u-4FiFpkPlQ
Проорал в голосину с его английского. ЗЭ ХЕ, блядь, ЗЫС ЫС, ЕЗРИСИНГ.
Охуенная преза. Рассказ как ребята переписывают сервисы на Go. Охуенно!
>Проорал в голосину с его английского.
На скольких международных конфах лично ты выступал?
>Рассказ как ребята переписывают сервисы на Go.
Го очень часто используется в связке с сабжем (ну типа как пайтон+си, только кложа+го), по-моему status.im первые эту моду задали, лол.
>На скольких международных конфах лично ты выступал?
Я не выступаю на конференциях. Нахуй оно мне надо?
>Го очень часто используется в связке с сабжем (ну типа как пайтон+си, только кложа+го), по-моему status.im первые эту моду задали, лол.
Нахер тогда нужна эта кложа, если парни чуть ли не весь сервис переписали на Гоу? Рест сервисы можно было и на каком-нибудь ссаном руби написать или пайтоне, а всю числодробилку вынести на гоу.
Нахуя ебаться с лиспом, лул?
>Нахуй оно мне надо?
>Нахер тогда нужна
>Нахуя ебаться
))
Если тебе не нужно - не пользуйся\не пиши\не выступай на конференциях. Тебя же никто не заставляет и не агитирует.
> Walmart uses it to track every receipt from every store. http://blog.cognitect.com/blog/2015/6/30/walmart-runs-clojure-at-scale
>
> Netflix uses it. https://news.ycombinator.com/item?id=18345341
>
> Nubank's software stack is architected around it. https://cognitect.com/nubank-case-study.html
>
> King games used it to write the Defold IDE they use to create their games. https://king.com/ko/jobs/king-hub/posts/how-we-use-clojure-at-king-to-write-a-game-engine-editor
>
> One of the major hospital chains (HCA) uses it to watch for Sepsis risks amongst all of their patients. https://www.youtube.com/watch?v=AyWbB52SzAg
>
> Roomkey tracks a massive amount of hotel availabilty and bookings. https://venturebeat.com/2013/09/10/room-key-cloudbeat/
>
> Clojure monitors the engines in the 737.. https://www.youtube.com/watch?v=iUC7noGU1mQ
>
> Metabase is written in Clojure. https://metabase.com/
Ну и заебись, будет больше открытых вакансий и меньше конкуренции.
Да у него просто такой ПЕРИОД имхо. И он типа кинул не сабж, а вообще решил удариться в байтоебство после разочарования в интернетах и современной инфраструктуре вообще.
Хотя с "раст быстрее кложи, ПРЕДСТАВЛЯЕТЕ?!!" я конечно легонько проиграл.
Ну там все таки акцент был на то что "не сильно парясь можно легко написать на расте тоже самое и будет быстрее". Но вообще похуй, он наебщик и чепушило.
Ну для уже готового получислодробильного алгоритма это ведь и вправду так тащем-то.
А почему наебщик и чепушило?
А самое смешное, что на Common Lisp можно писать гладко и приятно, попутно слесаря байтики. Но до хипстера тонского не дойдёт, конечно.
Читал на нашем любимом сайте (здесь, кажется в мы вам перезвоним). Что он кого-то развел на супер-инновационный-неимеющийаналоговнет проект на кложе, пилили-пилили, но кроме бабосов нихуя не распилили.
>кроме бабосов нихуя не распилили.
Все правильно сделал, значит.
Лох должен страдать и платить и страдать.
Этого требует гармония мироздания.
Стартап назвался Echo (aboutecho.com, в данный момент уже недоступен). Они во главе с Львом Валкиным пилили какой-то ололо стартап в области social media и web 2.0. На кложе писалась очень мутная система мониторинга, которая по-хорошему нахуй никому не всралась, т.к. этих систем мониторинга на тот момент было хоть жопой жуй.
В итоге ребята игрались со всеми этими кложами и эрлангами, а когда пришло время показывать результат, то жидко обосрались. В итоге у инвестора закончились деньги и тот признал проект неудавшимся, что привело к разгону команды.
Чуть позже, по очень большому знакомству, всю команду забрала к себе машинзоун, которая клепает какие-то мобильные игрушки. Т.к. машинзоун не ожидала, что к ней прибудет десяток рыл из РФ, то не знала чем их занять и они какое-то время занимались тем, что писали какую-то хуету в стол. По итогу их и из машинзоун выгнали на мороз.
Ну, а дальше вы и так все знаете.
> Рассказ как ребята переписывают сервисы на Go
> some of the infrastructure services are transitioning into golang
> for bread-and-butter stuff Clojure is still our go-to and the best thing we have.
Обычно так говорят либо те, кто не писал на кл, либо те, кто не писал ни на чем нормальном кроме кл.
>>435317
>>435438
Это намеренный троллинг или вы и вправду в это верите?
Во-первых, echo имеет мало отношения к кложе и тонскому. Он там был обычным девелопером ну ладно, потом тимлидом, на кложе там были пару внутренних проектов типа парсилки логов. Основной код был на эрланге, окамле и си.
Во-вторых, echo - один из самых успешных русских стартапов вообще-то. У них было до того много бабла, что они несколько лет устраивали буткампы (выезжали на природу, ставили там генераторы, сцену, вай-фай и делали всякие презенташки и прочие айти-тусовочки для студентов и местных разрабов) и практически в одну харю превратили Ульяновск в неплохой такой IT-центр по меркам мухосрансков. Причем эффект сохраняется до сих пор.
В-третьих, они пилили не "какой-то ололо стартап", а систему комментирования а-ля disqus, которая изначально называлась js-kit. Точнее наоборот: это disqus - а-ля js-kit, потому что js-kit появился раньше дискаса и был в свое время самым популярным (и одним из первых) сервисом такого рода.
В-четвертых, "время показывать результат" пришло в 2006 году, лол, Валкин тогда релизнул жскит и вскоре после этого пришли инвестиции и была основана компания.
В-пятых, компания росла, и в итоге тот продукт, который изначально был жс-китом, решили задисконтинюить. По сути на этом рынке они проиграли конкуренцию дискасу и гуглофейсбукам, после чего менеджмент принял решение прекратить его разработку и сфокусироваться на других проектах.
В итоге Валкин уехал в Долину, а команду отправили в блатной отпуск в Калифорнию, лол. Ну а дальше кто куда, тонски вон щас в жидбрейнс сидит.
Но к сабжу это все не имеет вообще никакого отношения.
Да не гори ты так, Никита. Все понимают, что разработчик из тебя так себе. Сначала в Ксореде говно разгребал, потом тебя по знакомству устроили в нужные компании. Сам понимаешь, что тебе грех на что либо жаловаться.
Это конечно смешно, но все-таки слишком глупо даже для оранжевого сайта.
>https://www.learnreframe.com - для любителей видеокурсов годноту подогнали
Ебать. Сейчас бы выпускать курсы по мёртвому языку с аудиторией 20 человек за 300 евро.
А чего это ты хихикаешь? Все он правильно говорит. Язык умер и используется только среди маргиналов, которые что-там у себя пишут. Всем же понятно, что для серьезных проектов язык с динамической типизацией не подходит, т.к. первое - он будет очень медленным (никитонский это уже подтвердил), а второе - это то, что он не подходит для какого-нибудь серьезного рефакторинга и требует колоссальных затрат на написание юнит-тестов, т.к. в компайл-тайме не проверяются элементарные вещи, такие как типы передаваемых параметров в функции и их количество и тип возвращаемого значения из этих функций. Т.е. все те детские ошибки, которые ты ловишь при компиляции в Java/Scala, ты будешь ловить в рантайме в Clojure.
>баттхерт нищука
>>439770
Интересная теория, но я просто имел ввиду, что требовать деньги за курс, да и вообще его создавать за деньги, по языку, который мало того, что просто далеко не самый распространённый, так ещё и лисп - странное занятие. Люди, которые уже работают на кложе - им он не нужен, они и так всё знают в нём. Даже если просто так его купить, то что, тратить 10%(в лучшем случае) от месячной зарплаты, чтобы повторить (+ 2 3)? А новички не пойдут в ЖабоЛисп за 300 евро.
Интересно, это все тот же тралль, или просто аноны с одними и теми же набросами похожи до неразличения?
>>439814
Тем не менее, раз что-то продают, значит кто-то это что-то покупает. Пока ты тут думаешь и рассуждаешь, зачем создавать видеокурс, чувак просто взял и сделал. Согласись, это более продуктивно.
> раз что-то продают, значит кто-то это что-то покупает
Дальше не читал. Сложно воспринимать человека с подобным мышлением.
Это просто констатация факта ¯\_(ツ)_/¯
https://ask.clojure.org
Годный пост о конфигурации и развертывании на русском (причем годный не только для кложурцов, а вообще):
https://grishaev.me/clj-book-config/
У этого чувака вообще много годноты в блоге, рекомендую.
https://grishaev.me/altes/
https://grishaev.me/wired/
https://github.com/borkdude/babashka
https://github.com/borkdude/sci
https://asciinema.org/a/261776
Ну и еще всяка шняга:
https://twitter.com/colortreemobile
https://github.com/Viasat/salt
И еще:
http://ahungry.com/blog/2019-07-22-Simple-non-Electron-Native-GUI-Development.html
https://github.com/joinr/icfpc2019/tree/opt
https://github.com/alanmarazzi/panthera
https://github.com/netb258/imgur-dedup
https://github.com/nubank/workspaces + https://github.com/bhauman/devcards
https://edn-query-language.org/eql/1.0.0/what-is-eql.html
https://github.com/edn-query-language/eql
Бля, он безтиповый. Лучше на F# под дот корку писать. Эх вот бы кто Fjord допилил.
Эф шарп не взлетел, к сожалению (насколько мне известно). Статическая типизация в сабже есть (https://typedclojure.org) hink typescript, но ей никто не пользуется, ибо ненужно. Вместо этого есть https://clojure.org/guides/spec
К сожалению, на Кложур практически невозможно найти оплачиваемую работу. Пример НИКИТОНСКОГО ЗЕ ХЕ БЛЯДЬ, ЗЫСЫС ТРЫЗЫС, отчетливо это подтвердил.
>Пример НИКИТОНСКОГО ЗЕ ХЕ БЛЯДЬ, ЗЫСЫС ТРЫЗЫС, отчетливо это подтвердил.
Каким образом он это подтвердил, не понял? Он же как раз успешно нашел высокооплачиваемую работу на сабже (несколько раз).
Найти работу относительно несложно, но только если на удаленке и только если ты очень крутой синьор.
Лучше уж тогда на джаве продолжать хуярить.
I’ve programmed systems in many different languages; from assembler to Java. I’ve written programs in binary machine language. I’ve written applications in Fortran, COBOL, PL/1, C, Pascal, C++, Java, Lua, Smalltalk, Logo, and dozens of other languages. I’ve used statically typed languages, with lots of type inference. I’ve used typeless languages. I’ve used dynamically typed languages. I’ve used stack based languages like Forth, and logic based languages like Prolog.
Over the last 5 decades, I’ve used a LOT of different languages.
And I’ve come to a conclusion.
My favorite language of all, the language that I think will outlast all the others, the language that I believe will eventually become the standard language that all programmers use…
…is Lisp.
https://jobs.braveclojure.com/jobs/17592186047046/clojure-engineer-attendify
Знание сабжа желательно, но необязательно (научат).
А есть примеры публичных проектов с микросервисами на кложуре?
Просто для общего развития.
Какой профит во всём этом, преимущества перед джавой, скалой и т.п., помимо лиспа как такового (если это считать преимуществом)?
>Главная фича языка - интерактивная разработка, горячая компиляция (hot reloading) и выполнение кода прямо внутри работающего приложения (в том числе задеплоенного в продакшн,
Я уже много лет делаю то же самое на Java EE, очень доволен.
Какой тебе пруф?
Что изменённый джава/джсп код на лету перекомпилируется сервером и тут же подгружается класс-лоадером, без перезагрузки всего сервера?
Так это на нормальных системах реально с начала нулевых уже есть.
Или что я могу на работающем апп-сервере запускать груви (или даже руби) скрипты и "выполнять код прямо внутри работающего приложения"? Поверь, могу. И ты сможешь, лол.
И это всё без непонятных изъёбов и марсианского тулинга.
Тут важно понимать, что такие возможности тебе даёт вовсе не язык, как таковой. А сервер, рантайм и прочее.
Реальное преимущество лиспа в том, что "Отсутствие статической типизации заставляет разбивать монолитный проект ...".
Только дело, конечно, не в типизации, а в самом по себе лиспе.
Ещё хуй знает когда было сказано (в сикпе где-то или Graham сказал), что программист на лиспе вынужден сразу же плодить тучи функций, т.к. писать стандартную императивную дрисню на лиспе просто невозможно.
>изменённый джава/джсп код на лету перекомпилируется сервером и тут же подгружается класс-лоадером
А что произойдёт с уже созданными инстансами классов, у которых изменены определения? Жидкий обосрамс?
> программист на лиспе вынужден сразу же плодить тучи функций, т.к. писать стандартную императивную дрисню на лиспе просто невозможно
Пиздец у тебя каша в голове. Вон тот же Common Lisp все лисперы обсирают за то, что на нём можно императивную парашу писать да ооп обмазываться. Никто тебя ничего не заставляет делать, успокойся.
>с уже созданными инстансами классов
Чудес не бывает, сынок.
Естественно, сохранённые _данные_ в памяти не изменятся, при изменении определения класса, если ты понимаешь, как всё это работает внутри. И это хоть на джаве, хоть на кложуре, хоть на чём. От этого помогает правильный дизайн кода.
А если ты имеешь в виду, что на кложуре все данные в сырых мапах и листах, то это так себе достоинство.
>Пиздец у тебя каша в голове.
Пиздец, ты токсичный ебанат.
Я написал вынужден безо всякого негатива. В оригинале было чуть пафоснее, но, я дословно не помню. Найди, блядь, эту цитату, и посмотри, какая там интонация.
>А есть примеры публичных проектов с микросервисами на кложуре?
В смысле опенсорсные туториал-проекты? Ну можешь чекнуть это: https://github.com/furkan3ayraktar/clojure-polylith-realworld-example-app - правда там именно полилит архитектура, там свои особенности.
>>467109
>Какой профит во всём этом, преимущества перед джавой, скалой и т.п., помимо лиспа как такового
Зарплата выше. ^_^
Нет, не делаешь.
>>467130
>Тут важно понимать, что такие возможности тебе даёт вовсе не язык, как таковой.
Ошибка. Ртфм.
>Реальное преимущество лиспа в том, что "Отсутствие статической типизации заставляет разбивать монолитный проект
Есть статически типизированные лиспы, есть динамически типизированные нелиспы, нерелевантно.
>писать стандартную императивную дрисню на лиспе просто невозможно.
Возможно, всю жизнь на кл и имакслишпе, и прочем спокойно писали.
>>467269
>И это хоть на джаве, хоть на кложуре, хоть на чём.
Ошибка.
>А если ты имеешь в виду, что на кложуре все данные в сырых мапах и листах, то это так себе достоинство.
Это совершенно нерелевантно топику вашего диалога, но вообще это как раз и есть главное достоинство, да.
>Пиздец, ты токсичный ебанат.
Но у тебя правда каша в голове, это факт. На уровне "слышал звон да не знаю где он". Про репл и хот релоадинг - почитай про отличия моделей исполнения обычных и image-based языков (хотя чтение лучше подкрепить практикой, иначе профиты осознать не факт что получится).
>Нет, не делаешь.
Ну, тебе виднее, конечно.
>image-based
А что, кложура image-based? Каким образом? Как мне сохранить/загрузить имидж?
Или ты имеешь в виду, что не нужен текстовый редактор, загрузка файлов, компилятор и т.п., чтобы поменять определения в работающей программе, т.к. всё это делается через репл самим рантаймом языка?
>Ну, тебе виднее, конечно.
В данном случае - apparently да.
>А что, кложура image-based?
Нет, но наследует модель выполнения именно от таких языков.
>Или ты имеешь в виду, что не нужен текстовый редактор, загрузка файлов, компилятор и т.п., чтобы поменять определения в работающей программе, т.к. всё это делается через репл самим рантаймом языка?
Не совсем; суть в том, что (в отличие от того же хот-релоада в джаве) там нет отдельной операции "поменять определение в работающей программе" - у тебя весь (любой) код всегда¹ выполняется в репле, выражение за выражением. Поэтому для языка (рантайма) нет принципиальной разницы, во-первых, откуда он читает эти выражения - из файла или из сокета; во-вторых, нет принципиальной разницы между перекомпиляцией определения (как мы это делаем в джаве) и выполнением любого другого кода - печатью строчки в stdout, изменением состояния и т.п. На практике это означает, что ты работаешь с образом запущенной программы, и единообразно тыкаешь что состояние рантайма (скомпилированные определения), что состояние своего приложения; короче говоря, более корректным сравнением было бы не "я в джаве так же делаю", а "я в консоли браузера так же делаю". В теории это означает, что у тебя минимальная единица компиляции и выполнения - выражение (не класс, не модуль, не пакет), а это уже характеристика языка, а не одного лишь рантайма.
[1]: ну там типа есть aot и подобные нюансы, но в контексте данного обсуждения это детали реализации.
https://github.com/porkostomus/mecca
https://porkostomus.github.io/mecca/
* Только не понятно нахуй это нужно, когда уже есть Lisp Flavored Erlang.
пофиксил тебя, не благодари
Всё так, LFE оче няшно выглядит, жалко только, что довольно дохлый
Вот как раз LFE - это сферическое ненужно в вакууме.
>>470782
Разумеется, ну мне кажется вообще немного неразумно сравнивать проект одного чувака джаст фо фан и целый эликсир. В ридми там кстати есть секция, которая дает ответ на твой вопрос - чувак хотел научиться писать языки, плюс портфолио видимо, ну и ему просто по кайфу.
Алсо,
>tfw чувак для хобби-проектов пишет код и организует процесс лучше чем 99% галер и студий
Ну а если сравнивать кложу и эликсир в вакууме, без учета того факта, что эликсир - это такой руби 2.0, на который естественно гораздо проще пересадить людей, то чисто с точки зрения самого языка кложа-то получше (почище и помощнее) будет. Хотя элик тоже няшка, конечно.
https://sekao.net/paravim/
Yo dawg, I've heard you like editors, so we put vim in our jvm so you can include an editor as a library in your project so you can code while you code
Кложа и Эликсир языки из одной категории и вообще почти одно и то же.
Ну, можно согласиться что кложа чуть более продвинута в плане фич для обычного программирования, но эликсир более продвинут в плане concurrency.
Просто не вижу понту от кложи на эрланговской VM, она ж медленнее JVM в раз 20 и для как бы для других целей.
>Кложа и Эликсир языки из одной категории и вообще почти одно и то же.
Ну хз, субъективно. Они похожи тем, что оба - динамическая функциональщина (ну и элик вообще испытал сильное влияние кложи), но вообще-то в целом это очень разные языки.
>но эликсир более продвинут в плане concurrency.
Почему? Как раз наоборот же.
>Просто не вижу понту от кложи на эрланговской VM
Ну пользоваться-то этим необязательно, а так - пусть будет, почему бы и нет. В руби на эрланговской вм есть понт - вот пусть и кложа там будет.
Работа DOM и шаблоны (Enfocus, Dommy)
Была серия уроков по кложе, с задачами, там это видео. clojurecourse.by
Хз насоклько эти уроки сейчас актуальны, вроде как 5 лет прошло.
М?.. Нет, по дефолту русская версия открывается, можешь сам зайти и проверить.
>Enfocus, Dommy
Ну да, конкретно вот это не очень актуально, скорее для общего развития.
Но вообще прикольно, я не знал, что такое есть. И никитонски там тоже засветился. Да и вообще в целом выглядит очень годно, затронута куча разных тем, плюс задачки есть. Годнота.
Можешь кстати вместо loop со счетчиком просто сделать что-то типа (->> (iterate random-by-seed seed) (nth n))
Нет, но думаю, что тебе лучше вкатиться в питон.
Вкатывайся в Common Lisp
Перепилите кто-нить наноборду на кложуре.
Наноборда не может умереть, потому что она и так была мертва, лол. Пора бы ей воскреснуть.
>Наноборда не может умереть, потому что она и так была мертва, лол.
Поэтому она и неубиваемая.
https://github.com/aliaksandr-s/prototyping-with-clojure
Так, че там по сладкой удаленочке за даллары на этой вашей кложе? Писал на Java и Scala ебать их в сраку. Сложно вкатиться в Кложу и начать педалить буллетпруф бэкенд сервисы? Фронтенд не интересует.
Ну Тонский вон педалил, можешь у него спросить. В слаку вкинь клич, ты уберсиньор-помидор же?
Алсо
>буллетпруф
Нет пути! Только хуяк-хуяк и в продакшн!!1
Устал я от Java. Со всеми ее спрингами и хайбернейтами - такое-то уныние. Пока что-то работоспособное соберешь уже месяц пройдет. На Scala не лучше - тулинг хромает, концепций дохуя - удовольствия от разработки нихуя. Clojure привлекает тем, что там по сути есть только данные и функции и уже на этих понятиях строятся какие-то более мощные концепции.
Ну если устал от жавы и скала не зашла из-за громоздкости и непрактичности, то по сути сабж тебе прямо в яблочко должен зайти, да.
Правда насчет тулинга я бы и тут не обольщался - минимализм-с, все дела.
У Гришаева кстати в блоге книжка книжка-блог по частям выкладывается, если душа просит на русском что-нибудь почитать - самое то, все с точки зрения практика.
Хорошо.
Это новая итерация говножорства? Сначала жс петухи жруг говно из жопы других жспетухов через нпм, потом приходяю сложаскриптдебилы и начинают подъедать уже на жспетухами. Такая-то человеческая многоножка.
Скажите, обязательно ли знание стандартной библиотеки Java для того чтобы писать код на Clojure? Или насколько часто эти знания необходимы?
На одной чаше весов Clojure, а на другой Elixir. От Erlang меня подташнивает, но от Java еще больше
Scala
>Скажите, обязательно ли знание стандартной библиотеки Java для того чтобы писать код на Clojure?
Нет. Ну или хз что ты понимаешь под стандартной библиотекой, javax.* знать конечно не надо, но надо уметь например прочитать джавадок к классу String, тому що кложастроки это джавастроки. Ну то есть если ты не конченый аутист, то проблем не возникнет. Алсо джавафобия иррациональна, тебе ж писать-то на ней не надо будет.
>На одной чаше весов Clojure, а на другой Elixir. От Erlang меня подташнивает, но от Java еще больше
Ну пили что-нибудь на clojurescript тогда, например. Поддержка jvm и js практически одинаковая.
Да, и кстати, забыл добавить обязательный дисклеймер: реактохуки ненужны, эти проблемы реактоговна в клжс уже решены лет 5 назад
Сможет ли Clojure сделать меня снова как когда-то счастливым?
Какое же в этом веселье? Вот serverless сервисы написанные на кложуре и задеплоеные в эйдаблюэссс - вот это я понимаю веселье!
Да! ^_^
Не мешает ли динамическая типизация в Clojure, когда разрабатываешь крупные проекты? Я к тому, что если я перепутаю тип аргумента метода где-нибудь в Java или Scala, то компилятор ругнется и не соберет код. Не буду ли я тратить больше времени на подобные ошибки в Clojure?
>тест если передать строку
>тест если передать число
>тест если передать список строк
>тест если передать список списков строк
>тест...
Куда передать? Кто-то в 2019 до сих пор тестирует имплементацию вместо поведения?
>Ты, видимо, не умеешь писать тесты и не вполне понимаешь, для чего они нужны и как это работает.
Проиграл с дауна. Тебе конкретные примеры привели, которые показывают, что подобные ошибки у тебя будут появляться в рантайме, когда какая-нибудь Scala или Java отловят это еще на этапе компиляции. Иди обтекай, клоун.
Про динамическую типизацию слышал? Нужна статика иди в Java/Scala/etc. Не пишу на Clojure, но вроде Spec это того что тебе нужно.
https://grishaev.me/clj-book-spec/
Тесты поведения стоят на уровень выше, чем тайп-чеки, и если тест написан через TDD, то есть покрывает 100% возможных вариантов использования компонента, то никакого практического смысла в тайп-чеках не остается. Единственное исключение - это публичные библиотеки, где можно добавить проверку на какой-нибудь nil, чтобы пользователю этой библиотеки выбрасывалась более подробная ошибка, но это уже идет как часть публичного API и тоже подходит под использование компонента.
http://blog.cleancoder.com/uncle-bob/2019/06/08/TestsAndTypes.html
https://blog.cleancoder.com/uncle-bob/2016/05/01/TypeWars.html
На кложескрипте - написание больших и сложных UI.
На кложе - в основном вебня, рест\графкуль-апи всякие, пайплайны обработки данных, микросервисы и т.п.
То есть если тебе надо просто круд-сайтик и добавить анимации, то лучше рор\джанга и ванильный жс. Если же у тебя сингл-пейдж аппликейшен с дата-кранчинг бэкендом, то вот это уже ближе к теме.
https://www.readitnever.app
https://www.reddit.com/r/Clojure/comments/e6iyfd/launched_my_first_real_web_app_today_written_in/
https://porkostomus.gitlab.io/posts-output/2019-12-03-mecca-paint/
https://www.reddit.com/r/Clojure/comments/e6qzb6/mario_paint_sprite_editor_in_selfhosted/
>Подскажи какие типовые задачи она решает.
Какие задачи решает JVM по-твоему? Такие же и даже больше решает Clojure. Кроме матурной с большим количеством либ JVM, Clojure добавляет еще свои фичи.
Мне в телеграм чате Clojure сказали, что CLI накуй не нужон. Типа lein работает, и больше ничего не надо.
Как смысл быть модным и молодежным, если за Clojure не платят и работы на нем нет?
Есть чувак, который без опыта программирования устроился писать на Clojure. Задрачивал несколько месяцев очень упорно.
И кроме того, изучение разных языков необходимо для роста общего профессионального уровня. Вот ты писал на Лиспах? Если нет, то ты многое потерял. Лисп ломает мозг, открывает понимание новых методов программирования, которые кроме как через Лисп никак не постичь.
>Вот ты писал на Лиспах?
Писал на Racket, когда учился в ВУЗе. Но потом быстро понял, что работы найти на этом вашем лиспе мне не удастся и очень быстро перебежал на Java, о чем не жалею. Так бы сейчас гнил где-нибудь в канаве, если бы серьезно изучал лиспы, лол.
Тогда это кардинально меняет дело! Если какой-то чувак действительно устроился, то значит и мы сможем, лол! Ты сам-то в это веришь, старина? На всем HH наберется от силы вакансий 20, где упоминается Clojure. В половине вакансий это будет как бонусный скил и на самом деле язык не используется в проекте. Остальная половина будет поделена между проектами, которые переписывают с Ruby/RoR на Clojure (предполагается, что у кандидата есть продакшен опыт в рубях и рельсах), а вторая половина - какие-нибудь мутные ололо-стартапы, которые прожигают деньги инвесторов. Туда, разумеется, требуются только бывалые кложуристы, которые уже месили скобки пару лет в какой-нибудь фирме.
>Ты сам-то в это веришь, старина?
Это не легенда. Я сидел в одном чате для вкатывальщиков. Достаточно долго. Всех там знал почти. Конечно все делились опытом, кто как и куда устроился, и сколько времени потратил на обучение. Один чувак учился писать на JS, а когда уже немного опыта набрался, ему посоветовали попробовать Clojure. Он начал его задрачивать, и через несколько месяцев уже довольно уверенно писал код. После в чате нашлись люди, знакомые которых пишут на Clojure в продашне. Его прособеседовали, он всех устроил, его взяли на работу. Кроме того там были чуваки, которые тоже на Clojure пишут, но правда сначала проработали на JS около года.
Ну это далеко не показатель. Работы на Clojure - хуй да нихуя. А та что есть - это переписывание проектов с Ruby, либо вообще не связанный с Clojure проект, где Clojure нужен как доп. скилл, который показывает кругозор кандидата.
Показатель - непоказатель, мне как-то все равно. Я знаю, что если человек знает свое дело, он найдет работу. Знает хорошо Haskell - найдет работу на нем, знает Clojure - найдет работу на нем. А ты рассуждаешь неправильно. Типа дайте мне много работы на Clojure, а я потом подумаю стоить ли изучать его. Такого никогда не будет.
>Типа дайте мне много работы на Clojure, а я потом подумаю стоить ли изучать его
Я этого не говорил. Я подхожу к проблеме с прагматичной точки зрения. Открываю HH и вижу, что работы на Java на несколько порядков больше чем на Clojure/Scala/Haskell вместе взятых. Отсюда я делаю вывод, что у меня не будет проблем найти работу на Java и у меня будет выбор контор, в которые я могу пойти работать. Что нельзя сказать о Clojure и прочих Scala.
> Открываю HH
Ты же ведь понимаешь, что по-настоящему годные вакансии в паблик никогда не попадают и закрываются посредством личных знакомств в коммьюнити?
Твое коммьюнити - это полторы калеки в каком-нибудь телеграм канале, плюс несколько сотен наивных дурачков, которые дрочат кложуру в свободное время, мечтая вкатиться на сытую удаленочку.
Забей, это тот же шизик, что срал в Elixir треде. Тупо те же самые фразы.
Для некоторых людей мир ограничивается мейнстримом, языки оцениваются по возможности продать жопу в местный бадишоп, а если за языком не стоит анальная корпорация (тм) то он вообще сразу не нужен.
Я тебе привел пример как в чате с нуля вкатывались в Clojure. И да, на работу устроились по знакомству через компьюнити.
>устроились по знакомству
Сейчас бы анус подставлять всяким малознакомым микрочеликам за работу программиста, когда нормальные люди просто открывают HH/Linkedin, откликаются на вакансию и уже через пару дней работают за приличные деньги.
Ты дегенерат? По объявлению тебя и выипут. Придешь хер знает куда, хер знает к кому. Не буду называть имен/названий, но чел устроился в одну из самых крутых продуктовых компаний РФ, которая к тому же пишет на Clojure. Ты же по объявлению найдешь только проституцию в бодишопах. И о Clojure не мечтай даже.
>по объявлению найдешь только проституцию в бодишопах
Топовые компании РФ постоянно ищут программистов через HH/Linkedin, а ты мне про каких-то мутных челиков из телеграм каналов рассказываешь, лол.
>И о Clojure не мечтай даже.
Сейчас бы в 2к19 писать на динамикопараше и ебаться с ошибками в рантайме, которые приличный компилятор отлавливает еще на этапе компиляции твоего говнокода.
Беги скорее писать тесты на передачу всех возможных типов в функцию, лол.
Сейчас бы брать во внимание мнение всяких школо-шизиков.
Только lein, только хардкор. CLI для пидоров.
>очень быстро перебежал на Java, о чем не жалею. Так бы сейчас гнил где-нибудь в канаве, если бы серьезно изучал лиспы, лол.
У тебя какое-то искаженное восприятие реальности. Если тебе кажется, что джава и лисп - это взаимоисключающие варианты, то у тебя еще многое впереди.
Execution error (NullPointerException) at csvdb.core/order-by* (form-init9235460488737194202.clj:96).
null
Стрелочка из (-> x (foo ...)) делает (foo x ...), ну и так далее для каждой следующей формы.
Что за функции на пике не знаю, так что могу только ванговать, что order-by ожидает ключ для сортировки, а получает nil.
>Why Isn't Functional Programming the Norm?
Потому что слишком тугая абстракция. Императивные алгоритмы намного проще создавать, потому что они являются натуральными для человека, т.к. все бытовые задачи - это изменение окружения через последовательность действий.
Чувак, ты лет на 10 опоздал, лол.
>Императивные алгоритмы намного проще создавать
Нет. Все математики/программисты согласны, что рекурсивные алгоритмы (рекуррентное соотношение) проще для написания и понимания. Они естественно выводятся из определения задачи. Например факториал, его рекуррентная формула легко переводится в код. А чтобы эту формулу перевести в императивный алгоритм, нужно неестественно извернуться.
>Императивные алгоритмы являются натуральными для человека
Нет. Когда человек выполняет вычисление, он не записывает ничего в переменные, и потом их не изменяет. Он вычисляет декларативно, как это принято в математике. Это естественный способ мышления.
>все бытовые задачи - это изменение окружения через последовательность действий
Еще раз нет. Приведи пример.
>— Что нужно для вкатывания?
>Знать английский, не быть тупым, иметь опыт программирования.
Куда вкатываться-то? Кложур-программисты нужны только с многолетним опытом в Java или Ruby. Просто так заскочить на проект не выйдет.
>иметь опыт программирования
>иметь опыт программирования
>иметь опыт программирования
Алсо, даже итт были репорты о джунах, так что не все так однозначно.
Ебать ты наркоман. Пример - практическе любое обучение или инструкция, от сборки икеевского шкафа и кулинарного рецепта, до физических упражнений. Это всё итерации с условиями.
Рекурсия, блядь, вообще противоестевственна для человеческого мышления, кроме математиков, у которых оно нихуя не обычное и довольно специфическом образом пришибленное. Приведи контр пример рекусривной бытовухи, которая будет проще цикла.
>до физических упражнений
Чистая декларативщина же. Никто не пишет "возьмитесь за турник; число повторений равно нулю; подтянитесь, увеличьте число повторений на один, если число повторений = 10, то закончите, иначе повторите". Пишут: подтягиваться надобно хватом такой-то ширины, с такой-то техникой; программа: столько-то подходов по столько-то повторений.
>кулинарного рецепта
Опять декларативщина, не? Ингридиенты: <список ингридиентов>. И потом последовательность трансформаций. Прямо один-в-один как код на кложе:
(def ingredients {:eggs ... :sugar {:amount [5 :tablespoons] ...} ...})
(->> eggs (take 5) (filter :white) (map whip) ...)
...ну что-то в таком духе.
>сборки икеевского шкафа
Если ты мне приведешь фотку инструкции от икеи, в которой будет цикл, то я удолю етот итт тред признаю, что тут что-то есть. Или вообще приведи любой пример, где есть циклы.
Ну и вообще циклы с рекурсией сравнивают только зеленые (в смысле ньюфажные) мудаки, которым нечем заняться и которые толком не писали ни ООП, ни ФП код.
другой
Вы видите копию треда, сохраненную 19 января 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.