Io (язык программирования)

редактировать
Io
Io-logo. svg
Paradigm объектно-ориентированный на основе прототипа
Разработано Стив Декорте
Разработчик Стив Декорте, Джонатан Райт, Джереми Трегунна
Впервые появился2002; 18 лет назад (2002 г.)
Стабильный выпуск 20170906/11 августа 2017 г.; 3 года назад (11.08.2017)
Дисциплина набора текста динамический, сильный
Веб-сайтiolanguage.com
Основные реализации
Io Io.NET
Под влиянием
Smalltalk, NewtonScript, Self, Lua, Lisp, Python, Act1
Influenced
Ioke, Potion

Io- это чистый объектно-ориентированный язык программирования , вдохновленный Smalltalk, Self, Lua, Lisp, Act1 и NewtonScript. У Io есть объектная модель на основе прототипов, аналогичная тем, что есть в Self и NewtonScript, что устраняет различие между instance и class. Как и в Smalltalk, все является объектом и использует динамическую типизацию. Как и Лисп, программы - это просто деревья данных. Ио использует субъекты для параллелизма.

Примечательные особенности Io - это его минимальный размер и открытость для использования внешних ресурсов кода. Io выполняется небольшой портативной виртуальной машиной.

Содержание
  • 1 История
  • 2 Философия
  • 3 Возможности
  • 4 Синтаксис
    • 4.1 Методы и блоки
    • 4.2 Примеры
  • 5 См. Также
  • 6 Ссылки
  • 7 Внешние ссылки
История

Язык был создан Стивом Декортом в 2002 году после попытки помочь другу, Дрю Нельсон, с его языком, Cel. Он обнаружил, что на самом деле мало что знает о том, как работают языки, и решил написать крошечный язык, чтобы лучше понимать проблемы.

Философия

Цель Ио - исследовать концептуальную унификацию и динамические языки, поэтому предпочтение отдается простоте и гибкости, а не производительности.

Возможности
Синтаксис

В своей простейшей форме он состоит из одного идентификатора:

doStuff

Предполагая, что приведенный выше doStuff является методом, он вызывается без аргументов, поэтому явные скобки не требуются.

Если бы doStuff имел аргументы, это выглядело бы так:

doStuff (42)

Io - это сообщение, передающее язык, и поскольку все в Io является сообщением (исключая комментарии ), каждое сообщение отправляется получателю. Приведенный выше пример хорошо это демонстрирует, но не полностью. Чтобы лучше описать этот момент, давайте рассмотрим следующий пример:

Версия системы

В приведенном выше примере демонстрируется передача сообщений в Io; сообщение «версия» отправляется объекту «Система».

Операторы - это особый случай, когда синтаксис не такой шаблонный, как в приведенных выше примерах. Синтаксический анализатор Io перехватывает набор операторов, определенных интерпретатором, и переводит их в вызовы методов. Например, следующее:

1 + 5 * 8 + 1

переводится в:

1 + (5 * (8)) + (1)

Как видите, существует также здесь происходит немного приоритета операторов , а уровни приоритета такие же, как и для уровней приоритета C.

Операторы также были преобразованы в вызовы методов. Фактически, все операторы в Io являются методами; тот факт, что они не требуют явных скобок, является удобством.

Методы и блоки

В Io есть два способа создания анонимных функций : методы и блоки. Между ними они почти идентичны, за исключением scope. В то время как блоки имеют лексическую область видимости, методы имеют динамическую область видимости.

И метод, и блок являются функциями высшего порядка.

Примеры

Вездесущий Hello мировая программа :

«Привет, мир!» 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значению res- последнее выполненное действие, функция неявно возвращает результат, поэтому явное выражение возврата не требуется. Вышеупомянутое демонстрирует использование range и не использует цикл for (), который был бы быстрее.

См. Также
Ссылки
Внешние ссылки
Последняя правка сделана 2021-05-24 05:48:53
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте