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) вообще не смог дождаться окончания работы программы.