LINUX.ORG.RU

Allegro CL 9.0 Free Express Edition стал доступен для загрузки

 ,


9

10

Для загрузки на попробовать стала доступна версия коммерческой реализации языка программирования Common Lisp — Allegro CL 9.0 Express Edition.

Доступны пакеты для:

  • Linux (glibc 2.11 или позже);
  • Mac OS X (10.6 или позже), включает поддержку Lion;
  • FreeBSD (8.2 или позже);
  • Windows (XP, Vista, 7, 8, Server).

Основные новшества и изменения в этой версии:

  • полная поддержка SMP;
  • 820 исправлений и улучшений с последнего релиза;
  • полностью обновлен AllegroServe — вебсервер Franz Inc., написанный на лиспе: автоматическая компрессия/декомпрессия файлов, поддержка chunking, новый выбор опций безопасности, включая TLS v1.0 (также известный как SSL v3.1) протокол для защищенных соединений;
  • улучшена интеграция с Java через модуль jLinker, улучшен протокол, стал проще API;
  • новая и значительно упрощенная инсталляция для графических утилит на Mac 64-бит.

>>> Загрузка

★★

Проверено: anonymous_incognito ()
Последнее исправление: tazhate (всего исправлений: 4)

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

А в джаве изначально как было? Те же void*, только называется Object, и тот же каст.

Я не знаю джабу. В языках, где есть абстракция, есть система типов, которая так или иначе не позволяет (на стадии компиляции или в случае доброязыка ошибкой в рантайме) сложить, например, лошади с повозками. Void* никакую информацию о типе не несёт. С сишным приведением типов ты сможешь успешно складывать флоты и инты, получая полную бессмыслицу и роняя спутники.

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

стек с форматом записей активации и соглашением о вызове функций

Привет, мы говорили о типах данных и абстракции, а не об этом.

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

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

А тут-то что сложного? Scope rules во всех языках простые, как грабли.

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

дядьки с опытом обычно мыслят более трезво

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

компилятор - штука сложная

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

mv ★★★★★
()

При всей своей навороченности, лисп печален отсутствием вменяемых средств для обработки средних и больших массивов данных. Нет эффективных типов для хранения, mmap'а изкоробочного нет, вообще хз что делать. Ну или есть, но об этом нигде не написано. А в остальном - конфетка же >_<

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

«map и LC используются в соотношении 1:6»

Ок. Кстати, расскажи, что произойдёт, и где это написано в документации:

[[lambda x, i=i: x*i for i in (1,2,3)][i](1) for i in (0,1,2)]

А меня они особо не расстраивают.

Да, я в курсе, что написано в твоём профиле.

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

Оптимизации тоже не сильно сложно.

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

SSA transform - тупо, DCE, code motion - тупо. Loop unrolling, loop strength reduction, loop invariant motion, loop fusion и все такое - тоже тупо и примитивно. Register allocation тоже примитивно, тупых, но эффективных эвристик полно известно, особенно после SSE там все элементарно. Instruction selection тоже, тупое динамическое программирование,

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

в бухгалтерии все намного сложнее.

конкретно что там сложнее?

И что сильно способствует простоте - все это очень хорошо разграничивается. Все эти преобразования - сами по себе, и друг другу не мешают. Сложность между ними не распределяется. Каждое преобразование обособлено и примитивно.

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

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

конкретнее, можно?

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

в тупом компиляторе - да

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

тупейший llvm ir

обоснуй

во-вторых frontend С++ - это тот ещё гемор,

Исключительно за счет объема. Да и не так все страшно.

ну ты то не одного компилятора С++ не написал - так конечно несложно, так и в космос полететь нефиг делать - зажмурился и фьють

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

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

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

при любом раскладе упадет.

о типах данных и абстракции

разве что от реальности.

Void* никакую информацию о типе не несёт

ну сделай void* + type info, а интерфейс в хедер. вот и будет динамическая строгая типизация.

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

Кстати, расскажи, что произойдёт, и где это написано в документации:

Что произойдет - наверное, ты и сам знаешь. Где написано: Python 2.7 Language Reference, 6.2 «Assignment operators»:

«The target list is not deleted when the loop is finished»

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

я в курсе, что написано в твоём профиле.

В данном случае это не играет роли.

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

Конкретный пример сложных правил приведи. Мне таких даже в плюсах не попадалось.

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

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

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

при любом раскладе упадет.

Подучи хоть язык, который ты так защищаешь, ахо: http://ideone.com/lfb2OE

ну сделай void* + type info, а интерфейс в хедер. вот и будет динамическая строгая типизация.

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

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

выдыхай бобёр

lexer+parser — стандартные средства.

регистры, рантайм и т.д. — уже есть кодогенератор.

остаются проверки, трансформации и оптимизации над AST.

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

выдыхай бобёр

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

Ни в коем случае не выдыхай, бобёр.

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

на выдохе ещё один никому ненужный DSL изобрету и назову его компилятором

и вот вы, лисперы, все в этом

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

lexer+parser — стандартные средства.
регистры, рантайм и т.д. — уже есть кодогенератор.
остаются проверки, трансформации и оптимизации над AST.

