<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
	>
<channel>
	<title>Comments on: Parannuksia Java-kieleen</title>
	<atom:link href="http://www.ampiaistehdas.net/artti/2006/07/29/parannuksia-java-kieleen/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ampiaistehdas.net/artti/2006/07/29/parannuksia-java-kieleen/</link>
	<description></description>
	<pubDate>Tue, 06 Jan 2009 03:37:46 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Artti Jaakkola</title>
		<link>http://www.ampiaistehdas.net/artti/2006/07/29/parannuksia-java-kieleen/comment-page-1/#comment-72</link>
		<dc:creator>Artti Jaakkola</dc:creator>
		<pubDate>Thu, 10 Aug 2006 20:41:44 +0000</pubDate>
		<guid isPermaLink="false">http://www.ampiaistehdas.net/artti/2006/07/29/parannuksia-java-kieleen/#comment-72</guid>
		<description>C#:n "using" avainsana olisi myös aika mainio. Se takaa, että nimetyn muuttujan Dispose-metodia kutsutaan blokin päätteeksi.

Esim:

&lt;pre&gt;&lt;code&gt;using (TextReader r = File.OpenText(“log.txt”))
{
    // Tiedoston lukua
}   // &lt;- Tässä kutsutaan r.Dispose()&lt;/code&gt;&lt;/pre&gt;

Javassa sama homma vaatii enemmän nakuttelua, eikä kieli itsessään mitenkään varmista resurssien vapauttamista:

&lt;pre&gt;&lt;code&gt;final FileInputStream f = new FileInputStream("log.txt");
try
{
    // Tiedoston lukua
}
finally
{
    close(f);
}&lt;/code&gt;&lt;/pre&gt;</description>
		<content:encoded><![CDATA[<p>C#:n &#8220;using&#8221; avainsana olisi myös aika mainio. Se takaa, että nimetyn muuttujan Dispose-metodia kutsutaan blokin päätteeksi.</p>
<p>Esim:</p>
<pre><code>using (TextReader r = File.OpenText(“log.txt”))
{
    // Tiedoston lukua
}   // < - Tässä kutsutaan r.Dispose()</code></code></pre>
<p>Javassa sama homma vaatii enemmän nakuttelua, eikä kieli itsessään mitenkään varmista resurssien vapauttamista:</p>
<pre><code>final FileInputStream f = new FileInputStream("log.txt");
try
{
    // Tiedoston lukua
}
finally
{
    close(f);
}</code></pre>
]]></content:encoded>
	</item>
	<item>
		<title>By: Juha Komulainen</title>
		<link>http://www.ampiaistehdas.net/artti/2006/07/29/parannuksia-java-kieleen/comment-page-1/#comment-66</link>
		<dc:creator>Juha Komulainen</dc:creator>
		<pubDate>Sun, 30 Jul 2006 18:38:22 +0000</pubDate>
		<guid isPermaLink="false">http://www.ampiaistehdas.net/artti/2006/07/29/parannuksia-java-kieleen/#comment-66</guid>
		<description>OCaml on varmasti helpompi hahmottaa kuin Haskell. OCaml ei ole laiska ja siinä on mahdollisuus sivuvaikutuksiin ilman monadeja. Joku sanoi, että ML on Scheme staattisella tyypityksellä, eikä tuo kaukana olekaan. OCaml lisää tähän pakettiin vielä oliosysteemin.

Voin kyllä silti suositella Haskellia. En usko, että mikään kieli on vaikuttanut ajatteluuni yhtä paljon kuin Haskell. Ensin olin aivan pihalla, mutta nykyään se on ehdottomasti kolmen kärjessä suosikkikielieni listalla. Valitettavasti en osaa sanoa mikä olisi hyvä ensimmäinen Haskell-tutoriaali, mutta hyvä toinen tutoriaali on Jonathan Tangin &lt;a href="http://halogen.note.amherst.edu/~jdtang/scheme_in_48/tutorial/overview.html" rel="nofollow"&gt;Write Yourself a Scheme in 48 Hours&lt;/a&gt;, jossa toteutetaan Haskellilla Scheme-tulkki.

