Опубликован выпуск SBCL 2.4.1 (Steel Bank Common Lisp), свободной реализации языка программирования Common Lisp. Код проекта написан на языках Common Lisp и Си, и распространяется под лицензией BSD...Подробнее: https://www.opennet.dev/opennews/art.shtml?num=60554
Ядро на этом языке реализовать можно?
Нужно!
>С целью оптимизации производительности убраны проверки границ для относительных смещенийВы что, хотите CVE как в си?
safety в declare сунул и готово, это тебе не бондаж и дисциплина, а язык от людей и для людей
((от (скобочек)) (рябит) (в (глазах)))
Слабак!
Так ты не на скобочки смотри. И вообще, для тебя придумали wisp.
А от unwrap() и закорючек не рябит?Кстати, в схеме по стандарту разрешили смешивать () и []. В комоне как с этим?
Как только в стандарте появится — сразу же.
Прикручивается в несколько строчек кода через макросы чтения. Но это не нужно: зоопарк скобочек, вопреки бытующему мнению, снижает читаемость кода.
> зоопарк скобочек, вопреки бытующему мнению, снижает читаемость кода.Чьему мнению? Лисперы не смотрят на скобочки https://spritely.institute/static/papers/scheme-primer.html#...
> In general, Scheme/Lisp programmers' editors do the work of managing parentheses for them, and most code is read by indentation rather than by the parenthetical grouping. In other words, Lisp programmers usually don't spend much time thinking about the parentheses at all.
А почему бы тогда не использовать табы?
> А почему бы тогда не использовать табы?Причем тут табы? Без разницы, что использовать. Почему обычно используют 2 пробела, я не знаю. Видимо из-за большой вложенности и чтобы из-за этого не вылазить за границу максимальной длины строки. Больший отступ, конечно, читался бы лучше.
Есть 2 подхода к синтаксису ЯП:1. Попытаться сделать его пригодным для работы в редакторе плоского текста (текст редактируется как последовательность строк). Чтобы как-то внятно разложить синтаксическое дерево в плоский текст, приходится жертвовать унификацией и структурным редактированием (оно все равно возможно, но усложнено и ограничено).
2. Представлять синтаксическую структуру программы явно и в унифицированном виде (Лисп). Для удобной работы с таким кодом нужен структурный редактор (paredit и подобные) — команды редактора позволяют манипулировать непосредственно структурой кода. Никто не считает скобки, вы просто создаете, объединяете, разделяете, перемещаете выражения — код практически становится осязаемым. Научившись работать с этим, возвращаться к п.1 уже не хочется.
Ну вообще-то любой ЯП имеет AST. И пользоваться обычным ЯП куда удобнее, чем лиспом. Не понимаю, откуда столько лиспофанатов взялось.
> Ну вообще-то любой ЯП имеет AST. И пользоваться обычным ЯП куда удобнее,
> чем лиспом. Не понимаю, откуда столько лиспофанатов взялось.Так об этом и речь, но можно по-разному отобразить AST в текст и по-разному с ним работать: как с плоским текстом или прямо манипулировать деревом. Мало кто пробовал второй способ, но лисперы знают как это удобно, пока остальные продолжают недоумевать.
> пользоваться обычным ЯП куда удобнее, чем лиспомОй-ли? Это те самые обычные языки (Си, С++, Java, Rust и т.п.) с их премудрыми правилами разрешения венегрета шаблонов и матрешками макроподстановок?
Мне от знаков '$' рябит в некоторых язычках.
И где оно используется? Зачем вообще люди тратят сотни и тысячи человеко-часов на бесполезные и ненужные технологии, которым место в анналах истории?
В ИИ.
Хорошая шутка, прямиком из 70-80-х.
на разработках 70-80-х держится весь интернет
В том что сейчас называют ИИ интеллекта нет ни грамма, а лисповые игрушки 80-х это вообще не более чем шутка.
Как говорится, «as soon as it works, no one calls it AI anymore».
ChatGPT сам называет себя AI
прошу прощения, в след. раз обязательно у тебя все вместе спросим куда нам наше время тратить
> прошу
> все вместе спросимдля начала надо определиться сколько анонимов в одном анониме
>Зачем вообще люди тратят сотни и тысячи человеко-часов на бесполезные и ненужные технологии, которым место в анналах истории?Потому что не хотят выучить скобочки, потому и обещают годами выпилить GIL.
Вот кстати, что забавно, GIL обходят самыми разными костылями: то запускают параллельно несколько интерпретаторов Python, то транспилируют код Python, то привязывают Сишные либы и теряют кроссплатформенность.
Но, ведь, наконец таки, решились выпилить в течение ближайших пяти лет.
> бесполезные и ненужные технологии, которым место в анналах истории?И правда зачем нужны бесполезные дубы, если есть желуди?
https://github.com/gcc-mirror/gcc/blob/master/gcc/common.md
;; Common GCC machine description file, shared by all targets.
...
(define_constraint "V"
"Matches a non-offsettable memory reference."
(and (match_code "mem")
(match_test "memory_address_addr_space_p (GET_MODE (op), XEXP (op, 0),
MEM_ADDR_SPACE (op))")
(not (match_test "offsettable_nonstrict_memref_p (op)"))))
https://github.com/gcc-mirror/gcc/blob/master/gcc/match.pd
#if GIMPLE
/* Optimize (X + (X >> (prec - 1))) ^ (X >> (prec - 1)) into abs (X). */
(simplify
(bit_xor:c (plus:c @0 (rshift@2 @0 INTEGER_CST@1)) @2)
(if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (@0))
&& !TYPE_UNSIGNED (TREE_TYPE (@0))
&& wi::to_widest (@1) == element_precision (TREE_TYPE (@0)) - 1)
(abs @0)))
#endif
Столлман лично писал?
Судя по гитхабу нигде оно не используется. Ну то есть тыщи репозиториев есть, но реально полезного кода считай что нет.
Язык чисто для образовательных целей.
> Зачем вообще люди тратят сотни и тысячи человеко-часов на бесполезные и ненужные технологииХороший вопрос, но не в ту сторону, учитывая, что лисп появился в 60-х.
> И где оно используется?Например, в менеджменте ресурсов.
> Зачем вообще люди тратят сотни и тысячи человеко-часов
Конкретно в этом случае потому, что хорошо платят.
Расскажи автокадчикам , насколько лисп бесполезен.
В автокаде очень кхем... своеобразный диалект лиспа. Настолько, что мало кто даже из лисперов обрадовался бы возможности программировать на таком. Даже за деньги.
Например, в этом https://nyxt-browser.com/
> И где оно используется? Зачем вообще люди тратят сотни и тысячи человеко-часов на бесполезные и ненужные технологии, которым место в анналах истории?зачем ты это сюда пишешь?
раз люди тратят время, значит видят смысл.
вот у них и поинтересуйся.
Годно и нужно.
> Годно и нужно.Но ведь новость не про JavaScript
А JavaScript в машкод не компилируется, как и в образы.
> А JavaScript в машкод не компилируетсяJust JIT
То есть, не компилируется. А в райнтайме потихоньку то там, то сям застопорит программу, потом ещё раз застопорит, потом выльет неоптимизированную портянку вызовов функций к библиотеке движка... и никаких тебе бинарей на диске с асмовставками и заменой anytype-кода на прямую тасовку fixnum-ов в асме через объявления safety, type и speed в declare.
Компилируемые языки по большей части уходят в прошлое. Останутся только в системном программировании, в совсем уж критических местах. Не верите? Сравните количество вакансий и оцените спрос рынка.
Common Lisp -- компилируемый язык так то
Sbcl - компилирующий common lisp
Основная масса common lisp реализаций интерпретаторы или jit
Основная масса - это какие? sbcl, cmucl, ccl, allegro, lispworks напрямую генерируют машинный код, ecl, clasp, gcl - через сишку, abcl - в байткод jvm. Только clisp представляет из себя интерпретатор, да и тот интерпретирует байткод и имеет jit.
Нет уж.
Давай ты сравнишь, а мы послушаем доклад.
"Количество вакансий" и "спрос рынка" не с потолка берётся. И либо ты раб скиллбокса, либо сам пишешь проекты.
То что ты подразумеваешь (а подразумеваешь ты языки со статической типизацией) хоронят уже 20 лет, но только сейчас закопана динамическая - mypy, typescript и иже с ними не дадут соврать. А то что ты написал это вообще безграмотный бред, потому что языки от способа их исполнения никак не зависят. Возьми C и хочешь - интерпретируй, хочешь в байткод JVM компиль, хочешь в WASM, хочешь - в нативный. При этом и динамические языки все компилируемые, везде кроме питона JIT, а и питон к нему активно стремится, умея, те не менее, и компиляцию в нативный код (nuitka, pypy, cython). Ну и таки да, не знаю что мне должно сказать количество вакансий. Ну нужно много жс мaкак. Ещё курьеров, таксистов, дворников. Но идти-то надо на нормальном языке писать за 10х денег.
только есть вероятность что иная жс ма.кака как раз и будет получать те самые 10х денег
пока истинные ценители(тм) будут просиживать пыльные академические лавки ради всяких лиспов
почти как с бздями которые тоже якобы академики ваялипо закапыванию динамической типизации - ну хз
парадоксально ли, но ощутимое количество "ит-специалистов" по итогу оказываются падкими на всякий инфомусор мак.аками, для которых достаточно опубликовать несколько статеек на хабре и каком-нибудь реддите-медиуме чтобы они чуть ли не повторяли описанные там догмы слово в слово. Патамушта эта в трендевот и с тайпскриптом примерно так получилось. От чего он героически защищает и избавляет - так никто и не понял. Только гомна прибавилось в лице крайне перегруженного синтаксиса и кратного увеличения объёмов писанины вперемешку с кривописанием для влезания в проверки в специфических случаях или исключениями конкретных проверок для конкретных строк( что само по себе "гениально" )
А ошибки - они никуда и не делись, равно как и целенаправленно созданные дыры. Внезапно оказалось, что типизация в принципе не избавляет от ошибок
>парадоксально ли, но ощутимое количество "ит-специалистов" по итогу оказываются падкими на всякий инфомусор мак.аками, для которых достаточно опубликовать несколько статеек на хабре и каком-нибудь реддите-медиумеОбычно (не всегда) подобные статьи пишутся очень и очень умными людьми. И в них много рациональных зёрен. Поэтому другие люди и берут их на вооружение. А можно их просто игнорировать и продолжать ходить по граблям. Каждому своё.
>Внезапно оказалось, что типизация в принципе не избавляет от ошибок
А кто говорит про все ошибки? Речь о том, что их количество желательно свести к минимуму, чтобы удешевить эксплуатацию ПО конечному пользователю. В этом весь смысл. Странно, что подобные банальные вещи надо ещё обсуждать.
>закопана динамическая - mypy, typescript и иже с ними не дадут совратьТак дают же, anytype anytype-ом погоняет.
> А JavaScript в машкод не компилируетсяа на лиспе нельзя модули для ядра писать
Один чувак на нём драйвер написал.
На лиспе написали ОС и не одну.
> На лиспе написали ОС и не одну.если бы было что-то стоящее я бы об этом знал
Про Redox же знаешь наверняка? Но оно нестоящее.
Вполне себе стоящее для образовательных целей.
> На лиспе написали ОС и не одну.Простите, но эти поделия не достойны звания ОС...
>нельзяИ тут мы подходим к тому, что каждый вменяемый программист должен уметь присобачить свой язык к си.
>И тут мы подходим к тому, что каждый вменяемый программист должен уметь присобачить свой язык к си.TCL (немного протух, но собрать после пары ящиков пива - можно), ECL (эти долбоклюи на кресты решили переехать), CCL (ябблы - то бишь дуподрюки, но не точно).
Зато можно написать само ядро
https://github.com/froggey/Mezzano
> А JavaScript в машкод не компилируется, как и в образы.SBCL как-бы тоже (только в "образ"). Даже tree shacker'а нет. За этим - к ECL и CCL.
JavaScript компилируется в Webassembly, который по сути машкод для довольно специфичной машины.
>который по сути машкод для довольно специфичной машиныНе просто "специфичной", а "несуществующей в природе".
> Ускорена работа цикла "(LOOP FOR X IN (REVERSE LIST) ...)", который теперь использует меньше cons-ов.А в принципе в функциональных языках замену map на map! компилятор умеет делать?
Сабж не является функциональным, но мультипарадигменным.
SBCL умеет только раскрывать map'ы в циклы. "Сплюснуть" цепочку map/reduce до однопроходного цикла не может (вдруг у тебя там побочный эффект, тогда оптимизация сломает логику).
Но есть интересная библиотека series, она может. https://github.com/tokenrove/series/blob/master/s-doc.txt
А где крупный специалист по Lisp-у ЛОР-овец lovesan?
В чём преимущество записи выражений в польской нотации. Типа: + 2 3Для типично математический выражений никакого преимущества перед традиционной формой нет. Я по крайней мере не вижу.
Код является AST
> Для типично математический выраженийЭто такие, которые обычно занимают 0.0001% кода?
https://en.wikipedia.org/wiki/S-expression
Не нужно запоминать приоритет оператов. Проще парсить, проще понимать структуру выражения. Вообще проще программно работать с такой записью. А вот в случае с классической матетматикой на бумаге, наверное, нет смысла на такое переучиваться. Хотя некоторые разделы математики такую запись используют.
>Проще парсить, проще понимать структуру выражения.Особенно если вставлять переводы строк, большие формулы становятся понятнее.
> Не нужно запоминать приоритет оператов. Проще парсить, проще понимать структуру выражения.Да, просто парсинг перекладывается на оператора ЭВМ. Ну… если вспомнить, на каком убогом железе она в основном использовалась, то оно и понятно.
Это с каких пор процессор, ориентированный на язык, убогим железом является?
С тех пор как языков много, а конкретно тот на который он ориентирван никому нахрен не сдался.
>Для типично математический выражений никакого преимущества перед традиционной формой нетПрикол в том, что:
1. Дело не в польской нотации, а в AST. Этот AST можно превратить в вызовы SIMD. На том же лиспе.
2. Математические операции в лиспе не являются операторами, они являются функциями. Со всеми вытекающими, навроде отправки в функции высшего порядка, неполного применения и так далее.
Ну-ка, а расскажи нам скорее в каком языке операторы не являются функциями?
В Си операторы не являются функциями. Особенно comma operator.
почти во всех
>В чём преимущество записи выражений в польской нотации. Типа: + 2 3В стандартизации выражений. Первой всегда идёт функция, потом значения. Отсюда и масса скобочек. Меньше шансов, что какой-нибудь альтернативно одаренный перепутает "=" и "==". В коде сразу видно будет.
З.Ы. Поэтому, кстати, LOOP я недолюбливаю - выбивается за концепцию.
Кстати говоря, классическая префиксная нотация может писаться вообще без скобок
> Кстати говоря, классическая префиксная нотация может писаться вообще без скобокМожет, но блоки кода определять сложнее.
А в чём смысл стандартизации выражений? Brainfuck и тот язык с одной инструкцией поболе стандартизированы, почему лисп лучше их?
> А в чём смысл стандартизации выражений? Brainfuck и тот язык с одной
> инструкцией поболе стандартизированы, почему лисп лучше их?Brainfuck - некорректный пример. Сравнивать надо с чем-нибудь высокого уровня (хотя тоже будет не совсем корректно).
З.Ы. Да, забыл совсем, как очевединое. Такая стандартизация позволяет составить произвольный список переменных и их обработать, а не насиловать себе мозг. К примеру, в функции "сложения" указать через REST произвольное количество входящих данных.
Не нужно вводить понятие приоритета и ассоциативности, разбирать и вычислить выражение можно за один проход, достаточно просто стэка. Это использовалось раньше во многих физических калькуляторах. А по поводу программ: man dc. Его, кстати, использует bc.
> Не нужно вводить понятие приоритета и ассоциативностиНо его нужно вводить, потому что это правила разбора математических выражений. Если на языке решаются реальные задачи, включающие математику, он обязан это делать. Если он это не далает, значит он не язык, а занимательная шутка типа брейнфака, не имеющая отношения к программированию.
> разбирать и вычислить выражение можно за один проход, достаточно просто стэка
Супер, возьмём вычислительную технику которой нет проблем ни в 2 ни в 10 ни в 100500 проходов программу распарсить, но не будем использовать её возможности, а заставить людей ковыряться в yблюдском формате.
>> Не нужно вводить понятие приоритета и ассоциативности
> Но его нужно вводить, потому что это правила разбора математических выражений. Если
> на языке решаются реальные задачи, включающие математику, он обязан это делать.В префиксной нотации скобки не обязательны если арность фиксирована. Конкретно в лиспе скобки - это вызов процедуры, поэтому запись (+ * 1 2 3) просто некорректна, потому что * - это процедура и нужно писать так (+ (* 1 2) 3). Таким образом, скобки однозначно определяют порядок вычисления в мат выражении.
>> разбирать и вычислить выражение можно за один проход, достаточно просто стэка
> Супер, возьмём вычислительную технику которой нет проблем ни в 2 ни в
> 10 ни в 100500 проходов программу распарсить, но не будем использовать
> её возможностиМожешь дальше писать на жс под электрон и требовать 16Гб памяти под ничего неделание.
> а заставить людей ковыряться в yблюдском формате.
Ты просто всю жизнь использовал инфиксную запись. Тебе, например, точно также будет неудобно писать справа налево, а кто-то так пишет с рождения.
>>потому что * - это процедура(setf * 10)
(print (+ * 1 2 3))
(print (* * 10))
А ты зачем за процедурой в неймспейс данных лезешь?
>>>потому что * - это процедура
> (setf * 10)
> (print (+ * 1 2 3))
> (print (* * 10))Что ты этим хотел сказать? Что процедуры можно переопределить? Что в лиспе динамическая типизация?
> (print (* * 10))
Вот это в Scheme работать не будет, т.к. ты пытаешься вызвать процедуру 10, а это не процедура.
> Что ты этим хотел сказать? Что процедуры можно переопределить? Что в лиспе динамическая типизация?Намёк на особенности lisp-2. Что в лиспе разные пространства имён для разных сущностей.
> потому что это правила разбора математических выражений.Так в такой записи эти правила не нужны, про ассоциативность
> а заставить людей ковыряться в yблюдском формате
Да уж не накручивайте, писал на лиспе какое-то время - привыкаешь довольно быстро. Бонусом ты сразу видишь в таком выражении, что в каком порядке выполняется. Надо только начать, оно только выглядит страшно по началу
> оно только выглядит страшно по началуЕще любят приводить примеры с двумя-тремя аргументами. В инфиксной записи сложные выражения читаются ничуть не проще. Во многих кодстайлах даже разрешено добавлять скобки для читабельности и чтобы не надо было вспоминать приоритеты.
Именно так, да. В сложной формуле с кучей + и *, ещё и если всратые пробелы, легко запутаться, кто где первее выполняется. Уж во всяком случае одним взглядом не распарсишь
Транслятор Си на сложных выражениях выдаёт предупреждение и просит добавить скобки.
> В чём преимущество записи выражений в польской нотации. Типа: + 2 3(+ 2 3 4)
> На платформе FreeBSD реализована компоновка с libpthread и отключена рандомизация адресного пространства (ASLR).А чем фряха провинилась?
Вам многопоточность дали, а вы недовольны. А рандомизация..., значит, работает плохо/не совсем как нужно.
Документацию на VOP бы...
Почитаешь уринотерапию что лисп и простой и быстрый и безопасный, так почему всё на Rust переписывают то ?
> Почитаешь уринотерапию что лисп и простой и быстрый и безопасныйЭто просто диды с недержанием дезу распространяют.
Был бы он хорош - на нем бы писали многие и много. А в реальности кроме полутора легаси проектов и пары васяноподелий ничего толкового нет.
> Был бы он хорош - на нем бы писали многие и многоВыигрывают не лучшие, а с самым хорошим маркетингом
Он не простой, не быстрый и не безопасный, даже упоротые фанатики лиспа вам такого не скажут. Они продвигают свою мазохистскую философию, суть которой в том что работу машины нужно переложить на человека, при этом доставив емё максимальную боль. Нет, не смей взять и написать математическое выражение, строй RPN стеки в голове, зато машинка распарсит код в один проход.
>> работу машины нужно переложить на человека, при этом доставив ему максимальную боль.Во времена маломощных компьютеров это было обоснованно.
Но, почему сейчас то, не добавляют более эргономичные языковые конструкции?
Те же автокадовские скрипты, с тоннами скобок и RPN, и читаемости не добавляют, и провоцируют пренебрежительное отношение к исходнику который тупо не красив.
> Но, почему сейчас то, не добавляют более эргономичные языковые конструкции?Потому что получится один из современных ЯП, а не лисп
Так математические выражения реально удобнее писать в польской нотации, дело тут даже не в простоте парсинга. Их понимать потом проще, когда код читаешь
Непонятно для кого и для чего созданы все эти 100500 языков, связки Python + C хватает для всего.
Кому-то и одного 1С хватает. Могу только пособолезновать
> Непонятно для кого и для чего созданы все эти 100500 языков, связки
> Python + C хватает для всего.Лисп создан в начале 60-х. Теперь посмотри когда создан Python и другие языки и задай свой вопрос их создателям.
> Непонятно для кого и для чего созданы все эти 100500 языков, связки
> Python + C хватает для всего.И вообще Lisp не люди создали
> It is an established fact that John McCarthy shared alien tech with the world in 1958 when he introduced us to Lisp.
>John McCarthy shared alien techДжон Маккарти "расшарил" людям инопланетную технологию. Возрадуйтесь люди!
Десятое правило Гринспена:
Любая достаточно сложная программа на Си или Фортране содержит заново написанную, неспецифицированную, глючную и медленную реализацию половины языка Common Lisp.