Эта статья поднимает множество проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалить эти сообщения-шаблоны ) ( Узнайте, как и когда удалить этот шаблон сообщения )
|
Парадигма | объектно-ориентированный на основе прототипов |
---|---|
Разработано | Стив Декорте |
Разработчик | Стив Декорте, Джонатан Райт, Джереми Трегунна |
Впервые появился | 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 - это его минимальный размер и открытость для использования внешних ресурсов кода. [ необходима цитата ] Ио выполняется небольшой портативной виртуальной машиной .
История [ править ]
Язык был создан Стивом Декортом в 2002 году после попытки помочь другу, Дрю Нельсон, с его языком, Целом. Он обнаружил, что на самом деле мало что знает о том, как работают языки, и решил написать крошечный язык, чтобы лучше понимать проблемы. [3]
Философия [ править ]
Цель Ио - исследовать концептуальную унификацию и динамические языки , поэтому компромиссы имеют тенденцию отдавать предпочтение простоте и гибкости, а не производительности.
Особенности [ править ]
- Чисто объектно-ориентированный на основе прототипов
- Код как данные / гомоиконный
- Ленивое вычисление параметров функции
- Функции высшего порядка
- Самоанализ, рефлексия и метапрограммирование
- Параллелизм на основе акторов
- Сопрограммы
- Обработка исключений
- Добавочный сбор мусора, поддерживающий слабые ссылки
- Очень портативный
- Динамическая загрузка DLL / разделяемой библиотеки на большинстве платформ
- Маленькая виртуальная машина
Синтаксис [ править ]
В этом разделе не процитировать любые источники . Июнь 2013 г. ) ( Узнайте, как и когда удалить этот шаблон сообщения ) ( |
В простейшей форме он состоит из одного идентификатора:
doStuff
Предполагая, что вышеуказанный doStuff является методом , он вызывается с нулевыми аргументами, и в результате явные круглые скобки не требуются.
Если бы у doStuff были аргументы, это выглядело бы так:
doStuff ( 42 )
Io - это язык передачи сообщений , и поскольку все в Io является сообщением (за исключением комментариев ), каждое сообщение отправляется получателю. Приведенный выше пример хорошо это демонстрирует, но не полностью. Чтобы лучше описать этот момент, давайте посмотрим на следующий пример:
Версия системы
В приведенном выше примере демонстрируется передача сообщений в Io; сообщение «версия» отправляется объекту «Система».
Операторы - это особый случай, когда синтаксис не такой шаблонный, как в приведенных выше примерах. Анализатор Io перехватывает набор операторов, определенных интерпретатором, и переводит их в вызовы методов. Например, следующее:
1 + 5 * 8 + 1
переводится на:
1 + ( 5 * ( 8 )) + ( 1 )
Как вы можете видеть, есть также немного старшинства операторов происходит здесь, и уровни приоритета такие же , как и с уровнями C очередности .
Операторы также были превращены в вызовы методов. Фактически, все операторы в Io являются методами; тот факт, что они не требуют явных скобок, является удобством.
Методы и блоки [ править ]
В 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()
цикл, который был бы быстрее.
См. Также [ править ]
- Ioke (язык программирования)
Ссылки [ править ]
- ^ "Io Releases" . Проверено 6 февраля 2020 .
- ^ Руководство по программированию Ио
- ^ Тейт, Брюс (2010). «Глава 3: Ио». Семь языков за семь недель: прагматическое руководство по изучению языков программирования (1-е изд.). Роли, Северная Каролина: Прагматическая книжная полка . п. 60, 72 . ISBN 978-1934356593.
Внешние ссылки [ править ]
- Io домашняя страница
- Ио в Исследовательском центре Synrc
- Ио в Керли
- Jasmine.Io Платформа тестирования BDD для Io