<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7689513627092968386</id><updated>2011-07-31T00:11:28.942-07:00</updated><title type='text'>The Java Mint Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.javamint.org/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://www.javamint.org/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Walid Taha</name><uri>http://www.blogger.com/profile/01616333334672611519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_4NX-MFMWn08/SvuJNotgK9I/AAAAAAAAABg/ldVmrOExjbc/S220/Walid+Photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>32</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7689513627092968386.post-2686205299403638544</id><published>2010-10-20T14:58:00.000-07:00</published><updated>2010-10-20T15:05:31.127-07:00</updated><title type='text'>New Mint Release: r15952</title><content type='html'>I made a new release of &lt;a href="http://www.javamint.org/"&gt;Mint&lt;/a&gt; and &lt;a href="http://www.cs.rice.edu/%7Emgricken/research/mint/index.shtml"&gt;DrJava with Mint&lt;/a&gt; yesterday: October 19, 2010 (r15952). The latest release is, as always, available from the &lt;a href="http://plresearch.org/do/view/ProgrammingLanguages/JavaMint"&gt;Mint implementation&lt;/a&gt; page:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://plresearch.org/twiki/pub/ProgrammingLanguages/JavaMint/JavaMint-r15952.tar.gz"&gt;JavaMint-r15952.tar.gz&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://plresearch.org/twiki/pub/ProgrammingLanguages/JavaMint/JavaMint-r15952-binaries.zip"&gt;JavaMint-r15952-binaries.zip&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cs.rice.edu/%7Emgricken/research/mint/download/drjava-r5403-mint-r15952.jar"&gt;drjava-r5403-mint-r15952.jar&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;There were several bug fixes regarding assignment to variables declared as &lt;tt&gt;CodeFree&lt;/tt&gt;, the places where &lt;tt&gt;SafeCode&lt;/tt&gt; is required, treatment of type variables with bounds in escapes, and array types, which were erroneously printed as '[Lfoo/bar;' or '[B'.&lt;br /&gt;&lt;br /&gt;The version of DrJava with Mint is based on the current trunk (and therefore is newer than the updated stable release of DrJava that was recently made available).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7689513627092968386-2686205299403638544?l=www.javamint.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javamint.org/feeds/2686205299403638544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.javamint.org/2010/10/new-mint-release-r15952.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/2686205299403638544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/2686205299403638544'/><link rel='alternate' type='text/html' href='http://www.javamint.org/2010/10/new-mint-release-r15952.html' title='New Mint Release: r15952'/><author><name>Mathias Ricken</name><uri>http://www.blogger.com/profile/03677879252056970614</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7689513627092968386.post-1111067025387501726</id><published>2010-10-10T05:35:00.000-07:00</published><updated>2010-10-10T05:41:00.026-07:00</updated><title type='text'>GPCE'10 Tutorial Slides</title><content type='html'>The slides for our GPCE 2010 tutorial presentation "Agile and Efficient Domain-Specific Languages using Multi-Stage Programming in Java Mint" are available now as &lt;a href="http://www.cs.rice.edu/~mgricken/research/mint/download/Mint-GPCE-tutorial-presentation-20101010.pdf"&gt;PowerPoint&lt;/a&gt; and &lt;a href="http://www.cs.rice.edu/~mgricken/research/mint/download/Mint-GPCE-tutorial-presentation-20101010.pdf"&gt;PDF&lt;/a&gt; file. &lt;br /&gt;&lt;br /&gt;The zip file with the &lt;a href="http://www.cs.rice.edu/~mgricken/research/mint/download/mint-gpce2010-tutorial-source.zip"&gt;source code&lt;/a&gt; for our GPCE 2010 tutorial is available too.&lt;br /&gt;&lt;br /&gt;The simplest way to &lt;a href="http://plresearch.org/do/view/ProgrammingLanguages/JavaMint"&gt;experiment with Mint&lt;/a&gt; is to download the latest version of &lt;a href="http://www.cs.rice.edu/~mgricken/research/mint/download/drjava-r5401-mint-r15903.jar"&gt;DrJava with Mint&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7689513627092968386-1111067025387501726?l=www.javamint.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javamint.org/feeds/1111067025387501726/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.javamint.org/2010/10/gpce10-tutorial-slides.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/1111067025387501726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/1111067025387501726'/><link rel='alternate' type='text/html' href='http://www.javamint.org/2010/10/gpce10-tutorial-slides.html' title='GPCE&apos;10 Tutorial Slides'/><author><name>Mathias Ricken</name><uri>http://www.blogger.com/profile/03677879252056970614</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7689513627092968386.post-7671583762773484379</id><published>2010-10-10T02:38:00.000-07:00</published><updated>2010-10-10T03:00:14.987-07:00</updated><title type='text'>GPCE'10 Tutorial Source</title><content type='html'>Here is a zip file with the &lt;a href="http://www.cs.rice.edu/~mgricken/research/mint/download/mint-gpce2010-tutorial-source.zip"&gt;source code&lt;/a&gt; for our &lt;a href="http://www.javamint.org/2010/08/gpce10-tutorial-lecture-agile-and.html"&gt;GPCE 2010 tutorial&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The simplest way to &lt;a href="http://plresearch.org/do/view/ProgrammingLanguages/JavaMint"&gt;experiment with Mint&lt;/a&gt; is to download the latest version of &lt;a href="http://www.cs.rice.edu/~mgricken/research/mint/download/drjava-r5401-mint-r15903.jar"&gt;DrJava with Mint&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7689513627092968386-7671583762773484379?l=www.javamint.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javamint.org/feeds/7671583762773484379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.javamint.org/2010/10/gpce10-tutorial-source.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/7671583762773484379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/7671583762773484379'/><link rel='alternate' type='text/html' href='http://www.javamint.org/2010/10/gpce10-tutorial-source.html' title='GPCE&apos;10 Tutorial Source'/><author><name>Mathias Ricken</name><uri>http://www.blogger.com/profile/03677879252056970614</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7689513627092968386.post-1041666954639435544</id><published>2010-09-30T20:43:00.000-07:00</published><updated>2010-09-30T21:35:53.407-07:00</updated><title type='text'>New Mint Release: r15858</title><content type='html'>I made a new release of &lt;a href="http://www.javamint.org/"&gt;Mint&lt;/a&gt; and &lt;a href="http://www.cs.rice.edu/%7Emgricken/research/mint/index.shtml"&gt;DrJava with Mint&lt;/a&gt; yesterday: September 29, 2010 (r15858). The latest release is, as always, available from the &lt;a href="http://plresearch.org/do/view/ProgrammingLanguages/JavaMint"&gt;Mint implementation&lt;/a&gt; page:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://plresearch.org/twiki/pub/ProgrammingLanguages/JavaMint/JavaMint-r15858.tar.gz"&gt;JavaMint-r15858.tar.gz&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://plresearch.org/twiki/pub/ProgrammingLanguages/JavaMint/JavaMint-r15858-binaries.zip"&gt;JavaMint-r15858-binaries.zip&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cs.rice.edu/%7Emgricken/research/mint/download/drjava-r5398-mint-r15858.jar"&gt;drjava-r5398-mint-r15858.jar&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;We have added the &lt;tt&gt;edu.rice.cs.mint.runtime.CodeFree&lt;/tt&gt; interface and the &lt;tt&gt;edu.rice.cs.mint.runtime.CheckedExceptionInCode&lt;/tt&gt; exception class.&lt;br /&gt;&lt;br /&gt;The &lt;tt&gt;CodeFree&lt;/tt&gt; interface provides a different, more transparent way of specifying separable classes that can be used for non-local assignments and CSP. When a class is declared to implement the &lt;tt&gt;CodeFree&lt;/tt&gt; interface, the class is guaranteed to be code-free, provided a number of static checks are passed:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;All field types and method return types are code-free, either using the old definition that required the types to be &lt;tt&gt;final&lt;/tt&gt;, or by themselves implementing the &lt;tt&gt;CodeFree&lt;/tt&gt; interface.&lt;/li&gt;&lt;li&gt;The same applies to all subtypes of types implementing  the &lt;tt&gt;CodeFree&lt;/tt&gt; interface. It is an error to extend a class declared to be code-free using the &lt;tt&gt;CodeFree&lt;/tt&gt; interface and then to add a field containing or a method returning code.&lt;/li&gt;&lt;/ol&gt;This new rule makes it simpler to work with non-primitive types since the classes do not have to be &lt;tt&gt;final&lt;/tt&gt; anymore. In the past, lifting had to be done instead of using CSP; that is not necessary anymore. Consider the old code with the required &lt;tt&gt;lift&lt;/tt&gt; method and its application instead of straight-forward CSP:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;public abstract class Value {&lt;br /&gt;  public separable int intValue() { throw new WrongTypeException(); }&lt;br /&gt;  public separable boolean booleanValue() { throw new WrongTypeException(); }&lt;br /&gt;  public separable abstract boolean valueEq(Value other);&lt;br /&gt;  public separable abstract Code&amp;lt;Value&amp;gt; lift();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public class IntValue extends Value {&lt;br /&gt;  private int _data;&lt;br /&gt;  // ...&lt;br /&gt;  public separable Code&amp;lt;Value&amp;gt; lift() {&lt;br /&gt;    final int lfData = _data; // hack to help the Mint compiler&lt;br /&gt;    return &amp;lt;| (Value) new IntValue(lfData) |&amp;gt;;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public class BooleanValue extends Value {&lt;br /&gt;  private boolean _data;&lt;br /&gt;  // ...&lt;br /&gt;  public separable Code&amp;lt;Value&amp;gt; lift() {&lt;br /&gt;    final boolean lfData = _data; // hack to help the Mint compiler&lt;br /&gt;    return &amp;lt;| (Value) new BooleanValue(lfData) |&amp;gt;;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// ...&lt;br /&gt;&lt;br /&gt;public class Val implements Exp {&lt;br /&gt;  private Code&amp;lt;Value&amp;gt; _value;&lt;br /&gt;  public Val(final Value value) {&lt;br /&gt;    _value = value.lift(); // lifting here&lt;br /&gt;  }&lt;br /&gt;  // ...&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt; and the new code that doesn't require the &lt;tt&gt;lift&lt;/tt&gt; method anymore:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;public abstract class Value implements CodeFree, Serializable {&lt;br /&gt;  public separable int intValue() { throw new WrongTypeException(); }&lt;br /&gt;  public separable boolean booleanValue() { throw new WrongTypeException(); }&lt;br /&gt;  public separable abstract boolean valueEq(Value other);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public class IntValue extends Value {&lt;br /&gt;  private int _data;&lt;br /&gt;  // ...&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public class BooleanValue extends Value {&lt;br /&gt;  private boolean _data;&lt;br /&gt;  // ...&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// ...&lt;br /&gt;&lt;br /&gt;public class Val implements Exp {&lt;br /&gt;  private Code&amp;lt;Value&amp;gt; _value;&lt;br /&gt;  public Val(final Value value) {&lt;br /&gt;    _value = &amp;lt;| value |&amp;gt;; // straight-forward CSP&lt;br /&gt;  }&lt;br /&gt;  // ...&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Please note that a class used in CSP still needs to be serializable if the code object it is used in is to be saved using &lt;tt&gt;MintSerializer.save&lt;/tt&gt;. That means that whenever you implement &lt;tt&gt;CodeFree&lt;/tt&gt;, you should consider also implementing the &lt;tt&gt;java.io.Serializable&lt;/tt&gt; interface.&lt;br /&gt;&lt;br /&gt;The second change involves the way checked exceptions are thrown inside a code object. In the past, checked exceptions were not allowed, because the &lt;tt&gt;Code.run()&lt;/tt&gt; method did not have a &lt;tt&gt;throws Throwable&lt;/tt&gt; clause.&lt;br /&gt;&lt;br /&gt;We still didn't add such a clause, because it would essentially require a try-catch construct around every call to &lt;tt&gt;Code.run()&lt;/tt&gt;. Instead, checked exceptions are caught and rethrown wrapped in a &lt;tt&gt;edu.rice.cs.mint.runtime.CheckedExceptionInCode&lt;/tt&gt; unchecked exception. Here is an example:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;public static separable void m() throws IOException {&lt;br /&gt;  new File("/this/is/a/bad/path").createNewFile(); // throws IOException&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// ...&lt;br /&gt;&lt;br /&gt;SafeCode&amp;lt;Void&amp;gt; c = &amp;lt;| { m(); } |&amp;gt;;&lt;br /&gt;try {&lt;br /&gt;  c.run();&lt;br /&gt;}&lt;br /&gt;catch(CheckedExceptionInCode ce) {&lt;br /&gt;  Throwable cause = ce.getCause();&lt;br /&gt;  // ...&lt;br /&gt;}&lt;/pre&gt;We also improved error checking for calls to separable methods and fixed a bug that required &lt;tt&gt;SafeCode&amp;lt;T&amp;gt;&lt;/tt&gt; in too many places.&lt;br /&gt;&lt;br /&gt;The version of DrJava with Mint is based on the current trunk (and therefore is newer than the updated stable release of DrJava that was recently made available).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7689513627092968386-1041666954639435544?l=www.javamint.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javamint.org/feeds/1041666954639435544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.javamint.org/2010/09/new-mint-release-r15858.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/1041666954639435544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/1041666954639435544'/><link rel='alternate' type='text/html' href='http://www.javamint.org/2010/09/new-mint-release-r15858.html' title='New Mint Release: r15858'/><author><name>Mathias Ricken</name><uri>http://www.blogger.com/profile/03677879252056970614</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7689513627092968386.post-7223258775056466296</id><published>2010-09-16T13:40:00.000-07:00</published><updated>2010-09-16T14:16:14.691-07:00</updated><title type='text'>New Mint Release: r15772</title><content type='html'>We have just made a new release of &lt;a href="http://www.javamint.org/"&gt;Mint&lt;/a&gt; and &lt;a href="http://www.cs.rice.edu/%7Emgricken/research/mint/index.shtml"&gt;DrJava with Mint&lt;/a&gt;: September 16, 2010 (r15772). The latest release is, as always, available from the &lt;a href="http://plresearch.org/do/view/ProgrammingLanguages/JavaMint"&gt;Mint implementation&lt;/a&gt; page:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://plresearch.org/twiki/pub/ProgrammingLanguages/JavaMint/JavaMint-r15772.tar.gz"&gt;JavaMint-r15772.tar.gz&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://plresearch.org/twiki/pub/ProgrammingLanguages/JavaMint/JavaMint-r15772-binaries.zip"&gt;JavaMint-r15772-binaries.zip&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cs.rice.edu/%7Emgricken/research/mint/download/drjava-r5385-mint-r15772.jar"&gt;drjava-r5385-mint-r15772.jar&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;We have added the &lt;tt&gt;edu.rice.cs.mint.runtime.MintSerializer&lt;/tt&gt; class to it that can write code object, including CSP data, to a jar file (or whatever stream you like), and then restore it again. Here is a very simple example:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Code&lt;Integer&gt; c = &lt;|123|&gt;;&lt;br /&gt;File f = new File(dir, "IntegerCode1.jar");&lt;br /&gt;MintSerializer.save(c, "IntegerCode1", f);&lt;br /&gt;        &lt;br /&gt;Integer s = MintSerializer.load(f);&lt;br /&gt;System.out.println(s);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The version of DrJava with Mint is based on the current trunk (and not on updated stable release of DrJava that was made available this week).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7689513627092968386-7223258775056466296?l=www.javamint.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javamint.org/feeds/7223258775056466296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.javamint.org/2010/09/new-mint-release-r15772.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/7223258775056466296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/7223258775056466296'/><link rel='alternate' type='text/html' href='http://www.javamint.org/2010/09/new-mint-release-r15772.html' title='New Mint Release: r15772'/><author><name>Mathias Ricken</name><uri>http://www.blogger.com/profile/03677879252056970614</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7689513627092968386.post-1140711940862696375</id><published>2010-09-01T10:55:00.000-07:00</published><updated>2010-09-01T11:12:16.492-07:00</updated><title type='text'>Mint on the Mac</title><content type='html'>I guess I'm a bit behind the technology curve. The MacBook that I'm using as one of my development machines is one of the original white Intel MacBooks with a Core Duo CPU (not Core 2 Duo). It's a 32-bit machine, and Apple doesn't offer Java 6 for 32-bit computers.&lt;br /&gt;&lt;br /&gt;Mint, however, requires a version of Java 6, which is why we recommended using &lt;a href="http://landonf.bikemonkey.org/static/soylatte/"&gt;SoyLatte&lt;/a&gt; to run Mint. That comes with all kinds of inconveniences because SoyLatte uses X11 for its GUIs, which means DrJava needs to run under X11.&lt;br /&gt;&lt;br /&gt;Yesterday I tested Mint and DrJava with Mint using Apple's Java SE 6.0 Release 1 Developer Preview 6 (file name: &lt;a href="http://www.google.com/search?q=download++javase6release1dp6.dmg"&gt;&lt;tt&gt;javase6release1dp6.dmg&lt;/tt&gt;&lt;/a&gt;), which I still had floating around and which is the last version of Apple's Java 6 that still runs on 32-bit Macs. It works! SoyLatte is only required if you don't have a version of Java 6 (either Apple's official version on 64-bit Macs, or Apple's Java SE 6.0 Release 1 Developer Preview 6 on 32-bit Macs) on your Mac.&lt;br /&gt;&lt;br /&gt;I have updated the instructions on how to &lt;a href="http://www.javamint.org/2009/09/installing-javamint-on-macos.html"&gt;install Java Mint on the Mac&lt;/a&gt; and how to &lt;a href="http://www.javamint.org/2009/09/drjava-with-mint-released.html"&gt;run DrJava with Mint&lt;/a&gt; accordingly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7689513627092968386-1140711940862696375?l=www.javamint.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javamint.org/feeds/1140711940862696375/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.javamint.org/2010/09/mint-on-mac.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/1140711940862696375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/1140711940862696375'/><link rel='alternate' type='text/html' href='http://www.javamint.org/2010/09/mint-on-mac.html' title='Mint on the Mac'/><author><name>Mathias Ricken</name><uri>http://www.blogger.com/profile/03677879252056970614</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7689513627092968386.post-7753182922598037936</id><published>2010-08-30T10:34:00.000-07:00</published><updated>2010-08-30T11:06:15.641-07:00</updated><title type='text'>New Mint Release: r15716</title><content type='html'>As mentioned before, Eddy and I discovered a problem with type variables in code generated by the Mint compiler. We have now fixed this problem in the new release of &lt;a href="http://www.javamint.org/"&gt;Mint&lt;/a&gt; and &lt;a href="http://www.cs.rice.edu/%7Emgricken/research/mint/index.shtml"&gt;DrJava with Mint&lt;/a&gt;: August 30, 2010 (r15716). The latest release is, as always, available    from the &lt;a href="http://plresearch.org/do/view/ProgrammingLanguages/JavaMint"&gt;Mint  implementation&lt;/a&gt; page:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://plresearch.org/twiki/pub/ProgrammingLanguages/JavaMint/JavaMint-r15716.tar.gz"&gt;JavaMint-r15716.tar.gz&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://plresearch.org/twiki/pub/ProgrammingLanguages/JavaMint/JavaMint-r15716-binaries.zip"&gt;JavaMint-r15716-binaries.zip&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cs.rice.edu/%7Emgricken/research/mint/download/drjava-r5380-mint-r15716.jar"&gt;drjava-r5380-mint-r15716.jar&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;The problem occurred when the programmer used a type variable inside a bracket. An example of this would be a generic method like this:&lt;br /&gt;&lt;pre&gt;public separable &amp;lt;X&amp;gt; Code&amp;lt;X&amp;gt; fun(Code&amp;lt;X&amp;gt; c1, Code&amp;lt;X&amp;gt; c2) {&lt;br /&gt;return &lt;| ( `(lfTest.eval(e,f).booleanCodeValue()) ?&lt;br /&gt;              `c2 : `c1 )  |&gt;;&lt;br /&gt;}&lt;/pre&gt; This caused Mint to generate 2nd stage code that contained the type variable &lt;tt&gt;X&lt;/tt&gt; unbound. Unfortunately, the types are erased, and there is no way to find out what type &lt;tt&gt;X&lt;/tt&gt; actually refers to at runtime, e.g. by writing something like &lt;tt&gt;X.class&lt;/tt&gt; (this generates the Java compiler error "cannot select from a type variable").&lt;br /&gt;&lt;br /&gt;To get around this problem, we now require a final instance of type &lt;tt&gt;Class&amp;lt;X&amp;gt;&lt;/tt&gt; to be in scope for every type variable &lt;tt&gt;X&lt;/tt&gt;. For example, in the generic method above, there is a type variable &lt;tt&gt;X&lt;/tt&gt; that is being used in the bracket. Therefore, we now have to have a final instance of &lt;tt&gt;Class&amp;lt;X&amp;gt;&lt;/tt&gt;somewhere in scope, for example as a method parameter.&lt;br /&gt;&lt;pre&gt;public separable &amp;lt;X&amp;gt; Code&amp;lt;X&amp;gt; fun(Code&amp;lt;X&amp;gt; c1, Code&amp;lt;X&amp;gt; c2,&lt;br /&gt;                                 final Class&amp;lt;X&amp;gt; xc) {&lt;br /&gt;return &lt;| ( `(lfTest.eval(e,f).booleanCodeValue()) ?&lt;br /&gt;              `c2 : `c1 )  |&gt;;&lt;br /&gt;}&lt;/pre&gt; That's all that is necessary. The variable &lt;tt&gt;xc&lt;/tt&gt; is not actually used in the code, it just needs to be in scope.&lt;br /&gt;&lt;tt&gt;&lt;/tt&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7689513627092968386-7753182922598037936?l=www.javamint.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javamint.org/feeds/7753182922598037936/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.javamint.org/2010/08/new-mint-release-r15716.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/7753182922598037936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/7753182922598037936'/><link rel='alternate' type='text/html' href='http://www.javamint.org/2010/08/new-mint-release-r15716.html' title='New Mint Release: r15716'/><author><name>Mathias Ricken</name><uri>http://www.blogger.com/profile/03677879252056970614</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7689513627092968386.post-8371902299025149374</id><published>2010-08-24T14:52:00.000-07:00</published><updated>2010-08-30T10:39:04.284-07:00</updated><title type='text'>New Mint Release: r15707</title><content type='html'>When working on our GPCE tutorial, Eddy and I discovered a small bug in the Mint compiler which I have now fixed in the new release of &lt;a href="http://www.javamint.org/"&gt;Mint&lt;/a&gt; and &lt;a href="http://www.cs.rice.edu/%7Emgricken/research/mint/index.shtml"&gt;DrJava with Mint&lt;/a&gt;: August 24, 2010 (r15707). The latest release is, as always, available    from the &lt;a href="http://plresearch.org/do/view/ProgrammingLanguages/JavaMint"&gt;Mint  implementation&lt;/a&gt; page:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://plresearch.org/twiki/pub/ProgrammingLanguages/JavaMint/JavaMint-r15707.tar.gz"&gt;JavaMint-r15707.tar.gz&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://plresearch.org/twiki/pub/ProgrammingLanguages/JavaMint/JavaMint-r15707-binaries.zip"&gt;JavaMint-r15707-binaries.zip&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cs.rice.edu/%7Emgricken/research/mint/download/drjava-r5373-mint-r15707.jar"&gt;drjava-r5373-mint-r15707.jar&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;The only change I made was to fix the &lt;tt&gt;let&lt;/tt&gt; expression pretty printer when the expression contained more than one declaration.&lt;br /&gt;&lt;br /&gt;The problem never came up before because we only had one declaration per &lt;tt&gt;let&lt;/tt&gt; expression, and it was always possible to rewrite&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;let int x = 1, y = 2; x+y&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;as&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;let int x = 1; let int y = 2; x+y&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;We are pushing the Mint compiler more, and we have discovered another problem with generic methods. Currently, Mint generates a class extending &lt;tt&gt;Code&amp;lt;X&amp;gt;&lt;/tt&gt; with &lt;tt&gt;X&lt;/tt&gt; occurring unbound when this method is called:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;public separable abstract &amp;lt;X&amp;gt; Code&amp;lt;X&amp;gt; fun(Code&amp;lt;X&amp;gt; c1, Code&amp;lt;X&amp;gt;&lt;br /&gt;c2, Object... param);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;We are looking at making another bugfix soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7689513627092968386-8371902299025149374?l=www.javamint.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javamint.org/feeds/8371902299025149374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.javamint.org/2010/08/new-mint-release-r15707.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/8371902299025149374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/8371902299025149374'/><link rel='alternate' type='text/html' href='http://www.javamint.org/2010/08/new-mint-release-r15707.html' title='New Mint Release: r15707'/><author><name>Mathias Ricken</name><uri>http://www.blogger.com/profile/03677879252056970614</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7689513627092968386.post-9173599829114795744</id><published>2010-08-20T22:16:00.001-07:00</published><updated>2010-08-20T22:38:48.579-07:00</updated><title type='text'>New Mint Release: r15700</title><content type='html'>On Friday, I created a new release of &lt;a href="http://www.javamint.org/"&gt;Mint&lt;/a&gt; and &lt;a href="http://www.cs.rice.edu/%7Emgricken/research/mint/index.shtml"&gt;DrJava with Mint&lt;/a&gt;: August 20, 2010 (r15700). The latest release is, as always, available    from the &lt;a href="http://plresearch.org/do/view/ProgrammingLanguages/JavaMint"&gt;Mint  implementation&lt;/a&gt; page:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://plresearch.org/twiki/pub/ProgrammingLanguages/JavaMint/JavaMint-r15700.tar.gz"&gt;JavaMint-r15700.tar.gz&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://plresearch.org/twiki/pub/ProgrammingLanguages/JavaMint/JavaMint-r15700-binaries.zip"&gt;JavaMint-r15700-binaries.zip&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cs.rice.edu/%7Emgricken/research/mint/download/drjava-r5372-mint-r15700.jar"&gt;drjava-r5372-mint-r15700.jar&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;The only changes that we made were a small change to the build process on Mac OS, and the addition of the &lt;tt&gt;Range&lt;/tt&gt; and &lt;tt&gt;Lift&lt;/tt&gt; utility classes.&lt;br /&gt;&lt;br /&gt;The &lt;tt&gt;Lift&lt;/tt&gt; class allows the user to manually lift primitive values and strings when the compiler did not do that already, for example when working with arrays.&lt;br /&gt;&lt;br /&gt;The &lt;tt&gt;Range&lt;/tt&gt; class provides methods that allow many &lt;tt&gt;for&lt;/tt&gt; loops to be written as &lt;tt&gt;foreach&lt;/tt&gt; loops with a &lt;tt&gt;final&lt;/tt&gt; loop variable that can be used across bracket boundaries immediately. Consider this example of a staged sparse matrix multiplication:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;public static separable&lt;br /&gt;Code&amp;lt;Void&amp;gt; smmult(final double[][] a,&lt;br /&gt;                  Code&amp;lt;double[][]&amp;gt; b,&lt;br /&gt;                  Code&amp;lt;double[][]&amp;gt; output,&lt;br /&gt;                  int l, int m, int n) {&lt;br /&gt;  Code&amp;lt;Void&amp;gt; stats = &amp;lt;| { } |&amp;gt;;&lt;br /&gt;  for(final int i: range(0, l)) {&lt;br /&gt;    for(final int j: range(0, m)) {&lt;br /&gt;      Code&amp;lt;Double&amp;gt; c = &amp;lt;| 0.0 |&amp;gt;;&lt;br /&gt;      for(final int k: range(0, n)) {&lt;br /&gt;        if(a[i][k] == 0.0)&lt;br /&gt;          continue;&lt;br /&gt;        else if(a[i][k] == 1.0)&lt;br /&gt;          c = &amp;lt;| `c + (`b)[k][j] |&amp;gt;;&lt;br /&gt;        else&lt;br /&gt;          c = &amp;lt;| `c + (`(lift(a[i][k])) * (`b)[k][j]) |&amp;gt;;&lt;br /&gt;      }&lt;br /&gt;      stats = &amp;lt;| { `stats; (`output)[i][j] = `c; } |&amp;gt;;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  return stats;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;is a lot cleaner than&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;public static separable&lt;br /&gt;Code&amp;lt;Void&amp;gt; smmult(final double[][] a,&lt;br /&gt;                  Code&amp;lt;double[][]&amp;gt; b,&lt;br /&gt;                  Code&amp;lt;double[][]&amp;gt; output,&lt;br /&gt;                  int l, int m, int n) {&lt;br /&gt;  Code&amp;lt;Void&amp;gt; stats = &lt;| { } |&gt;;&lt;br /&gt;  for(int i = 0; i &amp;lt; l; i++) {&lt;br /&gt;    for(int j = 0; j &amp;lt; m; j++) {&lt;br /&gt;      final int ii = i;&lt;br /&gt;      final int jj = j;&lt;br /&gt;      Code&amp;lt;Double&amp;gt; c = &amp;lt;| 0.0 |&amp;gt;;&lt;br /&gt;      for(int k = 0; k &amp;lt; n; k++) {&lt;br /&gt;        final int kk = k;&lt;br /&gt;        if(a[i][k] == 0.0)&lt;br /&gt;          continue;&lt;br /&gt;        else if(a[i][k] == 1.0)&lt;br /&gt;          c = &amp;lt;| `c + (`b)[kk][jj] |&amp;gt;;&lt;br /&gt;        else&lt;br /&gt;          c = &amp;lt;| `c + (`(lift(a[ii][kk])) * (`b)[kk][jj]) |&amp;gt;;&lt;br /&gt;      }&lt;br /&gt;      stats = &amp;lt;| { `stats; (`output)[ii][jj] = `c; } |&amp;gt;;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  return stats;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The &lt;tt&gt;ii&lt;/tt&gt;, &lt;tt&gt;jj&lt;/tt&gt;, and &lt;tt&gt;kk&lt;/tt&gt; variables aren't necessary anymore.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7689513627092968386-9173599829114795744?l=www.javamint.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javamint.org/feeds/9173599829114795744/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.javamint.org/2010/08/new-mint-release-r15700.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/9173599829114795744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/9173599829114795744'/><link rel='alternate' type='text/html' href='http://www.javamint.org/2010/08/new-mint-release-r15700.html' title='New Mint Release: r15700'/><author><name>Mathias Ricken</name><uri>http://www.blogger.com/profile/03677879252056970614</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7689513627092968386.post-4538661287131249339</id><published>2010-08-16T12:37:00.001-07:00</published><updated>2010-10-10T03:03:08.770-07:00</updated><title type='text'>GPCE'10 Tutorial Lecture: Agile and Efficient Domain-Specific Languages using Multi-stage Programming in Java Mint</title><content type='html'>Eddy, Walid, and I proposed a tutorial lecture for &lt;a href="http://program-transformation.org/GPCE10/"&gt;GPCE'10&lt;/a&gt;, and we're delighted to report that it has been accepted for presentation on Sunday, October 10, 2010.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://program-transformation.org/GPCE10/Tutorial4AgileEfficientDSLs"&gt;&lt;span style="font-weight:bold;"&gt;Agile and Efficient Domain-Specific Languages using Multi-stage Programming in Java Mint&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Domain-specific languages (DSLs) are a powerful productivity tool because they allow domain experts, who are not necessarily programming experts, to quickly develop programs. DSL implementations have unique constraints for programming languages because they must be efficient, in order to ensure high productivity, but they must also be agile, in order to meet the rapidly changing demands of their domains. In this tutorial we show how multi-stage programming (MSP) can be used to build staged interpreters, which combine the agility of interpreters with the efficiency of compilers. The tutorial is conducted in Java Mint, an multi-stage Java based on recent work incorporating MSP into imperative object-oriented languages. In the first half of the tutorial, we introduce MSP by demonstrating how to write a staged interpreter for a number of basic language constructs, such as recursive functions, conditionals, and let expressions. In the second half, we extend our staged interpreter to take advantage of several well-known compiler optimizations, including type inference, constant folding, and static parallel loop scheduling. We highlight the opportunities afforded by using MSP with object-oriented design to quickly create efficient DSL implementations.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Brief Outline of Tutorial&lt;br /&gt;&lt;br /&gt;This tutorial uses Java Mint to introduce MSP in imperative,&lt;br /&gt;object-oriented languages. We will progress as follows:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Introduction to MSP, the three language constructs "bracket",&lt;br /&gt;"escape" and "run", and their use in Java Mint.&lt;/li&gt;&lt;li&gt;Brief overview of MSP applications other than interpreters.&lt;/li&gt;&lt;li&gt;Development of a staged interpreter for a small DSL. We incrementally add:  &lt;ol style="list-style-type:lower-alpha"&gt;&lt;li&gt;Arithmetic expressions&lt;/li&gt;&lt;li&gt;Conditionals&lt;/li&gt;&lt;li&gt;Recursive functions&lt;/li&gt;&lt;li&gt;Let expressions&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;Application of compiler optimizations in the interpreter for our DSL. We discuss:&lt;ol style="list-style-type:lower-alpha"&gt;&lt;li&gt;Extending the interpreter with multiple data types&lt;/li&gt;&lt;li&gt;Type inference&lt;/li&gt;&lt;li&gt;Constant folding&lt;/li&gt;&lt;li&gt;Static parallel loop scheduling&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Biographies&lt;br /&gt;&lt;br /&gt;Mathias Ricken is a doctoral candidate in the Programming Languages Team at Rice University and one of the principal developers of the DrJava integrated development environment. His research interests include concurrent programming, extending the Java language, and computer science education. He is the developer of the Concutest concurrent unit testing framework and has created various experimental extensions of Java to address, for instance, programming with meta-data. Currently, Mathias is contributing to Java Mint, a multi-stage extension of Java that allows safe and expressive statically typed program generation and specialization in an imperative language setting.&lt;br /&gt;&lt;br /&gt;Edwin Westbrook is a post-doctoral researcher at Rice University. His primary interests are in developing techniques for implementing and verifying properties of domain-specific languages (DSLs). He has worked on a number of projects in this area, including: Cinic, a type theory for building machine-checked proofs of properties of DSLs using a new approach to higher-order abstract syntax; Java Mint, a multi-stage version of Java used for efficient implementations of DSLs; and Acumen, a DSL for designing cyber-physical systems.&lt;br /&gt;&lt;br /&gt;Walid Taha is an professor at Halmstad University. His current interest is in modeling and simulation of cyberphysical systems. He was the principal investigator on a number of research awards and contracts from the National Science Foundation (NSF), Semi-conductor Research Consortium (SRC), and Texas Advanced Technology Program (ATP). He received an NSF CAREER award to develop Java Mint. He is the principle designer Java Mint, Acumen, MetaOCaml, and the Verilog Preprocessor. He founded the ACM Conference on Generative Programming and Component Engineering (GPCE), the IFIP Working Group on Program Generation (WG 2.11), and the Middle Earth Programming Languages Seminar (MEPLS). In 2009, he chaired the IFIP Working Conference on Domain Specific Languages (DSLs).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7689513627092968386-4538661287131249339?l=www.javamint.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javamint.org/feeds/4538661287131249339/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.javamint.org/2010/08/gpce10-tutorial-lecture-agile-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/4538661287131249339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/4538661287131249339'/><link rel='alternate' type='text/html' href='http://www.javamint.org/2010/08/gpce10-tutorial-lecture-agile-and.html' title='GPCE&apos;10 Tutorial Lecture: Agile and Efficient Domain-Specific Languages using Multi-stage Programming in Java Mint'/><author><name>Mathias Ricken</name><uri>http://www.blogger.com/profile/03677879252056970614</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7689513627092968386.post-5278144724141796715</id><published>2010-08-16T12:23:00.000-07:00</published><updated>2010-08-16T12:31:53.709-07:00</updated><title type='text'>New Version of DrJava with Mint: drjava-r5366-mint-r15665</title><content type='html'>The &lt;a href="http://drjava.org/"&gt;DrJava&lt;/a&gt; team released a &lt;a href="https://sourceforge.net/news/?group_id=44253&amp;amp;id=290558"&gt;new stable version of DrJava&lt;/a&gt; today, &lt;a href="https://sourceforge.net/projects/drjava/files/1.%20DrJava%20Stable%20Releases/drjava-beta-20100711-r5314/"&gt;drjava-stable-20100816-r5366&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I therefore created a new release of &lt;a href="http://www.cs.rice.edu/%7Emgricken/research/mint/index.shtml"&gt;DrJava with Mint&lt;/a&gt;: August 16, 2010 (drjava-r5366-mint-r15665.jar). The latest release is available  from the &lt;a href="http://plresearch.org/do/view/ProgrammingLanguages/JavaMint"&gt;Mint implementation&lt;/a&gt; page:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://plresearch.org/twiki/pub/ProgrammingLanguages/JavaMint/JavaMint-r15665.tar.gz"&gt;JavaMint-r15665.tar.gz&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://plresearch.org/twiki/pub/ProgrammingLanguages/JavaMint/JavaMint-r15665-binaries.zip"&gt;JavaMint-r15665-binaries.zip&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cs.rice.edu/%7Emgricken/research/mint/download/drjava-r5366-mint-r15665.jar"&gt;drjava-r5366-mint-r15665.jar&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Nothing has changed on the Mint language side.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7689513627092968386-5278144724141796715?l=www.javamint.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javamint.org/feeds/5278144724141796715/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.javamint.org/2010/08/new-version-of-drjava-with-mint-drjava.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/5278144724141796715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/5278144724141796715'/><link rel='alternate' type='text/html' href='http://www.javamint.org/2010/08/new-version-of-drjava-with-mint-drjava.html' title='New Version of DrJava with Mint: drjava-r5366-mint-r15665'/><author><name>Mathias Ricken</name><uri>http://www.blogger.com/profile/03677879252056970614</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7689513627092968386.post-32829213329070945</id><published>2010-07-29T13:24:00.000-07:00</published><updated>2010-07-29T13:29:14.972-07:00</updated><title type='text'>New Mint Release: r15665</title><content type='html'>I just created a new release of &lt;a href="http://www.javamint.org/"&gt;Mint&lt;/a&gt; and &lt;a href="http://www.cs.rice.edu/%7Emgricken/research/mint/index.shtml"&gt;DrJava with Mint&lt;/a&gt;:  July 28, 2010 (r15665). It's been over a year since we made the first  version of Mint available! The latest release is, as always, available   from the &lt;a href="http://plresearch.org/do/view/ProgrammingLanguages/JavaMint"&gt;Mint  implementation&lt;/a&gt; page:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://plresearch.org/twiki/pub/ProgrammingLanguages/JavaMint/JavaMint-r15665.tar.gz"&gt;JavaMint-r15665.tar.gz&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://plresearch.org/twiki/pub/ProgrammingLanguages/JavaMint/JavaMint-r15665-binaries.zip"&gt;JavaMint-r15665-binaries.zip&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cs.rice.edu/%7Emgricken/research/mint/download/drjava-r5340-mint-r15665.jar"&gt;drjava-r5340-mint-r15665.jar&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Nothing really changed in the Mint language or in the way Mint is implemented; however, we moved our modified javac compiler into subpackages of the &lt;tt&gt;edu.rice.cs.mint.comp&lt;/tt&gt; package, which means that the compiler is now invoked using the &lt;tt&gt;edu.rice.cs.mint.comp.com.sun.tools.javac.Main&lt;/tt&gt; class.&lt;br /&gt;&lt;br /&gt;The package and class names got a bit long, but by not using the same class names as Sun/Oracle, we can use our compiler together with other compilers or the original compiler if we want to, and there won't be any class name clashes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7689513627092968386-32829213329070945?l=www.javamint.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javamint.org/feeds/32829213329070945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.javamint.org/2010/07/new-mint-release-r15665.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/32829213329070945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/32829213329070945'/><link rel='alternate' type='text/html' href='http://www.javamint.org/2010/07/new-mint-release-r15665.html' title='New Mint Release: r15665'/><author><name>Mathias Ricken</name><uri>http://www.blogger.com/profile/03677879252056970614</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7689513627092968386.post-5214317529258034471</id><published>2010-07-22T15:55:00.000-07:00</published><updated>2010-07-22T16:03:58.871-07:00</updated><title type='text'>New Mint Release: r15637</title><content type='html'>I just created a new release of &lt;a href="http://www.javamint.org/"&gt;Mint&lt;/a&gt; and &lt;a href="http://www.cs.rice.edu/%7Emgricken/research/mint/index.shtml"&gt;DrJava with Mint&lt;/a&gt;: July 22, 2010 (r15637). It's been over a year since we made the first version of Mint available! The latest release is, as always, available  from the &lt;a href="http://plresearch.org/do/view/ProgrammingLanguages/JavaMint"&gt;Mint  implementation&lt;/a&gt; page:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://plresearch.org/twiki/pub/ProgrammingLanguages/JavaMint/JavaMint-r15637.tar.gz"&gt;JavaMint-r15637.tar.gz&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://plresearch.org/twiki/pub/ProgrammingLanguages/JavaMint/JavaMint-r15637-binaries.zip"&gt;JavaMint-r15637-binaries.zip&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cs.rice.edu/%7Emgricken/research/mint/download/drjava-r5333-mint-r15637.jar"&gt;drjava-r5333-mint-r15637.jar&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;The &lt;a href="http://drjava.org/"&gt;DrJava&lt;/a&gt; team released a &lt;a href="http://sourceforge.net/news/?group_id=44253&amp;amp;id=289133"&gt;third beta version of DrJava&lt;/a&gt; almost two weeks ago, &lt;a href="https://sourceforge.net/projects/drjava/files/1.%20DrJava%20Stable%20Releases/drjava-beta-20100711-r5314/"&gt;drjava-beta-20100711-r5314&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The only thing that changed on the Mint language side is the implementation of the &lt;tt&gt;toString()&lt;/tt&gt; method for brackets.&lt;br /&gt;&lt;br /&gt;There have a been &lt;a href="http://www.concurrentaffair.org/2010/07/11/new-drjava-beta-release-drjava-beta-20100711-r5314/"&gt;plenty of new features and bugfixes for DrJava&lt;/a&gt;, and they have been integrated into DrJava with Mint. In fact, DrJava with Mint includes a few bugfixes that are not yet in the latest beta of DrJava.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7689513627092968386-5214317529258034471?l=www.javamint.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javamint.org/feeds/5214317529258034471/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.javamint.org/2010/07/new-mint-release-r15637.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/5214317529258034471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/5214317529258034471'/><link rel='alternate' type='text/html' href='http://www.javamint.org/2010/07/new-mint-release-r15637.html' title='New Mint Release: r15637'/><author><name>Mathias Ricken</name><uri>http://www.blogger.com/profile/03677879252056970614</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7689513627092968386.post-9037434980103896712</id><published>2010-07-11T21:06:00.001-07:00</published><updated>2010-07-11T21:17:19.385-07:00</updated><title type='text'>New Version of DrJava with Mint: drjava-r5246-mint-r15405</title><content type='html'>The &lt;a href="http://drjava.org/"&gt;DrJava&lt;/a&gt; team released a &lt;a href="http://sourceforge.net/news/?id=289133&amp;amp;group_id=44253"&gt;third beta version of DrJava&lt;/a&gt; today, &lt;a href="https://sourceforge.net/projects/drjava/files/1.%20DrJava%20Stable%20Releases/drjava-beta-20100711-r5314/"&gt;drjava-beta-20100711-r5314&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I therefore created a new release of &lt;a href="http://www.cs.rice.edu/%7Emgricken/research/mint/index.shtml"&gt;DrJava with Mint&lt;/a&gt;: May 8, 2010 (r15405). The latest release is available  from the &lt;a href="http://plresearch.org/do/view/ProgrammingLanguages/JavaMint"&gt;Mint implementation&lt;/a&gt; page:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://plresearch.org/twiki/pub/ProgrammingLanguages/JavaMint/JavaMint-r15405.tar.gz"&gt;JavaMint-r15405.tar.gz&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://plresearch.org/twiki/pub/ProgrammingLanguages/JavaMint/JavaMint-r15405-binaries.zip"&gt;JavaMint-r15405-binaries.zip&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cs.rice.edu/%7Emgricken/research/mint/download/drjava-r5314-mint-r15405.jar"&gt;drjava-r5246-mint-r15405.jar&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Nothing has changed on the Mint language side.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7689513627092968386-9037434980103896712?l=www.javamint.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javamint.org/feeds/9037434980103896712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.javamint.org/2010/07/new-version-of-drjava-with-mint-drjava.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/9037434980103896712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/9037434980103896712'/><link rel='alternate' type='text/html' href='http://www.javamint.org/2010/07/new-version-of-drjava-with-mint-drjava.html' title='New Version of DrJava with Mint: drjava-r5246-mint-r15405'/><author><name>Mathias Ricken</name><uri>http://www.blogger.com/profile/03677879252056970614</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7689513627092968386.post-6641508838201495043</id><published>2010-04-15T17:15:00.000-07:00</published><updated>2010-05-08T06:43:41.717-07:00</updated><title type='text'>New Mint Release: r15405</title><content type='html'>I just created a new release of &lt;a href="http://www.javamint.org/"&gt;Mint&lt;/a&gt; and &lt;a href="http://www.cs.rice.edu/~mgricken/research/mint/index.shtml"&gt;DrJava with Mint&lt;/a&gt;: May 8, 2010 (r15405). The release is available  from the &lt;a href="http://plresearch.org/do/view/ProgrammingLanguages/JavaMint"&gt;Mint  implementation&lt;/a&gt; page:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://plresearch.org/twiki/pub/ProgrammingLanguages/JavaMint/JavaMint-r15405.tar.gz"&gt;JavaMint-r15405.tar.gz&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://plresearch.org/twiki/pub/ProgrammingLanguages/JavaMint/JavaMint-r15405-binaries.zip"&gt;JavaMint-r15405-binaries.zip&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cs.rice.edu/~mgricken/research/mint/download/drjava-r5246-mint-r15405.jar"&gt;drjava-r5246-mint-r15405.jar&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;The &lt;a href="http://drjava.org/"&gt;DrJava&lt;/a&gt; team released a &lt;a href="http://sourceforge.net/news/?group_id=44253&amp;id=286386"&gt;second beta version of DrJava&lt;/a&gt; yesterday, &lt;a href="https://sourceforge.net/projects/drjava/files/1.%20DrJava%20Stable%20Releases/drjava-beta-20100507-r5246/"&gt;drjava-beta-20100507-r5246&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Nothing has changed on the Mint language side, but there have been minor changes in the Mint build process, and several examples have been added.&lt;br /&gt;&lt;br /&gt;There have been &lt;a href="http://www.concurrentaffair.org/2010/05/07/drjava-beta-20100507-r5246/"&gt;plenty of new features and bugfixes for DrJava&lt;/a&gt;, and they have been integrated into DrJava with Mint. Most importantly, DrJava with Mint will now automatically select the Mint compiler on start-up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7689513627092968386-6641508838201495043?l=www.javamint.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javamint.org/feeds/6641508838201495043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.javamint.org/2010/04/new-drjava-with-mint-version.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/6641508838201495043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/6641508838201495043'/><link rel='alternate' type='text/html' href='http://www.javamint.org/2010/04/new-drjava-with-mint-version.html' title='New Mint Release: r15405'/><author><name>Mathias Ricken</name><uri>http://www.blogger.com/profile/03677879252056970614</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7689513627092968386.post-5782270770360173029</id><published>2010-03-24T16:58:00.000-07:00</published><updated>2010-03-24T17:00:54.441-07:00</updated><title type='text'>Camera-Ready Version of PLDI Paper Submitted</title><content type='html'>This afternoon, I submitted the final camera-ready version of our &lt;a href="http://mint.concutest.org/"&gt;Mint&lt;/a&gt; paper that was accepted to &lt;a href="http://www.cs.stanford.edu/pldi10/"&gt;PLDI 2010&lt;/a&gt;, &lt;a href="http://www.concurrentaffair.org/2010/01/31/paper-mint-java-multi-stage-programming-using-weak-separability/"&gt;Mint: Java Multi-stage Programming Using Weak Separability&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Eddy and I incorporated some more suggestions we had received from &lt;a href="http://www.diku.dk/hjemmesider/ansatte/julia/"&gt;Julia Lawall&lt;/a&gt; and &lt;a href="http://loome.cs.uiuc.edu/kamin/"&gt;Sam Kamin&lt;/a&gt;, who sacrificed their valuable pre-OOPSLA submission time to proof-read our paper again. Thank you so much!&lt;br /&gt;&lt;br /&gt;I'm glad that I could sign the copyright release form by myself, and that I didn't need to get the signatures of my five co-authors. That could have been a big headache: Walid is here, but I didn't see him today; Eddy and Jun are in Oxford; Yilong is an undergrad at Rice, and I haven't seen him in months; and Tamer is in Egypt. I enjoy signing other people's rights away.&lt;br /&gt;&lt;br /&gt;All of that is done now. I think the paper got better still, and we even managed to stay six lines under the limit of twelve pages!&lt;br /&gt;&lt;br /&gt;Camera-ready version: &lt;a href="http://www.cs.rice.edu/~mgricken/research/mint/download/pldi2010-mint.pdf"&gt;Mint: Java Multi-stage Programming Using Weak Separability&lt;/a&gt; (PDF)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7689513627092968386-5782270770360173029?l=www.javamint.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javamint.org/feeds/5782270770360173029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.javamint.org/2010/03/camera-ready-version-of-pldi-paper.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/5782270770360173029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/5782270770360173029'/><link rel='alternate' type='text/html' href='http://www.javamint.org/2010/03/camera-ready-version-of-pldi-paper.html' title='Camera-Ready Version of PLDI Paper Submitted'/><author><name>Mathias Ricken</name><uri>http://www.blogger.com/profile/03677879252056970614</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7689513627092968386.post-4058729667947334693</id><published>2010-03-04T16:14:00.000-08:00</published><updated>2010-03-04T16:17:02.047-08:00</updated><title type='text'>Mint Talk at Purdue</title><content type='html'>I'm visiting my friend Luke at Purdue after SIGCSE, and we arranged for me to give a &lt;a href="http://calendar.cs.purdue.edu/calendar/webevent.cgi?cmd=showevent&amp;amp;id=4830"&gt;talk to the CS department&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If you have the chance, come grill me on Monday, March 15, 2010 at 3:30 PM.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Computer Science Colloquia&lt;br /&gt;Mint: A Multi-stage Extension of Java&lt;br /&gt;Mr. Mathias Ricken&lt;br /&gt;Rice University&lt;br /&gt;LWSN 3102 A/B&lt;br /&gt;Monday, March 15, 2010&lt;br /&gt;3:30 p.m. - 4:30 p.m.&lt;br /&gt;&lt;br /&gt;Complete Description:&lt;br /&gt;Abstract:&lt;br /&gt;Multi-stage programming (MSP) provides a safe way of generating code at run-time. In mostly-functional languages like MetaOCaml, this has been used to reduce the performance penalties of abstractions such as loops, recursion or interpretation. The main advantage of MSP compared to other techniques, such as string or LISP quotations, is that MSP guarantees type safety for the generated code statically, at the time the program is compiled.&lt;br /&gt;&lt;br /&gt;Unfortunately, MSP is difficult to combine with imperative features found in most mainstream languages like Java. The central problem is "scope extrusion", which may accidentally move variables outside the scopes in which they are bound, leading to run-time errors in the generated code. This problem can be prevented if code in escapes (or "anti-quotes") is "weakly separable", i.e. the computational effects occurring inside an escape that are visible from the outside do not involve code.&lt;br /&gt;&lt;br /&gt;We have formalized a type system, based on Lightweight Java, that uses weak separability to prevent scope extrusion, and we have proved that the type system is sound. We have also developed an implementation called Mint to demonstrate the expressivity of the type system and the performance benefits MSP can provide in an imperative setting. Since our implementation extends the Java language, our work is accessible to mainstream programmers.&lt;br /&gt;&lt;br /&gt;This talk is based on work will be presented at the Conference on Programming Language Design and Implementation (PLDI 2010). More information is available at http://mint.concutest.org/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Bio:&lt;br /&gt;Mathias Ricken is a doctoral candidate in the Programming Languages Team at Rice University and one of the principal developers of the DrJava integrated development environment. His research interests include concurrent programming, extending the Java language, and computer science education. He is the developer of the Concutest concurrent unit testing framework and has created various experimental extensions of Java to address, for instance, programming with meta-data. Currently, Mathias is contributing to Mint, a multi-stage extension of Java that allows safe and expressive statically typed program generation and specialization in an imperative language setting.&lt;br /&gt;&lt;br /&gt;Faculty and students wishing to speak privately with Mr. Ricken should contact Jan Vitek at jv@cs.purdue.edu.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;This is going to be exciting!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7689513627092968386-4058729667947334693?l=www.javamint.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javamint.org/feeds/4058729667947334693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.javamint.org/2010/03/mint-talk-at-purdue.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/4058729667947334693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/4058729667947334693'/><link rel='alternate' type='text/html' href='http://www.javamint.org/2010/03/mint-talk-at-purdue.html' title='Mint Talk at Purdue'/><author><name>Mathias Ricken</name><uri>http://www.blogger.com/profile/03677879252056970614</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7689513627092968386.post-4092725138547847157</id><published>2010-02-22T19:44:00.000-08:00</published><updated>2010-02-22T19:51:19.566-08:00</updated><title type='text'>Mathias' Mint Talk</title><content type='html'>On February 8, Mathias gave a talk about Mint in the &lt;a href="http://www.owlnet.rice.edu/%7Ecomp600/"&gt;COMP 600 graduate seminar&lt;/a&gt;  at Rice. The slides  for "Mint: A Multi-stage Extension of Java" and the video recording are available now:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cs.rice.edu/%7Emgricken/research/mint/download/COMP600-Ricken-Mint-2010-02-08.pdf"&gt;Slides (PDF)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.cs.rice.edu/%7Emgricken/research/mint/download/COMP600-Ricken-Mint-2010-02-08.ppt"&gt;Slides (PowerPoint)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://vimeo.com/9390149"&gt;Video Recording (on vimeo, requires Flash)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Abstract:&lt;br /&gt;&lt;p&gt; Multi-stage programming (MSP) provides a safe way of generating code at run-time. In mostly-functional languages like MetaOCaml, this has been used to reduce the performance penalties of abstractions such as loops, recursion or interpretation. The main advantage of MSP compared to other techniques, such as string or LISP quotations, is that MSP guarantees type safety for the generated code statically, at the time the program is compiled. &lt;/p&gt; &lt;p&gt; Unfortunately, MSP is difficult to combine with imperative features found in most mainstream languages like Java. The central problem is "scope extrusion", which may accidentally move variables outside the scopes in which they are bound, leading to run-time errors in the generated code. This problem can be prevented if code in escapes (or "anti-quotes") is "weakly separable", i.e. the computational effects occurring inside an escape that are visible from the outside do not involve code. &lt;/p&gt; &lt;p&gt; We have formalized a type system, based on Lightweight Java, that uses weak separability to prevent scope extrusion, and we have proved that the type system is sound. We have also developed an implementation called Mint to demonstrate the expressivity of the type system and the performance benefits MSP can provide in an imperative setting. Since our implementation extends the Java language, our work is accessible to mainstream programmers. &lt;/p&gt; &lt;p&gt; This talk is based on work done in collaboration with Edwin Westbrook, Jun Inoue, Yilong Yao, Tamer Abdelatif, and Walid Taha. A paper titled &lt;cite&gt;Mint: Java Multi-stage Programming Using Weak Separability&lt;/cite&gt; has been accepted for publication in the Proceedings of the 2010 ACM  SIGPLAN Conference on Programming Language Design and Implementation (PLDI  2010). &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7689513627092968386-4092725138547847157?l=www.javamint.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javamint.org/feeds/4092725138547847157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.javamint.org/2010/02/mathias-mint-talk.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/4092725138547847157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/4092725138547847157'/><link rel='alternate' type='text/html' href='http://www.javamint.org/2010/02/mathias-mint-talk.html' title='Mathias&apos; Mint Talk'/><author><name>Mathias Ricken</name><uri>http://www.blogger.com/profile/03677879252056970614</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7689513627092968386.post-72100784615724215</id><published>2010-02-17T19:22:00.000-08:00</published><updated>2010-02-17T19:40:46.151-08:00</updated><title type='text'>New Mint Release: r15116</title><content type='html'>I just created a new release of &lt;a href="http://www.javamint.org/"&gt;Mint&lt;/a&gt;  and &lt;a href="http://www.cs.rice.edu/%7Emgricken/research/mint/index.shtml"&gt;DrJava  with Mint&lt;/a&gt;: February 17, 2010 (r15116). The release is available  from the &lt;a href="http://plresearch.org/do/view/ProgrammingLanguages/JavaMint"&gt;Mint  implementation&lt;/a&gt; page:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://plresearch.org/twiki/pub/ProgrammingLanguages/JavaMint/JavaMint-r15116.tar.gz"&gt;JavaMint-r15116.tar.gz&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://plresearch.org/twiki/pub/ProgrammingLanguages/JavaMint/JavaMint-r15116-binaries.zip"&gt;JavaMint-r15116-binaries.zip&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cs.rice.edu/%7Emgricken/research/mint/download/drjava-r5178-mint-r15116.jar"&gt;drjava-r5178-mint-r15116.jar&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;There were some small changes in the approximation of weak separability to make the implementation match improvements in the paper more closely. It also disallows stitching in a &lt;code&gt;Code&amp;lt;?&amp;gt;&lt;/code&gt; as a statement, because we can't statically know if we have to discard the result in a statement context or not.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7689513627092968386-72100784615724215?l=www.javamint.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javamint.org/feeds/72100784615724215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.javamint.org/2010/02/new-mint-release-r15116.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/72100784615724215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/72100784615724215'/><link rel='alternate' type='text/html' href='http://www.javamint.org/2010/02/new-mint-release-r15116.html' title='New Mint Release: r15116'/><author><name>Mathias Ricken</name><uri>http://www.blogger.com/profile/03677879252056970614</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7689513627092968386.post-8372003109180740889</id><published>2010-02-12T08:27:00.000-08:00</published><updated>2010-02-12T08:28:28.504-08:00</updated><title type='text'>New Mint Release: r15085</title><content type='html'>I just created a new release of &lt;a href="http://www.javamint.org/"&gt;Mint&lt;/a&gt; and &lt;a href="http://www.cs.rice.edu/%7Emgricken/research/mint/index.shtml"&gt;DrJava with Mint&lt;/a&gt;: February 12, 2010 (r15085). The release is available from the &lt;a href="http://plresearch.org/do/view/ProgrammingLanguages/JavaMint"&gt;Mint implementation&lt;/a&gt; page:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://plresearch.org/twiki/pub/ProgrammingLanguages/JavaMint/JavaMint-r15085.tar.gz"&gt;JavaMint-r15085.tar.gz&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://plresearch.org/twiki/pub/ProgrammingLanguages/JavaMint/JavaMint-r15085-binaries.zip"&gt;JavaMint-r15085-binaries.zip&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cs.rice.edu/%7Emgricken/research/mint/download/drjava-r5178-mint-r15085.jar"&gt;drjava-r5178-mint-r15085.jar&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;The two changes since the last release involve CSP values and escapes in bracket statements. Instead of storing CSP values in a CSP table, we now store CSP values in individual fields. This reduces the overhead by eliminating an array lookup. The serializer benchmark benefited from this, for example.&lt;br /&gt;&lt;br /&gt;We now also allow non-void escapes in bracket statements. For example, the following code is now allowed:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Code&amp;lt;Integer&amp;gt; x = &lt;| 1 |&gt;;&lt;br /&gt;Code&amp;lt;void&amp;gt; c = &lt;| { `x } |&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;In the past, this caused an error because &lt;code&gt;1&lt;/code&gt; was not a statement. The Mint compiler now accepts this and discards the result of the escape if it is used in statement form, but it does emit a warning.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7689513627092968386-8372003109180740889?l=www.javamint.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javamint.org/feeds/8372003109180740889/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.javamint.org/2010/02/new-mint-release-r15085.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/8372003109180740889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/8372003109180740889'/><link rel='alternate' type='text/html' href='http://www.javamint.org/2010/02/new-mint-release-r15085.html' title='New Mint Release: r15085'/><author><name>Mathias Ricken</name><uri>http://www.blogger.com/profile/03677879252056970614</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7689513627092968386.post-7686740660589058268</id><published>2010-02-08T12:29:00.000-08:00</published><updated>2010-02-08T15:58:50.904-08:00</updated><title type='text'>Great News</title><content type='html'>Our paper, &lt;a href="http://www.concurrentaffair.org/2010/01/31/paper-mint-java-multi-stage-programming-using-weak-separability/"&gt;"Mint: Java Multi-stage Programming Using Weak Separability"&lt;/a&gt; (&lt;a href="http://www.cs.rice.edu/~mgricken/research/mint/download/pldi2010-mint.pdf"&gt;pre-print PDF&lt;/a&gt;), has been accepted to &lt;a href="http://www.cs.stanford.edu/pldi10/pldi2010_home.html"&gt;PLDI 2010&lt;/a&gt;. We look forward to spreading the word about Mint in Toronto!&lt;br /&gt;&lt;br /&gt;Mathias just gave the first presentation about Mint in the &lt;a href="http://www.owlnet.rice.edu/~comp600/"&gt;COMP 600 graduate seminar&lt;/a&gt; at Rice. The &lt;a href="http://www.concurrentaffair.org/2010/02/08/presentation-mint-a-multi-stage-extension-of-java/"&gt;slides for "Mint: A Multi-stage Extension of Java"&lt;/a&gt; are available (&lt;a href="http://www.cs.rice.edu/~mgricken/research/mint/download/COMP600-Ricken-Mint-2010-02-08.pdf"&gt;PDF&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Finally, you may already have noticed that the blog has a new URL: &lt;a href="http://www.javamint.org/"&gt;www.javamint.org&lt;/a&gt;. We currently also have some problems with the &lt;a href="http://plresearch.org/do/view/ProgrammingLanguages/JavaMint"&gt;implementation URL&lt;/a&gt;; for now, you can use &lt;a href="http://mint.concutest.org"&gt;http://mint.concutest.org&lt;/a&gt; as a resource hub for &lt;a href="http://mint.concutest.org"&gt;everything Mint-related&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7689513627092968386-7686740660589058268?l=www.javamint.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javamint.org/feeds/7686740660589058268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.javamint.org/2010/02/great-news.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/7686740660589058268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/7686740660589058268'/><link rel='alternate' type='text/html' href='http://www.javamint.org/2010/02/great-news.html' title='Great News'/><author><name>Mathias Ricken</name><uri>http://www.blogger.com/profile/03677879252056970614</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7689513627092968386.post-7467402389976527950</id><published>2009-11-13T20:40:00.000-08:00</published><updated>2010-02-08T12:02:28.698-08:00</updated><title type='text'>New Mint Release</title><content type='html'>I just created a new release of &lt;a href="http://plresearch.org/do/view/ProgrammingLanguages/JavaMint"&gt;Mint&lt;/a&gt; and &lt;a href="http://www.cs.rice.edu/%7Emgricken/research/mint/index.shtml"&gt;DrJava with Mint&lt;/a&gt;.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://plresearch.org/twiki/pub/ProgrammingLanguages/JavaMint/JavaMint-r14577.tar.gz"&gt;JavaMint-r14577.tar.gz&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://plresearch.org/twiki/pub/ProgrammingLanguages/JavaMint/JavaMint-r14577-binaries.zip"&gt;JavaMint-r14577-binaries.zip&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cs.rice.edu/%7Emgricken/research/mint/download/drjava-r5130-mint-r14577.jar"&gt;drjava-r5130-mint-r14577.jar&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;There were some dramatic performance improvements in the Mint compiler thanks to base type lifting instead of performing cross-stage persistence for them. I also fixed a bug that didn't allow escaping into bracket statements. And DrJava with Mint now has a simple logo (mostly so I don't get confused if I'm working with DrJava with Mint or with regular DrJava).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.cs.rice.edu/%7Emgricken/research/mint/splash.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 240px; height: 92px;" src="http://www.cs.rice.edu/%7Emgricken/research/mint/splash.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7689513627092968386-7467402389976527950?l=www.javamint.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javamint.org/feeds/7467402389976527950/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.javamint.org/2009/11/new-mint-release.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/7467402389976527950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/7467402389976527950'/><link rel='alternate' type='text/html' href='http://www.javamint.org/2009/11/new-mint-release.html' title='New Mint Release'/><author><name>Mathias Ricken</name><uri>http://www.blogger.com/profile/03677879252056970614</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7689513627092968386.post-390398418068059713</id><published>2009-11-04T09:43:00.000-08:00</published><updated>2010-02-08T12:03:27.925-08:00</updated><title type='text'>Lifting for Primitive and Boxed Types and Strings</title><content type='html'>When we examined the code that was generated for the sparse matrix multiplication benchmark of Mint, we noticed that variables containing loop indices had become cross-stage persistent (CSP) variables, which necessitated an array lookup. This was much more expensive than directly accessing a final local variable.&lt;br /&gt;&lt;br /&gt;I have now implemented lifting for primitive and boxed types as well as for strings. For example, the code&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;final int i = 1;&lt;br /&gt;Code&lt;Integer&gt; c = &lt;| i |&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;used to generate code that looked like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;public class $$Code1$$&lt;br /&gt;    implements edu.rice.cs.mint.runtime.Code&lt;java.lang.Integer&gt; {&lt;br /&gt;    private Object [] $csp_table;&lt;br /&gt;    public $$Code1$$ (Object [] csp_table) {&lt;br /&gt;        this.$csp_table = csp_table;&lt;br /&gt;    }&lt;br /&gt;    public Integer run() {&lt;br /&gt;        return $csp_table[0];&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Even though the value of &lt;code&gt;i&lt;/code&gt; was final, we retrieved the value from the CSP table. Now we lift this value, i.e. we create a code object for it and escape it into the bracket using a &lt;code&gt;edu.rice.cs.mint.runtime.Lift.liftint&lt;/code&gt; helper method:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;public class Lift {&lt;br /&gt;  Code&lt;Integer&gt; liftint(int value) { ... }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The compiler internally transforms&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Code&lt;Integer&gt; c = &lt;| i |&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;into an escape-and-lift that looks like&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Code&lt;Integer&gt; c = &lt;| `(edu.rice.cs.mint.runtime.Lift.liftint(i)) |&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now the code that is generated looks as expected:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;public class $$Code1$$&lt;br /&gt;    implements edu.rice.cs.mint.runtime.Code&lt;java.lang.Integer&gt; {&lt;br /&gt;    private Object [] $csp_table;&lt;br /&gt;    public $$Code1$$ (Object [] csp_table) {&lt;br /&gt;        this.$csp_table = csp_table;&lt;br /&gt;    }&lt;br /&gt;    public Integer run() {&lt;br /&gt;        return 1;&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This has lead to nice performance improvements in the matrix multiplication and loop unrolling benchmarks, and (perhaps more spectacularly) also in the Lint interpreter benchmarks. The staged Lint interpreter benchmarks now run 20 times as fast as the unstaged versions. Matrix multiplication shows a speedup of a factor of 4.8, and loop unrolling has a speedup of 2.3.&lt;br /&gt;&lt;br /&gt;There is a new release of the &lt;a href="http://plresearch.org/do/view/ProgrammingLanguages/JavaMint"&gt;Mint implementation (November 4, 2009)&lt;/a&gt; and a new version of &lt;a href="http://www.cs.rice.edu/~mgricken/research/mint/download/"&gt;DrJava with Mint (drjava-r5128-mint-r14460)&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7689513627092968386-390398418068059713?l=www.javamint.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javamint.org/feeds/390398418068059713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.javamint.org/2009/11/lifting-for-primitive-and-boxed-types.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/390398418068059713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/390398418068059713'/><link rel='alternate' type='text/html' href='http://www.javamint.org/2009/11/lifting-for-primitive-and-boxed-types.html' title='Lifting for Primitive and Boxed Types and Strings'/><author><name>Mathias Ricken</name><uri>http://www.blogger.com/profile/03677879252056970614</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7689513627092968386.post-8213748198896321045</id><published>2009-10-19T22:04:00.000-07:00</published><updated>2009-11-04T09:41:00.782-08:00</updated><title type='text'>New Version of DrJava with Mint</title><content type='html'>I just made a new release of the all-in-one DrJava with Mint:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cs.rice.edu/%7Emgricken/research/mint/download/"&gt;drjava-r5121-mint-r14186.jar&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;On the Mint side, there is only one small change: Previously, the Mint compiler only appeared in the "Compiler" drop-down box if the "Display all compiler versions" preference was enabled, which by default was not the case.&lt;br /&gt;&lt;br /&gt;Happy experimentation with Mint!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7689513627092968386-8213748198896321045?l=www.javamint.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javamint.org/feeds/8213748198896321045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.javamint.org/2009/10/new-version-of-drjava-with-mint.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/8213748198896321045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/8213748198896321045'/><link rel='alternate' type='text/html' href='http://www.javamint.org/2009/10/new-version-of-drjava-with-mint.html' title='New Version of DrJava with Mint'/><author><name>Mathias Ricken</name><uri>http://www.blogger.com/profile/03677879252056970614</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7689513627092968386.post-1485193292576619252</id><published>2009-10-05T08:20:00.000-07:00</published><updated>2010-02-08T12:12:44.011-08:00</updated><title type='text'>All in One File!</title><content type='html'>After &lt;a href="http://www.javamint.org/2009/09/drjava-with-mint-released.html"&gt;integrating Mint into DrJava&lt;/a&gt; last week, we have now made it even simpler to experiment with Mint: You can download a copy of DrJava that already includes the Mint compiler, all in one file:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.cs.rice.edu/~mgricken/research/mint/download/"&gt;DrJava with Mint&lt;/a&gt; (check the &lt;a href="http://plresearch.org/do/view/ProgrammingLanguages/JavaMint"&gt;implementation page&lt;/a&gt; for newer versions)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;That means on Windows and Linux, provided you have installed the &lt;a href="http://java.sun.com/javase/downloads/index.jsp"&gt;JDK 6&lt;/a&gt;, you can just double-click on the jar file or start it using&lt;br /&gt;&lt;code&gt;java -jar drjava-r5104-mint-r14185.jar&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;On MacOS, you still need to install Soylatte and X11 as described in the &lt;a href="http://www.javamint.org/2009/09/drjava-with-mint-released.html"&gt;previous post&lt;/a&gt;, but you don't need to set up Mint. Just run it with&lt;br /&gt;&lt;code&gt;java -jar drjava-r5104-mint-r14185.jar&lt;/code&gt;&lt;br /&gt;using Soylatte under X11.&lt;br /&gt;&lt;br /&gt;This &lt;a href="http://www.cs.rice.edu/~mgricken/research/mint/download/"&gt;DrJava with Mint&lt;/a&gt; jar file doesn't give you the &lt;code&gt;mintc&lt;/code&gt; and &lt;code&gt;mint&lt;/code&gt; command line utilities, but you can edit, compile and run Mint programs in DrJava. This is probably the easiest way to experiment with Mint!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Note:&lt;/span&gt; We recommend that you disable DrJava's auto-update feature when using the  &lt;a href="http://www.cs.rice.edu/~mgricken/research/mint/download/"&gt;DrJava with Mint&lt;/a&gt; jar file. The auto-update would otherwise download new versions of DrJava without integrated Mint. Please go to &lt;span style="font-style: italic;"&gt;Edit -&gt; Preferences&lt;/span&gt;, select the &lt;span style="font-style: italic;"&gt;Notifications&lt;/span&gt; category, and set &lt;span style="font-style: italic;"&gt;"Check for new versions?"&lt;/span&gt; to &lt;span style="font-style: italic;"&gt;"none (disabled)"&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7689513627092968386-1485193292576619252?l=www.javamint.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javamint.org/feeds/1485193292576619252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.javamint.org/2009/10/all-in-one-file.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/1485193292576619252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/1485193292576619252'/><link rel='alternate' type='text/html' href='http://www.javamint.org/2009/10/all-in-one-file.html' title='All in One File!'/><author><name>Mathias Ricken</name><uri>http://www.blogger.com/profile/03677879252056970614</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7689513627092968386.post-5723833990521206332</id><published>2009-09-28T22:18:00.000-07:00</published><updated>2010-09-01T10:52:46.931-07:00</updated><title type='text'>DrJava with Mint Released</title><content type='html'>The latest releases of &lt;a href="http://drjava.org/"&gt;DrJava&lt;/a&gt; contains a compiler adapter for &lt;a href="http://plresearch.org/do/view/ProgrammingLanguages/JavaMint"&gt;Mint&lt;/a&gt;. That means it is possible to conveniently compile Mint programs in the DrJava IDE.&lt;br /&gt;&lt;br /&gt;To experiment with Mint and DrJava, please do the following:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Download &lt;a href="http://www.cs.rice.edu/~mgricken/research/mint/index.shtml#download"&gt;DrJava with Mint&lt;/a&gt; from the &lt;a href="http://plresearch.org/do/view/ProgrammingLanguages/JavaMint"&gt;JavaMint implementation page&lt;/a&gt;. The file will be named &lt;tt&gt;drjava-rxxxx-mint-ryyyyy.jar&lt;/tt&gt;, where &lt;tt&gt;xxxx&lt;/tt&gt; indicates the version of DrJava and &lt;tt&gt;yyyyy&lt;/tt&gt; the version of Java Mint.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;MacOS only: Java Mint requires Java 6. If you have a 32-bit Mac for which Apple does not offer Java 6, you can use Soylatte, but that means DrJava needs to be run under Soylatte as well. Soylatte requires X11 to display graphical user interfaces (GUIs).&lt;br /&gt;&lt;br /&gt;&lt;ol type="a"&gt;&lt;li style="list-style-type: lower-alpha;"&gt;Change your &lt;code&gt;PATH&lt;/code&gt; environment variable so that Soylatte's &lt;code&gt;java&lt;/code&gt; and &lt;code&gt;javac&lt;/code&gt; commands are found first. Edit your &lt;code&gt;.bash_profile&lt;/code&gt; or &lt;code&gt;.bashrc&lt;/code&gt; file and add the following line at the end of the file:&lt;br /&gt;&lt;code&gt;export PATH=/usr/local/soylatte/bin:$PATH&lt;/code&gt;&lt;/li&gt; &lt;li style="list-style-type: lower-alpha;"&gt;&lt;a href="http://developer.apple.com/opensource/tools/runningx11.html"&gt;Install Apple's X11&lt;/a&gt;. You can find it on your MacOS X installation DVD (preferred!). Here are also some links where you may download X11 (not checked by us -- if you try any of these, please let us know!):&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.versiontracker.com/dyn/moreinfo/macosx/10912185&amp;amp;vid=11094491&amp;amp;mode=info"&gt;2.4.0 for Mac OS 10.5 and newer&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.versiontracker.com/dyn/moreinfo/macosx/17747&amp;amp;vid=352037&amp;amp;mode=info"&gt;1.1.2 for Mac OS 10.4.8 and newer&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.apple.com/downloads/macosx/apple/macosx_updates/x11formacosx.html"&gt;1.0 for Mac OS 10.3 to 10.3.9&lt;/a&gt;&lt;/li&gt;&lt;li&gt;You should also be able to install &lt;a href="http://pdb.finkproject.org/pdb/package.php/xfree86"&gt;XFree86 using Fink&lt;/a&gt;.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;/li&gt; &lt;li style="list-style-type: lower-alpha;"&gt;Start the X11 application. A terminal window should open. Put the cursor in that terminal window -- you will start DrJava from there.&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Start DrJava using&lt;br /&gt;&lt;code&gt;java -jar drjava-rxxxx-mint-ryyyyy.jar&lt;br /&gt;&lt;/code&gt;(in the terminal window on MacOS and Linux; on Windows, you can double-click on the &lt;code&gt;drjava-rxxxx-mint-ryyyyy.jar&lt;/code&gt; file)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Look at the right side of the in the "Compiler Output" pane. There is a drop-down box labeled "Compiler": Select "Mint 6.0_16-Mint" (or something similar). If you don't see it in the list, DrJava could not find Mint. Check that you are running DrJava with Java 6.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Open a Mint program ("File/Open" menu or "Open" button)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Compile it ("Tools/Compile All" menu or "Compile" button)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Run it ("Tools/Run Document's Main Method" menu or "Run" button). The output will be displayed in the "Interactions" pane.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;Note that the interpreter in the Interactions pane does &lt;strong&gt;not&lt;/strong&gt; understand Mint. It is just a Java interpreter. Brackets and escapes are only recognized in programs in the Definitions pane (source editor).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7689513627092968386-5723833990521206332?l=www.javamint.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javamint.org/feeds/5723833990521206332/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.javamint.org/2009/09/drjava-with-mint-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/5723833990521206332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/5723833990521206332'/><link rel='alternate' type='text/html' href='http://www.javamint.org/2009/09/drjava-with-mint-released.html' title='DrJava with Mint Released'/><author><name>Mathias Ricken</name><uri>http://www.blogger.com/profile/03677879252056970614</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7689513627092968386.post-4181411931335027702</id><published>2009-09-24T13:09:00.000-07:00</published><updated>2010-02-08T12:15:29.245-08:00</updated><title type='text'>Installing JavaMint on Linux</title><content type='html'>Here are some quick instructions on how to download and install Java Mint.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;MacOS&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;You need &lt;a href="http://java.sun.com/javase/downloads/index.jsp"&gt;Sun's JDK&lt;/a&gt; 5 or 6 installed.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Download the "binaries only" Java Mint zip file from the &lt;a href="http://plresearch.org/do/view/ProgrammingLanguages/JavaMint"&gt;Java Mint implementation&lt;/a&gt; page. In this example, I have saved the file in my home directory, i.e. at &lt;code&gt;/home/mgricken&lt;/code&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Open a console.&lt;/li&gt;&lt;li&gt;Change into the /usr/local directory:&lt;br /&gt;&lt;code&gt;cd /usr/local&lt;/code&gt;&lt;/li&gt;&lt;li&gt;Unzip it as root. This means you have to type in your password:&lt;br /&gt;&lt;code&gt;sudo unzip /home/mgricken/JavaMint-r13871-binaries.zip&lt;/code&gt;&lt;/li&gt;&lt;li&gt;Set the &lt;code&gt;MINT_HOME&lt;/code&gt; and &lt;code&gt;PATH&lt;/code&gt; environment variables:&lt;br /&gt;&lt;code&gt;export MINT_HOME=/usr/local/JavaMint&lt;br /&gt;export PATH=$PATH:$MINT_HOME/langtools/bin&lt;/code&gt;&lt;/li&gt;&lt;li&gt;To make this permanent, edit your &lt;code&gt;.bash_profile&lt;/code&gt; or &lt;code&gt;.bashrc&lt;/code&gt; file and put the two lines from step 6 line at the end of the file.&lt;/li&gt;&lt;/ol&gt;Now you can compile programs using &lt;code&gt;mintc&lt;/code&gt; and run them using &lt;code&gt;mint&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;mintc Power.java&lt;br /&gt;&lt;br /&gt;mint Power&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;There are samples in the &lt;code&gt;/usr/local/JavaMint/langtools/mintTest &lt;/code&gt; directory. You cannot compile them there, however, because the directory is read-only unless you are the root user. So unzip the Java Mint implementation zip file somewhere else, e.g. in &lt;code&gt;/home/mgricken/JavaMint&lt;/code&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7689513627092968386-4181411931335027702?l=www.javamint.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javamint.org/feeds/4181411931335027702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.javamint.org/2009/09/installing-javamint-on-linux.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/4181411931335027702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/4181411931335027702'/><link rel='alternate' type='text/html' href='http://www.javamint.org/2009/09/installing-javamint-on-linux.html' title='Installing JavaMint on Linux'/><author><name>Mathias Ricken</name><uri>http://www.blogger.com/profile/03677879252056970614</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7689513627092968386.post-1056807705634476930</id><published>2009-09-14T10:25:00.001-07:00</published><updated>2009-09-14T13:18:36.131-07:00</updated><title type='text'>Higher Order Functions in Java</title><content type='html'>In order to understand future examples, we first have to discuss how to use higher-order functions in Java, and how to write anonymous inner classes. This post will have nothing to do with multi-stage programming.&lt;br /&gt;&lt;br /&gt;Let's write a program that can print out data tables for different mathematical functions. For example, for a function that multiplies by two, &lt;span style="font-style:italic;"&gt;f(x) = 2x&lt;/span&gt;, we want to print something like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;x                      f(x)&lt;br /&gt;       -5.0000000000       -10.0000000000&lt;br /&gt;       -4.0000000000        -8.0000000000&lt;br /&gt;       -3.0000000000        -6.0000000000&lt;br /&gt;       -2.0000000000        -4.0000000000&lt;br /&gt;       -1.0000000000        -2.0000000000&lt;br /&gt;        0.0000000000         0.0000000000&lt;br /&gt;        1.0000000000         2.0000000000&lt;br /&gt;        2.0000000000         4.0000000000&lt;br /&gt;        3.0000000000         6.0000000000&lt;br /&gt;        4.0000000000         8.0000000000&lt;br /&gt;        5.0000000000        10.0000000000&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;We can write a function like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;    public static void printTableTimesTwo(double x1,&lt;br /&gt;                                          double x2,&lt;br /&gt;                                          int n) {&lt;br /&gt;        assert n&gt;1;&lt;br /&gt;&lt;br /&gt;        double x = x1;&lt;br /&gt;        double delta = (x2-x1)/(double)(n-1);&lt;br /&gt;        System.out.println("x                      f(x)");&lt;br /&gt;        System.out.printf("%20.10f %20.10f\n", x, x*2);&lt;br /&gt;        for(int i=0; i&lt;(n-1); ++i) {&lt;br /&gt;            x += delta;&lt;br /&gt;            System.out.printf("%20.10f %20.10f\n", x, x*2);&lt;br /&gt;        }&lt;br /&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The parameter &lt;code&gt;x1&lt;/code&gt; determines the lower end of the interval, &lt;code&gt;x2&lt;/code&gt; the upper end, and &lt;code&gt;n&lt;/code&gt; determines how many values should be printed. &lt;code&gt;n&lt;/code&gt; needs to be at least &lt;code&gt;2&lt;/code&gt; to print out the values at &lt;code&gt;x1&lt;/code&gt; and &lt;code&gt;x2&lt;/code&gt;. We can generate the table above with this call:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;        printTableTimesTwo(-5, 5, 11);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;What if we want to print out the values of a different function, for example &lt;span style="font-style:italic;"&gt;f(x) = x + 4&lt;/span&gt;? We can write a new function:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;    public static void printTablePlusFour(double x1,&lt;br /&gt;                                          double x2,&lt;br /&gt;                                          int n) {&lt;br /&gt;        assert n&gt;1;&lt;br /&gt;&lt;br /&gt;        double x = x1;&lt;br /&gt;        double delta = (x2-x1)/(double)(n-1);&lt;br /&gt;        System.out.println("x                      f(x)");&lt;br /&gt;        System.out.printf("%20.10f %20.10f\n", x, x+4);&lt;br /&gt;        for(int i=0; i&lt;(n-1); ++i) {&lt;br /&gt;            x += delta;&lt;br /&gt;            System.out.printf("%20.10f %20.10f\n", x, x+4);&lt;br /&gt;        }&lt;br /&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This involves a lot of code duplication, though. The only parts that actually differ are the two occurrences of &lt;code&gt;x*2&lt;/code&gt; and &lt;code&gt;x+4&lt;/code&gt;. How can we factor that difference out?&lt;br /&gt;&lt;br /&gt;Let's write an interface that we can use for any kind of function that takes in one parameter and returns one parameter &lt;span style="font-style:italic;"&gt;f(x) = y&lt;/span&gt; is an example of such a function.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;public interface ILambda&amp;lt;R,P&amp;gt; {&lt;br /&gt;    public R apply(P param);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This interface is called &lt;code&gt;ILambda&lt;/code&gt; and it has one method, &lt;code&gt;apply&lt;/code&gt;. We used Java generics and didn't specify the return type and the type of the parameter; instead, we just called them &lt;code&gt;R&lt;/code&gt; and &lt;code&gt;P&lt;/code&gt;, respectively. A function that takes in a &lt;code&gt;Double&lt;/code&gt; and that returns a &lt;code&gt;Double&lt;/code&gt;, like &lt;span style="font-style:italic;"&gt;f(x) = y&lt;/span&gt;, can be expressed using a &lt;code&gt;ILambda&amp;lt;Double,Double&amp;gt;&lt;/code&gt;. A function taking a &lt;code&gt;String&lt;/code&gt; and returning an &lt;code&gt;Integer&lt;/code&gt; would use &lt;code&gt;ILambda&amp;lt;String,Integer&amp;gt;&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Now we can write our &lt;span style="font-style:italic;"&gt;f(x) = 2x&lt;/span&gt; and &lt;span style="font-style:italic;"&gt;f(x) = x + 4&lt;/span&gt; functions using &lt;code&gt;ILambda&lt;/code&gt;:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;    public class TimesTwo implements ILambda&amp;lt;Double,Double&amp;gt; {&lt;br /&gt;        public Double apply(Double param) { return param*2; }&lt;br /&gt;    }&lt;br /&gt;    public class PlusFour implements ILambda&amp;lt;Double,Double&amp;gt; {&lt;br /&gt;        public Double apply(Double param) { return param+4; }&lt;br /&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now we can write one &lt;code&gt;printTable&lt;/code&gt; method that takes in an &lt;code&gt;ILambda&amp;lt;Double,Double&amp;gt;&lt;/code&gt; called &lt;code&gt;f&lt;/code&gt; representing the function, in addition to the parameters &lt;code&gt;x1&lt;/code&gt;, &lt;code&gt;x2&lt;/code&gt; and &lt;code&gt;n&lt;/code&gt;, as before:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;    public static void printTable(ILambda&amp;lt;Double,Double&amp;gt; f,&lt;br /&gt;                                  double x1,&lt;br /&gt;                                  double x2,&lt;br /&gt;                                  int n) {&lt;br /&gt;        assert n&gt;1;&lt;br /&gt;&lt;br /&gt;        double x = x1;&lt;br /&gt;        double delta = (x2-x1)/(double)(n-1);&lt;br /&gt;&lt;br /&gt;        // f.apply(x) just means what f(x) means in math!&lt;br /&gt;        double y = f.apply(x);&lt;br /&gt;        System.out.println("x                      f(x)");&lt;br /&gt;        System.out.printf("%20.10f %20.10f\n", x, y);&lt;br /&gt;        for(int i=0; i&lt;(n-1); ++i) {&lt;br /&gt;            x += delta;&lt;br /&gt;            y = f.apply(x);&lt;br /&gt;            System.out.printf("%20.10f %20.10f\n", x, y);&lt;br /&gt;        }&lt;br /&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Note that when we want to print out the y-value, we just write &lt;code&gt;f.apply(x)&lt;/code&gt;, which looks very similar to &lt;span style="font-style:italic;"&gt;f(x)&lt;/span&gt; in mathematics. It means exactly the same.&lt;br /&gt;&lt;br /&gt;We can print out the tables for our two functions using:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;        printTable(new TimesTwo(), -5, 5, 11);&lt;br /&gt;        printTable(new PlusFour(), -5, 5, 11);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;We have to create new objects for the functions: The first time we call &lt;code&gt;printTable&lt;/code&gt; we pass a new &lt;code&gt;TimesTwo&lt;/code&gt; object; the second time, we pass a new &lt;code&gt;PlusFour&lt;/code&gt; object.&lt;br /&gt;&lt;br /&gt;We can now define as many functions as we like without having to rewrite the &lt;code&gt;printTable&lt;/code&gt; function. For example, we can easily write a square root function and use it very easily:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;    public class SquareRoot implements ILambda&amp;lt;Double,Double&amp;gt; {&lt;br /&gt;        public Double apply(Double param) {&lt;br /&gt;            return Math.sqrt(param);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;// ...&lt;br /&gt;&lt;br /&gt;        printTable(new SquareRoot(), -5, 5, 11);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The really neat thing is that we can even define a new function on-the-fly, without having to give it a name. We do that using anonymous inner classes in Java. Here, we call &lt;code&gt;printTable&lt;/code&gt; and pass it a new object that implements &lt;code&gt;ILambda&amp;lt;Double,Double&amp;gt;&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;        printTable(new ILambda&amp;lt;Double,Double&amp;gt;() {&lt;br /&gt;            public Double apply(Double param) {&lt;br /&gt;                return param*param;&lt;br /&gt;            }&lt;br /&gt;        }, -5, 5, 11);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;We define a new &lt;code&gt;ILambda&lt;/code&gt; from &lt;code&gt;Double&lt;/code&gt; to &lt;code&gt;Double&lt;/code&gt; without giving it a name. When we use anonymous inner classes, we need to fill in all the methods that are still abstract. Here, it is just the &lt;code&gt;apply&lt;/code&gt; method.&lt;br /&gt;&lt;br /&gt;The method &lt;code&gt;printTable&lt;/code&gt; is now a "higher order function", because conceptually it is a function that takes another function as input.&lt;br /&gt;&lt;br /&gt;Questions:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;What does the anonymous &lt;code&gt;ILambda&amp;lt;Double,Double&amp;gt;&lt;/code&gt; in the example above compute? What's the mathematical function it represents?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;How would you print a table for the function &lt;span style="font-style:italic;"&gt;f(x) = x&lt;sup&gt;2&lt;/sup&gt; + 2x&lt;/span&gt;?&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;You can download the complete source code for the examples &lt;a href="http://www.cs.rice.edu/~mgricken/research/mint/listings/"&gt;here&lt;/a&gt;:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.cs.rice.edu/~mgricken/research/mint/listings/HigherOrder1.java"&gt;&lt;code&gt;HigherOrder1.java&lt;/code&gt;&lt;/a&gt;: Example without &lt;code&gt;ILambda&lt;/code&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.cs.rice.edu/~mgricken/research/mint/listings/HigherOrder2.java"&gt;&lt;code&gt;HigherOrder2.java&lt;/code&gt;&lt;/a&gt;: Example with &lt;code&gt;ILambda&lt;/code&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.cs.rice.edu/~mgricken/research/mint/listings/ILambda.java"&gt;&lt;code&gt;ILambda.java&lt;/code&gt;&lt;/a&gt;: &lt;code&gt;ILambda&lt;/code&gt; interface for the &lt;code&gt;HigherOrder2.java&lt;/code&gt; example&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7689513627092968386-1056807705634476930?l=www.javamint.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javamint.org/feeds/1056807705634476930/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.javamint.org/2009/09/higher-order-functions-in-java.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/1056807705634476930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/1056807705634476930'/><link rel='alternate' type='text/html' href='http://www.javamint.org/2009/09/higher-order-functions-in-java.html' title='Higher Order Functions in Java'/><author><name>Mathias Ricken</name><uri>http://www.blogger.com/profile/03677879252056970614</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7689513627092968386.post-1177596876972683866</id><published>2009-09-09T05:41:00.000-07:00</published><updated>2009-09-14T11:21:42.633-07:00</updated><title type='text'>Power Using a for Loop</title><content type='html'>Soon it will be possible to compile and run Mint programs in&lt;br /&gt;&lt;a href="http://drjava.org/"&gt;DrJava&lt;/a&gt;. I just haven't had time to finish this. In the meantime, here is a program that you can analyze. It is another program that calculates the power &lt;code&gt;x^n&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;import edu.rice.cs.mint.runtime.Code;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class Power_For {&lt;br /&gt;   public static void main(String[] args) {&lt;br /&gt;       final double x = 2;&lt;br /&gt;       int n = 17;&lt;br /&gt;&lt;br /&gt;       Code&amp;lt;Double&amp;gt; c = &lt;| 1.0 |&gt;;&lt;br /&gt;       for(int i=0; i&amp;lt;n; ++i) {&lt;br /&gt;           c = &lt;| `c * x |&gt;;&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;       System.out.println(c.run());&lt;br /&gt;   }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This time it uses a for loop. I don't know if you have seen for loops, but the part&lt;br /&gt;&lt;br /&gt;&lt;code&gt;       for(int i=0; i&amp;lt;17; ++i) { /* something here */ }&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;sets a variable &lt;code&gt;i&lt;/code&gt; to &lt;code&gt;0&lt;/code&gt;, and repeats the part &lt;code&gt;/* something here */&lt;/code&gt; as long as &lt;code&gt;i&amp;lt;n&lt;/code&gt;. Each time the loop is done with &lt;code&gt;/* something here */&lt;/code&gt;, it will execute &lt;code&gt;++i&lt;/code&gt;, which will increase &lt;code&gt;i&lt;/code&gt; by &lt;code&gt;1&lt;/code&gt;. So eventually &lt;code&gt;i&lt;/code&gt; will be &lt;code&gt;17&lt;/code&gt;, and since &lt;code&gt;n&lt;/code&gt; is &lt;code&gt;17&lt;/code&gt;, &lt;code&gt;i&lt;/code&gt; is not &lt;code&gt;&amp;lt; n&lt;/code&gt; anymore, and the loop exits.&lt;br /&gt;&lt;br /&gt;We have a &lt;code&gt;Code&amp;lt;Double&amp;gt; c&lt;/code&gt; that starts out with the code for &lt;code&gt;1.0&lt;/code&gt;:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;       Code&amp;lt;Double&amp;gt; c = &amp;lt;| 1.0 |&amp;gt;;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Then we have the aforementioned for loop. The code that gets executed&lt;br /&gt;over and over in the loop body is&lt;br /&gt;&lt;br /&gt;&lt;code&gt;           c = &amp;lt;| `c * x |&amp;gt;;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;We are creating a new code value, and inside the code value, we're splicing in &lt;code&gt;c&lt;/code&gt; (initially &lt;code&gt;1.0&lt;/code&gt;) and multiplying it with &lt;code&gt;x&lt;/code&gt;. Then we assign the new code value back to &lt;code&gt;c&lt;/code&gt;. That means after the first&lt;br /&gt;iteration of the loop, &lt;code&gt;c&lt;/code&gt; will be the following:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;           &amp;lt;| 1.0 * x |&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;After the second iteration, &lt;code&gt;c&lt;/code&gt; will be&lt;br /&gt;&lt;br /&gt;&lt;code&gt;           &amp;lt;| 1.0 * x * x |&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;And so on. After the 17th iteration, it will contain the code&lt;br /&gt;&lt;br /&gt;&lt;code&gt;           &amp;lt;| 1.0 * x * x * x * x * x * x * x * x * x * x * x * x * x&lt;br /&gt;* x * x * x * x |&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;When we run &lt;code&gt;c&lt;/code&gt; with &lt;code&gt;c.run()&lt;/code&gt; and print out the value, we will get &lt;code&gt;131072.0&lt;/code&gt;, which is 2 to the power of 17, as expected.&lt;br /&gt;&lt;br /&gt;You can download the complete source code for the example &lt;a href="http://www.cs.rice.edu/~mgricken/research/mint/listings/"&gt;here&lt;/a&gt;:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.cs.rice.edu/~mgricken/research/mint/listings/Power_For.java"&gt;&lt;code&gt;Power_For.java&lt;/code&gt;&lt;/a&gt;: Multi-stage Power function using a &lt;code&gt;for&lt;/code&gt; Loop&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7689513627092968386-1177596876972683866?l=www.javamint.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javamint.org/feeds/1177596876972683866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.javamint.org/2009/09/power-using-for-loop.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/1177596876972683866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/1177596876972683866'/><link rel='alternate' type='text/html' href='http://www.javamint.org/2009/09/power-using-for-loop.html' title='Power Using a for Loop'/><author><name>Mathias Ricken</name><uri>http://www.blogger.com/profile/03677879252056970614</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7689513627092968386.post-951995058505566354</id><published>2009-09-04T22:28:00.000-07:00</published><updated>2010-02-08T12:16:26.315-08:00</updated><title type='text'>Installing JavaMint on Windows</title><content type='html'>Here are some quick instructions on how to download and install Java Mint.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Windows&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;You need &lt;a href="http://java.sun.com/javase/downloads/index.jsp"&gt;Sun's JDK&lt;/a&gt; 6 installed.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Download the "binaries only" Java Mint zip file from the &lt;a href="http://plresearch.org/do/view/ProgrammingLanguages/JavaMint"&gt;Java Mint implementation&lt;/a&gt; page. In this example, I have saved the file on my desktop, i.e. at &lt;code&gt;C:\Program Files&lt;/code&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Open an Explorer Window and find the zip file you saved in step 2.&lt;/li&gt;&lt;li&gt;Right-click on the zip file and choose "Extract All..." and unpack all files in &lt;code&gt;C:\Program Files&lt;/code&gt;. This will create a &lt;code&gt;C:\Program Files\JavaMint&lt;/code&gt; directory. If you don't see an "Extract All..." option in your context menu, you may need to download a program such as &lt;a href="http://www.winzip.com/index.htm"&gt;WinZip&lt;/a&gt; or &lt;a href="http://www.rarlab.com/"&gt;WinRar&lt;/a&gt; first.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Right-click on "My Computer" and select "Properties". Go to the "Advanced" tab and press the "Environment Variables" button.&lt;/li&gt;&lt;li&gt;Click on the “New” button in the “System variables” box.&lt;/li&gt;&lt;li&gt;Enter as variable name: &lt;code&gt;MINT_HOME&lt;/code&gt;&lt;br /&gt;and as variable value: &lt;code&gt;C:\Program Files\JavaMint&lt;/code&gt;&lt;/li&gt;&lt;li&gt;Find the &lt;code&gt;Path&lt;/code&gt; variable in the "System variables" box, select it and click "Edit".&lt;/li&gt;&lt;li&gt;Go to the end of the text entered for "Variable value", and add the following text:&lt;br /&gt;&lt;code&gt;;%MINT_HOME%\langtools\bin&lt;/code&gt;&lt;br /&gt;Be sure to enter the semicolon at the beginning of the added text.&lt;/li&gt;&lt;li&gt;Press "OK" three times to close all three opened dialogs. Now you have added JavaMint to your path.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Now you can compile programs using &lt;code&gt;mintc&lt;/code&gt; and run them using &lt;code&gt;mint&lt;/code&gt;. Open a Command Prompt by clicking on the "Start" button, selecting "Run" and entering &lt;code&gt;cmd&lt;/code&gt; and pressing "OK" (or search for the "Command Prompt" program in your Start Menu).&lt;br /&gt;&lt;br /&gt;&lt;code&gt;mintc Power.java&lt;br /&gt;&lt;br /&gt;mint Power&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;There are samples in the &lt;code&gt;C:\Program Files\JavaMint\langtools\mintTest&lt;/code&gt; directory.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7689513627092968386-951995058505566354?l=www.javamint.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javamint.org/feeds/951995058505566354/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.javamint.org/2009/09/installing-javamint-on-windows.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/951995058505566354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/951995058505566354'/><link rel='alternate' type='text/html' href='http://www.javamint.org/2009/09/installing-javamint-on-windows.html' title='Installing JavaMint on Windows'/><author><name>Mathias Ricken</name><uri>http://www.blogger.com/profile/03677879252056970614</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7689513627092968386.post-2475445517654241756</id><published>2009-09-04T12:22:00.000-07:00</published><updated>2010-09-01T10:38:51.087-07:00</updated><title type='text'>Installing JavaMint on MacOS</title><content type='html'>Here are some quick instructions on how to download and install Java Mint.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;MacOS&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;You need to have Java 6 installed.&lt;br /&gt;&lt;br /&gt;Note: If you have a 32-bit Mac that does not have an Apple version of Java 6, you can use &lt;a href="http://landonf.bikemonkey.org/static/soylatte/"&gt;SoyLatte&lt;/a&gt;. Please install it in &lt;code&gt;/usr/local/soylatte&lt;/code&gt;, i.e. the Java compiler should be &lt;code&gt;/usr/local/soylatte/bin/javac&lt;/code&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Download the "binaries only" Java Mint zip file from the &lt;a href="http://plresearch.org/do/view/ProgrammingLanguages/JavaMint"&gt;Java Mint implementation&lt;/a&gt; page. In this example, I have saved the file on my desktop, i.e. at &lt;code&gt;/Users/mgricken/Desktop&lt;/code&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Open a console.&lt;/li&gt;&lt;li&gt;Change into the /usr/local directory:&lt;br /&gt;&lt;code&gt;cd /usr/local&lt;/code&gt;&lt;/li&gt;&lt;li&gt;Unzip it as root. This means you have to type in your password:&lt;br /&gt;&lt;code&gt;sudo unzip /Users/mgricken/Desktop/JavaMint-r13871-binaries.zip&lt;/code&gt;&lt;/li&gt;&lt;li&gt;Set the &lt;code&gt;MINT_HOME&lt;/code&gt; and &lt;code&gt;PATH&lt;/code&gt; environment variables:&lt;br /&gt;&lt;code&gt;export MINT_HOME=/usr/local/JavaMint&lt;br /&gt;export PATH=$PATH:$MINT_HOME/langtools/bin&lt;/code&gt;&lt;/li&gt;&lt;li&gt;To make this permanent, edit your &lt;code&gt;.bash_profile&lt;/code&gt; or &lt;code&gt;.bashrc&lt;/code&gt; file and put the two lines from step 6 line at the end of the file.&lt;/li&gt;&lt;/ol&gt;Now you can compile programs using &lt;code&gt;mintc&lt;/code&gt; and run them using &lt;code&gt;mint&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;mintc Power.java&lt;br /&gt;&lt;br /&gt;mint Power&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;There are samples in the &lt;code&gt;/usr/local/JavaMint/langtools/mintTest &lt;/code&gt; directory. You cannot compile them there, however, because the directory is read-only unless you are the root user. So unzip the Java Mint implementation zip file somewhere else, e.g. in your &lt;code&gt;Documents&lt;/code&gt; directory.&lt;br /&gt;&lt;br /&gt;The easiest way to experiment with Mint is to download &lt;a href="http://www.cs.rice.edu/%7Emgricken/research/mint/index.shtml#download"&gt;DrJava with Mint&lt;/a&gt;. Here are more &lt;a href="http://www.javamint.org/2009/09/drjava-with-mint-released.html"&gt;instructions on how to run DrJava with Mint&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Note: If you are using SoyLatte as your Java 6, please start &lt;a href="http://www.javamint.org/2009/09/drjava-with-mint-released.html"&gt;DrJava with Mint from inside an X11 terminal window&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7689513627092968386-2475445517654241756?l=www.javamint.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javamint.org/feeds/2475445517654241756/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.javamint.org/2009/09/installing-javamint-on-macos.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/2475445517654241756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/2475445517654241756'/><link rel='alternate' type='text/html' href='http://www.javamint.org/2009/09/installing-javamint-on-macos.html' title='Installing JavaMint on MacOS'/><author><name>Mathias Ricken</name><uri>http://www.blogger.com/profile/03677879252056970614</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7689513627092968386.post-2906532643930802992</id><published>2009-09-04T09:41:00.000-07:00</published><updated>2009-09-04T09:45:10.438-07:00</updated><title type='text'>Welcome!</title><content type='html'>You've found the Java Mint Blog!&lt;br /&gt;&lt;br /&gt;Despite all of our efforts not to use the name MetaJava for Java Mint, the domain JavaMint was already taken.  So, the name MetaJava will live on!  :)&lt;br /&gt;&lt;br /&gt;This blog will be used to post announcements and useful materials relating to MetaJava, and to follow up on comments from readers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7689513627092968386-2906532643930802992?l=www.javamint.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.javamint.org/feeds/2906532643930802992/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.javamint.org/2009/09/welcome.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/2906532643930802992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7689513627092968386/posts/default/2906532643930802992'/><link rel='alternate' type='text/html' href='http://www.javamint.org/2009/09/welcome.html' title='Welcome!'/><author><name>Walid Taha</name><uri>http://www.blogger.com/profile/01616333334672611519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_4NX-MFMWn08/SvuJNotgK9I/AAAAAAAAABg/ldVmrOExjbc/S220/Walid+Photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
