четверг, 27 сентября 2007 г.

Rubinius - Ruby VM написанная на Ruby

Rubinius - виртуальная машина и компилятор для Руби.

It's still something I plan on doing sooner rather than later. There ended up being a lot of issues we wanted to tackle first, and we haven't get got back to working on Garnet (the new name for Cuby). There were no particular problems yet, but I'm sure well find some.

Garnet looks like ruby at first glance, but the semantics of what things mean have been rewired.
For example, in garnet code 'd = c.to_ref' appears to call a method called to_ref on c, but garnet will translate that into 'd = &c', which is C code. One way to think about it is as a really advanced C preprocessor. It tries to map as much as it can to C constructs. The idea is something that looks like ruby, but behaves like C.

Поподробнее о Rubinius можно почитать тут:
The Rubinius Project
All content and news on InfoQ about Rubinius
evan.musing << current

Read More...

Чешская мечта (Польша, Краков)

...продолжение описания тура "Чешская мечта" в Чехию через Польшу...

В 7 часов утра выехали автобусом изо Львова в направлении польской границы. Всего 5 часов на границе и мы в Польше.

Read More...

среда, 26 сентября 2007 г.

How to swap two variables in Ruby?

Yeah, It's really simple to do! You must write only one string:

Ruby provides parallel assignment - they can be preformed in parallel. So it's normal code for Ruby:

Moreover, Ruby provides nested assignment:

Особенности изменяемых атрибутов (writable attributes) в Ruby

Изменяемые атрибуты (writable attributes) - атрибуты объекта, которые могут быть изменены сторонними объектами. Для этих атрибутов должен быть определен метод присвоения или или ему должно быть разрешено изменение (attr_writer, attr_accessor), что бы этот метод сгенерился автоматически

Read More...

ГрОб в Киеве

Что-то Летов зачастил в Киев. Совсем недавно, год назад ГрОб приежал со своим очередным новым альбомом. И снова новый альбом "Зачем сняться сны".

Read More...

вторник, 25 сентября 2007 г.

DSL (domain-specific language)

DSLs(domain-specific language, DSL) - языки программировая, позволяющие решать строго определённые задачи. Часто DSL-программа не компилируется в байт код или исполняемый код. Результат "компиляции" такой программы - объект предметной области.

Внешними я называю те DSL, которые написаны на языке, отличном от основного языка программного приложения - как две последние формы в нашем несложном примере. Примерами DSL такого типа могут служить "малые языки" Unix и конфигурационные XML файлы...

Что касается внутренних DSL, то они превращают в DSL сам основной язык приложения. Лучшим примером такого языка служит Lisp.

Если нужен язык для решения спецефических задач, а чего нет, то его можно реализовать. В реализации нового внешнего DSL нет ничего хитрого. Просто нужно определиться с терминами, которым оперирует предметная область и отобразить их в синтаксисе. Здесь можно посмотреть пример разработки нового DSL на Java. А здесь - разработка нового DSL на Ruby.

DSL DLS'ем, но возникает вполне резонный вопрос. А не дорого ли каждый раз разрабатывать DSL. Т.е. сама по себе разработка - это еще пол дела. Ведь в дальнейшем нужен супорт, редактор по красивше, обучение синтаксису пользователя, да еще и отладку не плохо было бы иметь. В этом и заключаются минусы языков предметной области.

Сейчас развивает новый тип программного обеспеченя - языковой инструментарий (language workbenches). Это полноценные среды для создания DSL. Например, Meta Programming System (MPS) компании JetBrains, Майкрософтовский Software Factories. О разработке и проектировани DSL с использованием MPS можно почитать здесь.

Read More...

Гардарика. Битва за Київ.

Нещодавно у місті Бровари пройшов фестиваль історичної реконструкції Гардарика. Гардарикою називаються земелі Київської Русі в скандинавській літературі.

Read More...

пятница, 21 сентября 2007 г.

double как параметр шаблона

Прочитав пару статей о мета программировании в С++, решил наваять что-то более существенное чем вычисление факториала в процессе компиляции.

Read More...

четверг, 20 сентября 2007 г.

Пару слов об изучении Ruby

Learning Ruby - пост, в котором автор делится опытом в изучении Руби.

Read More...

SyntaxHighlighter

С самого первого поста, в котором я использовал куски кода, хотелось выделить код на фоне остального текст. До недавнего времени я ограничивался выделением кода курсивом. Но пришло время изменить такой подход. Немного погуглив нашел кучу различных хайлайтеров. Не особо выясняя какой лучше, выбрал тот, что показался красивше - SyntaxHighlighter.

Read More...

пятница, 14 сентября 2007 г.

Ruby's blocks and iterators

Что такое блок в Руби? Это кусок кода, огранченный скобками {} или do end.

Read More...

Clipmarks

Наткнулся сегодня на Clipmarks - сервис, позволяющий сохранять любые куски веб-страниц. Работает очень просто, утанавливаеш расширение для Firefox'a (или другого браузера), создаеш себе аккаунт на сайте Clipmarks для хранения выделенного, выделяеш нужный кусок текста или картинку, нажимаеш clip, а после всех clip'ов - Save. Все. Посмотреть, то что было выделено можно на сайте.

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

Изучая Ruby...

Изучая Ruby, в который раз вспомнил выражение "всё новое - хорошо забытое старое". Чаще даже не забытое, а просто неизвестное.

Read More...

среда, 12 сентября 2007 г.

Классы и объекты в Ruby ч.2

Наследование в Руби.

Руби не поддерживает множественного наследование. Но если необходимо использовать функциональность нескольких классов предлагается компромисное решение - смеси.

Read More...

Чешская мечта

"Чешская мечта" - так называется 10 дневный автобусный тур в Чехию с оставновкой в Польше (Краков) по пути в Чехию и обратно. Хочу вкраце поделиться своими впечатлениями.

Read More...

Классы и объекты в Ruby ч.1

Классы в Ruby обозначаются словом class. Причем имя класса должно начинаться с большой буквы (а методы с маленькой); иначе получена ошибка: class/module name must be CONSTANT.

Read More...