LINUX.ORG.RU

среда для clojure: emacs или vscode?

 , ,


0

2

Недавно пришлось настраивать среду разработки для окамля. Плагины для vscode оказались пшиком, емакс помог. Какова ситуация с clojure? Среды от jetbrains почему-то не вызывают восторга, но можно тоже рассмотреть.

Контекст: я более-менее свободно работаю в Common Lisp в slime в emacs, хотя последние годы это было крайне редко (на лиспе стал писать в своей оболочке «Яр»). В остальном мой любимый редактор - это VSCode. Скорее всего, если буду играть в clojure, там же будет и что-то другое, связанное с java, js, clojurescript. Т.е. всеядность среды тоже имеет значение. В Емакс я только с лиспом действительно много работал, к остальному не знаю даже, как подступиться.

★★★★★

Последнее исправление: den73 (всего исправлений: 1)
Ответ на: комментарий от byko3y

Ты не поверишь, но я потратил пару дней на Clojure, читал доки, писал хело ворлды. Вывел для себя «интересный язык, надо как-нибудь слабать на нем проектик, заодно посмотреть как оно работает».

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

Но вот так индустрия работает, что на бэке нужен PHP и Python — никто не хочет видеть твой лисп, даже с Clojure не особенно охотно связываются, а только под соусом жавы.

Ты можешь сказать - рыночек порешал. Скорее тогда копроэкономика, но это также не корень причины, как я уже объяснил. Потому-что принимают решения менеджеры, а так как своего собственного мнение технарски-грамотного у них нет, им приходится слушать программистов, а большинство программистов, так и не вкатившись в лисп, мнения о нем так же грамотного иметь не могут. Да и зачем: им пацаны в подъезде под пиво рассказали за силушку php и плюсов, про то что макросы - это такие функции компайлтайма, про то что DSL - это много языков в одном языке и что читать это естественно невозможно. И в конце-концов получается так, что никто ниче конкретно не знает, но всем всё понятно.

Вот посмотри на http://news.ycombinator.com. Это типичный такой проект на лиспе, написанный в одно рыло — еще более убогий по фичам, чем LOR, который, если я не ошибаюсь, тоже писан в одно рыло. С таким же успехом такой сайт можно было написать в одиночку и на питоне, и на PHP. С большой разницей: на Java/PHP/Python можно было бы найти кодера, который бы за еду доработал тебе сайт до какого-то более менее адекватного состояния. Потому что вести обсуждение на news.ycombinator.com крайне неудобно, в результате чего обсуждений там почти нет, а есть только одиночные ответы от случайных мимопроходящих людей. Поиска тоже можно считать нет. Отбор сообщений по тематике? А вот напиши в начале сообщения в квадратных скобочках волшебное слово — и твое сообщение попадет в один из пяти гвоздями прибитых разделов в шапке. То есть, такое ощущение, будто сайт писал школьник за неделю, и получил за эту работу ящик пива.

Ты делаешь выводы на основе каких-то косвенных признаков (опять). Я не знаю почему на HN не запили поиск. Может это им было не нужно - это не их основной бизнес. Может это было не так просто как кажется. Комменты как комменты, как по мне - сделаны как надо, все видно на одной странице, ничего не надо подгружать, кто кому ответил - ясно. А не это блевотворство на реддите где что бы прочитать ветку нужно подгрузить новую страницу. (А для поиска на hn кстати есть алголия.)

Можешь почитать небезызвестную статью чувака который запилил ycombinator, там он пишет про viaweb и лисп, и у него другое мнение на счет фич.

Пфт. Фичей. В проектах на лиспе не нашел он фичей. И про Emacs он конечно тоже не слышал.

Я убил лисп, что ли? У меня даже компа не было, когда он уже умер. Он весьма быстро перешел из разряда «еще не нужен» в «уже не нужен». Я в эти годы читал книги по MS DOS и бейсику, и программировал на бумажке. Васик, который еще более убог, чем питон — и тот был востребован. Ты думаешь, что я работаю с питоном, потому что это такой замечательный язык? Нет, просто он нынче есть в каждом чайнике, а если я смогу при помощи магии сделать из говна конфетку, то убью сразу двух зайцев: потешу свое ЧСВ, и пропишу железобетонное доказательство способностей архитектора в резюме.

Нет, лично ты его не убил, но его закопали люди с таким подходом как у тебя - «я точно не знаю, но для себя выводы сделал». А теперь они просто поддерживают статус кво. Только вот заметь, закопали то закопали, но сказать что он умер-то и нельзя.

Аристарх.

anonymous
()
Ответ на: комментарий от anonymous

Параллели с другими языками провести успел, а поглубже вникнуть в сам язык еще нет.

идеальное время что бы посраться на ЛОРе, тащемта

anonymous
()
Ответ на: комментарий от anonymous

Я билеты купил, а кина нет …

anonymous
()
Ответ на: комментарий от anonymous

Каков финал?

Все враги обоссаны, я же и мои друзья стоят в белоснежных фраках.

Спецолимпиада по соглосованию значения терминов еще не подошла к концу, но она мало какое имеет отношение к исусству.

Я билеты купил, а кина нет …

