LINUX.ORG.RU

CL быстрее прочих :)


0

3

Новый, и как всегда красивый, пример кодогенерации от swizard

http://swizard.livejournal.com/158763.html

на этот раз решение задачи http://shootout.alioth.debian.org/u32q/benchmark.php?test=fannkuchredux&lang=...

★★★★★

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

> Потому что это не текст — это отрефлексированная модель на тему

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

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

И вообще, в чем вопрос? Я же четко ответил, что не осилил лисп. После этого все же ясно сразу становится.

Вопрос в том, что ты невпопад реплики вставляешь. Вернее, зачем ты это делаешь.

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

> Т.е. вопрос в том, какую скорость можно получить на CL без метапрограммирования?

хороший, годный вопрос

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


которая предварительная и потому есть зло? ОК, Ваша позиция ясна.

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


В требованиях такого быть и не может, да. Это особенности дизайна до реализации. А результатом чего является именно такой дизайн?

Почему выбор системы ООП — решение из области дизайна, а случай с сабжем (tm) — из области жёсткой оптимизации?
то есть, почему дизайн не может (заранее) подразумевать какого-то наиболее удобного для него способа оптимизации?
Вот паттерны GoF — это результат определённого рода оптимизаций, обусловленных исходной объектной системой и проектными(дизайнерскими) решениями. Вывернем это наизнанку, и сделаем такой дизайн, где целью будет оптимизация, механизмом — метапрограммирование, частным решением — выбор какой-то объектной или другой системы для реализации.

Та же система, вид сбоку в профиль.

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

В данном случае заинтересовало это деление на neu skul/old school, объективно ли оно присутствует или это ваше личное впечатление

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

> Вот возьмём такой REPL из SBCL (1) , REPL из ECL (2), REPL из Python

(3), и какой-нибудь вариант «сам себе репл» типа C приложение +

dlopen + вызов конпелятора (4).



а что именно требуется от «интеграции со SLIME»?


На самом деле это очень интересный вопрос, если задать его в виде «В чём заклюаются сильные стороны REPL в Common Lisp». Однако, я не уверен что готов отвечать на него в формате форума, поскольку тема эта очень важная. Я бы хотел, наверное, написать пост в блоге на эту тему. Но не могу обещать, что сделаю это сегодня или завтра.

Но, например, могу сейчас показать что я сделал для интеграции SLIME с RESTAS - http://restas.lisper.ru/manual/slime.html, и что было бы не возможно без такого REPL. Кстати, Django и RoR хоть и используют языки имеющие repl, но в режиме разработки постоянно всё перезагружают, так что тормозит страшно.

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

>Он и так очень низко востребован, я не знаю как это можно поделить и почему на 10

т.е. «обрезание функциональности» никак не повлияет на востребованность? Здорово!.. На 10 - ну прикинул кой-чё к носу. Но даже не 10 а 2 - и то слишком много

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


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

Почему мы не говорим о лямбда и замыканиях?


Ты хочешь поговорить об этом? =) Я соглашусь с тобой: и лямбда и замыкания - оччень полезны. И хорошо что они есть в CL.

Поговорили? Может вернёмся к макросам? =)

Разве метапрограммирование является уникальным для CL?


(не вспоминая схему) оно уникально своей естественность для CL. И дело не в «квазицитировании», а в том, что манипулирование списками - родная стихия лиспа. Квазицитирование - лёгкий сахарок для простейших случаев. Произвольные манипуляции с AST-ом я видел ещё только в немерле, но внешне это выглядит так, что, не смотря на его типизацию, хочется забыть его как страшный сон (хотя, если бы не моно - сидел бы на нём =).

Haskell, OCaml


Haskell сам по себе «не подарок», а с другой стороны, ему как раз макросы нужны много менее (и в такой-же степени востребованы). У OCaml разве не «чистый препроцессор»?

Даже в C++...


ой, не вспоминай...

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


«Короче, Склифосовский!»: метапрограммирование ... наибольшей мощью должно обладаться в языках со статической типизацией. Так и обладает - в том-же немерле. Но оно там страшное (по виду - никак не по возможностям) как три часа ночи. И если на «гладких списках» лиспа иногда долго думаешь «что, как и из чего получить», то там мигрень можно заработать гораздо быстрее

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


Итого (схему не вспоминаем): мощность - TH и Nemerle. Выразительность - разве что TH, и то не поручусь. Это «многие современные языки»?

