LINUX.ORG.RU

Рабочее место начинающего лиспового программиста

 ,


0

0

Собственно, old good Emacs+Slime. Используемый для работы лисп - последняя версия честно купленного (не мной) LispWorks энтерпрайз эдишн. WM - лисповый StumpWM, линукс - Arch. Мыло, джаббер, irc, словарь (через dictd), спеллчекер (flyspell через aspell) и переводчики (через гуглевского бота) - всё в Емаксе. Не в Емаксе только xterm и Firefox.

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

>>> Просмотр (1280x800, 36 Kb)

★★★★★

Проверено: JB ()

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

linuxfan
()

емаксу нехватает ядра и браузера

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

>Что вы понимаете под элегантностью?

Обобщенные алгоритмы, DSL, но никак не if (a) if (b) c = d + 1. В таких конструкциях прекрасно видно, что выразительность лиспа на типичных императивных конструкциях стремится к нулю.

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

Обобщенные алгоритмы, DSL

Обобщённый алгоритм или DSL не могут быть реализованы неэлегантно? А если алгоритм слишком примитивен для DSL? Или ручная его реализация в императивном тоне работает быстрее, чем в «элегантном», и в данном случае нужна именно скорость? Если в Коммон Лиспе есть метаобъектный протокол, значит ли это, что каждая программа должна реализовать свою уникальную объектную систему? Или есть возможность менять ридер, значит ли это, что в каждом случае должен быть свой уникальный язык? А сигнальный протокол даёт возможность реализовать очень необычный способ передачи управления, и это значит, что каждая программа должна во всю использовать сигнальный протокол?

Выдыхайте.

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

Люди делятся на два типа: тех, кто читает s-expressions, и тех, кто нет.

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

Таббар как всегда вырвиглазен и не нужен. А так неплохо.

От белого на чёрном глаза не болят?
Почему Xaw3d а не gtk?

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

От белого на чёрном глаза не болят?

У меня серый на чёрном (контрастность не задрана).

Почему Xaw3d а не gtk?

А зачем gtk?

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

>Выдыхайте.

Какой смысл писать императивщину на лиспе? Чтобы приблизиться к типу людей, читающих s-expressions?

Люди делятся на два типа: тех, кто читает s-expressions, и тех, кто нет.

Почему-то никто никогда не договаривает до конца: среди читающих s-expressions есть некоторое число градаций силы, но дальше 8-го уровня вложенности секспов никого живого уже нет.

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

Какой смысл писать императивщину на лиспе? Чтобы приблизиться к типу людей, читающих s-expressions?

У вас неверное представление о лиспе. Вы, наверное, думаете, что это строго функциональный язык.

Почему-то никто никогда не договаривает до конца: среди читающих s-expressions есть некоторое число градаций силы, но дальше 8-го уровня вложенности секспов никого живого уже нет.

Покажите мне человека, который 8 уровней вложенности if'ов на Си читает.

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

>Почему Xaw3d а не gtk?

Хотя бы потому что

ldd /usr/lib/libgtk-x11-2.0.so | wc -l

42

ldd /usr/lib/libXaw3d.so | wc -l

16

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

>Вы, наверное, думаете, что это строго функциональный язык.

Это не ответ на вопрос, зачем писать императивщину на лиспе. Это неудобно и нечитаемо.

>Покажите мне человека, который 8 уровней вложенности if'ов на Си читает.

Очень толсто:

