LINUX.ORG.RU

Избранные сообщения alienclaster

Live Programming In Modern Smalltalk

Форум — Development

Всем привет,

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

Цель курса – развить практические навыки работы в среде Смолток, в первую очередь чтобы она не казалась чем-то инопланетным – и чтобы знать, с какой стороны подойти к Смолтоку при самостоятельном обучении.

Материалы | Записи занятий

 , ,

yoghurt ()

Нужны идеи по итерации

Форум — Development

Существует 3 листа

A (1 2 3 4 5)
B (6 7 8 9 10)
C (11 -12 13 -14 -15)
нужно получить
D (1 7 3 9 10)
по листу C смотрим если елемент положительный берём елемент из листа A, если елемент в листе С отрицательный берём елемент из листа B.

перекрутил в голове nth, elt, do. Подкиньте идею с кодом.

 , ,

saufesma ()

Гениальных игр тред

Форум — Games

Вслед за топиками, в которых можно рекомендовать любую игру надо бы завести и свой) Поиграл в недавно вышедший Inscryption и сейчас под впечатлением. Вставить в карточную игру элементы психологического хоррора, неожиданные повороты сюжета (я например не привык, чтобы карты со мной говорили), сделать простую графику (увы, в 2021 ААА студии не рискнут выпускать такое) такой атмосферной - автор просто гений.

Ну в общем это тред игр, где вам хотелось воскликнуть «это гениально!». Добавлю еще одну, Do not feed the monkeys - игра про видеонаблюдение как одну из новых технологий зондирования. Еще одна вертится в памяти, может быть позже вспомню

 , ,

goingUp ()

Игры про космос/фантастику/отмосферку/историю или типа того.

Форум — Games

Вот закончил The Swapper проходить (по совету анона взял очень не пожалел странно что раньше не слышал про неё и не видел нигде), до этого прошёл Alien Isolation. До этого прошёл две части Dead Space. До этого прошёл SOMA. Между делом другие были, но эти отражают то чего хоца. В них всех есть некий антураж общий. Ну так вот. Кто чего посоветует, на подобе или около того?

 , , , ,

LINUX-ORG-RU ()

Vim или Emacs? А LISP в 2021?

Форум — Development

https://www.youtube.com/watch?v=8Q9YjXgK38I&t=42s

Парень в определённых кругах, личность известная.
посмотрел я его ролик, стал ковыряться по истории:

А ведь Crashbandicoot была годной игрой…

Что выбрать? Vim или Emacs?
Изучать в 2021 году Lisp? Если изучать, какой? Практика?
А не засмеют сотрудики?

Времени в сутках маловато, на всё не хватает.

 , ,

B0B ()

McCLIM 0.9.7 «Imbolc»

Новости — Разработка
Группа Разработка

После десяти лет разработки команда разработчиков решила выпустить релиз McCLIM — Common Lisp библиотеки для создания GUI, свободной реализации (лицензия LGPL) спецификации CLIM — спецификации полностью объектно-ориентированного тулкита на базе CLOS и идях потоков ввода и вывода, обладающего средствами платформонезависимости. CLIM унаследованна от GUI систем Dynamic Windows в лисп-машинах Symbolics.

Понятно что за 10 лет разработки список изменений очень большой и желающие могут ознакомиться с более подробной информацией в блоге McCLIM, git log и issue tracker.

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

Сайт проекта

>>> Подробности

 ,

ados ()

GNU Guile 2.9.5 (beta)

Новости — GNU's Not Unix
Группа GNU's Not Unix

Guile 2.9.5 — это пятый beta-выпуск реализации языка программирования Scheme от GNU, готовящийся к стабильной ветке 3.x.

Guile поддерживает многие SRFI, предоставляет модульную систему; полный доступ к системным вызовам POSIX; поддержку сети, динамической линковки и вызова внешних функций; мощную обработку строк. Guile может интерпретировать код интерактивно, компилировать его в байткод виртуальной машины и подключаться библиотекой в качестве встроенного в приложение интерпретатора.