А вот REPL в CL


очень хорошая штука - ни кто не спорит! И тоже не одному CL «принадлежит». Ты хочешь об этом поговорить? =)

Почему предметов лисп-срачей не является REPL? а всегда только макросы?


Не знаю... Самый простой ответ (не всегда самый правильный) - потому что часть кодеров «ниасилила» макры в полной мере, или их использование вызывает у них жуткую мигрень, и они стараются всеми силами принизить значимость макросов дабы уменьшить возникающее чувство собственной неполноценности? А с REPL-ом то чего спорить?...

Потому что за ним не стоит «красивой сказки», в которую можно поверить без реальной практики.


извини, возникает чувство, что тебя изнасиловали этой «сказкой»...

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


...а значимость всего остального ты всосал с молоком матери? И нахера ты вообще начал противопоставлять REPL и макросы?

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

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

1C же, Visual Basic, тот же PHP, и т.п. Потребление большое, несмотря на (а может быть, и благодаря тому), что языки «изначально горбатые»

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

>1C же, Visual Basic, тот же PHP, и т.п. Потребление большое, несмотря на (а может быть, и благодаря тому), что языки «изначально горбатые»

Может я криво выразился - прочитай ещё раз. Я спрашивал - когда «усечение возможностей» уже существующего и используемого языка не приводило к снижению его востребованности. Желательно привести ЯОП.

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

> В данном случае заинтересовало это деление на neu skul/old school,

объективно ли оно присутствует или это ваше личное впечатление


Я вообще разделю историю Common Lisp (и писал об этом уже ранее) на две части, до условно 2003 года и после. Дата 2003 г. достаточно условна, но она где-то там. Форк CMUCL, создание SLIME, а также более широкое распространение Linux (на котором SBCL работает лучше всего) создали необходимые предпосылки для того, что бы простые люди (а не академики из университетов или инженеры из NASA) смогли реально начать работать с CL. Это привело к весьма существенным изменениям в структуре сообщества и, конечно, к изменениям в подходах разработки на CL. В 90-ых CL фактически умер, но в 2000-ых возродился вновь.

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

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

> Я спрашивал - когда «усечение возможностей» уже существующего и

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


Ну PHP же! Очень яркий и характерный пример.

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

>Ну PHP же! Очень яркий и характерный пример.

Извини, просто не в курсе - чё отрезали? И потом, его трудно воспринимать «универсальным» - уж очень узко используется.

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

> Извини, просто не в курсе - чё отрезали?

Вначале это была библиотека на Perl. Потом из Perl выкинули всё ненужное, переписали и получился PHP.

И потом, его трудно воспринимать «универсальным» -

уж очень узко используется.



В книге «Профессиональное программирование на PHP» ты найдёшь обоснование почему его стоит использовать не только для веб ;) Кстати, очень хорошая книга (я серьёзно).

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

>Вначале это была библиотека на Perl. Потом из Perl выкинули всё ненужное, переписали и получился PHP.


Этак мы до Адама дойдём. Это скорее формирование нового языка и оптимизация под «поставленные цели».

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

> Это скорее формирование нового языка и оптимизация

под «поставленные цели».


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

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

>зашит где-то внутри платформы

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

да те эе формы с интерфейсом сгенерировать


В рантайме генерят такие штуки. А метапрограммирование в бизнес логике? Ой-ли? Я конено, не пробовал, но в целесообразности такого подхода у меня жуткие сомнения.

Объединять куски бизнес-логики в рамках, допустим, компонентного подхода — это да. Но это не метапрограммирование.

бизнес-правила с событиями


Событийная логика препятствует использованию комбинаторов. Проверено. Да и наступление события должно фиксироваться в ИС конкретным документом. Так что как бы тут такая логика не очень...

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

да ну, посмотри на фанбоев: одни готовы на питоноджаве писать операционки, другие орут «всё надо делать на С!» =)

а если ты такой умный, то напиши на SQL IDE для работы с этим самым SQL (за использование DML руки вырву)

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

>Привет, ребята! У вас весело :)

Было весело - я уже выдохся... Хотя архимаг такой заводной мужик!... ;)

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

> да ну, посмотри на фанбоев: одни готовы на питоноджаве писать операционки, другие орут «всё надо делать на С!» =)

