<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
 
 <title>Redline Smalltalk</title>
 <link href="http://www.redline.st/atom.xml" rel="self"/>
 <link href="http://www.redline.st/"/>
 <updated>2012-05-17T02:40:31-07:00</updated>
 <id>http://www.redline.st/</id>
 <author>
   <name>Redline Smalltalk</name>
   <email>object@redline.st</email>
 </author>
 
 
   <entry>
     <title>Emitting JVM Bytecodes</title>
     <link href="http://www.redline.st/blog/2012/05/01/emitting-jvm-bytecodes.html"/>
     <updated>2012-05-01T00:00:00-07:00</updated>
     <id>http://www.redline.st/blog/2012/05/01/emitting-jvm-bytecodes</id>
     <content type="html">&lt;p&gt;&lt;img src=&quot;/image/blog/honeycomb.jpg&quot; alt=&quot;Bee on a honeycomb&quot; class=&quot;left&quot;&gt;&lt;/p&gt;
&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Redline Smalltalk supports emitting &lt;span class=&quot;caps&quot;&gt;JVM&lt;/span&gt; bytecodes in the body of your Smalltalk methods and blocks, simply use the pseudo variable &lt;span class=&quot;caps&quot;&gt;JVM&lt;/span&gt; as the receiver and send it messages. This post will hopefully provide enough detail for you to use the bytecode facilities of Redline Smalltalk in your own classes, enabling you to call upon any feature of the Java Virtual Machine at the lowest possible level.&lt;/p&gt;
&lt;h2&gt;Why&lt;/h2&gt;
&lt;p&gt;Full interoperability with the Java Virtual Machine (&lt;span class=&quot;caps&quot;&gt;JVM&lt;/span&gt;) requires being able to talk to it at the lowest possible level, and that level is  &lt;span class=&quot;caps&quot;&gt;JVM&lt;/span&gt; bytecode which is executed by the &lt;span class=&quot;caps&quot;&gt;JVM&lt;/span&gt;. At this level all the functionality of the machine is available to you, including the ability to integrate with any classes running in the &lt;span class=&quot;caps&quot;&gt;JVM&lt;/span&gt; regardless of the language they were created in. Redline Smalltalk requires the ability to load any class, call any method of a class, access any field of a class, manipulate the &lt;span class=&quot;caps&quot;&gt;JVM&lt;/span&gt; stack and to query methods arguments and get and set local variables.&lt;/p&gt;
&lt;h2&gt;How&lt;/h2&gt;
&lt;p&gt;To enable bytecode manipulation while also keeping a Smalltalk feel in the syntax the pseudo variable &lt;span class=&quot;caps&quot;&gt;JVM&lt;/span&gt; was introduced. This pseudo variable can also be thought of as macro because it is evaluated at read time (not at runtime) to allow bytecodes to be emitted into the stream of bytecodes to be executed before execution begins. The pseudo variable &lt;span class=&quot;caps&quot;&gt;JVM&lt;/span&gt; is a pseudo variable like &lt;em&gt;&amp;#8216;true&amp;#8217;&lt;/em&gt;, &lt;em&gt;&amp;#8216;super&amp;#8217;&lt;/em&gt; or &lt;em&gt;&amp;#8216;self&amp;#8217;&lt;/em&gt; allowing it to be used as a receiver in message expressions or cascaded message expressions to describe the bytecodes to be emitted. During read time the receiver in a message or cascaded message expression is checked and if it is found to be &amp;#8216;&lt;span class=&quot;caps&quot;&gt;JVM&lt;/span&gt;&amp;#8217; then a special analyser is used to process the remaining elements of the expression. This analyser will emit bytecodes into the stream according to the expression being analysed. For example:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;smalltalk&quot;&gt;  &lt;span class=&quot;nc&quot;&gt;JVM&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;invokeVirtual:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;#39;st/redline/PrimObject&amp;#39;&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;method:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;#39;javaValue&amp;#39;&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;matching:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;#39;(Ljava/lang/Object;)Lst/redline/PrimObject;&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The above example will emit the bytecode to invoke the virtual method &lt;em&gt;&amp;#8216;javaValue&amp;#8217;&lt;/em&gt; with the signature &lt;em&gt;&amp;#8216;(Ljava/lang/Object;)Lst/redline/PrimObject;&amp;#8217;&lt;/em&gt; on the object on the top of the stack which is assumed to be of the type &lt;em&gt;&amp;#8216;st/redline/PrimObject&amp;#8217;&lt;/em&gt;. The result of executing these bytecodes will be a value on top of the stack. Multiple &lt;span class=&quot;caps&quot;&gt;JVM&lt;/span&gt; expressions are typically written as a cascaded message expression, which is just a stylistic choice which I find more clear. For example:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;smalltalk&quot;&gt;  &lt;span class=&quot;nc&quot;&gt;JVM&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;aload:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;nf&quot;&gt;invokeVirtual:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;#39;st/redline/PrimObject&amp;#39;&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;method:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;#39;javaValue&amp;#39;&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;matching:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;#39;()Ljava/lang/Object;&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;nf&quot;&gt;checkcast:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;#39;st/redline/stout/RouterRegistry&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;nf&quot;&gt;aload:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Note that while you are emitting bytecode Redline still decorates these with source file names and line numbers so you can step through the bytecode with a debugger.&lt;/p&gt;
&lt;h2&gt;Usage&lt;/h2&gt;
&lt;p&gt;The list of messages you can send to the pseudo variable &lt;span class=&quot;caps&quot;&gt;JVM&lt;/span&gt; is listed in table #1 with the detail of the arguments listed in table #2. However this is subject to change as this is documentation and code and documentation are not always in sync. When in doubt check the source file JVMAnalyser.java in the Redline Smalltalk distribution.&lt;/p&gt;
&lt;p&gt;Table #1 &amp;#8211; Bytecode selectors for pseudo variable &lt;span class=&quot;caps&quot;&gt;JVM&lt;/span&gt;.&lt;/p&gt;
&lt;table border=&quot;1&quot; class=&quot;padded-table&quot;&gt;
&lt;tr&gt;&lt;th&gt;Selector&lt;th&gt;Description&lt;br /&gt;
&lt;tr&gt;&lt;td&gt;getStatic: classFqn named: fieldName as: returnDescriptor&lt;td&gt;Get from the class &amp;#8216;classFqn&amp;#8217; the static field named &amp;#8216;fieldName&amp;#8217; as type &amp;#8216;returnDescriptor&amp;#8217;.&lt;br /&gt;
&lt;tr&gt;&lt;td&gt;ldc: literal&lt;td&gt;Load a constant onto the stack.&lt;br /&gt;
&lt;tr&gt;&lt;td&gt;aload: index&lt;td&gt;Load the local variable at &amp;#8216;index&amp;#8217; onto the stack. &lt;br /&gt;
&lt;tr&gt;&lt;td&gt;invokeVirtual: classFqn method: methodName matching: parameterDescriptor&lt;td&gt;Invoke the method &amp;#8216;methodName&amp;#8217; of owning class &amp;#8216;classFqn&amp;#8217; that matches the signature &amp;#8216;parameterDescriptor&amp;#8217;. Note that the method &amp;#8216;methodName&amp;#8217; may be overridden in the receiver and the proper instance should be invoked. &lt;br /&gt;
&lt;tr&gt;&lt;td&gt;invokeSpecial: classFqn method: methodName matching: parameterDescriptor&lt;td&gt;Invoke the method &amp;#8216;methodName&amp;#8217; of owning class &amp;#8216;classFqn&amp;#8217; that matches the signature &amp;#8216;parameterDescriptor&amp;#8217;. Note that the method &amp;#8216;methodName&amp;#8217; must be an initializer, private method in the receiver or its superclasses.&lt;br /&gt;
&lt;tr&gt;&lt;td&gt;invokeInterface: classFqn method: methodName matching: parameterDescriptor&lt;td&gt;Invoke the method &amp;#8216;methodName&amp;#8217; of owning interface &amp;#8216;classFqn&amp;#8217; that matches the signature &amp;#8216;parameterDescriptor&amp;#8217;.&lt;br /&gt;
&lt;tr&gt;&lt;td&gt;new: classFqn&lt;td&gt;Create a new instance of the class &amp;#8216;classFqn&amp;#8217; and put a reference to it on the stack. &lt;br /&gt;
&lt;tr&gt;&lt;td&gt;checkcast: classFqn&lt;td&gt;Check the reference on the top of the stack is an class that can be cast to a &amp;#8216;classFqn&amp;#8217;.&lt;br /&gt;
&lt;tr&gt;&lt;td&gt;arg: index&lt;td&gt;Push the argument at &amp;#8216;index&amp;#8217; onto the stack. This isn&amp;#8217;t a bytecode but a helper we have added.&lt;br /&gt;
&lt;tr&gt;&lt;td&gt;&amp;lt;opcode&amp;gt;&lt;td&gt;Any bytecode opcode that does not take an argument. See table #3&lt;/table&gt;
&lt;p&gt;Table #2 &amp;#8211; Identifiers&lt;/p&gt;
&lt;table border=&quot;1&quot; class=&quot;padded-table&quot;&gt;
&lt;tr&gt;&lt;th&gt;Identifier&lt;th&gt;Description&lt;br /&gt;
&lt;tr&gt;&lt;td&gt;classFqn&lt;td&gt;A class fully qualified name, which is java is a package name with all &amp;#8216;.&amp;#8217; replaced with &amp;#8216;/&amp;#8217;. For example: st.redline.PrimObject has a classFqn of st/redline/PrimObject.&lt;br /&gt;
&lt;tr&gt;&lt;td&gt;fieldName&lt;td&gt;The name of the field within the Class. No special decoration or formatting.&lt;br /&gt;
&lt;tr&gt;&lt;td&gt;methodName&lt;td&gt;The name of the method within the Class. No special decoration or formatting.&lt;br /&gt;
&lt;tr&gt;&lt;td&gt;returnDescriptor&lt;td&gt;The type of the return value or argument. This is typically in the form L&amp;lt;classFqn&amp;gt;, For more information see Method Descriptors http://docs.oracle.com/javase/specs/jvms/se5.0/html/ClassFile.doc.html#7035&lt;br /&gt;
&lt;tr&gt;&lt;td&gt;parameterDescriptor&lt;td&gt;The types of the arguments passed to a method. For more information see Method Descriptors http://docs.oracle.com/javase/specs/jvms/se5.0/html/ClassFile.doc.html#7035 &lt;br /&gt;
&lt;tr&gt;&lt;td&gt;literal&lt;td&gt;A literal is a non null Integer, a Float, a Long, a Double a String.&lt;/table&gt;
&lt;p&gt;Table #3 &amp;#8211; Opcodes that don&amp;#8217;t take an argument.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;caps&quot;&gt;NOP&lt;/span&gt;, ACONST_NULL, ICONST_M1, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, LCONST_0, LCONST_1, FCONST_0, FCONST_1, FCONST_2, DCONST_0, DCONST_1, &lt;span class=&quot;caps&quot;&gt;IALOAD&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;LALOAD&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;FALOAD&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;DALOAD&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;AALOAD&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;BALOAD&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;CALOAD&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;SALOAD&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;IASTORE&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;LASTORE&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;FASTORE&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;DASTORE&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;AASTORE&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;BASTORE&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;CASTORE&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;SASTORE&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;POP&lt;/span&gt;, POP2, &lt;span class=&quot;caps&quot;&gt;DUP&lt;/span&gt;, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, &lt;span class=&quot;caps&quot;&gt;SWAP&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;IADD&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;LADD&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;FADD&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;DADD&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;ISUB&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;LSUB&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;FSUB&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;DSUB&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;IMUL&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;LMUL&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;FMUL&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;DMUL&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;IDIV&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;LDIV&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;FDIV&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;DDIV&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;IREM&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;LREM&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;FREM&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;DREM&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;INEG&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;LNEG&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;FNEG&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;DNEG&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;ISHL&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;LSHL&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;ISHR&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;LSHR&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;IUSHR&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;LUSHR&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;IAND&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;LAND&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;IOR&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;LOR&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;IXOR&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;LXOR&lt;/span&gt;, I2L, I2F, I2D, L2I, L2F, L2D, F2I, F2L, F2D, D2I, D2L, D2F, I2B, I2C, I2S, &lt;span class=&quot;caps&quot;&gt;LCMP&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;FCMPL&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;FCMPG&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;DCMPL&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;DCMPG&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;IRETURN&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;LRETURN&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;FRETURN&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;DRETURN&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;ARETURN&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;RETURN&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;ARRAYLENGTH&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;ATHROW&lt;/span&gt;, &lt;span class=&quot;caps&quot;&gt;MONITORENTER&lt;/span&gt;, or &lt;span class=&quot;caps&quot;&gt;MONITOREXIT&lt;/span&gt;.&lt;/p&gt;
&lt;h2&gt;Cheating&lt;/h2&gt;
&lt;p&gt;Remembering and working with bytecode can be daunting however there are tools you can use to make this much easier. Under the covers Redline Smalltalk uses the &lt;a href=&quot;http://asm.ow2.org/&quot;&gt;&lt;span class=&quot;caps&quot;&gt;ASM&lt;/span&gt; library&lt;/a&gt; to manipulate bytecodes. Along with this fantastic library is a tool for Eclipse that allows you to view Java source as the set of &lt;span class=&quot;caps&quot;&gt;ASM&lt;/span&gt; calls to output the equivelent bytecodes. By writing the code you want in Java and viewing it with &lt;span class=&quot;caps&quot;&gt;ASM&lt;/span&gt; you can see the sequence of statements you will need. See picture #1 for an example. Translating from this &lt;span class=&quot;caps&quot;&gt;ASM&lt;/span&gt; output to Smalltalk &lt;span class=&quot;caps&quot;&gt;JVM&lt;/span&gt; messages is not too difficult.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/image/blog/asm-screenshot.png&quot; alt=&quot;ASM eclipse view&quot;&gt;&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Providing as low a level access to the &lt;span class=&quot;caps&quot;&gt;JVM&lt;/span&gt; as possible means you will have the full power of the Machine at your disposal. There should be nothing you want to do in your Smalltalk that the &lt;span class=&quot;caps&quot;&gt;JVM&lt;/span&gt; is capable of that you cannot do.&lt;/p&gt;</content>
   </entry>
 
   <entry>
     <title>Adopt a Class</title>
     <link href="http://www.redline.st/blog/2011/12/22/adopt-a-class.html"/>
     <updated>2011-12-22T00:00:00-08:00</updated>
     <id>http://www.redline.st/blog/2011/12/22/adopt-a-class</id>
     <content type="html">&lt;p&gt;&lt;img src=&quot;/image/blog/puppies.jpg&quot; title=&quot;Puppies&quot; alt=&quot;Puppies&quot; class=&quot;left&quot;&gt;&lt;/p&gt;
