LINUX.ORG.RU

Clasp, одна из новых реализаций CL, всего лишь в четыре раза медленнее, чем C++

 , , , ,


4

3

Новая реализация компилятора CClasp, базирующегося на Cleavir от Robert Strandh, без оптимизаций, всего лишь в четыре раза медленнее, чем C++. Ожидается, что с добавлением вывода типов производительность генерируемого кода с CClasp, должнo еще прибавить в скорости выполнения.

В приведенной таблице, также есть сравнение производительности генерируемого кода с SBCL (еще одна из активных реализаций CL) и Python.

Основной особенностью Clasp, среди других реализаций Common Lisp, является тесная интеграция с C++ и использование LLVM.

Подробности: https://drmeister.wordpress.com/2015/07/30/timing-data-comparing-cclasp-to-c-...

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

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

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

Модульности нормальной нет. И абстракции часто текут

Уже обсуждалось сотню раз, и не только на ЛОРе. Есть и модульность, и инкапсуляция не хуже реальной в мейнстримных ЯП. Так как в жабе - такой не будет. И это правильно! Иначе получится жаба со скобками.

эта сотня поломает код друг другу

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

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

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

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

Жаль, нельзя поставить натурный эксперимент. Собрать 40 лисперов и поставить им задачу написать браузер, полностью соответствующий HTML5/CSS3 не более, чем за 3 года. Если в разработке servo участвовало не более 298 человек, то 40 лисперов должны их заменить. :-)

Если каждый из сотни может поломать код остальным 99, гнать их надо не раздумывая

Технически может каждый. Язык позволяет.

Есть и модульность, и инкапсуляция не хуже реальной в мейнстримных ЯП. Так как в жабе - такой не будет

Ну хотя бы такую, как в Ada или C++. Или это недостаточно мейнстримные языки? Если речь про python/perl/php/ruby, то там с модульностью тоже не очень хорошо.

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

Собрать 40 лисперов и поставить им задачу написать браузер

Зачем? Зачем браузер с жирным рантаймом и ГЦ? А как интегрировать сторонних разработчиков? Их тьмы и тьмы. В общем, странное желание.

Хотя ... Возможно кто-нибудь «фо-фан» и напишет. По словам того же Архимага в гугловском кложуре-темплейт 15 тышь строк, а он аналог сделал в полторы, причём, основная часть - 900 строк.

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

Зачем браузер с жирным рантаймом и ГЦ?

это мы сейсас про один и тот же фокс с хромом говорим?

того же Архимага в гугловском кложуре-темплейт 15 тышь строк, а он аналог сделал в полторы,

Он же по ходу разработкт коментировал -Это мы делаем, это нет. Соизмеримость результата проверять все равно некому. Сдругой стороны в С-шных проектах код сгенерованых парсеров часто считают в раскрытых строчках. А влиспе макросы всегда до, что сказывается на размере. Как оно в той жабе неизвестно.

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

Зачем? Зачем браузер с жирным рантаймом и ГЦ?

Ты хочешь сказать, что рантайм лиспа будет заметен на фоне гигабайта памяти, занимаемой почти любым браузером при более-менее активной работе? И ГЦ в браузере есть — JavaScript ведь должен работать.

А как интегрировать сторонних разработчиков?

Также как в нынешние браузеры. Расширения на JavaScript и Common Lisp.

В общем, странное желание

Просто пример проекта, который на других языках многократно реализован (есть браузеры на C++/Java/Rust/Haskell). На Common Lisp единственный пример — Closure. Поддерживает только HTML4. Разрабатывался 6 лет, 9 человек.

он аналог сделал в полторы, причём, основная часть - 900 строк.

Боюсь, аналог такого же уровня, как Clasp, одна из новых реализаций CL, всего лишь в четыре раза медленнее, чем C++ (комментарий) : «у меня только строки». Когда пишешь для себя, то интуитивно выкидываешь те куски, которые лично тебе не нужны.

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

Он же по ходу разработкт коментировал ...

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

Чем больше проект, тем оправданнее написание ДСЛей, а в ЦЛ ДСЛи прекрасно реализуются на макросах => и абстрагирование, и сокращение кода (два в одном)

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

Ты хочешь сказать,

Я хочу сказать, что для браузеров специально придумали Раст, а ЖС пристраивается сбоку отдельным движком. И когда будешь встраивать браузер в кофеварку/стиралку, у тебя не будет «гигабайтов».

Также как в нынешние браузеры

В код самого браузера? Сколько сторонних разработчиков заинтересует твой браузер? Просто оцени размер ЦЛ комьюнити и подумай скольким из них интересен браузер.

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

Ну и зачем он? Чтоб было? Какие преимущества от даст?

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

то желание иметь гигиенические анафорические макросы - извращения эстета.

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

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