И уже не будет: киноленты утопило в брызгах, прожектор вдребезги. Ищите себе новый театр.

anonymous
()
Ответ на: комментарий от anonymous

не мимо, это тебе в глаза попало

anonymous
()
Ответ на: комментарий от byko3y

AST нельзя сохранить на диск, потому что это связанные ссылками объекты данных, у них самих по себе нет текстового представления.

CL-USER> (let ((list (loop :for x :on '(1 2 3)
                           :collect x)))
           (setf (cdr (last list))
                 list)
           list)
#1=((1 . #2=(2 . #3=(3))) #2# #3# . #1#)
CL-USER> 
ados ★★★★★
()
Ответ на: комментарий от ados

Шутка

Как сказал бы Хазанов

Раз есть списки, значит существует Lisp.  
Раз есть Lisp, значит существуют списки.
Ныне списки лучше живут чем Lisp.

Владимир 123

anonymous
()
Ответ на: комментарий от byko3y

AST нельзя сохранить на диск, потому что это связанные ссылками объекты данных, у них самих по себе нет текстового представления.

CL-USER> (let ((list (loop :for x :on '(1 2 3)
                           :collect x)))
           (setf (cdr (last list))
                 list)
           list)
#1=((1 . #2=(2 . #3=(3))) #2# #3# . #1#)
CL-USER> (with-output-to-string (out)
           (prin1 * out))
"#1=((1 . #2=(2 . #3=(3))) #2# #3# . #1#)"
CL-USER> (with-input-from-string (in *)
           (read in))
#1=((1 . #2=(2 . #3=(3))) #2# #3# . #1#)
CL-USER> 
ados ★★★★★
()
Ответ на: комментарий от alienclaster

«In computing, object code or object module is the product of a compiler.[1] In a general sense object code is a sequence of statements or instructions in a computer language,[2] usually a machine code language (i.e., binary) or an intermediate language such as register transfer language (RTL)».
Что тут непонятно? gcc RTL посмотри на что похоже вообще

И что ты хочешь сказать? Что байткод питона, где каждая третья команда является запросом по строковому ключу ассоциативного массива — это ассемблероподобный код? Так называй уже и сам питон ассемблером — у нас тут есть один такой, который говорит, что питон = Си.

В питоне результат трансляции сохраняется на диск для ускорения последующей трансляции — это каким-то образом внезапно стало компиляцией?

А какой это был вид трансляции? Правильно, это компиляция и была

Хорошо, я согласен. А интерпретатор — подвид компилятора.

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

Если это так, это чисто проблемы питона, джавовские бинари вполне себе переносятся - но у тебя и джава интерпретатор

С жавой можно еще о чем-то поспорить. Например, в байткоде жавы ссылки на поля-методы не называются, то есть часть информации из исходников потеряна. В случае питона байткод является почти 1 к 1 отображением исходников.

Почему интерпретатор не должен транслировать целиком весь исходник-команду?

По определению

AST нельзя сохранить на диск, потому что это связанные ссылками объекты данных, у них самих по себе нет текстового представления.

Но ведь интерпретатору для построчного выполнения или пооператорного ничего никуда сохранять не надо

Запретить многострочные команды? Это ж сколько интерпретаторов улетит в компиляторы? Первым компилятором окажется баш, который умеет в многострочные команды.

В полном виде зачастую не восстанавливается, но мы это уже обсуждали в предыдущих сериях

Прикинь, при транспиляции ES6->ES5 исходники полностью тоже нельзя восстановить. Потому что никто не будет придумывать логику, куда в новом коде всунуть твои комментарии.

ты каждый раз выходишь на какой-то новый шизофренический уровень утверждений. «тот же уровень абстракции, но не человекочитаемый»

Это к рассказу про логи в systemd, которые нечеловекочитаемы. И что теперь, это у нас не логи?

Вообще-то перед запуском модуль проверяется на синтаксические ошибки

Только самые вопиющие. Примерно как в случае ES6->ES5.

byko3y ★★★★
()
Ответ на: комментарий от byko3y

Запретить многострочные команды? Это ж сколько интерпретаторов улетит в компиляторы? Первым компилятором окажется баш, который умеет в многострочные команды.

Нет, там же через слеш написано построчно / пооператорно. Во втором случае подразумевается что операторы могут быть многострочными.

Вообще-то перед запуском модуль проверяется на синтаксические ошибки

Только самые вопиющие.

Да нет, на все (абсолютно все то есть синтаксические ошибки), статически не проверяются только ошибки типов, по понятным причинам.

alienclaster ★★★
()
Ответ на: комментарий от alienclaster

Приложение PyQt написано на питоне, как биндинге к С++ gui-фреймворку Qt. Я могу писать графическое приложение на PyQt и ни разу за годы не увидеть кода С++, кроме как в примерах соответствующей доки

Я могу работать с сервером PostgreSQL, видя только баш. И что теперь, БД постгреса у нас написана на баше? Я понимаю, что в штатах популярно так говорить (я всё сделал с нуля, и это перевернуло индустрию), но только для того, чтобы вытрясти из лохов капусту. У нас тут вроде никто ни на ком не зарабатывает.