Изменения по сравнению с прошлой бета-версией:

  • Объединение разных видов «записей» (Record) в один.
  • Новая реализация исключений:
    • Старый throw & catch из Guile -> в более общепринятый в Scheme raise-exception & with-exception-handler.
  • Оптимизация приведения целочисленных типов к типам с плавающей запятой.
  • Определение высокоуровневых биндингов для вспомогательного синтаксиса: else, =>, ..., _.
  • Общепринятый gettext-алиас теперь G_.
  • Добавлена опция --r6rs, но поддержка неполная.
  • Добавлена поддержка R7RS (!).
  • Объявлен устаревшим вызов record-constructor с двумя аргументами.

>>> Подробности

 , , ,

Cirno ()

Браузер Next

Новости — Open Source
Группа Open Source

Новый браузер с говорящим названием Next ориентирован на управление с клавиатуры, поэтому привычного интерфейса как такового в нем нет. Сочетания клавиш сходны с теми, что используются в Emacs и vi.

Браузер можно настроить под себя и дополнить расширениями на языке Lisp.

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

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

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

>>> Подробности

 ,

anonymous ()

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

Форум — Development

Не буду писать многабукаф - просто скажите, сколько (по времени в секундах) в Scheme выполняется данный кот:

(define (divs n)
    (define (go i a)
        (cond ((> (* i i) n) a)
              ((= (* i i) n) (+ 1 a))
              ((= 0 (modulo n i)) (go (+ 1 i) (+ 2 a)))
              (else (go (+ 1 i) a))))
    (go 1 0))
 
(define (task n k)
    (cond ((>= 500 (divs k)) (task (+ 1 n) (+ k n 1))) (else k)))
 
(display (task 1 1))
Я пробовал несколько онлайн вычисляторов, и время выполнения различается на порядки. Где-то указывают реализацию (chiken / guile), где-то нет. Здесь https://repl.it/languages/scheme какое-то неприличное время выполняется, здесь https://www.tutorialspoint.com/execute_scheme_online.php весьма неплохо (относительно остальных), на Ideone и Rextester промежуточные показатели... Я в растерянности - где правда?

 , ,

Ivana ()

Вышел язык программирования Racket 7.0

Новости — Разработка
Группа Разработка

Racket - это язык программирования общего назначения, а также первая в мире экосистема для языко-ориентированного программирования.

Racket версии 7.0 включает существенные изменения в рамках долгосрочных целей замены текущей системы времени выполнения и поддержки множества систем времени выполнения. Предполагается, что пользователи Racket не почувствуют большой разницы между Racket 6.12 и Racket 7.0, но в связи с тем, что реализация претерпела серьёзные изменения, увеличен именно старший номер версии.

Ядро версии 7.0 является результатом переработки ядра версии 6.12 более чем на 1/8, и включает новый механизм раскрытия макросов, который осуществляет бутстрэппинг самого себя. Данный механизм покрывает более 40% кода, необходимого для замены ядра Racket на Chez Scheme. Остальные 60% кода, по бОльшей части, также реализованы, но не включены в этот выпуск; мы надеемся и предполагаем, что Racket-на-Chez будет готов для промышленного использования в следующих выпусках ветки 7.x

  • Синтаксис формы (`#'`) поддерживает новые шаблоны подформ: ~@ - для сплайсинга, и ~? - для выбора между подшаблонами, основанного на возможном «отсутствии» значения у переменных образца (например, у образца ~optional в syntax-parse). Библиотека syntax/parse/experimental/template, откуда происходят эти возможности, экспортирует новые формы под старыми именами для совместимости.
  • На Windows флаг --embed-dlls команды raco exe создаёт по-настоящему автономный исполняемый файл ".exe", который содержит в себе разделяемые библиотеки Racket.
  • Опция «Create Executable» интегрированной среды разработки DrRacket для учебных языков (Beginner Student, и т.п.) использует флаг --embed-dlls на Windows.
  • Поддержка prefab («previously fabricated») структур в Typed Racket существенно улучшена, что делает их более полиморфными, исправляя, вместе с тем, существенные ошибки текущей реализации. Программы, которые сейчас используют предикаты для prefab-структур неизвестных данных, могут нуждаться в ревизии, т.к. предыдущие версии Typed Racket позволяли программам с потенциальными ошибками осуществлять проверку типов. Смотрите Typed Racket RFC 1 и prefab-changes для более подробной информации об этом изменении, и о том, как исправить программы, которые подверглись влиянию в связи с этим изменением.
  • Typed Racket поддерживает #:rest-star в конструкторе типов ->*, что позволяет функциональным типам указывать в хвостовом списке аргументов (rest arguments) более сложные образцы типов, такие как функция hash.
  • Интерактивные оверлеи могут быть наложены на графики, созданные с помощью plot-snip. Это позволяет создавать интерактивные графики или отображать дополнительную информацию, когда указатель мыши находится над областью графика. Примеры использования данной возможности можно посмотреть тут.
  • racket/plot предоставляет процедуры для отображения графиков японских свечей (candlestick charts), которые могут быть использованы в финансовом анализе временных рядов.
  • Добавлен contract-equivalent?, который проверяет, что два контракта являются взаимосильными, без экспоненциального замедления, которое имеет место в случае двух вызовов contract-stronger?.
  • Lazy Racket поддерживает функции с именованными аргументами.

