Paradigm | объектно-ориентированный на основе прототипа |
---|---|
Разработано | Стив Декорте |
Разработчик | Стив Декорте, Джонатан Райт, Джереми Трегунна |
Впервые появился | 2002; 18 лет назад (2002 г.) |
Стабильный выпуск | 20170906/11 августа 2017 г.; 3 года назад (11.08.2017) |
Дисциплина набора текста | динамический, сильный |
Веб-сайт | iolanguage.com |
Основные реализации | |
Io Io.NET | |
Под влиянием | |
Smalltalk, NewtonScript, Self, Lua, Lisp, Python, Act1 | |
Influenced | |
Ioke, Potion |
Io- это чистый объектно-ориентированный язык программирования , вдохновленный Smalltalk, Self, Lua, Lisp, Act1 и NewtonScript. У Io есть объектная модель на основе прототипов, аналогичная тем, что есть в Self и NewtonScript, что устраняет различие между instance и class. Как и в Smalltalk, все является объектом и использует динамическую типизацию. Как и Лисп, программы - это просто деревья данных. Ио использует субъекты для параллелизма.
Примечательные особенности Io - это его минимальный размер и открытость для использования внешних ресурсов кода. Io выполняется небольшой портативной виртуальной машиной.
Язык был создан Стивом Декортом в 2002 году после попытки помочь другу, Дрю Нельсон, с его языком, Cel. Он обнаружил, что на самом деле мало что знает о том, как работают языки, и решил написать крошечный язык, чтобы лучше понимать проблемы.
Цель Ио - исследовать концептуальную унификацию и динамические языки, поэтому предпочтение отдается простоте и гибкости, а не производительности.
В своей простейшей форме он состоит из одного идентификатора:
doStuff
Предполагая, что приведенный выше doStuff является методом, он вызывается без аргументов, поэтому явные скобки не требуются.
Если бы doStuff имел аргументы, это выглядело бы так:
doStuff (42)
Io - это сообщение, передающее язык, и поскольку все в Io является сообщением (исключая комментарии ), каждое сообщение отправляется получателю. Приведенный выше пример хорошо это демонстрирует, но не полностью. Чтобы лучше описать этот момент, давайте рассмотрим следующий пример:
Версия системы
В приведенном выше примере демонстрируется передача сообщений в Io; сообщение «версия» отправляется объекту «Система».
Операторы - это особый случай, когда синтаксис не такой шаблонный, как в приведенных выше примерах. Синтаксический анализатор Io перехватывает набор операторов, определенных интерпретатором, и переводит их в вызовы методов. Например, следующее:
1 + 5 * 8 + 1
переводится в:
1 + (5 * (8)) + (1)
Как видите, существует также здесь происходит немного приоритета операторов , а уровни приоритета такие же, как и для уровней приоритета C.
Операторы также были преобразованы в вызовы методов. Фактически, все операторы в Io являются методами; тот факт, что они не требуют явных скобок, является удобством.
В Io есть два способа создания анонимных функций : методы и блоки. Между ними они почти идентичны, за исключением scope. В то время как блоки имеют лексическую область видимости, методы имеют динамическую область видимости.
И метод, и блок являются функциями высшего порядка.
Вездесущий Hello мировая программа :
«Привет, мир!» println
Новые объекты создаются путем клонирования объектов. В частности, в Io создается новый пустой объект, и только различия между ним и его родителем сохраняются в новом объекте; это поведение известно как дифференциальное наследование. Показан пример такого поведения:
A: = Object clone // создает новый пустой объект с именем «A»
Простая нерекурсивная факториальная функция в Io:
factorial: = method ( n, if (n == 0, return 1) res: = 1 Диапазон от 1 до (n) foreach (i, res = res * i))
Поскольку присвоение res * i
значению res
- последнее выполненное действие, функция неявно возвращает результат, поэтому явное выражение возврата не требуется. Вышеупомянутое демонстрирует использование range и не использует цикл for ()
, который был бы быстрее.