Fork me on GitHub
#clojure-russia
<
2017-07-02
>
mike_ananev06:07:32

проблема с реплами в языках с мутабельными данными, то что программа, например на ОО языке, это сложный граф этих самых изменяемых объектов. и когда мы делаем hot-reload, то пройти по графу и без ошибок поменять все, что надо поменять та еще задача. На практике также оказалось, что добавить идею repl'a после того как создан язык трудно, поскольку нужна новая семантика для многих вещей. Например, что есть стейт в repl и как он живет? и это не то же самое что в стейт в программе.

dottedmag06:07:01

REPL и hot-reload ведь не совсем связаны.

dottedmag06:07:50

А в чём проблема со стейтом в REPL? Это просто ещё один кусочек стейта, не отличающийся от такового при, скажем, сетевом соединении.

mike_ananev07:07:44

вот описание jshell. главы State, Modification, Forward reference, Wrapping

mike_ananev07:07:16

они вводят новую семантику, которой нет в языке

potapenko08:07:24

@artemyarulin я вот тоже живу и в clojure и в es6/react. es6 не вызывает жутких мук как раньше JS. Язык стал даже вполне себе, жить можно и даже хорошо жить, почти не есть кактус как раньше. Зря хаят. Но кложа - это улыбка до ушей, а не “жить можно“. Возвращаюсь к кложе и не перестаю наслаждаться. У меня сервер на кложе, клиент - RN на es6. Так и прыгаю тудa-сюда. Плюс личный проект на RN/-re-frame.

potapenko08:07:59

Cider дебагер вот для себя еще открыл. Классная штука как оказалось. Дебаг никогда не любил, а тут вполне близко к REPL разработке.

potapenko08:07:16

Сейчас переносил код с клиента на сервер. Жуткую библиотеку на JS перенес на кложу. Поэзия, а не код. На кложе естественно. Но понятно что хрен убедишь нард на кложе писать. Особенно менеджеров. У них две крайности, легко и дешево на JS и хорошо и энтерпрайз на джаве. Ну или модный Го, скала. Но не кложа. Почему так сложилось с кложей?

potapenko08:07:54

Нужен массовый разраб. Штучный товар мы. Вот и боится бизнес внедрять. Как заменить если шо?

potapenko08:07:37

Ах да к чему это я 🙂 я про то что JS/ES6 + кложа могут в одно проекте жить. Раньше я прееписывал все с JS на кложу. Увидел такой решение на stack overflow или в доках и давай голову ломать и переписывать на кложу. А теперь вот считаю это дурью. Живет себе у меня JS в отдельной папке, и копи-пастю код и не жужжу. Иногда на JS и написать не грех. Дописать вернее - подправить. И в этом я ощущаю усиление себя как разработчика. Не боюсь руки в этом ужасном JS-е испачкать 🙂 Все для продукта, все для победы...

artemyarulin09:07:02

>Но кложа - это улыбка до ушей, а не “жить можно” а вот что именно? Я на JS (TS) пишу один один как в кложе, блок const, пачка трансформация - return. Буквально пару рез не хватало всякие хелперов mapcat еще может чо, но это быстро написать

potapenko09:07:51

Ну хз. мне мало. у меня много работы с трасфорацией данных. Плюс сильно REPL меня спасает, когда в том же RN дебажить. Тесты в UI я не пишу. Селениум планирую, но это потом. Функционально писать на JS можно, я не спорю. Написал много его, еще на ангуларе/node. Мне тогда даже нравилось. Но кложа меня избаловала. Уже не хватает этой простоты.

artemyarulin09:07:58

>у меня много работы с трасфорацией данных. ну если много то ничего лучше кложуры не существует да

potapenko09:07:15

В целом нужно выбирать язык под задачу, а не сидеть на одном. Я вот для ML выбрал python ибо это стандарт. И не пытаюсь извратиться и на clojure любимой писать сетки. Ибо нафига и 99 процентов примеров на питоне. Tensorflow, PyTorch - тренд. А если настроить jupyter - vim расскладка, так это и REPL и очень даже себе крутой редактор. С realtime автокомлитом и всякими vim приятностями.

dottedmag09:07:56

@mike1452 Да, у языков типа Java проблема есть, но у других императивных языков (Ruby, Python, Perl) -- нет.

dottedmag09:07:08

Да даже у того же Javascript.

dottedmag09:07:14

@potapenko С языком под задачу есть засада — каждый язык усложняет работу operations. Логирование, агрегация трейсбеков, трассировка запросов, мониторинг снаружи и изнутри — всё для каждого языка приходится делать отдельно. В лучшем случае можно обойтись враппером, как в clj и cljs.

a.espolov09:07:12

ммм... "развесистый ui для rest" разве не является как раз тем приложением в котором много трансформации данных?

potapenko09:07:13

согласен, нефиг сущности плодить где не нужно. серверная часть однозначно у меня clojure. Но для ML смысла нет. Пишешь сетку на питоне и дергаешь скрипты эти из консльки из clojure.

dottedmag09:07:41

@a.espolov Зависит от UI. Иногда UI развесистый только потому, что REST развесистый.

a.espolov09:07:04

а REST развесистый потому что команде бекенда лень?)

dottedmag09:07:33

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

a.espolov09:07:00

по мне так любой "энтерпрайз" попадает под твое описание

dottedmag09:07:30

От "толщины" клиента зависит, в общем.

a.espolov09:07:37

