LINUX.ORG.RU

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

 


2

3

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


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

Ну вот какой язык ты берешь чтобы попробовать реализовать идею? И чтобы было быстро написать и при том не было бы трудно переделывать в последствии? А там может и от прототипа до продакшена не совсем трудно было доделать?

perl. Доктор, со мной всё нормально?

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

упадет еще быстрее

С чего вдруг?

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

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

в кол-ве и качестве успешных проектов

А при чем тут количество и качество успешных проектов, если мы говорили о скорости их написания?

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

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

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

Доктор, со мной всё нормально?

жить будешь.

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

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

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

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

С чего вдруг?

память пока еще не резиновая

Задача решена корректно, в полном объеме, в пять раз быстрее - какие проблемы?

она вообще не решена, ни в каком виде, даже если представить, что у тебя тонны ОЗУ

А при чем тут количество и качество успешных проектов, если мы говорили о скорости их написания?

man корреляция

Верунчики так же говорят.

о том, что реально не могут видеть, проекты на разных ЯП - вещь реальная и более-менее обозримая

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

подсунь своему решению две строки:

CREATE TABLE t1(f1); CREATE TABLE t2(f1);

потом расскажешь, как «Задача решена корректно, в полном объеме»

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

проблемы бриллианта «diamond problem» из Си++

Это что? Уже много лет пишу на C++ и последние несколько лет собеседую плюсовиков, но не слышал про такое.

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

А если задекларировать типы для функций? Компилятор рэкета, например, умеет анбоксинг для «конвеера» функций.

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

Компилятор быстрой динамикм. Нативный код (где есть) позволяет отдавать callback-и С-шныому коду с сравнимой скоростью работы. ООП-шные паттерны из коробки в CLOS. Общий стандарт и добрая воля сообщества позволяют писать общий код, как для нативного sbcl, так и для встраиваемых ecl и abcl для С и java соответственно. Компилятор котрый всегда с тобой позволяет оптимизировать пачки заранее подготовленых лямбд и замыканий по месту вызова, что например позволяет биндингу к pcre быть немного (5 -10%) быстрее чем прямой C-шный вызов.

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

кстати, кроме того, что оно упадет, оно еще и не отработает все что надо

С чего вдруг? Отработает, конечно же.

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

С чего вдруг? Отработает, конечно же.

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

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

память пока еще не резиновая

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

она вообще не решена, ни в каком виде, даже если представить, что у тебя тонны ОЗУ

Ну как же не решена, если решена? Файл выполняется запросом в SQLite - что и требовалось. Или требовалось что-то еще?

man корреляция

man корреляция не значит следствие

о том, что реально не могут видеть, проекты на разных ЯП - вещь реальная и более-менее обозримая

Ну и что обозримо-то?

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

Указано, что файл несколько гигов - то есть в оперативку должен по условию влазить

наглядный пример как плохо не знать основ в виде С:

а) строки в racket в идеальном случае весят в 4-8 раз больше
б) sqlite не принимает UCS4 - итого добавляй еще одно дублирование файла

получаем - твое решение «ест» минимум в пять раз больше памяти чем весит файл

Ну как же не решена, если решена?

не знаю как у лисперов, а у остальных принято обычно хотя б просто запустить, чтоб проверить работоспособность

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

А если задекларировать типы для функций? Компилятор рэкета, например, умеет анбоксинг для «конвеера» функций.

Я имел в виду коммон лисп. И как я понял из рассылки SBCL, такое у них значится в планах на будущее. Могу ошибаться, но по-моему сейчас все равно в SBCL будет боксинг, даже если пропишешь декларацию функции (давно не проверял). Радует то, что это теоретически возможно, и стандарт не прописывает преград на сей счет. Что касается других реализаций, то предполагаю, что у них тоже будет боксинг. Надо будет как-нибудь проверить еще LW - только там нужен "(float 0)".

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

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

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

наглядный пример как плохо не знать основ в виде С:

при чем тут С?

а) строки в racket в идеальном случае весят в 4-8 раз больше

Да, я вкурсе.

б) sqlite не принимает UCS4 - итого добавляй еще одно дублирование файла

А при чем тут ucs4?

не знаю как у лисперов, а у остальных принято обычно хотя б просто запустить, чтоб проверить работоспособность

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

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

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

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

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

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