Питон здесь — это запускалка-конфигурялка

В той же степени то любой другой язык в случае биндинга. Что сводит твое утверждение к абсурду

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

Конечно Qt, это же памят^W биндинг! При этом С++ я в глаза не вижу, когда рисую формочки

Ну да, писание алгоритмов на питоне — это что-то вроде рисования формочек мышкой в Qt Creator.

и кто его знает, сколько в нем багов.

Понял, «власти скрывают»

Если бы тролли сидели и работали над стабильностью своих поделок, то вопросов бы не было. Однако же, вместо этого они с бешенной скоростью плодят новые фичи. Примерно как в браузерах FF/хроме — очень много фич, очень мало гарантий, что через эти фичи ты не словишь удаленное выполнение. По этой причине грамотные люди запускают браузер в каком-нибудь firejail, иначе это не сильно безопаснее, чем запускать случайные скачанные с интернета бинарники.

Полученный код кроссплатформенный, но превращение необратимо

С его вдруг необратимо?

Cython генерирует оптимизированный код, в котором уже не узнает исходного питоньего. Да, если трансляция идет один в один, то это уже можно номинировать на транспиляцию.

и часть возможностей питона (вроде exec/eval и разной рефлексии) теряется. Еще превращение высокоуровневых ЯП в какой-нибудь IR LLVM, поскольку типы данных и инструкции намного проще исходных

В байткоде тоже инструкции проще.

Ты точно знаком с байткодом питона?

https://docs.python.org/3/library/dis.html

и до кучи FSet, sycamore, Series, Taps итд

https://github.com/tobgu/pyrsistent

Тормозит же, в чем сами авторы признаются. И вообще стараются подсунуть С-версию везде, где возможно

Прикинь, и в кложе многоверсионные структуры данных на жаве написаны, а не на лиспе.

Так-то смысл в этом всем появляется только когда другие библиотеки адаптированы под такой стиль.

В нормальном языке ничего адаптировать не надо, либо ты можешь сделать это самостоятельно, не ожидая подобных телодвижений от автора библиотеки

Здесь ты неявно подразумеваешь, что «нормальный язык» — это где все условности уже приняты заранее, до тебя и за тебя. А как ты собрался передать в либу параметром неизменяемый объект, если либа ждет изменяемый и таки будет его изменять?

byko3y ★★★★
()
Ответ на: комментарий от alienclaster

На счет репла я сдался, похоже тебе не дано понять (по крайней мере на текущий момент), приходи позже

https://docs.microsoft.com/en-us/visualstudio/debugger/continuing-execution-a...

Даже в VS есть продолжение выполнения после исключения. Да, в питоне этого нету, не в последню очередь потому, что питон внутри кидает иключения налево и направо, потому не совсем понятно, какие исключения и когда ловить. Но это вина отсутствия архитектурного планирования питона, а не заслуга лиспа.

byko3y ★★★★
()
Ответ на: комментарий от anonymous

Ситаксис Lisp в какой-то мере похож на тэговое представление /например xml. html/.
В результате он легко парсится

Щитимель точно не легко парсится. XML — может быть.

byko3y ★★★★
()
Ответ на: комментарий от anonymous

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

http://www.loper-os.org/?p=69

«I did try to introduce Lisp to Google. Having had some experience selling Lisp at JPL I got all my ducks in a row, had a cool demo going, showed it to all the other members of the ads team, and had them all convinced that this was a good idea. The only thing left was to get approval from the VP of engineering. The conversation went something like this:
Me: I'd like to talk to you about something...
Him: Let me guess - you want to use Smalltalk.
Me: Er, no...
Him: Lisp?
Me: Right.
Him: No way.»

Сценарий примерно один и тот же: приходит один аутист из команды, и говорит «давайте начнем использовать технологиянейм в продакшене. Технологиянейм очень крутая и удобная». Ответы разнятся между «нет», «где мы найдем альтернативные решения или поддержку технологиинейм», «как мы будем искать программистов под технологиюнейм? За свой счет обсучать макак?». Один из крупнейших вебсайтов, писанный на перле (забыл название), так и делает — берет людей без знания перла и обучает на месте. Потому что у них нет выбора, они выгребли всех доступных перловиков с рынка. Брать лисп для руководителя — значит получить лютый гемор, и потом бегать по лору искать двух с половиной лисперов для найма.

Комменты как комменты, как по мне - сделаны как надо, все видно на одной странице, ничего не надо подгружать, кто кому ответил - ясно

А теперь обнови страницу. Какой комент ты читал последним? Какие новые коменты в обсуждениях появились? И такой ад на всех страницах — сплошная сырость и недоработанность.

А не это блевотворство на реддите

Реддит тоже был изначально написан на лиспе. От того, что его переписали на питоне, лучше он не стал.

А для поиска на hn кстати есть алголия

А еще Google.

Можешь почитать небезызвестную статью чувака который запилил ycombinator, там он пишет про viaweb и лисп, и у него другое мнение на счет фич

Нынче по той же причине для разработки сайтов применяют питон - чтобы можно было по два раза на дню переписывать сайт. С той лишь разницей, что на питоне можно найти макак, а на лиспе придется всё тащить самому.

