?

Log in

No account? Create an account
всячина для программистов - Поклонник деепричастий [entries|archive|friends|userinfo]
Anatoly Vorobey

[ website | Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Links
[Links:| English-language weblog ]

всячина для программистов [сент. 21, 2009|12:37 am]
Anatoly Vorobey
1. Исходники "Каиссы" (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, чтобы его проверять). Квиксорт получился вот такой:

\ 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 ;

Правда, подозреваю, что мои слова слишком сложны, и у опытного программиста на Форте получилось бы на несколько слов больше, зато куда проще и понятнее. Попробую позже рефакторнуть это дело.
СсылкаОтветить

Comments:
[User Picture]From: another_felix
2009-09-20 11:13 pm
К пункту #2 можно ещё добавить книгу [Federico Biancuzzi, Shane Warden. Masterminds of Programming: Conversations with the Creators of Major Programming Languages. O'Reilly, 2009]. Правда, довольно специфичная выборка и больше бла-бла.
(Ответить) (Thread)
[User Picture]From: cema
2009-09-21 12:34 am
Да, там бла-бла многовато. Но выборка неплохая, просто там многиь не хватает.

Edited at 2009-09-21 00:34 (UTC)
(Ответить) (Parent) (Thread)
[User Picture]From: cema
2009-09-21 12:46 am

Apollo

Был ещё код (ассмеблер, не машкоды) программы лунного проекта. Сейчас пороюсь... А, вот:
http://news.ycombinator.com/item?id=715395
http://googlecode.blogspot.com/2009/07/apollo-11-missions-40th-anniversary-one.html

Not so many funny comments ("Таня, не журись" no idea how it is in English) but there is this one Numero Mysterioso.
(Ответить) (Thread)
[User Picture]From: ygam
2009-09-21 02:56 am
Пример в конце мне напомнил "Смотри в корень" Маковецкого: в холодные дни журавли улетают на юг, так как северный ветер делает дни холодными, и облегчает журавлям полет на юг.
(Ответить) (Thread)
[User Picture]From: igorlord
2009-09-21 04:32 am
http://avva.livejournal.com/2136549.html?thread=64909285#t64909285
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).
(Ответить) (Parent) (Thread)
[User Picture]From: ygam
2009-09-21 05:03 am
По-моему, ты ответил не на тот комментарий.
(Ответить) (Parent) (Thread)
[User Picture]From: igorlord
2009-09-21 05:31 am
Возможно.

I just bet that avva could write a working plain vanilla QuickSort a lot faster in pretty much any new-to-him high-level language. (I am assuming that his code actually works; I hand-checked only a half of it -- a non-trivial feat, even with his use of stack diagram comments).
(Ответить) (Parent) (Thread)
[User Picture]From: avva
2009-09-21 07:06 am
Oh, it works :)
(Ответить) (Parent) (Thread)
[User Picture]From: avva
2009-09-21 07:11 am
I've seen a few programmers who were really prodigiously productive in Forth on high-level applications. It does happen rarely, but then Forth is not a very common language anyway. I think that for them, the low-level finicky details of stack and address manipulations are offset by the extremely structural and solid code.
(Ответить) (Parent) (Thread)
[User Picture]From: dimorlus
2009-09-21 04:54 am
По моему опыту, форт удачно сочетает в себе недостатки ЯВУ и ассемблера, а достоинств-то и нет.
(Ответить) (Thread)
[User Picture]From: cryinstone
2009-09-21 04:59 am
3. The different attitudes of computer scientists and economists. Стоит прочитать как минимум ради интересного примера ...
Ба! Да это же Ноам Нисан - мой когда-то-очень-давно препод алгоритмов в HUJI!
(Ответить) (Thread)
[User Picture]From: avva
2009-09-21 05:11 am
Отличный мужик вообще. Он проводит у нас часть времени как research scientist в тель-авивском гугле (вдобавок к HUJI).
(Ответить) (Parent) (Thread)
[User Picture]From: igorlord
2009-09-21 05:41 am
">r swap r>" == "rot swap"

I love stack gymnastics. :)
(Ответить) (Thread)
[User Picture]From: igorlord
2009-09-21 05:44 am
Also, more fun:

"rot rot swap" == "swap rot"
(Ответить) (Parent) (Thread)
[User Picture]From: avva
2009-09-21 07:12 am
Heh :) thanks!
(Ответить) (Parent) (Thread)