Антонио Бандерас

Антонио БандерасЧек-лист разработчика языка программирования

Итак, Вы собираетесь создать новый [] функциональный, [] императивный, [] объектно-ориентированный, [] процедурный, [] стековый, [] мультипарадигменный, [] быстрый, [] статически-типизированный, [] динамически-типизированный, [] чистый, [] богатый, [] не-искусственный, [] наглядный, [] простой для новичков, [] простой даже для не-программистов, [] абсолютно непостижимый язык программирования.

 

Не получится. И вот почему.

 

Вы, скорее всего, верите, что:
[] Синтаксис — это то, что делает язык сложным
[] Сборка мусора бесплатна[] Компьютеры имеют бесконечную память
[] Никому на самом деле не нужны: 
   [] параллельность,
   [] интерактивность,
   [] поддержка отладчика,
   [] IDE,
   [] ввод\вывод,
   [] взаимодействие с кодом на других языках.

[] Весь мир общается в 7-битном ASCII
[] Масштабирование для больших проектов будет простым
[] Убедить программистов пользоваться новым языком будет просто
[] Убедить программистов пользоваться новой IDE будет просто
[] Все программисты любят шаблоны
[] Определив какое-то поведение как «неопределенное» Вам это не аукнется

 

К сожалению, в Вашем языке есть (нету):
[] нормальный синтаксис, [] точка_с_запятой_в_конце_строки, [] проблема табов\пробелов, [] макросы, [] неявное преобразование типов, [] явное преобразование типов, [] наследование, [] goto, [] исключения, [] замыкания, [] хвостовая рекурсия, [] подпрограммы, [] рефлексия, [] подтипы, [] множественное наследование, [] перегрузка операторов, [] алгебраические типы данных, [] рекурсивные типы данных, [] полиморфические типы данных, [] монады, [] зависимые типы данных, [] префиксные\постфиксные операторы, [] вложенные комментарии, [] переносы строк, [] регулярные выражения, [] вызовы по имени, [] вызовы по адресу.


И еще возникают такие вот философские препятствия:
[] Программистам не обязаны полностью понимать теорию относительности и квантовую механику чтобы написать на Вашем языке «Hello, World!»
[] У программистов не должен развиться туннельный синдром за время написания «Hello, World!» на Вашем языке[] Пока что самая выдающаяся программа на Вашем языке — это компилятор Вашего языка
[] Пока что на Вашем языке Вы не можете написать даже компилятор Вашего языка
[] А еще у Вас нет никаких спецификаций
[] Реализация — вот спецификация
   [] но реализация закрытая,
   [] защищена патентами,
   [] не принадлежит Вам
[] Ваша система типов дефектна
[] Некоторые конструкции Вашего языка, возможно, не могут быть трактованы однозначно
   [] и есть конкретные примеры таких конструкций
   [] и они валят Ваш компилятор
[] Название Вашего языка делает невозможным его поиск в Гугле
[] Ваш язык — интерпретируемый, а значит никогда не будет столь быстрым как С
[] Ваш язык — компилируемый, а значит никогда не будет гибким
[] Для компиляции Вашего языка требуется искусственный интеллект
[] Вы рассчитываете на оптимизации, которые, откровенно говоря, не способны реализовать
[] В мире меньше 100 программистов, достаточно умных, чтобы использовать Ваш язык
[] Задача ________________, которая у всех решается за полиномиальное время, на Вашем языке реализуется только за экспоненциальное
[] А задачу __________________ и вовсе реализовать нельзя


Кроме того, Ваша реализация имеет следующие недостатки:
[] CPU работает не так, как Вы думаете
[] RAM работает не так, как Вы думаете
[] VM работает не так, как Вы думаете
[] И компиляторы не работают так, как Вы думаете
[] Более того — они даже в принципе никогда не смогли бы так работать
[] Конфликты «сдвиг-свертка» по ходу парсинга решаются методом rand()
[] Вам зачем-то понадобилось присутствие компилятора в рантайме
[] Вам зачем-то понадобился рантайм в компиляторе
[] Ошибки, выдаваемые Вашим компилятором, загадочны и непостижимы
[] Компилятор падает даже от брошенного на него косого взгляда
[] Вы не понимаете базовые принципы оптимизации
[] Вы не понимаете базовые принципы системного программирования
[] Вы не понимаете указатели
[] Вы не понимаете функции


И еще есть и некоторые маркетинговые проблемы:
[] Вам нечего ответить на просьбу увеличить скорость работы
[] Вам нечего ответить на просьбу упростить язык
[] Вы в наглую сфальсифицировали бенчмарки
   [] в компилятор были вшиты вычисленные заранее значения расчетов, симуляций или тестов
   [] в тестах строковых операций Вы незаметно использовали Perl
   [] в мат. тестах Вы незаметно использовали BLAS
[] Хотя это не помогло и никто всерьёз не поверил, что Ваш язык быстрее, чем 
[] Ассемблер
[] С
[] Фортран
[] Java
[] Руби
[] Пролог
[] Вы бездоказательно отбросили классическую теорию разработки языков программирования[] Вы бездоказательно отбросили основы системного программирования
[] Вы бездоказательно отбросили теорию алгоритмов
[] Да Вы вообще все компьютерные науки отбросили

 

Смотря на всё это в общем, следует заметить, что:
[] Ваш «короткий» пример на 2 десятка строк можно реализовать одной строкой в языке __________
[] Уже существует небезопасный императивный язык
[] Уже существует безопасный императивный язык
[] Уже существует функциональный язык
[] Вы переизобрели Lisp, только хуже
[] Вы переизобрели Javascript, только хуже
[] Вы переизобрели Java, только хуже
[] Вы переизобрели C++, только хуже
[] Вы переизобрели PHP, только хуже
[] Вы переизобрели PHP лучше, вот только никому ничего не докажете
[] Вы переизобрели Brainfuck, вот только в отличии от его авторов — на полном серьёзе

 

Ну и вот что я о Вас думаю:
[] Вы молодец, у Вас есть кое-какие интересные идеи. Но это не взлетит.
[] Получился плохой язык и Вам должно быть стыдно за него.
[] Программирование на этом языке — самое адекватное наказание Вам за его изобретение.

 

Источник: colinm.org/language_checklist.html; перевод: habrahabr.ru/blogs/compilers/130362/

Комментарии