Я и так прекрасно знаю, что все работает

очень, очень за вас рад

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

Я знаю про виртуальное наследование (правда на практике видел его применение только пару раз), но не знаю про diamond problem.

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

но не знаю про diamond problem.

она расписана по ссылке

wota ★★
()

Давно не было сборища лиспофобов? Всех покусанных в детстве лисперами собрали? Да и срач какой-то третьесортный: и не предметный, и троллинг ниже плинтуса. Да, лиспофобы уже не те пошли...

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

у вас там видимо где-то есть курсы шлангования, то у вас дамп БД на несколько гиг - это однозначно один запрос

А у тебя где-то написано, что много?

(даже первый запрос не сработал)

Который был некорректен и _должен был_ не сработать в соответствии с ТЗ.

То есть ты таки не в состоянии сформулировать задачу адекватно, я верно понял?

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

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

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

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

http://en.wikipedia.org/wiki/Database_dump

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

А то что решение пишется с полпинка - ну это и так ясно же.

конечно, его нет и не будет(?), но кого волнуют такие мелочи, главно пораспинаться про крутость лиспа, посравнивать ЯП, пошланговать на тему - «я не знаю, что такое дамп БД» и пр.

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

Да ладно вам - БД, запросы... скукота! Как в лиспах факториал считается?;-)

У меня на питоне от так от:

reduce( long.__mul__, range(1,N+1), 1L )

Батарейками (сиречь библиотечными ф-ми для расчета факториала) не пользоваться!

ЗЫ и сколько это работает?

$ time python -c 'print reduce( long.__mul__, range(1,10000+1), 1L )' | md5sum
2f79385ca95396790e26149035e4829a  -

real    0m2.721s
user    0m2.688s
sys     0m0.016s

$ less /proc/cpuinfo
model name      : Intel(R) Core(TM)2 CPU         U7500  @ 1.06GHz

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

http://en.wikipedia.org/wiki/Database_dump

Бедняша, тебе же вон даже википедия пишет, что формат дампа может быть любым. Никто тебе не гарантирует даже тот факт, что он вообще будет в виде SQL запросов. Если говорить об SQLite, то у нее сам файл базы одновременно является и дампом. Но куда тебе.

конечно, его нет и не будет

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

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

в миллисекундах

> (time (md5 (number->string (stream-fold * 1 (in-range 1 10001)))))
cpu time: 375 real time: 411 gc time: 93
#"19b7ef180d483270f3acb82f431acd44"

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

тебе же вон даже википедия пишет, что формат дампа может быть любым.

я сразу написал четко - SQL, если кто не видит - это к окулисту

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

тяжелый случай, но я понимаю - анонимусу виднее чем тому, кто с этим форматом напрямую работает помимо API

Ну так и не кукарекай тогда, кукаретик

я вашего сленга не понимаю, объяснять не надо - не пригодится

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

я уже понял

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

На каком проце (частота хотя бы)?

И главное, сумма то не сходится... меня терзают смутные сомнения, нешто у лиспа инт переполняется?

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

SQL - а дальше что?

http://chinookdatabase.codeplex.com/downloads/get/167067

пример дампа для общего ознакомления

Вот и правильно. Соснул - не выебывайся.

не стоит рассказывать о ваших жизненных принципах - это далеко не всем интересно

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

И главное, сумма то не сходится... меня терзают смутные сомнения, нешто у лиспа инт переполняется?

Нет, не переполняется, видно как-то с представлением стрингов связано.

На каком проце (частота хотя бы)?

2.5ghz, но тут скорость подсистемы памяти по-важнее частоты, по-моему, будет.

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

пример дампа для общего ознакомления

С чего ты взял, что я ни разу не видел SQL-дампов и не работал с ними?

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

Нет, не переполняется, видно как-то с представлением стрингов связано.

Гхм... ну пока я не увижу пральной суммы - выглядит сомнительно, да? Питон выводит просто десятичное число, цифирками. Кстати

$ time python -c 'print hex(reduce( long.__mul__, range(1,10000+1), 1L ))' | md5sum
01dee1b89493d216e127fcac9364fe9e  -

real    0m0.275s
user    0m0.268s
sys     0m0.008s