Пфт. Фичей. В проектах на лиспе не нашел он фичей. И про Emacs он конечно тоже не слышал

А теперь сравни это с объемом кода на питоне/JS.

byko3y ★★★★
()
Последнее исправление: byko3y (всего исправлений: 1)
Ответ на: комментарий от ados

AST нельзя сохранить на диск, потому что это связанные ссылками объекты данных, у них самих по себе нет текстового представления

#1=((1 . #2=(2 . #3=(3))) #2# #3# . #1#)

Что не так? В этом интерпретаторе есть какой-то встроенный сериализатор.

byko3y ★★★★
()
Ответ на: комментарий от alienclaster

Нет, там же через слеш написано построчно / пооператорно. Во втором случае подразумевается что операторы могут быть многострочными

Ну вот, у питона оператор — это файл. Многострочный. Why not?

byko3y ★★★★
()
Ответ на: комментарий от byko3y

Даже в VS есть продолжение выполнения после исключения.

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

Но это вина отсутствия архитектурного планирования питона, а не заслуга лиспа.

Все вина других языков что в них ничего нет. Что это меняет?

alienclaster ★★★
()
Ответ на: комментарий от byko3y

Ты точно знаком с байткодом питона?

The dis module supports the analysis of CPython bytecode by disassembling it. The CPython bytecode which this module takes as an input is defined in the file Include/opcode.h and used by the compiler and the interpreter.

Специально для тебя в первом же абзаце. Отдельно обрати внимание на слова «by disassembling it» и «used by the compiler».

Тормозит же, в чем сами авторы признаются. И вообще стараются подсунуть С-версию везде, где возможно

Прикинь, и в кложе многоверсионные структуры данных на жаве написаны, а не на лиспе.

Это не то же самое совершенно, попробуй сам подумать, почему. И за одним, почему в CL не подсовывают сишку на каждый чих.

А как ты собрался передать в либу параметром неизменяемый объект, если либа ждет изменяемый и таки будет его изменять?

Речь совершенно не об этом. А о том, что если либа ждет неизменяемый объект - то реализацию неизменяемости ты можешь подменить со своей стороны.

Остальное скипнул из-за бессвязности потока твоей мысли.

alienclaster ★★★
()
Ответ на: комментарий от alienclaster

Просто заскринить можно и в рамку. Даже отвечать на это не буду :) Ибо абсурд

Там вон у компилятора bash тоже есть «source scriptname.sh».

byko3y ★★★★
()
Ответ на: комментарий от alienclaster

Дебаггер здесь вообще не при чем, речь про рестарты в работающем приложении

JIT-отладчик в составе VS тоже имеется. При необработанном исключении выпрыгивает окошко с описанием ошибки и кнопками «выход» и «отладка». Запускаешь отладку, и дальше что нужно делаешь в отладчике. Потом, если отладчик не нужен, делаешь «отсоединиться от процесса». Примерно то же самое происходит и в лиспе, как я понял.

Все вина других языков что в них ничего нет. Что это меняет?

Не «других языков», а конкретно питона. Как раз в «других языках» лисповые фишки уже повторены.

byko3y ★★★★
()
Ответ на: комментарий от alienclaster

The dis module supports the analysis of CPython bytecode by disassembling it. The CPython bytecode which this module takes as an input is defined in the file Include/opcode.h and used by the compiler and the interpreter

Эти люди налево и направо разбрасываются словами, не понимая их смысла. Дизассембелировать, как правило, значит переводить из машинного кода на язык ассемблера:

https://en.wikipedia.org/wiki/Disassembler

У них нет машинного кода и нет ассемблера. В свободном переводе можно перевести «disassemble» как разобрать, в общем смысле этого слова, но это довольно непозволительная вольность формулировки. dis, на самом деле, просто переводит байткод с машиночитаемой формы в человекочитаемую.

Знаешь, у меня в городе есть микрорайон, называется «чернобыль». Я в детстве думал, что это там произошла авария. Оказалось, что произошла она сильно далеко от моего города, и слава богу. Но вот придумали люди, что раз уже все говорят про чернобыль, то и у нас должен быть чернобыль, Вот примерно по таким критериями названы в питоне компилятор с дизассемблером: все называют, и мы назовем.

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

Это не то же самое совершенно, попробуй сам подумать, почему. И за одним, почему в CL не подсовывают сишку на каждый чих

Чем тебе аналогия не понравилась, почему «не то же самое совершенно»? Clojure реализована на Java, CPython реализован на Си, у них обоих фундаментальные структуры данных реализовываюся на Java и Си соответственно. Да, тот же SBCL написан в основном на самом лиспе, но другие компиляторы более активно перекладывают низкоуровневые фичи на низкоуровневые языки.

А о том, что если либа ждет неизменяемый объект - то реализацию неизменяемости ты можешь подменить со своей стороны

Я должен писать прокладки к языку/либам? Не проще тогда уж самому переписать либу «как правильно»?

byko3y ★★★★
()
Ответ на: комментарий от byko3y

Не «других языков», а конкретно питона. Как раз в «других языках» лисповые фишки уже повторены.

