Pull to refresh

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

Compilers *
Translation
Original author: Colin McMillen, Jason Reed, and Elly Jones.
Итак, Вы собираетесь создать новый [] функциональный, [] императивный, [] объектно-ориентированный, [] процедурный, [] стековый, [] мультипарадигменный, [] быстрый, [] статически-типизированный, [] динамически-типизированный, [] чистый, [] богатый, [] не-искусственный, [] наглядный, [] простой для новичков, [] простой даже для не-программистов, [] абсолютно непостижимый язык программирования.

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


Вы, скорее всего, верите, что:

[] Синтаксис — это то, что делает язык сложным
[] Сборка мусора бесплатна
[] Компьютеры имеют бесконечную память
[] Никому на самом деле не нужны:
  • [] параллельность,
  • [] интерактивность,
  • [] поддержка отладчика,
  • [] 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, вот только в отличии от его авторов — на полном серьёзе

Ну и вот что я о Вас думаю:

[] Вы молодец, у Вас есть кое-какие интересные идеи. Но это не взлетит.
[] Получился плохой язык и Вам должно быть стыдно за него.
[] Программирование на этом языке — самое адекватное наказание Вам за его изобретение.
Tags: чеклистразработка языков программирования
Hubs: Compilers
Total votes 220: ↑189 and ↓31 +158
Comments 77
Comments Comments 77

Popular right now