&lt;p&gt;Redline Smalltalk requires a runtime of Smalltalk classes that people can work with to build their own Applications. There are quite a few Smalltalk classes in a simple default runtime, a few too many for the small set of core contributors to do on a short time frame, and we need your help to get a Smalltalk runtime done. What we are asking is that you adopt a Smalltalk Class and implement it with tests. The adoption process is very simple, and class class, we at Redline and the Community will love you for it.&lt;/p&gt;
&lt;p&gt;To adopt a class you should &lt;a href=&quot;https://github.com/redline-smalltalk/redline-smalltalk&quot;&gt;check out the Redline Smalltalk source code&lt;/a&gt; and add your name to the class you would like to adopt in the file &amp;#8216;&lt;span class=&quot;caps&quot;&gt;OBJECTS&lt;/span&gt;-&lt;span class=&quot;caps&quot;&gt;AND&lt;/span&gt;-&lt;span class=&quot;caps&quot;&gt;PROTOCOLS&lt;/span&gt;&amp;#8217; and then commit that change and issue a pull request. When we accept the pull request the class is yours. Any conflicts will be resolved on a first pull-request basis. &lt;br /&gt;
&lt;b&gt;Update:&lt;/b&gt; We have tried to make adopting a class easier, please see &amp;#8220;Executing Smalltalk Tests&amp;#8221; in the &lt;a href=&quot;http://www.redline.st/discover/getting-started.html&quot;&gt;Getting Started with Redline Smalltalk&lt;/a&gt; post.&lt;/p&gt;
&lt;p&gt;The file &amp;#8216;&lt;span class=&quot;caps&quot;&gt;OBJECTS&lt;/span&gt;-&lt;span class=&quot;caps&quot;&gt;AND&lt;/span&gt;-&lt;span class=&quot;caps&quot;&gt;PROTOCOLS&lt;/span&gt;&amp;#8217; lists the Smalltalk classes we are implementing for the first version of Redline Smalltalk. These classes are defined in the &lt;a href=&quot;http://stephane.ducasse.free.fr/FreeBooks/BlueBook/&quot;&gt;Blue Book&lt;/a&gt; (Smalltalk-80 The Language and its Implementation) along with their associated protocols.&lt;/p&gt;
&lt;p&gt;A requirements of adopting a class is that you implement a test for each method of the class in an associated Test.st file. For example, if you adopt Object then you will have an ObjectTests.st file containing tests for each method on Object. Should you find a bug during implementation or testing then please raise an issue in the main github issues list. During implementation you may find you need a new primitive in which case you are free to implement it or you can raise an issue to have it implemented by James or Rob (experts at this now).&lt;/p&gt;
&lt;p&gt;While the runtime is being implemented we have a very minimal testing framework to assert truths about your methods. See the file Assert.st for the provided methods. This form of testing should be sufficient to get us started and provide some level of confidence things work correctly, while protecting us from possible regression errors. We will have an SUnit or similar framework soon.&lt;/p&gt;
&lt;p&gt;It is recommended that you look at the &lt;a href=&quot;http://www.redline.st/discover/getting-started.html&quot;&gt;Getting Started with Redline Smalltalk&lt;/a&gt; post before adopting a class.&lt;/p&gt;</content>
   </entry>
 
   <entry>
     <title>Smalltalk on the JVM</title>
     <link href="http://www.redline.st/blog/2011/12/21/smalltalk-on-the-jvm.html"/>
     <updated>2011-12-21T00:00:00-08:00</updated>
     <id>http://www.redline.st/blog/2011/12/21/smalltalk-on-the-jvm</id>
     <content type="html">&lt;p&gt;&lt;img src=&quot;/image/blog/esug-logo-2011.png&quot; alt=&quot;ESUG 2011 Logo&quot; title=&quot;ESUG 2011 Logo&quot; class=&quot;left&quot;&gt;&lt;/p&gt;
