Эта статья поднимает множество проблем. Пожалуйста, помогите улучшить его или обсудите эти вопросы на странице обсуждения . ( Узнайте, как и когда удалить эти сообщения-шаблоны )
|
Парадигма | объектно-ориентированный на основе прототипов |
---|---|
Разработано | Стив Декорте |
Разработчик | Стив Декорте, Джонатан Райт, Джереми Трегунна |
Впервые появился | 2002 |
Стабильный выпуск | 20170906/11 августа 2017 г . [1] |
Печатная дисциплина | динамичный , сильный |
Веб-сайт | iolanguage |
Основные реализации | |
Ио Io.NET | |
Под влиянием | |
Smalltalk , NewtonScript , Self , Lua , Lisp , Python , Act1 | |
Под влиянием | |
Иок , Зелье |
Ио является чисто объектно-ориентированным программированием языка вдохновленного Smalltalk , Я , Lua , Lisp , aCt1 и NewtonScript . [2] Io имеет объектную модель на основе прототипов, аналогичную модели в Self и NewtonScript, что устраняет различие между экземпляром и классом . Как и в Smalltalk, все является объектом и использует динамическую типизацию . Как и Лисп, программы - это просто деревья данных. Ио использует акторов для параллелизма.
Примечательными особенностями Io являются его минимальный размер и открытость для использования внешних ресурсов кода. [ необходима цитата ] Io выполняется небольшой портативной виртуальной машиной .
Язык был создан Стивом Декорте в 2002 году после попытки помочь другу, Дрю Нельсон, с его языком, Целом. Он обнаружил, что на самом деле мало что знает о том, как работают языки, и решил написать крошечный язык, чтобы лучше понимать проблемы. [3]
Цель Ио - исследовать концептуальную унификацию и динамические языки , поэтому компромисс, как правило, заключается в пользу простоты и гибкости, а не производительности.
В этом разделе не процитировать любые источники . ( Июнь 2013 г. ) |
В простейшей форме он состоит из одного идентификатора:
doStuff
Предполагая, что вышеуказанный doStuff является методом , он вызывается с нулевыми аргументами, и в результате явные круглые скобки не требуются.
Если бы у doStuff были аргументы, это выглядело бы так:
doStuff ( 42 )
Io - это язык передачи сообщений , и поскольку все в Io является сообщением (за исключением комментариев ), каждое сообщение отправляется получателю. Приведенный выше пример хорошо это демонстрирует, но не полностью. Чтобы лучше описать этот момент, давайте посмотрим на следующий пример:
Версия системы
В приведенном выше примере демонстрируется передача сообщений в Io; сообщение «версия» отправляется объекту «Система».
Операторы - это особый случай, когда синтаксис не такой шаблонный, как в приведенных выше примерах. Анализатор Io перехватывает набор операторов, определенных интерпретатором, и переводит их в вызовы методов. Например, следующее:
1 + 5 * 8 + 1
переводится на:
1 + ( 5 * ( 8 )) + ( 1 )
Все операторы в Io являются методами; тот факт, что они не требуют явных скобок, является удобством. Как вы можете видеть, есть также немного старшинства операторов происходит здесь, и уровни приоритета такие же , как и с уровнями C очередности .
В Io есть два способа создания анонимных функций : методы и блоки. Между собой они практически идентичны, за исключением области применения . В то время как блоки имеют лексическую область видимости , методы имеют динамическую область видимости .
И метод, и блок являются функциями высшего порядка .
Вездесущая программа Hello world :
"Привет, мир!" 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
to res
является последним выполненным действием, функция неявно возвращает результат, поэтому явное выражение возврата не требуется. Вышеупомянутое демонстрирует использование диапазонов и не использует for()
цикл, который был бы быстрее.