Comments 43
спасибо. интересно.
или проще, вывать: выЗвать
или проще, вывать: выЗвать
+1
Красиво и лаконично — мне нравится :)
0
Кому действительно интересно в подробностях и профессионально: www.daniel-azuma.com/blog/view/z3bqa0t01uugg1/implementing_dsl_blocks
+1
Еще можно доклад с RubyConf посмотреть:
http://www.rubyconf2008.confreaks.com/advanced-dsls-in-ruby.html
Но это уже для углубленного изучения.
В топике я просто сделал обзор, чтобы показать возможности Ruby. Это больше для начинающих.
http://www.rubyconf2008.confreaks.com/advanced-dsls-in-ruby.html
Но это уже для углубленного изучения.
В топике я просто сделал обзор, чтобы показать возможности Ruby. Это больше для начинающих.
0
он становитЬся доступным
то они и вызовутЬся
но хочетЬся чтобы
который вызываетЬся
Тогда придетЬся
Во всех этих случаях мягкий знак не нужен.
то они и вызовутЬся
но хочетЬся чтобы
который вызываетЬся
Тогда придетЬся
Во всех этих случаях мягкий знак не нужен.
0
Не знал что у нас есть активисты в руби бухте. А кто ещё из Российских программистов активен на rubyforge?
0
а ruby становится всё популярнее. хорошо. теперь есть что почитать =)
+2
HAML & SASS тоже DSL или нет?
0
Нет, это уже языки разметки. Хотя формально язык разметки тоже можно назвать DSL.
В мире Ruby DSL чаще употребляется для специфического подмножества Ruby для решения какой либо задачи.
В мире Ruby DSL чаще употребляется для специфического подмножества Ruby для решения какой либо задачи.
0
Подразумевал более конкретный вопрос — являются ли они Internal Ruby DSL? Или это просто языки разметки с ruby-like синтаксисом?
0
Если не ошибаюсь, то там сначало html'ная(css'ная) часть просто транслируется в строки с html тэгами, а потом через eval выполняются вставки Ruby кода.
Так что это всеже просто язык разметки с Ruby вставками, как Erb например, только со своеобразным синтаксисом.
Так что это всеже просто язык разметки с Ruby вставками, как Erb например, только со своеобразным синтаксисом.
0
Ну а почему же тогда не пользуются DSL вроде вашего для этих целей, а пишут шаблонные языки типа HAML?
0
Наподобие моего тоже есть, например Markaby(один из первых) или Erector.
Просто эти метапрограммерские хитрости достаточно медленые.
Я сравнивал свой RML с HAML, проигрыш раз в 20. Правда я оптимизацией не занимался, но все же.
Так что скорей всего причина — скорость. В веб проектах скорость отрисовки шаблона критична.
Просто эти метапрограммерские хитрости достаточно медленые.
Я сравнивал свой RML с HAML, проигрыш раз в 20. Правда я оптимизацией не занимался, но все же.
Так что скорей всего причина — скорость. В веб проектах скорость отрисовки шаблона критична.
0
Потому что нельзя на Ruby сделать DSL столь же компактный как HAML. DSL это такая ложная серебряная пуля :)
Про скорость HAML vs Markaby, думаю, уже упоминали. Всему свое место.
Про скорость HAML vs Markaby, думаю, уже упоминали. Всему свое место.
0
Очень слабый пример DSL, даже анти-пример. Рассказали бы лучше на примере Rake.
0
Всмысле по ходу статьи создать Rake подобный DSL? Это было бы уже сложнее для восприятия, особенно новичками. А я именно на новичков и ориентировался, чтобы быстро и понятно продемонстрировать возможности Ruby.
+1
Для базового обзора DSL — самое то. Хотя, конечно, упомянуть более сложные и перспективные примеры было бы только плюсом.
+1
def String
def cool
self + " is cool!"
end
end
Ошибочка…
0
Я оформил ее как gem пакет, так что можно поставить так:
gem install rml
или на линуксах:
sudo gem install rml
Я один не понял этого момента?
gem install rml
или на линуксах:
sudo gem install rml
Я один не понял этого момента?
0
Rubygems это менеджер пакетов для Ruby. Позволяет просто создавать, распространять и устанавливать библиотеки.
Например:
Установить библиотеку для работы с mysql в локальный репозитарий.
Пакет с библиотекой(тот что устанавливается командой gem install) называется gem.
Могу написать статью про создание и использования gem'ов, если интересно.
Например:
gem install mysql
Установить библиотеку для работы с mysql в локальный репозитарий.
Пакет с библиотекой(тот что устанавливается командой gem install) называется gem.
Могу написать статью про создание и использования gem'ов, если интересно.
0
я не об этом. я о том, что первая строка отличается от второй только наличием там sudo. и при этом, она как бы «на линуксах». а первая тогда на чем?
я к тому, что и та и другая — абсолютно идентичные команды и обе подходят как на линуксы, так и на фрибзд/макось/солярку
я к тому, что и та и другая — абсолютно идентичные команды и обе подходят как на линуксы, так и на фрибзд/макось/солярку
0
я не об этом. я о том, что первая строка отличается от второй только наличием там sudo. и при этом, она как бы «на линуксах». а первая тогда на чем?
я к тому, что и та и другая — абсолютно идентичные команды и обе подходят как на линуксы, так и на фрибзд/макось/солярку
я к тому, что и та и другая — абсолютно идентичные команды и обе подходят как на линуксы, так и на фрибзд/макось/солярку
0
Первая для Windows, а на линуксах для записи пакета в локальный репозитарий требуются права рута.
По крайней мене на Debian и Ubuntu так.
>фрибзд/макось/солярку
Да, наверное правильнее написать на *nix'ах. Хоть под маком помойму можно и без рута ставить.
По крайней мене на Debian и Ubuntu так.
>фрибзд/макось/солярку
Да, наверное правильнее написать на *nix'ах. Хоть под маком помойму можно и без рута ставить.
0
Под маком тоже надо sudo. На мой взгляд, то, что для установки всяких system-wide штук нужен рутовый доступ — весьма очевидно. И указывать это отдельно — лишнее.
Таким образом, мы имеем одну команду для установки пакеты на все платформы. Даже если кому-то придет в голову запустить ее не из под рута, он получит весьма красноречивое сообщение об ошибке, которое расставит все точки на i.
Таким образом, мы имеем одну команду для установки пакеты на все платформы. Даже если кому-то придет в голову запустить ее не из под рута, он получит весьма красноречивое сообщение об ошибке, которое расставит все точки на i.
0
Хм, когда я свитчился на линукс, меня очень раздражало в различных статьях, что для команды, которой нужны рут права, явно это не указано. Например
Вопрос, почему бы не написать
Из этих соображений я две команды и написал:) Хотя, возможно я и не прав, могу убрать.
./configure make make install
Вопрос, почему бы не написать
sudo make install
? Новичку минут десять времени это сэкономит.Из этих соображений я две команды и написал:) Хотя, возможно я и не прав, могу убрать.
0
Потому что не рутом в системе можно только бровзить одноклассников и слушать верку сердючку.
Я подозреваю, что Убунта со своей дурацкой политикой безопасности породило целое поколение людей, которым надо объяснять, перед какой командой писать sudo.
Все остальные сами соображали, что любые мало-мальские осмысленные действия над системой делаются в рутовой консоли.
Я подозреваю, что Убунта со своей дурацкой политикой безопасности породило целое поколение людей, которым надо объяснять, перед какой командой писать sudo.
Все остальные сами соображали, что любые мало-мальские осмысленные действия над системой делаются в рутовой консоли.
+1
>что Убунта со своей дурацкой политикой безопасности
Есть такое дело. Но у нее задача — нести Linux в массы. А простому юзеру даже и не надо знать что есть рут:)
Есть такое дело. Но у нее задача — нести Linux в массы. А простому юзеру даже и не надо знать что есть рут:)
0
Почему в эппл так не думают? А массовости у Мак Ос в несколько раз больше, чем у убунты.
0
В эппл еще как думают. Простому юзеру в Мак Ос уже не надо знать что такое рут и вообще терминал открывать.:)
А «поставить библиотеку для языка программирования» — это задача уже чуть более продвинутая, чем для простого юзера.
А «поставить библиотеку для языка программирования» — это задача уже чуть более продвинутая, чем для простого юзера.
0
Я про то что Мак ОС идет в массы куда основательнее чем убунта. Но при этом убирать необходимость рута для системных операций никто не собирается. Более того, саму возможность зайти под рутом убрали, только sudo.
0
Просто исправьте «Линукс» на «Юникс» и добавьте, что первый вариант — для Windows, чтобы народ не нервничал ;)
0
Весьма интересно, спасибо. Хотя знал обо всех упомянутых возможностях Ruby, не думал о таком их использовании. Очень удобно.
Единственное замечание — по-моему, вполне можно было обойтись без расшифровки совсем уж базовых вещей типа attr_accessor: тем, кто не знаком с ними, эта статья всё равно пока не будет понятна.
Единственное замечание — по-моему, вполне можно было обойтись без расшифровки совсем уж базовых вещей типа attr_accessor: тем, кто не знаком с ними, эта статья всё равно пока не будет понятна.
+1
>>> Выше мы построили простой DSL, который является валидным Ruby кодом. Но можно отказаться от валидности. Например избавиться от точки.
Вот после этой фразы можно сделать вывод, что якобы «вкусности Ruby» для DSL и не вкусности вовсе, а корявый способ сделать то, что можно сделать проще. в скриптовых языках perl, php, python это тоже можно сделать примитивным препроцессингом и использованием конструкции типа eval.
Вот после этой фразы можно сделать вывод, что якобы «вкусности Ruby» для DSL и не вкусности вовсе, а корявый способ сделать то, что можно сделать проще. в скриптовых языках perl, php, python это тоже можно сделать примитивным препроцессингом и использованием конструкции типа eval.
-1
То, что мы уходим от валидности, делает наш DSL более близким к человеческому языку и он уже становиться BNL'ом(Business Natural Language).
Тут я просто показал как можно просто перейти от DSL к BNL.
Но BNL не всегда так удобен, как DSL(особенно для программистов).
Так что «вкусности Ruby» для DSL все-таки вкусности:)
Тут я просто показал как можно просто перейти от DSL к BNL.
Но BNL не всегда так удобен, как DSL(особенно для программистов).
Так что «вкусности Ruby» для DSL все-таки вкусности:)
0
статья заинтересовала, однако не понятно, что же дальше делать с этим comp…
Кстати проследовал по ссылке на документацию к rml, там в первой строчке каламбур получился.
RML is aimed to provide valid and only valid xhtml 1.0. It‘s mean, you got exception in runtime, if try to write not valid xhtml.
Дело в том, что mean в данном случае существительное и может быть переведено как «убогий», «противный». Выходит «противно, но вы получите исключение… » =)
Думается, имелось ввиду что-то типа «That means you'll get an exception at runtime if you try to write invalid xhtml»
Кстати проследовал по ссылке на документацию к rml, там в первой строчке каламбур получился.
RML is aimed to provide valid and only valid xhtml 1.0. It‘s mean, you got exception in runtime, if try to write not valid xhtml.
Дело в том, что mean в данном случае существительное и может быть переведено как «убогий», «противный». Выходит «противно, но вы получите исключение… » =)
Думается, имелось ввиду что-то типа «That means you'll get an exception at runtime if you try to write invalid xhtml»
0
>That means you'll get an exception at runtime if you try to write invalid xhtml
Да, это и подразумевалось:) Спасибо, сейчас исправлю.
>что же дальше делать с этим comp…
В результате у нас получился простой язык для создания описаний. Ему можно придумать массу применений. Ну например, дописав пару методов к классу Computer мы можем, экспортировать эти описания в различные форматы.
А потом оформить это как небольшую консольную утилиту. Пользователь может сделать описание и экспортировать в различные форматы
Потом это описание в подпись на форум поставить или еще куда.
Но это просто синтетический пример для демонстрации. А вобще, DSL очень широко распространены в Ruby библиотеках. Например, тот же Rake это DSL, или как я упоминал в статье в Rails используется DSL, и тд.
Да, это и подразумевалось:) Спасибо, сейчас исправлю.
>что же дальше делать с этим comp…
В результате у нас получился простой язык для создания описаний. Ему можно придумать массу применений. Ну например, дописав пару методов к классу Computer мы можем, экспортировать эти описания в различные форматы.
class Computer def to_html; end def to_pdf; end def to_xls; end end
А потом оформить это как небольшую консольную утилиту. Пользователь может сделать описание и экспортировать в различные форматы
conf2html my_comp.conf my_comp.html
Потом это описание в подпись на форум поставить или еще куда.
Но это просто синтетический пример для демонстрации. А вобще, DSL очень широко распространены в Ruby библиотеках. Например, тот же Rake это DSL, или как я упоминал в статье в Rails используется DSL, и тд.
0
Sign up to leave a comment.
DSL и динамические вкусности Ruby