<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
  <title>Ruby Type Inference - Home</title>
  <id>tag:rti.jayunit.net,2007:mephisto/</id>
  <generator version="0.7.3" uri="http://mephistoblog.com">Mephisto Noh-Varr</generator>
  <link href="http://rti.jayunit.net/feed/atom.xml" rel="self" type="application/atom+xml"/>
  <link href="http://rti.jayunit.net/" rel="alternate" type="text/html"/>
  <updated>2007-02-22T04:27:36Z</updated>
  <entry xml:base="http://rti.jayunit.net/">
    <author>
      <name>jason</name>
    </author>
    <id>tag:rti.jayunit.net,2007-02-22:9</id>
    <published>2007-02-22T03:05:00Z</published>
    <updated>2007-02-22T04:27:36Z</updated>
    <link href="http://rti.jayunit.net/2007/2/22/idea-patch-up-with-lint-checkr" rel="alternate" type="text/html"/>
    <title>Idea: Patch up with lint/checkr</title>
<content type="html">
            Idea: Patch up with lint/checkr
          </content>  </entry>
  <entry xml:base="http://rti.jayunit.net/">
    <author>
      <name>jason</name>
    </author>
    <id>tag:rti.jayunit.net,2007-02-21:8</id>
    <published>2007-02-21T20:43:00Z</published>
    <updated>2007-02-21T20:44:23Z</updated>
    <link href="http://rti.jayunit.net/2007/2/21/ruby-hacking-guide" rel="alternate" type="text/html"/>
    <title>Ruby Hacking Guide</title>
<content type="html">
            &quot;Ruby Hacking Guide&quot;:http://rhg.rubyforge.org/
          </content>  </entry>
  <entry xml:base="http://rti.jayunit.net/">
    <author>
      <name>jason</name>
    </author>
    <id>tag:rti.jayunit.net,2007-02-16:7</id>
    <published>2007-02-16T22:27:00Z</published>
    <updated>2007-02-16T22:32:07Z</updated>
    <link href="http://rti.jayunit.net/2007/2/16/link-ti-in-nemerle" rel="alternate" type="text/html"/>
    <title>TI in Nemerle</title>
<content type="html">
            Type Inference in Nemerle, F/OO .NET lang.  &quot;Type Inference with Deferral&quot;:http://nemerle.org/Type_inference
          </content>  </entry>
  <entry xml:base="http://rti.jayunit.net/">
    <author>
      <name>jason</name>
    </author>
    <id>tag:rti.jayunit.net,2007-02-16:5</id>
    <published>2007-02-16T21:55:00Z</published>
    <updated>2007-02-16T21:55:28Z</updated>
    <link href="http://rti.jayunit.net/2007/2/16/ide-cursor-position-gate-point" rel="alternate" type="text/html"/>
    <title>IDE Cursor Position "Gate Point"</title>
<content type="html">
            &lt;p&gt;Regarding error handling, it occurred we likely have a gate point  at which extra node &#8220;doctoring&#8221; will need to take place in the case of malformed source when invoking TI for completion in an &lt;span class=&quot;caps&quot;&gt;IDE&lt;/span&gt;; namely, the cursor location at the time of inference.  This may be a big help to the error recovery algorithm?&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://rti.jayunit.net/">
    <author>
      <name>jason</name>
    </author>
    <id>tag:rti.jayunit.net,2007-02-16:6</id>
    <published>2007-02-16T21:55:00Z</published>
    <updated>2007-02-16T22:31:21Z</updated>
    <link href="http://rti.jayunit.net/2007/2/16/ddp-demand-driven-analysis-with-goal-pruning" rel="alternate" type="text/html"/>
    <title>DDP: Demand-Driven Analysis with Goal Pruning</title>
<content type="html">
            &lt;p&gt;Lex Spoon has some &lt;a href=&quot;http://www.lexspoon.org/ti/&quot;&gt;rockin&#8217; ideas&lt;/a&gt; !  I know I will very likely take many pages from this approach, just documenting it here for posterity ; )&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://rti.jayunit.net/">
    <author>
      <name>jason</name>
    </author>
    <id>tag:rti.jayunit.net,2007-02-16:3</id>
    <published>2007-02-16T21:49:00Z</published>
    <updated>2007-02-16T22:31:36Z</updated>
    <link href="http://rti.jayunit.net/2007/2/16/links-for-error-handling-in-parsing" rel="alternate" type="text/html"/>
    <title>Error Handling in Parsing</title>
<content type="html">
            &lt;h3&gt;Ones I have looked through briefly:&lt;/h3&gt;

	&lt;p&gt;Burke-Fisher: &lt;a href=&quot;http://portal.acm.org/citation.cfm?doid=22719.22720&quot;&gt;A Practical Method for LR and LL Syntactic
Error Diagnosis and Recovery&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Great ideas, solid grounding for graceful handling of error diag.&lt;/p&gt;


	&lt;p&gt;&lt;a href=&quot;http://jikes.sourceforge.net/documents/conf.pdf&quot;&gt;LR(k) Error Diagnosis and Recovery&lt;/a&gt; from Jikes&lt;/p&gt;


	&lt;p&gt;Updates on Burke-Fisher, focuses on LR(k), provides a more performant algorithm.&lt;/p&gt;


