LINUX.ORG.RU

Ручное управление памятью в лиспе

 


2

3

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


шок сенсация расследования интриги!

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

Bad_ptr ★★★★★
()

Стандартно никак, только через FFI либо через экстеншены, если реализация позволяет.

gensym ★★
()

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

wota ★★
()

Автор, уточни хоть тебе какой язык нужен. Common Lisp? Scheme? Clojure? А то wota уже развёл демагогию со схемкой, пользуясь твоей нечёткой формулировкой вопроса.

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

wota уже развёл демагогию со схемкой

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

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

да на крайняк любой диалект лиспа, но хотелось бы Common Lisp .

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

А какие реализации позволяют?

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

В моем случае, я использую LispWorks и при работе с лисповыми обьектами — только можно крутить ручками GC (см: http://www.lispworks.com/documentation/lw61/LW/html/lw-128.htm#pgfId-886617 ). Для работы с foreign-объектами используется FLI (Foreign Language Interface): http://www.lispworks.com/documentation/lw61/FLI/html/fli.htm

Про другие реализации — не в курсе.

gensym ★★
()

можно ли в лиспе работать с собственными структурами как в с++? Например вручную указать сколько памяти выделить для хранения и т.п.

Тебе это точно не нужно. Или под задачу выбираешь нет то. :-)

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

Если что, то LW платный. :-) Советую взглянуть на SBCL или Clozure CL. Обе opensource имплементации очень хороши.

gensym ★★
()

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

o_O Но зачем? Ты сомневаешься, что лисп знает сколько памяти нужно выделять для данных?

Но если уж тебя приштырило, то в Clozure CL есть нечто подобное: http://ccl.clozure.com/manual/chapter13.11.html

no-such-file ★★★★★
()
Ответ на: комментарий от wota

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

А вот попытка при ответе на вопрос о лиспе предположить какой-то конкретный действительно наводит на мысли о религиозных чувствах к этому конкретному лиспу. (gensym тоже, да :])

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

Ну неужели LISP имеет серьезные преимущества, ради которых его стоит изучать и применять??? Это непостижимо для меня.

Хоть одно есть?

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Хоть одно есть?

Обсасывали уже 100500 раз. Поройся в архивах что-ли. ;-)

“Don't assume Lisp is only useful for Animation and Graphics, AI, Bioinformatics, B2B and E-Commerce, Data Mining, EDA/ Semiconductor applications, Expert Systems, Finance, Intelligent Agents, Knowledge Management, Mechanical CAD, Modeling and Simulation, Natural Language, Optimization, Research, Risk Analysis, Scheduling, Telecom, and Web Authoring just because these are the only things they happened to list.” — Kent Pitman (c)

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

И я ни разу не понял: синтаксис убог, программистов мало, как в команде на таком языке работать?

Наверняка я ошибаюсь - хочу приятно убедиться в собственных заблуждениях :)

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от lazyklimm

Прошу прощения что вынудил мне писать много текста в ответ, я не ставил своей целью это.

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

Что-нибудь объективное.

А то это будет напоминать разговор в верующими в богов (я убежденный атеист), объективной конкретики от которых я добиться совершенно не могу... :)

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 2)
Ответ на: комментарий от gensym

Надеюсь специализированные редакторы скрывают яркость этих скобочек чем-то прозрачным ^_^

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Есть ли какой-то яркий пример эффективности языка? <...> впечатляющая производительность <...> вычислительная производительность

Не все задачи числодробительные. Где-то и выразительная мощь лиспа пригожается. Всё же главные его плюшки — макросы и CLOS.

ilammy ★★★
()
Ответ на: комментарий от I-Love-Microsoft

эффективности

в чем? В скорости написания кода - однозначно.

Например с тем же C++

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

Или впечатляющая производительность параллельного исполнения на нескольких ядрах

ты пишешь софт исключительно для числодробилок?

Что-нибудь объективное.

Смотря по каким параметрам объективное.

Как по мне - он элегантен и красив, на нём приятно и быстро писать.

