metaclass: (Default)
[personal profile] metaclass
Ребе айсед регулярно пытается убедить меня использовать емакс для разработки на Clojure.
Ну, безотносительно к юзабилити, которое там странное, есть две вещи которые я в принципе не в состоянии понять:
1) Как сочетается редактирование текста и REPL? Одно - редактор файлов, второе, условно говоря, "командная строка).
2) Любой код работает не сам по себе, а в контексте 100500 внешних зависимостей, т.е. чтобы выполнить определенную функцию - ее надо, как минимум, загрузить со всеми жабьими зависимостями и рядом лежащими функциями, а как максимум - еще передать ей пару тыщ записей из базы данных.

То же самое касается любых языков с REPL - хаскель, скала, F# итд

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

Date: 2013-03-23 05:30 pm (UTC)
From: [identity profile] jk4r.livejournal.com
В одном буфере код, в другом репл. Какие проблемы?

Date: 2013-03-23 05:47 pm (UTC)
From: [identity profile] lelf.livejournal.com
В emacs'е так и делают. REPL в соседнем буфере. При этом им подают кучу плюшек вроде eval-region и :reload по hot keys.

Date: 2013-03-23 06:14 pm (UTC)
From: [identity profile] axexa.livejournal.com
eval-region и :reload по hot keys.

а что это такое?

Date: 2013-03-23 06:26 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Если по контексту, то "выполнить текущий кусок из редактора в репле" и "перезагрузить отредактированный код в работающем процессе".
Я вот думаю, что мне надо такое же сделать в sublime text и тогда наступит всеобщее счастие :)

Date: 2013-03-23 06:28 pm (UTC)
From: [identity profile] xeno-by.livejournal.com
О! Когда сделаете, расскажите мне :)

Date: 2013-03-23 08:25 pm (UTC)
From: [identity profile] andrew kondratovich (from livejournal.com)
пытался. не осилил. саблайм все-таки сосет в этом плане у емакса.

вообще емакс идеален для разработки на кложуре. но у меня никак руки не доходят задрочится - автопилот хоткеи не подхватывает. через пол часа задалбывает в доки подсматривать. но интеграция с рантаймом на высоте.

в емаксе обычно 2+ буффера. сорсы + репл + .... при этом репл обычно запущен в контексте проекта. по поводу релоуда кода - https://github.com/clojure/tools.namespace отлично справляется - там можно подсунуть фазы шутдауна и бутстрапа конктекста.

Date: 2013-03-23 09:07 pm (UTC)
From: [identity profile] klonkaktusa.livejournal.com
с новым leinом не работает

https://github.com/wuub/SublimeREPL/issues/48

Date: 2013-03-23 06:31 pm (UTC)
From: [identity profile] prepor.livejournal.com
2) А редактору кода не нужно сделать тоже самое? Хотя бы что бы атокомплит включить, документацию показать, на исхдники внешней функции прыгнуть.

Действий тупо меньше надо. И

> отдельно редактор текста, отдельно постоянно запущенный REPL, в котором редактируемый код доступен со всеми потрохами, необходимыми для его запуска

определяется только один раз, и

> Т.е. я редактирую код, затем делаю перезагрузку кода в репле и затем запускаю функции из него.

редактирую код = делаю перезагрузку кода. Никуда не переключаясь. Со всем ошибками компиляции. Со всеми макроэкспандами любого кусочка кода.

Вообще, мне, как человеку перешедшего на емакс ТОЛЬКО из-за кложуры, довольно сложно представить как на ней можно писать где-то еще. Я, конечно, свои 20 баксов на lighttable дал, но далеко не факт, что из него что-то выйдет :)

Но и первое утверждени тоже весьма спорно. Различий между "коммандной строкой" и редактором файлов куда меньше, когда речь идет о нормальных языках (кложуре, хехе).

Date: 2013-03-23 06:54 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Так я не хочу делать перезагрузку при редактировании, я Ctrl-S выполняю гораздо чаще, чем надо перезагружать. Впрочем, вот коммит в контроль версий я делаю практически всегда синхронно с проверкой в репле (иногда после нее, чтобы коммиттить только заведомо работоспособное).

