LINUX.ORG.RU

Улучшенный документ стандарта языка программирования Common Lisp

 ,


0

4

Альтернатива официальному стандарту ANSI X3.226-1994 (ANSI INCITS 226-1994), бесплатно и в лучшем качестве с индексом.

http://cvberry.com/tech_writings/notes/common_lisp_standard_draft.html

PDF файл с индексом:

http://cvberry.com/downloads/cl-ansi-standard-draft-w-sidebar.pdf

Исходные коды:

https://gitlab.com/vancan1ty/clstandard_build

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

и три сотни сисколлов. в Plan9 — только 46.

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

/boot/vmlinuz

Ты утверждаешь, что при компиляции этого файла были использованы все 20 млн. строк?

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

Можно. Но в твоём примере те компоненты разве являются частью приложения? Или как UNIX множество отдельных приложений связанных единым API?

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

Чем существующий не настоящий?

Это лоровское проклятье. Про GC на основе RC знал только tailgunner, и тот куда-то делся.

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

при этом Inferno ещё и работает как подсистема поверх не железа, а другой ОС.

Достижение уровня /talks

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

Циклические ссылки подчищаются. Для ссзб или когда без __del__ вообще никуда есть weakref. Твой таракан насчет gc такого же уровня как вспоминать про GIL.

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

Модули

прочитать хотя бы статью на вики.

Так поэтому и спрашиваю, что на вики «OpenStack — комплекс проектов свободного программного обеспечения». То есть миллионы строк OpenStack — это примерно как миллионы строк GNU. Каждое приложение живёт своей жизнью.

И эти компоненты не модули, а отдельные приложения. Модули — это когда они все выполняются внутри одного приложения и «stable api is nonsense» (c) Torvalds.

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

А разница? Чем утвердение «на языке Х можно написать приложение в 100500 миллионов строк» принципиально отличается от — «на языке Х можно написать модульную систему в 100500 миллионов строк»?

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

Тем, что в приложении на миллион строк придётся увязывать внутренние структуры данных, время жизни объектов, используемые библиотеки (или преобразование структур данных). А когда это 100500 модулей, каждый из которых собирается независимо и имеет один метод «запустить», причём падение иди неадекватное поведение одного модуля никак не сказывается на остальных, то писать можно хоть на бейсике.

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

В ядре линукса полтора десятка миллионов строк. Он хреново спроектирован?

Его вообще никто не проектировал. Тупо лапшекод.

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

м, что в приложении на миллион строк придётся увязывать внутренние структуры данных, время жизни объектов, используемые библиотеки (или преобразование структур данных).

Аналогично в модульной системе тебе нужно согласовывать интерфейсы и структуры данных. Да и библиотеки тоже в ряде случаев.

А когда это 100500 модулей, каждый из которых собирается независимо и имеет один метод «запустить», причём падение иди неадекватное поведение одного модуля никак не сказывается на остальных

Ну, мы же понимаем, что это идеальный случай, которого в реале никогда не бывает. В нашем мире, например, если nova (запуск вм) и neutron (сети) друг с другом не договорятся, то всё облако, внезапно превращается в тыкву. И пофиг, что это типа разные процессы с разными репозиториями.

ugoday ★★★★★
()

Конечно, ссылок в Hyperspec перебор, но не хватает другого, а именно, ссылок «см. также». Чтобы из синтаксиса всегда было легко найти смысл всяких значков в стандартной таблице чтения, а из функции format всегда было легко найти полное описание с примерами. Связь между подобными функциями для списков и sequences. Меньше тупиковых и циклических ссылок в глоссарии.

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

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

что, и тут с++ в штаны срет программистам на самых лучших языках?

ох уж этот с++. вот если бы его не было, ух бы развернулись!

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

ох уж этот с++. вот если бы его не было, ух бы развернулись!

Как-то так и есть. Человек смотрит на язык программирования с возможностью во время отладки переопределять процедуры, не беспокоиться о выделении памяти, не имеющего UB и SegFault'ов.... и говорит «это всё круто, но насколько он быстр по сравнению с C/C++»?

А в тех задачах, где скорость не особо критична срабатывает «синдром утёнка», поэтому вместо лиспа берут Java и C#, а в качестве скриптового вместо Tcl используют JavaScript. Поэтому лисп если и вернётся в массы, то примерно в таком виде. С такими макросами.