Groovy on kyllä väärin niin monella tasolla ettei sitä viitsi edes ajatella.

En ole itsekään testannut SISC:iä, mutta Scheme on yksi suosikkikielistäni ja pari vuotta takaperin kirjoittelin itsekin Scheme-toteutuksen JVM:lle. En tiedä tukeeko SISC Java-rajapintojen toteutusta Scheme-koodissa, mutta mikäli tukee, niin se kärsii samasta ongelmasta kuin omakin toteutukseni: tulkilla on monta kontekstia, joidenka välillä continuationit eivät toimi. Käytännössä tämä tarkoittaa sitä, että continuationeita voi käyttää vain triviaaleissa ohjelmissa.

Mutta ongelmia JVM:llä tulee jo ilman continuationeitakin: pelkkä häntäkutsujen optimointi tarkoittaa sitä, että joko koodia ei voi kääntää Java bytekoodiksi tai jokaisessa kutsussa täytyy käyttää trampoliinia. Kumpikaan ei ole oikein kiva ratkaisu.

Ilmeisesti Scheme on Marsista ja JVM Venuksesta. Joka tapauksessa olen luopunut yrityksistä ajaa Schemeä JVM:n päällä.</description>
		<content:encoded><![CDATA[<p>OCaml on varmasti helpompi hahmottaa kuin Haskell. OCaml ei ole laiska ja siinä on mahdollisuus sivuvaikutuksiin ilman monadeja. Joku sanoi, että ML on Scheme staattisella tyypityksellä, eikä tuo kaukana olekaan. OCaml lisää tähän pakettiin vielä oliosysteemin.</p>
<p>Voin kyllä silti suositella Haskellia. En usko, että mikään kieli on vaikuttanut ajatteluuni yhtä paljon kuin Haskell. Ensin olin aivan pihalla, mutta nykyään se on ehdottomasti kolmen kärjessä suosikkikielieni listalla. Valitettavasti en osaa sanoa mikä olisi hyvä ensimmäinen Haskell-tutoriaali, mutta hyvä toinen tutoriaali on Jonathan Tangin <a href="http://halogen.note.amherst.edu/~jdtang/scheme_in_48/tutorial/overview.html" rel="nofollow">Write Yourself a Scheme in 48 Hours</a>, jossa toteutetaan Haskellilla Scheme-tulkki.</p>
<p>Groovy on kyllä väärin niin monella tasolla ettei sitä viitsi edes ajatella.</p>
<p>En ole itsekään testannut SISC:iä, mutta Scheme on yksi suosikkikielistäni ja pari vuotta takaperin kirjoittelin itsekin Scheme-toteutuksen JVM:lle. En tiedä tukeeko SISC Java-rajapintojen toteutusta Scheme-koodissa, mutta mikäli tukee, niin se kärsii samasta ongelmasta kuin omakin toteutukseni: tulkilla on monta kontekstia, joidenka välillä continuationit eivät toimi. Käytännössä tämä tarkoittaa sitä, että continuationeita voi käyttää vain triviaaleissa ohjelmissa.</p>
<p>Mutta ongelmia JVM:llä tulee jo ilman continuationeitakin: pelkkä häntäkutsujen optimointi tarkoittaa sitä, että joko koodia ei voi kääntää Java bytekoodiksi tai jokaisessa kutsussa täytyy käyttää trampoliinia. Kumpikaan ei ole oikein kiva ratkaisu.</p>
<p>Ilmeisesti Scheme on Marsista ja JVM Venuksesta. Joka tapauksessa olen luopunut yrityksistä ajaa Schemeä JVM:n päällä.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Artti Jaakkola</title>
		<link>http://www.ampiaistehdas.net/artti/2006/07/29/parannuksia-java-kieleen/comment-page-1/#comment-65</link>
		<dc:creator>Artti Jaakkola</dc:creator>
		<pubDate>Sun, 30 Jul 2006 17:20:09 +0000</pubDate>
		<guid isPermaLink="false">http://www.ampiaistehdas.net/artti/2006/07/29/parannuksia-java-kieleen/#comment-65</guid>
		<description>En tiennytkään, että Microsoft on tehnyt oman versionsa OCamlista. Vaikka Haskell taitaakin olla tällä hetkellä kehittyneimpänä pidetty staattinen FL, niin mielestäni tuo OCaml on jotenkin selkeämpi. Johtuu ehkä siitä, että lukemani Haskell-selostus kertoi noin kymmenen erilaista tapaa tehdä yksi ja sama rekursio. Tuli vähän liikaa tavaraa kerralla. :-)

OCamlin tutoriaali taas oli erittäin selkeä:

http://www.ocaml-tutorial.org/

Javan päälle rakennetuista kielistä olen kolunnut vasta Groovyä ja Niceä. Groovyn ongelma alkaa mielestäni olla se, että siinä on turhaan ruvettu sekoittamaan Javan ja Rubyn syntaksia. Hyvänä esimerkkinä viimeaikainen @Property/def-säätö. Nyt eri näkyvyydet menevät seuraavasti:

http://docs.codehaus.org/display/GroovyJSR/Property+proposal

Ihan hyvä, että tiputtivat tuon @Propertyn.

Yksi mikä on kanssa odotellut testaamista on SISC, R5RS-toteutus. Näyttäisi olevan varsin pätevästi toteutettu:

http://sisc.sourceforge.net/r5rs_pitfall.php

Tuo Scala vaikuttaa kyllä varsin tyylikkäältä. Täytyykin ladata se heti. Kiitoksia! :-)</description>
		<content:encoded><![CDATA[<p>En tiennytkään, että Microsoft on tehnyt oman versionsa OCamlista. Vaikka Haskell taitaakin olla tällä hetkellä kehittyneimpänä pidetty staattinen FL, niin mielestäni tuo OCaml on jotenkin selkeämpi. Johtuu ehkä siitä, että lukemani Haskell-selostus kertoi noin kymmenen erilaista tapaa tehdä yksi ja sama rekursio. Tuli vähän liikaa tavaraa kerralla. <img src='http://www.ampiaistehdas.net/artti/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>OCamlin tutoriaali taas oli erittäin selkeä:</p>
<p><a href="http://www.ocaml-tutorial.org/" rel="nofollow">http://www.ocaml-tutorial.org/</a></p>
<p>Javan päälle rakennetuista kielistä olen kolunnut vasta Groovyä ja Niceä. Groovyn ongelma alkaa mielestäni olla se, että siinä on turhaan ruvettu sekoittamaan Javan ja Rubyn syntaksia. Hyvänä esimerkkinä viimeaikainen @Property/def-säätö. Nyt eri näkyvyydet menevät seuraavasti:</p>
<p><a href="http://docs.codehaus.org/display/GroovyJSR/Property+proposal" rel="nofollow">http://docs.codehaus.org/display/GroovyJSR/Property+proposal</a></p>
<p>Ihan hyvä, että tiputtivat tuon @Propertyn.</p>
<p>Yksi mikä on kanssa odotellut testaamista on SISC, R5RS-toteutus. Näyttäisi olevan varsin pätevästi toteutettu:</p>
<p><a href="http://sisc.sourceforge.net/r5rs_pitfall.php" rel="nofollow">http://sisc.sourceforge.net/r5rs_pitfall.php</a></p>
<p>Tuo Scala vaikuttaa kyllä varsin tyylikkäältä. Täytyykin ladata se heti. Kiitoksia! <img src='http://www.ampiaistehdas.net/artti/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Juha Komulainen</title>
		<link>http://www.ampiaistehdas.net/artti/2006/07/29/parannuksia-java-kieleen/comment-page-1/#comment-64</link>
		<dc:creator>Juha Komulainen</dc:creator>
		<pubDate>Sun, 30 Jul 2006 08:59:17 +0000</pubDate>
		<guid isPermaLink="false">http://www.ampiaistehdas.net/artti/2006/07/29/parannuksia-java-kieleen/#comment-64</guid>
		<description>Dang, kirjoittelin jo pitemmänkin kommentin, mutta sitten softa valitti tarkistuskoodin olleen väärin ja menetin sen. :( (Siitäs sain kun en noudattanut sääntöä numero 1: kopioi aina kirjoittamasi teksti leikepöydälle ennen kuin klikkaat submittia.) No koitetaan uudestaan, hieman lyhyemmin.

Oletko sattunut tutustumaan &lt;a href="http://scala.epfl.ch/" rel="nofollow"&gt;Scalaan&lt;/a&gt;? Scala on ehkä lupaavin JVM-pohjainen kieli, johon olen törmännyt ja se ratkaiseekin melko monet näistä ongelmista.

Microsoftin LINQ on itse asiassa paljon mukavampi miltä se näyttää: kääntäjä ei itse asiassa ymmärrä lainkaan LINQ-lauseiden semantiikkaa, vaan ainoastaan muodostaa parse-puun, johon pääsee ajonaikana käsiksi ohjelmallisesti. Näin ohjelmoija voi itse määritellä haluamansa semantiikan LINQ-lauseelle. (Esimerkiksi generoida siitä SQL- tai XPath-kyselyn.)

Guy Steelen &lt;a href="http://research.sun.com/projects/plrg/" rel="nofollow"&gt;Fortress&lt;/a&gt; menee vielä astetta pitemmälle: Fortressissa voi määritellä ohjelmallisia makroja, jotka jäsentävät ohjelmaa ja generoivat mielivaltaisia rakenteita jo käännösaikana. Ehkä tämä on se Fortressin ominaisuus, jossa Steelen Lisp-tausta näkyy parhaiten.

Olen kyllä menettänyt melkein toivoni Sunin suhteen. Siinä missä Microsoft kehittää omaa alustaansa jatkuvasti (LINQ, &lt;a href="http://research.microsoft.com/fsharp/" rel="nofollow"&gt;F#&lt;/a&gt;, ...), sanoo Sun &lt;a href="http://blogs.zdnet.com/Burnette/?p=117" rel="nofollow"&gt;mahdollisesti lisäävänsä&lt;/a&gt; tuen propertyille, metodiviitteille ja closureille Java 7:aan. :( No, ehkä pitää antaa Sunille anteeksi Fortressin takia, vaikka se onkin suunnattu vähän eri kohderyhmälle. (Eikä siis toimi JVM:llä.)

Tulipas tästä nyt linkkipommitus. Anteeksi. :)</description>
		<content:encoded><![CDATA[<p>Dang, kirjoittelin jo pitemmänkin kommentin, mutta sitten softa valitti tarkistuskoodin olleen väärin ja menetin sen. <img src='http://www.ampiaistehdas.net/artti/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> (Siitäs sain kun en noudattanut sääntöä numero 1: kopioi aina kirjoittamasi teksti leikepöydälle ennen kuin klikkaat submittia.) No koitetaan uudestaan, hieman lyhyemmin.</p>
<p>Oletko sattunut tutustumaan <a href="http://scala.epfl.ch/" rel="nofollow">Scalaan</a>? Scala on ehkä lupaavin JVM-pohjainen kieli, johon olen törmännyt ja se ratkaiseekin melko monet näistä ongelmista.</p>
<p>Microsoftin LINQ on itse asiassa paljon mukavampi miltä se näyttää: kääntäjä ei itse asiassa ymmärrä lainkaan LINQ-lauseiden semantiikkaa, vaan ainoastaan muodostaa parse-puun, johon pääsee ajonaikana käsiksi ohjelmallisesti. Näin ohjelmoija voi itse määritellä haluamansa semantiikan LINQ-lauseelle. (Esimerkiksi generoida siitä SQL- tai XPath-kyselyn.)</p>
<p>Guy Steelen <a href="http://research.sun.com/projects/plrg/" rel="nofollow">Fortress</a> menee vielä astetta pitemmälle: Fortressissa voi määritellä ohjelmallisia makroja, jotka jäsentävät ohjelmaa ja generoivat mielivaltaisia rakenteita jo käännösaikana. Ehkä tämä on se Fortressin ominaisuus, jossa Steelen Lisp-tausta näkyy parhaiten.</p>
<p>Olen kyllä menettänyt melkein toivoni Sunin suhteen. Siinä missä Microsoft kehittää omaa alustaansa jatkuvasti (LINQ, <a href="http://research.microsoft.com/fsharp/" rel="nofollow">F#</a>, &#8230;), sanoo Sun <a href="http://blogs.zdnet.com/Burnette/?p=117" rel="nofollow">mahdollisesti lisäävänsä</a> tuen propertyille, metodiviitteille ja closureille Java 7:aan. <img src='http://www.ampiaistehdas.net/artti/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> No, ehkä pitää antaa Sunille anteeksi Fortressin takia, vaikka se onkin suunnattu vähän eri kohderyhmälle. (Eikä siis toimi JVM:llä.)</p>
<p>Tulipas tästä nyt linkkipommitus. Anteeksi. <img src='http://www.ampiaistehdas.net/artti/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Artti Jaakkola</title>
		<link>http://www.ampiaistehdas.net/artti/2006/07/29/parannuksia-java-kieleen/comment-page-1/#comment-62</link>
		<dc:creator>Artti Jaakkola</dc:creator>
		<pubDate>Sun, 30 Jul 2006 08:07:20 +0000</pubDate>
		<guid isPermaLink="false">http://www.ampiaistehdas.net/artti/2006/07/29/parannuksia-java-kieleen/#comment-62</guid>
		<description>Löysin hyvän selostuksen, mitä vaaditaan uuden kielen toteuttamiseksi Eclipseen:

http://wiki.eclipse.org/index.php/The_Official_Eclipse_FAQs#Implementing_Support_for_Your_Own_Language</description>
		<content:encoded><![CDATA[<p>Löysin hyvän selostuksen, mitä vaaditaan uuden kielen toteuttamiseksi Eclipseen:</p>
<p><a href="http://wiki.eclipse.org/index.php/The_Official_Eclipse_FAQs#Implementing_Support_for_Your_Own_Language" rel="nofollow">http://wiki.eclipse.org/index.php/The_Official_Eclipse_FAQs#Implementing_Support_for_Your_Own_Language</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Artti Jaakkola</title>
		<link>http://www.ampiaistehdas.net/artti/2006/07/29/parannuksia-java-kieleen/comment-page-1/#comment-61</link>
		<dc:creator>Artti Jaakkola</dc:creator>
		<pubDate>Sat, 29 Jul 2006 19:16:54 +0000</pubDate>
		<guid isPermaLink="false">http://www.ampiaistehdas.net/artti/2006/07/29/parannuksia-java-kieleen/#comment-61</guid>
		<description>Joku muukin on näköjään kirjoittanut lähestulkoon identtisen listan toisaalla: :-)

http://bagotricks.com/blog/2006/06/16/a-tale-of-two-javas/

1a -&gt; "Number literals default to being arbitrary precision. Like BigDecimal or maybe a bit more serious."
2a -&gt; "Everything not-null by default."
2c -&gt; "Members are private by default."
4 -&gt; "Maybe JSON-esque object, map, and list literals"

Tässä listassa oli muitakin hyviä ideoita, kuten esimerkiksi "=="-notaation muuttaminen nulleja sietäväksi equalsiksi kuten Groovyssä ja charactereiden muuttaminen int-tasoisiksi (32-bittinen unicode).</description>
		<content:encoded><![CDATA[<p>Joku muukin on näköjään kirjoittanut lähestulkoon identtisen listan toisaalla: <img src='http://www.ampiaistehdas.net/artti/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><a href="http://bagotricks.com/blog/2006/06/16/a-tale-of-two-javas/" rel="nofollow">http://bagotricks.com/blog/2006/06/16/a-tale-of-two-javas/</a></p>
<p>1a -> &#8220;Number literals default to being arbitrary precision. Like BigDecimal or maybe a bit more serious.&#8221;<br />
2a -> &#8220;Everything not-null by default.&#8221;<br />
2c -> &#8220;Members are private by default.&#8221;<br />
4 -> &#8220;Maybe JSON-esque object, map, and list literals&#8221;</p>
<p>Tässä listassa oli muitakin hyviä ideoita, kuten esimerkiksi &#8220;==&#8221;-notaation muuttaminen nulleja sietäväksi equalsiksi kuten Groovyssä ja charactereiden muuttaminen int-tasoisiksi (32-bittinen unicode).</p>
]]></content:encoded>
	</item>
</channel>
</rss>
