LINUX.ORG.RU

Лисперы, что я делаю не так?


1

3

Не религозного флейма ради. Хочется знать мнение именно людей кто использует лисп в повседневной работе.

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

Может я чего не понимаю и все делаю не так. Я в основном занимаюсь обработкой данных, моделированием, железки делаю на ПЛИСах ну там всякой фигней иногда. Для меня хватает С# плюс ANTLR и StringTemplate в качестве костылей когда надо сгенерить код. В четвертом дотнете есть Expression, ежели кодогенератор нужен в рантайме. Плюс это все статически типизировано и упрощает мне сильно жизнь, что возможно связано с моим малым объемом головного мозга. Кошер в виде сборки мусора, шустрого манагера памяти, всякого синтаксического сахара тоже в комплекте.

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

Так вот вопрос, что люди (тысячи их!) делают на лиспе?

* Убежал за ящиком попкорна.

anonymous
()

> Я в основном занимаюсь обработкой данных, моделированием, железки делаю на ПЛИСах ну там всякой фигней иногда. Для меня хватает С#

Не стыкуется что-то в твоих словах... энивей, на винфак^Wrsdn

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

В чем не стыковка и при чем тут винфак? На рсдн обсуждают особенности ShowWndThumbnail, что мало интерсно.

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

> энивей, на винфак^Wrsdn

mono же.

anonymous
()

>что в лиспе есть такого
Мозгииии!

darkshvein ☆☆
()

Для меня хватает С# плюс ANTLR и StringTemplate

В если не секрет, что ты там за код генришь? Точнее что за задача такая, что код генерить приходится?

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

> что ты там за код генришь?

В основном костыли для самого С# где не хватает генериксов. До кучи, биндинги для внешних библиотек типа BLAS/LAPACK. В шарпе макросов нет, посему костыль в виде StringTemplate самое то.

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

> Был тут как-то такой славный срач: http://www.linux.org.ru/forum/development/4513948, там достаточно информации

Мега срач. Как я и ожидал вменяемых аргументов довольно мало.

Из того что американские военные что-то оплачивают не следует что результат хорош. Это просто значит, что деньги потратили, отчет написали.

ebantrop
() автор топика

> Прикинуть алгоритм очень удобно в вольфрамовой математике

Так это тот же Лисп, только сбоку.

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

> Так это тот же Лисп, только сбоку.

Скорее, похожа на Maxima, которая на лиспе сделана. Мне вольфрам больше понравился. Хотя отмечу, что Maxima очень и очень классная програма.

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

> Скорее, похожа на Maxima, которая на лиспе сделана. Мне вольфрам больше понравился. Хотя отмечу, что Maxima очень и очень классная програма.

Да нет, сам язык Mathematica - это вполне себе Лисп. Все свойства Лиспа в наличии - homoiconic representation (все те же самые разнесчастные списки), точно такая же динамическая типизация, точно такая же семантика function application.

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

> Да нет, сам язык Mathematica - это вполне себе Лисп.

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

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

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

> Зачем пользоваться лиспом, если другими средствами решается

намного проще и быстрее?


Незачем. А если наоборот?

archimag ★★★
()

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

Если серьезно - лисп АРХИмощный язык: он ДЕЙСТВИТЕЛЬНО может все. Даже лень перечислять, что он может.

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

> Зачем пользоваться лиспом, если другими средствами решается намного проще и быстрее? Мне думается вопрос не в языке, а в библиотеках.

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

anonymous
()

>Мне интересно что в лиспе есть такого

Да нет в лиспе ничего «такого»! Это одна из самых больших проблем лиспа: распиаренность. Лисп — самый обычный язык общего назначения с динамической типизацией. Возможно, когда-то лисп был уникальным языком.

Теперь же его реализации: CL, Scheme, Clojure — всего лишь «одни из». Компайл-тайм метапрограммирование не является чем-то из ряда вон. Рантайм метапрограммирование еще более распространенная штука.

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

А вот чего в лиспе нет — так это статической типизации. И это его серьезный недостаток. Конечно, во всех реализациях можно давать «хинты» для эффективной генерации кода. Но это совсем не то... Типы — это мощное средство для обеспечения декларативности, которого лисп лишен.

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

> В других языках нет таких удобных макр.

Это факт.

Кодогенерации в один проход мне недостаточно.

Например? Когда оно нужно что нельзя (ну или очень трудно) сделать связкой ST и какого-нибудь примитивного языка?

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

> Сей метод работает - говорю по себе!

Инфа 100%!

Если серьезно - лисп АРХИмощный язык: он ДЕЙСТВИТЕЛЬНО может все. Даже лень перечислять, что он может.

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

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

> Например? Когда оно нужно что нельзя (ну или очень трудно) сделать связкой ST и какого-нибудь примитивного языка?

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

Это, например, генераторы парсеров, расширения синтаксиса языка, и т.д. Совершенно необходимо для реализации всяческих eDSL.

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

> В этом и вопрос. Когда этот наоборот случается?

Вы хотите получить на такой вопрос конкретный ответ? Более уместно было спросить «как часто» )

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

> А вот чего в лиспе нет — так это статической типизации. И это его серьезный недостаток
я не понимаю, почему это недостаток. поясни, будь добр

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

