<?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/'><id>tag:blogger.com,1999:blog-6800934446457898793.post2291191240100872745..comments</id><updated>2010-08-27T15:50:32.566-04:00</updated><category term='trueskill'/><category term='aes'/><title type='text'>Comments on Moserware: OMeta#: Who? What? When? Where? Why?</title><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.moserware.com/feeds/2291191240100872745/comments/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default'/><link rel='alternate' type='text/html' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default?start-index=26&amp;max-results=25'/><author><name>Jeff Moser</name><uri>http://www.blogger.com/profile/16074905903060665396</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_Zfbv3mHcYrc/SLDM--5fn8I/AAAAAAAAA1w/EZtLwWvYhdI/S220/facebook+beard2.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>26</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6800934446457898793.post-4517337164900827873</id><published>2010-08-27T15:50:32.566-04:00</published><updated>2010-08-27T15:50:32.566-04:00</updated><title type='text'>&amp;quot;this output C# file&amp;quot;
should now point a...</title><content type='html'>&amp;quot;this output C# file&amp;quot;&lt;br /&gt;should now point at:&lt;br /&gt;http://ometasharp.codeplex.com/SourceControl/changeset/view/12094#264623</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/4517337164900827873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/4517337164900827873'/><link rel='alternate' type='text/html' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html?showComment=1282938632566#c4517337164900827873' title=''/><author><name>Extreme Designer</name><uri>http://www.blogger.com/profile/07354289344595303603</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html' ref='tag:blogger.com,1999:blog-6800934446457898793.post-2291191240100872745' source='http://www.blogger.com/feeds/6800934446457898793/posts/default/2291191240100872745' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-767611852'/></entry><entry><id>tag:blogger.com,1999:blog-6800934446457898793.post-2602621346560862574</id><published>2008-07-03T22:48:00.000-04:00</published><updated>2008-07-03T22:48:00.000-04:00</updated><title type='text'>Harry Pierson: Thanks for stopping by! I checked o...</title><content type='html'>Harry Pierson: Thanks for stopping by! I checked out your Lang.net presentation on PEG's in F# (and linked to it in this post) as we share similar excitement about them. &lt;BR/&gt;&lt;BR/&gt;You're right that it seems a bit odd for choosing C# and not something more language friendly like F#. I did this intentionally for a few reasons. The main reason was to eliminate dependencies. I didn't want to require a F# (or SML/ML or the like) library DLL or requiring someone to download the F# compiler. Another reason is that I'm not as good at writing code in F# as I am in C#. This is a poor reason, but true for now. &lt;BR/&gt;&lt;BR/&gt;One subtle reason that I alluded to in this post is that by doing it in C#, it makes it easier to "sneak" it into the build process of real projects if it ever takes off. That is because most people have C# compilers in their build process. By compiling just C# code and not having to introduce something new, it makes it that much easier.&lt;BR/&gt;&lt;BR/&gt;However, I have planned from the beginning to create the possibility of code emitters be in any language, including F# and Boo. F# has an amazing ability to handle trees and thus could be of use in some more intense phases. The point is that code emiters will just have to implement some known interface. I'd like to have one for common languages like VB.NET as well. &lt;BR/&gt;&lt;BR/&gt;I'm sure OMeta/JS could probably get up and running on .NET with the new Managed JavaScript compiler being built with the DLR. However, it'd be limited to JavaScript's type system. The point with OMeta# is that it uses native .NET 2.0 (generic) data structures that can be used in a wide array of languages and thus interoperate nicely across the .net/clr platform (including the dynamic languages).&lt;BR/&gt;&lt;BR/&gt;As reflected in my check-ins so far, I'm still in the experimenting phase. The design is really rough and has some bad code smells. I'd love it if smart guys like yourself wanted to help out and offer constructive criticism and suggestions on the design :) There is a ton of work in order to achieve the vision.&lt;BR/&gt;&lt;BR/&gt;Thanks again for the encouragement and comment!</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/2602621346560862574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/2602621346560862574'/><link rel='alternate' type='text/html' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html?showComment=1215139680000#c2602621346560862574' title=''/><author><name>Jeff Moser</name><uri>http://www.blogger.com/profile/16074905903060665396</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html' ref='tag:blogger.com,1999:blog-6800934446457898793.post-2291191240100872745' source='http://www.blogger.com/feeds/6800934446457898793/posts/default/2291191240100872745' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-252333216'/></entry><entry><id>tag:blogger.com,1999:blog-6800934446457898793.post-5789819633191568483</id><published>2008-07-03T18:16:00.000-04:00</published><updated>2008-07-03T18:16:00.000-04:00</updated><title type='text'>I first learned of oMeta after delivering the PEGs...</title><content type='html'>I first learned of oMeta after delivering the PEGs in F# talk at Lang.NET. I haven't had time to play with it, but your implementation certainly is exciting.&lt;BR/&gt;&lt;BR/&gt;I'm surprised you didn't look @ implementing oMeta# in F#. You praise the pattern matching feature of ML, but then you used a implementation language (aka C#) that doesn't support it. &lt;BR/&gt;&lt;BR/&gt;I also wonder if the oMeta-js would work w/ .NET, either the old JScript.NET compiler or the newer Managed JScript that's being built on the DLR?&lt;BR/&gt;&lt;BR/&gt;Speaking of the DLR, I tried geting pyMeta to work with IronPython, but we haven't implemented the built-in parser module yet so it won't work.&lt;BR/&gt;&lt;BR/&gt;Keep up the good work!</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/5789819633191568483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/5789819633191568483'/><link rel='alternate' type='text/html' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html?showComment=1215123360000#c5789819633191568483' title=''/><author><name>Harry Pierson</name><uri>http://devhawk.net</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html' ref='tag:blogger.com,1999:blog-6800934446457898793.post-2291191240100872745' source='http://www.blogger.com/feeds/6800934446457898793/posts/default/2291191240100872745' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-2002695396'/></entry><entry><id>tag:blogger.com,1999:blog-6800934446457898793.post-3861342624675510462</id><published>2008-07-02T08:11:00.000-04:00</published><updated>2008-07-02T08:11:00.000-04:00</updated><title type='text'>leppie: First off, I want to say that I think your...</title><content type='html'>leppie: First off, I want to say that I think your &lt;A HREF="http://www.codeplex.com/IronScheme" REL="nofollow"&gt;IronScheme&lt;/A&gt; project is really interesting and I have a lot to learn from it.&lt;BR/&gt;&lt;BR/&gt;All I know about macro hygiene is what I just read about it &lt;A HREF="http://en.wikipedia.org/wiki/Hygienic_macro" REL="nofollow"&gt;on Wikipedia&lt;/A&gt;. However, from what I understand, I think OMeta as a language handles this in a sort of straightforward way.&lt;BR/&gt;&lt;BR/&gt;The language is grammar based. Grammars can inherit from other grammars. The main unit of work is the rule. Rule names must be unique in an inheritance chain (although overriding is freely permitted). The important thing from a hygiene perspective is that rules can call out to foreign grammars. Those foreign grammars can then use rules with the same name to mean entirely different things. This is specifically mentioned in the &lt;A HREF="http://www.cs.ucla.edu/~awarth/papers/dls07.pdf" REL="nofollow"&gt;2007 paper&lt;/A&gt;. It's not perfect, but it's similar to how people think in most mainstream languages like C# and Java.&lt;BR/&gt;&lt;BR/&gt;I can't speak for Nemerle because I don't have experience with it. Maybe someone else can?&lt;BR/&gt;&lt;BR/&gt;Did that answer your question?</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/3861342624675510462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/3861342624675510462'/><link rel='alternate' type='text/html' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html?showComment=1215000660000#c3861342624675510462' title=''/><author><name>Jeff Moser</name><uri>http://www.blogger.com/profile/16074905903060665396</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html' ref='tag:blogger.com,1999:blog-6800934446457898793.post-2291191240100872745' source='http://www.blogger.com/feeds/6800934446457898793/posts/default/2291191240100872745' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-252333216'/></entry><entry><id>tag:blogger.com,1999:blog-6800934446457898793.post-3639531416669854150</id><published>2008-07-02T05:25:00.000-04:00</published><updated>2008-07-02T05:25:00.000-04:00</updated><title type='text'>How do you (and Nemerle for that fact) handle macr...</title><content type='html'>How do you (and Nemerle for that fact) handle macro hygiene?</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/3639531416669854150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/3639531416669854150'/><link rel='alternate' type='text/html' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html?showComment=1214990700000#c3639531416669854150' title=''/><author><name>leppie</name><uri>http://www.blogger.com/profile/13269210098337281803</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html' ref='tag:blogger.com,1999:blog-6800934446457898793.post-2291191240100872745' source='http://www.blogger.com/feeds/6800934446457898793/posts/default/2291191240100872745' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-2113683721'/></entry><entry><id>tag:blogger.com,1999:blog-6800934446457898793.post-6613404403452272683</id><published>2008-07-01T08:05:00.000-04:00</published><updated>2008-07-01T08:05:00.000-04:00</updated><title type='text'>greg: It would be a bit tricky since the function ...</title><content type='html'>greg: It would be a bit tricky since the function would essentially take in another variable. However, since it makes the code look nicer, it might be special-cased in some compilers.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/6613404403452272683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/6613404403452272683'/><link rel='alternate' type='text/html' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html?showComment=1214913900000#c6613404403452272683' title=''/><author><name>Jeff Moser</name><uri>http://www.blogger.com/profile/16074905903060665396</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html' ref='tag:blogger.com,1999:blog-6800934446457898793.post-2291191240100872745' source='http://www.blogger.com/feeds/6800934446457898793/posts/default/2291191240100872745' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-252333216'/></entry><entry><id>tag:blogger.com,1999:blog-6800934446457898793.post-5220564883797305076</id><published>2008-07-01T01:36:00.000-04:00</published><updated>2008-07-01T01:36:00.000-04:00</updated><title type='text'>A good ML compiler would optimize that to tail-rec...</title><content type='html'>A good ML compiler would optimize that to tail-recursive form though, wouldn't it?</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/5220564883797305076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/5220564883797305076'/><link rel='alternate' type='text/html' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html?showComment=1214890560000#c5220564883797305076' title=''/><author><name>Greg</name><uri>http://www.blogger.com/profile/07637024036051297719</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html' ref='tag:blogger.com,1999:blog-6800934446457898793.post-2291191240100872745' source='http://www.blogger.com/feeds/6800934446457898793/posts/default/2291191240100872745' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1493709064'/></entry><entry><id>tag:blogger.com,1999:blog-6800934446457898793.post-6435295493579109454</id><published>2008-06-29T22:40:00.000-04:00</published><updated>2008-06-29T22:40:00.000-04:00</updated><title type='text'>anonymous: Hopefully we'll get to the level of int...</title><content type='html'>anonymous: Hopefully we'll get to the level of interactive debugging like that of Visual Studio with C#, but I'm sure it's a lot of work. Interesting on getting pymeta up on python.net. Let me know if you build some languages with it.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/6435295493579109454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/6435295493579109454'/><link rel='alternate' type='text/html' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html?showComment=1214793600000#c6435295493579109454' title=''/><author><name>Jeff Moser</name><uri>http://www.blogger.com/profile/16074905903060665396</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html' ref='tag:blogger.com,1999:blog-6800934446457898793.post-2291191240100872745' source='http://www.blogger.com/feeds/6800934446457898793/posts/default/2291191240100872745' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-252333216'/></entry><entry><id>tag:blogger.com,1999:blog-6800934446457898793.post-3660596357821043411</id><published>2008-06-27T07:19:00.000-04:00</published><updated>2008-06-27T07:19:00.000-04:00</updated><title type='text'>i have sucseeded running pymeta on python.net.&lt;br&gt;...</title><content type='html'>i have sucseeded running pymeta on python.net.&lt;BR/&gt;&lt;BR/&gt;python.net is a seamless integration solution between python and .net &lt;BR/&gt;check the site for more details: &lt;BR/&gt;http://pythonnet.sourceforge.net/</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/3660596357821043411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/3660596357821043411'/><link rel='alternate' type='text/html' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html?showComment=1214565540000#c3660596357821043411' title=''/><author><name>Anonymous</name><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html' ref='tag:blogger.com,1999:blog-6800934446457898793.post-2291191240100872745' source='http://www.blogger.com/feeds/6800934446457898793/posts/default/2291191240100872745' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1046485912'/></entry><entry><id>tag:blogger.com,1999:blog-6800934446457898793.post-1681985703114584575</id><published>2008-06-26T20:22:00.000-04:00</published><updated>2008-06-26T20:22:00.000-04:00</updated><title type='text'>i have tried to work with pymeta on ironpython . c...</title><content type='html'>i have tried to work with pymeta on ironpython . could'nt import the string library. it's hard for me to estimate how much work it would take to port it to ironpython , since i have no experience in ironpython. &lt;BR/&gt;&lt;BR/&gt;&lt;BR/&gt;&lt;BR/&gt;regarding debugging: since the idea of dsl is to enable writing very little code , the basic debugging model of scripting languages (commandshell +print instructions ) could be pretty usefull and relativly simple to implement.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/1681985703114584575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/1681985703114584575'/><link rel='alternate' type='text/html' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html?showComment=1214526120000#c1681985703114584575' title=''/><author><name>Anonymous</name><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html' ref='tag:blogger.com,1999:blog-6800934446457898793.post-2291191240100872745' source='http://www.blogger.com/feeds/6800934446457898793/posts/default/2291191240100872745' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1870665958'/></entry><entry><id>tag:blogger.com,1999:blog-6800934446457898793.post-570099683839637859</id><published>2008-06-25T19:55:00.000-04:00</published><updated>2008-06-25T19:55:00.000-04:00</updated><title type='text'>alexey: Thanks again for keeping me honest :)&lt;br&gt;&lt;...</title><content type='html'>alexey: Thanks again for keeping me honest :)&lt;BR/&gt;&lt;BR/&gt;anonymous: I've heard of PyMeta and meant to link to PyMeta's &lt;A HREF="http://washort.twistedmatrix.com/2008/03/pymeta-how-and-why.html" REL="nofollow"&gt;How and Why&lt;/A&gt; explanation because the author had the same sort of feeling to defend why the world needs another way of expressing a language like I did.&lt;BR/&gt;&lt;BR/&gt;I think PyMeta is definitely neat, but the aims are different from OMeta#. PyMeta seems to take a string and do a parse whereas I'd like to make OMeta# more of a front end compiler and simplified language studio (with debugger support, syntax highlighting, etc.)&lt;BR/&gt;&lt;BR/&gt;All that said however, let me know if you have success getting it up on IronPython.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/570099683839637859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/570099683839637859'/><link rel='alternate' type='text/html' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html?showComment=1214438100000#c570099683839637859' title=''/><author><name>Jeff Moser</name><uri>http://www.blogger.com/profile/16074905903060665396</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html' ref='tag:blogger.com,1999:blog-6800934446457898793.post-2291191240100872745' source='http://www.blogger.com/feeds/6800934446457898793/posts/default/2291191240100872745' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-252333216'/></entry><entry><id>tag:blogger.com,1999:blog-6800934446457898793.post-8604089549801258661</id><published>2008-06-25T09:50:00.000-04:00</published><updated>2008-06-25T09:50:00.000-04:00</updated><title type='text'>have you heard of pymeta?&lt;br&gt;it's a python impleme...</title><content type='html'>have you heard of pymeta?&lt;BR/&gt;it's a python implementation of ometa .&lt;BR/&gt;i could probably run on iron python , and by doing so , offer ometa on the clr.&lt;BR/&gt;http://washort.twistedmatrix.com/2008/04/pymeta-is-more-than-just-parsing.html</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/8604089549801258661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/8604089549801258661'/><link rel='alternate' type='text/html' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html?showComment=1214401800000#c8604089549801258661' title=''/><author><name>Anonymous</name><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html' ref='tag:blogger.com,1999:blog-6800934446457898793.post-2291191240100872745' source='http://www.blogger.com/feeds/6800934446457898793/posts/default/2291191240100872745' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1484224631'/></entry><entry><id>tag:blogger.com,1999:blog-6800934446457898793.post-6802183295393195510</id><published>2008-06-25T09:05:00.000-04:00</published><updated>2008-06-25T09:05:00.000-04:00</updated><title type='text'>Yes, this is the correct version.</title><content type='html'>Yes, this is the correct version.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/6802183295393195510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/6802183295393195510'/><link rel='alternate' type='text/html' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html?showComment=1214399100000#c6802183295393195510' title=''/><author><name>Alexey</name><uri>http://www.blogger.com/profile/04414745317669007614</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html' ref='tag:blogger.com,1999:blog-6800934446457898793.post-2291191240100872745' source='http://www.blogger.com/feeds/6800934446457898793/posts/default/2291191240100872745' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-194769857'/></entry><entry><id>tag:blogger.com,1999:blog-6800934446457898793.post-101911673198804412</id><published>2008-06-25T08:17:00.000-04:00</published><updated>2008-06-25T08:17:00.000-04:00</updated><title type='text'>alexey: Great catch! You're right, I said it was t...</title><content type='html'>alexey: Great catch! You're right, I said it was tail recursive, but I was absolutely wrong for the reason you mentioned. I need to make sure that the last call is to itself. I made an assumption without taking a second to think about it. Oops :(&lt;BR/&gt;&lt;BR/&gt;An updated function would need to pass in the result so far as an accumulator. How about something like&lt;BR/&gt;&lt;BR/&gt;fun fastReverse([], acc) = acc&lt;BR/&gt;  | fastReverse(x::xs, acc)=fastReverse(xs, x::acc)&lt;BR/&gt;&lt;BR/&gt;That way the last call in the function is to itself and thus can be tail recursive. We assume that the accumulator (acc) is reversed. Then, we pop the head off of what we need to reverse "x" and prepend it to the already reversed part. The initial conditions would be "fastReverse(myList, [])"</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/101911673198804412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/101911673198804412'/><link rel='alternate' type='text/html' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html?showComment=1214396220000#c101911673198804412' title=''/><author><name>Jeff Moser</name><uri>http://www.blogger.com/profile/16074905903060665396</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html' ref='tag:blogger.com,1999:blog-6800934446457898793.post-2291191240100872745' source='http://www.blogger.com/feeds/6800934446457898793/posts/default/2291191240100872745' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-252333216'/></entry><entry><id>tag:blogger.com,1999:blog-6800934446457898793.post-7876129367341777129</id><published>2008-06-25T05:30:00.000-04:00</published><updated>2008-06-25T05:30:00.000-04:00</updated><title type='text'>Unfortunately, your reverse isn't tail recursive. ...</title><content type='html'>Unfortunately, your reverse isn't tail recursive. It also appends to an immutable list.&lt;BR/&gt;&lt;BR/&gt;So yes, it will be very slow.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/7876129367341777129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/7876129367341777129'/><link rel='alternate' type='text/html' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html?showComment=1214386200000#c7876129367341777129' title=''/><author><name>Alexey</name><uri>http://www.blogger.com/profile/04414745317669007614</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html' ref='tag:blogger.com,1999:blog-6800934446457898793.post-2291191240100872745' source='http://www.blogger.com/feeds/6800934446457898793/posts/default/2291191240100872745' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-194769857'/></entry><entry><id>tag:blogger.com,1999:blog-6800934446457898793.post-887680907281307210</id><published>2008-06-24T23:13:00.000-04:00</published><updated>2008-06-24T23:13:00.000-04:00</updated><title type='text'>Someone asked me in an email if the reverse functi...</title><content type='html'>Someone asked me in an email if the reverse function I demonstrated would be really slow or cause a stack overflow. This is a good question, especially coming from a traditional language like C++. However, the good news is that it will be just as fast as a for loop since functional language like ML do tail call optimizations. For more information, check out &lt;A HREF="http://blogs.msdn.com/jomo_fisher/archive/2007/09/19/adventures-in-f-tail-recursion-in-three-languages.aspx" REL="nofollow"&gt;this link&lt;/A&gt;.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/887680907281307210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/887680907281307210'/><link rel='alternate' type='text/html' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html?showComment=1214363580000#c887680907281307210' title=''/><author><name>Jeff Moser</name><uri>http://www.blogger.com/profile/16074905903060665396</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html' ref='tag:blogger.com,1999:blog-6800934446457898793.post-2291191240100872745' source='http://www.blogger.com/feeds/6800934446457898793/posts/default/2291191240100872745' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-252333216'/></entry><entry><id>tag:blogger.com,1999:blog-6800934446457898793.post-2669053665872264787</id><published>2008-06-24T22:41:00.000-04:00</published><updated>2008-06-24T22:41:00.000-04:00</updated><title type='text'>cory: Thanks! I agree, the Viewpoints guys are doi...</title><content type='html'>cory: Thanks! I agree, the Viewpoints guys are doing some awesome stuff. My hope is that even bringing a tiny fraction of their ideas to the code I work with daily would be a huge gain.&lt;BR/&gt;&lt;BR/&gt;anonymous: Nemerle definitely lookings interesting. It seems to have support for some nice Lisp-like things such as macros. However, it still seems a bit too much heavy on the syntax side to do what OMeta can do in a clear fashion. Maybe I'm missing something though?&lt;BR/&gt;&lt;BR/&gt;harry mcintyre: OMeta isn't a silver bullet, but I do think that it does pattern matching really well and could help you get going on a domain specific language quickly.&lt;BR/&gt;&lt;BR/&gt;mwatts: My hope is that as a community we can work together to get the vision of OMeta# up on .NET to continue to make steps towards the VPRI goals. &lt;BR/&gt;&lt;BR/&gt;jason: As mentioned by rektide, the ANTLR approach is the traditional way of doing things. It works, but tends to (in my experience at least), produce solutions that aren't reusable or composable. At least not nearly in the way that OMeta would allow.&lt;BR/&gt;&lt;BR/&gt;eric: Thanks for the kind words!&lt;BR/&gt;&lt;BR/&gt;anonymous: OMeta doesn't try to be LISP. However, as demonstrated by http://jarrett.cs.ucla.edu/ometa-js/#Lisp , it does make it possible to *implement* the language in roughly the half page of mathematics that McCarthy used to describe it in http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf&lt;BR/&gt;&lt;BR/&gt;I agree that a lot of cool things happened in the 1960's. As a matter of fact, OMeta's roots go back to Meta II which was developed in that era. However, it was not as fleshed out as the VPRI guys have done so. I think the OMeta vision is helping us get back to the excitement that was there in CS in the 60's.&lt;BR/&gt;&lt;BR/&gt;rektide: I hadn't heard about MetaBoo, but agree that PEG is a nice way to express it. Thanks for including the links as well. I'd like to get OMeta# to the point where you could use Boo as a host language some day. I think that way would allow the best of both worlds.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/2669053665872264787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/2669053665872264787'/><link rel='alternate' type='text/html' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html?showComment=1214361660000#c2669053665872264787' title=''/><author><name>Jeff Moser</name><uri>http://www.blogger.com/profile/16074905903060665396</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html' ref='tag:blogger.com,1999:blog-6800934446457898793.post-2291191240100872745' source='http://www.blogger.com/feeds/6800934446457898793/posts/default/2291191240100872745' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-252333216'/></entry><entry><id>tag:blogger.com,1999:blog-6800934446457898793.post-4573599195189390257</id><published>2008-06-24T12:24:00.000-04:00</published><updated>2008-06-24T12:24:00.000-04:00</updated><title type='text'>&lt;b&gt;@Jason&lt;/b&gt;, that DLR article at bitwisemag you ...</title><content type='html'>&lt;B&gt;@Jason&lt;/B&gt;, that DLR article at bitwisemag you linked uses ANTLR, like almost every other project that needs a parser on the planet.  PEGs are usually written in the language you are trying to extend.  For example, Boo uses ANTLR, and is hoping to self-host its parser by switching to a PEG implementation written in Boo.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/4573599195189390257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/4573599195189390257'/><link rel='alternate' type='text/html' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html?showComment=1214324640000#c4573599195189390257' title=''/><author><name>rektide</name><uri>http://www.blogger.com/profile/03381475657715288786</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='29' src='http://www.voodoowarez.com/bmstab.png'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html' ref='tag:blogger.com,1999:blog-6800934446457898793.post-2291191240100872745' source='http://www.blogger.com/feeds/6800934446457898793/posts/default/2291191240100872745' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-326739131'/></entry><entry><id>tag:blogger.com,1999:blog-6800934446457898793.post-3184078088192222794</id><published>2008-06-24T12:22:00.000-04:00</published><updated>2008-06-24T12:22:00.000-04:00</updated><title type='text'>Boo author Rodrigo B. De Oliveira is hard at work ...</title><content type='html'>Boo author Rodrigo B. De Oliveira is hard at work writing a PEG system for Boo (a "wrist friendly python inspired .net language"), which will then be used to re-write Boo's parser as a PEG.  Boo-written-in-boo has been a long term desire for the Boo project (MetaBoo), and PEGs will almost certainly be the tool used to make this happen.&lt;BR/&gt;&lt;BR/&gt;His initial blog entry on PEGs is at:&lt;BR/&gt;&lt;A HREF="http://blogs.codehaus.org/people/bamboo/archives/001688_towards_extensible_parsing.html" REL="nofollow"&gt;http://blogs.codehaus.org/people/bamboo/archives/001688_towards_extensible_parsing.html&lt;/A&gt;&lt;BR/&gt;And he links a pretty good paper on PEGs:&lt;BR/&gt;&lt;A HREF="http://citeseer.ist.psu.edu/643425.html" REL="nofollow"&gt;http://citeseer.ist.psu.edu/643425.html&lt;/A&gt;&lt;BR/&gt;&lt;BR/&gt;Skimmed your article; its good and I look forward to spending some real quality time with it tonight at home.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/3184078088192222794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/3184078088192222794'/><link rel='alternate' type='text/html' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html?showComment=1214324520000#c3184078088192222794' title=''/><author><name>rektide</name><uri>http://www.blogger.com/profile/03381475657715288786</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='29' src='http://www.voodoowarez.com/bmstab.png'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html' ref='tag:blogger.com,1999:blog-6800934446457898793.post-2291191240100872745' source='http://www.blogger.com/feeds/6800934446457898793/posts/default/2291191240100872745' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-326739131'/></entry><entry><id>tag:blogger.com,1999:blog-6800934446457898793.post-2640234998304267522</id><published>2008-06-24T10:10:00.000-04:00</published><updated>2008-06-24T10:10:00.000-04:00</updated><title type='text'>nice way of reinventing LISP.&lt;br&gt;&lt;br&gt;"most interes...</title><content type='html'>nice way of reinventing LISP.&lt;BR/&gt;&lt;BR/&gt;"most interesting thing happening in computer science right now" indeed, think 1960 instead.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/2640234998304267522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/2640234998304267522'/><link rel='alternate' type='text/html' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html?showComment=1214316600000#c2640234998304267522' title=''/><author><name>Anonymous</name><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html' ref='tag:blogger.com,1999:blog-6800934446457898793.post-2291191240100872745' source='http://www.blogger.com/feeds/6800934446457898793/posts/default/2291191240100872745' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-932041766'/></entry><entry><id>tag:blogger.com,1999:blog-6800934446457898793.post-1754316602345811711</id><published>2008-06-24T10:00:00.000-04:00</published><updated>2008-06-24T10:00:00.000-04:00</updated><title type='text'>That's a great analysis of the power of OMeta!  Th...</title><content type='html'>That's a great analysis of the power of OMeta!  Thanks!</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/1754316602345811711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/1754316602345811711'/><link rel='alternate' type='text/html' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html?showComment=1214316000000#c1754316602345811711' title=''/><author><name>Eric</name><uri>http://www.lispcast.com</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html' ref='tag:blogger.com,1999:blog-6800934446457898793.post-2291191240100872745' source='http://www.blogger.com/feeds/6800934446457898793/posts/default/2291191240100872745' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-594204097'/></entry><entry><id>tag:blogger.com,1999:blog-6800934446457898793.post-5797540357385813944</id><published>2008-06-24T09:35:00.000-04:00</published><updated>2008-06-24T09:35:00.000-04:00</updated><title type='text'>Immediately reminds me of:&lt;br&gt;&lt;br&gt;http://www.bitwi...</title><content type='html'>Immediately reminds me of:&lt;BR/&gt;&lt;BR/&gt;http://www.bitwisemag.com/2/DLR-Build-Your-Own-Language&lt;BR/&gt;&lt;BR/&gt;Which is using antlr to target the .NET dynamic language runtime, which makes me think you could just use OMeta# to do the same.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/5797540357385813944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/5797540357385813944'/><link rel='alternate' type='text/html' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html?showComment=1214314500000#c5797540357385813944' title=''/><author><name>Jason</name><uri>http://www.blogger.com/profile/12192541714844450590</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html' ref='tag:blogger.com,1999:blog-6800934446457898793.post-2291191240100872745' source='http://www.blogger.com/feeds/6800934446457898793/posts/default/2291191240100872745' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-308432905'/></entry><entry><id>tag:blogger.com,1999:blog-6800934446457898793.post-3691784875052242249</id><published>2008-06-24T09:26:00.000-04:00</published><updated>2008-06-24T09:26:00.000-04:00</updated><title type='text'>This is great news!  I have already downloaded the...</title><content type='html'>This is great news!  I have already downloaded the source and am looking at it now.  &lt;BR/&gt;&lt;BR/&gt;I only recently became aware of the work being done at VPRI, and like Cory, believe that this work is probably the most interesting thing happening in computer science at this time.  While we are a long way from having a full working App-to-hardware system in &lt; 20K lines of code, having SOME of that technology available on .NET will be very nice. &lt;BR/&gt;&lt;BR/&gt;To Anonymous and the comment about nemerle: nemerle is a very nice language but the goal of OMeta and the larger VPRI effort is to move the entire computing stack to a higher level of abstraction than is available with current languages, not just extend them with new syntax although that is a side-effect.  Take a look at some of the documents available at http://www.vpri.org/html/writings.htm like http://www.vpri.org/pdf/steps_TR-2007-008.pdf where they describe a TCP/IP stack implemented in less than 200 lines of code, or a version of Prolog in about 90 lines of code.  The ability to express solutions in such very different problem domains in so few lines of code is not something that can be done in any other language that I am aware of.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/3691784875052242249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/3691784875052242249'/><link rel='alternate' type='text/html' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html?showComment=1214313960000#c3691784875052242249' title=''/><author><name>mwatts</name><uri>http://www.blogger.com/profile/03945665994267024470</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html' ref='tag:blogger.com,1999:blog-6800934446457898793.post-2291191240100872745' source='http://www.blogger.com/feeds/6800934446457898793/posts/default/2291191240100872745' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1659950772'/></entry><entry><id>tag:blogger.com,1999:blog-6800934446457898793.post-5181678588063335000</id><published>2008-06-24T04:36:00.000-04:00</published><updated>2008-06-24T04:36:00.000-04:00</updated><title type='text'>This looks awesome. I've recently implemented a pa...</title><content type='html'>This looks awesome. I've recently implemented a parser for allowing users to control my application using sms, and I have ended up with an insane mishmash of extension methods and classes, when all I wanted was to feed a nicely defined grammar into something.&lt;BR/&gt;&lt;BR/&gt;While I was doing it, I realised that by writing the requirements out in a structured version of english, all the information required to generate the c# for my application layer existed, just I didn't have a tool to do the conversion. This looks like it could be the tool.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/5181678588063335000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/5181678588063335000'/><link rel='alternate' type='text/html' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html?showComment=1214296560000#c5181678588063335000' title=''/><author><name>Harry McIntyre</name><uri>http://www.blogger.com/profile/16748782353710296964</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html' ref='tag:blogger.com,1999:blog-6800934446457898793.post-2291191240100872745' source='http://www.blogger.com/feeds/6800934446457898793/posts/default/2291191240100872745' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1570183639'/></entry><entry><id>tag:blogger.com,1999:blog-6800934446457898793.post-5176067354569652668</id><published>2008-06-24T03:44:00.000-04:00</published><updated>2008-06-24T03:44:00.000-04:00</updated><title type='text'>look at &lt;br&gt;&lt;br&gt;http://nemerle.org&lt;br&gt;&lt;br&gt;http://n...</title><content type='html'>look at &lt;BR/&gt;&lt;BR/&gt;http://nemerle.org&lt;BR/&gt;&lt;BR/&gt;http://nemerle.org/Macros_tutorial&lt;BR/&gt;&lt;BR/&gt;for exmaple, adding "for" operator to language&lt;BR/&gt;--------------------&lt;BR/&gt;macro for (init, cond, change, body)&lt;BR/&gt;{&lt;BR/&gt;  &lt;[ &lt;BR/&gt;    $init;&lt;BR/&gt;    def loop () : void {&lt;BR/&gt;      if ($cond) { $body; $change; loop() } &lt;BR/&gt;      else ()&lt;BR/&gt;    };&lt;BR/&gt;    loop ()&lt;BR/&gt;  ]&gt;&lt;BR/&gt;}&lt;BR/&gt;&lt;BR/&gt;-----------&lt;BR/&gt;using it&lt;BR/&gt;&lt;BR/&gt;for (mutable i = 0, i &lt; 10, i++, printf ("%d", i))</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/5176067354569652668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6800934446457898793/2291191240100872745/comments/default/5176067354569652668'/><link rel='alternate' type='text/html' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html?showComment=1214293440000#c5176067354569652668' title=''/><author><name>Anonymous</name><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html' ref='tag:blogger.com,1999:blog-6800934446457898793.post-2291191240100872745' source='http://www.blogger.com/feeds/6800934446457898793/posts/default/2291191240100872745' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1750494841'/></entry></feed>