&lt;p&gt;James&amp;#8217; &lt;span class=&quot;caps&quot;&gt;ESUG&lt;/span&gt; presentation from this August has been posted. Get some popcorn, sit back and &lt;a href=&quot;http://www.youtube.com/watch?v=rX8OeNvgFcs&amp;amp;feature=youtu.be&amp;amp;a&quot;&gt;enjoy a magical ride&lt;/a&gt; through the trial and tribulations of implementating a Smalltalk on the Java Virtual Machine.&lt;/p&gt;
&lt;p&gt;Make your movie watching experience even more fun by trying to sync up the video and &lt;a href=&quot;http://www.slideshare.net/esug/smalltalk-on-the-jvm&quot;&gt;the slides&lt;/a&gt; I posted back in September.&lt;/p&gt;</content>
   </entry>
 
   <entry>
     <title>The Road to Intelli-J</title>
     <link href="http://www.redline.st/blog/2011/12/20/road-to-intellij.html"/>
     <updated>2011-12-20T00:00:00-08:00</updated>
     <id>http://www.redline.st/blog/2011/12/20/road-to-intellij</id>
     <content type="html">&lt;p&gt;&lt;img src=&quot;/image/blog/intellij.png&quot; title=&quot;IntelliJ Logo&quot; alt=&quot;IntelliJ Logo&quot; class=&quot;left&quot;&gt;&lt;/p&gt;