а в ЦЛ ДСЛи прекрасно реализуются на макросах

Ну так макросы в CL плохие. Усилий много, результата мало.

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

Ну так макросы в CL плохие. Усилий много, результата мало.

Конечно, конечно. Чай уж не из-за гигиены в схеме макросы «хорошие»? :) А как в Racket написать aif с семантикой классической aif в CL? Например, через классический aif легко выражаются некоторые другие анафорические макросы, например, awhen.

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

Например, через классический aif легко выражаются некоторые другие анафорические макросы, например, awhen.

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

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

Чай уж не из-за гигиены в схеме макросы «хорошие»? :)

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

Например, через классический aif легко выражаются некоторые другие анафорические макросы, например, awhen.

Давай уж корректнее - ни aif, ни awhen в CL просто не пишутся, пишется их сильно поломанная, нерабочая версия.

А как в Racket написать aif с семантикой классической aif в CL?

Да легко, замыкать контекст можно произвольным образом:

(define-simple-macro (aif cond then else)
  #:with it (syntax-local-introduce #'it)
  (let ([it cond])
    (if it then else)))
только зачем писать заведомо сломано?

Алсо, для awhen и т.п. этого не надо, оно в варианте с синтаксическим параметром прекрасно работает.

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

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

Да какая разница? Речь о том, что, в силу сломанности aif, любой макрос с aif тоже сломан. Причем у тебя нет никакой возможности гарантировать, что гдето внутрях использованного тобой библиотечного макроса нету aif (ну кроме разве что прочесывания всех сорцев)

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

Современный браузер с поддержкой HTML5 сделаешь силами 10 человек?

нет. но не по причине сложности задачи, а по причине необходимости обратной совместимости со всеми этими quirks mode. одним HTML5, таким правильным не обойдёшься — придётся поддерживать все костыли вплоть до HTML3.2 невалидного, с незакрытыми тегами. там и гнездятся громоздкости — дьявол в деталях.

что до более чистого, правильного движка — такие попытки были. начиная от чьей-то курсовой 2003 года про браузер на форте (строки слайсами) для HTML3.2 (но аффтар ниасилил quirks), затем те же hv3, NetSurf и прочие.

простые, понятные исходники. в отличие от.

потому что идея более правильная:

в hv3 например, была правильная архитектура — движок правил, по которым высчитывался layout для CSS+HTML4.

это всё более правильно, чем начинать с костылей, и гасить пожар ассигнациями (на финансирование толпы code monkeys, как сейчас можно в потомках WebKit движка).

Servo многопоточный и более конкурентный, хотя бы. так что правильная архитектура — решает.

нужно не тыкать 10500 раз наугад, а одна правильная центральная идея. описанная например в движке Inform7 для Interactive Fiction: движок правил + специализации + обвёртки к ос (или песочнице какой-то VM).

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

Или как разобьёшь на модули обработку HTML + CSS (JS ещё с горем пополам можно отделить)?

вообще гипертекст в потомках SGML пошёл куда-то не туда. в направлении тупика и тупняка by design. в SGML хотя бы была правильная идея с ENTITIES, DTD и валидатором на схеме, но в целом — тоже не туда

Тед Нельсон, сам аффтар гипертекста выразил в своих статьях много правильных идей: Embedded Markup Considered Harmful, ents, xanadocs и потоки кибертекста, не говоря уж о ZigZag database и applitudes. вот это было правильное направление мысли — но немытыя массы ниасилили скрипку Энгельбарта, помучавшись, осваивать инструмент на метауровне:

1. гипертекст — это не текст + метатекст в виде встроенной разметки. это 2,3,...., алеф 0,... и выше равноправных и равноценных потоков текста + метаинформация как интерпретировать, что из них является метатекстом, правилом, движком применения правил.

например:
а) видео с 2 видеодорожками, 3 звуковыми и 4 субтитрами, на разных языках. вот это — гипертекст. все каналы, потоки, ents — равноправны в мультимедия документах, xanadocs. документы структурированы — можно адресовать каждый keyframe в виде отдельного xanadoc, трансфинитными числами (жалкое подобие оных: purple numbers).
b) библия например, с комментариями и комментариями на комментарии. то есть: метатекст, метаметатекст и обычный текст — полностью равноправны.
c) переводы на разные языки — гипертекст. здесь можно изобразить память переводов, отдельных структурных единиц, поставленных в соответствие — адресуя оные трансфинитными числами.
d) понятно, что 3D-графика, и базы данных со ссылочной целостностью — тоже гипертекст. и тут приходим к ZigZag и applitudes: единая структура данных + «апплеты», работающие с данными (или views на эти данные), более компактные и unix way вместо громоздких applications suites с 10500 ненужных функций.
e) заменяем данные на знания и правила вывода, базы простые на семантические, гипертекст мёртвый на кибертекст оживлённый, диалоговый + возможность программирования на ZigZag клетках аналогично conscell лиспа — и получаем программируемый семантически целостный гипертекст, в виде AI. или хотя бы augmented усиления интеллекта
f) берём текстовые игры: Interactive Fiction, adventures, книги-игры CYOA, MUD, MOC, (+MOOC ;-) => получаем кибертекст и тоже гипертекст, оживлённый мир по правилам этого мира, текстовый ;-)
g) прикручиваем 3D, 4D, ... nD графику + massive online multiplayer => и получаем Metaverse Нейла Стивенсона из «Лавины», вдохновившую Абраша с Кармаком на Quake, а не какое-то жалкое MMO.
h) прикручиваем VR, AR, мыслеуправление и 3D принтеры — и получаем профит и усиление интеллекта.