(-b + sqrt(sqr(b) - 4 * a *c)) / (2 * a)
(/ (- (sqrt (- (expt b 2) (* 4 a c))) (* 2 a))

5 уровней вложенности на таком простом примере. В let/setX можно легко улететь на 6-8 уровень.

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

А что, у всего из себя ынтерпрайзного LispWorks нет среды приличней Emacs?

Приличней Емакса ничего не бывает. Графический IDE есть.

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

Это не ответ на вопрос, зачем писать императивщину на лиспе. Это неудобно и нечитаемо.

Вы сами-то много на лиспе писали, чтобы другим говорить о том, что удобно, а что нет?

Очень толсто:

Syntax error.

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

>Вы сами-то много на лиспе писали, чтобы другим говорить о том, что удобно, а что нет?

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

Syntax error.

ЧиТД: без специального редактора s-expr невозможно даже написать. О чтении лучше умолчать.

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

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

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

>Чтобы давать экспертную оценку нужно быть экспертом.

А кто сказал, что для того, чтобы быть экспертом, надо написать кучу быдлокода? Вспомним, к примеру, так называемых литературных критиков: сами-то они не писателями были.

Ничего страшного, что оно расходится с мнениями экспертов.

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

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

А кто сказал, что для того, чтобы быть экспертом, надо написать кучу быдлокода? Вспомним, к примеру, так называемых литературных критиков: сами-то они не писателями были.

Хорошо, ты - т.н. «литературный критик».

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

Создатели Axiom и Maxima.

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

>Maxima

А теперь покажи мне красоту и читаемость здесь.

            (mul
              (simplify (list '($pochhammer) a n))
              (add
                (simplify (list '(%gamma_incomplete_generalized) a z1 z2))
                (mul
                  (power '$%e (mul -1 z1))
                  (let ((index (gensumindex)))
                    (dosum
                      (div
                        (power z1 (add a index -1))
                        (simplify (list '($pochhammer) a index)))
                      index 1 n t)))
                (mul -1
                  (power '$%e (mul -1 z2))
                  (let ((index (gensumindex)))
                    (dosum
                      (div
                        (power z2 (add a index -1))
                        (simplify (list '($pochhammer) a index)))
                      index 1 n t))))))
Кстати, это часть условного оператора cond, но из-за такой клевой формы записи оно целиком еле влезло в 49 строк. Глубину вложенности скобок я даже не хочу считать.

linuxfan
()
Ответ на: комментарий от CL-USER

>ну не понять тебе секспы, что тут поделаешь.

Ты мне поясни, вследствии какого постулата

(+ 1
   2
   (* 5
      6))

Читается лучше, чем 1 + 2 + 5 * 6?

Кстати, могу немного усложнить задачу, добавив длинное (5-8 слагаемых) выражение в скобках. Вариант «записи в столбик» резко начнет иметь проблемы с вертикальным пространством.

linuxfan
()
Ответ на: комментарий от CL-USER

>> Что записывать математические формулы в виде S-выражений страшно неудобно // К.О.

и?

Если тебе что-то непонятно - спрашивай, не стесняйся.

tailgunner ★★★★★
()

Не удачное название темы, при быстром прочтении из слова «лиспового» выпадает буква «с».)))

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

Что записывать математические формулы в виде S-выражений страшно неудобно // К.О.

А где удобно?

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

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

Ого сколько букавок всяких...

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

>> Что записывать математические формулы в виде S-выражений страшно неудобно // К.О.

А где удобно?

Могу сказать, что в Си - удобнее.

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

И что на этот канонический вариант больше похоже - лисповая запись или сишная? :)

tailgunner ★★★★★
()

терминус как шрифт для кода - выглядит убого, а так - ничего интересного/нового

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

И что на этот канонический вариант больше похоже - лисповая запись или сишная? :)

Условно-gmp'шно:

gmp_div(gmp_add(gmp_neg(b), gmp_sqrt(gmp_sub(gmp_power(b, 2), gmp_mul(4, a, c)))), gmp_mul(2, a));

Против:

(/ (+ -b (sqrt (- (expt b 2) (* 4 a c)))) (* 2 a))
Как сам думаешь? Как возможности встроенных типов начинает не хватать, а типы не расширяемые, то выразительность куда-то испаряется.

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

> Да можно man любой язык с bignum и инфиксной записью.

да, и так и так получится удобней чем:

"(/ (+ -b (sqrt (- (expt b 2) (* 4 a c)))) (* 2 a))"

ahonimous
()

ых, зачот :)

а почему, кстати, LispWorks, а не Allegro CL какой-нибудь?

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

>К тому же, некорректно

Лолка, в каком месте я написал некорректно? Или тебя смущает, что я не стал дублировать то же со знаком "-"?

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

Лолка, в каком месте я написал некорректно? Или тебя смущает, что я не стал дублировать то же со знаком "-"?

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

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

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

Если поставить вопрос под таким углом, то адресация массивов в лиспе не выдерживает никакой критики: x[i] в миллионы раз ближе к общепринятому $x_i$, чем маловразумительное (aref x i), которое превращается в дикий ужас, если нужно адресовать, скажем, i+1-й элемент: (aref x (1+ i)) vs x[i+1]. Уже с этих позиций очевидно, что для численных методов lisp будет являться преградой, _вопреки_ которой будет писаться код.

Кстати, под красивыми абстракциями я понимани, например, clsql, особенно его объектно-ориентированный DSL для работы с таблицами базы как с некими сущностями. Вот это действительно сильно. А императивный, извините, онанизм, обильно сдобренный диким количеством скобок, которые постоянно то открываются, то закрываются — это чистой воды садомазохизм.

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

> Всё хорошо, только ты «литературный критик».

т.е. он прав и ты решил, за неимением контрдоводов, «уколоть» его в отместку? сильный ход, да

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

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

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

т.е. он прав

В чём конкретно? Сначала он зацепился за, как ему показалось, императивщину*. Потом за неканоничность префиксных выражений в мире, где распространена инфиксная нотация. Потом ему не понравилась лисповая адресация в векторах. Всё сводится к тому, что ему не нравятся s-выражения. В этом он прав.

* Ну бред же. Если постановка задачи предполагает императивное решение, то зачем там обобщённые алгоритмы и DSL?

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

Держи:

(with-element Trade_Break_Message.nanoseconds
  (on-value (export-to mkt_nanoseconds)
            (pulse mkt_nanoseconds_p))
  (on-exit (pulse mkt_trade_break_message_p)))
Это кусок программы на DSL, из которого генерится vhdl и лисповый код (для валидации).

Так лучше? ;)

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

Да, Filosofem рулит (Dunkelheit!). Частенько Aske и Det som engang var слушаю. Belus тоже хорошо вышел.

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

Сперва архимаг местных невежд просвещал про лисп, а теперь и ты. Это же просто фанбои с парой поговорок в качестве собственного мнения

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