всячина для программистов
Sep. 21st, 2009 12:37 am1. Исходники "Каиссы" (PDF), первого чемпиона мира по компьютерным шахматам. Также работают над эмулятором той машины, на которой она бежала. via (там обсуждение в комментариях).
Комментарии к коду попадаются замечательные, да.
2. Coders at Work, судя по тем отрывкам, что я видел, замечательная книга, и собираюсь ее вскорости прочитать. (В последние годы было несколько попыток написать подобные книги; одна из них, Beautiful Code, тоже казалась поначалу очень удачной, но когда мне в руки попала сама книга, как-то совершенно "не пошла").
3. The different attitudes of computer scientists and economists. Стоит прочитать как минимум ради интересного примера с American Express в конце записи.
4. Tiny Code.
5. Speaking of tiny code - я посидел немного над Фортом на выходных, вспоминал язык и писал несколько тривиальных штук. Написал, например, квиксорт (а заодно и Mersenne twister, чтобы его проверять). Квиксорт получился вот такой:
Правда, подозреваю, что мои слова слишком сложны, и у опытного программиста на Форте получилось бы на несколько слов больше, зато куда проще и понятнее. Попробую позже рефакторнуть это дело.
Комментарии к коду попадаются замечательные, да.
2. Coders at Work, судя по тем отрывкам, что я видел, замечательная книга, и собираюсь ее вскорости прочитать. (В последние годы было несколько попыток написать подобные книги; одна из них, Beautiful Code, тоже казалась поначалу очень удачной, но когда мне в руки попала сама книга, как-то совершенно "не пошла").
3. The different attitudes of computer scientists and economists. Стоит прочитать как минимум ради интересного примера с American Express в конце записи.
4. Tiny Code.
5. Speaking of tiny code - я посидел немного над Фортом на выходных, вспоминал язык и писал несколько тривиальных штук. Написал, например, квиксорт (а заодно и Mersenne twister, чтобы его проверять). Квиксорт получился вот такой:
\ simple quicksort : exchange ( i j -- ) 2dup = if 2drop exit then 2dup @ swap @ ( i j val-j val-i ) rot ! swap ! ; : simple-part ( start end pivot -- mid ) \ assumes pivot is stored at end >r swap r> 2 pick 2 pick ?do ( end stored pivot ) dup i @ >= if \ exchange elements at stored and i, increment stored swap dup i exchange cell + swap ( end stored pivot ) then cell +loop drop tuck exchange ; \ exchanged stored and last : simple-q2 recursive ( start end -- ) 2dup = if 2drop exit then 2dup 2dup swap - cell / 2/ cells 2 pick + \ choose pivot from middle 2dup exchange drop dup @ simple-part \ put pivot at right, partition 2dup = if dup cell - rot rot swap ( s m-1 m e ) else dup cell + rot ( s m m+1 e ) then simple-q2 simple-q2 ; : simple-qsort ( addr u ) 1- cells over + simple-q2 ;
Правда, подозреваю, что мои слова слишком сложны, и у опытного программиста на Форте получилось бы на несколько слов больше, зато куда проще и понятнее. Попробую позже рефакторнуть это дело.
no subject
Date: 2009-09-21 04:32 am (UTC)http://avva.livejournal.com/2136549.html?thread=64889317#t64889317
In a sentence, Forth is great for getting some very limited embedded device to work, but it is terrible for programmer productivity for devices with mature alternatives (good compilers and libraries).
no subject
Date: 2009-09-21 05:03 am (UTC)no subject
Date: 2009-09-21 05:31 am (UTC)I just bet that
no subject
Date: 2009-09-21 07:06 am (UTC)no subject
Date: 2009-09-21 07:11 am (UTC)