Ok, я думал, ты хочешь разобраться в вопросе. Но похоже, тебя просто интересует подтверждение собственных убеждений. Это уже к психологу, сорян.

alienclaster ★★★
()
Ответ на: комментарий от alienclaster

https://lispy.wordpress.com/2007/11/30/your-macro-is-in-my-mapcar-no-your-mapcar-is-in-my-macro/

подобные вещи можно сделать через eval, но да, я хотел бы более универсального подхода, макросов как first class citizen.

meta-circ.scm

;; a meta-cirricular evaluator with first-class macros

также читай s32008.pdf «Reflection for the masses» by Charlotte Herzeel, Pascal Costanza, and Theo D’Hondt про обзор 3-Lisp и прочих first class environment лиспов (и небольшую реализацию рефлективного ProtoLisp на CL)

также см. «Direct reflection for free» gh с примерами на Haskell

anonymous
()
Ответ на: комментарий от byko3y

На макросах лиспа вы можете написать любой собственный язык, если этот язык — лисп.

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

вот например алгола или паскаля gh_wtgwtg/Pascal-parser pars1.lsp graph1.sample

можно на pratt parser orig см. оттуда в списке литературы «Macros with Grammar-like Productions» хабр (и заодно прочитать про CGOL и LINGOL – парсеры алголоподобного и естественноязычного в лисп) , см. также реализации на js , на CL

From Precedence Climbing to Pratt Parsing

ещё, ссылки на реализации

ржавого гонять minipratt

ещё то ли где-то в AI memo, то ли в HAKMEM то ли в Henry Baker где-то было про pretty printer лиспа в паскаль (и наоборот, парсер в лисп). у Henry Baker кстати, см. про COMFY-6502 – как оригинальный так и порт на CL, Sassy на Scheme

можно реализовать обычный методом рекурсивного спуска здесь в rdp паскаль бейсик

задача на yacc: asg-parse паскаля в S-выражения (у него кстати, про GLISP интересное, например физический солвер physlaws.lsp или конвертирование физических величин исходники gluser.pdf: «GLISP provides both Pascal-like and English-like syntaxes»)

languages-in-cl.txt -> basic in cl

lua : lanuguages : c11, cpp, cxx, latex, linc, lua, ruby, xlisp

реализация смоллтока есть где-то в maru – test-pepsi.l

можно естественный язык разбирать, например gh_wtgwtg/Pascal-parser

см. также про Augmented transition network, ATN и примеры реализации на Prolog DCG, SNOBOL (например, spitbol/…/DEMOS/ATN.SPT DEMOS/ELIZA.SPT, Lisp atn.lsp OnLisp:Parsing With ATN

ру:РСП есть некоторые ссылки на публикации

anonymous
()
Ответ на: комментарий от byko3y

Мой главный посыл был: макросы не нужны, большинство задач можно выполнить без них, с сохранением той же ленивости.

макросы гарантированно вызываются во время компиляции. то есть, можно компилировать в ошибку если не распарсили, и не компилировать ошибочное нераспарсивая, перебрасывая ошибку из рантайма макроса (компайл тайма окружения) в окружение.

в общем-то, дальнейшее «не нужно» сводится к fexprs либо тем же vau-expressions (которые вообще сделаны как такой eval на стероидах, в немного другом окружении. сюда же см. про first class environments, namespaces, macroses и прочий vau-expressions в kernel scheme и прочий 3-Lisp).

выкинули из cl потому что не понятно, как компилировать fexprы. в общем случае никак. а в cl есть compiler-macro например.

хотя всю ту же компайл тайм рефлективность в целом можно и эдакими «рантайм макрами» обеспечить, см. тот же kernel.

в этом смысле 3-Lisp, vau-exprs/kernel, GLISP тот же – в чём-то даже гибче коммон лиспа громадного. да хоть пиколисп обкоцанный.

anonymous
()
Ответ на: комментарий от anonymous

если к примеру first class environment с чётко выделенными разными стадиями и разными environments для compile time, run time, parse/load/read time

anonymous
()
Ответ на: комментарий от anonymous

Невозможно? Неизбежно! Да, да, да, мистер Андерсон.

anonymous
()
Ответ на: комментарий от anonymous

Нет, лично ты его не убил, но его закопали люди с таким подходом как у тебя - «я точно не знаю, но для себя выводы сделал». А теперь они просто поддерживают статус кво.

такое у них не только насчёт лиспа, насчёт других язычков тоже самое. например, еухений eao sobjectizer – тоже как-то «сравнивал» между собой языки D, Eiffel, …. ещё что-то там. и выводы делал в духе: 1)хорошо, но не С++ 2)плохо, что не С++ 3)непривычно что не С++, поэтому «выводы сделал».

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

закапывают, даже не откапывая.

условный С++ головного мозга им удобен именно тем, что он «позволяет поддерживать статус кво» и глубокомысленные выводы делать в > /dev/null.

anonymous
()
Ответ на: комментарий от byko3y

Мой главный посыл был: макросы не нужны, большинство задач можно выполнить без них, с сохранением той же ленивости.

