Thursday, December 28, 2006

Иерархия тру программистов

И как это я проглядел этот замечательный пост в августе... :)


Отдельного внимания заслуживает война в комментах, на тему какую стрелку куда нарисовать надо было.

Это, конечно, все шуточки, реальная картина вот тут:


Wednesday, December 20, 2006

Replay Debugger

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

ocaml debugger


Причем оно реально работает. Даже в случае когда, например, читаем из файла массив — после stepback/step forward функция чтения прочитывает то же самое значение.

За это я даже готов простить окемлу использование big-endian в самых неожиданных местах и то что там == используется для сравнения physical equality (сравнение указателей, проще говоря, если x == 0.0 и y == 0.0 то (x == y) вернет false).

Путем недолгих поисков в гугле обнаружилось что это также называется красивым словосочетанием omniscient debugging, статья о том как это работает, а также replay debugger для java, позволяющий даже многопоточные приложения отлаживать в обе стороны.

Вещь просто суперудобная, хотя, понятно, в некоторых случаях она работать не будет. Если ваша программа, скажем, запускает баллистическую ракету, то stepback после выполнения функции launch() реализовать трудновато. Тем не менее всякие алгоритмы с минимумом side-эффектов отлаживать таким образом одно удовольствие :)

Ссылки: UPD: А вот некоторый давно не обновляющийся проект, претендующий на звание реплей дебаггера для C++: Lizard


Tuesday, December 12, 2006

Функциональные языки разрушают мозг

Why learning Haskell/Python makes you a worse programmer
Отлично написано, читаю и просто таки узнаю себя в каждой строчке (ну разве что C++ вместо C#) -- с некоторых пор пишу на C++ и натурально плачу, плачу и пишу..


Thursday, December 07, 2006

Haskell In Action

Написание на хаскеле не миниатюрных экспериментальных примеров, а чего-нить более-менее серьезного и в конкретные сроки оказалось не таким уж простым процессом. Кто бы мог подумать :)

Открытия:

  • typechecker не спасает от семантических ошибок :) Черт, я в глубине души надеялся что если прога компилится, значит она работает правильно..
  • возникновение косяков с размерностью типов в битовых операциях. Мне на интуитивном таком уровне казалось, что это проблема возникает в С из-за автоматических преобразований типов -- ан нет :)
  • mutable массивы в хаскеле, языке без side effects и со строгой типизацией -- это такой космический хайтек.. :)
  • "ленивость" вычислений все еще неиссякаемый источник сюрпризов для меня и в плане производительности, и в плане сообщений которые выводятся с помощью Debug.trace :)
  • unit тесты это просто таки жизненная необходимость в хаскеле, и писать их намного легче и приятнее чем в C++.

to be continued, как говорится..