Т.е. в пред примере основное время ушло на представление результата в строковом виде. А так, на частоте в 2.5 раза меньшей, пистон сделал лисп!!!1111 А вот на это машинке со сравнимой частотой

$ less /proc/cpuinfo
model name      : Intel(R) Core(TM) i5-2400 CPU @ 3.10GHz
$ time python -c 'print hex(reduce( long.__mul__, range(1,10000+1), 1L ))' | md5sum
01dee1b89493d216e127fcac9364fe9e  -

real    0m0.048s
user    0m0.040s
sys     0m0.004s
отрыв от лиспа так вааще на порядок! Это пистон!! Вечный тормоз!!! Я рыдаль...

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

Там памяти нужно 15кб, о какой скорости подсистемы памяти Вы говорите? По любому оно влазит целиком в кэш верхнего уровня.

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

Реализации бывают у языков. Вы дали ссылку на реализацию языка. ТС язык не назвал. Какие ещё могут быть вопросы?

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

Реализации бывают у языков. Вы дали ссылку на реализацию языка

и он ее попросил

ТС язык не назвал

он назвал семейство ЯП, мой ответ не выходил за его рамки

Какие ещё могут быть вопросы?

не знаю, вообще нет смысла это обсуждать

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

Таки мои подозрения о религиозности оказались верными.

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

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

отрыв от лиспа так вааще на порядок! Это пистон!! Вечный тормоз!!! Я рыдаль...

Mathematica

Timing[
 IntegerString[
  Hash["0x" <> IntegerString[100000!, 16] <> "L\n", "MD5"],
  16, 32]]

{0.033818, "b6f054fc0bf1124daed49e4d7fd04007"}
$ time python -c 'print hex(reduce( long.__mul__, range(1,100000+1), 1L ))' | md5
b6f054fc0bf1124daed49e4d7fd04007

real	0m4.447s
user	0m4.415s
sys	0m0.034s

А тут питон в 130 раз тормозней. Лишп лишпу рознь.

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

А тут питон в 130 раз тормозней

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

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

меряете теплое с мягким

Теплый и мягкий факториал, да.

не факт, что будет разница, но у питона тоже есть встроенный факториал

Вуаля:

$ time python -c 'import math; print hex(math.factorial(100000))' | md5
b6f054fc0bf1124daed49e4d7fd04007

real	0m4.404s
user	0m4.374s
sys	0m0.033s
anonymous
()
Ответ на: комментарий от AIv

отрыв от лиспа так вааще на порядок! Это пистон!! Вечный тормоз!!! Я рыдаль...

Ты дурачок что ли? Слепил 3 сишных функции и радуется, лол.

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

Вуаля:

~$ cat 1.c && g++ -Ofast ./1.c -lgmp && time ./a.out
#include <gmp.h>

int main()
{
	mpz_t a;
	mpz_init( a );
	mpz_fac_ui( a, 100000 );
}


real	0m0.014s
user	0m0.012s
sys	0m0.000s
~$ time python -c 'import math; math.factorial(100000)'

real	0m2.319s
user	0m2.124s
sys	0m0.188s

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

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

встроенный факиториал это неспортивно. Не говоря о том, что рксчте факториала в лоб это не самый эффективный алгоритм. Сделаете на лиспе тот алгоритм который заложен в математику - тогда поговори

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

А mpn_* умеешь? Интересно было бы сравнить.

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

Гхм... ну пока я не увижу пральной суммы - выглядит сомнительно, да?

Ну это правильная сумма.

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

Ну и racket тоже.

Т.е. в пред примере основное время ушло на представление результата в строковом виде.

Странно, в racket на это вообще времени ни ушло ни сколько (ну по сравнению с временем вычисления самого факториала).

А так, на частоте в 2.5 раза меньшей, пистон сделал лисп!!!

У меня вдвое разница, на одной частоте.

Вообще да, в ракетке медленные бигнумы, это известный факт.

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

Сделаете на лиспе тот алгоритм который заложен в математику - тогда поговори

так уже:

(require math/number-theory)
> (require file/md5)
> (require math/number-theory)
> (md5 (number->string (time (factorial 10000))))
cpu time: 15 real time: 20 gc time: 0
#"19b7ef180d483270f3acb82f431acd44"
> 

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