&lt;p&gt;So this is the skinny:&lt;/p&gt;
&lt;p&gt;At Smalltalk Solutions earlier this year James and I announced that Jet Brains had agreed in principle to add support for Redline Smalltalk to Intelli-J. Well the time is here, we&amp;#8217;ve met the basic requirements originally discussed with Jet Brains early in 2011 for Redline Smalltalk support to make it onto their roadmap.&lt;/p&gt;
We need your help to get it moved up the priority chain. Jet Brains has a voting system where registered users vote up features they want to see implemented. As of today, there is now one for Redline support. The next step is pretty simple&amp;#8230;
&lt;p&gt;We need everyone to sign up for a Jet Brains account ( or login with your Google or Yahoo account ) and &lt;a href=&quot;http://youtrack.jetbrains.net/issue/IDEA-79069&quot;&gt;vote for Redline support.&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;We need you to tweet about it.&lt;/li&gt;
	&lt;li&gt;&amp;#8230; to email people about it.&lt;/li&gt;
	&lt;li&gt;&amp;#8230; to google + about it.&lt;/li&gt;
	&lt;li&gt;&amp;#8230; to stand on the street corner talking about how the world is going to come to an end unless this happens.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This could end up being a big deal for us and your help is greatly appreciated.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This post is currently on the front page of Hacker News and it has been pointed out, that lacking in context, it could be confusing as to why someone into Smalltalk would care about Intelli-J support. Redline Smalltalk is an implementation of Smalltalk that runs on the &lt;span class=&quot;caps&quot;&gt;JVM&lt;/span&gt;, designed to work within the &lt;span class=&quot;caps&quot;&gt;JVM&lt;/span&gt; ecosystem. For us, that means that it should work with the tooling that &lt;span class=&quot;caps&quot;&gt;JVM&lt;/span&gt; developers are familiar with: Eclipse, Intelli-J et al. There is more information elsewhere on the site, but this site is still a work in progress. If you are interested in learning more, right now your best methods are &lt;a href=&quot;http://groups.google.com/group/redline-smalltalk&quot;&gt;the mailing list&lt;/a&gt; and our brand new &lt;a href=&quot;http://webchat.freenode.net/?channels=redline-st&quot;&gt;&lt;span class=&quot;caps&quot;&gt;IRC&lt;/span&gt; channel&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update Redux:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Dmitry Jemerov posted the following to the Intelli-J issue for Redline Smalltalk support:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;As the development lead of IntelliJ &lt;span class=&quot;caps&quot;&gt;IDEA&lt;/span&gt;, I would like to clarify the situation and to make expectations a bit more reasonable. The RedLine blog at http://www.redline.st/blog/2011/12/20/road-to-intellij.html says:&lt;/p&gt;
