<?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>jvm - In Fine - Le Blog</title>
	<atom:link href="https://blog.infine.com/tag/jvm/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.infine.com</link>
	<description>Le blog des technos de demain !</description>
	<lastBuildDate>Thu, 26 Jan 2012 13:07:37 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.7</generator>

<image>
	<url>https://blog.infine.com/wp-content/uploads/2021/03/cropped-vignette-32x32.png</url>
	<title>jvm - In Fine - Le Blog</title>
	<link>https://blog.infine.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Devoxx 2011 &#8211; Ceylon</title>
		<link>https://blog.infine.com/devoxx-2011-ceylon-1414?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=devoxx-2011-ceylon</link>
					<comments>https://blog.infine.com/devoxx-2011-ceylon-1414#respond</comments>
		
		<dc:creator><![CDATA[Florian Boulay]]></dc:creator>
		<pubDate>Wed, 30 Nov 2011 15:00:49 +0000</pubDate>
				<category><![CDATA[Conférence]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[demo]]></category>
		<category><![CDATA[devoxx]]></category>
		<category><![CDATA[jvm]]></category>
		<category><![CDATA[language]]></category>
		<guid isPermaLink="false">https://blog.infine.com/?p=1414</guid>

					<description><![CDATA[<p><span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">5</span> <span class="rt-label rt-postfix">min.</span></span> Ceylon est un nouveau langage s&#8217;exécutant sur la JVM. Il rejoint une liste désormais assez longue qui comprend notamment : Groovy Jython Jruby Scala Kotlin Fantom Gosu &#8230; Gavin King a créé Ceylon parce qu&#8217;il était frustré par les limitations de Java. Cette session a été animée par deux français, Emmanuel Bernard et Stéphane Epardaud &#8230;</p>
<p>The post <a href="https://blog.infine.com/devoxx-2011-ceylon-1414">Devoxx 2011 – Ceylon</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></description>
										<content:encoded><![CDATA[<span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">5</span> <span class="rt-label rt-postfix">min.</span></span><p><a href="https://blog.infine.com/wp-content/uploads/2011/11/ceylon-logo.png" class="fancyboxgroup" rel="gallery-1414" title="ceylon logo"><img decoding="async" src="https://blog.infine.com/wp-content/uploads/2011/11/ceylon-logo.png" alt="ceylon logo" title="ceylon logo" width="325" height="100" class="alignright size-full wp-image-1417" srcset="https://blog.infine.com/wp-content/uploads/2011/11/ceylon-logo.png 325w, https://blog.infine.com/wp-content/uploads/2011/11/ceylon-logo-300x92.png 300w" sizes="(max-width: 325px) 100vw, 325px" /></a></p>
<p>Ceylon est un nouveau langage s&#8217;exécutant sur la JVM. Il rejoint une liste désormais assez longue qui comprend notamment :</p>
<ul>
<li>Groovy</li>
<li>Jython</li>
<li>Jruby</li>
<li>Scala</li>
<li>Kotlin</li>
<li>Fantom</li>
<li>Gosu</li>
<li>&#8230;</li>
</ul>
<p>Gavin King a créé Ceylon parce qu&#8217;il était frustré par les limitations de Java. Cette session a été animée par deux français, Emmanuel Bernard et Stéphane Epardaud qui sont commiters sur le projet. Ils ont débuté la session en définissant les objectifs de Ceylon, avant de continuer sur ses fonctionnalités à l&#8217;aide de code. Je ne vais pas reproduire le code qu&#8217;ils ont utilisé pendant la présentation dans cet article, je vais essayer d&#8217;être plus concis.</p>
<p><span id="more-1414"></span></p>
<p>Emmanuel commence par nous indiquer les objectifs de Ceylon :</p>
<ul>
<li>Permettre d&#8217;écrire du code plus simple que l&#8217;équivalent en java</li>
<li>Éviter au développeur de tomber dans les principaux pièges de java</li>
</ul>
<p>Ceylon est pensé pour être lu facilement par des développeurs venant du monde Java. Emmanuel insiste bien sur ce point : Ceylon doit être simple à utiliser mais également simple à lire. Le code ne doit pas soulever d’ambiguïté. </p>
<h1>Principes de base</h1>
<h2>Classe simple</h2>
<pre class="brush: java; title: ; notranslate">
shared class User(String username, Natural age) {
    shared String username = username;
    shared Natural age = age;

    shared void printUser() {
        print(&quot;User name : &quot; username &quot; with age &quot; age &quot; is printed&quot;);
    }
}
</pre>
<p>Cette classe est courte, mais il y a déjà plusieurs choses à dire dessus :</p>
<ul>
<li>Le mot-clé <code>class</code> indique évidemment qu&#8217;il s&#8217;agit d&#8217;une déclaration de classe</li>
<li>Le mot-clé <code>shared</code> est l&#8217;équivalent du <code>public</code> de Java. Si le mot-clé <code>shared</code> est omis, alors la visibilité est privée (visibilité par défaut en Ceylon)</li>
<li>A la suite de la déclaration de la classe <code>User</code> se trouvent des paramètres <code>(String username, Natural age)</code>, il s&#8217;agit de la déclaration du constructeur. Je dis bien <strong>du</strong> car une Ceylon interdit la surcharge de méthode et donc un seul constructeur est autorisé</li>
<li><code>Natural</code> est l&#8217;objet représentant un nombre entier naturel. En Ceylon, il n&#8217;y a pas de type primitif</li>
<li>Les attributs de la classe sont obligatoirement initialisés, il n&#8217;y a pas de valeur par défaut, même <code>null</code> n&#8217;est pas implicite. Ici, les valeurs sont celles fournies au constructeur</li>
<li>La déclaration de la méthode <code>printUser</code> se fait comme en Java, le mot-clé <code>shared</code> en plus si on souhaite l&#8217;exposer</li>
<li>La concaténation de chaîne de caractère peut se faire sans le caractère <strong>+</strong>. La concaténation avec le caractère <strong>+</strong> fonctionne également</li>
</ul>
<h2>Méthodes</h2>
<pre class="brush: java; highlight: [2,6,12,22]; title: ; notranslate">
shared class Parent() {
    shared default void printMe() {
         print(&quot;I'm in parent class&quot;);
    }

    shared void printMessage(String messageToPrint = &quot;default argument value&quot;) {
         print(&quot;I'm in parent class and I print &quot; + messageToPrint);
    }
}

shared class Child() extends Parent() {
    shared actual void printMe() {
         print(&quot;I'm in child class&quot;);
    }
}

void testCeylon() {
    // appel de méthodes
    Parent p = Parent();
    p.printMe();
    p.printMessage(); // default value of parameter used - will work on milestone 2
    p.printMessage(&quot;message given as argument&quot;);  // classic call
    p.printMessage {  // name argument used
        messageToPrint = &quot;message with named arguments&quot;;
    };
}
</pre>
<p>Encore une fois, malgré la petite taille de code et sa lisibilité, plusieurs fonctionnalités sont à décrire :</p>
<ul>
<li>Comme dit plus haut, les méthodes ne sont pas surchargeables. Pour palier à cette obligation les paramètres peuvent avoir des valeurs par défaut (ligne 6), des <em>varargs</em> peuvent être utilisés (comme en java), ou des <em>union types</em> peuvent être utilisés (voir la doc pour plus de détails)</li>
<li>Les paramètres des méthodes sont nommés &#8211; ligne 22</li>
<li>Les méthodes peuvent être redéfinies dans les classes filles mais il faut l&#8217;autoriser explicitement grâce au mot clé <code>default</code> dans la classe parent (équivalent du <code>virtual</code> du C++ utilisé dans la classe parent) &#8211; ligne 2</li>
<li>Lors de la rédéfinition de la méthode dans une classe fille, il faut obligatoirement utiliser le mot-clé <code>actual</code> (équivalent à l&#8217;annotation <code>@Override</code> de Java) &#8211; ligne 12</li>
</ul>
<h2>null et immuabilité</h2>
<p>Par défaut toutes les variables sont immuables en Ceylon. Afin de les rendre modifiables il faut explicitement adapter la syntaxe de déclaration d&#8217;une variable en ajoutant le mot-clé <code>variable</code> et effectuer l&#8217;affectation avec l&#8217;opérateur <strong>:=</strong> : </p>
<pre class="brush: java; title: ; notranslate">
shared class ImmutableExample(Natural year) {
    // immutable
    Natural year = year;
    // Mutable
    variable Natural writableYear := year;
}
</pre>
<p>Afin d&#8217;éviter les trop nombreux <code>NullPointerException</code> de Java, une variable qui pourrait contenir la valeur  <code>null</code> doit être déclaré à l&#8217;aide d&#8217;un <code>?</code>. Ceci a des conséquences sur la manière d&#8217;utiliser ces variables comme le montre le code ci-dessous :</p>
<pre class="brush: java; title: ; notranslate">
// myBestVariable can be null
String? myBestVariable = functionThatCanReturnNull();
// to work on myBestVariable, a null check must be done
if (exists myBestVariable) {
    functionThatNeedAString(myBestVariable);
}
else {
    functionThatNeedAString(&quot;default value&quot;);
}
</pre>
<h2>Autres fonctionnalités</h2>
<p>Emmanuel et Stéphane ont présenté d&#8217;autres fonctionnalités importantes de Ceylon telles que les <em>union type</em> et les <em>intersection type</em>. Pour plus de détails, reportez vous à la <a href="http://ceylon-lang.org/documentation/tour/types/">documentation officielle.</a><br />
Malgré les arguments nommés, il est possible d&#8217;utiliser les generics. Les annotations sont également disponibles.<br />
La compatibilité entre Java et Ceylon est également disponible. Ceylon peut utiliser du code écrit en Java, et Java peut appeler du code Ceylon.</p>
<h1>En pratique</h1>
<p>Emmanuel et Stéphane, après avoir transmis les bases à l&#8217;auditoire, effectuent une démo en live de Ceylon dans Eclipse. Un plugin Eclipse a été développé et est déjà fontionnel. L&#8217;autocomplétion fonctionne bien, la coloration syntaxique et le refactoring également. Plus d&#8217;infos sur le <a href="https://github.com/ceylon/ceylon-ide-eclipse">repo git</a> associé.</p>
<p>Aucune version de Ceylon n&#8217;a encore été releasée. La prochaine version à sortir sera la milestone 1 qui ne comprendra pas encore toutes les fonctionnalités de la spécification. Trois milestones sont prévues avant que la version 1.0 ne sorte.</p>
<h2>Test de Ceylon</h2>
<p>Il est évidemment possible aujourd&#8217;hui de tester dès aujourd&#8217;hui Ceylon et pour cela, j&#8217;ai réalisé un petit screencast afin de vous montrer qu&#8217;avoir le compilateur Ceylon utilisable sur son poste est vraiment simple et rapide.</p>
<p>Les prérequis sont d&#8217;avoir sur sa machine Java 6, Ant et Git. Dans le screencast, je clone les trois repositories Git nécessaires à la création du compilateur. Chacun nécessite Ant afin d&#8217;être compilé. Une fois le compilateur généré, je le teste en compilant l&#8217;exemple de code que j&#8217;ai donné ci-dessus dans le paragraphe <em>Méthodes</em>, et je l&#8217;exécute.</p>
<p><iframe src="http://player.vimeo.com/video/32661574?title=0&amp;portrait=0&amp;color=ff9933" width="660" height="371" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe></p>
<p>Pour ceux qui veulent tester, je vous retranscrits les commandes utilisées dans le screencast afin de faciliter le copier coller</p>

<table id="wp-table-reloaded-id-1-no-1" class="wp-table-reloaded wp-table-reloaded-id-1">
<thead>
	<tr class="row-1 odd">
		<th class="column-1">Repository Git</th><th class="column-2">Commande pour compiler le repository</th>
	</tr>
</thead>
<tbody class="row-hover">
	<tr class="row-2 even">
		<td class="column-1">git://github.com/ceylon/ceylon.language.git</td><td class="column-2">ant clean publish</td>
	</tr>
	<tr class="row-3 odd">
		<td class="column-1">git://github.com/ceylon/ceylon-spec.git</td><td class="column-2">ant clean tree publish</td>
	</tr>
	<tr class="row-4 even">
		<td class="column-1">git://github.com/ceylon/ceylon-compiler.git</td><td class="column-2">ant clean build</td>
	</tr>
</tbody>
</table>

<p>Une fois le compilateur généré, je l&#8217;ai testé. Mon fichier source se nomme <em>florian_boulay.ceylon</em> et se trouve dans le répertoire <em>samples</em>. Le répertoire <em>build</em> contient les fichiers Ceylon compilés. <em>testCeylon</em> correspond au nom de la fonction appelée pour lancer le programme.</p>

<table id="wp-table-reloaded-id-2-no-1" class="wp-table-reloaded wp-table-reloaded-id-2">
<tbody class="row-hover">
	<tr class="row-1 odd">
		<td class="column-1">Compilation du fichier Ceylon</td><td class="column-2">~/ceylon/ceylon-compiler/bin/ceylonc -src samples -out build samples/florian_boulay.ceylon</td>
	</tr>
	<tr class="row-2 even">
		<td class="column-1">Exécution du fichier Ceylon</td><td class="column-2">~/ceylon/ceylon-compiler/bin/ceylon -cp build/unversioned/default_module-unversioned.car testCeylon</td>
	</tr>
</tbody>
</table>

<p>Ceylon est un langage simple à comprendre pour qui vient de Java. En écrire est également à la portée de tous. Jusque là les objectifs de Gavin King sont atteints.</p>
<h2> Fin de la session</h2>
<p>Pour finir, Emmanuel nous indique que Ceylon a enfin sont site web : <a href="http://ceylon-lang.org">http://ceylon-lang.org</a></p>
<p>Il contient une documentation très complète, la spécification du langage écrite par Gavin King, un blog et tout ce qu&#8217;il faut pour contribuer au développement du langage. C&#8217;est là bas qu&#8217;il faut aller si vous souhaitez tester le langage qui n&#8217;a pas encore été releasé, mais peut être testé via la récupération du code source sur Github.</p>
<p>Comme vous le voyez, le logo de Ceylon est un éléphant, est-ce un hommage à PHP ? On peut lui souhaiter qu&#8217;il ait le même succès que PHP</p>
<p>De nombreux nouveaux langages ont émergé ces derniers mois fonctionnant sur la JVM (Eclipse Xtend, JetBrains Kotlin). Comme dit plus haut, Ceylon veut rester accessible à tout le monde en restant simple et facilement compréhensible. Est-ce que ces atouts seront suffisants pour faire de Ceylon une alternative à Java réellement utilisée, comme l&#8217;est Scala aujourd&#8217;hui ? Faites vous votre propre opinion et essayez le.</p><p>The post <a href="https://blog.infine.com/devoxx-2011-ceylon-1414">Devoxx 2011 – Ceylon</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.infine.com/devoxx-2011-ceylon-1414/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
