Fork me on GitHub
#clojure-russia
<
2016-03-06
>
rm04:03:19

artemyarulin: мне понравилось использовать defrecord вместе с протоколами. Вернее, там нет другого выхода, но сам протокол писать и две реализации, а потом все это использовать -- получилось отлично

rm04:03:31

ща откопаю, как чувак core.matrix делал

az06:03:48

вот вы тут развели … @mike1452: @fxposter получается все языки функциональны?

az06:03:47

вообще фп это про “стиль” или про язык?

az06:03:07

мне кажется в ФП много стилевого

az06:03:07

после знакомства с фп у меня бомбит от названия метода класса являющегося глаголом

az06:03:04

или от доступа к instance_variable обьекта не через аттрибуты

az06:03:27

или от того, что один и тот же метод может вернуть данные разного типа

az06:03:13

или от того, что кто-то пишет в руби коде

def blabla
  return if mamke_privet?
   ….
  ….
end
и называет это гардом

az06:03:17

не знаю что это, стиль, образ мышления, ещё что-то, но мне кажется, что в этом больше ФП, чем в структурах данных, хитрых способах канкаренси и прочего

mike_ananev06:03:09

@az: не зря говорят, если вы даже не собираетесь программировать на Lisp/Clojure, то стоит познакомится с теми концепциями, которые есть в этих языках, потому что вы как программист станете лучше. Поэтому оформлять в функциональном стиле можно в разных языках. Но степень удобности оформления кода в функциональном стиле у всех языков разная. Понятное дело, 2 свойство ФЯ приведенное мной, в части "функции можно динамически создавать во время исполнения" создать не получится ни в одном типизированном языке. Сохранить функции в структуру данных, уже сложнее или не идеоматично для многих языков. Где-то была статья, где один программист рассматривал разработку на Java в функциональном стиле. Это можно было делать, но код был таков, что остальная команда разработчиков просто расстанется с таким функциональщиком, ибо джавийный код в функциональном стиле становится резко чужеродным по сравнению с обычным стилем в Java

mike_ananev07:03:10

@az: как правило, разработка ведется в команде. если один программист будет писать "правильно" вместо модификации переменной, возвращать новое значение, не изменяя старого, то такой подход могут исповедовать не все разрабы в команде. и кто-то точно изменит переменную там, где этого не ждешь. если в языке принудительно запрещена модификация данных, то язык не оставляет просто выбора и тем самым толкает на функциональный стиль. Без иммутабельных коллекций очень трудно в языке не модифицировать существующие значения, потому что код станет резком медленным. Если в векторе 1000000 значений и мы хотим вставить посередине новое значение, то возвращать 10000001 новый вектор очень накладно. поэтому Рич крут в том, что он сделал все структуры данными в виде двоичных деревьев с почти константной скоростью вставки, что дало возможность работать с иммутабельными структурами в языке.

az07:03:00

ну ты почти подтвердил мои слова

az07:03:43

получается есть команды, где у каждого свой стиль кунг-фу, но при этом есть “правильные” языки, которые поощряют только стиль "кобры"

mike_ananev07:03:29

@az просто количество таких принципов или "улучшений" языка Clojure привело в другое качество языка. получился очень хорошо спроектированный язык, где если и выстрелил себе в ногу, то это явно видно где.

artemyarulin07:03:03

вроде Ричи грил “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 но все равно не, не то совсем

artemyarulin07:03:32

@rm: Спасибо, посмотрю

andmed07:03:47

ну с тем, что clojure не грозит популярность в энтерпрайзе по тем же причинам, что в свое время лиспу -- а именно бизнесу интересно , прости господи "job security index" гораздо более, чем что там "эти программисты думают о языке", ведь в целом согласны?

andmed07:03:29

я вот на FP митап специально подходил к людям, спрашивал, кто в продакшн пишет -- вот те герои

mike_ananev08:03:33

я думаю, что 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 сейчас это набрать критическую массу: чтобы первые проекты появились в проде.

mike_ananev08:03:46

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

mike_ananev08:03:33

прежде чем внести изменения. а это влияет на скорость внесения изменений в продукт в соответствии с потребностями бизнеса.

artemyarulin08:03:20

@mike1452: Отлично написал

andre08:03:53

не отожрет ли котлин энтерпрайз?

rm08:03:02