Если бы системным языком оставался Форт, а не Си, (а прикладным Ада) то у Common Lisp'а было бы гораздо больше шансов.

P.S. Haskell'у и ML'у аналогично C++ мешает. У rust и go есть шансы, потому что они не раздражают «утят».

monk ★★★★★
()
Последнее исправление: monk (всего исправлений: 2)
Ответ на: комментарий от ugoday

В нашем мире, например, если nova (запуск вм) и neutron (сети) друг с другом не договорятся, то всё облако, внезапно превращается в тыкву.

Ладно. Убедил. В принципе, и в один бинарник можно несвязанного напихать. Как в busybox. Реально надо какую-то измеримую меру связности и сложности структур данных вводить, но на это у меня фантазии не хватает.

monk ★★★★★
()

Офигеть, сколько у нас тут таких мамкиных стандартизаторов

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

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

В Си++ вон мучаются со std::weak_ptr, но они привыкшие. Сам страдал ими одно время при программировании с asio. Но для языка, который пытается выглядеть универсальным как питончик, это совершенно несерьезно.

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

Модули — это когда они все выполняются внутри одного приложения и «stable api is nonsense»

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

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

У rust и go есть шансы, потому что они не раздражают «утят».

Если бы.

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

Чем существующий не настоящий?

Так он автоматически понимает циклические ссылки или надо руками указывать, где они могут быть?

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

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

То есть gawk является модулем GNU?

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

Алё, питон и так разруливает циклические ссылки, вы как читаете?

А вообще, вон в перле чистый подсчет ссылок, в руби - трассирующий GC. И ни то ни другое не помешало обоим взлететь и закатиться, так что критерий так себе.

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

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

у лисперов, цацкельщиков и прочих жабников во всем виноват С и С++. а сами то они огого!

такая вот аналогия

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

у лисперов, цацкельщиков и прочих жабников во всем виноват С и С++. а сами то они огого!

Отчасти таки правда. Если нет экосистемы, то перед решением задачи придётся поизобретать велосипеды. Не все на это согласны.

NextGenenration ★★
()

monk, у лиспа существует какое-то централизованное место, где можно посмотреть на примеры кода, библиотеки для решения задач? Нечто типа valadoc.org ?

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

аааа. так они не хотят писать код, которого не хватает. они хотят сразу панувать.

а С и С++ мешают. ага, понятно. это всё объясняет.

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

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

время жизни объектов

в Zonnon, например, и в какой-то степени в Active Oberon --- временем жизни и протоколом взаимодействия модулей можно управлять.почему и говорят про «композиционный» сборочный недоязычок.

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

не, модуль имеет не один метод, а несколько, описывающих его жизненный цикл. если сопоставить модулю синглтон, то получим обычный оберон или модулу2/3. если сопоставить синглтон-объект с «активными методами» — то Active Oberon. если сопоставить какой-то протокол, описывающий жизненный цикл и взаимодействие объектов — то Zonnon.

получаем модуль как активный объект как моноид, и моноид моноидов тоже моноид — то есть, протокол (в духе протоколов в ObjC) между моноидами, взаимодействующими объектами, в духе реактивного функционального.

то есть, композицию взаимодействующих модулей.

то писать можно хоть на бейсике

хоть на модуле-2/-3/обероне, ога.

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

То есть gawk является модулем GNU?

с точки зрения Столлмана — ога.

только что читал на софтпанораме древнюю статью про PL/I, где автор ругался про coreutils и сотню «модулей» с невнятным интерфейсом, и восхвалял древний Multics.

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

Реально надо какую-то измеримую меру связности и сложности структур данных вводить, но на это у меня фантазии не хватает.

меру Лебега? :-)

причём смотри, вот в расте лайфтаймами тоже можно какую-то «меру связности и сложности» вводить.

в том смысле, что модули с простым жизненным циклом в духе команд Oberon-2/модулей в Modula-2/3 — это «простая модульность», когда можно в этом испытательном стенде выдернуть вручную unload/reload каждый модуль и подёргать за метод модуля/команду.

