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-...

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

В лиспе нет ООП со статической типизацией.

Кстати, в природе вообще не существует «ООП со статической типизацией». Не будем забывать, кто ввел первым термин «ООП». Не стоит искажать смысл слов, можешь называть это «псевдо-ООП», в крайнем случае.

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

анонiмус снова радует нас своей мудростью.

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

Ну так напиши и покажи что это вообще возможно. Я вот могу ткнуть в http://emias.info/ или http://zakupki.gov.ru/, или в похожие по сложности проекты на C++, которые в паблик не торчат, но вполне себе существуют и работают.

На прошлой работе писал компиляторы и системы управления/верификации для FPGA-акселератора для high-frequency трейдинга своей (конторской) разработки. Это более технически сложное и наукоёмкое занятие, чем вебсайты.

Да тот же браузер, которым ты пользуешься, написан вовсе не на CL, хотя, казалось бы, что может быть лучше для работы с DOM?

Внезапно: https://en.wikipedia.org/wiki/Document_Style_Semantics_and_Specification_Lang...

HTML и document markup вообще отсюда вырос: https://en.wikipedia.org/wiki/Genera_(operating_system)#Documentation

У многих промышленных вещей уши из лиспа торчат, ибо оно там или впервые появилось, или настолько удачно было, что до сих пор используется. Типа https://en.wikipedia.org/wiki/EDIF

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

Что делать в ситуации...

Заниматься проектированием.

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

Внезапно:

Чего внезапно то??? Я тебе об этом и написал, или ты в упор не видишь?

Типа https://en.wikipedia.org/wiki/EDIF

Вот это и есть самый подходящий домен для этого языка. Ну вот и HTML ещё, только внезапно браузеры пишутся на C++, да и CAD-ы в большинстве - тоже.

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

У тебя опечатка в определении пакетов.

Опять у тебя какие-то надуманные проблемы: у всех кто работает над проектом должна быть документация на публичные интерфейсы, все все знают о коде, все сидят нас SCM.

Ну допустим третий раздолбай, собирая образ с помощью ASDF (как уж там умудрились не загрузить код с пакетом B?) получил по ушам в рантайме при тестировании своей определи (а репл на что?). Дальше что? Пофиксили и поехали дальше. Прямо супер проблема, сплошной лол.

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

только внезапно браузеры пишутся на C++, да и CAD-ы в большинстве - тоже.

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

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

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

не выгодно содержать высококвалифицированных спецов, если речь не о каком-нибудь болиде f1.

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

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

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

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

для организации

А про организацию, и даже про проектирование, тут речи не идет. Программист на плюсах — это винтик в системе, он к этим вещам не имеет отношения. И плюсы заточены именно под него.

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

Всё понятно: очередной царь...

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

Программист на плюсах — это винтик в системе, он к этим вещам не имеет отношения.

Программист на плюсах - это реальный инженер или реальный ученый, пишуший код, которым реально пользуются (ученые - например для численного решения уравнений Навье-Стокса или метода конечных элементов). А программист на CL (или любом другом модном на ЛОРе язычке) - в лучшем случае теоретик-исследователь чего-нибудь сферического в вакууме, которым пользоваться не обязательно, но если оно окажется удачным, то его перепишут на подходящем языке. А обычно это просто местная ленивая школота, которая почти ничего не знает и знать не хочет, но упорно ищет способ самоутвердиться с помощью того, до чего таки дотянулась. Типа, вот у них тайное знание с помощью которого они всё смогут одним пальцем задней ноги, а все вокруг тупицы.

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

это реальный инженер или реальный ученый

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

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

А ты, прости, к какому классу интеллектуалов-первооткрывателей себя относишь? Наверное, не меньше Тьюринга?

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

Я просто в десятку попал, вот тебя и пучит.

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

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

Т.е. если код написан не на плюсах и/или не инженером/учёным, то им не пользуются?

(ученые - например для численного решения уравнений Навье-Стокса или метода конечных элементов).

Это плюсовый аналог Фибоначчи на Хаскеле? Оно как-то связано с наукой? Зачем это писать ещё раз?

А программист на CL (или любом другом модном на ЛОРе язычке) - в лучшем случае теоретик-исследователь чего-нибудь сферического в вакууме, которым пользоваться не обязательно, но если оно окажется удачным, то его перепишут на подходящем языке.

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

Автор: «Меня это совершенно не колышет, у меня теперь куча денег и я материализую свою следующую идею, без оглядок на виси. Пусть развлекаются.»

Переписывальщики: «Наша мегаконтора купила какой-то говнопродукт, написанный на чём попало. Полный фейл, короче! Мы щас всё это круто перепроектируем и переписываем, чтобы было, как у всех!»

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

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