> я не понимаю, почему это недостаток. поясни, будь добр

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

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

>> А вот чего в лиспе нет — так это статической типизации. И это его серьезный недостаток

я не понимаю, почему это недостаток

Потому что вы лишаетесь такого мощного средства проверки программы, как современный транслятор. Хотя... у вас же нет современных трансляторов. Nevermind then.

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

> Это, например, генераторы парсеров, расширения синтаксиса языка, и т.д. Совершенно необходимо для реализации всяческих eDSL.

Вопрос куда его ембедидь. Например ребята сделали на камле:

http://fprog.livejournal.com/1605.html

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

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

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

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

> Вы хотите получить на такой вопрос конкретный ответ? Более уместно было спросить «как часто» )

Ок. Как часто?

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

Из всего треде я вынес что это все имеет сильно религиозный оттенок.

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

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

> По ссылке на мега срачи ваши аргументы сводились к

секретам американской армии.


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

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


Нет же, боже упоси.

Еще лисперы любят тешить свое ЧСВ элитарностью


Это не лисперы, это тролли, научитесь различать.

Да, может DSL проще делать на лиспе


Судя по количеству известным миру DSL проще всего их делать на Ruby. Кстати, многие из этих DSL (созданных в мире Ruby) действительно очень интересны.

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

> Судя по количеству известным миру DSL проще всего их делать на Ruby. Кстати, многие из этих DSL (созданных в мире Ruby) действительно очень интересны.

eDSL на Лиспе намного больше. А тот метод, что используют рубисты, на самом деле очень кривой и страшный.

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

> Как часто нужно делать свой язык который в простейшем случае будет намертво прибит в лиспову рантайму?

Всегда. Для каждой задачи. Language-oriented programming это мощнейшая метода, мощнее всех прочих известных. Ну а чтобы не прибивать эти eDSL-и к рантайму Лиспа, надо строить Лиспы над нужными тебе рантаймами (например, JVM или .NET).

anonymous
()

Разве для программирования ПЛИС используются не верилог с ХДЛями? Как связан с этим сишарп?

Я сделал себе маленькое, довольно примитивное лисп-ядро (сексп, лямбда, макра, замыкание, продолжение) и небольшую библиотеку функций (в основном для обработки списков). Использую для генерации ДСЛей и алгоритмов взаимодействия с пользователем (тоже частный случай ДСЛ, но качует из программы в программу, поэтому выделяю его отдельно). Получается очень удобно и часто почти на естественном языке. Вообще пишем на с++, так что программы на этом лиспе идут как конфигурационные файлы :)

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

> аргументы плюсов статики

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

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

> Разве для программирования ПЛИС используются не верилог с ХДЛями? Как связан с этим сишарп?

ПЛИС, ясен перец, на верилоге. Засос в компутер на дотнете с прокладками нативного кода.

Я сделал себе маленькое, довольно примитивное лисп-ядро...

Прикольно. А что проги делают, если не секрет?

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

>eDSL - embedded domain specific language. Типичный пример - макра LOOP в Common Lisp.

Я правильно понимаю, что еДСЛ - расширение средствами языка, далее используемое непосредственно в языке? А тогда ДСЛ - язык решения внешней задачи?

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

> Всегда. Для каждой задачи. Language-oriented programming...

Довольно спорно, хотя лично я скорее соглашусь с этим утверждением.

Наверное метода мощна, только в чем разница скажем с библиотекой функций (классов, модулей, you name it) и интерфейсом к какому-либо языку общего назначения. В дотнете как раз это решаемо очень просто через CLR.

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

> Наверное метода мощна, только в чем разница скажем с библиотекой функций (классов, модулей, you name it) и интерфейсом к какому-либо языку общего назначения.

Разница в том, что библиотека функций не может реализовывать какую либо проблемно-ориентированную семантику, за редкими исключениями (например, state machine в OpenGL). А большинство задач имеют собственную семантику, отличную от семантики какого бы то ни было языка общего назначения. К счастью, эти самые проблемно-ориентированные семантики достаточно легко конструировать из отдельных компонентов других, ранее определенных семантик.

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

>Прикольно. А что проги делают, если не секрет?

Например управлялка железкой. На лиспе архитектура гуя, реакция на действия пользователя, обработка/формирование пакетов и еще какая-то мелочевская конфигурация. Еще в программе моделирования. На лиспе организация и управление вычислением, опять же сеть, вроде что-то еще, не помню. Сами числодробилки на с++ и в ПЛИС.

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

> Я правильно понимаю, что еДСЛ - расширение средствами языка, далее используемое непосредственно в языке?

Не обязательно. eDSL может быть реализован и в виде внешнего препроцессора (например, как в древнем Oracle Pro*C).

А тогда ДСЛ - язык решения внешней задачи?

Внешний DSL - это если код на DSL в отдельном файле, и не смешивается с кодом на языке общего назначения.

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

> Разница в том, что библиотека функций не может реализовывать какую либо проблемно-ориентированную семантику...

Согласен. Только зачем лисп если есть туча парсеров-лексеров для всего что хоть как-то дышет?

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

> Согласен. Только зачем лисп если есть туча парсеров-лексеров для всего что хоть как-то дышет?

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

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