LINUX.ORG.RU

Lisp: с чего начать?


3

5

В институте узнал про язык программирования Lisp. До этого писал только на Паскале и C. Оказывается, там весьма много диалектов: ISLISP, Common Lisp (как я понял, эти 2 устаревшие), Scheme + новые, такие как Clojure, newLisp, Arc. Какой мне выбрать для написания десктопных приложений (я бы хотел сделать свой инструмент для Computer Aided Translation, что-то сравнительно простое на gtk)? Хотелось бы так, чтобы надо было несильно переучиваться, что-то похожее на Pascal.

Мне его порекомендовали за удобство разработки на нём (хотя я не очень сильно понял, в чём разница между разработкой на C и на лиспе).

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

Рад что до тебя дошла моя мысль

То есть из-за того, что в ЯДРЕ нет floating point ты решил выкинуть его из языка вообще? А ядро на picolisp не предложишь написать? Стильно же и быстро.

Ты утверждал про большинство процессоров. Про ПК речи не было

Я, например, пишу с ПК. В каких-нибудь смартфончиках FP тоже есть. Остальное интересует какие-нибудь 0.5% потребителей вычислительной техники. Сколько процентов из них интересует твой пиколишп?

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

ты решил выкинуть его из языка вообще

Ты мне льстишь. Я не автор языка.

То есть из-за того, что в ЯДРЕ нет floating point

Его нет(или можно обойтись без него) по очень грубым прикидкам процентах в 99 софта из того же дебиана.

А ядро на picolisp не предложишь написать? Стильно же и быстро

А зачем? У picolisp ниша клеевого языка. С ней он более чем успешно справляенся, а заменять собой c или фортран бессмысленно.

Сколько процентов из них интересует твой пиколишп?

Сколько процентов человечества интересует доказательство какой-нибудь теоремы Вейерштрасса или устройство атомной станции на быстрых нейтронах? Следует ли из этого, что они не нужны? Или что те, кто их разрабатывал клинические идиоты?

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

Зачем? Для меня очевидно, что лишний слой обвязок не прибавит производительности. Ты же в состоянии приводить бездоказательные тесты и по ним делать выводы, при этом называя собеседника лгуном. Тупое фанбойство

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

Ты мне льстишь. Я не автор языка.

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

Его нет(или можно обойтись без него) по очень грубым прикидкам процентах в 99 софта из того же дебиана.

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

Сколько процентов человечества интересует доказательство какой-нибудь теоремы Вейерштрасса или устройство атомной станции на быстрых нейтронах? Следует ли из этого, что они не нужны?

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

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

Зачем? Для меня очевидно, что лишний слой обвязок не прибавит производительности.

Примерно также обосновывалось, что Земля плоская и стоит на 3 китах.

бездоказательные тесты

Незначительная разница в тактовой частоте процессора не позволяет обяснить проигрыш в 4 раза. Если я проведу проверку у себя, то ты мне не поверишь. Поэтому, прежде чем обявить тест бездоказательным, было бы здорово, чтобы ты в этом убедился. Это не займет много времени, поскольку PicoLisp ты себе уже поставил.

... называя собеседника лгуном

Я лишь согласился с твоим высказыванием, но подправил очевидные неточности. При этом моя фраза была безличной о том, что идиот не автор языка, а тот, кто лжет где попало. Лгуном объявил ты себя сам, мотивируя это тем, что автор статьи тоже врет, значит и тебе позволено.

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

Сколько процентов человечества интересует доказательство какой-нибудь теоремы Вейерштрасса

0. Про него проходят и забывают. А некоторые забывают и теорему (которых 3 на самом деле, насколько я помню)

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

А покажи мне хоть одну фирму, которая построила свой продукт на picolisp

http://www.software-lab.de/

PicoLisp is free software, and you are welcome to redistribute it under the conditions of the MIT/X11 License (see COPYING). Commercial support — mentoring, consulting, training, development — is available upon request (0.1 BTC/h).