Date: 2013-03-23 07:02 pm (UTC)
From: [identity profile] prepor.livejournal.com
Это я озвучил свой кейс, это не значит что можно только так, это ж емакс :) Я всегда выполняю C-c C-k (загрузить в репл текущий буфер), одновременно сохраняется файл. Можно жмакать C-x C-s (сохранить). Но не совсем понятно зачем, когда загрузка в репл проходит за доли секунды, заодно обновляя всё дев-окружение и вываливая ошибки компиляции. Тем более для меня интерактивность разработки на кложе это процентов 50 крутости кложи по сравнению с оcтальным мейнстримом :)

Date: 2013-03-23 06:40 pm (UTC)
From: [identity profile] tretiy3.livejournal.com
буквально же.
ты меняешь одну ф-ию и забрасываешь ее в приложение одним шорткатом. прям курсор у тебя стоит внутри этой ф-ии и ты ее забрасываешь. одну ф-ию а не 100500 тыщ строк кода.
каким образом ты из "командной строки" забросишь ф-ию?
файл забросишь, да. но там же х.з. что в этом файле то. у тебя там может макрос разворачивается на каждое чтение.
а по второму пункту - это вообще не правда для лиспа. никаких зависимостй нет у ф-ии. она чистая. все по value работает.

Date: 2013-03-23 06:57 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Из редактора функцию нету смысла забрасывать, она не заработает.

Особенно у функций нет зависимостей. Даже если она чистая - у нее статик зависимостей на библиотеки-classpath и соседние чистые функции сотни штук, реально. У меня в коде функций, которые зависят только от clojure.core сильно меньше половины.

Date: 2013-03-23 07:09 pm (UTC)
From: [identity profile] prepor.livejournal.com
про отсутствие зависимостей у функции бред конечно, но это не значит, что это не работает всё ) Когда пилишь функцию все окружение уже загружено (иначе то как?!), и для определения одной маленькой функции может быть влом загружать весь буфер опять, тем более там может быть что-то еще не дописано. C-M-x и все, функция загружена, запустили, о збс, идем дальше.

+ тесты конечно. Моментальный запуск тестов, с красивой подсветкой мест ошибок и тремя видами дифов для is-макросов. Прелесть. Как вы живете без этого?

Date: 2013-03-23 07:52 pm (UTC)
From: [identity profile] golikov konstantine (from livejournal.com)
так например lein repl умеет в зависимости (правда сначало надо писать всякие use/require...), разве емакс так не может?

Date: 2013-03-24 11:14 am (UTC)
From: [identity profile] theiced.livejournal.com
что нрепл что костылизм со слаймом работают с лейн проектами же.

Date: 2013-03-23 07:00 pm (UTC)
From: [identity profile] swizard.livejournal.com
Я точно не знаю, но, вероятно, можно найти в сети скринкасты для slime с кложурью, чтобы ознакомиться с примерами использования.

Для common lisp slime строго обязателен, что касается кложури -- то я просто не в курсе, насколько там глубоко произведена интеграция. Если так же, как в КЛ, то емакс освоить, безусловно, стоит.

Date: 2013-03-23 07:06 pm (UTC)
From: [identity profile] prepor.livejournal.com
слайм для кложи отсосал и теперь депрекейтед. nrepl + nrepl.el

Date: 2013-03-23 07:17 pm (UTC)
From: (Anonymous)
clojure-swank отсосал у slime и теперь депрекейтед.
Fixed

Date: 2013-03-24 11:15 am (UTC)
From: [identity profile] theiced.livejournal.com
там и с той и с той стороны пидорасы. но в приципе похуй - нпрепл искаропки гуманнее слайма, слайм имеет больше адовых возможностей которые щемта не особо нужны.

Date: 2013-03-24 07:13 pm (UTC)
From: [identity profile] blackyblack.livejournal.com
По правде говоря, репл из емакса это баловство, как и шелл или мейк из емакса. Нихера не удобно и нихера не заменяет нормальной работы со сборкой, деплоем и наблюдением за логами. Всё на что годится репл из иде - это прогнать только что написанную функцию на произвольных параметрах.

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 7th, 2025 06:44 pm
Powered by Dreamwidth Studios