@artemyarulin есть какие то проблемы с интерепом в js из cljs? кроме того что вырви глаз?

dottedmag09:07:51

Господа, а кто-нибудь делал hot-reload для серверного кода в CIDER? Я хочу, чтобы код рефрешился по сохранению буфера, а когда мне нужно пересоздать state – я и ручками могу (reset) сказать в REPL.

andre09:07:03

почему вырви глаз? норм все 🙂

dottedmag09:07:20

Т.е. понятно, что можно повешать хук after-save-functions, но наверняка я велосипед изобретаю.

artemyarulin09:07:06

Дак все коллекции нужно конвертить, в обе стороны, export всякий. В RN всякая (.-default (js/require “blalba”)) как речь заходит о ес6. Ес6 класс заюзать дак тоже через одно место (уже и не помню как там это писать)

artemyarulin09:07:38

+ сам CLJS в своей песочнице сидит, не видел не одной либы CLJS залитой на NPM чтоб из JS народ юзал. Есть кложарс - все туда

artemyarulin09:07:14

ну и про трансофрмации, вот: https://pbs.twimg.com/media/DDrL-FXWsAEVFe3.jpg 3к строк сконвертил в 4.5к строк на ТС. Кол-во reduce больше как раз для случаев когда апи TS не позволяло нормально написать (update-in, etc.) и приходилось так

a.espolov09:07:14

но так же куча вилок появилось)))

artemyarulin09:07:22

я это не холиварю, сори если чо - Clojure(/Script) это лучше что у меня случилось в моей карьере 🙂

akond12:07:43

artemyarulin: впиливать одно удовольствие, а выпиливать другое?

a.espolov09:07:28

тяжело судить хорошо это или плохо правда

artemyarulin09:07:11

эт да, но это на самом деле явная обработка ошибок - почти все возвращает T | Error (аля either) if для обработки их

a.espolov09:07:19

важно узнать чужой взгляд

artemyarulin09:07:32

кста - количество filter стало меньше ибо в TS/JS есть find 😛

akond11:07:30

да, кстати, а откуда взялась идея 10x ?

mike_ananev11:07:28

@artemyarulin то что вилок появилось в 2 раза больше, это более объективная оценка LOC, чем подсчет строк кода.

y.khmelevskii13:07:48

@artemyarulin с помощью какой утилиты ты посчитал то, что на скрине выше?

y.khmelevskii13:07:52

Там красивый вывод, думаю врятли это grep

akond13:07:25

красивый вывод он сделал потом, видимо

akond13:07:23

про греп он в твитере писал

y.khmelevskii15:07:07

понял. спасибо

artemyarulin15:07:56

красивый вывод - org-mode table и да - тулзы тока греп. Про кол-во if - обработка ошибок в clojure коде было на отись, в TypeScript типы форсят обрабатывать все кейсы

artemyarulin16:07:12

>да, кстати, а откуда взялась идея 10x ? ну это по аналогии с 10x developer

akond16:07:37

из коммента на твитере что-ли? разве к этому можно относиться серьёзно?

akond16:07:42

вчерась только смотрел выступление нолена на infoq. тот говорит, что выбор языка вторичен. Важен, но не имеет решающего значения.

akond16:07:37

самый большой затык, это люди.

artemyarulin16:07:45

ну при таком подходе победит пхп troll

akond16:07:56

победит что?

artemyarulin17:07:20

ну людей кто на пхп кодит очень много, на кложе 1.5 человека, так что затык еще тот

akond17:07:12

важно не количество, а качество

akond17:07:17

хотя...

akond17:07:31

когда как )

akond17:07:03

@artemyarulin вот зря ты на пхп бочку катишь. нормальный язык (для того, для чего он сделан).

artemyarulin17:07:42

каюсь - я видел только один пример оттуда:

echo "foo" == TRUE;
echo "foo" == "foo";
echo "foo" == 0;
// output
111

akond17:07:33

нормально

akond17:07:51

в том смысле, что для пхп

artemyarulin17:07:38

ну ооокей, тогда сори, я на нем не писал, может и впрям хаять не прально harold

akond17:07:49

ну уж точно лучше, чем перл

akond17:07:46

мне не даёт покоя вопрос: что всё-таки лучше, типизированный язык или нетипизированный?

artemyarulin17:07:53

для прототипов/стартапов - динамика, если проект больше года проживет или растет быстро, то типы помогают

akond17:07:41

а почему нельзя компенсировать отстуствие типов, например, спекой или pre/post conditions?

akond17:07:35

тесты, опять же

artemyarulin17:07:36

я поэтому и написал что помогают. С ними быстрее, не надо тесты запускать чтоб понять что у меня опечатка где. Не надо писать 3 тест кейса или запускать property based generator чтоб понять что у меня union type ErrorNotFound | ErrorTimeout | Customer не полностью обработан

artemyarulin17:07:12

не скажу у кого самая большая dynamic language code base - но слышал что в дропбоксе много (= сотни тысяч сторок) кода на питоне и ничо - работает норм же. Хотя в итоге наняли Гвидо и тот типы в питон добавляет 🙂

dottedmag17:07:56

@akond Нет, не нормальный. Количество случайной сложности в PHP выше даже, чем в перле: https://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/

akond17:07:26

я писал и на том, и на том.

akond17:07:33

по мне пхп лучше.

dottedmag17:07:25

Я тоже писал и на том, и на том. В перле нужно много запоминать конструкций и контектса, а в PHP нужно тупо зубрить.