Ио (язык программирования)
Эта статья нуждается в дополнительных ссылок для проверки . ( август 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 были аргументы, это выглядело бы так:
делать вещи ( 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:
факториал := метод ( n ,
if ( n == 0 , return 1 )
res := 1
Диапазон от 1 до ( 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
- Ио в Керли
- Платформа тестирования BDD Jasmine.Io для Io
- Языки программирования
- Динамические языки программирования
- Динамически типизированные языки программирования
- Языки программирования на основе прототипов
- Объектно-ориентированные языки программирования
- Языки программирования, созданные в 2002 году.
- Языки сценариев
- программное обеспечение 2002 года
- Гомоиконические языки программирования