&lt;p&gt;&amp;#8220;James and I announced that Jet Brains had agreed in principle to add support for Redline Smalltalk to Intelli-J&amp;#8221;&lt;br /&gt;
This was not a decision made by JetBrains management. We do not see Smalltalk support bringing any significant business value for the company, and therefore we do not currently have any plans to invest any significant development resources into Smalltalk support, or to bundle Smalltalk support with a future version of IntelliJ &lt;span class=&quot;caps&quot;&gt;IDEA&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;What we can actually do is provide some basic foundation for the plugin, using the parser generation tools that we&amp;#8217;ve recently developed, and provide assistance to the community in developing the plugin further.&lt;/p&gt;
&lt;p&gt;Unfortunately that decision is very unlikely to be affected by the number of votes for this issue.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;We want to thank everyone who has voted up this issue so far and ask you to continue doing so in order to demonstrate the support. However, we feel it is important to for everyone to understand the situation as it stands and what your support can and can not accomplish.&lt;/p&gt;
&lt;p&gt;The level of support we have received so far as really inspired us and hope to see plenty of you on the mailing list and &lt;span class=&quot;caps&quot;&gt;IRC&lt;/span&gt; channel in the near future.&lt;/p&gt;</content>
   </entry>
 
   <entry>
     <title>IRC here we come</title>
     <link href="http://www.redline.st/blog/2011/12/19/irc.html"/>
     <updated>2011-12-19T00:00:00-08:00</updated>
     <id>http://www.redline.st/blog/2011/12/19/irc</id>
     <content type="html">&lt;p&gt;&lt;img src=&quot;/image/blog/irc.png&quot; title=&quot;IRC&quot; alt=&quot;IRC&quot; class=&quot;left&quot;&gt;&lt;/p&gt;