вот есть такой (мета)язык Converge:

  • метапрограммирование staged в духе MetaOcaml, Template Haskell, MetaLua. в этом смысле Converge это такой MetaPython

  • макросы это функции времени компиляции, которые могут возвращать AST

  • Goal-oriented вычисления в духе SNOBOL, Icon/Unicon

  • реализовано, судя по всему, таки на Python/PyPy/RPython

Мой главный посыл был: макросы не нужны, большинство задач можно выполнить без них, с сохранением той же ленивости.

примеры говорят сами за себя:

  • конечные автоматы

  • ассемблер

  • фибонача мемоизованная

CTFE макросами определили DSL, потом его в программе тут же исполнили, скомпилировали.

пример тупо не скомпилируется если применение DSL неправильное (не удовлетворяет определению).

вот как такое «не скомпилируется, если в применении ошибка» реализовать «без них, с сохранением ленивости» на

В питон так-то ввели работу с AST и хуки загрузки модулей.

«хуках загрузки модулей»

???

(а главное, зачем именно так).

в этом смысле какой-нибудь MetaLisp вроде того же kernel немного полезнее – готовая нормальная полноценная платформа, в которую DSL погружён.

там в Template Meta_ЧегоНибудь_ по сути изобретают макросы на конкретном синтаксисе CST со скобками боянистыми [|…|] (CTFE функциями AST возвращающими)

anonymous
()
Ответ на: комментарий от byko3y

И что ты хочешь сказать? Что байткод питона, где каждая третья команда является запросом по строковому ключу ассоциативного массива — это ассемблероподобный код?

вот тут ассемблероподобный код : fib.cv с ассемблером определённым вот здесь WSI_Asm.cv

подозреваю, что аналогичным образом можно определить (и уже где-то определён) байткод питоновый.

Так называй уже и сам питон ассемблером — у нас тут есть один такой, который говорит, что питон = Си.

А вы знаете о том, что в Python есть встроенная СУБД?

tl;dr: на самом деле нет.

Достаточно лишь импортировать модуль sqlite3

anonymous
()
Ответ на: комментарий от byko3y

макросы не нужны

ржавое grmtools:

use lrlex::lrlex_mod;
use lrpar::lrpar_mod;

lrlex_mod!("calc.l");
lrpar_mod!("calc.y");
...
anonymous
()
Ответ на: комментарий от byko3y

Брать лисп для руководителя — значит получить лютый гемор, и потом бегать по лору искать двух с половиной лисперов для найма.

Не, в сегодняшнем мире то понятно почему компании не будут брать лисп в качестве основной технологии даже если за него кто-то будет очень сильно топить: нету кадров и не придвидится, это ясно. Я имел ввиду-то те времена когда он был еще жив. Когда кровь кипела в жилах. Когда лисп машина была не каким-то футуристическим проектом прошлого, но настоящего. Вот именно в то решающее время он и был погублен тем отношением людей про которое я говорил. Ну и в какой-то степени и наверное самими лисперами конечно, которые толком объяснить не могут что для чего нужно, да даже в этом треде на простой вопрос зачем нужны макросы, один говорит для дсл, ничего при этом не объясняя, второй сваливает викидамп с 30 ссылками не уловив при этом настоящего посыла поста на который он отвечал («у нас тут своя атмосфера»), а третий таинственно и кратко сообщает: «просто нужны и все». С такими рекрутами бы никакая лисп машина не спасла. (Ваши покорные слуги, Отец Аристоклий, брат его Аристарх и племянник его Доброжир, конечно предлагали свою помощь, но мы горды, грех нам на душу, и поезд давным давно ушел, кхе кхе, до встречи на следующей станции.)

А для поиска на hn кстати есть алголия

А еще Google.

на алголии сортировка есть по популярности/баллам. но намек я твой понял.

А теперь обнови страницу. Какой комент ты читал последним? Какие новые коменты в обсуждениях появились? И такой ад на всех страницах — сплошная сырость и недоработанность.

Да ты знаешь, очень многое можно вот так с высокой горы кипятком поливать, я и сам так делаю. Я и сам очень часто недоволен разным софтом, вне зависимости от того на чем он написан. Андроид. Винда. Порой в голову не укладывается как корпорации с такой кучей бабла не могут сделать что-то дельное, и не с единственной целью нагенерировать еще побольше бабла. Всякие битбакеты. Господи, да джехаб только только позавчера запилил темную тему. Тоже чуть-ли не позавчера скринсейверы аж на трех DE оказались с дырой о которых разрабов предупреждали хрен знает сколько лет кряду. Попробовал Ableton Live - одну из самых продвинутых DAW на рынке - так там бинды нельзя настроить. С%%%, да даже удалить кусок из записанного материала нельзя, только вырезать создав новый. Это что - не издевательство что ли? Да что там, на ЛОРе который как я понял пилит один человек вот только что добавили [показать ответы]. Казалось бы - базовая фича, почему только сегодня добавили - хз. Наверное никому не нужно было все эти 25 лет, или сколько там. Братик, окстись, какие комменты на хакерньюс? Этот бардак с забиванием гвоздей в пользователя - в каждой дыре. Ну хоть у яббла как-то что-то выходит, как ни странно. Я им хоть и не пользуюсь, но хоть кто-то может еще порадовать глаз, и то наверное, потому-что издалека смотрю. Ну и всякие ГНУ проекты с коммьюнити еще норм, поэтому собственно на линуксах с емаксами и сидим.