Для справки биткоинт нонче 913.966 USD

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

Примерно также обосновывалось, что Земля плоская и стоит на 3 китах.

Тебе не место в программировании. Такого запущенного случая ФГМ нет даже у царя.

Незначительная разница в тактовой частоте процессора не позволяет обяснить проигрыш в 4 раза. Если я проведу проверку у себя, то ты мне не поверишь. Поэтому, прежде чем обявить тест бездоказательным, было бы здорово, чтобы ты в этом убедился. Это не займет много времени, поскольку PicoLisp ты себе уже поставил.

Ты хочешь что-то доказать, так изволь.

Незначительная разница в тактовой частоте процессора не позволяет объяснить проигрыш

2 гигагерца против 3.3, ЕМНИП. + 2 ядра против 8. Расчет факториала параллелится на раз-два, а gmp умеет потоки. Как собран был gmp не известно никому. Был ли процессор на своей максимальной тактовой частоте или нет? - Не известно!

Я лишь согласился с твоим высказыванием, но подправил очевидные неточности. При этом моя фраза была безличной о том, что идиот не автор языка, а тот, кто лжет где попало

Ты опять лжешь, говоря, что написал ты это просто так безо всякого отношения ко мне

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

Ты уже заврался. Я могу у себя открыть ООО «Рога и Копыта» и использовать там Вася-лисп. Нужен ли он будет кому-то ещё? Вряд ли.

Напомню, этот ваш Гамбургер и есть создатель языка

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

Особенно доставило ссылка про суши:

Hallo!

Ich heiße Masako, stamme aus Japan und lebe seit 1986 in Deutschland. Ich freue mich, euch auf meiner Homepage begrüßen zu können!

Neben Informationen zu meinem Sushikurs, den ich in unregelmäßigen Abständen anbiete, findet ihr auch Informationen über Sushi und die japanische Esskultur.

Не в обиду этой женщине, но это серьёзный бизнес, учить готовить суши и жрать палочками

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

Ты уже заврался. Я могу у себя открыть ООО «Рога и Копыта» и использовать там Вася-лисп. Нужен ли он будет кому-то ещё? Вряд ли.

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

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

Inhaltlich Verantwortlicher gemäß § 6 MDStV: Alexander Burger Haftungshinweis: Trotz sorgfältiger inhaltlicher Kontrolle übernehmen wir keine Haftung für die Inhalte externer Links. Für den Inhalt der verlinkten Seiten sind ausschließlich deren Betreiber verantwortlich.

anonymous
()

Начни с книги Пола Грэма «Common Lisp». Даже если CL тебе не нравится, но получишь базу, сама по себе книга хорошая.

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

Причём тут бранные слова? Даешь мне ссылку на ООО «Рога и Копыта» и говоришь, что они некая фирма, использующая picolishp в своем продукте. Ты совсем?

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

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

Ты просил хоть кого-нибудь, кто зарабатывает на пиколиспе. Саша Бюргер благополучно этим занимается. Ссылку на него я тебе и дал. Его расценки ты видил. Он обновляет их по мере изменения курса. Что не так?

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

В ООО «Рога и Копыта» председательствует обычно подставное лицо, истинных владельцев не найдешь днем с огнем. Так что это не тот случай.

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

Незначительная разница в тактовой частоте процессора не позволяет объяснить проигрыш

2 гигагерца против 3.3, ЕМНИП. + 2 ядра против 8. Расчет факториала параллелится на раз-два, а gmp умеет потоки. Как собран был gmp не известно никому. Был ли процессор на своей максимальной тактовой частоте или нет? - Не известно!

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

#include <stdio.h>
#include <stdlib.h>
#include <gmp.h>