чучелко слепить - невелика задача

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

Подучи хоть язык, который ты так защищаешь, ахо

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

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

будет обычный typeof.

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

чучелко слепить - невелика задача

жава или питан решают великие проблемы мироздания

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

Можно проще

(defmacro car-n (n)
  (let ((fname (intern (string-upcase (format nil "~:r" n)))))
    `(defun ,fname (s)
       (car
        ,(reduce
          (lambda (x acc)
            (declare (ignore x))
            (list 'cdr acc))
          (loop for i from 2 upto n collect i)
          :initial-value `s
          :from-end t)))))

Разворачивается в

(macroexpand-1 '(carn 12))
(DEFUN TWELFTH (S)
  (CAR (CDR (CDR (CDR (CDR (CDR (CDR (CDR (CDR (CDR (CDR (CDR S)))))))))))))
T

Использование

PARSE-ASTERISK> (twelfth (loop for i upto 12 collect i))
11
ugoday ★★★★★
()
Ответ на: комментарий от loki_

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

В стиле всего треда :)

mv ★★★★★
()
Ответ на: комментарий от ugoday
(defmacro car-n (n)
  (let ((fname (intern (string-upcase (format nil "~:r" n)))))
    `(defun ,fname (s)
       (car
        ,(reduce
          (lambda (x acc)
            (declare (ignore x))
            (list 'cdr acc))
          (loop for i from 2 upto n collect i)
          :initial-value `s
          :from-end t)))))

говнокод. лучше так:

(defmacro car-n (n)
  (let ((fname (intern (string-upcase (format nil "~:r" n)))))
    `(defun ,fname (s)
       (car
        ,(do ((i 0 (incf i)) 
              (res 's (list 'cdr res)))
             ((= i (1- n)) res))))))
anonymous
()

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

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

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

Ну так не зря ж говорят, что бывают программисты и «программисты на»

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

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

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

anonymous
()
Ответ на: комментарий от ugoday
(defmacro car-n (n)
  (let ((fname (intern (string-upcase (format nil "~:r" n)))))
    `(defun ,fname (s)
       (car
        ,(reduce
          (lambda (x acc)
            (declare (ignore x))
            (list 'cdr acc))
          (loop for i from 2 upto n collect i)
          :initial-value `s
          :from-end t)))))

Эх, CL. Вот так красивее:

(defmacro car-n [n]
  (let [fname (cl-format nil "~:r" n)]
    `(defn ~(symbol fname) [~'x]
       (first  ~(reduce (fn [cons-chain _]
                          `(rest ~cons-chain))
                        'x (range n))))))

проверяем:

(pprint (macroexpand-1 '(car-n 12))) ; =>

(clojure.core/defn twelfth [x]
 (clojure.core/first
  (clojure.core/rest
   (clojure.core/rest
    (clojure.core/rest
     (clojure.core/rest
      (clojure.core/rest
       (clojure.core/rest
        (clojure.core/rest
         (clojure.core/rest
          (clojure.core/rest
           (clojure.core/rest
            (clojure.core/rest
             (clojure.core/rest x))))))))))))))

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

Нужны простые, компактные, красивые языки. Такие, как Java, Python, ECMAScript.

Охлол. Ну Пайтон ещё может быть, но остальное не подходит либо под «красивые», либо под оба критерия.

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

питон не подходит под «компактные», ну никак вообще.

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

ну если тебе что-то неизвестно, не значит же что другие не знают.

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

Питоне

его ещё не закопали?

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

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

По-моему с точностью до наооборот. И да, это сообщение уже повторялось.

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

красота в коде на Java.

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

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

Совсем недавно костылями хоть как-то изменили ситуацию.

Я чесно гооря не знаю, что лучше - Object или костыли.

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

С++

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

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

list comprehensions гораздо удобнее и есть в Питоне

При этом он недокументирован и «удобнее» фактически только для одного случая, как сахар над однократным фильтром, мапом и продуктом.

Кроме того, читабельность питоновских list comprehensions не шибко высока.

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

С++

никогда не будет реализован

как так, ведь компилятор писать - нефиг делать (шёпотом: гораздо проще, чем бухгалтерию)?

слишком плохой дизайн

что-то я здесь прям весь в смущении, даже если абстрагироваться от того, что это просто твоё мнение, как это аффектит создание компилятора?

слишком плохие доки с вечным неопределённым поведением.

bad docs is better than no docs (cheers you lisp funboys)

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

bad docs is better than no docs (cheers you lisp funboys)

У LispWorks довольно хорошая документация, насколько это возможно для динамического языка. Сравниваю с MSDN, Java Docs, Scala Docs, Haskell Docs.

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

как так, ведь компилятор писать - нефиг делать

да не сложно, я уже 3й кто тебе это говорит. А то что там плохой стандарт, то это наверное уже всем известно, стандарт состоящий на 90% из ундефинед бехавиор ненужен.

что-то я здесь прям весь в смущении, даже если абстрагироваться от того, что это просто твоё мнение, как это аффектит создание компилятора?

делаем компилятор, а не бредни старуструпа.

bad docs is better than no docs

конечно же.

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