>>> Оригинал

 , ,

azelipupenko ()

Racket Scheme. Вычислить и представить в виде списка полином Лежандра.

Форум — Development

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

Задание: Вычислить и представить в виде списка полином Лежандра Pk: P0 = 1, P1 = x, Pn+1 = ((2n + 1)xPn − nPn−1)/(n + 1).

Я переделал формулу для просто Pn-ого члена для удобства вычисления. Pn = ((2n-1)*x*P[n-1] - (n-1)*P[n-2])/(n). Формула в виде картинки, Pn-ого члена, которая получилась

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

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

( читать дальше... )

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

( читать дальше... )

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

 ,

stzky ()

GNU Guile 3.0

Новости — GNU's Not Unix
Группа GNU's Not Unix

16 января состоялся мажорный релиз GNU Guile — встраиваемой реализации языка программирования Scheme с поддержкой многопоточности, асинхронности, работы с сетью и системными вызовами POSIX, бинарного интерфейса Си, разбора PEG, REPL по сети, XML; имеет собственную систему объекто-ориентированного программирования.

Главной особенностью новой версии является полноценная поддержка JIT-компиляции, что позволило ускорить работу программ в среднем в два раза, максимум — в тридцать два для бенчмарка mbrot. По сравнению с виртуальной машиной Guile предыдущей стабильной версии, набор инструкций стал более низкоуровневым.

Также улучшена совместимость со стандартами языка программирования Scheme R5RS и R7RS, появилась поддержка структурированных исключений и чередующихся между собой объявлений и выражений внутри лексического контекста. Написанный на Scheme eval по производительности сравнялся с аналогом на языке Си; Для разных реализаций типа Record предоставлен унифицированный набор инструментов для работы с ними; Классы в GOOPS перестали быть переопределяемыми; Подробности и прочие изменения можно прочитать в анонсе релиза.

Новой стабильной веткой языка отныне является 3.x. Она устанавливается параллельно предыдущей стабильной ветке 2.x.

>>> Анонс релиза

 , , ,

Princesska ()

ECL 16.1.3

Новости — Open Source
Группа Open Source

Спустя почти год вышла новая версия ECL — реализации языка программирования Common Lisp.

Также ведутся работы над новой документацией.

Было проведено обширное тестирование релиза на Linux, FreeBSD, OpenBSD, NetBSD, OSX, Windows MSVC, Windows MinGW, Windows Cygwin, Android и Haiku. Было уделено больше внимания над улучшениями на платформе Windows.

Основной особенностью ECL компиляция исходного кода на Common Lisp в байт-код или в портабельный код на C, который затем компилируется стандартным компилятором текущей платформы, что делает компилятор ECL легко переносимым. Например, известны порты ECL на ARM, работающие на Android и iOS.

ECL также может легко встраиваться в приложения, написанные на других языках, как скриптовый язык, но с более богатыми возможностями: Common Lisp, компиляция в байт-код или машинный код (если доступен компилятор С).

>>> Исходный код

>>> Подробности

 , , ,

Oxdeadbeef ()

Common Lisp CLOS подтипы в defmethod

Форум — Development

