LINUX.ORG.RU

CL standalone application.


1

0

Объясните пожалуйста как сделать standalone приложение в clojure и sbcl. Что оно из себя представляет и как согласуется с тем, что лисп заточен больше на интерпретатор.

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

> Для меня это пока тёмный лес. Написал HelloWorld, захотел сделать бинарь, а тут такие сложности.

Наоборот, все очень просто. Набиваешь в REPL код своего HelloWorld. Проверяешь, что работает. А затем тут же в REPL набиваешь ccl:save-application с нужными параметрами. И тогда полный слепок текущей системы будет записан как один (практически независимый) бинарь.

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

Такой бинарник запускается, кстати, быстро. У него мало зависимостей.

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

>Тут: компиляция->запуск->выполнение(компиляция?)
Нет никакого циклы.
Есть код, которые по совместительству, данные. Есть компилятор.
Вызываем компилятор когда хотим, запускаем скомпилированное тоже когда хотим.

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

> И всё-таки непривычно для компилируемого языка. Привычно это или бинарь или байт код, но не исходники. Они настолько быстро компилятся?

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

anonymous
()

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

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

> И всё-таки непривычно для компилируемого языка.

Да ну? А JSP, или ASP.NET?

Привычно это или бинарь или байт код, но не исходники. Они настолько быстро компилятся?

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

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

Для закрытого софта можно купить коммерческий лисп.

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

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

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

> Опять таки для закрытого софта исходники мягко говоря не совсем подходят

Вполне себе подходят.

размер образа внушает почтение, хоть и сжатого.

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

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

>Да оставь ты их в покое, эти исходники. Никто не заставляет их таскать. Компилируй сколько хочешь заранее, распространяй бинарники.
Эх, а байт код был-бы меньшего размера и платформонезависимым.

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

> Эх, а байт код был-бы меньшего размера и платформонезависимым.

Да кого колышет платформонезависимость? Тебе лениво упаковать несколько разных бинарников для разных платформ? Тебя вообще волнует размер бинарников?

Если так, то пользуйся реализациями Лиспа для JVM или .NET. Их полно. Например, есть ABCL.

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

для JVM лучше тогда Clojure взять, она лучше к нему приспособлена

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

> Эх, а байт код был-бы меньшего размера и платформонезависимым.

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

А в дотнете кросс-платформенности нет и не будет...

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

>Если так, то пользуйся реализациями Лиспа для JVM или .NET. Их полно. Например, есть ABCL.
Когда есть выбор, это хорошо.

И ещё компиляция как-то кэшируется, чтобы при следующем запуске не компилировать всё заново?

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

> И ещё компиляция как-то кэшируется, чтобы при следующем запуске не компилировать всё заново?

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

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

> И ещё компиляция как-то кэшируется,

чтобы при следующем запуске не компилировать всё заново?


Да, конечно.

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


Это ты о чём?

archimag ★★★
()

>Объясните пожалуйста как сделать standalone приложение в clojure и sbcl. Что оно из себя представляет и как согласуется с тем, что лисп заточен больше на интерпретатор.

Зря ты меня не послушал и продолжаешь открывать рот...

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

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

Чего-о-о....?

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

> mmap уже стал дороже динамической линковки?

1. А как по-твоему реализуется динамическая линковка в нынешнем гну-окружении? ;)

2. Всегда ли прилинкованная либа загружается в память? ;)

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

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

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

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

Чего-о-о....?

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

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

Устройство эльфа ортогонально реализации динамической линковки.

А сама линковка в ld сделана чертовски красиво. ))

Это медленнее


Прувы, прувы.

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

>Всегда ли прилинкованная либа загружается в память?

Всегда ли с диска в память целиком читается примапленный файл?

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

Не задавай идиотских вопросов. Если разделяешь точку зрения онанимуса и следовательно хочешь привести прувы вместо него - просто сделай это.

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

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

О каком кэше идёт речь? Процессора?

mv ★★★★★
()

а зачем, например?

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

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

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

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

Читал. Там написано, что L1C при каждом переключении контекста сдувается. Как часто в лисповой программе маш.код меняется - уже неважно. Плохие компиляторы, не умеющие так же чётко писать на ассемблере, как я, чудовищно больше ущерба производительности наносят, чем «модификация кода».

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

>Там написано, что L1C при каждом переключении контекста сдувается.
Раз так, то хотите сказать, что кэш кода не нужен? Зачем все эти предсказания потока кода? Всё и так шуршит.

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

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

>Вы читать умеете?
Вроде, но я не понял к чему здесь про загрязнение кеша при переключении контекста.

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

Вроде, но я не понял к чему здесь про загрязнение кеша при переключении контекста.

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

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

>К тому, что нереально редкое для процессора обновление кода в каком-то процессе совершенно ничего не значит по сравнению с весьма частым переключением контекста (и соотв. инвалидацией L1) в современной многозадачной системе.
Согласен, я по-началу не понял принцип компиляции лиспа, думал там постоянно компиляция/модификация проводится.

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