LINUX.ORG.RU

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

 


2

3

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


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

с большими числами, racket:

> (time (factorial 100000) 0)
cpu time: 984 real time: 1001 gc time: 62
0
> 

python:

>>> timeit.timeit('import math; math.factorial(100000)', number=1)
34.108616597919536

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

Питон выводит просто десятичное число, цифирками.

Питон ещё перевод строки в конце пишет.

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

А GUI там через что? Под виндой через родные контролы, а под Linux GTK если не ошибаюсь?

Я с большим интересом смотрю на другие языки программирования, но отсутствие GUI уровня Qt/QML - меня смущает.

Но разве что использовать какие-нибудь MQ/RPC системы и писать логику на CL или чем-то ином, и лишь GUI отдельно на Qt или других...

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

встроенный факиториал это неспортивно.

Так спортивней?

f[n_] := Block[{i}, Times @@ Table[i, {i, n}]]
Timing[IntegerString[
  Hash["0x" <> IntegerString[f[100000], 16] <> "L\n", "MD5"],
  16, 32]]

{0.074365, "b6f054fc0bf1124daed49e4d7fd04007"}
anonymous
()
Ответ на: комментарий от I-Love-Microsoft

А GUI там через что? Под виндой через родные контролы, а под Linux GTK если не ошибаюсь?

Везде родные контролы. На винде CAPI из LispWorks использует WinAPI, на линуксе - Gtk, а на маках все сделано через Cocoa.

Но разве что использовать какие-нибудь MQ/RPC системы и писать логику на CL или чем-то ином, и лишь GUI отдельно на Qt или других...

Qt хорош. Бесспорно, он гораздо богаче CAPI, что предлагает LispWorks. Но опять же в моем случае Qt не умеет создавать (??) метафайлов, а это критически важная вещь для меня (экспорт диаграмм). То есть, для меня LispWorks предлагает даже больше, чем Qt и SWT из Java.

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

Но опять же в моем случае Qt не умеет создавать (??) метафайлов

PDF, PS, SVG и пр. он умеет, виндовские не умеет - но есть стороння библиотека под Qt, буквально на пару файлов

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

Ну так никто же не ставил целью сделать питон шустрым ЯП для расчетов, вот они и тормозные. Так же как в Racket и любом другом ЯП, цель которого не сводится к расчетам. Все логично.

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

PDF, PS, SVG и пр. он умеет

Это хорошо.

виндовские не умеет - но есть стороння библиотека под Qt, буквально на пару файлов

EmfEngine? Ну, в принципе, вариант. Да и стоит терпимо.

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

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

fix

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

а что?

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

у тебя несколько самое_распространнёное понимание - что есть язык и его окружение.

не в языке дело . а в человеко_машином устройстве.

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

а на задачах «мало_решаемых» есть только универсальные инструменты.

вот и всё.

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

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

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

под каждый символ отводится unsigned int, сама строка хранится в кодировке UCS-4

А сравниваем с чем? Со сторокой в UTF-8?

Тогда разница в 4 раза понятна, но откуда 8 раз?

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

A character in Racket is a Unicode code point. In C, a character value has type mzchar, which is an alias for unsigned — which is, in turn, 4 bytes for a properly compiled Racket. Racket expects to be compiled in a mode where short is a 16-bit integer, int is a 32-bit integer,

они считают, что int обязан быт 4 байта, если нет - Racket собран неправильно, стоит им рассказать про stdint.h

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

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

Твоя попытка взять на понт безобразна уныла. И от синдрома утёнка я не лечу.

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

они считают, что int обязан быт 4 байта, если нет - Racket собран неправильно, стоит им рассказать про stdint.h

Расскажи нам, где short не два байта, а int - не четыре?

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

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

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

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

Твоя попытка взять на понт безобразна уныла

будь проще - речь шла не о понтах

И от синдрома утёнка я не лечу

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

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

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

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

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

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

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

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

Лучший способ оценить язык - взять, да самому пописать.

однозначно

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

Вот беда: не найти таких систем в реальной жизни.

рядом с лиспом надо искать ;)

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

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

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

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

Я абсолютно рад

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

при этом я не говорю что это плохо, просто как понт --- так себе.

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

Я абсолютно рад

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

при этом я не говорю что это плохо, просто как понт --- так себе.

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

при этом я не говорю что это плохо, просто как понт --- так себе.

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

yyk ★★★★★
()

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

Лежит здесь http://www.software-lab.de/down.html

От себя добавлю свои 5 копеек в бессмертную задачу вычисления факториала для интересующихся данной проблемой ( AIv, wota) :

: (bench (md5 (pack (apply * (range 1 10000)))))
0.851 sec
-> "19b7ef18d483270f3acb82f431acd44"

То же самое через gmp с ручным управлением памятью и вызовом из so-библиотеки

(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)
           (md5
              (native "libgmp.so" "__gmpz_get_str" 'S 0 10 P)))))
0.019 sec
-> "19b7ef18d483270f3acb82f431acd44"

md5 код:

(de md5(X)
   (lowc (pack (mapcar hex (native "libcrypto.so" "MD5" '(B . 16) X (length X) 0)))) )

Ну и Python код для сравнения

time python -c 'import math; math.factorial(100000)'

real	0m3.552s
user	0m3.204s
sys	0m0.348s

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

справедливости ради - не загнал ли ты в тест питона и инициализацию самого питона тоже? :)

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

на нее уходят считанные миллисекунды, а то и меньше

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

Он не креационист. Это разные вещи. Католики и православные не являются креационистами, кстати. Это исключительно протестантское явление. Вообще меня забавляет, насколько споры по языкам программирования похоже на религиозные.

Сильно подозреваю, что Л(исп)ГМ и ПГМ имеют одни и те же основания в плане психологии человека.

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

Как правило агностики -это или вежливые атеисты, или стесняющиеся верующие. Ты определись таки.

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

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

но вышеизложенное не есть деизм.

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

Какой скудный взгляд на мир. А цветов тоже не существует? Только наличие и отсутствие освещенности? У тебя, похоже, вместо мозга триггер.

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

ясно. Агностицизм - вроде нормально.

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

Я написал «как правило». Иногда таки агностики - это именно агностики. Вроде Хаксли и Канта.

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

Сильно подозреваю, что Л(испо)Ф(обия)ГМ и ПГМ имеют одни и те же основания в плане психологии человека.

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

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