убежденный атеист

ужасное словосочетание, btw

lazyklimm ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

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

Язык здесь не причем, это качество реализации.

Что-нибудь объективное.

Ну вот какой язык ты берешь чтобы попробовать реализовать идею? И чтобы было быстро написать и при том не было бы трудно переделывать в последствии? А там может и от прототипа до продакшена не совсем трудно было доделать? У меня это Common Lisp, у других может быть Python, у особых извращенцев C++, и т.д. Вот и вся объективность.

А то это будет напоминать разговор в верующими в богов, объективной конкретики от которых я добиться совершенно не могу... :)

whatever you want it to be..

gensym ★★
()
Последнее исправление: gensym (всего исправлений: 2)
Ответ на: комментарий от ilammy

CLOS

он вроде не только про CL, а про лиспы вообще. В той же схемке достаточно сильна функциональная составляющая (хотя она там и чуть более многословная, чем в каком-нибудь хацкеле)

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

У меня это Common Lisp, у других может быть Python, у особых извращенцев C++, и т.д. Вот и вся объективность.

Я особый извращенец... правда у меня Qt - это более легкая степень C++ГМ :)

Хорошо, скорость написания кода. Есть ссылки на сравнение по этому параметру?

Типичные задачи, читабельность, сравнение числа строк кода - вот то я бы назвал объективно...

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Первая версия GC для дотнета была написана на CL и затем переведена в C++.

http://channel9.msdn.com/Shows/Going Deep/Patrick-Dussud-Garbage-Collection-P...

читабельность

субъективно

сравнение числа строк кода

важно не количество строк кода, а их семантическая насыщенность

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

Хорошо, скорость написания кода. Есть ссылки на сравнение по этому параметру?

Тут я. На сишечке spherical cow пишу раз в 10 медленней, чем на CL. Как там на плюсах - уже не помню, но раз в 5. И чем дальше лезть в лес, тем больше в сишечке стучить в бубен, а лисп продолжает работать. Debugability (конкретно в LispWorks) просто на высоте.

Соответственно, дармоедов на проект надо меньше.

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

Ты ведь не думаешь, что челвек, задающий вопрос про лисп имеет в виду «какой-нибудь язык с круглыми скобками и префиксным синтаксисом»?

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

вот попытка при ответе на вопрос о лиспе предположить какой-то конкретный

ТС спросил - «какие реализации позволяют», но так и не уточнил ЯП, и я дал ссылку на реализацию

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

http://img264.imageshack.us/img264/1397/lispnd7.png

надо сильно обкуриться, чтоб на верхней картинке увидеть «Beauty» :) без нормальной подсветки кода - лисп (схема на картинке) действительно смотрится как простыня из скобок и букв, и это объективно - т.к. у него очень простой синтаксис, что для сложного кода читабельности не добавляет

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

Тут я. На сишечке spherical cow пишу раз в 10 медленней, чем на CL. Как там на плюсах - уже не помню, но раз в 5

ок, простая задача - загрузить файл в несколько десятков ГБ (дамп SQL) в БД SQLite, на плюсах - минимум кода, на си немногим больше, только вчера писал - минут 10 потратил, значит тебе надо 2 минуты и отмазка - «лень тратить время» не прокатит, жду код и честно озвученное время на решение

wota ★★
()
Последнее исправление: wota (всего исправлений: 2)
Ответ на: комментарий от wota

у меня еще автоматом кодировка по возможности определялась (по BOM и первым байтам) и код умеет не только utf8, но это уже дополнительная задача, ее можно не решать

wota ★★
()
Последнее исправление: wota (всего исправлений: 1)
Ответ на: комментарий от wota

а вот и ожидаемый слив

Напиши компилятор и рантайм для описания кишков FPGA и его конфигурирования.

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

а вот и ожидаемый слив

Чувствуешь хоть, какова разница в размахе деятельности лиспера и сиплюсплюсника?

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

Напиши компилятор и рантайм для описания кишков FPGA и его конфигурирования.

