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

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

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

Большинство реализаций Руби, такие как JRuby, XRuby, Gardens Point Ruby.NET, IronRuby, написаны на С. Rubinius использует идею, взятую из архитектуры Smalltalk-80 VM - он написан на языке-подмножестве самого себя. Этот язык называется Garnet. Evan Phoenix объясняет это так:

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 часов на границе и мы в Польше.

Сразу заметно, что мы выехали за границу - на бигбордах практически исчезли надписи на родном языке. Хотя загадочное слово "гуртовня" встречалось еще много километров от границы. Вообще, приграничные районы у "нас" и у "них" похожи как две капли воды - сплошные торговые точки и "гуртовни". Но совсем другие дороги! Чем дальше родина, тем больше необычного. И вот первое впечатление: "А де картоха? Де огороды вокруг домов??"



По обочинам - аккуратные разноцветные домики с черепичными крышами, вокруг них - лужайки с качелями, креслами, цветам, вокруг лужаек - небольшые декоративные заборчики. Во многих поселках вдоль дорог стоят шумопоглатители - высокие пластиковые (наверно даже не пластиковые) высокие заборы, в некоторых случаях даже прозрачные. У-у-у-у буржуи! Проехали всего ничего, а уже такие отличия!

При въезде в Польшу я не оценил качество дорог, только на обратном пути, когда въехали во Львовскую область и вдруг автобус начал скакать. Встечались и платные участки дорог. Но не все так хорошо - машин на дорогах было ощутимо больше, чем на Украине. Как мне показалось, поляки предпочитают жить подальше от города, туда ездят только работать.

Уже начало темнеть, когда мы приехали в Краков. Высадившись в Старом Городе, недалеко от Вавеля, отправились на первую экскурсию по вечернему городу.



Старый Город - сплошные старинные здания и костелы. Так как это была моя первая поездка в еропейский город, я непереставал удивляться. Здания в хорошем состоянии, везде чисто, освещено и никто не пьет пиво на улицах. Именно здесь, я оценил запрет на распитие пива на улицах.



Выйдя на Рыночную площадь, я понял, что именно так я представлял себе Европу. Булыжник вместо асфальта, бесчисленные кафаны, уличные музыканты, все это окружено старинными зданиями, освещено многочисленными фонарями, а посреди площади - старое здание Ратуши. Даже люди казались не такими, более "европейскими". Ни в Киеве, ни в Москве такого ощущение у меня небыло. И я подумал, а что же тогда в Праге, разве может быть красивее и "европейскее"?? Забылась даже усталось от более чем десяти часовой поездки в автобусе.



Но времени на прогулку у нас было не много, до 11 часов вечера нашу группу надо было поселить в гостинице (гостиница Artur на окраине города, намного лучше гостиницы в которой мы жили в Праге).

На утро по программе у нас была запланированна поездка в аквапарк, что существенно сокращало время на экскурсию по Кракову (для клиентов гостиницы в аквапарке должы были предоставляться скидки, но руководитель группы об этом не обмолвилась и словом). Поэтому мы отказались от аквапарка и рано утром отправились в город.



Старый город не такой уж и большой, но очень насыщенный достопремечательностями. В Вавель, краковский кремль, мы должны были отправиться с гидом, большая часть группы вернется из аквапарка. Поэтому у нас было достаточно времени что бы посмотреть то, что не входило в программу и самим дополнительно погулять по Вавелю. Оказалось, что не стоит ити туда с гидом, предоставляемым тур фирмой. Там намного интереснее побродить самому - можно увидеть больше и не нужно постоянно бежать за кем-то. Либо самому взять одного из многочисленных гидов уже там, на месте.



После Вавеля у нас осталось часа полтора до отъезда в Прагу. За это время мы успели попробовать польское пиво, пообедать в кафане (цены и размеры порций нас приятно удивили), купить сувениров и решить, что групповой тур на самом деле не подходит, если хочешь не только посмотреть страну, но и прочувствовать ее. В отзывах других туристов об этом туре, я читал восторженные отзывы о гидах, создавали такую атмосферу, когда чувствуеш себя как будто в своей стране. Но мы не за этим туда ехали. Имхо, какой бы небыл хороший гид и какой юы нибыла хорошей программа, тур расчитан на то, что бы максимально заработать на туристах. То что сама путевка стоит не так уж дорого - еще не говорит, что сама по себе поездка обойдется дешево. "Один раз живем" - так думают туристы... и так зарабатывают тур агенства. Нет, все было очень хорошо, просто не так, как мы хотели. Групповой тур не очень удобен для индивидуального отдыха.



