Io (язык программирования) - Io (programming language)
Эта статья поднимает множество проблем. Пожалуйста помоги Улучши это или обсудите эти вопросы на страница обсуждения. (Узнайте, как и когда удалить эти сообщения-шаблоны) (Узнайте, как и когда удалить этот шаблон сообщения)
|
Парадигма | объектно-ориентированный на основе прототипа |
---|---|
Разработано | Стив Декорте |
Разработчик | Стив Декорте, Джонатан Райт, Джереми Трегунна |
Впервые появился | 2002 |
Стабильный выпуск | 20170906/11 августа 2017 г.[1] |
Печатная дисциплина | динамичный, сильный |
Интернет сайт | iolanguage |
Основной реализации | |
Ио Io.NET | |
Под влиянием | |
Болтовня, NewtonScript, Себя, Lua, Лисп, Python, Акт1 | |
Под влиянием | |
Иоке, Зелье |
Ио чистый объектно-ориентированного программирования язык вдохновлен Болтовня, Себя, Lua, Лисп, Акт1, и NewtonScript.[2] Ио имеет на основе прототипа объектная модель похожа на модели в Self и NewtonScript, что устраняет различие между пример и учебный класс. Как и в Smalltalk, все является объектом и использует динамическая типизация. Как и Лисп, программы - это просто деревья данных. Ио использует актеры для параллелизма.
Примечательные особенности Io - это его минимальный размер и открытость для использования внешних ресурсов кода.[нужна цитата ] Io выполняется с помощью небольшого портативного виртуальная машина.
История
Язык был создан Стивом Декортом в 2002 году после попытки помочь другу, Дрю Нельсон, с его языком, Целом. Он обнаружил, что на самом деле мало что знает о том, как работают языки, и решил написать крошечный язык, чтобы лучше понимать проблемы.[3]
Философия
Цель Ио - исследовать концептуальную унификацию и динамические языки, поэтому предпочтение отдается простоте и гибкости, а не производительности.
Функции
- Чистый объектно-ориентированный на основе прототипы
- Код как данные / гомоиконный
- Ленивая оценка параметров функции
- Функции высшего порядка
- Самоанализ, отражение и метапрограммирование
- Актерский параллелизм
- Сопрограммы
- Обработка исключений
- Инкрементальный сбор мусора поддерживающий слабые звенья
- Высоко портативный
- DLL /общая библиотека динамическая загрузка на большинстве платформ
- Маленький виртуальная машина
Синтаксис
В простейшей форме он состоит из одного идентификатора:
doStuff
Предполагая, что приведенный выше doStuff является метод, он вызывается без аргументов, и поэтому явные скобки не требуются.
Если бы у doStuff были аргументы, это выглядело бы так:
doStuff(42)
Ио - это передача сообщений язык, и поскольку все в Io является сообщением (за исключением Комментарии ) каждое сообщение отправляется получателю. Приведенный выше пример хорошо это демонстрирует, но не полностью. Чтобы лучше описать этот момент, давайте посмотрим на следующий пример:
Система версия
В приведенном выше примере демонстрируется передача сообщений в Io; сообщение «версия» отправляется объекту «Система».
Операторы являются частным случаем, когда синтаксис не такой шаблонный, как в приведенных выше примерах. Ио парсер перехватывает набор операторов, определенных интерпретатором, и переводит их в вызовы методов. Например, следующее:
1 + 5 * 8 + 1
переводится на:
1 + (5 *(8)) +(1)
Как видите, есть еще немного приоритет оператора происходит здесь, и уровни приоритета такие же, как и у Уровни приоритета C.
Операторы также были превращены в вызовы методов. Фактически, все операторы в Io являются методами; тот факт, что они не требуют явных скобок, является удобством.
Методы и блоки
В Io есть два способа создания анонимные функции: методы и блоки. Между собой они практически идентичны, за исключением объем. Пока блоки имеют лексическая область, методы имеют динамический диапазон.
Обе метод и блокировать находятся функции высшего порядка.
Примеры
Вездесущий Привет, мир программа:
"Привет, мир!" println
Новые объекты создаются клонирование объекты. В частности, в Io создается новый пустой объект, и только различия между ним и его родителем сохраняются в новом объекте; это поведение известно как дифференциальное наследование. Показан пример такого поведения:
А := Объект клон // создает новый пустой объект с именем "A"
Простая нерекурсивная факториальная функция в Io:
факториал := метод(п, если(п == 0, возвращаться 1) res := 1 Классифицировать 1 к(п) для каждого(я, res = res * я))
Поскольку присвоение res * я
к res
является последним выполненным действием, функция неявно возвращает результат, поэтому явное возвращаемое выражение не требуется. Выше показано использование диапазоны, и не использует за()
цикл, который был бы быстрее.
Смотрите также
Рекомендации
- ^ "Io Releases". Получено 2020-02-06.
- ^ Руководство по программированию Io
- ^ Тейт, Брюс (2010). «Глава 3: Ио». Семь языков за семь недель: прагматическое руководство по изучению языков программирования (1-е изд.). Роли, Северная Каролина: Прагматическая книжная полка. п.60, 72. ISBN 978-1934356593.
внешняя ссылка
- Ио домашняя страница
- Ио в Исследовательском центре Synrc
- Ио в Керли
- Жасмин.Ио Платформа тестирования BDD для Io