если это писькомерство - не только у тебя есть сложные и интересные задачи, если просто прикидывание шлангом - мой пример тривиален и вполне решается за несколько минут, ты хочешь потратить столько же времени на шлангование на ЛОРе - дело твое, только тогда не делай голословные утверждения, которые легко проверить и выяснить, что они ничего не стоят

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

Чувствуешь хоть, какова разница в размахе деятельности лиспера и сиплюсплюсника?

таки писькомерство, причем глупое, на плюсах пишутся такие проекты, которые ты никогда не осилишь, и не в ЯП дело, но я не хочу об этом спорить

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

ок, простая задача - загрузить файл в несколько десятков ГБ (дамп SQL) в БД SQLite

Что значит загрузить?

на плюсах - минимум кода, на си немногим больше, только вчера писал - минут 10 потратил

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

Сравнивать надо на реальных задачах - то есть объем кода которых имеет порядок mloc, а разработка ведется годами. И тогда закономерно окажется, что машина на порядки быстрее человека, а для скоростных передвижений на большие расстояние не придумали ничего лучше самолета.

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

Каждый находит в лиспе что-то свое. Мне вот последнее время в LispWorks очень нравится то, что он позволяет писать кросс-платформенный код для ГУИ, где поддержка некоторых важных для меня вещей даже лучше, чем в библиотеке SWT для Java, на которой строится известный Eclipse.

В частности, в лиспе достаточно легко создать метафайл (графика в векторном формате: либо EMF на винде, либо PDF на маках и линуксе). Можно создать метафайл хоть в памяти, хоть на диске. В SWT такого нет из коробки - нужно либо писать самому, либо покупать библиотеки, которые дороже лицензии на LispWorks.

Потом, размер получаемого бинарника в лиспе будет меньше (??), чем в Qt. Хотя если Qt слинковать статически, то, может быть, Qt и поспорит с лиспом, но ведь статическая линковка для многих не вариант из-за лицензии Qt. Вот и выходит, что лисповый бинарник с гуем будет меньше. При этом мне совершенно не нужны 98% процентов виджетов из Qt - все равно пишу свое.

А так, для меня коммон лисп хорош макросами, динамической типизацией, поддержкой ФП (меня устраивает - фанатиков и троллей прошу отдохнуть), CLOS (ООП, где линеаризация списка множественного наследования появилась задолго до Scala, т.е. нет известной проблемы бриллианта «diamond problem» из Си++), а также удобной инкрементальной средой разработки, включающей превосходный отладчик в LispWorks. Все важно в совокупности. Каждая мелочь. Многие вещи подогнаны друг под друга.

З.Ы. Хорошая числодробилка вряд ли получится из лиспа, потому что при возрате double-float из функции даже на x64 обычно происходит боксинг. А вот, single-float часто возвращается на x64 без боксинга - число умещается в теггированный «указатель».

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

Ты думаешь, твой пример блещет остроумием?

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

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

Что значит загрузить?

выполнить, очевидно

Сравнивать надо на реальных задачах

это как раз - реальная задача

Сравнивать надо на реальных задачах - то есть объем кода которых имеет порядок mloc, а разработка ведется годами

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

wota ★★
()
Ответ на: комментарий от wota
#lang racket
(require db racket/cmdline)

(command-line #:args (file db) (query-exec (sqlite3-connect	 	#:database db) (file->string file)))

ушло две минуты из которых полторы - поиск в доках.

это как раз - реальная задача

Я объяснил выше, что такое реальная задача.

окай, плюсы и си тут на порядки обогнали лиспы

Это в каком же месте?

и доказывать ничего не надо

А, так ты религиозный. Может, еще и постишься?

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

ушло две минуты

упадет еще быстрее, но мы ведь не скорость падения программ меряем?

Это в каком же месте?

в кол-ве и качестве успешных проектов, можно насильно присадить всех на какой-нибудь VBA, а заставить написать лучшее решение в своей области - нет

А, так ты религиозный.

нет, просто не хочу доказывать очевидное

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