This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2017-07-02
Channels
- # aleph (14)
- # boot (4)
- # cider (3)
- # clara (1)
- # cljs-dev (62)
- # cljsrn (20)
- # clojure (81)
- # clojure-berlin (2)
- # clojure-russia (76)
- # clojure-spec (35)
- # clojure-turkiye (1)
- # clojurescript (84)
- # cursive (2)
- # data-science (6)
- # datomic (4)
- # hoplon (92)
- # lumo (35)
- # om-next (1)
- # pedestal (2)
- # re-frame (2)
- # reagent (36)
- # ring-swagger (10)
- # unrepl (30)
- # untangled (124)
проблема с реплами в языках с мутабельными данными, то что программа, например на ОО языке, это сложный граф этих самых изменяемых объектов. и когда мы делаем hot-reload, то пройти по графу и без ошибок поменять все, что надо поменять та еще задача. На практике также оказалось, что добавить идею repl'a после того как создан язык трудно, поскольку нужна новая семантика для многих вещей. Например, что есть стейт в repl и как он живет? и это не то же самое что в стейт в программе.
А в чём проблема со стейтом в REPL? Это просто ещё один кусочек стейта, не отличающийся от такового при, скажем, сетевом соединении.
вот описание jshell. главы State, Modification, Forward reference, Wrapping
они вводят новую семантику, которой нет в языке
@artemyarulin я вот тоже живу и в clojure и в es6/react. es6 не вызывает жутких мук как раньше JS. Язык стал даже вполне себе, жить можно и даже хорошо жить, почти не есть кактус как раньше. Зря хаят. Но кложа - это улыбка до ушей, а не “жить можно“. Возвращаюсь к кложе и не перестаю наслаждаться. У меня сервер на кложе, клиент - RN на es6. Так и прыгаю тудa-сюда. Плюс личный проект на RN/-re-frame.
Cider дебагер вот для себя еще открыл. Классная штука как оказалось. Дебаг никогда не любил, а тут вполне близко к REPL разработке.
Сейчас переносил код с клиента на сервер. Жуткую библиотеку на JS перенес на кложу. Поэзия, а не код. На кложе естественно. Но понятно что хрен убедишь нард на кложе писать. Особенно менеджеров. У них две крайности, легко и дешево на JS и хорошо и энтерпрайз на джаве. Ну или модный Го, скала. Но не кложа. Почему так сложилось с кложей?
Нужен массовый разраб. Штучный товар мы. Вот и боится бизнес внедрять. Как заменить если шо?
Ах да к чему это я 🙂 я про то что JS/ES6 + кложа могут в одно проекте жить. Раньше я прееписывал все с JS на кложу. Увидел такой решение на stack overflow или в доках и давай голову ломать и переписывать на кложу. А теперь вот считаю это дурью. Живет себе у меня JS в отдельной папке, и копи-пастю код и не жужжу. Иногда на JS и написать не грех. Дописать вернее - подправить. И в этом я ощущаю усиление себя как разработчика. Не боюсь руки в этом ужасном JS-е испачкать 🙂 Все для продукта, все для победы...
>Но кложа - это улыбка до ушей, а не “жить можно” а вот что именно? Я на JS (TS) пишу один один как в кложе, блок const, пачка трансформация - return. Буквально пару рез не хватало всякие хелперов mapcat еще может чо, но это быстро написать
Ну хз. мне мало. у меня много работы с трасфорацией данных. Плюс сильно REPL меня спасает, когда в том же RN дебажить. Тесты в UI я не пишу. Селениум планирую, но это потом. Функционально писать на JS можно, я не спорю. Написал много его, еще на ангуларе/node. Мне тогда даже нравилось. Но кложа меня избаловала. Уже не хватает этой простоты.
>у меня много работы с трасфорацией данных. ну если много то ничего лучше кложуры не существует да
В целом нужно выбирать язык под задачу, а не сидеть на одном. Я вот для ML выбрал python ибо это стандарт. И не пытаюсь извратиться и на clojure любимой писать сетки. Ибо нафига и 99 процентов примеров на питоне. Tensorflow, PyTorch - тренд. А если настроить jupyter - vim расскладка, так это и REPL и очень даже себе крутой редактор. С realtime автокомлитом и всякими vim приятностями.
@mike1452 Да, у языков типа Java проблема есть, но у других императивных языков (Ruby, Python, Perl) -- нет.
@potapenko С языком под задачу есть засада — каждый язык усложняет работу operations. Логирование, агрегация трейсбеков, трассировка запросов, мониторинг снаружи и изнутри — всё для каждого языка приходится делать отдельно. В лучшем случае можно обойтись враппером, как в clj и cljs.
ммм... "развесистый ui для rest" разве не является как раз тем приложением в котором много трансформации данных?
согласен, нефиг сущности плодить где не нужно. серверная часть однозначно у меня clojure. Но для ML смысла нет. Пишешь сетку на питоне и дергаешь скрипты эти из консльки из clojure.
@a.espolov Зависит от UI. Иногда UI развесистый только потому, что REST развесистый.
Я вспоминаю какой-нибудь интерфейс заполнения налоговых деклараций с их формочками, аттачами, и спецполями. Сиди себе и долби экран за экраном прямо по схеме из бэкенда.
@artemyarulin есть какие то проблемы с интерепом в js из cljs? кроме того что вырви глаз?
Господа, а кто-нибудь делал hot-reload для серверного кода в CIDER? Я хочу, чтобы код рефрешился по сохранению буфера, а когда мне нужно пересоздать state – я и ручками могу (reset)
сказать в REPL.
Т.е. понятно, что можно повешать хук after-save-functions
, но наверняка я велосипед изобретаю.
Дак все коллекции нужно конвертить, в обе стороны, export всякий. В RN всякая (.-default (js/require “blalba”)) как речь заходит о ес6. Ес6 класс заюзать дак тоже через одно место (уже и не помню как там это писать)
+ сам CLJS в своей песочнице сидит, не видел не одной либы CLJS залитой на NPM чтоб из JS народ юзал. Есть кложарс - все туда
ну и про трансофрмации, вот: https://pbs.twimg.com/media/DDrL-FXWsAEVFe3.jpg 3к строк сконвертил в 4.5к строк на ТС. Кол-во reduce больше как раз для случаев когда апи TS не позволяло нормально написать (update-in, etc.) и приходилось так
я это не холиварю, сори если чо - Clojure(/Script) это лучше что у меня случилось в моей карьере 🙂
эт да, но это на самом деле явная обработка ошибок - почти все возвращает T | Error
(аля either) if для обработки их
кста - количество filter стало меньше ибо в TS/JS есть find
😛
@artemyarulin то что вилок появилось в 2 раза больше, это более объективная оценка LOC, чем подсчет строк кода.
@artemyarulin с помощью какой утилиты ты посчитал то, что на скрине выше?
Там красивый вывод, думаю врятли это grep
понял. спасибо
красивый вывод - org-mode table и да - тулзы тока греп. Про кол-во if - обработка ошибок в clojure коде было на отись, в TypeScript типы форсят обрабатывать все кейсы
>да, кстати, а откуда взялась идея 10x ? ну это по аналогии с 10x developer
вчерась только смотрел выступление нолена на infoq. тот говорит, что выбор языка вторичен. Важен, но не имеет решающего значения.
ну при таком подходе победит пхп
ну людей кто на пхп кодит очень много, на кложе 1.5 человека, так что затык еще тот
@artemyarulin вот зря ты на пхп бочку катишь. нормальный язык (для того, для чего он сделан).
каюсь - я видел только один пример оттуда:
echo "foo" == TRUE;
echo "foo" == "foo";
echo "foo" == 0;
// output
111
ну ооокей, тогда сори, я на нем не писал, может и впрям хаять не прально
мне не даёт покоя вопрос: что всё-таки лучше, типизированный язык или нетипизированный?
для прототипов/стартапов - динамика, если проект больше года проживет или растет быстро, то типы помогают
а почему нельзя компенсировать отстуствие типов, например, спекой или pre/post conditions?
я поэтому и написал что помогают. С ними быстрее, не надо тесты запускать чтоб понять что у меня опечатка где. Не надо писать 3 тест кейса или запускать property based generator чтоб понять что у меня union type ErrorNotFound | ErrorTimeout | Customer
не полностью обработан
не скажу у кого самая большая dynamic language code base - но слышал что в дропбоксе много (= сотни тысяч сторок) кода на питоне и ничо - работает норм же. Хотя в итоге наняли Гвидо и тот типы в питон добавляет 🙂
@akond Нет, не нормальный. Количество случайной сложности в PHP выше даже, чем в перле: https://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/