Введение

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

Важнейшим инструментом в руках программиста, способном существенно влиять на свойства приложений как в лучшую, так и худшую сторону, является язык программирования. И сейчас, в 21 веке по-прежнему широко используются языки, созданные десятилетия назад без современного уровня понимания и опыта для куда более скромных задач чем те, что ставятся сейчас. Это способствует появлению специфических ошибок в ПО, которых могло бы не быть при использовании более продуманных средств. Несмотря на многолетнее развитие старых языков, требование обратной совместимости обязало сохранить многочисленные недочёты и было закреплено в стандартах.

Особенно наивно выглядят попытки использования этих языков для приложений, связанных с противодействием злому умыслу. Безупречные с математической точки зрения механизмы защиты нередко оказываются бесполезны, так как будучи реализованы в незащищённой среде, могут быть обойдены через "чёрные ходы" ошибок.

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

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

Задача этой работы заключается в составлении требований c последующим воплощением нового языка программирования среднего уровня, являющегося, с одной стороны, нацеленным на создании корректных в широком смысле, защищённых и устойчивых систем, а с другой - по прежнему универсальным, применимым к широкому кругу задач. Я попытаюсь учесть опыт разных поколений составителей языков, приняв во внимание разработки как промышленных компаний, так и академических кругов.