И вот в 14 часов мы выехали из Кракова в Прагу...

Здесь можно посмотреть некоторые краковские фотки

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:

Read More...

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

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

Ruby позволяет создавать виртуальные атрибуты - реально переменной объекта не существует, но есть методы, имитирующие доступ к ней:

Все понятно. Не понятно только почему в методе reset доступ к hour осуществляется через self, а в методе dump - без self. Оказывается, что в случае отсутствия self при записи значения hour интерпритируется как локальная переменная метода reset. Поэтому нужно явно указывать что вызывается метод класса, а не выполняется инициализация локальной переменной. Это существенно только для записи значения. При чтении self не обязателен. Если забыть об этом, можно получить не очевидную ошибку.

Read More...

ГрОб в Киеве

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



Вообще, мнения о последних альбомах расходятся координально, начиная от "Летов опопсел, списался, спелся, спился и т.д... гавно..." и заканчивая "Наконец-то Летов начал писать нормальную музыку... видать бросил пить... курить...". "Зачем сняться сны" я еще не слушал, поэтому не буду о нем судить. Имхо последние альбомы начиная со "Звездопада" действительно писал не тот Летов, которому "насрать на свое лицо", но этому не делает их ни хуже, ни лучше.

На предыдуший концерт, 26 ноября 2006 года, я шол со некоторым страхом разочарования. Да и альбом предыдущий прослушал только незадолго до самого концерта... Но Летов показал, что до старого пердунства ему еще далеко! Пестни из нового альбома были жирно разбавлены "хитами 80-х и 90-х".

Кто здесь самый лютый судья? Кто здесь самый удалой Господь?

Read More...

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

DSL (domain-specific language)

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

Возьмем для примера парсеры, которые применяются повсеместно (компиляторы, браузеры, текстовые редакторы и т.д.) Был разработан стандарт генератора парсера для Unix систем, который называется Yacc (Yet Another Compiler Compiler). Релизация этого стандарта (Berkley Yacc, Yaxx, Yecc) служит только для одной цели - генерация парсеров. Yacc генерирует код парсера на языке С основываясь на группе правил (аналитической граматике). Это один из примеров DSL.

Любую задачу предметной области лучше всего описывать языком, специально созданным для этого. Это отличает DSL от объектно-ориентированных языков, таких как например С++, Java и т.д. ОО язык позволяет создавать любые конструкции, DSL оперирует только понятиями предметной области. Поэтому последний имеет очень ограниченный синтаксис, не позволяющий ничего лишнего (например создание потоков, чтение файлов и т.д.)

Самая идея языков предметной области не нова. Уже давно используются макросы, shell-скрипты (grep, awk, yacc), язык для работы с базами данных SQL.

Мартин Фаулер в своей статье Языковой инструментарий: новая жизнь языков предметной области выделяет 2 типа языков предметной области: внешние и внутренние.

Внешними я называю те 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...

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

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

Фестиваль складався з двох частин: театральне дійство (битва за фортецю, змагання стрільців) и виступ 5-ти музичних гуртів. Перша частина починалась о 14-й годині, друга - о 18-й.



Хоча людей було не досить багато, мешканці Броварів намагалися підтримати всіх кто, приїхав на фестиваль словами:
Слыш волосатый, подстричься не хо?
Василь, а ну вийди покажи цим як нада битись!
Слыш, дай из лука пострелять
На этом фестивале собрались одни долбо...бы



Взагалі, перша частина була досить цікава, але доволі млява. Всім сподобався турнір на кращого бійця, коли один з бійців переміг спочатку одного іншого, потім одночасно двох. Битва за фортецю була цікава великою кількістю бійців. Але коли розпочалося змагання стрільців, люди почали розходитися. Мешенями для стрільців були 3 лицаря.



Деякі зі стрільців використовівали навіть бойові стріли.



Потім почалась музична частина. Перша з виступаючих груп майже не сприймалась слухачами. Але чи далі, тим меньше залишалося пива в магазині через дорогу і тим більше людей починало рухатись. Шалений успіх мали тільки Holy Blood та Тінь Сонця. Хоча їм чомусь досить сильно скоротили час виступу.

Взагалі фестиваль не був вражаючим, але і не таким, з якого зразу захотілось піти.

Read More...