February 10th, 2012

flow

Про языки

"Зима не будет", а развитые языки программирования, моделирования и прочего описания знаний никому нахрен не нужны. trollface.jpg

Недавно посмотрел исходники Minicraft. Это проект, который Нотч (автор большого и известного Minecraft) налабал за двое суток конкурса Ludum Dare, включая код и арт. За два дня получилась нормальная игруха, такого уровня, что в середине восьмидесятых продавалась бы за приличный прайс.

Ссылки на игру и код: http://www.ludumdare.com/compo/ludum-dare-22/?action=preview&uid=398
Фрагмент записи из 48-часовой трансляции процесса создания: http://www.youtube.com/watch?v=MhQ70O1MiXc

Код красивый, грамотный. На Java. Что там можно улучшить? Перенести копипасту в базовые классы из пары мест, да и то, если хочется наращивать проект.

А если бы Нотч писал сразу на Scala? Или на Haskell, Python, Ruby, whatever...? Стал бы код заметно лучше? Нет. В данном случае другие языки могут линейно убирать синтаксический шум (public static final...), но не упрощать структуру.

Но ведь есть случаи, когда упрощают. И в моей практике были/есть. И в http://ivan-gandhi.livejournal.com/1867305.html хорошо описываются. В чём разница?

В глубине и разнообразии данных. В Minicraft они достаточно однородные, нет сложноразнотиповых деревьев и графов. В более крупных игровых проектах рендеринг и физика требуют хорошей оптимизации, а не какой-то там выразительности языка. А вот игровая логика (и особенно AI) с какого-то момента начинают выигрывать от более мощных языковых решений.

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

Разработка современных GUI - опять же, требуются мощные языки. Хотя и на них с трудом избавляются от старых традиций многокодаписания.

Здесь ведь какой косяк. Про ветвления и циклы ещё Дийкстра писал, с ними все работать умеют, а с более сложными контекстами никак. Даже функциональщики временами такой бред на готовых монадах составляют, что лучше бы по старинке циклами. Нет культуры идентификации более сложных контекстов, чем ветвления, циклы и (частично) исключения. А без этого вы не получите преимущества. И есть разница между Нотчем, который применяет достаточную технологию, и архитекторами какого-нибудь Eclipse, которые применяют недостаточные мозги.

Бонус: видео-иллюстрация неконтролируемого применения монад.

Welcome to Kitty City