Русские документы
Ежедневные компьютерные новости RSS rusdoc.ru  Найти :
Новости
Последние поступления
Книжный магазин
  Hardware:
Видеоустройства
Системные платы
Процессоры
Мобильные устройства
Аудиосистема
Охлаждение системы
Накопители информации
КПК и ноутбуки
Телефоны и связь
Периферия
Система
Сети
Разные устройства
 
  Programming:
Web-разработка
Языки программирования
Технологии и теория
Разработка игр
Программная инженерия
 
  Software:
Операционные системы
Windows 7
Базы данных
Обзоры программ
Графика и дизайн
   
  Life:
Компьютерная жизнь
Разные материалы
   
Партнеры
Публикация
Правовая информация
Реклама на сайте
Обратная связь
Экспорт в RSS Экспорт в RSS2.0
    Читать в Яндекс.Ленте



Io programming language

Раздел: Programming / Технологии разработки @ 27.06.2008 | Ключевые слова: io язык программирования lisp версия для печати

Автор: semka
Источник: habrahabr

По факту защиты мной диплома образовалось некоторое свободное время и я таки решил собраться и написать про эту чудесную штучку.
Мы в последнее время видим всплеск интереса ко всяким языкам очень высокого уровня, с анонимными функциями, каррингом, мапом/фолдом, метапрограммированием и прочим блэкджэком. Слава богу, я считаю.
Задачи усложняются и если люди применяют относительно низкоуровневые средства разработки зачастую наступает ситуация, когда набор абстракций оказывается мал в рамках решаемой задачи, примерно так появляется «спагетти» и велосипеды. Хорошего мало. Хотя умалять роль низкоуровневого программирования не хочется совершенно, по понятным причинам.

Совсем недавно, в 2002 году, бравый американец Стив Декорте понял, что ему как-то все вокруг не нравится. Ну то есть нравится, но как-то по частям. Нравится Smalltalk своей Ъ-ООП природой, нравится Lisp своей системой метапрограммирования и общей мегаизвратностью, нравится Self своими прототипами, нравится Lua, потому что маленькая и клево встраивается куда угодно. А вот что бы все и сразу — что-то не то. Погоревал бравый американец, да и наколбасил свой собственный язык программирования — Io.

Io


Io это маленький, полностью объектно-ориентированный язык программирования с динамической типизацией и развитой системой метапрограммирования, анонимными функциями и вытекающими отсюда плюшками. Кроме того, Io невероятно прост, как в синтаксисе, так и внутри. Существуют всего две сущности: объекты и сообщения. На этом базисе построено все остальное. Вообще весь язык следует дзенскому духу минимализма и простоты.
В Io нет понятия класс, только объект. Объект может быть склонирован и изменен, таким образом мы получаем другой объект (Это и есть прототипы). Все типы данных, значения и прочая — объекты.

Ну что, поехали.

Io в примерах


"Hello world" print

Это самизнаетечто. Многих (да и меня в самом начале моих платонических отношений с Io) сильно смутило, какого хрена так странно вызывается print? Тут все просто, главно понять, что в Io нет методов и свойств, есть слоты и сообщения. В данном примере строке "Hello world" отправляется сообщение print. В более традиционных ООП языках это будет выглядеть примерно так:
"Hello world".print()

Это что бы было проще понять.

Теперь непосредственно про хваленое прототипное ООП:

Mushroom := Object clone
Mushroom isPoison := false
Mushroom whenEaten := method(person,
if(self isPoison == true,
person kill
)
)

В этом фрагменте кода мы создаем объект Mushroom, определяем его как съедобный и создаем метод whenEaten убивающий съевшего в случае, если гриб оказался ядовитым.

Man := Object clone
Man state := "Living"
Man eat := method(food,
food whenEaten(self)
)
Man kill := method(
self state := "Dead"
)

Определяем объект «Мужыг», как видно из кода, Мужыг можеть есть и умереть (ну вот как-то так).
Как доказал Сергей Анатольевич Курёхин — Ленин был грибом. Таким образом мы можем определить ленина через клонирование класса Mushroom:

Lenin := Mushroom clone
Lenin isPoison := false
Lenin speak := method(
"Патриотизм - одно из наиболее глубоких чувств,
закрепленных веками и тысячелетиями обособленных отечеств." println
)

Так же, для разнообразия, можно определить ядовитый гриб:

InfectedMushroom := Mushroom clone
InfectedMushroom isPoison := true

Теперь мы можем попробовать накормить мужика чем-нибудь:

Man eat(Mushroom)
Man state println

Напечатает «Living».

Man eat(InfectedMushroom)
Man state println

Соответственно «Dead»

В то время, пока Ленин говорил:

Lenin speak

Пришел мужик съел его:

Man eat(Lenin)

И остался жив.

Метапрограммирование


Система метапрограммирования в Io в тысячу раз проще чем в том же Lisp`е, но не менее мощная. Здесь нет понятия «макрос», тут просто все дерево кода доступно в рантайме. Не надо извращений со сложными синтаксическими конструкциями, просто изменяй код «on fly» как тебе захочется.
Мой любимый пример — реализация Singleton`а в Io:

Singleton := Object clone
Singleton clone := Singleton

Тут я просто переопределил стандартный метод clone, что бы он возвращал тот же объект.

Напоследок


Io очень молодой, но не по годам прикольный язык. Несмотря на его мегаизвратность и мощность он крайне простой. Сам язык расчитан на легкость встраивания в чужеродные системы, к нему легко писать модули на низкоуровневых языках, когда требуется перфоманс. Для него уже сейчас написано достаточно библиотек.
Существуют несколько проектов, активно использующих Io, например проект It — скриптовый язык основанный на Io, разработанный в Pixar.
Сейчас я занимаюсь переводом документации по Io на русский язык. Конечно, я затронул очень мало в этом посте, так что продолжение следует (-;

Ссылки


http://iolanguage.com

(Из моего блога)

Это интересно:








версия для печатиРаспечатать статью


Вернуться в раздел: Programming / Технологии разработки


Реклама:
Читать наc на:

Add to Google
Читать в Яндекс.Ленте






Rambler's Top100
© Copyright 1998-2012 Александр Томов. All rights reserved.