Это разумеется. Только foo описано в публичном интефейсе модуля A, а в модуле B используется в реализации.

третий раздолбай, собирая образ с помощью ASDF (как уж там умудрились не загрузить код с пакетом B?) получил по ушам в рантайме при тестировании своей определи (а репл на что?)

Обычно ситуация такая:

(defpackage #:C (:use #:A #:D #:E ...) ...)

, а модуль E для реализации какой-либо из своих функций начинает использовать B.

Пофиксили и поехали дальше.

Пофиксили как? Написали свой foo1 вместо foo для избежания конфликта? А если foo используется в нескольких модулях, все переписывать?

monk ★★★★★
()

не хватает только «на регекспах».

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

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

Т.е. если код написан не на плюсах и/или не инженером/учёным, то им не пользуются?

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

Это плюсовый аналог Фибоначчи на Хаскеле? Оно как-то связано с наукой? Зачем это писать ещё раз?

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

Переводя на бизнес-язык:

Переводя на понятный язык: знание CL, Haskell или чего-то подобного (Wolfram Mathematica например) не делает тебя гением, способным делать открытия, с другой стороны знание C++ тебе быть таким гением не помешает если что. Просто C++ гораздо больше подходит для создания эффективных высокопроизводительных программ на компьютерах с архитектурой фон Неймана, вот и всё.

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

Ты глуп!

Ты глуп не потому, что не знаешь «CL, Haskell или чего-то подобного (Wolfram Mathematica например)», а потому, что не понимаешь, что «для создания эффективных высокопроизводительных программ» на C++ нужна хоть какая-нибудь (хоть говёная) программа на «CL, Haskell или чего-то подобного (Wolfram Mathematica например)». На C++ придумать что-либо новое невозможно в принципе. Поэтому и существуют модулы, симулы и тп., а Си и Жаба - это как конвеер на заводе, для трудоустройства ПТУшников.

И да, _хороший_ рабочий на конвеере может зарабатывать больше некоторых инженеров (причём, так во всём мире!), но оставаться при этом глупым ПТУшником. Как ты ;)

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

Первым ООП языком можно называть все что угодно. Была симула, потом появилось ООП, затем Вася Пупкин зачем то назвал это тоже ООП, все начали повторять как попугаи, и в категорию ООП внезапно попали языки, которые просто синтаксисом, внешне, чем то напоминают его, такие, например, как плюсы.

Чистый ООП язык должен удовлетворять, как минимум следующим условиям:

Все есть объект.

Объекты общаются между собой только посредством сообщений

Объект сам решает как ему отвечать (либо не отвечать) на сообщения, и кому. То есть, объект, это фактически субъект.

Классы — это метаобъекты, по сути, такие же объекты, как и все остальные.

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

Да, вот еще что:

Динамическое, экстремально позднее связывание, 100% динамическая диспетчеризация

Любое возвращаемое значение — это тоже объект

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

Очередное подтверждение твоей глупости :)

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

Хотя, ему простительно, он закончил ПТУ, а вот ты - действительно СМЕШОН :D:D:D

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

Просто C++ гораздо больше подходит для создания эффективных высокопроизводительных программ на компьютерах с архитектурой фон Неймана, вот и всё.

Ты sbcl хотя бы щупал?

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

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

Инженеры (именно так и называются те, кто пишет программы, в том числе на C++) и ученые то как раз делают. Ты ничего полезного не делаешь. Ходишь и пишешь тут какая ты бесполезная пустышка.

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

Ещё один. Ты эту тему хотя бы читал или мне её тебе отдельно пересказывать нужно?

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

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

Можешь мне не рассказывать, у меня всё специальное образование было: «Мы не понимаем, как оно работает, но вот вам эмпирическая таблица и выведенная из неё формула». Вся механика жидкости и газа и теория горения такие. Речь шла о написании учёным численного решения (тем более, МКН), которое уже написано до него в многочисленных вариантах. Где тут новизна-то?

Просто C++ гораздо больше подходит для создания эффективных высокопроизводительных программ на компьютерах с архитектурой фон Неймана, вот и всё.

C++ плохо подходит для написания программ в условиях неясности, когда код должен переписываться много раз. Хороший исследовательский язык - это, например, CL.

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

Ты глуп!

А ещё безграмотен и ограничен.

Если бы тебе было пятнадцать лет, тебе было бы простительно, но ... Так ты, наверное, остановился в своём развитии в пятнадцать?!

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

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

Наоборот, в IDE все быстренько рефакторить можно. А в скобочном говне ты просто потонешь.

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

В программировании инженеры и академики пишут на C++ и Java. А лисперы это даже не рабочие, просто юродивые.

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