Можно ли при объявлении defmethod указать, что у объекта должны быть наследованы несколько типов? По смыслу что-то типа -

(defmethod m ((o (and type1 type2))) ...)

 ,

pseudo-cat ()

Idris meets CL

Форум — Development

Pythag.idr:

module Main

pythag : Int -> List (Int, Int, Int)
pythag max = [(x, y, z) | z <- [1..max], y <- [1..z], x <- [1..y],
              x * x + y *y == z * z]

main : IO ()
main = print (pythag 50)

$ idris Pythag.idr --codegen lw -o Pythag.lisp
$ ls -l Pythag.*
-rw-r--r-- 1 mimimimi staff   4346 Dec 18 15:59 Pythag.ibc
-rw-r--r-- 1 mimimimi staff    195 Dec 18 10:32 Pythag.idr
-rw-r--r-- 1 mimimimi staff  41640 Dec 18 15:59 Pythag.lisp

Pythag.lisp:

CL-USER 1 > (load (compile-file "Pythag.lisp"))
;;; Compiling file Pythag.lisp ...
;;; Safety = 3, Speed = 1, Space = 1, Float = 1, Interruptible = 1
;;; Compilation speed = 1, Debug = 2, Fixnum safety = 3
;;; Source level debugging is on
;;; Source file recording is  on
;;; Cross referencing is on
; (TOP-LEVEL-FORM 0)
; (DEFPACKAGE "IDRIS.RTS")
; (TOP-LEVEL-FORM 2)
; (SUBFUNCTION (DEFCLASS IDRIS.RTS:IDRIS-ERROR) (DEFINE-CONDITION IDRIS.RTS:IDRIS-ERROR))
; (DEFINE-CONDITION IDRIS.RTS:IDRIS-ERROR)
; (SUBFUNCTION (DEFCLASS IDRIS.RTS::SIMPLE-IDRIS-ERROR) (DEFINE-CONDITION IDRIS.RTS::SIMPLE-IDRIS-ERROR))
; (DEFINE-CONDITION IDRIS.RTS::SIMPLE-IDRIS-ERROR)
; IDRIS.RTS:IDRIS-ERROR
; (SUBFUNCTION (DEFCLASS IDRIS.RTS:NOT-IMPLEMENTED-IDRIS-ERROR) (DEFINE-CONDITION IDRIS.RTS:NOT-IMPLEMENTED-IDRIS-ERROR))
; (DEFINE-CONDITION IDRIS.RTS:NOT-IMPLEMENTED-IDRIS-ERROR)
; (DEFINE-CONDITION IDRIS.RTS:NOT-IMPLEMENTED-IDRIS-ERROR)
; (DEFVAR IDRIS.RTS::*GLOBAL-LOCK*)
; IDRIS.RTS::WITH-GLOBAL-LOCK
; IDRIS.RTS:IDRIS-INIT
; IDRIS.RTS:IDRIS-SYSTEM-INFO
; (SUBFUNCTION (DEFSETF IDRIS.RTS:IDRIS-CON-VALS) (DEFSTRUCT IDRIS.RTS:IDRIS-CON))
; (SUBFUNCTION (DEFSETF IDRIS.RTS:IDRIS-CON-TAG) (DEFSTRUCT IDRIS.RTS:IDRIS-CON))
; (SUBFUNCTION IDRIS.RTS:MAKE-IDRIS-CON (DEFSTRUCT IDRIS.RTS:IDRIS-CON))
; IDRIS.RTS:IDRIS-NULL-P
; IDRIS.RTS:IDRIS-STRING-BUILDER
; IDRIS.RTS:IDRIS-SUBSTRING
; IDRIS.RTS:IDRIS-STRING->INTEGER
; IDRIS.RTS:IDRIS-INTEGER->STRING
; IDRIS.RTS:IDRIS-STRING->FLOAT
; IDRIS.RTS:IDRIS-FLOAT->STRING
; IDRIS.RTS:IDRIS-STRING->LIST
; IDRIS.RTS:IDRIS-LIST->STRING
; IDRIS.RTS:IDRIS-BITWISE-SHIFT-LEFT
; IDRIS.RTS:IDRIS-BITWISE-SHIFT-RIGHT
; IDRIS.RTS:CURRENT-IDRIS-INPUT
; IDRIS.RTS:CURRENT-IDRIS-OUTPUT
; IDRIS.RTS:CURRENT-IDRIS-ERROR
; (DEFVAR IDRIS.RTS::*FLUSH-BUFFERS-P*)
; IDRIS.RTS:IDRIS-DISABLE-BUFFERING
; IDRIS.RTS::WITH-BUFFERING-CONTROL
; IDRIS.RTS:IDRIS-GET-LINE
; IDRIS.RTS:IDRIS-GET-STRING-N
; IDRIS.RTS:IDRIS-PUT-STRING
; (DEFPACKAGE "Pythag")
; (TOP-LEVEL-FORM 33)
; (TOP-LEVEL-FORM 34)
; |Pythag|::|Prelude.Bool.&&|
; |Pythag|::|Prelude.List.++|
; |Pythag|::|Prelude.Algebra.<+>|
; |Pythag|::|Force|
; |Pythag|::|PE_concatMap_8faac41f|
; |Pythag|::|PE_constructor of Prelude.Algebra.Monoid?Semigroup ty_3b7d03e2|
; |Pythag|::|PE_neutral_3b7d03e2|
; |Pythag|::|assert_unreachable|
; |Pythag|::|call__IO|
;;;*** Warning in |Pythag|::|Prelude.Applicative.empty|: V3 is bound but not referenced
; |Pythag|::|Prelude.Applicative.empty|
;;;*** Warning in |Pythag|::|Prelude.Applicative.guard|: V5 is bound but not referenced
;;;*** Warning in |Pythag|::|Prelude.Applicative.guard|: V3 is bound but not referenced
; |Pythag|::|Prelude.Applicative.guard|
; |Pythag|::|idris_crash|
; |Pythag|::|Prelude.Bool.ifThenElse|
; |Pythag|::|Prelude.Interfaces.intToBool|
; |Pythag|::|io_bind|
; |Pythag|::|io_pure|
; |Pythag|::|Main.main|
; |Pythag|::|mkForeignPrim|
; |Pythag|::|Prelude.Bool.not|
;;;*** Warning in |Pythag|::|Prelude.Show.precCon|: V1 is bound but not referenced
; |Pythag|::|Prelude.Show.precCon|
; |Pythag|::|Prelude.Show.primNumShow|
; |Pythag|::|prim__addInt|
; |Pythag|::|prim__asPtr|
; |Pythag|::|prim__concat|
; |Pythag|::|prim__eqBigInt|
; |Pythag|::|prim__eqChar|
; |Pythag|::|prim__eqInt|
; |Pythag|::|prim__eqManagedPtr|
; |Pythag|::|prim__eqPtr|
; |Pythag|::|prim__eqString|
; |Pythag|::|prim__mulInt|
; |Pythag|::|prim__null|
; |Pythag|::|prim__peek16|
; |Pythag|::|prim__peek32|
; |Pythag|::|prim__peek64|
; |Pythag|::|prim__peek8|
; |Pythag|::|prim__peekDouble|
; |Pythag|::|prim__peekPtr|
; |Pythag|::|prim__peekSingle|
; |Pythag|::|prim__poke16|
; |Pythag|::|prim__poke32|
; |Pythag|::|prim__poke64|
; |Pythag|::|prim__poke8|
; |Pythag|::|prim__pokeDouble|
; |Pythag|::|prim__pokePtr|
; |Pythag|::|prim__pokeSingle|
; |Pythag|::|prim__ptrOffset|
; |Pythag|::|prim__readChars|
; |Pythag|::|prim__readFile|
; |Pythag|::|prim__registerPtr|
; |Pythag|::|prim__sextInt_BigInt|
; |Pythag|::|prim__sizeofPtr|
; |Pythag|::|prim__sltBigInt|
; |Pythag|::|prim__sltInt|
; |Pythag|::|prim__stderr|
; |Pythag|::|prim__stdin|
; |Pythag|::|prim__stdout|
; |Pythag|::|prim__strHead|
; |Pythag|::|prim__subInt|
; |Pythag|::|prim__toStrInt|
; |Pythag|::|prim__vm|
; |Pythag|::|prim__writeFile|
; |Pythag|::|prim__writeString|
; |Pythag|::|prim_io_bind|
; |Pythag|::|prim_write|
; |Pythag|::|Prelude.Applicative.pure|
; |Pythag|::|Prelude.Interactive.putStr'|
; |Pythag|::|Main.pythag|
; |Pythag|::|run__IO|
; |Pythag|::|Prelude.Show.show|
; |Pythag|::|Prelude.Show.showParens|
; |Pythag|::|Prelude.Strings.strM|
; |Pythag|::|unsafePerformPrimIO|
; |Pythag|::|world|
; |Pythag|::|Prelude.Bool.??|
; |Pythag|::{APPLY_0}
; |Pythag|::{APPLY2_0}
; |Pythag|::{EVAL_0}
; |Pythag|::|{PE_concatMap_8faac41f_0}|
; |Pythag|::|Prelude.Interfaces.{Prelude.Interfaces.@Prelude.Interfaces.Ord$Int:!<=:0_lam_0}|
; |Pythag|::|Prelude.Interfaces.{Prelude.Show.@Prelude.Interfaces.Ord$Prec:!>=:0_lam_0}|
; |Pythag|::|{io_bind_0}|
; |Pythag|::|Main.{main_0}|
; |Pythag|::|Prelude.Show.{primNumShow_0}|
; |Pythag|::|Prelude.Interactive.{putStr'_0}|
; |Pythag|::|Main.{pythag_0}|
; |Pythag|::|{runMain_0}|
; |Pythag|::|{io_bind_1}|
; |Pythag|::|Main.{main_1}|
; |Pythag|::|Prelude.Show.{primNumShow_1}|
; |Pythag|::|Main.{pythag_1}|
; |Pythag|::|{io_bind_2}|
; |Pythag|::|Main.{main_2}|
; |Pythag|::|Prelude.Show.{primNumShow_2}|
; |Pythag|::|Main.{pythag_2}|
; |Pythag|::|Main.{main_3}|
; |Pythag|::|Main.{pythag_3}|
; |Pythag|::|Main.{main_4}|
; |Pythag|::|Main.{pythag_4}|
; |Pythag|::|Main.{pythag_5}|
; |Pythag|::|Main.{pythag_6}|
; |Pythag|::|Prelude.List.reverse:reverse':0|
; |Pythag|::|Decidable.Equality.Decidable.Equality.@Decidable.Equality.DecEq$Char:!decEq:0:primitiveNotEq:0|
; |Pythag|::|Decidable.Equality.Decidable.Equality.@Decidable.Equality.DecEq$Int:!decEq:0:primitiveNotEq:0|
; |Pythag|::|Decidable.Equality.Decidable.Equality.@Decidable.Equality.DecEq$Integer:!decEq:0:primitiveNotEq:0|
; |Pythag|::|Decidable.Equality.Decidable.Equality.@Decidable.Equality.DecEq$ManagedPtr:!decEq:0:primitiveNotEq:0|
; |Pythag|::|Decidable.Equality.Decidable.Equality.@Decidable.Equality.DecEq$Ptr:!decEq:0:primitiveNotEq:0|
; |Pythag|::|Decidable.Equality.Decidable.Equality.@Decidable.Equality.DecEq$String:!decEq:0:primitiveNotEq:0|
; |Pythag|::|Prelude.Prelude.@Prelude.Enum$Int:!enumFromTo:0:go:0|
; |Pythag|::|Prelude.Prelude.@Prelude.Enum$Int:!enumFromTo:0:go':0|
; |Pythag|::|Prelude.Show.Prelude.Show.@Prelude.Show.Show$List a:!show:0:show':0|
; |Pythag|::|Decidable.Equality.Decidable.Equality.@Decidable.Equality.DecEq$Bool:!decEq:0|
; |Pythag|::|Prelude.Prelude.@Prelude.Enum$Int:!enumFromTo:0|
; |Pythag|::|Prelude.Interfaces.Prelude.Nat.@Prelude.Interfaces.Eq$Nat:!==:0|
; |Pythag|::|Prelude.Interfaces.Prelude.Show.@Prelude.Interfaces.Eq$Prec:!==:0|
; |Pythag|::|Prelude.Foldable.Prelude.List.@Prelude.Foldable.Foldable$List:!foldr:0|
; |Pythag|::|Prelude.Monad.Prelude.@Prelude.Monad.Monad$List:!>>=:0|
; |Pythag|::|Prelude.Interfaces.Prelude.Interfaces.@Prelude.Interfaces.Ord$Int:!<=:0|
; |Pythag|::|Prelude.Interfaces.Prelude.Interfaces.@Prelude.Interfaces.Ord$Int:!compare:0|
; |Pythag|::|Prelude.Interfaces.Prelude.Interfaces.@Prelude.Interfaces.Ord$Integer:!compare:0|
;;;*** Warning in |Pythag|::|Prelude.Interfaces.Prelude.Nat.@Prelude.Interfaces.Ord$Nat:!compare:0|: V2 is bound but not referenced
; |Pythag|::|Prelude.Interfaces.Prelude.Nat.@Prelude.Interfaces.Ord$Nat:!compare:0|
; |Pythag|::|Prelude.Interfaces.Prelude.Show.@Prelude.Interfaces.Ord$Prec:!>=:0|
; |Pythag|::|Prelude.Interfaces.Prelude.Show.@Prelude.Interfaces.Ord$Prec:!compare:0|
; |Pythag|::|Prelude.Show.Prelude.Show.@Prelude.Show.Show$(a, b):!show:0|
; |Pythag|::|Prelude.Show.Prelude.Show.@Prelude.Show.Show$List a:!show:0|
; |Pythag|::|_Prelude.Interfaces.Prelude.Show.@Prelude.Interfaces.Ord$Prec:!>:0_with_27|
; |Pythag|::|_Prelude.Strings.strM_with_32|
; |Pythag|::|_Prelude.Show.firstCharIs_with_45|
; |Pythag|::|_Prelude.Interfaces.Prelude.Interfaces.@Prelude.Interfaces.Ord$Int:!<:0_with_107|
;;;*** Warning in |Pythag|::|Prelude.Applicative.Alternative_ictor?"Applicative f"|: V3 is bound but not referenced
; |Pythag|::|Prelude.Applicative.Alternative_ictor?"Applicative f"|
; |Pythag|::|io_bind_IO__idr_107_34_case|
; |Pythag|::|Void___casefun__Void___case|
; |Pythag|::|Void_elim|
; |Pythag|:|runMain|
;; Processing Cross Reference Information

The following functions are undefined:
|Pythag|::FOREIGN-REF which is referenced by |Pythag|::|prim__peekSingle|, |Pythag|::|prim__peekPtr|, |Pythag|::|prim__peekDouble|, |Pythag|::|prim__peek8|, |Pythag|::|prim__peek64|, |Pythag|::|prim__peek32|, and |Pythag|::|prim__peek16|
|Pythag|::FOREIGN-SIZEOF which is referenced by |Pythag|::|prim__sizeofPtr|
|Pythag|::FOREIGN-SET! which is referenced by |Pythag|::|prim__pokeSingle|, |Pythag|::|prim__pokePtr|, |Pythag|::|prim__pokeDouble|, |Pythag|::|prim__poke8|, |Pythag|::|prim__poke64|, |Pythag|::|prim__poke32|, and |Pythag|::|prim__poke16|
; Loading fasl file /Users/mimimimi/projects/idris-lw/example/Pythag.64xfasl
#P"/Users/mimimimi/projects/idris-lw/example/Pythag.64xfasl"

CL-USER 2 > (|Pythag|:|runMain|)
[(3, (4, 5)), (6, (8, 10)), (5, (12, 13)), (9, (12, 15)), (8, (15, 17)), (12, (16, 20)), (15, (20, 25)), (7, (24, 25)), (10, (24, 26)), (20, (21, 29)), (18, (24, 30)), (16, (30, 34)), (21, (28, 35)), (12, (35, 37)), (15, (36, 39)), (24, (32, 40)), (9, (40, 41)), (27, (36, 45)), (30, (40, 50)), (14, (48, 50))]
#S(IDRIS.RTS:IDRIS-CON :TAG 0 :VALS NIL)

 , ,

mimimimi ()

Видео про gensym g2

Форум — Development

http://dev.gensym.com/wp-content/uploads/2015/11/Using-Inspect.mp4

Тема создана по той причине, что я работал с этой системой (дорабатывал), но NDA. Но никто не мешает дать ссылки на открытую инфу, там много интересного. Я её не продаю, если что :)

 , , , ,

