<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Últimas mensagens do tópico "Monkeypatching is Destroying Ruby"]]></title>
		<link>http://www.guj.com.br/posts/list/21.java</link>
		<description><![CDATA[Últimas mensagens enviadas no tópico "Monkeypatching is Destroying Ruby"]]></description>
		<generator>JForum - http://www.jforum.net</generator>
			<item>
				<title>Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote][...] To the point that smart, experienced hackers reach for a monkey patch as their tool of first resort, even when a simpler, more traditional solution is possible.<br /> <br /> I don?t believe this situation to be sustainable.  Where I work, we are already seeing subtle, difficult-to-debug problems crop up as the result of monkey patching in plugins.  Patches interact in unpredictable, combinatoric ways.  And by their nature, bugs caused by monkey patches  are more difficult to track down than those introduced by more traditional classes and methods.  As just one example: on one project, it was a known caveat that we could not rely on class inheritable attributes as provided by ActiveSupport.  No one knew why.  Every Model we wrote had to use awkward workarounds.  Eventually we tracked it down in a plugin that generated admin consoles.  It was overwriting Class.inherited().  It took us months to find this out.[/quote]<br /> <br /> <a class="snap_shots" href="http://avdi.org/devblog/2008/02/23/why-monkeypatching-is-destroying-ruby/" target="_blank" rel="nofollow">http://avdi.org/devblog/2008/02/23/why-monkeypatching-is-destroying-ruby/</a><br /> <br /> Eu acho que monkey patching é algo abusado em Ruby. O problema é que o esquema de bindings em Ruby é muito ruim, você não tem como criar blocos de escopo arbitrários ou fazer como em Scala e limitar o escopo de um patch. Eu já tive problemas sérios com 1.minute e conflito entre patches.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/442241.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/442241.java</link>
				<pubDate><![CDATA[Mon, 25 Feb 2008 09:50:17]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ O pessoal do zope/plone é um ótimo exemplo de onde monkey patching pode levar. Na minha opnião utilizar isso é prática ruim e detona não só ruby mas qualque linguagem que suporte isso.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/445804.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/445804.java</link>
				<pubDate><![CDATA[Sat, 1 Mar 2008 01:58:13]]> GMT</pubDate>
				<author><![CDATA[ faq]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=faq]O pessoal do zope/plone é um ótimo exemplo de onde monkey patching pode levar. Na minha opnião utilizar isso é prática ruim e detona não só ruby mas qualque linguagem que suporte isso.[/quote]<br /> <br /> Sei la, eu acho a alternativa bem pior.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/445806.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/445806.java</link>
				<pubDate><![CDATA[Sat, 1 Mar 2008 02:35:01]]> GMT</pubDate>
				<author><![CDATA[ cv]]></author>
			</item>
			<item>
				<title>Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ Mas qual seria a alternativa?]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/445819.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/445819.java</link>
				<pubDate><![CDATA[Sat, 1 Mar 2008 07:14:46]]> GMT</pubDate>
				<author><![CDATA[ Mauricio Linhares]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ Em Ruby não dá para fazer muito. Você bsicamente pode usar monkey patching para alterar as classes core ou fazer algo no estilo Java onde você tem uma gerência de dependências estáticas, onde um inteiro não pode ser independente de Date em compile time e integrado em runtime.<br /> <br /> O problema é que as reras de escopo em Ruby são arcaicas considerando as capacidades de metaprogramação da linguagem. Tudo é muito global e muito irreversível.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/445823.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/445823.java</link>
				<pubDate><![CDATA[Sat, 1 Mar 2008 07:40:27]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ Algo como cflow e cflowbelow do AspectJ já me deixariam feliz <img src="http://www.guj.com.br/images/smilies/3b63d1616c5dfcf29f8a7a031aaa7cad.gif" border="0">]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/445824.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/445824.java</link>
				<pubDate><![CDATA[Sat, 1 Mar 2008 07:41:44]]> GMT</pubDate>
				<author><![CDATA[ Mauricio Linhares]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ Scala tem uma ótima saída para isso, com conversões implícitas, e Lisp tem bloco léxicos hierárquicos com LET há décadas. Acho que simplesmente ningu'm pensou que ia precisar disso e como consequência você tem monkey patching e namespace wars.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/445826.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/445826.java</link>
				<pubDate><![CDATA[Sat, 1 Mar 2008 07:46:08]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ Ruby tem duas coisas que melam a vida de quem quer fazer metaprogramação mais hardcode. Não existe como sobrescrever o mecanismo de resolução de nomes e tão pouco como definir escopos no qual alterações a classes acontecem.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/446077.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/446077.java</link>
				<pubDate><![CDATA[Sun, 2 Mar 2008 10:17:02]]> GMT</pubDate>
				<author><![CDATA[ louds]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=louds]Ruby tem duas coisas que melam a vida de quem quer fazer metaprogramação mais hardcode. Não existe como sobrescrever o mecanismo de resolução de nomes e tão pouco como definir escopos no qual alterações a classes acontecem.[/quote]<br /> <br /> A/C <br /> <br /> Louds (Moderador GUJ)<br />  <br /> Por gentileza, conforme sua explicação,  postei a URL abaixo, porque não compreendi tais afirmações sobre Ruby metaprogramação, o que você quer dizer sobre [b]mais hardcode[/b], [b]mecanismo de resolução de nomes , etc ...<br /> <br />  <img src="http://www.guj.com.br/images/smilies/8f7fb9dd46fb8ef86f81154a4feaada9.gif" border="0"> Poderia finalizar colocando melhor transparência ao assunto, sitando melhores detalhes sobre tal concepção.[/b]<br /> <br />  <img src="http://www.guj.com.br/images/smilies/d6741711aa045b812616853b5507fd2a.gif" border="0"> [url]http://www.guj.com.br/posts/list/83661.java[/url] <br /> <br /> Att. <br /> Marcio Duran]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/446227.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/446227.java</link>
				<pubDate><![CDATA[Sun, 2 Mar 2008 20:20:41]]> GMT</pubDate>
				<author><![CDATA[ Marcio Duran]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ Simples, crocodilo, como você faz e quiser definir um método seu, que você criou e faz algo que só você precisa, chamado "times" em Fixnum se você usa Rails?]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/446293.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/446293.java</link>
				<pubDate><![CDATA[Mon, 3 Mar 2008 06:18:32]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=pcalcado]você não tem como criar blocos de escopo arbitrários[/quote]<br /> intance_eval tem resolvido bem a minha vida:<br /> [code]<br /> def ei_vc(&bloco)<br />   MeuEscopo.new.instance_eval(&bloco)<br /> end<br /> <br /> ei_vc do<br />   qualquer<br />   coisa<br /> end<br /> <br /> class MeuEscopo<br />   def qualquer<br />     # ...<br />   end<br />   def coisa<br />     # ...<br />   end<br />   # ...<br /> end<br /> [/code]<br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/446603.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/446603.java</link>
				<pubDate><![CDATA[Mon, 3 Mar 2008 14:16:11]]> GMT</pubDate>
				<author><![CDATA[ Fabio Kung]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=Marcio Duran][quote=louds]Ruby tem duas coisas que melam a vida de quem quer fazer metaprogramação mais hardcode. Não existe como sobrescrever o mecanismo de resolução de nomes e tão pouco como definir escopos no qual alterações a classes acontecem.[/quote]<br /> A/C <br /> Louds (Moderador GUJ)<br /> Por gentileza, conforme sua explicação,  postei a URL abaixo, porque não compreendi tais afirmações sobre Ruby metaprogramação,[/quote]<br /> <br /> O Louds está falando em um nível que é umas duas ordens de grandeza maiores que você pode compreender. Se quiser entender melhor o que ele fala, por favor, sr. Duran, aprenda outras linguagens de programação e um bocadinho de matemática, para que você não reduza Ruby a uma mera "linguagem orientada a objetos", com você postou aqui no GUJ <img src="http://www.guj.com.br/images/smilies/69934afc394145350659cd7add244ca9.gif" border="0"> <br /> <br /> E leia um pouco mais - [url=http://pt.wikipedia.org/wiki/Sitar]sitar[/url] é um instrumento musical de origem árabe; acredito que você queria dizer "citar".<br /> [img]http://upload.wikimedia.org/wikipedia/commons/thumb/2/2c/Sitar_1.gif/200px-Sitar_1.gif[/img] <br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/446647.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/446647.java</link>
				<pubDate><![CDATA[Mon, 3 Mar 2008 15:00:43]]> GMT</pubDate>
				<author><![CDATA[ thingol]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [jaba mode on]<br /> Meu comentário sobre isso ficou muito grande e acabei colocando ele no meu blog<br /> [url]http://www.kumpera.net/blog/index.php/2008/03/03/monkeypatching-gambiarra-du-jour/[/url]<br /> [jaba mode off]]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/446772.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/446772.java</link>
				<pubDate><![CDATA[Mon, 3 Mar 2008 16:56:03]]> GMT</pubDate>
				<author><![CDATA[ louds]]></author>
			</item>
			<item>
				<title>Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=Fabio Kung][quote=pcalcado]você não tem como criar blocos de escopo arbitrários[/quote]<br /> intance_eval tem resolvido bem a minha vida:<br /> [/quote]<br /> <br /> Aind anão adianta. Em outro tópico eu citei uma DSL de testes usando RSpec e Selenium, nessa DSL tivemos que azer os objetos de domínio incluírem módulos do RSpec para que pudéssemos usar pending e outros métodos dentro dos nossos blocos que não são closures.<br /> <br /> Ruby precisava ter bindings hierárquicos. Hoje em Ruby você so consegue avaliar algo em dois níveis, o primeiro (como intance_eval) e o Object/Kernel.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/446786.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/446786.java</link>
				<pubDate><![CDATA[Mon, 3 Mar 2008 17:30:50]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ e vc não consegue fazer isso decorando os caras só no escopo do bloco?<br /> <br /> algo como o jmock faz em java:<br /> [code]<br /> {<br />   one(obj).pending()...<br /> }<br /> [/code]<br /> Tudo bem, pode dar uma trabalheira, mas acho que funciona.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/446799.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/446799.java</link>
				<pubDate><![CDATA[Mon, 3 Mar 2008 17:49:29]]> GMT</pubDate>
				<author><![CDATA[ Fabio Kung]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ Desculpa, Fábio, boiei. Decorando o que?]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/446803.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/446803.java</link>
				<pubDate><![CDATA[Mon, 3 Mar 2008 17:54:13]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=pcalcado][quote=Fabio Kung][quote=pcalcado]você não tem como criar blocos de escopo arbitrários[/quote]<br /> intance_eval tem resolvido bem a minha vida:<br /> [/quote]<br /> <br /> Aind anão adianta. Em outro tópico eu citei uma DSL de testes usando RSpec e Selenium, nessa DSL tivemos que azer os objetos de domínio incluírem módulos do RSpec para que pudéssemos usar pending e outros métodos dentro dos nossos blocos que não são closures.<br /> <br /> Ruby precisava ter bindings hierárquicos. Hoje em Ruby você so consegue avaliar algo em dois níveis, o primeiro (como intance_eval) e o Object/Kernel.[/quote]<br /> <br /> Não precisa ter binding hierárquico, basta ter binding extensível.<br /> <br /> [code]<br /> code = proc {|a| print a.d }<br /> <br /> context_eval(proc) do |obj, name| <br />  return "d é mais legal" if name == :d<br />  obj.send (name)<br /> end<br /> [/code]<br /> <br /> Com isso é trivial implementar instance_eval module_eval e por ai vai. Para completar permita configurar um bloco padrão de resolução por Modulo/classe/método e adicione a possibilidade de andar na pilha e recuperar um bloco que resolva nomes de acordo com o método em questão.  Com essas três coisas basicamente tudo que reclamam sobre meta-programação em Ruby tem solução simples.<br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/446806.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/446806.java</link>
				<pubDate><![CDATA[Mon, 3 Mar 2008 17:58:03]]> GMT</pubDate>
				<author><![CDATA[ louds]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ Exemplo do problema:<br /> <br /> [code]<br /> class A<br /> <br /> def bazooka<br />  @a = "BOOOOM"<br />  B.new.fire {puts @a}<br /> end<br /> end<br /> <br /> class B<br /> <br /> def fire(&block)<br />  instance_eval &block<br /> end<br /> <br /> end<br /> <br /> A.new.bazooka #boom?<br /> [/code]<br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/446807.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/446807.java</link>
				<pubDate><![CDATA[Mon, 3 Mar 2008 18:01:03]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=louds]Não precisa ter binding hierárquico, basta ter binding extensível.[/quote]<br /> <br /> Eu diria que não precisava ter binding extensível, bastava ter binding hierárquico que é mais limitado, provavelmente mais fácil de implementar e ainda assim eficiente na maioria dos casos.<br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/446810.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/446810.java</link>
				<pubDate><![CDATA[Mon, 3 Mar 2008 18:03:54]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=pcalcado]Desculpa, Fábio, boiei. Decorando o que?[/quote]<br /> Eu acho que eu to boiando. Pensei numas coisas doidas aqui, mas só consigo explicar direito vendo o que vc quer fazer.<br /> <br /> Procurei o seu tópico da selenium dsl (e pending) e não achei (link?). Posta um snippet?]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/446826.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/446826.java</link>
				<pubDate><![CDATA[Mon, 3 Mar 2008 19:08:19]]> GMT</pubDate>
				<author><![CDATA[ Fabio Kung]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ Aqui:<br /> <br /> <a class="snap_shots" href="http://www.guj.com.br/posts/list/45/83613" target="_blank" rel="nofollow">http://www.guj.com.br/posts/list/45/83613</a><br /> <br /> O método 'On &lt;pagina&gt; do {stuff}'faz um instance_eval. azendo isso ele perde o contexto do bloco describe do RSpec, perdendo então o acesso ao m'todo pending().Como pending e stateless a coisa foi resolvida fazendo o cara que implementa o método on() incluir o módulo que declara pending. Uma bela gambiarra <img src="http://www.guj.com.br/images/smilies/69934afc394145350659cd7add244ca9.gif" border="0"> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/446838.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/446838.java</link>
				<pubDate><![CDATA[Mon, 3 Mar 2008 19:43:49]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=louds]Ruby tem duas coisas que melam a vida de quem quer fazer metaprogramação mais hardcode. Não existe como sobrescrever o mecanismo de resolução de nomes e tão pouco como definir escopos no qual alterações a classes acontecem.[/quote]<br /> louds, vc tá cheio de fans:<br /> <br /> <a class="snap_shots" href="http://forum.rubyonbr.org/forums/1/topics/2783" target="_blank" rel="nofollow">http://forum.rubyonbr.org/forums/1/topics/2783</a><br /> <a class="snap_shots" href="http://forum.rubyonbr.org/forums/1/topics/2766" target="_blank" rel="nofollow">http://forum.rubyonbr.org/forums/1/topics/2766</a><br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/446844.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/446844.java</link>
				<pubDate><![CDATA[Mon, 3 Mar 2008 20:03:04]]> GMT</pubDate>
				<author><![CDATA[ Fabio Kung]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ Oi, gente,<br /> <br /> Eu tô discutindo lá no outro fórum e esse menino falou isso. Será que vocês podem me audar a responder ele? Sabe, ele fica me sacaneando e eu quero dar o troco...]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/446845.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/446845.java</link>
				<pubDate><![CDATA[Mon, 3 Mar 2008 20:05:13]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=pcalcado]Aqui:<br /> <br /> http://www.guj.com.br/posts/list/45/83613.java#446292<br /> <br /> O método 'On &lt;pagina&gt; do {stuff}'faz um instance_eval. azendo isso ele perde o contexto do bloco describe do RSpec, perdendo então o acesso ao m'todo pending().Como pending e stateless a coisa foi resolvida fazendo o cara que implementa o método on() incluir o módulo que declara pending. Uma bela gambiarra :P [/quote]<br /> <br /> Tá, agora entendi. Que tal algo do tipo:<br /> [code]<br /> module SeleniumOperations<br />   def search_for() ... end<br />   def filter_by() ... end<br /> end<br /> <br /> def on(pagina, &stuff)<br />   extend SeleniumOperations<br />   instance_eval(&stuff)<br /> end<br /> [/code]<br /> <br /> Isso não cria o escopo novo e acho que resolveria o seu problema. Só acho que não ataca o problema maior que eu ainda não consegui capturar de você! ;)]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/446858.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/446858.java</link>
				<pubDate><![CDATA[Mon, 3 Mar 2008 20:32:48]]> GMT</pubDate>
				<author><![CDATA[ Fabio Kung]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ Soluciona o problema porque você etá usando funções apenas, não objetos. Que tal:<br /> <br /> <br /> [code]<br /> class A<br />  def initialize<br />   @abc =122<br />  end<br /> <br />  def hehe<br />   B.new.huhuhu {p @abc; p bwawawawawa}<br />  end<br /> end<br /> <br /> class B<br />  def huhuhu(&block)<br />   instance_eval &block<br />  end<br /> <br />  def bwawawawawa<br />   'risada maquiavelica'<br />  end<br /> end<br /> <br /> A.new.hehehe<br /> [/code]<br /> <br /> <br /> Eu quero que meu bloco tenha acesso ao escopo de B para poder usar o metodo bwawawawawa() mas ao mesmo tempo tenha acesso ao escopo original, para poder acessar @abc (ou um étodo que retorne abc, tanto faz).<br /> <br /> Se não fosse por A ter estado eu poderia incluir B em A, o que seria gambiarra mas funcionaria e é o que fizemos com selenium. Este tipo de situação surge o tempo todo com [url=http://fragmental.tw/research-on-dsls/domain-specific-languages-dsls/internal-dsls/]internal DSLs[/url].]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/446866.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/446866.java</link>
				<pubDate><![CDATA[Mon, 3 Mar 2008 20:52:43]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=thingol]<br /> O Louds está falando em um nível que é umas duas ordens de grandeza maiores que você pode compreender. Se quiser entender melhor o que ele fala, por favor, sr. Duran, aprenda outras linguagens de programação e um bocadinho de matemática, para que você não reduza Ruby a uma mera "linguagem orientada a objetos", com você postou aqui no GUJ <img src="http://www.guj.com.br/images/smilies/69934afc394145350659cd7add244ca9.gif" border="0"> <br /> <br /> E leia um pouco mais - [url=http://pt.wikipedia.org/wiki/Sitar]sitar[/url] é um instrumento musical de origem árabe; acredito que você queria dizer "citar".<br /> [img]http://upload.wikimedia.org/wikipedia/commons/thumb/2/2c/Sitar_1.gif/200px-Sitar_1.gif[/img] <br /> <br /> [/quote]<br /> <br /> Presta atenção nas respostas e perguntas aqui sendo feitas, e tenta aprender alguma coisa que não seja uma cegueira de falta do seu conhecimento, que já vem se passando despercebido.Outra coisa use mensagens privadas para falar sobre mim, isso é mais apropriado, é por isso que o GUJ tem esse recurso.Aqui o assunto é Ruby.<br /> Outra coisa as pessoas sabem se representar, não precisam de segunda voz.<br /> "Em relação a citar e sitar, pra um ignorante como você tudo passa ser uma coisa só "]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/447029.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/447029.java</link>
				<pubDate><![CDATA[Tue, 4 Mar 2008 08:58:28]]> GMT</pubDate>
				<author><![CDATA[ Marcio Duran]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=Marcio Duran]... falta do seu conhecimento que já vem se passando despercebido.Outra coisa use mensagens privadas para falar sobre mim, isso é mais apropriado, e por isso que o GUJ tem esse recurso.Aqui o assunto é Ruby[/quote]<br /> <br /> Ainda bem que a "falta de conhecimento" do thingol "já vem se passando despercebido", porque se alguém percebesse que ele não tem conhecimento em alguma coisa, de certo é algo que estava escondido nos confins do universo <img src="http://www.guj.com.br/images/smilies/69934afc394145350659cd7add244ca9.gif" border="0">]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/447036.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/447036.java</link>
				<pubDate><![CDATA[Tue, 4 Mar 2008 09:04:27]]> GMT</pubDate>
				<author><![CDATA[ Mauricio Linhares]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=Maurício Linhares]<br /> confins do universo <img src="http://www.guj.com.br/images/smilies/69934afc394145350659cd7add244ca9.gif" border="0">[/quote]<br /> <br /> Você bem que podia ficar lá, o assunto aqui é Ruby.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/447041.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/447041.java</link>
				<pubDate><![CDATA[Tue, 4 Mar 2008 09:07:05]]> GMT</pubDate>
				<author><![CDATA[ Marcio Duran]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ Ué, onde está essa mensagem que o Marcio Duran se referiu?]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/447043.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/447043.java</link>
				<pubDate><![CDATA[Tue, 4 Mar 2008 09:08:30]]> GMT</pubDate>
				<author><![CDATA[ tnaires]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=tnaires]Ué, onde está essa mensagem que o Marcio Duran se referiu?[/quote]<br /> <br /> "Acho não caiu a ficha em você"]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/447049.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/447049.java</link>
				<pubDate><![CDATA[Tue, 4 Mar 2008 09:19:32]]> GMT</pubDate>
				<author><![CDATA[ Marcio Duran]]></author>
			</item>
			<item>
				<title>Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ Márcio, por favor, não desvie o assunto do tópico. Se você tiver alguma coisa a acrescentar de útil a este tópico, por favor, faça-o. Caso contrário, evite postar mensagens fora do assunto central do tópico. Como você mesmo disse, existem mensagens privadas para isso. Assunto encerrado.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/447092.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/447092.java</link>
				<pubDate><![CDATA[Tue, 4 Mar 2008 09:54:47]]> GMT</pubDate>
				<author><![CDATA[ Daniel Quirino Oliveira]]></author>
			</item>
			<item>
				<title>Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=Daniel Quirino Oliveira]Márcio, por favor, não desvie o assunto do tópico. Se você tiver alguma coisa a acrescentar de útil a este tópico, por favor, faça-o. Caso contrário, evite postar mensagens fora do assunto central do tópico. Como você mesmo disse, existem mensagens privadas para isso. Assunto encerrado.[/quote]<br /> <br /> Peço a genteliza de passar essa mensagem aos demais que estão fazendo-o tamanha bossalidade e simplesmente vem de faixada aqui, e que não estão explorando o assunto.<br /> <br /> Como disse questionei, o Louds por suas afirmações todavia as mesmas estão sendo questionadas aqui, não tomo partido por ninguem e eu espero que você faça o mesmo. <br /> <br /> Att.<br /> Marcio Duran]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/447115.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/447115.java</link>
				<pubDate><![CDATA[Tue, 4 Mar 2008 10:08:31]]> GMT</pubDate>
				<author><![CDATA[ Marcio Duran]]></author>
			</item>
			<item>
				<title>Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ Voltando ao tópico.<br /> <br /> Marcio Duran, o que você não entendeu mesmo ?<br /> Tem tantas referencias ali que já não sei mais.<br /> <br /> Sobre metaprogramação , resolução de nomes ?]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/447134.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/447134.java</link>
				<pubDate><![CDATA[Tue, 4 Mar 2008 10:19:27]]> GMT</pubDate>
				<author><![CDATA[ nbluis]]></author>
			</item>
			<item>
				<title>Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=nbluis]Voltando ao tópico.<br /> <br /> Marcio Duran, o que você não entendeu mesmo ?<br /> Tem tantas referencias ali que já não sei mais.<br /> <br /> Sobre metaprogramação , resolução de nomes ?[/quote]<br /> <br /> Veja a afirmação do Louds sobre Escopo..., não entendi...]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/447142.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/447142.java</link>
				<pubDate><![CDATA[Tue, 4 Mar 2008 10:25:00]]> GMT</pubDate>
				<author><![CDATA[ Marcio Duran]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=pcalcado]<br /> <br /> Eu quero que meu bloco tenha acesso ao escopo de B para poder usar o metodo bwawawawawa() mas ao mesmo tempo tenha acesso ao escopo original, para poder acessar @abc (ou um étodo que retorne abc, tanto faz).<br /> <br /> Se não fosse por A ter estado eu poderia incluir B em A, o que seria gambiarra mas funcionaria e é o que fizemos com selenium. Este tipo de situação surge o tempo todo com DSLs.[/quote]<br /> <br /> Uma dúvida, se você casar um par de instance eval/ module_eval para instancias de definem apenas os *_missing não é possivel capturar todos bindings?]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/447153.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/447153.java</link>
				<pubDate><![CDATA[Tue, 4 Mar 2008 10:37:13]]> GMT</pubDate>
				<author><![CDATA[ louds]]></author>
			</item>
			<item>
				<title>Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=Marcio Duran]<br /> Veja a afirmação do Louds sobre Escopo..., não entendi...[/quote]<br /> <br /> Isso é exatamente o que está sendo discutido no tópico.<br /> Este tópico tem um assunto mais complexo do que se está acostumado por ai.<br /> <br /> Falam sobre o escopo de blocos dentro de ruby. Veja os exemplos do shoes que estão bem esplicados.<br /> <br /> E inclusive a impossibilidade de limitar escopo de alterações feitas no core da linguagem possibilitada pelas classes abertas. <br /> <br /> O [url=http://www.kumpera.net/blog/index.php/2008/03/03/monkeypatching-gambiarra-du-jour/]post do louds sobre monkeypatching[/url] ficou bem legal.<br /> Dá uma lida alí.<br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/447156.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/447156.java</link>
				<pubDate><![CDATA[Tue, 4 Mar 2008 10:38:27]]> GMT</pubDate>
				<author><![CDATA[ nbluis]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=pcalcado]Soluciona o problema porque você etá usando funções apenas, não objetos. Que tal:<br /> <br /> <br /> [code]<br /> class A<br />  def initialize<br />   @abc =122<br />  end<br /> <br />  def hehe<br />   B.new.huhuhu {p @abc; p bwawawawawa}<br />  end<br /> end<br /> <br /> class B<br />  def huhuhu(&block)<br />   instance_eval &block<br />  end<br /> <br />  def bwawawawawa<br />   'risada maquiavelica'<br />  end<br /> end<br /> <br /> A.new.hehehe<br /> [/code]<br /> <br /> <br /> Eu quero que meu bloco tenha acesso ao escopo de B para poder usar o metodo bwawawawawa() mas ao mesmo tempo tenha acesso ao escopo original, para poder acessar @abc (ou um étodo que retorne abc, tanto faz).<br /> <br /> Se não fosse por A ter estado eu poderia incluir B em A, o que seria gambiarra mas funcionaria e é o que fizemos com selenium. Este tipo de situação surge o tempo todo com DSLs.[/quote]<br /> <br /> Emulemos então o binding hierárquico!<br /> [code]<br /> class A<br />   def pele<br />     &quot;aaabbbbccc&quot;<br />   end<br /> <br />   def hehe<br />     B.new.huhuhu(self) {p pele; p bwawawawawa}<br />   end<br /> end  <br /> <br /> class B  <br />   def huhuhu(parent_context, &block)<br />     (class &lt;&lt; self; self; end).send(:define_method, :method_missing) do |method, *args|<br />       parent_context.send(method, *args)<br />     end<br />     instance_eval &block<br />   end  <br /> <br />   def bwawawawawa  <br />     'risada maquiavelica'  <br />   end  <br /> end  <br /> <br /> A.new.hehe<br /> [/code]<br /> Agoro Ruby, e adoro metaprogramação! :twisted: <br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/447261.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/447261.java</link>
				<pubDate><![CDATA[Tue, 4 Mar 2008 12:41:14]]> GMT</pubDate>
				<author><![CDATA[ Fabio Kung]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=Fabio Kung]<br /> Emulemos então o binding hierárquico!<br /> [code]<br /> class A<br />   def pele<br />     &quot;aaabbbbccc&quot;<br />   end<br /> <br />   def hehe<br />     B.new.huhuhu(self) {p pele; p bwawawawawa}<br />   end<br /> end  <br /> <br /> class B  <br />   def huhuhu(parent_context, &block)<br />     (class &lt;&lt; self; self; end).send(:define_method, :method_missing) do |method, *args|<br />       parent_context.send(method, *args)<br />     end<br />     instance_eval &block<br />   end  <br /> <br />   def bwawawawawa  <br />     'risada maquiavelica'  <br />   end  <br /> end  <br /> <br /> A.new.hehe<br /> [/code]<br /> Agoro Ruby, e adoro metaprogramação! :twisted: <br /> <br /> [/quote]<br /> <br /> Você tá simulando herança aqui, não binding hierárquico.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/447306.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/447306.java</link>
				<pubDate><![CDATA[Tue, 4 Mar 2008 13:22:44]]> GMT</pubDate>
				<author><![CDATA[ louds]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=louds]<br /> <br /> Você tá simulando herança aqui, não binding hierárquico.[/quote]<br /> <br /> Isso é bastante usado em javascript para fornecer herança.<br /> <br /> Prototype é um exemplo disso.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/447325.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/447325.java</link>
				<pubDate><![CDATA[Tue, 4 Mar 2008 13:40:40]]> GMT</pubDate>
				<author><![CDATA[ nbluis]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ Bom, vou voltar aqui que a poeira abaixou, e vou fazer minhas declarações:<br /> <br /> - Eu não sei Ruby;<br /> - Entretanto, eu sei o que é metaprogramação e problemas de scoping e outros quetais;<br /> - E vou fazer minha digressão aqui.<br /> <br /> Há dois tipos de programadores: os "blue-collars" e os "white-collars". *<br /> O sr. Gosling tinha afirmado uma vez que Java era para os programadores "blue-collar", ou seja, aqueles caras que antigamente se matavam para fazer os programas em C++ funcionarem, e agora se matam para fazer os programadores Java funcionarem no mundo real - deploys, web services e outras chateações. Eles não têm muitas idéias de conceitos abstratos, e é uma vitória que eles finalmente consigam entender corretamente o conceito de orientação a objeto, que levou muitas décadas para ser aceito. <br /> Os "white-collars" são aqueles que entendem todos esses conceitos e criam novos, ou pelo menos têm a coragem de irem além desses conceitos. Programação funcional ou genérica para eles é o seu café da manhã, e é coisa muito antiga para eles - afinal de contas, quantos 50 anos tem a linguagem Lisp? Normalmente são os que falam de assuntos "esotéricos". <br /> <br /> O sr. Marcio Duran (um clássico "blue-collar" - eles é que fazem o mundo girar) entrou no meio de uma discussão de "white-collars" e esperou tentar entender alguma coisa rapidamente**, só que não percebeu que "entrou na sala errada" e exigiu ser tratado como um igual. Aí é que ocorreu o problema. <br /> <br /> ---------<br /> <br /> * Não estou usando aqui "white-collar" no sentido em que se dá nas editorias de política, que tratam de muitos "crimes de colarinho branco". Nada disso <img src="http://www.guj.com.br/images/smilies/69934afc394145350659cd7add244ca9.gif" border="0"> - uso em contraposição a "blue-collar", que é o colarinho de um macacão azul de um operário de fábrica. <br /> ** Como bom "blue-collar", ele não tem tempo de tentar entender essas coisas "esotéricas" e acha tudo uma grande besteira. ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/447361.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/447361.java</link>
				<pubDate><![CDATA[Tue, 4 Mar 2008 14:22:55]]> GMT</pubDate>
				<author><![CDATA[ thingol]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=louds]Você tá simulando herança aqui, não binding hierárquico.[/quote]<br /> Tem razão, mas nesse caso o efeito é o mesmo, certo?<br /> <br /> E de qualquer forma, prefiro mesmo "simular herança" com delegação do que usar herança de verdade.  <img src="http://www.guj.com.br/images/smilies/908627bbe5e9f6a080977db8c365caff.gif" border="0"> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/447452.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/447452.java</link>
				<pubDate><![CDATA[Tue, 4 Mar 2008 15:32:15]]> GMT</pubDate>
				<author><![CDATA[ Fabio Kung]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=louds]Uma dúvida, se você casar um par de instance eval/ module_eval para instancias de definem apenas os *_missing não é possivel capturar todos bindings?[/quote]<br /> <br /> É basicamente o que venho utilizando hoje para contornar. O problema é que preciso avaliar em elo menos 3 bindings: do closure, da classe que recebe o closure e top-level. Conseguir o primeiro é complicado, a menos qu você faça a gambi que o Kung posto de passar self no método <img src="http://www.guj.com.br/images/smilies/69934afc394145350659cd7add244ca9.gif" border="0">]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/447560.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/447560.java</link>
				<pubDate><![CDATA[Tue, 4 Mar 2008 17:45:04]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ gambi essa minha que é melhor que a gambi de incluir o modulo!  <img src="http://www.guj.com.br/images/smilies/283a16da79f3aa23fe1025c96295f04f.gif" border="0"> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/447565.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/447565.java</link>
				<pubDate><![CDATA[Tue, 4 Mar 2008 18:06:17]]> GMT</pubDate>
				<author><![CDATA[ Fabio Kung]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ Tem algum jeito de pegar o call stack atual em Ruby como tem em Java?]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/447574.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/447574.java</link>
				<pubDate><![CDATA[Tue, 4 Mar 2008 18:22:05]]> GMT</pubDate>
				<author><![CDATA[ Mauricio Linhares]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=Fabio Kung]gambi essa minha que é melhor que a gambi de incluir o modulo!  <img src="http://www.guj.com.br/images/smilies/283a16da79f3aa23fe1025c96295f04f.gif" border="0"> [/quote]<br /> <br /> Estamos discutindo qual gamiarra é melhor<br /> <br /> CQD <img src="http://www.guj.com.br/images/smilies/283a16da79f3aa23fe1025c96295f04f.gif" border="0">]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/447577.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/447577.java</link>
				<pubDate><![CDATA[Tue, 4 Mar 2008 18:48:35]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=Maurício Linhares]Tem algum jeito de pegar o call stack atual em Ruby como tem em Java?[/quote]<br /> Tem isso, mas não serve:<br /> <a class="snap_shots" href="http://ruby-doc.org/core/classes/Kernel.html#M005955" target="_blank" rel="nofollow">http://ruby-doc.org/core/classes/Kernel.html#M005955</a><br /> <br /> Do jeito que você quer não conheço...]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/447582.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/447582.java</link>
				<pubDate><![CDATA[Tue, 4 Mar 2008 18:57:42]]> GMT</pubDate>
				<author><![CDATA[ Fabio Kung]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=thingol]<br /> O sr. Marcio Duran (um clássico "blue-collar" - eles é que fazem o mundo girar) entrou no meio de uma discussão de "white-collars" e esperou tentar entender alguma coisa rapidamente**, só que não percebeu que "entrou na sala errada" e exigiu ser tratado como um igual. Aí é que ocorreu o problema. <br /> [/quote]<br /> <br />  <img src="http://www.guj.com.br/images/smilies/e8a506dc4ad763aca51bec4ca7dc8560.gif" border="0"> O assunto continua sendo Ruby, mas posso dizer que você tem tamanha imaginação para canditado a [b]"blue-collar".<br /> [/b]<br />  <img src="http://www.guj.com.br/images/smilies/8f7fb9dd46fb8ef86f81154a4feaada9.gif" border="0"> "Em relação a querer aprender ou ter conhecimento isso vai da vontade e busca da investigação ao saber de cada um"<br /> <br /> [b]"Apostila Ruby on Rails fique avontade para abrir sua mente"[/b]<br /> <br /> [b]Ruby on Rails[/b]<br /> <br /> [url]http://linorg.ciagri.usp.br/ftp/pub/webdev/rails-tutorial.pdf[/url]<br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/447596.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/447596.java</link>
				<pubDate><![CDATA[Tue, 4 Mar 2008 19:40:25]]> GMT</pubDate>
				<author><![CDATA[ Marcio Duran]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=Fabio Kung][quote=Maurício Linhares]Tem algum jeito de pegar o call stack atual em Ruby como tem em Java?[/quote]<br /> Tem isso, mas não serve:<br /> <a class="snap_shots" href="http://ruby-doc.org/core/classes/Kernel.html#M005955" target="_blank" rel="nofollow">http://ruby-doc.org/core/classes/Kernel.html#M005955</a><br /> <br /> Do jeito que você quer não conheço...[/quote]<br /> <br /> O povo do rubinius tava fazendo algo no sentido de permitir stack walk arbitrário, sendo possível  Não sei se é possível capturar com contexto de um frame, entretanto.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/447611.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/447611.java</link>
				<pubDate><![CDATA[Tue, 4 Mar 2008 20:13:50]]> GMT</pubDate>
				<author><![CDATA[ louds]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=Fabio Kung][quote=Maurício Linhares]Tem algum jeito de pegar o call stack atual em Ruby como tem em Java?[/quote]<br /> Tem isso, mas não serve:<br /> <a class="snap_shots" href="http://ruby-doc.org/core/classes/Kernel.html#M005955" target="_blank" rel="nofollow">http://ruby-doc.org/core/classes/Kernel.html#M005955</a><br /> <br /> Do jeito que você quer não conheço...[/quote]<br /> <br /> Realmente, não serve não.<br /> <br /> Que triste  <img src="http://www.guj.com.br/images/smilies/c30b4198e0907b23b8246bdd52aa1c3c.gif" border="0"> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/447642.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/447642.java</link>
				<pubDate><![CDATA[Tue, 4 Mar 2008 22:15:03]]> GMT</pubDate>
				<author><![CDATA[ Mauricio Linhares]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ Gujeiros,<br /> <br /> será que vocês poderiam citar referências bibliográficas para entendermos esse papo todo? Não, não quero nenhum livro dos Deitel. E nem precisa ser um Head First Metaprogramming. Pode mandar algo mais bizarro.  <img src="http://www.guj.com.br/images/smilies/69934afc394145350659cd7add244ca9.gif" border="0"> <br /> <br /> Acabei de me avaliar como white-and-yellow-collar!  <img src="http://www.guj.com.br/images/smilies/2786c5c8e1a8be796fb2f726cca5a0fe.gif" border="0"> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/447658.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/447658.java</link>
				<pubDate><![CDATA[Tue, 4 Mar 2008 23:12:56]]> GMT</pubDate>
				<author><![CDATA[ TheMask]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=TheMask]Gujeiros,<br /> <br /> será que vocês poderiam citar referências bibliográficas para entendermos esse papo todo? Não, não quero nenhum livro dos Deitel. E nem precisa ser um Head First Metaprogramming. Pode mandar algo mais bizarro.  <img src="http://www.guj.com.br/images/smilies/69934afc394145350659cd7add244ca9.gif" border="0"> <br /> <br /> Acabei de me avaliar como white-and-yellow-collar!  <img src="http://www.guj.com.br/images/smilies/2786c5c8e1a8be796fb2f726cca5a0fe.gif" border="0"> [/quote]<br /> <br /> Procure pelo assunto no lambda the ultimate e no citeseer. Boa leitura.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/447673.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/447673.java</link>
				<pubDate><![CDATA[Wed, 5 Mar 2008 00:10:56]]> GMT</pubDate>
				<author><![CDATA[ louds]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=TheMask]Gujeiros,<br /> <br /> será que vocês poderiam citar referências bibliográficas para entendermos esse papo todo? Não, não quero nenhum livro dos Deitel. E nem precisa ser um Head First Metaprogramming. Pode mandar algo mais bizarro.  <img src="http://www.guj.com.br/images/smilies/69934afc394145350659cd7add244ca9.gif" border="0"> <br /> <br /> Acabei de me avaliar como white-and-yellow-collar!  <img src="http://www.guj.com.br/images/smilies/2786c5c8e1a8be796fb2f726cca5a0fe.gif" border="0"> [/quote]<br /> Ruby for Rails do David Black também é uma boa leitura e aborda coisas interessantes sobre metaprogramação aplicada no rails.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/447679.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/447679.java</link>
				<pubDate><![CDATA[Wed, 5 Mar 2008 06:28:22]]> GMT</pubDate>
				<author><![CDATA[ Fabio Kung]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ Eu ainda não entendi direito o que você está tentando fazer, vc procura algo como se os contextos fossem se sobrepondo numa pilha ou uma "herança de escopo", mas ainda não entendi o que isso tem a ver com monkey patching.<br /> O que eu pensei foi em passar o contexto que tem o método que vc qr acessar por variável.<br /> <br /> [code]class A<br />  def initialize<br />   @abc =122<br />  end<br /> <br />  def hehe<br />   B.new.huhuhu {|context| p @abc; puts context.bwawawawawa}<br />  end<br /> end<br /> <br /> class B<br />  def huhuhu(&block)<br />   yield self<br />  end<br /> <br />  def bwawawawawa<br />   'risada maquiavelica'<br />  end<br /> end<br /> <br /> A.new.hehe<br /> [/code]]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/447795.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/447795.java</link>
				<pubDate><![CDATA[Wed, 5 Mar 2008 08:53:45]]> GMT</pubDate>
				<author><![CDATA[ moises.trovo]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ O seu exemplo é basicamente aq mesma coisa do do Kung, com a direção invertida. Ainda é uma gambiarra e apesar de solucionar o exemplo (1)cria ainda mais sintaxe acidental e (2)não resolve todos os casos, e se eu quiser ter três níveis? Níveis arbitrários? A pergunta é: como resolver isso sem mexer no bloco nem na invocacão do método?<br /> <br /> O problema é que se eu não tenho mecanismo de binding decente eu crio muitos métodos em classes existentes, como no caso que citei do Selenium onde uma classe de domínio teve que incluir um módulo do SeleniumRC. No fim do dia você acaba tendo métodos em Fixnum que ó são usados em um canto escuso de uma biblioteca que você importou. Um bom exemplo é o problema que o RSpec cria aodefinir métodos em Object. Se fosse possível definir métodos apenas dentro do bloco it() ele não precisaria poluir todo o namespace com metodos que só fazem sentido nele.<br /> <br /> Com a ênfase em DSLs em Ruby pode-se esperar ainda mais oluição, cada DSL implementa sua gambiarra para ter uma sintaxe diferenciada e no final seu Fixnum vai estar assoviando, chupando cana e se chamando Roberta Close.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/447803.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/447803.java</link>
				<pubDate><![CDATA[Wed, 5 Mar 2008 09:06:59]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ Phillip, que tal colocar as operações que vc quer adicionar nas classes (limitando o escopo) em um módulo e sobrescrever o append_features (http://ruby-doc.org/core/classes/Module.html#M001659):<br /> <br /> [code]<br /> module DSLExtensions<br />   def ... end<br />   def append_features(mod)<br />     #guarda as modificacoes em algum lugar para desfazer depois!<br />   end<br /> end<br /> <br /> def novo_escopo(&blk)<br />   Fixnum.send(:include, DSLExtensions)<br />   instance_eval(&blk)<br />   remove_extensions_from(Fixnum)<br /> end<br /> [/code]<br /> <br /> Gambi forte. Não sei se é pior que passar o contexto pai como variável...]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/447841.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/447841.java</link>
				<pubDate><![CDATA[Wed, 5 Mar 2008 09:51:05]]> GMT</pubDate>
				<author><![CDATA[ Fabio Kung]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ E eu faço a mesma besteira que o Rails faz e fico com uma thread só? <br /> <br /> Nah, a outra gambiarra pelo menos era tread-safe <img src="http://www.guj.com.br/images/smilies/69934afc394145350659cd7add244ca9.gif" border="0">]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/447852.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/447852.java</link>
				<pubDate><![CDATA[Wed, 5 Mar 2008 10:01:40]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ é, mas a outra tb não resolve o problema do "scoped monkey patching"!<br /> <br /> [code]<br /> operacao do<br />   1.so_pode_ter_esse_metodo_aqui<br /> end<br /> [/code]]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/447858.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/447858.java</link>
				<pubDate><![CDATA[Wed, 5 Mar 2008 10:07:20]]> GMT</pubDate>
				<author><![CDATA[ Fabio Kung]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ (e acabaram as minhas idéias)<br /> <br /> <br /> (por enquanto)<br /> <br /> A conclusão é que se eu tivesse a solução para isso, já estaria tão famoso quanto o Phillip!]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/447881.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/447881.java</link>
				<pubDate><![CDATA[Wed, 5 Mar 2008 10:27:22]]> GMT</pubDate>
				<author><![CDATA[ Fabio Kung]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ São dois problemas. Um é a falta de opções de binding, fazendo com que eu tenha quea alterar classes (adicionar métodos em inteiros) quando o que eu queria era simplesmente que um método estivesse disponivel em um contexto qualquer. Outro é o fato de que se eu alterar uma classe (como consequência do primeiro ou não) eu altero ela em todo o sistemas.<br /> <br /> Será que JRuby não consegue resolver o seundo problema com classloaders diferentes? Não tenho idéia, não sei como o JRuby funciona... LOOOOOOOOOOOOOOUUUUUDS!!!]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/448224.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/448224.java</link>
				<pubDate><![CDATA[Wed, 5 Mar 2008 17:31:37]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=pcalcado]São dois problemas. Um é a falta de opções de binding, fazendo com que eu tenha quea alterar classes (adicionar métodos em inteiros) quando o que eu queria era simplesmente que um método estivesse disponivel em um contexto qualquer. Outro é o fato de que se eu alterar uma classe (como consequência do primeiro ou não) eu altero ela em todo o sistemas.<br /> <br /> Será que JRuby não consegue resolver o seundo problema com classloaders diferentes? Não tenho idéia, não sei como o JRuby funciona... LOOOOOOOOOOOOOOUUUUUDS!!![/quote]<br /> <br /> Acho que usando 2 instancias, uma para a aplicação e outra para a DSL, com call by value, iow serializa todos argumentos, provavelmente funciona.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/448241.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/448241.java</link>
				<pubDate><![CDATA[Wed, 5 Mar 2008 18:00:27]]> GMT</pubDate>
				<author><![CDATA[ louds]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=louds]Acho que usando 2 instancias, uma para a aplicação e outra para a DSL, com call by value, iow serializa todos argumentos, provavelmente funciona.[/quote]<br /> <br /> Sou fã desse bixo  <img src="http://www.guj.com.br/images/smilies/385970365b8ed7503b4294502a458efa.gif" border="0"> <br /> <br /> De qualquer forma, não daria conflito de classloaders ter e usar a mesma classe duas vezes no mesmo lugar não?<br /> <br /> Normalmente quando você carrega a mesma classe por dois classloaders e tenta fazer uma atribuição já pega uma CCE.<br /> <br /> Não sei porque mas eu ainda acho a gambiarra do call stack menos bizonha (provavelmente porque eu ainda acho que o AspectJ era uma boa idéia) <img src="http://www.guj.com.br/images/smilies/69934afc394145350659cd7add244ca9.gif" border="0">]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/448313.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/448313.java</link>
				<pubDate><![CDATA[Wed, 5 Mar 2008 22:17:57]]> GMT</pubDate>
				<author><![CDATA[ Mauricio Linhares]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=Maurício Linhares]Não sei porque mas eu ainda acho a gambiarra do call stack menos bizonha (provavelmente porque eu ainda acho que o AspectJ era uma boa idéia) <img src="http://www.guj.com.br/images/smilies/69934afc394145350659cd7add244ca9.gif" border="0">[/quote]<br /> Desculpe a ignorância, mas por que AspectJ não seria considerada uma boa idéia nesses dias?<br /> Pergunto porque este mês comecei a estudar POA com AspectJ...]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/448319.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/448319.java</link>
				<pubDate><![CDATA[Wed, 5 Mar 2008 22:29:45]]> GMT</pubDate>
				<author><![CDATA[ tnaires]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=tnaires]Desculpe a ignorância, mas por que AspectJ não seria considerada uma boa idéia nesses dias?<br /> Pergunto porque este mês comecei a estudar POA com AspectJ...[/quote]<br /> <br /> Porque a necessidade de uma ferramenta de AOP pra fazer alguma coisa é um sinal de que a linguagem não oferece facilidades pra alteração das definições de objetos e classes em tempo de execução boas ou simples o suficiente.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/448324.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/448324.java</link>
				<pubDate><![CDATA[Wed, 5 Mar 2008 22:45:06]]> GMT</pubDate>
				<author><![CDATA[ Mauricio Linhares]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ Hum...acho que se voce transformar o seu bloco numa proc atraves de lambda e em seguida dar um call na proc, resolve o problema:<br /> <br /> A sugestão para a bazooka procedeu sem problemas<br /> <br /> [code]<br /> def fire(&block)<br />   lambda(&block).call(instance_eval(&block))<br /> end<br /> [/code]<br /> <br /> e para as risadas malevolentes:<br /> <br /> [code]<br />  def huhuhu(&block)<br />    lambda(&block).call(instance_eval(&block))<br />  end<br /> [/code]<br /> <br /> Só tem uma coisa que não entendi, para a segunda sugestão que passei, ele retorna<br /> [code]<br /> nil<br /> "risada maquiavelica"<br /> 122<br /> test.rb:7:in `hehe': undefined local variable or method `bwawawawawa' for #&lt;A:0x2ae5c0c @abc=122&gt; (NameError)<br /> 	from test.rb:13:in `call'<br /> 	from test.rb:13:in `huhuhu'<br /> 	from test.rb:7:in `hehe'<br /> 	from test.rb:21<br /> [/code]<br /> <br /> porque diabos a saida está assim, acusando erro de escopo mesmo imprimindo o valor do referido método? e porque a ordem de impressão dos atributos ficou invertida?<br /> <br /> pior nem é isso. Quando eu inverto os valores em <br /> <br /> [code]<br />  def hehe<br />   B.new.huhuhu{p bwawawawawa; p @abc}<br />  end<br /> [/code]<br /> <br /> ele imprime:<br /> <br /> [code]<br /> "risada maquiavelica"<br /> nil<br /> test.rb:7:in `hehe': undefined local variable or method `bwawawawawa' for #&lt;A:0x2ae5c0c @abc=122&gt; (NameError)<br /> 	from test.rb:13:in `call'<br /> 	from test.rb:13:in `huhuhu'<br /> 	from test.rb:7:in `hehe'<br /> 	from test.rb:21<br /> &gt;Exit code: 1<br /> [/code]<br /> <br /> Alguém consegue explicar isso?<br /> <br /> T+]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/448352.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/448352.java</link>
				<pubDate><![CDATA[Thu, 6 Mar 2008 00:41:45]]> GMT</pubDate>
				<author><![CDATA[ Proteu Alcebidiano]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ Glaucio, você está executando o mesmo bloco várias vezes, não? A idéia é executar uma vez só e ter acesso aos métodos necessários nesta execução. Executar o mesmo bloco diversas vezes é inviável na maioria dos cenários para uma linguagem não funcional (que tem estado mútavel).<br /> <br /> Btw, alguém implementa uma gambi com currying?]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/448353.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/448353.java</link>
				<pubDate><![CDATA[Thu, 6 Mar 2008 01:11:00]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=pcalcado]Será que JRuby não consegue resolver o seundo problema com classloaders diferentes? Não tenho idéia, não sei como o JRuby funciona... LOOOOOOOOOOOOOOUUUUUDS!!![/quote]<br /> [quote=louds]Acho que usando 2 instancias, uma para a aplicação e outra para a DSL, com call by value, iow serializa todos argumentos, provavelmente funciona.[/quote]<br /> <br /> Com Rubinius + MultiVM (que não sei a quantas isso anda) deve funcionar parecido não ?<br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/448429.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/448429.java</link>
				<pubDate><![CDATA[Thu, 6 Mar 2008 08:26:47]]> GMT</pubDate>
				<author><![CDATA[ nbluis]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=pcalcado]São dois problemas. Um é a falta de opções de binding, fazendo com que eu tenha quea alterar classes (adicionar métodos em inteiros) quando o que eu queria era simplesmente que um método estivesse disponivel em um contexto qualquer. Outro é o fato de que se eu alterar uma classe (como consequência do primeiro ou não) eu altero ela em todo o sistemas.<br /> <br /> Será que JRuby não consegue resolver o seundo problema com classloaders diferentes? Não tenho idéia, não sei como o JRuby funciona... LOOOOOOOOOOOOOOUUUUUDS!!![/quote]<br /> Se não me engano, cada classe Ruby vira um objeto de verdade na JVM. Instância de RubyClass, ou algo do tipo.<br /> <br /> Não precisa de vários ClassLoaders pq não é estático. Bastaria fazer com que os escopos pudessem estar associados a versões modificadas do RubyClass original. Isso não deve ser muito difícil de fazer, mas eu acho que a chance de fazerem deve ser perto de nula, já que isso faria com que o JRuby não fosse compatível com o MRI.<br /> <br /> De qq forma, acho que vale um papo com o Nutter e cia no #jruby @ freenode, ou na lista do jruby-dev.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/448535.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/448535.java</link>
				<pubDate><![CDATA[Thu, 6 Mar 2008 09:54:48]]> GMT</pubDate>
				<author><![CDATA[ Fabio Kung]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=pcalcado]Glaucio, você está executando o mesmo bloco várias vezes, não? A idéia é executar uma vez só e ter acesso aos métodos necessários nesta execução. Executar o mesmo bloco diversas vezes é inviável na maioria dos cenários para uma linguagem não funcional (que tem estado mútavel).<br /> <br /> Btw, alguém implementa uma gambi com currying?[/quote]<br /> <br /> Opa,<br /> <br /> você tem razão, o que propus parecia trapaça para solucionar o problema, e o que é pior, nem currying para isso funciona direito porque lambda tenta processar o bloco com tudo o que tiver dentro dele o_O<br /> <br /> O ponto é: lambda.call enxerga o escopo de A e tenta evocar o de B (dando a tal unresolved variable),  instance_eval enxerga o escopo de B e não enxerga o de A.<br /> <br /> De todo modo, o problema da bazooka pode se resumir a:<br /> <br /> [code]<br /> def fire(&block)<br />  lambda(&block).call<br /> end<br /> [/code]<br /> <br /> No caso do exemplo das risadas, não sei como proceder...nao sei como, mas se lambda pudesse aceitar algo tipo:<br /> <br /> [code]<br /> def fire(&block)<br />  lambda(&block, self).call #arrumem uma notação melhor :D<br /> end<br /> [/code]<br /> <br /> Seria interessante, pois poderiamos fazer o bloco enxergar o escopo externo ao bloco<br /> <br /> T+]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/448690.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/448690.java</link>
				<pubDate><![CDATA[Thu, 6 Mar 2008 13:16:53]]> GMT</pubDate>
				<author><![CDATA[ Proteu Alcebidiano]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=Proteu Alcebidiano]<br /> [code]<br /> def fire(&block)<br />  lambda(&block, self).call #arrumem uma notação melhor :D<br /> end<br /> [/code]<br /> <br /> Seria interessante, pois poderiamos fazer o bloco enxergar o escopo externo ao bloco<br /> <br /> T+[/quote]<br /> <br /> Nesse caso, eu ainda gosto da idéia do binding hierárquico.  :D ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/448733.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/448733.java</link>
				<pubDate><![CDATA[Thu, 6 Mar 2008 13:58:43]]> GMT</pubDate>
				<author><![CDATA[ nbluis]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ Fiquei pesando no seguinte, da mesma forma que se usa o Ycomb para implementar recursão em um lambda, será que não existe como derivar o fix point dos bindings e, ao ir adiante, ir chamando tudo via algo semelhante ao Ycomb?<br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/448883.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/448883.java</link>
				<pubDate><![CDATA[Thu, 6 Mar 2008 15:57:40]]> GMT</pubDate>
				<author><![CDATA[ louds]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ [quote=louds]Fiquei pesando no seguinte, da mesma forma que se usa o Ycomb para implementar recursão em um lambda, será que não existe como derivar o fix point dos bindings e, ao ir adiante, ir chamando tudo via algo semelhante ao Ycomb?<br /> [/quote]<br /> <br /> Rapaz, usando a idéia de combinators em bindings seria interessante porque voce poderia mudar a regra de binding sem precisar modificar o runtime da linguagem, e considerando que bindings realizam ações (funçoes) de referência, poderia-se criar uma high-order function para bindings...algo tipo, numa implementaçao de Y-comb (pegar [url=http://erlang.org/pipermail/erlang-questions/2003-January/006633.html]uma implementação[/url] em erlang, pra facilitar a leitura)<br /> <br /> [code]<br /> y(X) -&gt;<br />   F = fun (P) -&gt; X(fun (Arg) -&gt; (P(P))(Arg) end) end,<br />   F(F).<br /> [/code]<br /> <br /> voce ter uma funcao de counting ou binding regstry, que seria acionada pelo analisador a cada vez que um comando dentro de um bloco não estivesse definido no escopo mais &quot;raso&quot; do código:<br /> <br /> [code]<br /> % chamem o rapazinho aqui para registrar bindings<br /> count_binding() -&gt;<br />  F=fun (SUM) -&gt; fun (N) -&gt;<br />   %registrar uma contagem ou qualquer tralha que dê uma chance ao código do bloco, exemplo<br />   %SUM(N) -&gt; N + SUM(N-1)<br />   %SUM(1) -&gt; N.<br />   end,<br />   end<br />   y(F).<br /> [/code]<br /> <br /> ou então, se não quiser fazer algo hierárquico, colocar numa hash  ou lista ao invés de um contador.<br /> <br /> Algo assim procede ou tou viajando? =D<br /> <br /> T+]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/449073.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/449073.java</link>
				<pubDate><![CDATA[Fri, 7 Mar 2008 02:06:06]]> GMT</pubDate>
				<author><![CDATA[ Proteu Alcebidiano]]></author>
			</item>
			<item>
				<title>Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ Olá<br /> <br /> [quote=pcalcado]Eu acho que monkey patching é algo abusado em Ruby. [/quote]<br /> <br /> <a class="snap_shots" href="http://gbracha.blogspot.com/2008/03/monkey-patching.html" target="_blank" rel="nofollow">http://gbracha.blogspot.com/2008/03/monkey-patching.html</a><br /> <br /> [quote=Gilad Bracha]Regardless, given my flattering portrayals of primate practices, you may deduce that my main comment on monkey patching is ?just say no?. The problems it induces far outweigh its benefits. If you feel tempted, think hard about design alternatives. One can do better.[/quote]<br /> <br /> Também acho arriscado permitir que isto aconteça.<br /> <br /> []s<br /> Luca]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/457387.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/457387.java</link>
				<pubDate><![CDATA[Sun, 23 Mar 2008 22:18:18]]> GMT</pubDate>
				<author><![CDATA[ Luca]]></author>
			</item>
			<item>
				<title>Re:Monkeypatching is Destroying Ruby</title>
				<description><![CDATA[ Esse artigo me deixou bem interessado em COP. Pena que a leitura vai ter que esperar um bom tempo na fila...]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/82963/457389.java</guid>
				<link>http://www.guj.com.br/posts/preList/82963/457389.java</link>
				<pubDate><![CDATA[Sun, 23 Mar 2008 22:20:38]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
	</channel>
</rss>