Pull to refresh
68
0
Семён Новиков @semka

Пользователь

Send message

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

Reading time 4 min
Views 2.3K

Метапрограммирование в языке io



В продолжении серии статей про чудесный язык io я таки собрался написать про метапрограммирование.
habrahabr.ru/blogs/crazydev/29375
habrahabr.ru/blogs/crazydev/28254
habrahabr.ru/blogs/crazydev/28167
habrahabr.ru/blogs/crazydev/28041

Метапрограммирование — создание программ, которые создают другие программы как результат своей работы (либо — частный случай — изменяющие или дополняющие себя во время выполнения).
© Православная википедия

Совершенно не интересен канонический смысл термина «метапрограммирование», любой тьюринг-полный язык имеющий библиотеки IO способен генерировать исходные тексты программ на произвольном языке. Намного интересней возможность самопознания программы — интроспекция, а так же генерация и модификация самой себя в процессе выполнения.

Если посмотреть на крестных отцов io, то можно увидеть Lisp, Smalltalk, Self и другие динамические языки. Но все они решают проблему метапрограммирования по своему, например Lisp генерирует код в процессе компиляции из макросов, очень мощных штук. Smalltalk содержит развитую систему «отражений» (reflection) позволяющую гулять по дереву объектов в любую сторону. Io пошел по пути smalltalk'а и строит свои динамические механизмы на базе объектной модели, а не универсальности синтаксиса (как лисп).

Читать дальше →
Total votes 38: ↑35 and ↓3 +32
Comments 22

Io Language: Объектная система

Reading time 4 min
Views 2K

Введение


Продолжая писать про io, совершенно необходимо остановиться отдельно на устройстве объектной системы этого чудесатого езычка. Главная проблема в том, что даже если вы «знаете» ООП, вполне может сложиться ситуация, что вы просто не поймете, как оно устроено в io. Сейчас под ООП почему-то подразумевается модель Java, чаще всего. C++ нельзя назвать объектно-ориентированным языком, потому что он язык поддерживающий парадигму ООП, но это не его основная парадигма. Java больше подходит под гордое звание Ъ-ООП языка, но вот беда, ООП диктуемое Java-like языками довольно извращено. Изначально принципы ООП зарождались в Smalltalk'е и там все выглядело несколько иначе, объекты общались друг с другом не посредством вызова методов, а посредством передачи друг другу сообщений, мне до сих пор странно, почему же от этой модели ушли, ведь такое построение позволяет ввести прозрачную параллельность в язык без костылей. Посмотрите на нынешние круто параллелящиеся языки, тот же Erlang например, там все сделано через сообщения. Опять же нагородили огородов из RPC, COM и прочего dbus'а. А ведь как все хорошо начиналось.
Читать дальше →
Total votes 46: ↑43 and ↓3 +40
Comments 72

Io Language: Синтаксис

Reading time 4 min
Views 3.6K

В продолжение серии статей про Io, хотелось бы отдельно остановиться на синтаксисе языка.
В двух словах синтаксис Io можно описать так: простой, но странный. Многих удивит такой подход, но, спешу заверить, как и в Lisp, синтаксис неудобен только при взгляде со стороны. С эстетической точки зрения можно отдельно выделить тот факт, что многие прогаммы на Io внешне кажутся излишне разреженными, на экране остается много «лишнего», незаполненного полезным кодом места, это ощущение меня не покидает довольно давно, я пока не придумал, как полностью избавиться от этого вывиха мозга, я просто придумал для себя некоторые правила оформления кода, при соблюдении которых эффект значительно сморщивается:
  • Длина строки не должна превышать 80 символов (Привет, text mode!)
  • Между клонированием объекта и описанием тела нового должна быть пустая строка
  • Методы и свойства группируются
  • Без лишней необходимости скобки на новую строку не переносятся


Ну что, поехали. Вынос мозга №2.
Читать дальше →
Total votes 50: ↑45 and ↓5 +40
Comments 17

Io programming language

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

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

Io


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

Ну что, поехали.
Читать дальше →
Total votes 109: ↑109 and ↓0 +109
Comments 136

defun.ru: Digg для психов

Reading time 1 min
Views 551

Ну раз никто не до сих пор не сказал, скажу я.
Не далее чем в пятницу мы с lrrr официально открыли λ-версию Гламурного, Вебдванольного (хе-хе) сервиса defun.ru.
Сервис предназначен для коллекционирования ссылок про декларативное, функциональное и другое неземное программирование.
Подробнее у меня и у lrrr в блогах.
Надеюсь вам будет интересно.
Total votes 14: ↑14 and ↓0 +14
Comments 21

Про ФЯ

Reading time 2 min
Views 1.5K
А давайте, пока мне работается хреново, я тут напишу небольшую обзорную ахинею про функциональные языки.
Так получилось, что меня угораздило перебрать их не меньше дюжины, я постараюсь дать максимально субъективную оценку паре-тройке языков, поставив ссылку на объективную оценку Вселенского Разума Википедии.

Не смотря на «эзотеричность», функциональных языков довольно много. Зачастую они узкоспециализированы, хотя это скорее предпосылка, в последствии они превращаются в «языки общего назначения» (как было в случае с Erlang).
Поехали:
Читать дальше →
Total votes 7: ↑4 and ↓3 +1
Comments 7

Про ФП #2

Reading time 2 min
Views 1.2K
Было время, когда функциональные языки котировались если не больше, то наравне с императивными. Время прошло и даже известно почему. Почему-то считается, что программирование на функциональном языке это «взрыв мозга». Не спорю, иногда действительно взрыв, но это буквально дружеский хлопок по ушам, по сравнению с взрывами мозга, которые мне периодически приходится испытывать разбираясь в чужих исходниках на C#. Я очень хочу, что бы история была спиралевидной (-:
Читать дальше →
Total votes 10: ↑5 and ↓5 0
Comments 14

Information

Rating
Does not participate
Date of birth
Registered
Activity