а если ты такой умный, то напиши на SQL IDE для работы с этим самым SQL (за использование DML руки вырву)

это был такой юмор особенный? при чем тут SQL?

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

> Вопрос в том, что ты невпопад реплики вставляешь. Вернее, зачем ты это делаешь.

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

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

> Зависть к лисперам, таким сильным и мудрым, заставляет тебя спорить дабы хоть как-то уровняться с ними.

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

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

Только что я избавился от желания набухаться. Выпил и желание, осуществившись, пропало.

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

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

Я могу сказать, что ты дурак.

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

>Было весело - я уже выдохся... Хотя архимаг такой заводной мужик!... ;)

Хы-хы, кликнул несколько страниц в середине и понял, что лисперам для срача не нужны внешние враги. Они друг друга развлекать умеют. :)

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

Так я видел этот тред еще на двух страницах. Ну, думаю, быстро поутихнет. Захожу повторно, а тут уже 17 страниц. Ппц. :)

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

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

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

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

Хы-хы, кликнул несколько страниц в середине и понял, что лисперам для срача не нужны внешние враги. Они друг друга развлекать умеют. :)

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

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

> понял, что лисперам для срача не нужны внешние враги.

Им просто было жаль расходиться - когда еще такая компания соберется.

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

Т.е. макрос это такая функция (например (functionp (macro-function 'defun)) => T) со стратегией вычисления call-by-macro-expansion, а обычная функция - со стратегией call-by-value? Получается что функции вида named-lambda, те что регистрирует defun в глобальном окружении, локальные flet функции и макросы регистрируемые defmacro, локальные macrolet-функции - это считай всё функции которые просто по разному себя ведут относительно стадий compile-time/runtime?

(or t (sleep 1))

Не будет спать в рантайме, потому что «функция» or от параметров t и '(sleep 1) вернёт t в compile-time. А

(print (+ 1 (/ 1 0)))

Будет ошибаться потому что обычная функция будет вычислять свои аргументы в runtime. Получается два разных проявления одной и той же штуки (поведения eval/macroexpand в цикле разных стадий вычисления: read -> compile -> eval -> read -> compile -> ...) - функции для декомпозиции, повторного использования кусков кода - алгоритмов в runtime, и макросы для повторного использования шаблонов кода в compile-time. Оперируя кодом в шаблонном виде можно в любом случае прийти к DSL, причём если строить этот DSL более менее правильно, то помимо макросов (оперирования шаблонами кода) нужны будут функции (разбор AST, стадия eval внутри стадии compile) и структуры (для ограничения семантических кусков, тех выражений что термы, DSL).

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

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

А что тут не ясно? Авторам хаскелов есть чем заняться помимо дрочения производительности, очевидно же. Ибо язык развивается, о чем свидетельствует недавний выход нового репорта. А чем заниматься тем, кто SBCL поддерживает? Особенно под линукс. Последний стандарт CL — 94ый год, если я не ошибаюсь. Что им делать помимо удлиннения результатов бенчмарков?

Результатов никаких.

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

P.S. Кстати, если пишешь на лиспе, то уже автоматически не можешь нести чушь на ЛОРе? Хотя, точно нет, есть же яркие примеры.

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

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

s/всем/всем лисперам/

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

А что тут не ясно? Авторам хаскелов есть чем заняться помимо дрочения производительности, очевидно же. Ибо язык развивается, о чем свидетельствует недавний выход нового репорта. А чем заниматься тем, кто SBCL поддерживает? Особенно под линукс. Последний стандарт CL — 94ый год, если я не ошибаюсь. Что им делать помимо удлиннения результатов бенчмарков?

Очень ценное замечание. В нужном месте, в нужное время, хорошо поддержало дискуссию. А главное, ни о чём.

P.S. Кстати, если пишешь на лиспе, то уже автоматически не можешь нести чушь на ЛОРе? Хотя, точно нет, есть же яркие примеры.

Кто на чём-то пишет, тот обладает опытом и может полноценно участвовать в дискуссии по темам, связанным с этим «что-то». Т.е. с выкладыванием кода, высказыванием хотя бы примерно правильных соображений, основанных на личном опыте и т.п. Ты только срать приходишь. Ни одного в техническом плане ценного замечания от тебя не обнаружено. Ни одного. Даже около-DSL'ный срач хоть и флуд флудом, но хотя бы изобилует ссылками на внешние источники, анализом библиотек, рассуждений (по-теме) участников. Ты в дискуссиисраче о тонких материях никакого участия не принимаешь, только появляешься, чтобы ляпнуть очередной «ценный» камент, из-за чего создаётся и крепнет ощущение, что ты студент, рьяно желающий приобщиться к большому и светлому, но уровня знаний и практического опыта не хватает, однако, высказать своё мнение ну очень хочется.

В принципе, глупость ляпнуть не так страшно, все когда-то учились, но усиленно онанировать на свою всезнающую непогрешимость в твоей ситуации выглядит как-то глупо. В теме полно неадекватов в общении, типа archimag'а или меня, но сказать, что неадекваты не в теме, ничего не знают и, вообще, только воздух портят, нельзя, ибо они по любому теоретическому поводу вытаскивают практический кусок кода.

Если тебе сложно вести себя так же, но очень хочется принять участие, то можно попытаться для начала срать на каком-нибудь форуме для начинающих. Лиспосрачи на ЛОРе - тема старая, поэтому с каждым срачем уровень технической компетентности поднимается всё выше и выше, и начинающим всё труднее ляпнуть что-то адекватное. Заканчивающим-то по ходу умные книжки и прочие эдвансед топикс читать приходится...

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

> Им просто было жаль расходиться - когда еще такая компания соберется.

Это всё внешнее :) основное это успехи swizard на шотауте!

Напоминая, бо саму тему уже не даёт редактировать, поправлены два теста сразу:

а) «блинчеги»

б) «хомелеончеги»

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