звучит как теория. Потому что на моей текущей работе есть я, который пишет все на кложе, но есть еще чувак с кучей сервисов на ноде (и ему норм, переучиваться он не желает), есть чувак с парой рубишных сайтиков и есть огромный монолит на пхп, который блин даже поддерживать некому. И вот вздумай сейчас поменять работу эти два чувака, рубиста и тем более js-ника мы найдем, а на кложе за $10/час никто не придет, потому что элитный же язык

rm08:03:27

bus-factor, на самом деле, очень важная вещь

andmed08:03:04

@mike1452: я целиком за

andmed08:03:09

интересно насколько будет отлична разработка в clojure когда в нем как в java будет 100500 библиотек и сущностей

andmed08:03:39

комплексити наращивать

mike_ananev08:03:28

@andmed: так все 100500 библиотек на java сразу доступны из коробки на clojure. Rich в этом плане подошел как практик. Он увидел, что развиваются runtime'ы. Поэтому спроектировал Clojure так, чтобы он был hosted-язык. Поэтому Clojure присутствует и в .Net, JavaScript, Java. И код на CLojure может быть переиспользован на любом из рантаймов, исключая низкоуровневое взаимодействие с платформой. Поэтому, когда появится очередной рантайм, clojure со всеми своими либами появится и там.

mike_ananev08:03:39

@andmed: В Clojure нет сущностей, кроме данных и функций. Проектируй систему так, чтобы между ее модулями передавать данные и тогда у тебя комплексити будет на уровне: вот приехали данные из другого модуля {:a 1 😛 2 :c "cool"} надо их обработать в этом модуле и выдать [:a 2 😛 3 :c "done"]. Тогда какая разница, как устроена вся остальная система? Можно тестировать код независимо от чего бы то ни было

mike_ananev08:03:36

@andre: а кто ж знает то? )) поживем увидим. но я думаю, что угрозу нам как программистам несут не другие языки, а сингулярность. недалек тот день, когда программы будут писать программы. тогда мы все останемся мягко говоря не в завидном положении

mike_ananev08:03:23

в этом смысле clojure ее очень сильно приближает своим динамизмом и code as data

andre09:03:07

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

rm09:03:22

mike1452: говорили лисперы 50 лет назад :)

mike_ananev09:03:06

@rm: Лисп еще отомстит!!!

mike_ananev09:03:05

@rm: кстати говоря, да - 50 лет это срок. Значит есть в Лиспе нечто такое, что помогло ему быть актуальным уже 50 лет. Сколько языков программирования рождается и умирает. Поэтому насчет неких концепций, идей, абстракций Лисп даст фору многим языкам.

andmed09:03:36

много-пара-диг-мен-ность

mike_ananev09:03:24

@rm: а что такое bus-factor?

rm09:03:40

что делать с кодом, если человека собьет условный автобус. Ну или он уйдет и не будет больше с тобой общаться

mike_ananev09:03:14

@rm тоже самое что и с водителем автобуса - нанимать нового водителя. )))) эта проблема одинакова вообще для любой специальности. в программном коде нет ничего уникального. любой код переписывается.

andmed09:03:25

сразу байка про магазин ebay вспоминается. переписали)

rm09:03:38

и про ПО в аэропортах

andmed09:03:56

yahoo store то есть

andmed09:03:55

оттуда "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

artemyarulin09:03:41

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
эм, мне казалось это именно то что жависты и прочие делают, и тока лисперы с реплом могут этого избежать

andmed09:03:20

это реальный имидж. с ним жить)

andmed10:03:48

вообще красной нитью у Суссмана в его SICP проходит: надо абстрагироваться в смысле know what to not care about. он и сам в видеокурсе в этом признается: порядок если мы не понимаем что там происходит внутри, такой magic. т.е. это вроде как идеология лиспа, а не только тонкости отладки. для AI норм, в остальном... Clojure не лисп, да я его только учу еще, но говоря о наследии Lisp: да, оно такое. требует признания вещей которые не везде принято заявлять

artemyarulin14:03:20

хаха, по ссылке на фогкрик:

"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

delaguardo18:03:33

а кто-нибудь в проект с boot добавлял java исходники? в lein можно было просто к проекту добавить :java-source-paths и все работало, а вот с boot не могу найти ничего похожего

dottedmag18:03:56

@delaguardo: Задача javac? Не пробовал.

delaguardo18:03:25

@dottedmag: кажется то что надо, спасибо

artemyarulin18:03:26

https://news.ycombinator.com/item?id=11174946 приятно читать как лисперы хвалят кложуру

andmed19:03:42

непонятен выбор квадратных скобок для let. с лиспа странно -- круглые круглые и бац... не вектор. почему квадратные?

andmed19:03:27

а... вектор