<div>Вообще-то я тут вижу не сложность, а наоборот, простоту. Очень удобно определять, переопределять и использовать что-либо, когда удобно, и без всяких хаков.</div><div><br></div><div>Как верно заметил Егор, основной смысл - для создания языков любой предметной области на основе Ruby.</div>
<div><br></div><div>Синтаксис ActiveRecord (одна из ORM):</div><div><br></div><div>class Event < ActiveRecord::Base</div><div> validates_format_of :email, :regexp => /^\w+\@\w(?:\.\w+)*$/ # это пример</div><div> after_update :rework_self</div>
<div> after_update :notify_people</div><div><br></div><div> def rework_self</div><div> # work</div><div> end</div><div><br></div><div> def notify_people</div><div> # work</div><div> end</div><div>end</div><div>
<br></div><div>Синтаксис Rake (замена make etc.):</div><div><br></div><div>task :compile => [:submodule_init, :configure] do</div><div> ...</div><div>end</div><div><br></div><div>Синтаксис Chef (замена Puppet, CFusion):</div>
<div><br></div><div>package "libcurl" do</div><div> action :upgrade</div><div> notifies :restart, resources(:service => :our_uploader)</div><div>end</div><div><br></div><div>directory "/etc/brix" do</div>
<div> mode 0770</div><div> owner "root"</div><div>end</div><div><br></div><div>Синтаксис Bluepill:</div><div><span class="Apple-style-span" style="font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 19px; line-height: 26px; "><pre style="margin-top: 1em !important; margin-right: 0px !important; margin-bottom: 1em !important; margin-left: 0px !important; padding-top: 0.5em !important; padding-right: 0.5em !important; padding-bottom: 0.5em !important; padding-left: 0.5em !important; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.5em !important; font-size: 17px; background-color: rgb(248, 248, 255) !important; border-top-width: 1px !important; border-right-width: 1px !important; border-bottom-width: 1px !important; border-left-width: 1px !important; border-top-style: solid !important; border-right-style: solid !important; border-bottom-style: solid !important; border-left-style: solid !important; border-top-color: rgb(222, 222, 222) !important; border-right-color: rgb(222, 222, 222) !important; border-bottom-color: rgb(222, 222, 222) !important; border-left-color: rgb(222, 222, 222) !important; color: rgb(68, 68, 68) !important; overflow-x: auto !important; overflow-y: auto !important; ">
<code style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px !important; padding-right: 0px !important; padding-bottom: 0px !important; padding-left: 0px !important; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; font-size: 17px; background-color: rgb(248, 248, 255) !important; color: rgb(68, 68, 68) !important; border-top-width: 1px !important; border-right-width: 1px !important; border-bottom-width: 1px !important; border-left-width: 1px !important; border-top-style: none !important; border-right-style: none !important; border-bottom-style: none !important; border-left-style: none !important; border-top-color: rgb(222, 222, 222) !important; border-right-color: rgb(222, 222, 222) !important; border-bottom-color: rgb(222, 222, 222) !important; border-left-color: rgb(222, 222, 222) !important; border-width: initial !important; border-color: initial !important; ">Bluepill.application("app_name") do |app|
app.process("process_name") do |process|
process.start_command = "/usr/bin/some_start_command"
process.pid_file = "/tmp/some_pid_file.pid"
process.uid = "deploy"
process.gid = "deploy"
process.checks :cpu_usage, :every => 10.seconds, :below => 5, :times => 3
process.checks :mem_usage, :every => 10.seconds, :below => 100.megabytes, :times => [3,5]
end
end</code></pre></span><div>И так далее...</div><br><div class="gmail_quote">2 мая 2010 г. 10:01 пользователь Alexander Lourier <span dir="ltr"><<a href="mailto:aml@rulezz.ru">aml@rulezz.ru</a>></span> написал:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">В сообщении от Пятница 30 апреля 2010 18:33:40 автор Akzhan Abdulin написал:<br>
<div class="im"><br>
> К сожалению, сам постулат неверен. До возможностей метапрограммирования в<br>
> Ruby далековато пока.<br>
><br>
> Ведь само описание класса в Ruby является объектом и уже исполняется, со<br>
> всеми вытекающими.<br>
<br>
</div>А скажите, пожалуйста, не флейма ради, есть ли практическая выгода от<br>
использования таких сложных возможностей языка? Зачем может потребоваться<br>
наследование от объекта с переопределёнными методами? Сможет, скажем,<br>
программист сопровождения найти ошибки в этом коде (и сколько у него времени<br>
на это уйдет), если разработчик к тому времени будет недоступен?<br>
<br>
В перле использование всякой экзотики обычно ограничивается хаками, которые<br>
полностью скрываются интерфейсом модуля. Никого особо не интересует, как<br>
внутри устроен профайлер, хотя там бывает страшно и вообще write-only.<br>
<div><div></div><div class="h5">--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
</div></div></blockquote></div><br></div>