векторный семантический гипертекстовый фидонет — расово, Мицгольно, православно.

А вот что делать, если ядро достаточно сложное? Таких задач много: СУБД, браузер, графический интерфейс

а вот тут как раз и пригодятся аспекты и аспектно-ориентированное программирование (АОП).

здесь мы вспоминаем про другой гипертекст: WEB от Дональда Кнута и Literate Programming. например, в реинкарнации от Emacs org-mode babel.

если дополнить средствами untangle, то есть восстановить метатекст + метамодель и конкретного ея воплощения -- то получим MetaCASE IDE для Reverse Engineering.

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

привлекаем топосы Гротендика и «параллельный перенос» знаний между теориями и метатеориями.

и скрещиваем с XanaDoc+WEB с такими фактами, знаниями, моделями и метамоделями.

в итоге, базы знаний будут ориентированы не на факты воплощения модели, а на инварианты «уравнений в морфизмах» метамодели, и изоморфизмы трансмутаций этих уравнений алхимической диаграммы ;-)

выходим на киберфизику, привлекаем Modellica, ну и вот тут-то всё заверте...

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

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

ну чем не повод.

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

...целых 46 разработчиков.

что они делают там такой толпой? и да, вот если DOM на CLOS переписать...

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

А вот что делать, если ядро достаточно сложное? Таких задач много: СУБД, браузер, графический интерфейс

а вот тут как раз и пригодятся аспекты и аспектно-ориентированное программирование (АОП).

ну к примеру, дабы не быть голословным: Книжник Константин с СУБД GOODS (...+Gigabase) и его диссер => ООСУБД на С++, на котором в ~1995 году была реализована рефлексия, затем на ней — метаобъектный протокол, который использовался для управления стратегий транзакций, персистентности, и т.п.

очень компактные, симпатичные исходники. но на D или том же DaoLang можно было бы проще (не говоря уже о CLOS/COS). MOP решает.

гуй: McCLIM + какое-то FRP на хаскелле.

КОВАЛЁВ Сергей Протасович ТЕОРЕТИКО-КАТЕГОРНЫЕ МОДЕЛИ И МЕТОДЫ ПРОЕКТИРОВАНИЯ БОЛЬШИХ ИНФОРМАЦИОННО-УПРАВЛЯЮЩИХ СИСТЕМ Специальность: 05.13.17 – Теоретические основы информатики Диссертация на соискание ученой степени доктора физико-математических наук

(здесь уже теоркат пошёл + аспекты, АОП)

и т.п. в сторону разумно выделенных аспектов +АОП

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

Писать COM.INFORMATIMAGO.COMMON-LISP.CESARUM.ARRAY:ARRAY-EQUAL-P не всегда удобно.

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

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

Смотри пример добавления собственного псевдонима

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