&lt;p&gt;Yesterday afternoon &amp;#8220;Steven! Ragnarök&amp;#8221; asked on the &lt;a href=&quot;http://groups.google.com/group/redline-smalltalk/browse_thread/thread/4182d7b1b030bba1&quot;&gt;mailing list&lt;/a&gt; if anyone was interested in setting up an &lt;span class=&quot;caps&quot;&gt;IRC&lt;/span&gt; channel for Redline. A few minutes and some ChanServ manipulation later and I had registered #redline-st for our usage.&lt;/p&gt;
&lt;p&gt;We&amp;#8217;re a small community right now so it isn&amp;#8217;t the most active place but, stop on by so you can say &amp;#8220;I was there when&amp;#8230;&amp;#8221;.&lt;/p&gt;
&lt;p&gt;Hope to see you there!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Server:&lt;/strong&gt; irc.freenode.net&lt;br /&gt;
&lt;strong&gt;Port:&lt;/strong&gt; 6667&lt;br /&gt;
&lt;strong&gt;Channel:&lt;/strong&gt; #redline-st&lt;/p&gt;</content>
   </entry>
 
   <entry>
     <title>Why Smalltalk? (Slight Return)</title>
     <link href="http://www.redline.st/blog/2011/11/30/why-smalltalk.html"/>
     <updated>2011-11-30T00:00:00-08:00</updated>
     <id>http://www.redline.st/blog/2011/11/30/why-smalltalk</id>
     <content type="html">&lt;p&gt;A while back, the &amp;#8216;Why Smalltalk?&amp;#8217; question came up on the &lt;a href=&quot;http://groups.google.com/group/redline-smalltalk&quot;&gt;Redline Smalltalk mailing list&lt;/a&gt;. What follows is the question as it was asked and James&amp;#8217; answer to it. A couple weeks past, I posted &lt;a href=&quot;http://www.redline.st/blog/2011/11/15/why-smalltalk.html&quot;&gt;my response&lt;/a&gt; and meant to post James&amp;#8217; but work and Redline got in the way of posting this until now.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;What makes Smalltalk special enough that you strongly feel it&amp;#8217;s better suited than the usual suspects for software development?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I think Smalltalk is more productive because there is less to remember, everything is a message to an object. This message passing is everywhere &amp;#8211; it is the language itself. When you remember this you can do anything the language and runtime allows. Conversely languages where you need to understand the runtime in addition to language syntax require more brain power. I&amp;#8217;d like to save that brain power for the problem at hand rather than the tooling I&amp;#8217;m using to solve the problem.&lt;/p&gt;
&lt;p&gt;To me, this is one of the brilliant things about lisp, almost everything is expressed in a uniform way. Is Smalltalk  better than Lisp? Of course, and of course not. It depends on how you think and which problem you are trying to solve.&lt;/p&gt;</content>
   </entry>
 
   <entry>
     <title>Why Smalltalk?</title>
     <link href="http://www.redline.st/blog/2011/11/15/why-smalltalk.html"/>
     <updated>2011-11-15T00:00:00-08:00</updated>
     <id>http://www.redline.st/blog/2011/11/15/why-smalltalk</id>
     <content type="html">&lt;p&gt;Earlier today, the &amp;#8216;Why Smalltalk?&amp;#8217; question came up on the &lt;a href=&quot;http://groups.google.com/group/redline-smalltalk&quot;&gt;Redline Smalltalk mailing list&lt;/a&gt;. What follows is the question as it was asked and my first stumbling attempt at answering it.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;What makes Smalltalk special enough that you strongly feel it&amp;#8217;s better suited than the usual suspects for software development?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;That would be a very lengthy answer and honestly, I don&amp;#8217;t think it would matter. Words are not really going do justice. I used Smalltalk every day for about 9 months before it suddenly hit me how much more productive I was with it than most languages I had ever used.&lt;/p&gt;
