This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2016-03-06
Channels
- # admin-announcements (1)
- # aws (12)
- # beginners (35)
- # boot (12)
- # cider (32)
- # cljsrn (5)
- # clojars (10)
- # clojure (20)
- # clojure-russia (60)
- # clojurescript (229)
- # community-development (14)
- # cursive (9)
- # data-science (4)
- # datomic (3)
- # funcool (2)
- # hoplon (29)
- # jobs (15)
- # jobs-discuss (53)
- # keechma (2)
- # luminus (8)
- # om (42)
- # onyx (15)
- # parinfer (22)
- # re-frame (12)
- # reagent (162)
- # spacemacs (1)
artemyarulin: мне понравилось использовать defrecord вместе с протоколами. Вернее, там нет другого выхода, но сам протокол писать и две реализации, а потом все это использовать -- получилось отлично
http://www.slideshare.net/mikeranderson/clojure-for-data-science-57724240 с 42 слайда про протоколы
или от того, что кто-то пишет в руби коде
def blabla
return if mamke_privet?
….
….
end
и называет это гардомне знаю что это, стиль, образ мышления, ещё что-то, но мне кажется, что в этом больше ФП, чем в структурах данных, хитрых способах канкаренси и прочего
@az: не зря говорят, если вы даже не собираетесь программировать на Lisp/Clojure, то стоит познакомится с теми концепциями, которые есть в этих языках, потому что вы как программист станете лучше. Поэтому оформлять в функциональном стиле можно в разных языках. Но степень удобности оформления кода в функциональном стиле у всех языков разная. Понятное дело, 2 свойство ФЯ приведенное мной, в части "функции можно динамически создавать во время исполнения" создать не получится ни в одном типизированном языке. Сохранить функции в структуру данных, уже сложнее или не идеоматично для многих языков. Где-то была статья, где один программист рассматривал разработку на Java в функциональном стиле. Это можно было делать, но код был таков, что остальная команда разработчиков просто расстанется с таким функциональщиком, ибо джавийный код в функциональном стиле становится резко чужеродным по сравнению с обычным стилем в Java
@az: как правило, разработка ведется в команде. если один программист будет писать "правильно" вместо модификации переменной, возвращать новое значение, не изменяя старого, то такой подход могут исповедовать не все разрабы в команде. и кто-то точно изменит переменную там, где этого не ждешь. если в языке принудительно запрещена модификация данных, то язык не оставляет просто выбора и тем самым толкает на функциональный стиль. Без иммутабельных коллекций очень трудно в языке не модифицировать существующие значения, потому что код станет резком медленным. Если в векторе 1000000 значений и мы хотим вставить посередине новое значение, то возвращать 10000001 новый вектор очень накладно. поэтому Рич крут в том, что он сделал все структуры данными в виде двоичных деревьев с почти константной скоростью вставки, что дало возможность работать с иммутабельными структурами в языке.
получается есть команды, где у каждого свой стиль кунг-фу, но при этом есть “правильные” языки, которые поощряют только стиль "кобры"
@az просто количество таких принципов или "улучшений" языка Clojure привело в другое качество языка. получился очень хорошо спроектированный язык, где если и выстрелил себе в ногу, то это явно видно где.
вроде Ричи грил “there are not immutability by convention”, это к теме про жаву. Хотя опять же мой любимый buck написан на жаве используя гугловые либы для иммутабильности:
ImmutableMap.Builder<String, String> environmentVariablesBuilder) {
environmentVariablesBuilder.put(
"SRCS",
Joiner.on(' ').join(
FluentIterable.from(srcs)
.transform(getResolver().getAbsolutePathFunction())
.transform(Functions.toStringFunction())));
Меня на работе уговаривали дропнуть кложуру и взять 2 жавистов и переписать все на нее, я как раз смотрел как их жавы сделать функциональный язык, но это блин кой-то ад будет в итоге, т.е. вроде все есть - и лямбды и immutable но все равно не, не то совсем@rm: Спасибо, посмотрю
ну с тем, что clojure не грозит популярность в энтерпрайзе по тем же причинам, что в свое время лиспу -- а именно бизнесу интересно , прости господи "job security index" гораздо более, чем что там "эти программисты думают о языке", ведь в целом согласны?
я вот на FP митап специально подходил к людям, спрашивал, кто в продакшн пишет -- вот те герои
я думаю, что clojure грозит популярность в энтерпрайзе. clojure это лучший друг бизнеса. он помогает сделать что-то быстро, с хорошим качеством. есть псевдоценности менеджеров среднего звена типа "заменяемость программистов". но заменяемость программистов никакого отношения к бизнесу не имеет. к бизнесу имеет отношение: time to market - скорость выведения продукта на рынок, адаптация к новым условиям, т.е. изменение фич в продукте, отсутствие багов, которые трудно ловить. именно clojure тут порвет всех. у нас например взяли за основу java и scala. ну с java все понятно - народ там вечно с напряженными лицами. Они с одной стороны дружно орут про то, что им нужны типы (но не бизнесу!), но с другой стороны - половина кода на java, а вторая половина на Anglular + Javascript. Я вижу боль на лицах Jav'истов когда они пишут на JavaScript. А это, повторяю половина кода проекта. в Clojure код на сервере и клиенте очень похож. Те же коллекции, те же примитивы многопоточности в виде core.async. Коллекции Clojure в браузере куда лучше чем в Java script. Есть и Scala-developer'ы. Но у них все равно - тип User для браузера - одно представление, User для NodeJS другое представление, класс User в Scala это еще одно представление. Я сейчас одного scala-разработчика прокачиваю clojure, так вот он сказал, что в clojure одно представление пользователя и в браузере и в jvm - это мапа. То есть уже кода меньше. Поэтому единственная проблема Clojure сейчас это набрать критическую массу: чтобы первые проекты появились в проде.
Clojure хорош тем, что на любом уровне всегда имеешь дело с функциями и данными. И если видишь перед собой данные, то сделать функцию по их обработке это не сложно. Другое дело - когда в проекте 5 тысяч классов. И когда смотришь на код, то неплохо бы разобраться, что каждый из классов из себя представляет, и так в низ по иерархии.
прежде чем внести изменения. а это влияет на скорость внесения изменений в продукт в соответствии с потребностями бизнеса.
@mike1452: Отлично написал
звучит как теория. Потому что на моей текущей работе есть я, который пишет все на кложе, но есть еще чувак с кучей сервисов на ноде (и ему норм, переучиваться он не желает), есть чувак с парой рубишных сайтиков и есть огромный монолит на пхп, который блин даже поддерживать некому. И вот вздумай сейчас поменять работу эти два чувака, рубиста и тем более js-ника мы найдем, а на кложе за $10/час никто не придет, потому что элитный же язык
интересно насколько будет отлична разработка в clojure когда в нем как в java будет 100500 библиотек и сущностей
@andmed: так все 100500 библиотек на java сразу доступны из коробки на clojure. Rich в этом плане подошел как практик. Он увидел, что развиваются runtime'ы. Поэтому спроектировал Clojure так, чтобы он был hosted-язык. Поэтому Clojure присутствует и в .Net, JavaScript, Java. И код на CLojure может быть переиспользован на любом из рантаймов, исключая низкоуровневое взаимодействие с платформой. Поэтому, когда появится очередной рантайм, clojure со всеми своими либами появится и там.
@andmed: В Clojure нет сущностей, кроме данных и функций. Проектируй систему так, чтобы между ее модулями передавать данные и тогда у тебя комплексити будет на уровне: вот приехали данные из другого модуля {:a 1 😛 2 :c "cool"} надо их обработать в этом модуле и выдать [:a 2 😛 3 :c "done"]. Тогда какая разница, как устроена вся остальная система? Можно тестировать код независимо от чего бы то ни было
@andre: а кто ж знает то? )) поживем увидим. но я думаю, что угрозу нам как программистам несут не другие языки, а сингулярность. недалек тот день, когда программы будут писать программы. тогда мы все останемся мягко говоря не в завидном положении
в этом смысле clojure ее очень сильно приближает своим динамизмом и code as data
я про угрозу языка другому языку котлин тоже умеет в джаваскрипт, пока не очень конечно, но дело времени, и есть иммутабельность и функциональщина, я говорил с джавистами они очень даже смотрят на котлин, кложа их пугает 😞
@rm: Лисп еще отомстит!!!
@rm: кстати говоря, да - 50 лет это срок. Значит есть в Лиспе нечто такое, что помогло ему быть актуальным уже 50 лет. Сколько языков программирования рождается и умирает. Поэтому насчет неких концепций, идей, абстракций Лисп даст фору многим языкам.
@rm: а что такое bus-factor?
что делать с кодом, если человека собьет условный автобус. Ну или он уйдет и не будет больше с тобой общаться
@rm тоже самое что и с водителем автобуса - нанимать нового водителя. )))) эта проблема одинакова вообще для любой специальности. в программном коде нет ничего уникального. любой код переписывается.
оттуда "I maintained Lisp code for a fairly large simulation system back in the late 80's. I don't know how cleanly Paul and associates wrote their code, but some of the stuff I had to maintain was too awful for words. The hackerbastuds that wrote the original system had code writing code writing code, with the end result that I had no way to know what effect a given function would really have on the system without actually running the bloody thing many times and watching what happened. I still wake up panting and sweating in the middle of the night over it." LOL
I had no way to know what effect a given function would really have on the system without actually running the bloody thing many times and watching what happened
эм, мне казалось это именно то что жависты и прочие делают, и тока лисперы с реплом могут этого избежатьвообще красной нитью у Суссмана в его SICP проходит: надо абстрагироваться в смысле know what to not care about. он и сам в видеокурсе в этом признается: порядок если мы не понимаем что там происходит внутри, такой magic. т.е. это вроде как идеология лиспа, а не только тонкости отладки. для AI норм, в остальном... Clojure не лисп, да я его только учу еще, но говоря о наследии Lisp: да, оно такое. требует признания вещей которые не везде принято заявлять
хаха, по ссылке на фогкрик:
"Maybe if meterializes, you could use that stuff exactly where you need it, and stick to something a little less abuse-prone for everything else. "
It may have already materialized. Check out DotLisp ( )
Ken Dyck
Wednesday, February 26, 2003
а кто-нибудь в проект с boot добавлял java исходники? в lein можно было просто к проекту добавить :java-source-paths и все работало, а вот с boot не могу найти ничего похожего
@delaguardo: Задача javac
? Не пробовал.
@dottedmag: кажется то что надо, спасибо
https://news.ycombinator.com/item?id=11174946 приятно читать как лисперы хвалят кложуру