Обвинять не самый плохой сайт в недоработанности комментов в контексте лиспа - немного несправедливо, тебе не кажется? Лиспы/питоны/диланы/муиланы/кресты/гробы во всем этом имеют дело примерно десятое. Правильный выбор языка важен только если все остальные звезды совпадают.

anonymous
()
Ответ на: комментарий от anonymous

Невозможно? Неизбежно! Да, да, да, мистер Андерсон.

Всегда ловил кайф с этой трилогии : )

такое у них не только насчёт лиспа, насчёт других язычков тоже самое. например, еухений eao sobjectizer – тоже как-то «сравнивал» между собой языки D, Eiffel, …. ещё что-то там. и выводы делал в духе: 1)хорошо, но не С++ 2)плохо, что не С++ 3)непривычно что не С++, поэтому «выводы сделал».

Поискал по форуму, вроде он его только всем советует, но где он его с плюсами сравнивает я так с нахрапу не увидел. Поверю наслово. У плюсарей обычно просто начинает чесаться пердачелло с возгласами «медленна жы будит, как так» от упоминанию чего-либо кроме своей помойки и чего-то кроме родного сегфолт-дривен девелопмент. Обычно это первый язык у людей после какого-нибудь паскаля, что поделаешь.

Эх. За что люблю лисп - нет споров на счет где ставить открывающую скобку. Наверное есть в этом какая-то ирония.

закапывают, даже не откапывая.

Я давно ловлю тут твою посты. Дай угадаю, у тебя какая-то степень в computer science с направлением в языках?

anonymous
()
Ответ на: комментарий от byko3y

хотя вот rust-peg интереснее по примерам: arithmetic_infix.rs:

peg::parser!(...);
...
assert_eq!(arithmetic::calculate("1024/(1+1)/2/2+1"), Ok(129));
...

то есть, если в строке ошибка, макрос не скомпилируется. ибо CTFE.

anonymous
()
Ответ на: комментарий от anonymous

но где он его с плюсами сравнивает я так с нахрапу не увидел.

у себя в бложике. он там когда-то лет 12 назад сравнение сделал. в таком вот духе.

Дай угадаю, у тебя какая-то степень в computer science с направлением в языках?

нет, просто для себя интересовался разными языками и их реализациями

anonymous
()
Ответ на: комментарий от byko3y

Нынче по той же причине для разработки сайтов применяют питон - чтобы можно было по два раза на дню переписывать сайт. С той лишь разницей, что на питоне можно найти макак,

которые один раз выкапывают, а второй – закапывают.

раньше ещё должен был быть третий, который деревья сажает. но его сократили.

anonymous
()
Ответ на: комментарий от byko3y

При необработанном исключении выпрыгивает окошко с описанием ошибки и кнопками «выход» и «отладка».

а должна быть ещё «перезапуск» с места исправленного исключения/рестарта/условия.

Запускаешь отладку, и дальше что нужно делаешь в отладчике. Потом, если отладчик не нужен, делаешь «отсоединиться от процесса».

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

Примерно то же самое происходит и в лиспе, как я понял.

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

anonymous
()
Ответ на: комментарий от byko3y

приходит один аутист из команды, и говорит

Почему аутист, а не технический специалист?

Один из крупнейших вебсайтов, писанный на перле (забыл название), так и делает — берет людей без знания перла и обучает на месте

До сих пор очень многие люди знают перл, а те кто знают руби или питон - могут выучить перл за неделю (максимум) язык, чтобы к нему привыкнуть и за месяцок +- начать ориентироваться в экосистеме библиотек. Короче ты транслятор (компилятор, интерпретатор) сказочных сказок.

Брать лисп для руководителя — значит получить лютый гемор, и потом бегать по лору искать двух с половиной лисперов для найма.

Почему тогда куча контор используют лисп? Почему grammarly использует лисп? (и кложу и CL)? Это успешный современный стартап, и в нем нет постоянно открытых вакансий, при этом есть _штат_ лисперов 10+ человек, возможно уже больше. Я, кстати, ни разу не искал работу на лиспе, но если бы у меня была такая задача - не вижу вообще никаких проблем, как ее реализовать. Как правильно сказал den73 - наиболее короткий путь это писать opensource на лиспе, второй вариант - тусоваться с челами, которые пишут на лиспе и устроиться к ним в команду на стажировку. Найти лиспера тоже просто - взять и научить.

Him: No way

Кроме как пойти в какую-то быдлоконторку у программиста, инженера, исследователя нет что ли других вариантов?

Нынче по той же причине для разработки сайтов применяют питон - чтобы можно было по два раза на дню переписывать сайт.

Разрабатывать вебню без макросов и repl - это вообще катастрофа, я пробовал - хорошо что ушел от туда без посттравматического синдрома.

С той лишь разницей, что на питоне можно найти макак, а на лиспе придется всё тащить самому.

В чем проблема найти специалиста в вебе и обучить его clojure? Очень многие кложуристы это бывшие питоно-джангисты и рельсовики, если что.