den73 ()

Старый, добрый, тёплый Interlisp

Форум — Development

Не выдержал

Вот здесь, посмотрите что делается, как открывается редактор. Я в восторге. https://youtu.be/2qsmF8HHskg

Кто-нибудь когда-нибудь заглядывал сюда - https://interlisp.org/ , каково ваше мнение?

Здесь эти граждане в сборе https://youtu.be/x6-b_hazcyk

 

saufesma ()

Опубликован перевод книги «Lisp in Small Pieces»

Новости — Документация
Группа Документация

Это достаточно известная книга Кристиана Кеннека, рассматривающая семантику Лиспа и основы его реализации на примере диалекта Scheme. В процессе повествования разбирается множество аспектов семантики языка, начиная разнообразными вариантами окружений, проходя через продолжения и исключения, заканчивая рефлексией, сутью макросов, компилятором в Си и объектной системой.

Книга содержит 11 интерпретаторов, 2 компилятора, стопку упражнений в каждой главе, уйму интересного материала об истории Лиспа и причинах принятия тех или иных решений в дизайне языка, некоторое количество аллюзий на современные языки программирования, а также небольшой вагончик литературы впридачу.

Здесь нет откровений, невероятно эффективных оптимизаций, мощных систем типов и прочих атрибутов современной computer science (книге 20 лет всё же), но есть отличное твёрдое введение в реализацию языков программирования, призванное заинтересовать новичков, познакомить их с основными понятиями и приёмами этого дела, построив таким образом фундамент для дальнейшего развития.