когда для этого нужно выгружать/перегружать в особом порядке топологической сортировки, с учётом зависимостей (...«времени компиляции») — второе, «непростая :-) модульность»

когда нужно учитывать лайфтаймы и определённый протокол взаимодействия модулей — «сложная :-) модульность»

ещё можно придумать четвёртую — с образами и перегенерацией образа.

вопрос в том, нафига вся эта сложность. усложнять просто, упрощать сложно.

сложное — ложно.

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

Если бы системным языком оставался Форт, а не Си, (а прикладным Ада) то у Common Lisp'а было бы гораздо больше шансов.

а если выпиливать 10.000 часов на «скрипке Энгельбарта» то можно достичь совершенства.

или скрипку перепилить пополам.

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

кстати, вот эта кодогенерация батареек работает?

ну может тогда и от clang/LLVM тоже найдётся польза.

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

Приведу пример в защиту своей точки зрения. Есть такой язык, go называется. Единственная его заслуга простота, часто переходящая в примитивность. Этот язык вполне себе получил определённое распространение, не смотря на то что как таковых достоинств у него не много. А всё благодаря тому что его в своё время активно пиарили. И вот теперь под этот язык есть достаточно много биндингов, библиотек. В то время как языки которые не распиарили так и остались относительно малоизвестными. Если какому-то пользователю для решения задачи нужна библиотека A и предоставляется выбор между языками B(нет реализации) и C(есть), то не трудно догадаться какой будет сделан выбор. Особенно если он по языку B прочёл всего лишь пару статей в интернете и не пробовал язык в деле.

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

Разобраться в коде на Modula новичкам труда не составит, в отличие от зауми костылей и исключений на C/C++.

ну я б сказал, что ядро проекта КРОНОС на модуле-2 попонятнее будет линуксового, при том что и там, и там — всюду юниксоподобная ОСь.

насчёт Plan9/Inferno и кроноса --- уже не уверен. Plan9 и особенно Inferno (c Limbo, где модули и загрузка модулей вручную) — показывают, что модульность можно и на си изобразить, постаравшись немного.

вот насчёт Multics на PL/I или какой-нибудь оси на Ada или Modula-2 --- не уверен, что зауми на PL/I будет меньше, чем зауми на С++.

point наверное не в том, что всё надо писать на Cobol.. PL/I.. Ada.. Modula-3/2/Oberon,

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

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

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

наткнулся на твой pcc

вот кстати, интересно... а жтим вот Plan9/Inferno собирается ?

если заменить kencc оттуда вот на это? в Harvey например, отодрали kencc и gcc прикрутили, должно быть несложно допилить сборку этим вот вашим pcc

в Inferno есть модули на Limbo, кстати. и по идее либо лисп на этом сделать, либо это на лиспе — должно быть прикольно, модульно и т.п.

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

система элементов vs. система свойств

вот тут, мне кажется, ты рассуждаешь о том что архитектура как модель системы — это карта мира, модель системы какая-то, архитектурное описание. а описать можно как систему элементов, компонентов, сборку (=сумму частей «без лишних деталей») либо как систему свойств (qualia, =интеграл частей; холархий, холизмов качественных каких-то подсистем — объединённых системным эффектом, с эмерджментностью, мерой 1+1=3)

и тут уже исчисление типа алгебры, кольца, поля; монады моноидов, типов высшего порядка и т.п.

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

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

какой именно — надо осознавать далее, отдельными моделями и архитектурными описаниями. описывающими «взаимодействие» в динамике, диалектике, в противоположностях — жизненный цикл, то есть.

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

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

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

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

с точки зрения Столлмана — ога.

Источник, пожалуйста.

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

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

Скорее всего https://common-lisp.net/

Или http://cl-cookbook.sourceforge.net/

Библиотеки на http://cliki.net/current recommended libraries и http://quickdocs.org/

monk ★★★★★
()
Ответ на: наткнулся на твой pcc от anonymous

вот кстати, интересно... а жтим вот Plan9/Inferno собирается ?

Пока им ещё ничего не собирается. Всё ещё в процессе.

если заменить kencc оттуда вот на это? в Harvey например, отодрали kencc и gcc прикрутили, должно быть несложно допилить сборку этим вот вашим pcc

По идее, да.

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