Под record имею в виду тип данных, компактно размещающийся в памяти и имеющий несколько полей. В C он делается при помощи слова struct.
Собственно, тип данных хорош тем, что обращение к любому отдельному полю делается очень быстро. Хранить те же данные например в родных LISPу списках как минимум расточительно.
www.kx.com - буду смотреть. Но реляционная база данных в моем случае врядли подойдет.
www.ocaml.org - неделю назад изучал. Хорошая штука, но foreign function interface какой-то страшноватый, скорость сравнимая с С достигается только при использовании императивных конструкций. Замены кода в realtime похоже тоже нет.
>Совсем недавно наблюдал как тупо зависает CentOS при нехватке памяти, и никакие ООМ килеры не спасают.
Не верю. Если ты написал скрипт, который порождает жрущие память, _разные_ процессы, и пустил его от рута, может быть. В реальных ситуациях, OOM килер отстрелит плохое приложение в течение нескольких минут.
>Если не java для коммерческого программирования, то что?
И действительно! Больше нечего! JAVA и SWING! Ура! Даешь офисы и экселы на java! Тогда и память жрать небудет и работать будет в 100 раз быстрее чем уродские поделки на С++! Пуст санки переделают Java VM на java - чтоб скорость была и память нежрало! А то невозможно! Ну неначем коммерческое программирование осуществлять!
>Про такие слова в своей жизни слышал: tomcat, application server, eclipse, BEA, Oracle, мультиплатформенные программы наконец, нет?
А, еще вы забыли упомянуть VB, VBscript и .NET - на них тоже программы написаны, и некоторые даже работают наверное, ну и что? Обойтись без них нельзя разве? Всему вышеперечисленному вами есть достойные альтернативы.
>Java не только в браузере, еще кой-какие применения имеются. У компутеров кроме запуска FF, Mplayer и AmaroK другие применения есть.
Я может быть неправ, но есть такое ощущение что LISP при этом создаст нехилую древовидную структуру. И при любом обращении к какому либо из полей он будет ходить по списку и искать нужный участок. Это иногда допустимо. Но когда есть порядка 1000 - 100 000 таких вот объектов, то без компактного размещения они отъедят кучу памяти. А если надо очень быстро делать итерацию за итерацией, где на каждой итерации создается массив точно таких же объектов но состояние которых зависит от состояния предыдущего массива, но тут и GC загнется. В общем, я сейчас ищу наиболее подходящий язык для моделирования искусственной жизни. :-)
LISP хорош тем, что у него гибкий синтаксис. Но цена этого иногда слишком высока.
>А, еще вы забыли упомянуть VB, VBscript и .NET - на них тоже программы написаны, и некоторые даже работают наверное, ну и что? Обойтись без них нельзя разве? Всему вышеперечисленному вами есть достойные альтернативы.
> Сам сейчас ищу лучший инструмент для одной задачи. Нужно: 1. высокоуровневый язык 2. эффективная работа с данными типа record 3. желателен контроль типов 4. желательная возможность изменения в runtime (как REPL в Scheme) 5. кроссплатформенность 6. интегрируемость с C/C++ 7. очень желательно чтобы он был функциональным а не императивным
Однозначно erlang.
http://www.erlang.org/
Подходит по всем параметрам, да и отлично зарекомендовал себя например при разработке ejabberd.
Памяти большинство Лиспов кушают довольно таки мало, в сравнении с убогими JVM и .NET. Туплы всякие в Лиспе тоже довольно эффективно реализованы, не с Жабкой сравнивать.
Но лучше всего конечно OCaml. И до памяти совсем не жадный, и туплы правильные.
>ранить те же данные например в родных LISPу списках как минимум расточительно.
.....-колотить, три ноги ..... и крылья, якорь мне в ..... Когда же наконец сдохнут ......, которые думают, что единственным типом данных в лиспе являются списки. Это было не правдой ещё в те времена, когда ты в пелёнки ....
FFI довольно тривиален. Генерить код в runtime можно в байткодовой версии. Но вообще таки да, если нужна динамика и рефлексия, то лучше Common Lisp никого нет. И с памятью он неплохо дружит.
Кстати, компромиссный вариант - ABCL, Kawa, Bigloo/JVM или даже SISC. Собственно, так и живём-с.
>OpenOffice: вроде программа свободная, но для расширения возможностей требуется Java. Ситуаций когда для работы программы с открытыми исходниками требуется несвободный "кастыль" быть недолжно
Вот возьми и перепиши куски OO которые зависят от Java. Или Столлман будет переписывать? Если это глупо, то никто не будет этим заниматься, как бы Столлману не хотелось
Ты странный. Зайди на /. их и счас там полно, коболовцев, получают свои 200k/year и не жужжат, просто они тихие. Не пиарят свой кобол как Руби, а спокойно поддерживают и получают денежку. В РФ такие же длинные рубли получают те, кто поддерживают всякую муру на Clipper. Переписать некогда, выкинуть жалко а спецов мало и они живут припеваючи. Конечно, если массы знают только PHP, толкового спеца Clipper найти трудно, соответственно он и запросит много
>Любую свободу надо защищать. Про это еще команданте Че говорил, а RMS как раз из того времени.
Вот именно, что свободу - нужно защишщать. Это мой выбор, который не ущемляет ничьи права, использовать Java. И какое, в таком случае, право, бородатый самодур имеет указывать мне что использовать, а что- нет? Это _мой_ выбор, использовать что-то или нет. А он, в свете _свободы_ имеет право только давать или не давать советы.
>Вот именно, что свободу - нужно защишщать. Это мой выбор, который не ущемляет ничьи права, использовать Java. И какое, в таком случае, право, бородатый самодур имеет указывать мне что использовать, а что- нет?
Существуют же независимые от тоталитарных сект люди. Есть надежда.
>2) Почему свободный .NET есть и активно используется, а свободная реализация более старой технологии Java все еще в ползунках сидит?
Потому что кто-то активно вкачивает в него деньги, не удивлюсь, если дочерние фирмы мертвософта, кому-то надо показать, что Microsoft и .NET это не монополия, дескать есть сторонние реализации. Вот и пиарят везде и всюду. А GNU/Classpath реально никому не нужен, потому что есть Sun JRE работающая везде, даже уже под FreeBSD. Ну и нахера колесо Harmony, Classpath изобретать? А как только Иказу перестанут спонсировать активно, Mono загнется, потому как это пиар. Больше пишут на Python, PHP, Ruby чем на Mono
>Сам сейчас ищу лучший инструмент для одной задачи. Нужно: 1.
высокоуровневый язык 2. эффективная работа с данными типа record 3.
желателен контроль типов 4. желательная возможность изменения в runtime
(как REPL в Scheme) 5. кроссплатформенность 6. интегрируемость с C/C++
7. очень желательно чтобы он был функциональным а не императивным
Тебе нужен XSLT. Только не задирай нос сразу, и не умничай, а хорошенько погугли
1. Высокоуровневый дальше некуда
2. Эффективен
3. XML Scheme
4. XSLT реально генерировать в Run-Time
5. Кроссплатформен
6. Либ для C/C++ горы
7. Функциональный
ugoday, ничего личного, но вы видимо до сих пор из пеленок не вышли, так как снова идете на войну с ветряными мельницами. Точно так же как в топике про OpenOffice.org.
Я не утверждал что массивов, record'ов и т.п. в LISP нет. Вопрос в том, насколько эффективно они реализованы. Известно, что с C они реализованы здорово, так как C знает сколько занимают те или иные данные и компактно их размещает. Плюс гарантируется очень быстрый доступ. Что до LISP, то есть _ПОДОЗРЕНИЕ_, что там это сделано несколько расточительно либо недостаточно гибко. Например, в Scheme нельзя сделать массив произвольных объектов (либо по крайней мере он не будет поддерживаться на уровне FFI). А в AWK массивы сделаны через hash map (что тоже не самый экономичный список).
Высокий уровень языка и высокая производительность несовместимы (хороший пример с vs с++). Либо Вы провоцируйте нездоровую дисскусию, либо хотите невозможного. Ничего личного.
ЗЫ
Пойду пивка попью, водочки уже принял, релакс необходим ;)
>Но лучше всего конечно OCaml. И до памяти совсем не жадный, и туплы правильные.
OCaml конечно отличная штука. Ему бы еще динамическую загрузку модулей (не байткода а нативных) зделали и юникод ... В мета это все есть, но больно уж сырой этот мета ...
>>Не верю. Если ты написал скрипт, который порождает жрущие память, _разные_ процессы, и пустил его от рута, может быть. В реальных ситуациях, OOM килер отстрелит плохое приложение в течение нескольких минут.
Не верь - но факт. если в системе заканчивается память + своп = 2.6 ядра и 2.4 с портированым из 2.6 VM - тупо виснут или кидают панику. Хорошим примером является httpd на нагруженном web сервере ;-)
Ну есть типа
(declaim (type (unsigned-byte 32) a b c)) - директива компилятору
Доступ к сишным структурам
struct c_struct
{
int x;
char *s;
};
((define-alien-type nil
(struct c-struct
(x int)
(s c-string)))
(setf (slot c-struct 'x) 20)
(setf (slot c-struct 's) "a Lisp string"