Andy Melnikov (nponeccop) wrote,
Andy Melnikov
nponeccop

Исторические предпосылки HN

Изучение языков программирования началось у меня по классической "институтской" схеме: Pascal -> Object Pascal -> C -> C++ . Затем продолжилось на коммерческой основе: C++ -> Perl -> Javascript -> PHP -> Haskell

С, PHP и Haskell оказались побочными ветками - на С я ничего существенного не писал из-за ОО-шумихи в начале 2000-х и распространенности к тому времени компиляторов С++. На PHP я в качестве менеджера и ведущего разработчика написал два больших проекта - веб-почтовик и веб-хостинг, после чего ушел из контор в самостоятельное плавание.

На Perl я писал один сайт-"базку" (брачное агентство) и сайт интернет-провайдера (вместе с биллингом, распределенным "бэкендом", управляюшим системными службами, что пригодилось впоследствии в обоих больших PHP-проектах). C Perl столкнулся насильно - надо было поддерживать уже готовый сайт знакомств на перле. После чего так же насильно насадил его в провайдере. После чего ушел из провайдера сначала в одну, а потом в другую PHP-конторы.

Javascript я начинал изучать с ASP3, сделав на нем сайт-базку, а затем продолжил, делая GUI на основе MS Html Applications и прикручивая его к C++ через COM.

На С++ я начал с ICQ-спамера, продолжив SMTP-спамером, клоном Remote Desktop, и распределенным (MPI/MPICH2) приложением на MSVC2005/Windows x64, которое пишу последние 4 года. Приложение занимается импортом анкет пользователей из спамерских баз. На входе - произвольные CSV-файлы до сотен гигабайт (разные разделители, форматы полей и порядок полей), на выходе - CSV-файл с распознанными анкетами в фиксированном формате, профильтрованные с использованием примерно 70 белых и черных списков. Где-то 15 KLOC на С++. Приложению постоянно не хватает памяти и скорости, что лечится оптимизацией. Архитектурно код разваливается - надо было 100 раз уже переписать, удается продолжать разработку только благодаря 800 регрессионным юнит-тестам.

Со временем я лучше узнал Perl, Javascript и Haskell) я понял, что  для реализации одной и той же функциональности на С++ требуется значительно больше кода, чем на других языках. Также, из-за ограничений языка я вынужден копипастить участки кода, которые на других языках можно вынести в библиотеку. По этой же причине я забросил Си и PHP и больше к ним не возвращаюсь, а также обхожу стороной C# и Java.

Иначе говоря, я почуствовал, что настало время забросить C++ и перейти на что-то более удобное. Но на что? Подходящего языка я не нашел, и решил сделать HN - собственный Domain-Specific Language, компилятор которого можно было бы завершить в течение месяца.
Tags: compiler design, hn0
Subscribe

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 13 comments