Наткнулся на интересный язык, Io:
http://iolanguage.com
Очень простой, обладает чертами:
—
SmallTalk: все есть объект, которым можно слать сообщения, объектами являются и сами сообщени, и локальные переменные, и вызов метода.
Синтаксис без мусора: A B C(3) это посылка сообщения «A» текущему объекту-контексту, посылка сообщения «B» результату, и дальнейшая посылка сообщения «C» с аргументом. Есть немного сахара для конструирования объектов.
—
Lisp: код=данные, возможность полного инспектирования, со всей мощью макросов или даже переинтерпретации по-своему. Можно почти без мусора реализовать DSL, например, SQL или Objective-C. Скобок значительно меньше
Когда вы пишете method(a, b, a + b) (это посылка сообщения «method» контексту с параметрами), вы получаете метод, который будет посылать «a» и «b» контексту вызова и выполнять код в последнем параметре (посылка сообщения «+»).
У стандартных операторов привычные приоритеты.
Но этот код можно не выполнять, а переинтерпретировать — тут и макросы, и DSL, и все остальное.
Лексические замыкания делаются так же: block(a + b), результат при выполнении будет слать «a» и «b» не контексту вызова, а контексту создания метода (текущий объект, locals).
—
Act1: встроенная параллельность на фьючерсах и актерах (это как в Erlang, если кто-то с теорией не знаком). Обычные вызовы «C encryptFrame» делают блокирующий вызов (дожидается результата). «C @encryptFrame» возвращает прозрачный Future, который выполняется параллельно и превращается в результат сам, если попытаться слать ему сообщения раньше чем он окончится, будет обычная блокировка. Фьючерсы автоматически определяют дедлоки между собой и бросают исключение при обнаружении.
И «C @@encryptFrame» посылает асинхронное сообщение, не возвращая результат. Сообщения объектам-актерам приходят естественно по-порядку (арбитраж) — одновременно два действия в контексте одного объекта выполняться не могут. На этом можно моделировать актеров почти как угодно. Само собой, сообщения несут в себе ссылку на вызывающего (объект-контекст), и вы всегда можете отправить ему ответ. И конечно, «@» и «@@» это просто сообщения-операторы.
К сожалению, текущая реализация игнорирует многопроцессорные системы (все работает в одном потоке ОС).
—
Self и NewtonScript: основан на прототипах (новые объекты создаются путем клонирования прототипов). Для наследования, у каждого объекта запомнен список его прототипов, которые будут по очереди пытаться обработать неизвестные сообщения.
Все объекты модифицируемы в рантайме, в том числе и их список прототипов.
При отсутствии обработчика у всех прототипов, вызывает слот «forward», который бросает исключение, но может быть переопределен для создания «прозрачных» прокси, типа той же Future.
Account := Object clone
Account balance := 0
Account deposit := method(amount,
balance = balance + amount
)
account := Account clone
account deposit(10.00)
account balance println
—
Lua: маленький, встраиваемый, кроссплатформенный, открытый код, BSD-license.
И, помятуя о моем опыте с D и Scala, немаловажная вещь — интерпретатор стабилен
Кё>Наткнулся на интересный язык, Io: http://iolanguage.com
Кё>Очень простой, обладает чертами:
....
Клево. А меня на Хаскеле заставляют программы писать...
Здравствуйте, Кодёнок, Вы писали:
Кё>Наткнулся на интересный язык, Io: http://iolanguage.com
Интересно, на сколько он производительный...
P.S. Кста, у них сайт на нем сделан...
... << RSDN@Home 1.2.0 alpha rev. 787>>
Здравствуйте, Кодёнок, Вы писали:
Кё>И, помятуя о моем опыте с D и Scala, немаловажная вещь — интерпретатор стабилен
Мда... зато мееедленный!
IO vs Python... << RSDN@Home 1.2.0 alpha rev. 787>>
Здравствуйте, Plague, Вы писали:
P>Мда... зато мееедленный!
P>IO vs Python
Интересный сайт. Один из любимых мной языков оказался практически самым быстрым из интерпретируемых. Хотя многие говорят, что он тормознутый (мне сравнивать особенно не с чем). Насколько вообще можно верить этим тестам?
P>>IO vs Python
N>Интересный сайт. Один из любимых мной языков оказался практически самым быстрым из интерпретируемых. Хотя многие говорят, что он тормознутый (мне сравнивать особенно не с чем). Насколько вообще можно верить этим тестам?
Как здесь много раз показывалось, ни на йоту
... << RSDN@Home 1.2.0 alpha 4 rev. 1091>>
BZ>http://sdfgh153.ru/
Да, неплохая статья... особенно понравилось, что вспомнили про передачу про Ленина и Гриб, и радиоволну... =) Но создавать, получается Ленина надо не только от Гриба, но и от Радио волны, как бы множественное наследование... конечно, возможно сделать отдельно два отдельных объекта, Гриб и Радоиволна, а так же объект, который будет прототипом для Ленина, т.е. Гриб со свойствами и методами Радиоволны и наоборот...
... << RSDN@Home 1.2.0 alpha rev. 787>>
Здравствуйте, Plague, Вы писали:
BZ>>http://sdfgh153.ru/
P>Да, неплохая статья... особенно понравилось, что вспомнили про передачу про Ленина и Гриб, и радиоволну... =) Но создавать, получается Ленина надо не только от Гриба, но и от Радио волны, как бы множественное наследование... конечно, возможно сделать отдельно два отдельных объекта, Гриб и Радоиволна, а так же объект, который будет прототипом для Ленина, т.е. Гриб со свойствами и методами Радиоволны и наоборот...
— чё курил?
— IO!