( Исходники и прочие детали )

>>> Скачать PDF

 , , , ,

ilammy ()

Книги про компиляторы

Форум — Development

Посоветуйте хорошие книги про написание компиляторов. Особенно интересует реализация лисп-подобных языков, и соответствующих концепций (closures, continuations, garbage collection и тд). Сейчас я знаю одну хорошую книгу - книгу дракона. Что ещё можно добавить? Так же буду благодарен за ссылки на хорошие научные работы на эту тему, которые сможет понять не очень глупый студент. Английский - не проблема.

Legioner ()

[ЖЖ] *морфизм, Haskell & Lisp

Форум — Development

Вот все праздники разбирался с Template Haskell, квазицитированием, SYB и ghc7, не забывая такие важные вещи как распитие спиртных напитков и игру в FreeCiv :)

И вот какая идея мне пришла в голову... Катаморфизм ведь — штука всеобъемлющая, и если лисперы могут называть свои S-выражения алгебраическими типами данных, то почему же мы не можем называть алгебраические типы данных S-выражениями?

Ведь дело упирается не столько в техническую сторону, сколько в то как компиляторы относятся (или не относятся) к своим собственным структурам и позволяют или нет вмешиваться в них на этапах компиляции.

Единственное, «но» в подходе лисп-систем к компиляции, там компилятор «внутри», а не «с боку» как в более традиционных подходах. А так, работы ведутся, та же Java, та же Scala позволяет вмешиваться в работу компилятора. А в GHC есть Template Haskell, который идеологически близок к лисповским макросам, с той только разницей, что они стоят по разные стороны относительно катаморфизма: лисп как списки, хаскель как алгебраические типы с соответствующей типизацией.

В ООП языках все еще интереснее, там для реализации лисповского подхода нужно две вещи: а) классы должны быть объектами первого класса; б) должен быть способ узнавать конкретный тип объекта в рантайме. В Яве есть и первое (на худой конец в рамках JVM), и второе. В С++ есть RTTI, а вот с первым дела обстоят вроде бы не очень, хотя Александреску в своей книге показывал, вроде бы, как можно генерить иерархию классов с помощью шаблонов. Про Scala, вообще молчу, там алгебраические типы «из коробки» имеются.

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

Macil ()