LINUX.ORG.RU

Racket VS Common Lisp

 , , , ,


8

10

Добрый день дорогие аналитики L0R'a. Ковыряю ракет, пишу на нем клиентскую программу - а пока хочется вот что спросить. Все же что лучше - Racket или Common Lisp? Что более перспективно? Ну и естественно, какие у одного недостатки/преимущества по сравнению с другим?

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

прям лондон? там же жилье дорогое и низкосортное.

Лондон большой и разнообразный. В том же Гринвиче или Баттерси жилье очень неплохое.

или пригород?

И в пригородах все весьма неплохо. Цены вполне доступные (порядка £400k за очень неплохие 4-bedroom detached).

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

Ненавидят фанатиков лиспа люди опытные, умные, продвинутые, которых задолбали все эти сказки-какашки про серебрянную пулю, про «парадокс Блаба» и прочее сектантское говно.
«парадокс Блаба» и прочее сектантское говно.
«парадокс Блаба»

А ты попробуй его опровергни.

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

Человек знает и умеет лисп, но не согласен с тем, что он мощнее <некоторого-другого-языка>.

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

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

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

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

Да ну? А как же, хотя бы, wordpress? Попробуй, найди столь же грязный и паршивый код на Java.

Hibernate.

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

У меня чистыми после всех расходов (включая развлечения) более $10k в месяц остается.
Работа у таких, как я - не бей лежачего. Отдых, а не работа.

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

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

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

Не встревая в бесплодную дискуссию о спорных концепциях в основе Hibernate, какие ты можешь предъявить конкретные претензии непосредственно к коду?

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

Именно. Если для их настолько «мощного» не-блаба даже невозможна полноценная IDE, с рефакторингами, комплишеном и приличной навигацией, то никакая это не «мощность», это кривизна, костыли и имманентно ущербная концепция в основе языка.

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

Сам страдай молча. Девушки в Малибу по-красивее будут, чем чопорные брёвна в Лондоне. :p

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

Ты, надо полагать, лично сравнивал? И ты лично продал стартапег за миллионы и отвисаешь в CA? Ну ну. А уж сравнивать твои влажные, потные фантазии с моей объективной реальностью это как-то очень глупо.

anonymous
()

Покажи мне свой код на Racket, пожалуйста.

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

Ничего личного, не выбрасывать же креатив.

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

Ну почему многим лисперам так рвет попу, когда они видят что есть еще что-то кроме лиспа?

Это ты о ком? кому рвет?

call/cc это просто одна из семантик.

Семантика у продолжений одна и единственная. При чем определена она четко и формально строго. Если семантика другая - это уже не продолжения, а нечто совершенно другое.

Если ты про Rx, то асинхронщина там просто приятный бонус.

Там кроме асинхронщины ничего и нет. Rx - это просто немного сахара над тредами. Я на макросах делал реализацию Rx через треды ради интереса, получилось примерно полторы сотни строк кода, справился за вечер. Так что не надо мне рассказывать, что там и как - я знаю получше тебя. И к продолжениям оно отношения не имеет, да. Rx можно сделать на продолжениях (потому что на продолжениях можно сделать треды), но продолжения нельзя сделать на Rx.

А я утверждаю что это не так.

Ну так ты приведи мби хоть аргумент в пользу своих слов? Покажи мне полноценно работающий оператор call/cc не в лиспе, а в другом ЯП. А то утверждать-то ты что угодно можешь, но истиной оно от этого не станет.

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

Интересно. С каких это пор? Java - классический enterprise язык.

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

Валяй, ткни пальцем в хотя бы один пример кода с apache.org

Как из того, что (предположим) на apache.org нету быдлокода следует тот факт, что быдлокода на джава нету вообще?

На нем пишут суровые мужики в костюмах и при галстуках.

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

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

Идеальные языки для быдлокодинга - это copy-paste-friendly языки.

То есть джава.

А Java требует следования определенным практикам

Это с каких пор?

да и жесткая статическая типизация за быдлокод по рукам бьет как следует.

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

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

Я всего лишь просил показать быдлокод.

На apache.org зайди.

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

IDE, с рефакторингами

Так рефакторинги нужны только для copy-past языков типа джавы. Лисп к ним не относится.

комплишеном и приличной навигацией

Все есть же.

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

Ну что можно, это очевидно. Другое дело, что возможности ускорения такого существенно зависят от конкретной задачи.

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

Кстати, ещё вопрос по Racket. В нём есть racket/generic. Но в этих дженериках нет диспатча по нескольким параметрам а-ля CLOS.

Вопрос: такое в принципе не реализуемо на классах Racket или просто никому не нужно?

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

Думаю, реализуемо. С Racket постоянно возникает вопрос «почему тут не реализовали это?». Пожалуй, это неизбежно при наличии множества батареек.

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

думаю дело в том, что либа generic еще достаточно молодая.

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

В лиспотредах, как мне кажется, концентрация лородебилизма низкая.

Да, мы тут сидим такие консерваторы, а за каменными стенами Development'а орды школоты и быдла со стимами и нескучными обоями грабят, насилуют и убивают простолорчан. Скоро они возьмут большинство в модераторах, если еще не взяли. Мы следующие.