&lt;h3&gt;Ones I have looked through not so much:&lt;/h3&gt;

	&lt;p&gt;&lt;a href=&quot;http://www.doc.ic.ac.uk/lab/secondyear/Antlr/err.html&quot;&gt;&lt;span class=&quot;caps&quot;&gt;ANTLR&lt;/span&gt; error handling and recovery&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;&lt;a href=&quot;http://www.antlr.org/blog/antlr3/error.handling.tml&quot;&gt;&lt;span class=&quot;caps&quot;&gt;ANTLR 3&lt;/span&gt;.0 Error Handling &lt;span class=&quot;caps&quot;&gt;TJP&lt;/span&gt; notes&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;&lt;a href=&quot;http://www.cs.uu.nl/~doaitse/Papers/1999/SofSem99.pdf&quot;&gt;Fast, Error Correcting Parser Combinators:
A Short Tutorial&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;&lt;a href=&quot;http://lambda-the-ultimate.org/node/1018&quot;&gt;Graceful Error Recovery @ &lt;span class=&quot;caps&quot;&gt;LTU&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Lex, Yacc, error symbols, tutorial style: &lt;a href=&quot;http://www.amazon.com/Introduction-Compiler-Construction-Prentice-Hall-Software/dp/0134743962&quot; title=&quot;Schreiner, Friedman&quot;&gt;Introduction to Compiler Construction With Unix&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;&lt;a href=&quot;http://portal.acm.org/citation.cfm?id=1064173&#38;dl=GUIDE&#38;coll=GUIDE&#38;CFID=15151515&#38;CFTOKEN=6184618&quot;&gt;JavaCC &#8211; Syntax Error Repair for a Java­based Parser Generator&lt;/a&gt;&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://rti.jayunit.net/">
    <author>
      <name>jason</name>
    </author>
    <id>tag:rti.jayunit.net,2007-02-16:4</id>
    <published>2007-02-16T21:49:00Z</published>
    <updated>2007-02-16T22:31:42Z</updated>
    <link href="http://rti.jayunit.net/2007/2/16/gradual-typing-for-objects" rel="alternate" type="text/html"/>
    <title>Gradual Typing for Objects</title>
<content type="html">
            &lt;p&gt;&lt;a href=&quot;http://www.cs.colorado.edu/~siek/gradual-obj.pdf&quot;&gt;Gradual Typing for Objects&lt;/a&gt; (via &lt;a href=&quot;http://lambda-the-ultimate.org/node/2061&quot;&gt;LtU&lt;/a&gt;).&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://rti.jayunit.net/">
    <author>
      <name>jason</name>
    </author>
    <id>tag:rti.jayunit.net,2007-02-16:2</id>
    <published>2007-02-16T21:46:00Z</published>
    <updated>2007-02-16T22:31:49Z</updated>
    <link href="http://rti.jayunit.net/2007/2/16/ruby-grammarians-thread" rel="alternate" type="text/html"/>
    <title>Ruby Grammarians thread</title>
<content type="html">
            &lt;p&gt;A &lt;a href=&quot;http://rubyforge.org/pipermail/rubygrammar-grammarians/2007-February/000198.html&quot;&gt;bit of inquiry&lt;/a&gt; over at ruby-grammarians yielded some great leads.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://rti.jayunit.net/">
    <author>
      <name>jason</name>
    </author>
    <id>tag:rti.jayunit.net,2007-02-16:1</id>
    <published>2007-02-16T21:44:00Z</published>
    <updated>2007-02-16T21:48:19Z</updated>
    <link href="http://rti.jayunit.net/2007/2/16/agenda" rel="alternate" type="text/html"/>
    <title>Agenda</title>
<content type="html">
            Goal: To design and implement type inference for Ruby geared towards code completion in an &lt;span class=&quot;caps&quot;&gt;IDE&lt;/span&gt;.  The tool should:
	&lt;ul&gt;
	&lt;li&gt;Work via static analysis&lt;/li&gt;
		&lt;li&gt;Accept invalid/partial source&lt;/li&gt;
		&lt;li&gt;Provide an open interface (observer to &lt;span class=&quot;caps&quot;&gt;IDE&lt;/span&gt; source changes, etc., but not be impossible to hook up to a command line interface for other static analysis uses)&lt;/li&gt;
		&lt;li&gt;Be reasonably performant (whatever that means)&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;It will likely be &lt;a href=&quot;http://lexspoon.org/ti/&quot;&gt;demand driven&lt;/a&gt; and constraints based.&lt;/p&gt;


	&lt;p&gt;It will likely be written in Java with the intent of integrating to &lt;a href=&quot;http://rubyeclipse.sourceforge.net/&quot;&gt;&lt;span class=&quot;caps&quot;&gt;RDT&lt;/span&gt;&lt;/a&gt; (see &lt;a href=&quot;http://soc.jayunit.net&quot;&gt;Summer of Code work&lt;/a&gt;), with experiments in Ruby.&lt;/p&gt;


	&lt;p&gt;This (hacking algorithms in both Ruby and Java) may be made easier by using an &lt;span class=&quot;caps&quot;&gt;ANTLR&lt;/span&gt; grammar now that &lt;span class=&quot;caps&quot;&gt;ANTLR3&lt;/span&gt; &lt;a href=&quot;http://www.antlr.org/wiki/display/ANTLR3/Antlr3RubyTarget&quot;&gt;can target Ruby&lt;/a&gt; as well as Java.  The Rubyfront/&lt;a href=&quot;http://www.xruby.com/&quot;&gt;XRuby&lt;/a&gt; grammar is a great candidate.&lt;/p&gt;


	&lt;p&gt;Alternatively, parse.y is viable through Jay and/or Racc.&lt;/p&gt;
          </content>  </entry>
</feed>
