ЕЗЫГ МОЙ. «ПЕРДИСЛОВИЕ»

Всему, кажется, своё время. Рано или поздно кризис жанра приводит к очевидному пониманию – так жить нельзя. После чего немедленно хочется откинуть гряные сандали С++ в сторону цели, написать что-нибудь своё – большое, чистое, прекрасное.

Моё время пришло где-то два года назад. В моём случае проблема усугублялась background-ом. C YACC-ом я дружу очень давно и плотно, а теперь могу и ANTLR. Хуже того, проблема написания паресера с чистого листа для меня тоже не проблема – а скорее любовь юности.

Волевым решением удалось заставить себя немедленно ничего не написать. Мелкие куски тех или иных идей оформлялись, цируклировали, смущали. Здравый смысл победил, и я сел глядеть другие языки – в разумных (и не очень) дозах. Вот как это выглядело.

Тетрис на Python наглядно показал необходимость list comprehensions, но зародил сомнения в нужности реализации контейнеров на уровне языка. Строка listener-а с continues integration порадовала невероятно, хотя сегодня я бы делал «выдели в редакторе и проверь»; одно никак не исключает другое. Первый раз плотно захотелось поглядеть на функциональные языки.

Сладкая “парочка” из C#/CLI/C+ очень помогла на работе – весь последний проект написан на ней. Это такой очень живучий гибрид. Сегодня я бы постарался ограничиться в основном C#, тогда среда требовала С++ – банально, емейлами. Впрочем костность мышления в игровой индустрии частично обусловлена наёмом. После C# стало очевидно ясно, что garbage collection на уровне языка может экономить массу времени. При этом зародились сомнения на предмет «байткода» – кажется just-in-time не спасает. Возможность спуститься на уровень битиков нужна даже и в тулсах.

Ruby с его блоками очаровал меня с первого взгляда. Динамически типизированный язык (а в Ruby об этом думаешь больше чем в Python) это скорее плюс, чем минус. Жаль, что всё очень медленно. Не вижу как оно будет работать быстро, думаю не будет. Хорошо, что всё очень лаконично, надо драть идеи.

Добрый дядя Pal Engstad не оставил мои увлечения без внимания. «Глупо не учиться функциональному программированию в геймдеве работая в его Мекке». Scheme, OCaml, Haskell. Читаем lambda-the-ultimate, много но часто.

Scheme это очень простой язык, лечит лиспом от лиспа. Если решить что макросы ресолвятся в compile time, и весь тот-же код может в них работать, то оказывается он вполне себе хорошо компилируется. Forget eval. После Scheme мне стало очевидно, что язык может быть динамически типизированным во время компиляции, и стать статически типизированным в runtime. Вместе с тем пришло грустное понимание, что синтаксис должен быть C-style. Потому что 1.000.000.000 мух не может ошибаться.

OCaml общеал производительность C++ для функциональных языков. Вместо этого выдал производительность наивного C++, плотно использующего STL. Местами, впрочем, радовал – но исключительно местами. Побороть лишнюю неприязнь к конструкциям вида +. никак не получалось. OCaml послужил, скорее, мостом к Haskell – или даже подземным переходом.

Haskell – явление закономерное. Очень может быть, что его можно как-то подружить с производительностью реального мира. Очень может быть, что иногда не понимать как получается решение – это даже вообщем-то и не плохо. Type inference и pattern matching – удивительные по силе вещи. Лечить проблемы high-order функциями очевидно можно. Мозг сломать удалось. Реальный мир победил – слишком медленно!

Совсем недавно, в связи с уменьшением мощи и размера лаптопа, поглядел на Java. Отличные тулсеты, есть из чего выбрать. Внятная платформа. Сам язык очень удивил, ретроградством. Отсутствие «перегрузки операторов» это не страшно – страшна мотивация. Впрочем за неимениием гербовой, буду рисовать гуй для мелких поделок на ней – поглядим как получится. Новых концепций в этом языке я не увидел – наверное пора закругляться с «поглядеть что делают другие».

На сегодня ни строчки нового языка не написано. Есть идеи, драфты, мысли, и значительно более глубокое осознание необоходимости. За эти два года я стал значительно лучше программировать, вырос как архитектор. Осилить упражнение «попробовать написать свой язык» могу рекомендовать всем, кто дозрел перестать ползать – польза неоценимая. И на этом можно было-бы закруглиться, если-бы не одно но. Я всё ещё планирую написать свой язык!!!

Дальше будут брейн-дампы, и первый брейн-дамп будет про «платформу». Чем компилировать, во что, почему так. Но ещё до того я хочу заранее определиться, что это будет за язык – для кого, какие проблемы он будет решать, какая метафора, какая филоссофия.

Я всё ещё в глубоких сомнениях, что я его когда-нибудь напишу\допишу. Объёмы напрягают, сложность чуть смущает. Кроме пользы покамест ничего не случилось, посему будем поглядеть 

  • shodan

    Вот пока ты думаешь, некоторые яростно пишут.

    А потом PHP потихоньку завоевывает мир.

    :)

  • http://virtul.livejournal.com virtul

    Может стоит попробовать комбинации? F# например (ML + C#)

  • look4awhile

    .net тормозит. насмерть

    его нет на большей части консолей
    ситуация с ним на 360 мне не ясна
    вообщем опаньки

  • constantine.lisiy

    а язык D не смотрел?
    ( http://www.digitalmars.com/d/ )

  • VoidEx

    Нашел что-то про себя, жду дампов
    Посмотрю, насколько сходится/расходится с моим :)

  • look4awhile

    смотрел
    проблемы с рядом платформ
    не хватает фич
    проблемы с легаси-кодом
    припраэтарный
    там скорее С++ доработанный напильником, впрочем его-бы хватило наверное

  • http://assen.shtrak.com/ YE

    Кажется, тебе пора снова читатъ “За миллиард лет до конца света” :-)