<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Escalare - A louca jornada de um programador &#187; boo</title>
	<atom:link href="http://gbenatti.net/blog/category/boo/feed/" rel="self" type="application/rss+xml" />
	<link>http://gbenatti.net/blog</link>
	<description>Um blog com a jornada deste que lhes fala no mundo da programação de dispositivos móveis, jogos e linguagens de programação.</description>
	<lastBuildDate>Mon, 19 Apr 2010 15:00:21 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Boo e Android</title>
		<link>http://gbenatti.net/blog/2010/04/boo-e-android/</link>
		<comments>http://gbenatti.net/blog/2010/04/boo-e-android/#comments</comments>
		<pubDate>Thu, 08 Apr 2010 02:05:33 +0000</pubDate>
		<dc:creator>gbenatti</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[boo]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://gbenatti.net/blog/?p=87</guid>
		<description><![CDATA[Nas ultimas semanas, tenho trabalhado nas horas vagas no Boojay, com o intuito de programar para dispositivos com Android.
E os primeiros frutos apareceram, agora é possivel executar o que poderia ser considerado o Hello World do Android.



namespace net.gbenatti


&#160;


import android.app


import android.os


&#160;


class Main&#40;Activity&#41;:


&#160; &#160; override def onCreate&#40;savedInstance as Bundle&#41;:


&#160; &#160; &#160; &#160; super&#40;savedInstance&#41;


&#160; &#160; &#160; &#160; setContentView&#40;0&#215;7f030000&#41;



Na [...]]]></description>
			<content:encoded><![CDATA[<p>Nas ultimas semanas, tenho trabalhado nas horas vagas no <a href="http://github.com/bamboo/boojay">Boojay</a>, com o intuito de programar para dispositivos com Android.</p>
<p>E os primeiros frutos apareceram, agora é possivel executar o que poderia ser considerado o Hello World do Android.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">namespace net.<span class="me1">gbenatti</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> android.<span class="me1">app</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> android.<span class="kw3">os</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Main<span class="br0">&#40;</span>Activity<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; override <span class="kw1">def</span> onCreate<span class="br0">&#40;</span>savedInstance as Bundle<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">super</span><span class="br0">&#40;</span>savedInstance<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; setContentView<span class="br0">&#40;</span>0&#215;7f030000<span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>Na verdade esse código é meio diferente do original java, onde a constante hexadecimal é definida em uma classe, mas isso logo será resolvido.</p>
<p>Agora deixa eu voltar a assistir Fringe.</p>
]]></content:encoded>
			<wfw:commentRss>http://gbenatti.net/blog/2010/04/boo-e-android/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agora que o ano começou&#8230;</title>
		<link>http://gbenatti.net/blog/2010/02/agora-o-ano-comecou/</link>
		<comments>http://gbenatti.net/blog/2010/02/agora-o-ano-comecou/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 16:27:59 +0000</pubDate>
		<dc:creator>gbenatti</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[boo]]></category>
		<category><![CDATA[Boojay]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Monolipse]]></category>

		<guid isPermaLink="false">http://gbenatti.net/blog/?p=85</guid>
		<description><![CDATA[Passado o carnaval, vamos as novidades.
Comecei a trabalhar nas horas vagas em um projeto open source.
O Boojay, um emissor de bytecode java para a linguagem Boo. 
Minha ideia primaria é poder usar Boo para o desenvolvimento de software para Android, e no embalo retribuir a comunidde Boo trabalhando no boojay e no monolipse.
]]></description>
			<content:encoded><![CDATA[<p>Passado o carnaval, vamos as novidades.</p>
<p>Comecei a trabalhar nas horas vagas em um projeto open source.</p>
<p>O <a href="http://code.google.com/p/boojay/">Boojay</a>, um emissor de bytecode java para a linguagem <a href="http://boo.codehaus.com">Boo</a>. </p>
<p>Minha ideia primaria é poder usar Boo para o desenvolvimento de software para Android, e no embalo retribuir a comunidde Boo trabalhando no boojay e no monolipse.</p>
]]></content:encoded>
			<wfw:commentRss>http://gbenatti.net/blog/2010/02/agora-o-ano-comecou/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Curiosidades em Boo &#8211; Pipeline de compilação</title>
		<link>http://gbenatti.net/blog/2009/11/curiosidades-em-boo-pipeline-de-compilacao/</link>
		<comments>http://gbenatti.net/blog/2009/11/curiosidades-em-boo-pipeline-de-compilacao/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 14:53:51 +0000</pubDate>
		<dc:creator>gbenatti</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[boo]]></category>
		<category><![CDATA[truques]]></category>

		<guid isPermaLink="false">http://gbenatti.net/blog/?p=73</guid>
		<description><![CDATA[Como já comentei, Boo é uma linguagem que tem como uma das caracteristicas mais marcantes sua extensibilidade.
A extensibilidade se dá na forma de macros e atributos sintaticos que modificam o código gerado no momento da compilação, e também em mudanças no próprio compilador, através do conceito de pipelines de compilação.
Para se entender melhor, quando você [...]]]></description>
			<content:encoded><![CDATA[<p>Como já comentei, Boo é uma linguagem que tem como uma das caracteristicas mais marcantes sua extensibilidade.</p>
<p>A extensibilidade se dá na forma de macros e atributos sintaticos que modificam o código gerado no momento da compilação, e também em mudanças no próprio compilador, através do conceito de pipelines de compilação.<br />
Para se entender melhor, quando você usa o compilador booc, o mesmo executa uma série de passos, que começa com o parsing do arquivo, execução das analises semanticas, transformações na AST e por fim geração do assembly (exe ou dll). Isso é o que é conhecido como pipeline padão de compilação.<br />
O compilador booc já vem com várias outras pipelines definidas, e permite também que o programador defina outras.</p>
<p>Uma das pipelines bem interessantes que já vem com o compilador é a pipeline chamada boo, essa pipeline executa todo o processo de compilação normal, com todos os passos e todas as transformações que são aplicadas a AST e no final, invés de gerar um assembly, gera uma saida boo com todo o código que seria compilado para a criação do assembly.</p>
<p>Parece abstrato demais ? Vamos ao código então, o velho e bom Hello World.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">print</span> <span class="st0">&quot;Hello World&quot;</span></div>
</li>
</ol>
</div>
<p>Esse é um código mínimo em Boo que escreve a mensagem &#8220;Hello World&#8221; na tela, mas você pode se perguntar, esse não é um executavel .Net ? Cadê o static void Main&#8230; ?</p>
<p>Vamos usar a nossa nova conhecida, a pipeline boo, pra descobrir.  Salve o programa no arquivo hello.boo e rode:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">booc -p:boo hello.boo</div>
</li>
</ol>
</div>
<p>E você terá:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="br0">&#91;</span>System.<span class="me1">Runtime</span>.<span class="me1">CompilerServices</span>.<span class="me1">CompilerGlobalScopeAttribute</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">public final transient <span class="kw1">class</span> HelloModule<span class="br0">&#40;</span><span class="kw2">object</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; private static <span class="kw1">def</span> Main<span class="br0">&#40;</span>argv as <span class="br0">&#40;</span><span class="kw3">string</span><span class="br0">&#41;</span><span class="br0">&#41;</span> as void:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; System.<span class="me1">Console</span>.<span class="me1">WriteLine</span><span class="br0">&#40;</span><span class="st0">&#8216;Hello World&#8217;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; private <span class="kw1">def</span> constructor<span class="br0">&#40;</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">super</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>A saída mostra o código que seria compilado depois de todas as mágicas executadas pelo compilador.</p>
<p>Note o uso do parâmetro -p:boo, é ele que diz ao compilador pra usar a pipeline boo e não a padrão.</p>
<p>Um detalhe, a chamada a print virou um System.Console.WriteLine, porque print é uma macro que ao ser executada expande para a chamada equivalente WriteLine.</p>
<p>Isso é só uma pequena parte do que pode ser feito com as pipelines, de geração de código em outra linguagem, verificação de padrões de desenvolvimento, compilação em memória, code completing, as possibilidades são várias.</p>
]]></content:encoded>
			<wfw:commentRss>http://gbenatti.net/blog/2009/11/curiosidades-em-boo-pipeline-de-compilacao/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Boo Friday &#8211; Parte II</title>
		<link>http://gbenatti.net/blog/2009/11/boo-friday-parte-ii/</link>
		<comments>http://gbenatti.net/blog/2009/11/boo-friday-parte-ii/#comments</comments>
		<pubDate>Fri, 06 Nov 2009 19:18:48 +0000</pubDate>
		<dc:creator>gbenatti</dc:creator>
				<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[boo]]></category>
		<category><![CDATA[BooFriday]]></category>

		<guid isPermaLink="false">http://gbenatti.net/blog/?p=62</guid>
		<description><![CDATA[De volta a nossa série sobre Boo. Hoje eu vou falar sobre o primeiro item do Boo Manifesto. Que diz que Boo é uma linguagem que foi concebida para ter uma sintaxe limpa e de fácil digitação. 
Quais caracteristicas Boo tem que estão ali pra atender esse objetivo ?
Parecido com Python.
Python é uma linguagem que [...]]]></description>
			<content:encoded><![CDATA[<p>De volta a nossa série sobre Boo. Hoje eu vou falar sobre o primeiro item do Boo Manifesto. Que diz que Boo é uma linguagem que foi concebida para ter uma sintaxe limpa e de fácil digitação. </p>
<p>Quais caracteristicas Boo tem que estão ali pra atender esse objetivo ?</p>
<p><strong>Parecido com Python.</strong></p>
<p>Python é uma linguagem que é conhecida pela sua elegância e sua capacidade de expressar uma grande quantidade de informação de uma forma sucinta, copiando o básico da sintaxe de Python, Boo já começa com o pé direito nesse quesito.</p>
<p><strong>Açúcar sintático para patterns comuns de programação.</strong></p>
<p>Boo suporta uma gama de construções de forma simplificada, listas, hashtables, arrays. Alem dessas estruturas, formas simples de criação de objetos, uso de expressões regulares, formatação de strings e vários outros detalhes fazem de Boo uma linguagem que necessita de pouca digitação.</p>
<p>Alguns exemplos:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="co1"># literais simples</span></div>
</li>
<li class="li1">
<div class="de1">myArray = <span class="br0">&#40;</span><span class="nu0">1</span>,<span class="nu0">2</span>,<span class="nu0">3</span>,<span class="nu0">4</span>,<span class="nu0">5</span>,<span class="nu0">6</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">myList = <span class="br0">&#91;</span><span class="nu0">1</span>,<span class="nu0">2</span>,<span class="nu0">3</span>,<span class="nu0">4</span>,<span class="nu0">5</span>,<span class="nu0">6</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">myHash = <span class="br0">&#123;</span><span class="nu0">1</span>: <span class="st0">&quot;um&quot;</span>, <span class="nu0">2</span>: <span class="st0">&quot;dois&quot;</span>, <span class="nu0">3</span>: <span class="st0">&quot;tres&quot;</span><span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="co1"># formatação de strings</span></div>
</li>
<li class="li1">
<div class="de1">language = <span class="st0">&quot;Boo&quot;</span></div>
</li>
<li class="li1">
<div class="de1">grade = <span class="st0">&quot;Awesome&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">print</span> <span class="st0">&quot;${language} is ${grade}&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># uso de regex</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">print</span><span class="br0">&#40;</span><span class="st0">&quot;Cool&quot;</span><span class="br0">&#41;</span> <span class="kw1">if</span> language =~ /^Boo/</div>
</li>
</ol>
</div>
<p><strong>Declaração automática de variáveis.</strong></p>
<p>Em Boo, um assignement cria uma nova variável local naquele escopo.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">newVar = <span class="nu0">1</span> <span class="co1"># cria uma nova variável newVar</span></div>
</li>
</ol>
</div>
<p><strong>Inferencia automatica de tipos.</strong></p>
<p>Uma coisa verdadeira no mundo da computação, é que muitas vezes nós programadores somos preguiçosos, só as vezes é claro. Exemplo, da do um método como o a seguir:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">def</span> two<span class="br0">&#40;</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">return</span> <span class="nu0">2</span></div>
</li>
<li class="li1">
<div class="de1">dois = two<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>Não está na cara que o método two, retorna um tipo inteiro ? e que dois contem um inteiro também ? Então porque devemos escrever códigos assim:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">def</span> two<span class="br0">&#40;</span><span class="br0">&#41;</span> as <span class="kw2">int</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">return</span> <span class="nu0">2</span></div>
</li>
<li class="li1">
<div class="de1">dois as <span class="kw2">int</span> = two<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>Na verdade em Boo não é necessário, a primeira versão funciona perfeitamente, gerando código equivalente a segunda versão, tendo assim todas as vantagens de código estaticamente tipado.</p>
<p>Fica a cargo do programador decidir qual código escrever. Eu como bom programador sei qual versão prefiro <img src='http://gbenatti.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p><strong>Classes não são necessárias.</strong></p>
<p>Para algumas utilizações como em scripts, muitas vezes a declaração de uma classe só pra deixar o compilador feliz não faz muito sentido.<br />
Vocês já viram maior cambiarra do que o famoso <strong>&#8220;public static void main&#8221;</strong> ? Poxa, eu só queria escrever um hello na tela e tenho que declarar uma classe ? com um método public static ?? que recebe uma lista de parâmetros que eu não estou interessado ???</p>
<p>Ainda bem que em Boo, meu HelloWorld pode ser simplesmente</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">print</span> <span class="st0">&quot;Hello World&quot;</span></div>
</li>
</ol>
</div>
<p>Esse post já esta meio grande, no proximo falaremos de expressividade. Até lá espero aprender o que isso quer dizer.</p>
<p>Cheers.</p>
]]></content:encoded>
			<wfw:commentRss>http://gbenatti.net/blog/2009/11/boo-friday-parte-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Truques em Scala &#8211; Structural Typing</title>
		<link>http://gbenatti.net/blog/2009/10/truques-em-scala/</link>
		<comments>http://gbenatti.net/blog/2009/10/truques-em-scala/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 22:06:43 +0000</pubDate>
		<dc:creator>gbenatti</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[boo]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[scala]]></category>
		<category><![CDATA[truques]]></category>

		<guid isPermaLink="false">http://escalare.wordpress.com/?p=22</guid>
		<description><![CDATA[As linguagens dinâmicas como Ruby e Python tem algumas capacidades bem interessantes, entre elas esta a possibilidade de passar um objeto para um método e desde que o objeto implemente os métodos necessários (ex: name, height), o método executará corretamente.
Já as linguagens estáticas normalmente não tem essa capacidade, algumas, como por exemplo Boo implementam essa [...]]]></description>
			<content:encoded><![CDATA[<p>As linguagens dinâmicas como Ruby e Python tem algumas capacidades bem interessantes, entre elas esta a possibilidade de passar um objeto para um método e desde que o objeto implemente os métodos necessários (ex: name, height), o método executará corretamente.</p>
<p>Já as linguagens estáticas normalmente não tem essa capacidade, algumas, como por exemplo Boo implementam essa possibilidade através de dispatch in runtime para os métodos que necessitam dessa caracteristica, já Scala tem uma solução bem elegante.</p>
<p>Por exemplo, digamos que você queira definir um método que espere um objeto que tenha as propriedades name e age, uma forma comumente usada em linguagens estáticas seria a seguinte:</p>
<p>Definir uma interface com os métodos que interessam:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">trait BasicProperties <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">def</span> name: <span class="kw3">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">def</span> age: Int</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>
Escrever as classes implementando BasicProperties e o método recebendo como parametro um objeto do tipo BasicProperties:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Pet<span class="br0">&#40;</span>val name: <span class="kw3">String</span>, val age: Int<span class="br0">&#41;</span> extends BasicProperties</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Person<span class="br0">&#40;</span>val name: <span class="kw3">String</span>, val age: Int<span class="br0">&#41;</span> extends BasicProperties</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">def</span> printProp<span class="br0">&#40;</span><span class="kw1">in</span>: BasicProperties<span class="br0">&#41;</span> =</div>
</li>
<li class="li2">
<div class="de2">&nbsp; println<span class="br0">&#40;</span><span class="kw1">in</span>.<span class="me1">name</span>+<span class="st0">&quot; is &quot;</span> + <span class="kw1">in</span>.<span class="me1">age</span> + <span class="st0">&quot; years old&quot;</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>
E então você poderia chamar o método assim:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">printProp<span class="br0">&#40;</span>new Pet<span class="br0">&#40;</span><span class="st0">&quot;Galfildo&quot;</span>, <span class="nu0">8</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">printProp<span class="br0">&#40;</span>new Person<span class="br0">&#40;</span><span class="st0">&quot;Maria&quot;</span>, <span class="nu0">18</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>
Se você tivesse uma classe tipo:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Antique<span class="br0">&#40;</span>val name: <span class="kw3">String</span>, val Age: Int, val cost: Int<span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>Você não poderia usar um objeto desse tipo como parametro para printProp, já que a classe não herda BasicProperties.</p>
<p>A solução está na capacidade que Scala tem de definir algo que poderia ser chamado de anonymous interfaces, no caso, o método printProp seria escrito assim:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">def</span> printProp<span class="br0">&#40;</span><span class="kw1">in</span>: <span class="br0">&#123;</span><span class="kw1">def</span> name: <span class="kw3">String</span>; <span class="kw1">def</span> age: Int<span class="br0">&#125;</span><span class="br0">&#41;</span> =</div>
</li>
<li class="li1">
<div class="de1">&nbsp; println<span class="br0">&#40;</span><span class="kw1">in</span>.<span class="me1">name</span>+<span class="st0">&quot; is &quot;</span> + <span class="kw1">in</span>.<span class="me1">age</span> + <span class="st0">&quot; years old&quot;</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>
Como se você estivesse definindo como parametro um tipo anonimo, que tem um método name do tipo String e um método age do tipo Int</p>
<p>E então poderia executar:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">printProp<span class="br0">&#40;</span>new Pet<span class="br0">&#40;</span><span class="st0">&quot;Galfildo&quot;</span>, <span class="nu0">8</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">printProp<span class="br0">&#40;</span>new Person<span class="br0">&#40;</span><span class="st0">&quot;Maria&quot;</span>, <span class="nu0">18</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">printProp<span class="br0">&#40;</span>new Antique<span class="br0">&#40;</span><span class="st0">&quot;Monalisa&quot;</span>, <span class="nu0">450</span>, <span class="nu0">1000</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>
Como se ve, um código muito parecido com o escrito em Ruby e Python, mais ainda com uma caracteristica de documentação, já que o método é explicito sobre o que ele necessita.</p>
]]></content:encoded>
			<wfw:commentRss>http://gbenatti.net/blog/2009/10/truques-em-scala/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Monotouch Redux</title>
		<link>http://gbenatti.net/blog/2009/10/monotouch-redux/</link>
		<comments>http://gbenatti.net/blog/2009/10/monotouch-redux/#comments</comments>
		<pubDate>Wed, 14 Oct 2009 19:35:00 +0000</pubDate>
		<dc:creator>gbenatti</dc:creator>
				<category><![CDATA[boo]]></category>
		<category><![CDATA[mac os x]]></category>
		<category><![CDATA[mono]]></category>
		<category><![CDATA[monotouch]]></category>
		<category><![CDATA[xna]]></category>

		<guid isPermaLink="false">http://escalare.wordpress.com/2009/10/14/monotouch-redux</guid>
		<description><![CDATA[Interessante como as vezes os mais diversos interesses se encontram.
Desde que eu comecei a programar, em uma época distante, onde orientação a objeto não era tão falada e era importante saber que um JUMP causava um cache-miss que degradava a performance do seu 386, minha maior diversão tem sido as engines de jogos.
Nos ultimos anos [...]]]></description>
			<content:encoded><![CDATA[<p>Interessante como as vezes os mais diversos interesses se encontram.</p>
<p>Desde que eu comecei a programar, em uma época distante, onde orientação a objeto não era tão falada e era importante saber que um JUMP causava um cache-miss que degradava a performance do seu 386, minha maior diversão tem sido as engines de jogos.</p>
<p>Nos ultimos anos também tenho tido grande interesse em linguagens de programação, tendo estado lá, na concepção de <a href="http://boo.codehaus.org">Boo</a> e nos ultimos anos/meses tendo estudado e programado em Scala, Erlang e ObjectiveC.</p>
<p>E por último, como um aficcionado da Apple, sou dono de várias bugigangas da mesma e claro de um iPhone, e como todo bom desenvolvedor entrei na onda de programar para essa plataforma.</p>
<p>E aqui chegamos, a um ponto em que esses interesses (Jogos, Boo e iPhone) se encontraram na forma do <a href="http://monotouch.net">monotouch</a>, do <a href="http://monodevelop.com">monodevelop</a> e do <a href="http://xnatouch.codeplex.com/">xnatouch</a>. Com essas três ferramentas é possivel fazer jogos para XNA, usando Boo, que rodarão tanto no iPhone, quanto no Zune e no XBOX360.</p>
<p>Agora é só parar de escrever e começar a trabalhar no próximo grande jogo.</p>
<p>ps. Pra ser sincero, o suporte a Boo no Monodevelop deve levar mais alguns dias para estar ok.</p>
]]></content:encoded>
			<wfw:commentRss>http://gbenatti.net/blog/2009/10/monotouch-redux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Boo e Mac OS X</title>
		<link>http://gbenatti.net/blog/2009/10/boo-e-mac-os-x/</link>
		<comments>http://gbenatti.net/blog/2009/10/boo-e-mac-os-x/#comments</comments>
		<pubDate>Mon, 05 Oct 2009 12:50:00 +0000</pubDate>
		<dc:creator>gbenatti</dc:creator>
				<category><![CDATA[boo]]></category>
		<category><![CDATA[mac os x]]></category>
		<category><![CDATA[mono]]></category>

		<guid isPermaLink="false">http://escalare.wordpress.com/2009/10/05/boo-e-mac-os-x</guid>
		<description><![CDATA[Aqui estamos com mais um, como instalar uma linguagem no Mac OS X, hoje será  a vez de Boo.
Boo (http://boo.codehaus.org), é uma linguagem baseada em .Net que necessita do .Net runtime para rodar, como no Mac não existe um .Net runtime que já venha instalado, nós vamos usar o Mono, que deve ser baixado [...]]]></description>
			<content:encoded><![CDATA[<p>Aqui estamos com mais um, como instalar uma linguagem no Mac OS X, hoje será  a vez de Boo.</p>
<p>Boo (<a href="http://boo.codehaus.org">http://boo.codehaus.org</a>), é uma linguagem baseada em .Net que necessita do .Net runtime para rodar, como no Mac não existe um .Net runtime que já venha instalado, nós vamos usar o Mono, que deve ser baixado da página do projeto <a href="http://www.go-mono.com/mono-downloads/download.html">http://www.go-mono.com/mono-downloads/download.html</a>, no momento a ultima versão é a 2.4.2.3</p>
<p>Quando você instalar o Mono, ja será instalado com ele a versão do Boo 0.9.1.3287, que não é a ultima versão disponivel, então vamos atualizar o nosso sistema, você faz isso rodando os seguintes comandos:</p>
<p>wget http://dist.codehaus.org/boo/distributions/boo-0.9.2.3383.tar.gz<br />tar xzvf boo-*<br />cd boo-*<br />./configure &#8211;prefix=/Library/Frameworks/Mono.framework/Home &#8211;libdir=/Library/Frameworks/Mono.framework/Home/lib<br />make<br />sudo make install</p>
<p>Se tudo for executado sem problemas, você pode rodar o comando:</p>
<p>booish</p>
<p>E verá a seguinte mensagem:</p>
<p>Welcome to booish, an interactive interpreter for the boo programming language.<br />Running boo 0.9.2.3383 on Mono 2.4.2.3.</p>
<p>Enter boo code in the prompt below (or type /help).<br />&gt;&gt;&gt;</p>
<p>Para sair do interpretador digite /q e de enter</p>
<p>Pronto, você tem seu sistema atualizado para a ultima versão de Boo. </p>
<p>Em um próximo Post descreverei como instalar a versão cutting-edge, direto do repositório.</p>
]]></content:encoded>
			<wfw:commentRss>http://gbenatti.net/blog/2009/10/boo-e-mac-os-x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Desenvolvimento para iPhone com Mono</title>
		<link>http://gbenatti.net/blog/2009/09/desenvolvimento-para-iphone-com-mono/</link>
		<comments>http://gbenatti.net/blog/2009/09/desenvolvimento-para-iphone-com-mono/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 16:42:00 +0000</pubDate>
		<dc:creator>gbenatti</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[boo]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[mono]]></category>

		<guid isPermaLink="false">http://escalare.wordpress.com/2009/09/24/desenvolvimento-para-iphone-com-mono</guid>
		<description><![CDATA[Uns dias atrás ao instalar o Mono, achei uma referencia a um produto da Novell chamado Monotouch.
Um produto que permite se desenvolver pra iPhone usando C#, agora, vocês podem questionar pq C# e não ObjC ?
Bem, me considero um programador que não tem muitos problemas em aprender e usar várias linguagens, no ultimo ano, aprendi [...]]]></description>
			<content:encoded><![CDATA[<p>Uns dias atrás ao instalar o Mono, achei uma referencia a um produto da Novell chamado Monotouch.</p>
<p>Um produto que permite se desenvolver pra iPhone usando C#, agora, vocês podem questionar pq C# e não ObjC ?</p>
<p>Bem, me considero um programador que não tem muitos problemas em aprender e usar várias linguagens, no ultimo ano, aprendi objC, Erlang e Scala, e entendo que cada linguagem tem suas vantagens e desvantagens. Objective C é interessante, e sinceramente tem features bem poderosas se pensarmos que é uma linguagem compilada que foi criada para ser usada como um C em esteroides, sendo deste um superset, um competidor de C++, muito mais simples.</p>
<p>Mas, sempre há um mas&#8230;</p>
<p>Depois de C#, Boo, Ruby, Python voltar a ter que gerenciar memória na mão, ter arquivos de header e de implementação, para definir uma propriedade ter que adicionar informações em 4 lugares diferentes não me parece &#8220;cutting edge^ em termos de programação.</p>
<p>Sendo assim, vejo com bons olhos iniciativas como o Monotouch, claro que esse também tem seus problemas, o pior, ser pago, e caro para meus pobres bolsos. Mas alem disso, com certeza a biblioteca sempre estará atrás das da Apple, feitas em Objective C, em termos de acesso de features do iPhone.</p>
<p>Abaixo o link de um tutorial de uso do monotouch:</p>
<p><a href="http://www.codesnack.com/storage/screencasts/gettingstarted/index.html">http://www.codesnack.com/storage/screencasts/gettingstarted/index.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gbenatti.net/blog/2009/09/desenvolvimento-para-iphone-com-mono/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