&lt;p&gt;I could talk about doing debugger driven development where you write the tests or client code and just it the code and then proceed to add all the supporting methods from the debugger and just restart from point X and how powerful have resumable exceptions are and what amazing things &amp;#8216;thisContext&amp;#8217; brings but unless you&amp;#8217;ve used it and experienced it for a while, that isn&amp;#8217;t going to mean much.&lt;/p&gt;
&lt;p&gt;I could talk about how in many ways Smalltalk is similar to Ruby but in my opinion, a &amp;#8216;saner&amp;#8217; ruby- I am very productive in Ruby as a language and can see being even more productive with a file based Smalltalk sans the environment because of those &amp;#8216;sanity&amp;#8217; checks.&lt;/p&gt;
&lt;p&gt;I could talk about how powerful the Smalltalk integrated environment is for doing development and how eventually I want to have the option for the same in Redline while maintaining being able to interoperate with a file based world.&lt;/p&gt;
&lt;p&gt;And all that just scratches the surface.&lt;/p&gt;
&lt;p&gt;It is however a question I need to try and find a succinct way to answer as the Redline site is going to need to answer it. I originally avoided answering that part of the question because I don&amp;#8217;t have a good succinct answer. The is an attempt at a succinct answer and I think it sucks. But, I am working on it.&lt;/p&gt;</content>
   </entry>
 
   <entry>
     <title>Smalltalk on the JVM</title>
     <link href="http://www.redline.st/blog/2011/09/01/smalltalk-on-the-jvm-presentation.html"/>
     <updated>2011-09-01T00:00:00-07:00</updated>
     <id>http://www.redline.st/blog/2011/09/01/smalltalk-on-the-jvm-presentation</id>
     <content type="html">&lt;p&gt;&lt;img src=&quot;/image/blog/esug-logo-2011.png&quot; alt=&quot;ESUG 2011 Logo&quot; title=&quot;ESUG 2011 Logo&quot; class=&quot;left&quot;&gt;&lt;/p&gt;
&lt;p&gt;The slides from James&amp;#8217; 2011 &lt;span class=&quot;caps&quot;&gt;ESUG&lt;/span&gt; presentation &lt;a href=&quot;http://www.slideshare.net/esug/smalltalk-on-the-jvm&quot;&gt;&amp;#8216;Smalltalk on the &lt;span class=&quot;caps&quot;&gt;JVM&lt;/span&gt;&amp;#8217;&lt;/a&gt; are now available.&lt;/p&gt;
&lt;p&gt;The presentation covered the challenges that we&amp;#8217;ve had implementing a dynamic language like Smalltalk on the &lt;span class=&quot;caps&quot;&gt;JVM&lt;/span&gt; and how we&amp;#8217;ve gone about addressing those issues. While we certainly aren&amp;#8217;t alone in having gone through these struggles and aren&amp;#8217;t the only one&amp;#8217;s to document it, we hope our experiences end up helping someone else down the road.&lt;/p&gt;
&lt;p&gt;If you are looking to get a quick overview of how Redline works internally, this presentation could be an excellent resource.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;caps&quot;&gt;ESUG&lt;/span&gt; just uploaded &lt;a href=&quot;ttp://www.youtube.com/watch?v=rX8OeNvgFcs&amp;amp;feature=youtu.be&amp;amp;a&quot;&gt;video&lt;/a&gt; of the presentation.&lt;/p&gt;</content>
   </entry>
 
   <entry>
     <title>The Journey So Far...</title>
     <link href="http://www.redline.st/blog/2011/04/01/the-journey-so-far.html"/>
     <updated>2011-04-01T00:00:00-07:00</updated>
     <id>http://www.redline.st/blog/2011/04/01/the-journey-so-far</id>
     <content type="html">&lt;p&gt;&lt;img src=&quot;/image/blog/jedi-cloak.jpg&quot; title=&quot;Jedi Cloak&quot; alt=&quot;Jedi Cloak&quot; class=&quot;left&quot;&gt;&lt;/p&gt;