(in-package #:lib-a)

(rename-package 'very-very-long-package-name
                      'very-very-long-package-name
                      (cons (string-upcase "short-nick")
                            (package-nicknames 'very-very-long-package-name)))

(short-nick:cnt)

Затем в другом пакете

(in-package #:lib-b)

(rename-package 'another-library-with-long-name
                      'another-library-with-long-name
                      (cons (string-upcase "short-nick")
                            (package-nicknames 'another-library-with-long-name)))

(short-nick:foo)

А потом кто-то пытается их использовать совместно:

(asdf:load-op 'lib-a) ; ok
(asdf:load-op 'lib-b) ; конфликт имён short-nick

И лечить это приходится только исправлением исходников одной из двух библиотек.

Поэтому только хардкор, только Advanced readtable.

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

А нельзя никак удалить никнейм у пакета?

Можно. Также

(rename-package 'another-library-with-long-name
                      'another-library-with-long-name
                      (remove (string-upcase "short-nick")
                              (package-nicknames 'another-library-with-long-name) :test #'string=))

По-хорошему, надо это делать в конце пакета (или в конце каждого файла пакета).

monk ★★★★★
()

Этот шарлатан нанотехнологический с чубайсом бы неплохо спелся.

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

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

Ты редкостно невменяемое уёбище.

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

Ну ты попробуй написать хотя бы простенький макрос без гигиены. Много чудесных открытий ждет тебя.

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

Да сколько угодно. Писали, пишут и будут писать. Без гигиены. Она если и нужна, то в каких-то хитрых экзотических случаях. Мне макросов CL хватает с лихвой.

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

Да сколько угодно. Писали, пишут и будут писать. Без гигиены.

Пруфцы то можно?

Она если и нужна, то в каких-то хитрых экзотических случаях.

В том и проблема, что гигиена нужна везде. То есть вообще везде, в любом макросе. А вот обходить ее надо как раз - в редких и экзотических случаях. По-этому единственно логичное решение - наличие гигиены по дефолту с возможностью ее обхода. Иначе же написание любого, даже самого простого макроса, потребует закостыливания гигиены руками, а это адъ.

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

Я всю жизнь на CL без всякой гигиены писал, уебище ты тупое.

Макросы не для того, чтобы ебафорические if-ы делать. Макросы нужны для того, чтобы встраивать DSLи. То есть, макрос тупо обертка для компилятора DSL, чтобы выплеванный им код передать хосту. Только и всего. Гигиена в этом подходе только мешает.

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

Пруфцы то можно?

Да ткни в любую либу. Как минимум будет мелочёвка уровня with-* макросов. Да и посложнее примеры не сложно найти: например, та же optima.

По-этому единственно логичное решение - наличие гигиены по дефолту с возможностью ее обхода.

Я никогда не писал на Scheme ничего, кроме простых «Hello, World»-ов. Поэтому мне сложно судить, но допускаю, что это может быть действительно хорошее поведение по умолчанию. Но:

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

Это бред. Меня всегда удивляют ракетафанбоии криками --- «Нет гигиены, всё пропало!». Неужели осилить with-unique-names и once-only это какая-то большая проблема?

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

Я всю жизнь на CL без всякой гигиены писал

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

акросы не для того, чтобы ебафорические if-ы делать.

Да при чем тут анафорические ифы? Я же сказал - для каждого макроса.

Макросы нужны для того, чтобы встраивать DSLи.

ага, мы видим как в CL удобно писать дсли - тысячи строк на какой-нибудь сраный loop.

Гигиена в этом подходе только мешает.

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

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

Да ткни в любую либу. Как минимум будет мелочёвка уровня with-* макросов.

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

Неужели осилить with-unique-names и once-only это какая-то большая проблема?

Меня всегда поражало, когда о гигиене начинают говорить люди, которые даже не знают, что это, и как работает. Гигиена не имеет вообще никакого отношения к with-unique-names и once-only. То есть совсем небольшое имеет, конечно, но это даже не 1/10 предоставляемых гигиеной возможностей.

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

Естественно идентификаторы из DSLей надо экспортировать. Почти всегда. Представь себе DSL для pattern matching, например.

Так что иди нахуй, некомпетентный недоумок. По гигиеге тащатся только опущенные уебаны.

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

Меня всегда поражало, когда о гигиене начинают говорить люди, которые даже не знают, что это, и как работает.

так расскажи, хотя бы вкратце

/другой анон

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

Естественно идентификаторы из DSLей надо экспортировать

И?

По гигиеге тащатся только опущенные уебаны.

По гигиене тащатся те, кто не хочет делать лишней работы. А хочет писать 500 строк вместо 5000 с тем же результатом.

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

гигигена, руки мой, мыло, чаще мойся, тампоны, говно, презервативы бла бла бла

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

Смысл гигиены в том, что макросистема respect to lexical structure of program. Это гарантирует корректные связывания переменных в целом. Без этого, по сути, нельзя перейти от простых symbols к syntax objects, а это - строгое расширение выразительных возможностей макросистемы, нормальный дебаг, source location , да вообще куча разных вещей. Не говоря уж о банальном удобстве и отсутствию необходимости регулярно делать восход солнца врунчую.

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

увы! не могу считать это _описанием_ гигиены :( скорее это реклама. ну, или ты сам не понимаешь смысла о чём говоришь

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

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

Негигиеническая, с-но, по определению эту структуру нарушает.

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

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

anonymous
()

Не нужно

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

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

То, что ты пытаешься решить черезжопно («Поэтому только хардкор, только Advanced readtable.») имеет вполне нормальное решение

СБЦЛ развивается в правильном направлении

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

имеет вполне нормальное решение

То решение implementation-specific. А технически от моего Advanced readtable ничем не отличается. Только в Advanced readtable есть ещё полдюжины полезных возможностей (локальная смена readtable, пакета, псевдонимы для символов) и работает она на любом ANSI CL.

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

получится жаба со скобками

Дык давно уже. Кложурятина.

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