int main(int argc, char* argv[])
{
    if (argc != 2) {
        printf("Usage: %s <number>\n", argv[0]);
        return 1;
    }
    mpz_t result;
    mpz_init(result);
    mpz_fac_ui(result, strtoul(argv[1], NULL, 10));
    gmp_printf("%Zx\n", result);
    mpz_clear(result);
}

$ gcc -O2 -o gmp gmp.c -lgmp
$ time ./gmp 10000 | md5sum -
3de6339590fbdf0a1c0ae2f2b820f8bf  -

real	0m0.004s
user	0m0.000s
sys	0m0.000s
$ time ./gmp 10000 | md5sum -
3de6339590fbdf0a1c0ae2f2b820f8bf  -

real	0m0.004s
user	0m0.000s
sys	0m0.000s


$ pil +
: (de md5(X)
   (lowc (pack (mapcar hex (native "libcrypto.so" "MD5" '(B . 16) X (length X) 0)))) )
-> md5
: (bench
   (let P (native "@" "malloc" 'N 24)
      (finally                       
         (prog
            (native "libgmp.so" "__gmpz_clear" NIL P)
            (native "@" "free" NIL P) )              
         (native "libgmp.so" "__gmpz_init" NIL P)
         (native "libgmp.so" "__gmpz_fac_ui" NIL P 10000)
         (native "libgmp.so" "__gmpz_get_str" 'S 0 16 P) ) ) )
0.002 sec
: (md5  (pack @ "^J"))                                           
-> "3de6339590fbdfa1cae2f2b820f8bf"
: (bench             
   (let P (native "@" "malloc" 'N 24)
      (finally                       
         (prog
            (native "libgmp.so" "__gmpz_clear" NIL P)
            (native "@" "free" NIL P) )              
         (native "libgmp.so" "__gmpz_init" NIL P)
         (native "libgmp.so" "__gmpz_fac_ui" NIL P 10000)
         (native "libgmp.so" "__gmpz_get_str" 'S 0 16 P) ) ) )
0.001 sec
anonymous
()
Ответ на: комментарий от vonenij

Я лишь согласился с твоим высказыванием, но подправил очевидные неточности. При этом моя фраза была безличной о том, что идиот не автор языка, а тот, кто лжет где попало

Ты опять лжешь, говоря, что написал ты это просто так безо всякого отношения ко мне

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

Всего хорошего

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

Тот текст на немецком говорит

Я и без тебя знаю, что он говорит.

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

Ога, как та женщина на суши.

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

Всего хорошего

Прощаетесь, не успев привести ни одного аргумента? Ну до свидания!

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

Я уже всё выучил, спасибо! Учил как раз по PCL и cltl2

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

Если тебя, лживая тварь, интересует правда хоть немного, запусти и порви сикель^Wшаблон:

#include <stdio.h>
#include <stdlib.h>
#include <gmp.h>
#include <sys/time.h>

double gettime ()
{
    struct timeval tv;
    gettimeofday (&tv, 0);
    return (double)tv.tv_sec + (0.000001 * (double)tv.tv_usec);
}

int main(int argc, char* argv[])
{
    if (argc != 2) {
        printf("Usage: %s <number>\n", argv[0]);
        return 1;
    }
    mpz_t result;
    double time = gettime();
    mpz_init(result);
    mpz_fac_ui(result, strtoul(argv[1], NULL, 10));
    mpz_clear(result);
    time = gettime () - time;
    gmp_printf("%Zx\n", result);
    printf ("%f\n", time);
}

Не понятно, то что ты написал на C и пиколишпе - разные вещи? Хотя для 100% гарантии туда надо впендюрить dlopen, но это не суть

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

Обычный тайм написал тоже кстати 0.000u 0.002s

vonenij
() автор топика
16 апреля 2014 г.

Херассе. Давно не видел столько БУГУРТА скобчатых в одном треде.

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

Вот результаты обоих тестов на моей машине.

Этими тестами ты только доказал, что LISCHP без сишных библиотек --- беспомощный кусок говна.

anonymous
()
19 апреля 2015 г.
Ответ на: комментарий от ziemin

спасибо!!!) благодаря этому комментарию, я изменил свою жизнь) я больше года потратил на поиск решения одной задачи, теперь все развеялось, благодаря этой книги)

ps а с преподами в институтах надо что-то делать, так у меня сформировалось не правильное представление о языке(у моей жены тоже, хотя она из другого ВУЗа).

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

у меня сформировалось не правильное представление о языке(у моей жены тоже, хотя она из другого ВУЗа.

Вам поможет психолог... Элиза. Правда не помню, в каком томе. Да и там учебная версия, так что лучше нагугли современную. Изучайте код.

ziemin ★★
()

vonenij

пишу в удалённый тред, ага.

Lisp: с чего начать?

с задачи. если на твою задачу хорошо ложится «программируемый язык программирования» — это оно.

также, если на задачу хорошо ложится «емаксификация операционной среды»: см. info guile, раздел history. или здесь и идею про ice-9 и «колыбель для кошки» Воннегута.

Какой мне выбрать для написания десктопных приложений

любой, хоть ту же guile: см. info guile и там пример про встраивание в Dia. вот такое пишешь для своего приложения.

другой пример: текстовый редактор Emact от автора OpenLisp (реализации ISLISP) + сам OpenLisp. качаешь исходники, смотришь в исходниках:
1) общую структуру Emact;
2) lisp модули на ISLISP (и прикольные defmacro macroexpand, циклы и setf макросами
3) интерфейс встраивания OpenLisp в Emact
4) сам OpenLisp — без исходников; в реализации смотришь компилирование в LAP-файл (linux assembler program) и интеграцию с си

для guile есть примеры как на Gtk, так и на tcl/tk: в первых версиях guile (см. info guile, history) можно было встраивать прозрачно одно в другое; потом вынесли tk в модули. на tcl/tk GUI приложение писать проще.

я бы хотел сделать свой инструмент для Computer Aided Translation, что-то сравнительно простое на gtk

можно поподробнее, трансляция чего во что? ну, тогда Racket схема тебе в руки: инструкция

Хотелось бы так, чтобы надо было несильно переучиваться, что-то похожее на Pascal.

ну тогда точно Racket: #lang algol68 в начале, и пиши на псевдопаскале.

хотя и для guile 2.0+ существуют алгольные синтаксисы: curly infix syntax (надо разрешить в настройках), тот же JavaScript, например: guile --language=ecmascript, питон.

есть исходник для Common Lisp трансляции в/из CL и Pascal. есть cl-python и аналогичный алгольный синтаксис в духе Python.

есть пример игрушки, написанной в алгольном синтаксисе для схемы (см. примеры к sweet expressions)

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

C — «переносимый ассемблер выского уровня»; лисп — язык сверхвысокого уровня, «программируемый язык программирования».

программа на Си — «мёртвая», существует отдельно рантайм и компайл-тайм (в си CTFE практически нет, препроцессор не считается; в C++ и D уже есть). рантайм минималистичный и делает всю обвязку абстрактной Си машины (См. модель памяти си-машины; отличия от си C++, D)

на лиспах программа — «живая»: умеет в рефлексию и «символические вычисления». программируемый язык программирования программирует себя (и своё рантайм окружение) самостоятельно, из себя самого на себе в себя нового. лисп-машина умеет в качестве микрокода и «ассемблера» — разновидность низкоуровневого лиспа. всё что угодно можно переписать в любой момент из самого себя на себе: см. docstrings, compile-function для символов и функций; для макросов и символов — compile macros, macros writing macros.

также можно использовать лиспы как основу для построения eDSL для кодогенерации в другие языки (из лиспа в С/С++;в LLVM; из XML в LLVM через лисп и т.п.)

от такая философия.

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

LOL. книга финнов довольно древняя и непрактичная.

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

уже потом, прочитав «Practical Common Lisp» Питера Сейбеля, «Real World Haskell», «PicoLisp:Radical Approach for Developing Enterprise Applications» и про парсинг на основе DCG грамматик, а также про datalog и про mercury — относительно технологий лисп и пролог сформировалось более адекватное, практичное мнение.

просто раньше было принято делать системы а) в соответствии с системным подходом б) как «открытые системы» в смысле юниксов, или как «белые ящики», на основе понятных открытых стандартов и интерфейсов.

отсюда всё это поколение технологий: в ентырпрайзах Common Lisp, ISLISP, Eiffel, в приложениях — «емаксификация», в базах данных — это MUMPS, в операционных системах — юникс и си.

тогда казалось, что суть правильной технологии это
1)системный подход и понятные интерфейсы
2)робастность и надёжность
3) белые ящики для интеграции систем.

уже потом галимые хипстеры с одной стороны, и ынтерпрайзеры на галерах всё извратили:
1)наглухо законопаченное банальное рабство «вам это ненужно», и лояльность бренду YAGNI.
2)ынтерпрайзно — значит, отличное. от качественного. авгиевы конюшни подсознания вместо системной архитектуры(рахитектура)
2)imporator в стиле Erik Naggum. что делает ынтерпрайз? символизирует. симуляция бурной деятельности посредством симулякров.
3) ч0рные ящики как суть бездны анальной оккупации технологий; моднявые бренды и сезонная мода на техноложество для галимых хипстеров вместо системности.

выбирай свою таблетку сам: синюю или красную.

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

Скобкохейтерам и пистонистам должно понравится.

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

неактивно. у них под вендой сборка не работает под Win<=8, сломали в какой-то версии. ждут когда кто-то придёт починит.

в плане кодогенерации через си реализация интересна; но в плане языка тот же ISLISP более практичен и интересен. не говоря уже о схеме.

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

весна покажет, кто где некропостил.

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

хотя у них сборки для Nix есть, это гуд. может, и гидру с CI осилят.

вообще, далее этот рецепт сборки от Nix OS портируется на Guix и получаем «ебилды на схеме» (той же guile).

канонiчненько: берём TeXmacs со встроенной guile 1.8, допиливаем среду для Literate Programming, портируем в TeXmacs интерфейс с guile 1.8 до guile 2.0.11+ актуальной; вкорячиваем в эту guile-в-texmacs-е skribillo для Literate Programming вместо GNU Emacs и org-mode babel.

ставим всё это в Guix.

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

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

есть tisl с няшной катаканой; там компилятора ЕМНИП, нет.

вообще с реализациями ISLISP какой-то затык: есть хорошие, но закрытые; есть хреновые, но открытые. написать надо что-то такое, на каком-нибудь русте. или через какой-нибудь llvm.

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

вообще с реализациями ISLISP какой-то затык

написать надо что-то такое, на каком-нибудь русте. или через какой-нибудь llvm.

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

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

в LAP-файл (linux assembler program)

err: lisp assembly program.

я бы хотел сделать свой инструмент для Computer Aided Translation, что-то сравнительно простое на gtk

ещё можно посмотреть в тот же TeXmacs, исходники и пример, как реализована рисовалка картинок в TeXmacs:
1)ядро TeXmacs на Qt4, обвязка с guile 1.8
2) сам texmacs реализует структурный редактор документов, произвольной структуры — и экспорт таких документов в latex, pdf, C++, scheme (+вспоминаем про skribillo).
3)редактор картинок векторных внутри texmacs реализован как плагин к guile, которая плагин к texmacs;
4) также смотрим интерфейс сессии в texmacs: связь с той же octave, scheme session и поддержку literate programming.

очень может быть, что не нужно изобретать велосипед — а достаточно сделать DSL к плагину на схеме к плагину на Guile к плагину к texmacs.

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