<div>Вообще-то я тут вижу не сложность, а наоборот, простоту. Очень удобно определять, переопределять и использовать что-либо, когда удобно, и без всяких хаков.</div><div><br></div><div>Как верно заметил Егор, основной смысл - для создания языков любой предметной области на основе Ruby.</div>
<div><br></div><div>Синтаксис ActiveRecord (одна из ORM):</div><div><br></div><div>class Event &lt; ActiveRecord::Base</div><div>  validates_format_of :email, :regexp =&gt; /^\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 =&gt; [:submodule_init, :configure] do</div><div>  ...</div><div>end</div><div><br></div><div>Синтаксис Chef (замена Puppet, CFusion):</div>
<div><br></div><div>package &quot;libcurl&quot; do</div><div>  action :upgrade</div><div>  notifies :restart, resources(:service =&gt; :our_uploader)</div><div>end</div><div><br></div><div>directory &quot;/etc/brix&quot; do</div>
<div>  mode 0770</div><div>  owner &quot;root&quot;</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, &#39;Courier New&#39;, &#39;DejaVu Sans Mono&#39;, &#39;Bitstream Vera Sans Mono&#39;, 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, &#39;Courier New&#39;, &#39;DejaVu Sans Mono&#39;, &#39;Bitstream Vera Sans Mono&#39;, 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(&quot;app_name&quot;) do |app|
  app.process(&quot;process_name&quot;) do |process|
    process.start_command = &quot;/usr/bin/some_start_command&quot;
    process.pid_file = &quot;/tmp/some_pid_file.pid&quot;
    process.uid = &quot;deploy&quot;
    process.gid = &quot;deploy&quot;

    process.checks :cpu_usage, :every =&gt; 10.seconds, :below =&gt; 5, :times =&gt; 3        
    process.checks :mem_usage, :every =&gt; 10.seconds, :below =&gt; 100.megabytes, :times =&gt; [3,5]
  end
end</code></pre></span><div>И так далее...</div><br><div class="gmail_quote">2 мая 2010 г. 10:01 пользователь Alexander Lourier <span dir="ltr">&lt;<a href="mailto:aml@rulezz.ru">aml@rulezz.ru</a>&gt;</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>
&gt; К сожалению, сам постулат неверен. До возможностей метапрограммирования в<br>
&gt; Ruby далековато пока.<br>
&gt;<br>
&gt; Ведь само описание класса в Ruby является объектом и уже исполняется, со<br>
&gt; всеми вытекающими.<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>