А теперь сравни это с объемом кода на питоне/JS.

python более популярный, соответственно на нем больше кода. К чему эти закидоны?

alienclaster ★★★
()
Ответ на: комментарий от byko3y

Вообще, я бы предложил тебе все же ознакомиться с тем, что скрывается под кивордами вроде: repl, макросы, clos, mop, рестарты. И затем иметь мнение.

alienclaster ★★★
()
Ответ на: комментарий от byko3y

У них нет машинного кода и нет ассемблера.

Почему байткод нельзя назвать ассемблером виртуальной машины?

dis, на самом деле, просто переводит байткод с машиночитаемой формы в человекочитаемую.

Конечно, потому что байткод он продукт компиляции и для человека плохо читаем.

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

Это не то же самое совершенно, попробуй сам подумать, почему. И за одним, почему в CL не подсовывают сишку на каждый чих

Чем тебе аналогия не понравилась, почему «не то же самое совершенно»?

А к чему здесь аналогии вообще? Мы рассматриваем по сути. java для кложи это низкоуровневый язык, на котором реализована кложа, и которая имеет к нему доступ на уровне более менее нормального интеропа. Для питона С - это внешний язык, который подключается чужеродно через cffi, к тому же небезопасный. В кложе использование джава библиотек, это просто фича (потому что just as planned и уже много написано, не выкидывать же на помойку), для питона использование С-модулей это всегда гемор и не идиоматично. В CL же из-за скорости вообще С почти никогда не надо использовать, если надо, то только в самых узкий числодробильных местах, ф-ции размером в пару десятков строк.

Clojure реализована на Java, CPython реализован на Си

У clojure и java - единый рантайм, одна VM. С и python - с разных планет.

у них обоих фундаментальные структуры данных реализовываюся на Java и Си соответственно.

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

Да, тот же SBCL написан в основном на самом лиспе

Не только sbcl, почти все лиспы так. Но, повторюсь, хоть это и круто - это не самое важное. Более значимо то, что для CL _библиотеки_ включая стандартные написаны на CL, для кложи это тоже справедливо, хоть и в меньшей степени.

но другие компиляторы более активно перекладывают низкоуровневые фичи на низкоуровневые языки.

И это очевидный минус, о чем и речь. Надо объяснять почему?

Я должен писать прокладки к языку/либам? Не проще тогда уж самому переписать либу «как правильно»?

Если ты не видел ничего другого, то наверняка «проще» (не в смысле simple, а в смысле easy).

alienclaster ★★★
()
Ответ на: комментарий от paddlewan

Я возьму твое пиво, оно мне еще пригодится, если ты понимаешь о чем я.

Отец Аристоклий.

anonymous
()
Ответ на: комментарий от anonymous

А еще Google.

на алголии сортировка есть по популярности/баллам. но намек я твой понял

Это кажется шуткой, но это правда: чаще всего на страницы news.ycombinator.com я выхоидл именно с гугла. Потому что по другому этим говнищем пользоваться невозможно. Заходишь на главную — какой-то мусор про плоскую землю и лекарства от косоглазия, заходишь в другой раздел — опять какую-то мусор. Хотя через гугл можно неплохие обсуждения находить. Но боже упаси тебя попытаться поучаствовать в дискусии — будеш руками крутить страницу выискивая глазами последние комментарии.

Обвинять не самый плохой сайт в недоработанности комментов в контексте лиспа - немного несправедливо, тебе не кажется? Лиспы/питоны/диланы/муиланы/кресты/гробы во всем этом имеют дело примерно десятое

Справедливо говорить, что лисп не дает каких-то волшебных сверхспособностей. Да, проекты на лиспе — такое же говно, как и проекты на многих других языках.

byko3y ★★★★
()
Ответ на: комментарий от byko3y

Справедливо говорить, что лисп не дает каких-то волшебных сверхспособностей

Винтовка тоже не дает волшебных сверхспособностей, но это не значит, что у нее нет преимуществ по сравнению с обожженным на костре копьем, не так ли? %)

проекты на лиспе — такое же говно, как и проекты на многих других языках.

Да, винтовкой тоже нужно уметь владеть.

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 1)
Ответ на: комментарий от anonymous

При необработанном исключении выпрыгивает окошко с описанием ошибки и кнопками «выход» и «отладка».

а должна быть ещё «перезапуск» с места исправленного исключения/рестарта/условия

В отладчике много чего можно сделать, в том числе пошагово прогнать программу или сменить текущую исполняемую команду. Но ничего этогот не поможет, если у тебя прошли побочные эффекты, которых не должно было быть.

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

Ты очень старнный вопрос задаешь, я не понимаю описываемого сценария. Типа «я отключился, а оно пусть пока повисит»? Нет, при отключении отладчика выполнение возобновляется, а если исключение необработано, то возобновляется завершение работы программы.

при рестартах стек не разматывается и можно перезапустить, а при «исключениях» можно только громко упасть (или проигнорировать, но не исправить – стек то уже разрушен ибо отмотан)

Если ловить исключение при самом его создании, то там еще ничего не отмотано и можно просто выйти обратно в нормальное выполнение.

byko3y ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.