&lt;p&gt;Our &lt;a href=&quot;http://vimeo.com/channels/186668#22084832&quot;&gt;presentation from Smalltalk Solutions 2011&lt;/a&gt; is now available. It&amp;#8217;s an excellent primer on what we want to accomplish with Redline. Plus, as an added bonus, you get to see us dressed up as Jedi Knights. For the more adventurous amongst you, try your hand at maching the &lt;a href=&quot;http://www.slideshare.net/seantallen/redline-smalltalk-the-journey-so-far&quot;&gt;slides&lt;/a&gt; to video.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;</content>
   </entry>
 
   <entry>
     <title>Independent Misinterpretations 7</title>
     <link href="http://www.redline.st/blog/2010/10/29/independent-misinterpretations.html"/>
     <updated>2010-10-29T00:00:00-07:00</updated>
     <id>http://www.redline.st/blog/2010/10/29/independent-misinterpretations</id>
     <content type="html">&lt;p&gt;Check out my appearance on &lt;a href=&quot;http://www.jarober.com/blog/blogView?entry=3468391491&quot;&gt;episode 7 of Independent Misinterpretations&lt;/a&gt; – a Smalltalk and dynamic language oriented podcast with &lt;a href=&quot;http://www.jarober.com/&quot;&gt;James Robertson&lt;/a&gt;, &lt;a href=&quot;http://www.michaellucassmith.com/&quot;&gt;Michael Lucas-Smith&lt;/a&gt;, and &lt;a href=&quot;http://www.cincomsmalltalk.com/userblogs/buck/blogView&quot;&gt;David Buck&lt;/a&gt;.&lt;/p&gt;</content>
   </entry>
 
   <entry>
     <title>A Fan Letter to Redline Smalltalk...</title>
     <link href="http://www.redline.st/blog/2010/10/27/a-fan-letter.html"/>
     <updated>2010-10-27T00:00:00-07:00</updated>
     <id>http://www.redline.st/blog/2010/10/27/a-fan-letter</id>
     <content type="html">&lt;p&gt;It seemed appropriate that the first post to the Redline Smalltalk Blog was about Redline and what is in it for you. So I took a hypothetical “fan letter” to Redline Smalltalk from my &lt;a href=&quot;http://www.jamesladdcode.com/&quot;&gt;other Blog&lt;/a&gt; and put it here (see below).  Work continues on Redline with the parser complete and bytecode generation in full swing.  The Smalltalk runtime is  being ported from the Pharo Smalltalk sources and development continues on the Eclipse Plugin.&lt;/p&gt;
&lt;p style=&quot;text-align:center;&quot;&gt;&lt;img src=&quot;/image/blog/fans.jpg&quot; title=&quot;Fans at a concert&quot; alt=&quot;Fans at a concert&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I was inspired by &lt;a href=&quot;http://www.threeriversinstitute.org/blog/?p=445&quot;&gt;this post by Kent Beck&lt;/a&gt; to write a fan letter to Redline Smalltalk, written in the voice of a deliriously satisfied user. This is an excellent way of articulating a vision.&lt;/p&gt;
&lt;p&gt;Dear Redline Smalltalk,&lt;/p&gt;
&lt;p&gt;I have been using Redline Smalltalk at work and in personal projects for a while now and I just had to let you know what a joy it is to use and how productive I am with it.&lt;/p&gt;
&lt;p&gt;My work situation means I have to work on the Java Virtual Machine and I have been looking at alternatives to Java so I could be as productive as possible and stay away from those little Java annoyances and hurdles that slow me down. Having a background in Smalltalk I jumped at the chance to put your Redline Smalltalk through its paces and I have to say I couldn’t tell the difference between your Smalltalk and the others, in fact I think yours was a little faster.&lt;/p&gt;
&lt;p&gt;At home I like to use IntelliJ and your plug-in support in the &lt;span class=&quot;caps&quot;&gt;IDE&lt;/span&gt; is brilliant, the mix of old style Smalltalk-80 browser, refactoring and file based support is smooth and complete and just what I needed, especially the source level debugging and profiling which I could not live without.  At work we use Eclipse and I can’t tell the difference between the plug-ins so now I’m getting a few other developers to try it, and I think I made some converts.&lt;/p&gt;
&lt;p&gt;One developer at work, Steve, keeps banging on about how Ruby On Rails is this and how Ruby On Rails is that, how we need rspec, gem, rake, and how awesome it is to script things and try stuff out with irb. You should have seen his jaw drop when I showed him how I can do all that in Redline and how quickly I could create, test and deploy my Seaside Web App and then push changes to different environments with a simple commit, even while they were running. You really did think of everything to make things complete and integrated with Smalltalk everywhere.&lt;/p&gt;
&lt;p&gt;I wondered what you could add in the next release and I just can’t think of anything but if I do, Ill be sure to let you know.&lt;/p&gt;
&lt;p&gt;Thanks for a wonderful product that has really changed the way I work and made it fun again.&lt;/p&gt;
&lt;p&gt;Regards,&lt;/p&gt;
&lt;p&gt;John Q. Geek.&lt;/p&gt;</content>
   </entry>
 
 
</feed>