> основное это успехи swizard на шотауте!

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

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

Так я видел этот тред еще на двух страницах. Ну, думаю, быстро поутихнет. Захожу повторно, а тут уже 17 страниц. Ппц. :)

так это же основное: не рвать сразу с места в карьер :), надо плавно входить в нагрузку и молотить в режиме аэробной нагрузки (прерываясь на еду и работу :)...

... ну еще в самом начале разогнать школоту с полянки :)

ну и повод то, повод какой! а изложено как?! [чёрно завидуя] ну прям «молодой Зусман» блин!

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

> основное это успехи swizard на шотауте!

А основное в этих успехах - то, что CL на шутауте придется игнорировать.

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

понимая и опуская всю конструктивную часть поста...

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

Только смысла в них никакого.

[внезапно] доктор, я буду жить? а смысл? :)

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

> А основное в этих успехах - то, что CL на шутауте придется игнорировать.

ну шило в ... не утаишь :)

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

но раз она есть и её смотрят, то очень надо туда писать и побеждать...

жизнь придала ей другой смысл, и с этим смыслом придётся жить, или укреплять сами знаете что :)

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

Очень много сказано ценных слов. И главное — ни о чём.

Зачем ты свои комплексы на меня перекладываешь?

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

> Кто на чём-то пишет, тот обладает опытом и может полноценно участвовать в дискуссии по темам, связанным с этим «что-то». Т.е. с выкладыванием кода, высказыванием хотя бы примерно правильных соображений, основанных на личном опыте и т.п. Ты только срать приходишь.

6 кусков кода за весь тред: 4 от quasimoto, 1 от archimag и 1 от dave. От тебя нуль. Примерно столько же ценных замечаний в дискуссии про dsl'и(куда я, кстати, не влезаю в силу того, что не писал ни одного dsl'я и не могу здраво рассуждать на эту тему). Снова тот же вопрос: зачем ты свои комплексы на меня перекладываешь?

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

> там всё надо игнорировать, причем с момента задумки данной хреномерки.

Эта фраза как-то неискренне звучит после радости за подвиги swizard'а.

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

Хотя, нет. Пожалуй, попрошу тебя не продолжать. Буду весьма признателен, если ты перестанешь что-либо мне писать.

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

> Эта фраза как-то неискренне звучит

я бы тоже не верил в искренность окружающих, с шилом то в ... :) (поскольку контрпримера с ниспровержением sbcl таки не было, причины (отмазки :) не засчитываются :)

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

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

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

psv1967 ★★★★★
() автор топика

И тут ВНЕЗАПНО в тред врывается доктор Кукинштейн с аптечками, полными антидота от функционального мракобесия, и с ротационным шестиствольным какашкометом наперевес.

Здравствуйте, пупсики! Zubok говорит, меня здесь заждались?

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