Saturday, December 17, 2011

POSIX close(2) is broken

Если на солнце есть пятна, то на POSIX-е точно должны быть трещины.

Monday, May 2, 2011

Purely Functional Random-Access Lists implemented in Scheme (Racket)

David Van Horn написал на Scheme (точнее, на Racket) чистый функциональный список с произвольным достпупом (исходники здесь).

Под капотом реализация из Okasaki (FPCA '95): список в виде дерева со всеми вытекющими.

Например:

$ (time (length (make-list (expt 2 100000) 'x))) cpu time: 5659 real time: 5678 gc time: 1823 ... $ (define ls* (time (list-set ls 8989891824312123128989813 'q))) cpu time: 1850 real time: 1864 gc time: 291


А если еще вспомнить Guy Steele (... foldl and foldr considered slightly harmful, pdf), то подобная реализация хорошо подходит для алгоритмов распараллеливания.

Tuesday, April 26, 2011

Easy Introduction to The Lambda Calculus

Попалась на глаза забавная и поучительная запись [Easy Introduction to] The Lambda Calculus. Может быть даже не easy, а funny introduction.

Там при помощи Scheme "на пальцах" показано, почему lambda, собственно говоря, the ultimate.

К примеру
(define (true a b) a) 
(define (false a b) b) 
(define (if c a b) (c a b))
...
(define (cons a b) (λ (c) (if c a b))) 
(define (car c) (c true)) 
(define (cdr c) (c false))

Thursday, March 17, 2011

Who reads the Hacker News?

Ежедневно на Hacker News появляется больше сотни новостей.  Кто в состоянии все это читать?  Откуда у людей столько сил и времени?

Wednesday, March 16, 2011

D!

Пока разбирался с бозоном Хиггса, насмотрелся на исходники Clisp-а и выяснил, что существенная часть его запчастей написана на D!  Если честно, я изумлен.

Бозон Хиггса снова ускользнул

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

Бозон Хиггса, который залетел в предыдущий пост -- тоже использование неициализированных данных. Sbcl инициализирует массив при его создании (make-array ...) нулями, а Clisp -- не очень. Не очень -- потому что на небольших размерах массив после создания заполнен нулями, а на больших размерах нули не везде. Если верить стандарту, то (make-array ...) ничего занулять и не должен, если не задан :initial-element. Хорошо это или плохо? Видимо, да.

Tuesday, March 15, 2011

Бозон Хиггса в отдельно взятой программе

На задаче 136 проекта Эйлер я поймал бозон Хиггса: каждый запуск программы для ее решения дает новый ответ, достаточно близкий к правильному результату. Только при использовании Clisp, в то время как Sbcl и аналогичный варинат на Scheme (Guile) работают правильно. И только при достаточно больших значених аргументов, тестовые прогоны для небольших значений всегда стабильны.

P.S. А на Lispworks (personal edition) вообще не смог дождаться окончания работы программы.

Sunday, March 6, 2011

Cthun

В одной из тем comp.lang.lisp на Google Groups завелся настоящий бот по имени Cthun, который постит там мелкие оскорбления. Постит не слишком к месту, но для неискушенного взгляда вполне себе складно: когда кто-то упоминает его имя, он пишет коммент типа "а какое это отношение имеет к лиспу?". Народ не спеша изучает его анатомию и даже пишет весьма недурные эссе на тему "это я сделал бота Cthun".

Интересно, сюда Cthun тоже придет прокомментировать, отозвавшись на свое имя?

Wednesday, March 2, 2011

В моих руках Scheme бьет Common Lisp :-)

Начинаю матереть в Scheme: проблему 128 Project Euler на Scheme (Guile) решаю за 40 секунд, а на Common Lisp (SBCL) за 60.

Wednesday, February 23, 2011

Еще про числа и немного про буквы

Еще про числа и немного про буквы.

Если взять функцию
tcp_output()
из ядра FreeBSD и распечатать на бумаге формата A4 8-м размером шрифта, то получится 16 страниц довольно убористого текста.  Это про цифры.

Про буквы. Если поискать гуглем какой-нибудь кусок из комментариев в вышеупомянутой фришной функции, то первый и единственный результат поиска, содержащий точное вхождение фразы отправляет (ха!) на сайт research.microsoft.com, где эта функция мирно хранится. Research! И первое, что делают эти исследователи с бездыханным телом функции, -- пишут емкую фазу Microsoft Invisible Computing и ставят свой копирайт. Невидимые исследователи копирайта!

Tuesday, February 22, 2011

Интересно смотреть на числа

Интересно смотреть на числа.

За два года упражнений Project Euler я написал ровно 19000 строк кода на Scheme и Common Lisp:

[...]$ cat *.scm *.lisp | wc -l
19000

В основном на Scheme, на Common Lisp пару тысяч всего. Если убрать комментари и пустые строки, то будет примерно 8500 строк.

Scheme в использовании: Guile (в основном), Petite Chez Scheme, Chicken.
Common Lisp: SBCL, CLisp.

Доволен.