«Если они попадут в наш корабль, они изнасилуют нас до смерти, сожрут наше мясо и сошьют из нашей кожи себе одежду. И если нам очень, очень сильно повезёт, они сделают всё это именно в таком порядке.»

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

Есть несколько объектных систем для Ракеты, которые делают для нее СиЛОС (например Swindle) Ракетные Генерики - это скорее реализация концепции интерфейса для структур.

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

Есть несколько объектных систем для Ракеты

Вот в этом и проблема. Классы из одной в другую не переносятся. Если в CL в CLOS трамбуются и структуры и все встроенные типы, то унаследовать в SWINDLE от racket/gui/frame% или от структуры насколько я знаю нельзя.

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

Мы следующие.

Братья по оружию, куда будем отступать? Они же нас по одному так и перебьют. Сколько искусных воинов мы уже потеряли под натиском варваров. Надо собирать остатки армии и выдвигаться.

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

Из доков:

Good integration with the Racket implementation: primitive values have corresponding Swindle classes, and struct types can also be used as type specializers. A Swindle class will be made when needed, and it will reflect the struct hierarchy. In addition, structs can be defined with a Swindle-line defstruct syntax which will also make it possible to create these structs with make using keyword arguments. (swindle/tiny-clos and swindle/extra)

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

... primitive values ... struct types ...

Классы из одной в другую не переносятся. Там ещё ROOS есть. С ещё одним набором ни с кем не совместимых классов.

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

а чем не устраивают стандартные классы на основе message-passing?

иногда бывают задачи типа (open-document document role) и в зависимости от вида роли должно открываться разное представление документа. Причём роли и документы могут наследоваться.

Конечно, есть паттерн Visitor, но на фоне CLOS он выглядит очень убого. Да и расширение реально предлагает только в одну сторону (нового посетителя добавить легко, а вот новый узел...).

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

В лиспе SCLOS всобачен в ядро языка, потому он и совместим со всем остальным. В Racket в ядре структуры, соовтетственно все классы - тоже структуры.

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

иногда бывают задачи типа (open-document document role)

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

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

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

Чтобы написать defmethod для Racket приходится переписывать половину Swindle. Или пользоваться костылём

(define/match (open-document document role)
   ((doc1 role1) ...)
   ((doc1 role2) ...)
   ...
   ((doc2 role1) ...)
   ...)

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

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

CLOS всобачен в ядро языка, потому он и совместим со всем остальным

Изначально PCL тоже была на макросах (как Swindle). И сейчас есть объектные системы в CL, несовместимые с CLOS (например, на лямбдах).

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

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

Чтобы написать defmethod для Racket приходится переписывать половину Swindle.

Нахрена переписывать Swindle? Просто нафиг его выкинь и напиши свой defmetod, который будет собирать ту самую портянку из define-match автоматом.

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

Чего мне смотреть? У меня чистыми после всех расходов (включая развлечения) более $10k в месяц остается.

Посмотрим когда тебя заутсорсят ;)

vertexua ★★★★★
()

Только что дописал небольшую (~ 200 строк), но очень нужную утилиту для личного пользования. Написал на SBCL (до этого несколько лет развлекался с разными схемами и более всего с Racket, хотя изначально из Лиспов изучал именно CL). В SBCL привлекла скорость взлета и работы кода, для моих целей это приоритетно.

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

Возможность макросов по спец-символам (set-dispatch-macro-character) закрыли вопрос насчет встраивания инородного языка в код. Сохраненный исполняемый образ SBCL запускается, парсит маленький внешний файл на Лиспе с внедренным DSL и выполняет его - и все за 20 миллисекунд. После тормознутого Swindle умиляет.

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

С высоты все хорошие Лиспы - одного поля ягоды как языки (в новом emacs тоже статическое связывание сделали). Вопрос в скорости работы и надежности реализации (в т.ч. и батареек)

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

Сейчас вот гадаю, насколько SBCL с его библиотеками будет более устойчив в работе.

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

Только что дописал небольшую (~ 200 строк), но очень нужную утилиту для личного пользования. Написал на SBCL (до этого несколько лет развлекался с разными схемами и более всего с Racket, хотя изначально из Лиспов изучал именно CL). В SBCL привлекла скорость взлета и работы кода, для моих целей это приоритетно.

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

Возможность макросов по спец-символам (set-dispatch-macro-character) закрыли вопрос насчет встраивания инородного языка в код. Сохраненный исполняемый образ SBCL запускается, парсит маленький внешний файл на Лиспе с внедренным DSL и выполняет его - и все за 20 миллисекунд. После тормознутого Swindle умиляет.

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

С высоты все хорошие Лиспы - одного поля ягоды как языки (в новом emacs тоже статическое связывание сделали). Вопрос в скорости работы и надежности реализации (в т.ч. и батареек)

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

Сейчас вот гадаю, насколько SBCL с его библиотеками будет более устойчив в работе.

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

Лиспе с внедренным DSL и выполняет его - и все за 20 миллисекунд.

А почему так медленно? Почему не Racket, в котором это будет намного быстрее?

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

Именно так. Написать 20 строк кода, вместо того, чтобы бегать и вопить как в жопу ужаленный.

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