Немного предыстории: автор гораздо больше аналитик, дизайнер и системный инженер, чем программист. Однако, несколько Интернет-магазинов когда-то "от корки до корки" сделал. А теперь замутил небольшой хобби-проект на Atmega. Ничего особенного, цветомузыка очередная. И вот, разбираясь с этой штукой, а также общаясь с коллегами, которые реально серьезные программеры, набрел на такую вот мысль...

В самом деле, периодически на форумах попадаются активные рассуждения о том, что компилятор C позволяет себе вытворять с типами данных. И как его вразумить, чтобы не пытался long как int трактовать, например. А еще многие, даже не новички, испытывают сложности с пониманием концепции указателей на ячейки памяти (хотя, вроде, все на поверхности...). Работа с прерываниями где-то за гранью. В общем, выглядит все так, будто проще уж на PHP этот контроллер программировать. А ведь это, на самом-то деле, не так уж и плохо было бы!

Конечно, прямо вот PHP как есть использовать не получится. Но некоторые из его концептуальных оснований очень даже подходят:

  • Возможность писать прямой процедурный код — то, что нужно для большинства простых проектов. Собственно, Arduino "взлетел" благодаря тому, что избавил любителей что-то мастерить от необходимости настраивать окружение, прыгать с загрузчиком и писать всю обвязку кода. Если надо, использовать функции никто не запрещает;

  • Вызов модулей на исполнение по запросу (в web - при переходе по URL) — это же работа с прерываниями в предельно прозрачной форме. Нужно только сделать удобный механизм конфигурирования;

  • Вызов переменной по имени, сохраненной в другой переменной — те же указатели, только в профиль. Хотя, конечно, возможность адресовать прямо нужную ячейку тоже нужна;

  • Переменные среды для связи с окружением — наглядный способ обратиться к периферии (если хочется — никто не запрещает адресовать регистр, см. выше);

  • Простое и наглядно подключение модулей — можно просто и наглядно линковать файл из кусков, а сами куски многократно переиспользовать. Без размышлений про библиотеки и зависимости (почти без :));

  • Прямолинейная работа с текстом — не совсем про встраиваемые системы, конечно, но текстовые дисплеи, клавиатурный ввод и все такое встречается часто;

  • Простой синтаксис, без закидонов.

Разумеется, что-то придется сильно перепридумывать:

  • Объявлять переменные в любой момент — это удобно, но прямой путь к переполнению памяти. Нужно вводить какие-то ограничения;

  • Интерпретируемый язык не подойдет для маленьких контроллеров, придется его компилировать. И при этом разбираться с размерностями переменных. Однако, для более мощных многоядерных платформ можно и интерпретатор оставить;

  • И еще наберется всякого, разумеется.

Как-то так :) Чем не идея для сурового российского open source? :)