Ио (язык программирования)
Эта статья нуждается в дополнительных цитатах для проверки . ( август 2014 г. ) |
![]() | |
Парадигма | объектно-ориентированный на основе прототипов |
---|---|
Разработано | Стив Декорте |
Разработчик | Стив Декорте, Джонатан Райт, Джереми Трегунна |
Впервые появился | 2002 год |
Стабильная версия | 20170906
/ 11 августа 2017 г [1] |
Дисциплина набора текста | динамичный , сильный |
Веб-сайт | иоязык |
Основные реализации | |
Io Io.NET | |
Под влиянием | |
Smalltalk , NewtonScript , Self , Lua , Lisp , Python , Act1 | |
Под влиянием | |
Иго , Зелье |
Io — чистый объектно-ориентированный язык программирования, вдохновленный Smalltalk , Self , Lua , Lisp , Act1 и NewtonScript . [2] Io имеет объектную модель на основе прототипов, аналогичную моделям Self и NewtonScript, устраняющую различие между экземпляром и классом . Как и в Smalltalk, все является объектом и использует динамическую типизацию . Как и Lisp, программы — это просто деревья данных. Io использует актеров для параллелизма.
Замечательными особенностями Io являются его минимальный размер и открытость для использования внешних ресурсов кода. [3] Io выполняется небольшой портативной виртуальной машиной .
История [ править ]
Язык был создан Стивом Декорте в 2002 году после попытки помочь другу Дрю Нельсону с его языком Cel. Он обнаружил, что на самом деле мало что знает о том, как работают языки, и решил написать крошечный язык, чтобы лучше понять проблемы. [4]
Философия [ править ]
Целью Io является исследование концептуальной унификации и динамических языков , поэтому компромиссы имеют тенденцию отдавать предпочтение простоте и гибкости, а не производительности.
Особенности [ править ]
- Чистая объектно-ориентированная работа на основе прототипов.
- Код как данные / гомоиконический
- Ленивая оценка параметров функции
- Функции высшего порядка
- Интроспекция , рефлексия и метапрограммирование
- на основе актеров Параллелизм
- Сопрограммы
- Обработка исключений
- Дополнительный сбор мусора для поддержки слабых звеньев
- Высокая портативность
- Динамическая загрузка DLL / разделяемой библиотеки на большинстве платформ.
- Маленькая виртуальная машина
Синтаксис [ править ]
В своей простейшей форме он состоит из одного идентификатора: [5]
doStuff
Предполагая, что приведенный выше метод doStuff является методом , он вызывается с нулевыми аргументами и, как следствие, явные круглые скобки не требуются.
Если бы у doStuff были аргументы, это выглядело бы так:
doStuff(42)
Io — это язык передачи сообщений , и поскольку все в Io является сообщением (за исключением комментариев ), каждое сообщение отправляется получателю. Приведенный выше пример демонстрирует это хорошо, но не в полной мере. Чтобы лучше описать этот момент, давайте посмотрим на следующий пример:
System version
Приведенный выше пример демонстрирует передачу сообщений в Io; сообщение «версия» отправляется объекту «Система».
Операторы — это особый случай, когда синтаксис не такой шаблонный, как в приведенных выше примерах. Io Анализатор перехватывает набор операторов, определенных интерпретатором, и преобразует их в вызовы методов. Например, следующее:
1 + 5 * 8 + 1
переводится как:
1 +(5 *(8)) +(1)
Все операторы в Io являются методами; тот факт, что они не требуют явных круглых скобок, является удобством. Как вы можете видеть, здесь также происходит небольшой приоритет операторов , и уровни приоритета такие же, как и для C. уровней приоритета
Методы и блоки [ править ]
В Io есть два способа создания анонимных функций : методы и блоки. Между собой они практически идентичны, за исключением области применения . В то время как блоки имеют лексическую область видимости , методы имеют динамическую область видимости .
И метод , и блок являются функциями высшего порядка .
Примеры [ править ]
Вездесущая программа Hello world :
"Hello, world!" println
Новые объекты создаются путем клонирования объектов. В частности, в Io создается новый пустой объект, и внутри нового объекта сохраняются только различия между ним и его родителем; такое поведение известно как дифференциальное наследование . Показан пример такого поведения:
A := Object clone // creates a new, empty object named "A"
Простая нерекурсивная функция факториала в Io:
factorial := method(n,
if(n == 0, return 1)
res := 1
Range 1 to(n) foreach(i, res = res * i)
)
Поскольку назначение res * i
к res
— это последнее выполненное действие, функция неявно возвращает результат, поэтому явное выражение возврата не требуется. Вышеприведенное демонстрирует использование диапазонов и не использует for()
цикл, что было бы быстрее.
Ссылки [ править ]
- ^ «Ио Релизы» . Гитхаб . Проверено 6 февраля 2020 г.
- ^ Руководство по программированию Io
- ^ «Дополнения к программированию и написанию Io — Wikibooks, открытые книги для открытого мира» . ru.wikibooks.org . Проверено 22 июня 2023 г.
- ^ Тейт, Брюс (2010). «Глава 3: Ио» . Семь языков за семь недель: прагматическое руководство по изучению языков программирования (1-е изд.). Роли, Северная Каролина: Прагматичная книжная полка . п. 60, 72 . ISBN 978-1934356593 .
- ^ «Ио-руководство» . iolanguage.org . Проверено 22 июня 2023 г.
Внешние ссылки [ править ]
- Ио домашняя страница
- Ио в исследовательском центре Synrc
- Ио в Керли
- Jasmine.Io для Io Платформа тестирования BDD
- Языки программирования
- Динамические языки программирования
- Динамически типизированные языки программирования
- Языки программирования на основе прототипов
- Объектно-ориентированные языки программирования
- Языки программирования, созданные в 2002 году.
- Языки сценариев
- программное обеспечение 2002 года
- Гомоиконические языки программирования