Можешь мне не рассказывать, у меня всё специальное образование было: «Мы не понимаем, как оно работает, но вот вам эмпирическая таблица и выведенная из неё формула». Вся механика жидкости и газа и теория горения такие.

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

Где тут новизна-то?

Новизна тут в том, чтобы этот Навье-Стокс вообще суметь посчитать в оригинале в 3-D для хоть какой-то похожей на практическую задачи. Это не написано. Потому что существующими методами понадобится ещё лет 50 работы закона Мура чтобы можно было, наконец, начать обсчитывать какой-нибудь самолет на самом мощном суперкомпьютере.

C++ плохо подходит для написания программ в условиях неясности, когда код должен переписываться много раз. Хороший исследовательский язык - это, например, CL.

Любой ООП язык для этого не очень подходит, как и вообще концепция ООП. Но пока для борьбы со сложностью это один из немногих действенных подходов. Поэтому если нужно сделать сложную систему, но которая будет хорошо работать, то необходимо ООП, статическая типизация и разные другие фичи, позволяющие например, эффективно использовать язык в команде или расширять его посредством библиотек (чтоб велосипед не изобретать). Если при этом нужно ещё и эффективно использовать вычислительные ресурсы, то ответ остается один - C++. А так, конечно, есть готовые системы для численного моделирования (стОят тучу бабок разумеется). Да в той же математике можно и численным моделированием заниматься, и аналитикой, и даже писать готовые модули, которые потом компилируются в динамические библиотеки. Там всё есть что исследователю надо. Так что польза от лиспа вдвойне сомнительна.

asaw ★★★★★
()

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

Кстати, у того же Python есть http://ipython.org/notebook.html - такие «батарейки» CL даже и не снились.

Да и потом, утверждать, что какой-нибудь (setf (aref series index) value) лучше, чем series[index] = value будет только упертый фоннатег.

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

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

C++ плохо подходит для написания программ в условиях неясности, когда код должен переписываться много раз. Хороший исследовательский язык - это, например, CL.

В Тихом океане есть остров. Условия там такие, что у племни там живущего, в языке отсутствует понятие времени. То есть «во время прибоя» или «перед закатом» существуют, а «вчера», «завтра», «через неделю» - отсутствуют. Если ребёнка, пока ему не исполнилось десяти, забрать из этого племени, то он за несколько лет поймёт суть понятия «время». Если ребёнок прожил, не выезжая, до 15-17 лет, объяснить что такое «завтра» ему невозможно в принципе.

Любой проект на крестах или жабе начинается с написания точного ТЗ. Пока нет _полной_ спецификации программирование не начинается. Кому ты объясняешь, что такое «написание программ в условиях неясности»?

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

Между Тихим и Индийским океаном есть остров Ява, на нем живут программисты. В их картине мира отсутствует понятие о том, что для формулировки полного ТЗ может понадобиться решение плохо формализованных и даже плохо сформулированных задач. Если программист находит свою первую работу на этом острове, научить его решать нестандартные задачи невозможно в принципе.

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

Че же ты тут в свой огород то плюешь?

В какой «свой»? Я умею работать без «точного ТЗ и _полной_ спецификации».

Так ты же и есть жаба-хашкел-статик-whore

Жаба здесь лишняя, но не суть. А Хаскель, говорят, отличный язык для прототипирования.

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

А Хаскель, говорят, отличный язык для прототипирования.

Говорить - не мешки воротить.

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

Обычно я твой бред не читаю, но раз уж случайон наткнулся, скажу тебе как и асаву - ты глуп и ограничен!

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

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

Эмпирический характер знания и непонимание теоретического механизма - это разве не одно и то же? Или, по-крайней мере, первое - вывод из второго?

Любой ООП язык для этого не очень подходит, как и вообще концепция ООП.

А вы на скольких языках вообще свободно программируете? На чём основывается это утверждение?

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

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

Если при этом нужно ещё и эффективно использовать вычислительные ресурсы, то ответ остается один - C++.

Задач, где вычислительная эффективность нужна от и до, крайне мало. Для IO-bound задач подходит любой язык с более-менее вменяемой имплементацией. Остальные, где IO- и compute-bound идёт вперемежку, можно использовать сишные библиотеки, а костяк писать на том, на чём удобно.

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

Лисп позволяет легко сделать DSL. Это огромное преимущество перед любой системой с фиксированными синтаксисом и семантикой. Ну и лисп позволяет передавать управление как в сишный/jvm'ный код, так и принимать управление оттуда.

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

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

2mv, не Фибоначчи, там у них задача о каверне стандратная, все изобретатели новых методов решения Н.-С. на ней практикуются, а реальные задачи КЭ считают и не парятся.

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