Язык программирования Оно
Оно́ — базовый язык Единой среды, а также средство описания самой ОС. Язык высокоуровневый, функциональный, чисто объектно-ориентированный, со средствами императивного программирования. Синтаксис языка — однопроходный, леворекурсивный. Примитивы языка соответствуют примитивам ядра ОС и хранятся в виде обратимого байт-кода. Из байт-кода ядром строятся планы выполнения, исполняемые платформой. Любые другие промежуточные представления в виде псевдоассемблера отсутствуют. ¶
Предпосылки создания языка ¶
Остерегайтесь трясин Тьюринга, в которых можно сделать всё, но ничего интересного нельзя сделать просто.
Алан Перлис — «Эпиграммы о программировании». ¶
Необходимость в собственном языке программирования продиктована следующими требованиями: ¶
- Соответствие концепциям, прикладным технологиям и архитектуре Единой среды.
- Возможность описания и разработки самой Единой среды средствами языка.
- Логическая полнота, бесскобочный синтаксис, простота, читабельность — упор на ключевые слова, а не спецсимволы; возможность использования как первого языка при обучении программированию.
Ключевые требования Единой среды к языку: ¶
- Статическая, строгая типизация.
- Множественное наследование реализации, взаимно-абстрактные классы, декомпозиция на основе нормализации классов.
- Обязательные свойства, отсутствие конструкторов.
- Единство командного языка оболочки и языка программирования как такового.
- WYTIWYG — понятность и привычность синтаксиса большинству программистов, возможность начать программировать сразу же, глядя на примеры, обращаясь к документации лишь в сложных случаях.
Концепция обратимого байт-кода даёт теоретическую возможность создания национальных синтаксисов Оно, что учитывалось при проектировании языка. Текущая (базовая) версия основана на английских ключевых словах — такова сегодняшняя традиция, то есть требование WYTIWYG. ¶
Hello, world! ¶
Описание языков программирования принято начинать с программы «Hello, world!», выводящей означенное приветствие на экран. На языке Оно это будет так: ¶
ono 'Hello, world!';
Банально, не правда ли? Программисты сразу заметят, что строка заключена в апострофы, как делается во многих других языках. Смысл команды становится понятен, если записать её в полной форме: ¶
ono select
'Hello, world!'
end;
В Оно ключевое слово select необязательно и может быть опущено при написании команды. ¶
Будучи выполненной из-под оболочки системы, команда вернёт строку
ono'Hello, world!', в ответ на что оболочка найдёт класс, отвечающий за отображение строк, и с его помощью выведет строку на экран. Ближайший аналог — поведение phpMyAdmin. ¶
Командный и декларативный синтаксис ¶
Язык Оно имеет два синтаксиса — командный и декларативный: ¶
- Командный синтаксис используется в оболочке системы. С его помощью можно давать как одиночные команды, так и программировать. Командный синтаксис ориентирован на пользователя — один и тот же оператор в нём может вызывать разные действия (соответствовать разным примитивам байт-кода). Например, оператор select может описывать функцию, переменную или инвариант цикла в зависимости от предложений, в нём использованных. Прототипом командного синтаксиса является SQL.
- Декларативный синтаксис предназначен для описания классов и свойств, их поведения. Декларативный синтаксис ориентирован на программиста — каждый оператор соответствует одному примитиву байт-кода. Прототипом декларативного синтаксиса послужили популярные языки Си-семейства, а также Object Pascal и PL/SQL.
Не все операторы имеют полные эквиваленты в обоих вариантах, но оба синтаксиса можно произвольно комбинировать. На уровне ядра различий нет — эквивалентным операторам соответствуют одни и те же примитивы. При отображении байт-кода в виде исходного текста можно выбрать предпочитаемый синтаксис. Девиз языка: ¶
Функциональное программирование в привычном синтаксисе. ¶
WYTIWYG ¶
Для использования WYTIWYG на практике недостаточно заимствовать популярные ключевые слова или разметку. Нужны правила, как использовать знакомые средства в новой среде. Правил нужно немного, и они должны быть простыми и легко запоминаемыми. Например, в WackoWiki таковым стало правило двух символов. ¶
Перед Оно поставлено больше задач, чем перед WackoWiki, поэтому и правил WYTIWYG чуть больше: ¶
- Оно — язык функционально-объектный. Именно так — функциональное программирование на первом месте. Если некоторая конструкция может трактоваться как в функциональном, так и в императивном смысле, действует функциональный.
- Первый закон человечной ОС гласит: «ОС не может причинить вред данным пользователя или своим бездействием допустить, чтобы данным был причинен вред». Исходя из этого, любые действия, изменяющие состояние объекта, либо имеющие внешние зависимости, — задаются явно, при помощи ключевых слов. И наоборот, действия по умолчанию, ключевые слова для которых не пишутся или могут быть опущены, — не имеют внешних зависимостей и не изменяют состояние объекта.
- Синтаксис Оно напоминает смесь Си-подобного языка и SQL. Если ключевое слово может трактоваться двояко, приоритет имеет синтаксис SQL. Исключения:
- ¶ || обозначает логическую операцию «или», а не конкатенацию строк.
- ¶ **--** обозначает унарную операцию декремента, а не комментарий, как в некоторых диалектах SQL.
- Из одинаковых побитовых и логических операций, логические операции обозначаются двумя символами: &&, || и == («и», «или», определение/присваивание и логическое равенство). Это — правило двух символов в Оно, будет полезно Паскаль-программистам.
Некоторые следствия правил: ¶
- Операторы and и or всегда логические (синтаксис SQL) — нет необходимости использовать скобки, как в Паскале.
- «Оператор» as — всего лишь необязательное ключевое слово при описании замыканий (локальных функций) в командном синтаксисе. Операции приведения типа в Оно нет.
- При описании входных параметров параметров ключевое слово in подразумевается, но не пишется. Оператор in всегда обозначает условие «принадлежность множеству или контейнеру».
- Ключевое слово
private отсутствует. - Поскольку в Оно строгая типизация, для конкатенации строк не требуется особый оператор, её обозначают знаком +.
Если из SQL выпилить конкатенацию строк, он станет функциональным языком.
Философия программирования в Единой среде ¶
- Всё что не запрещено — разрешено. Если что-либо невозможно, то это либо ещё не реализовано, либо противоречит декомпозиции и потому рутинно.
- Решая задачу, будь честен перед самим собой — решай её полностью. Твои компромиссы — источник рутины для других.
- Всё гениальное — просто. Не бойся моделировать и комбинировать, ищи. В тиражируемой среде выживают только простые решения.
- Простота для человека стократ важней простоты для машины: «ОС не должна тратить впустую ваше время или вынуждать вас выполнять действия сверх необходимых».
- В парадигме контейнеров есть только два понятия: один и много. Конкретное число элементов — исключение из правил.
- Помни про параметры. Единственный флаг в параметрах может скрывать многие килобайты кода — сжатие или шифрование, например.
- Задумывайся уже на 3-м if/elsif/when над одними данными — не нужна ли тут декомпозиция?
Происхождение названия ¶
При разработке как всей Единой среды, так и непосредственно Оно, сделан большой упор на переосмысление базовых концепций и даже их переопределение в тех случаях, где новый взгляд расширяет и дополняет понятие, придавая ему современное толкование. Подход использовался Никлаусом Виртом при разработке языка и ОС Оберон. ¶
Название Оно возникло спонтанно и происходит от фразы: ¶
О — не Оберон (O is not Oberon) ¶
Языки Оберон и Оно стремятся к минимализму и простоте, но делают это по-разному. Оно выражает бо́льшую часть понятий императивного программирования через функциональное и объектно-ориентированное, ограничиваясь минимумом базовых понятий: контейнер, функция, класс, параметр, управляющий оператор, исключение. Остальные понятия, традиционные для императивных языков, — такие как константа, переменная или пространство имён, выводятся из базовых путём комбинации. Перефразируя известную формулу Вирта, можно сказать: ¶
Функции + контейнеры = операционная система ¶
Синтаксис Оно богат синонимами ключевых слов. Предполагается, что программисту, знакомому с любым Паскаль- или Си-подобным языком, или SQL, достаточно один раз прочесть описание Оно, чтобы начать на нём программировать. ¶
См. также ¶
¶
Обсуждения ¶