<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Programming Languages on Bulrush Labs — Richard Tibbetts</title><link>https://bulrushlabs.com/articles/tag/programming-languages/</link><description>Recent content in Programming Languages on Bulrush Labs — Richard Tibbetts</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sun, 10 Jan 2010 23:52:00 +0000</lastBuildDate><atom:link href="https://bulrushlabs.com/articles/tag/programming-languages/index.xml" rel="self" type="application/rss+xml"/><item><title>Project Euler, MIT Mystery Hunt Edition</title><link>https://bulrushlabs.com/articles/2010/01/10/project-euler-mit-mystery-hunt-edition/</link><pubDate>Sun, 10 Jan 2010 23:52:00 +0000</pubDate><guid>https://bulrushlabs.com/articles/2010/01/10/project-euler-mit-mystery-hunt-edition/</guid><description>&lt;p&gt;The &lt;a href="http://www.mit.edu/~puzzle/"&gt;MIT Mystery Hunt&lt;/a&gt; starts this Friday at noon, and I’ll be participating seriously for about my 10th year. In the hunt, teams solve a collection of puzzles to discover the location of a gold coin hidden somewhere on campus. The puzzles may be numerous (sometimes over 100), are generally provided without instructions (except when they are provided with &lt;a href="http://members.bellatlantic.net/~devjoe/dk2/dk2.html"&gt;painfully explicit instructions&lt;/a&gt;), and the overall structure of the hunt is also unknown at the start. Hunt is nearly always finished before Monday, but during the 60 hours starting Friday at noon, many highly capable teams, some with several dozen members, will try their hardest to solve some very challenging puzzles.&lt;/p&gt;</description></item><item><title>kdb+ now available for free download</title><link>https://bulrushlabs.com/articles/2008/04/12/kdb-now-available-for-free-download/</link><pubDate>Sat, 12 Apr 2008 10:05:00 +0000</pubDate><guid>https://bulrushlabs.com/articles/2008/04/12/kdb-now-available-for-free-download/</guid><description>&lt;p&gt;If you’ve talked to me about programming languages and Wall Street in the last 4 years, I’ve probably mentioned &lt;a href="http://kx.com/"&gt;kx&lt;/a&gt;. This is a company which makes a combination programming environment and database based on a language called q which is derived from &lt;a href="https://en.wikipedia.org/wiki/APL_(programming_language)"&gt;APL&lt;/a&gt;. (Yes, APL, the language invented in 1957 before there was a computer to run it on.) And this environment is in turn used by many of the top quants on Wall Street (and other parts of the financial world) for both research and production systems. Becoming a kx programmer is a good way to double your salary and quadruple your job security.&lt;/p&gt;</description></item><item><title>OOPSLA 2007: New Ideas, Good Quotes, and Cynical Self-Satisfaction</title><link>https://bulrushlabs.com/articles/2007/10/28/oopsla-2007-new-ideas-good-quotes-and-cynical-self-satisfaction/</link><pubDate>Sun, 28 Oct 2007 08:26:00 +0000</pubDate><guid>https://bulrushlabs.com/articles/2007/10/28/oopsla-2007-new-ideas-good-quotes-and-cynical-self-satisfaction/</guid><description>&lt;p&gt;I’m still in Montreal, and still thinking about a lot of what I saw and learned at OOSPLA. But I wanted to jot down some links while the cool things were still fresh in my mind. So here is a short set of links worth following that I picked up while at OOPSLA.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;There was of course the &lt;a href="http://www.codefarms.com/OOPSLA07/workshop/index.htm"&gt;workshop on associations&lt;/a&gt; as a first class language construct, which I already blogged about &lt;a href="http://innocuous.org/articles/2007/10/23/oopsla-2007-the-popularity-cycle-of-graphical-tools-uml-and-libraries-of-associations-not-the-workshop-i-expected"&gt;he&lt;/a&gt;&lt;a href="http://innocuous.org/articles/2007/10/23/oopsla-2007-the-popularity-cycle-of-graphical-tools-uml-and-libraries-of-associations-not-the-workshop-i-expected"&gt;r&lt;/a&gt;&lt;a href="http://innocuous.org/articles/2007/10/23/oopsla-2007-the-popularity-cycle-of-graphical-tools-uml-and-libraries-of-associations-not-the-workshop-i-expected"&gt;e&lt;/a&gt;.&lt;/li&gt;&#10;&lt;li&gt;As part of that, Jiri Soukup talked about his project &lt;a href="http://incode.sourceforge.net/"&gt;IN_CODE&lt;/a&gt; and in particular his &lt;a href="http://incode.sourceforge.net/laytutor.htm"&gt;UML Layout&lt;/a&gt; tool, which attempts to provide sufficiently good graphical layout of UML that the machine-generated layout can be the only layout. The theme of graphical languages with a single canonical display was recurring. I picked it up again from &lt;a href="http://alarmingdevelopment.org/"&gt;Jonathan Edwards&lt;/a&gt; (author of &lt;a href="http://subtextual.org/"&gt;Subtext&lt;/a&gt;), who has been working on a canonical visual representation for conditional constructs, and presented it as &lt;a href="http://www.oopsla.org/oopsla2007/index.php?page=sub/&amp;amp;id=6"&gt;No Ifs, Ands, or Buts&lt;/a&gt;. While I missed the talk, I like the ideas.&lt;/li&gt;&#10;&lt;li&gt;I saw a demo of &lt;a href="http://www.oopsla.org/oopsla2007/index.php?page=sub/&amp;amp;id=315"&gt;AmbientTalk/2&lt;/a&gt;, which is a cute language that makes event-driven programming the norm. The big idea is that all objects belong to a specific thread of control (an actor), and their methods can only be executed in that thread. At method call sites the caller explicitly calls either synchronously (with a ‘.’ operator) or asynchronously (with a ‘&amp;lt;-’ operator). These ideas may have originated in earlier languages with which I was not familiar (&lt;a href="https://en.wikipedia.org/wiki/E_programming_language"&gt;E&lt;/a&gt; was mentioned). This definitely buys a chunk of attractive simplicity. However, the demo failed to present any complicated synchronization patterns. I’m forced to wonder if we need better benchmarks for the expressivity of parallel languages. Building an IM system just isn’t very hard.&lt;/li&gt;&#10;&lt;li&gt;Erik Meijer’s &lt;a href="http://www.oopsla.org/oopsla2007/index.php?page=sub/&amp;amp;id=4"&gt;Confessions of a Used Programming Languages Salesman&lt;/a&gt; was pretty clever, mostly talking about his experience trying to bring fire down off the mount to Visual Basic programmers. Computer Scientists need regular injections of reality when it comes to things like industrial adoption (usually non-adoption) of their ideas. It was also one of several talks at OOPSLA about &lt;a href="https://en.wikipedia.org/wiki/Linq"&gt;LINQ&lt;/a&gt; and &lt;a href="https://msdn.microsoft.com/msdnmag/issues/07/06/CSharp30/"&gt;how awesome C# 3.0 is&lt;/a&gt;. I’m definitely envious of some of the features of C#, and I hope Java catches up soon (1.7 is looking pretty good in some ways, but certainly not all). Erik talked a lot about the extension points added to C#, but I’m at the moment unable to find anything on the web that tells me how to add LINQ-style keywords to the language for arbitrary languages, like say an extended version of SQL.&lt;/li&gt;&#10;&lt;li&gt;The &lt;a href="http://www.oopsla.org/oopsla2007/index.php?page=program/panels/"&gt;Domain Specific Languages panel&lt;/a&gt; was entertaining, but neither conclusive nor particularly inspired. It was the first place the phrase &lt;a href="https://en.wikipedia.org/wiki/No_silver_bullet"&gt;“Silver Bullet”&lt;/a&gt; came up, but far from the last. Unfortunately (and ironically) everyone seems to have a different idea of what a Domain Specific Language (DSL) is, leading to wildly different concerns. More on this in a future post.&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="http://lamp.epfl.ch/~mcdirmid/"&gt;Sean McDirmid&lt;/a&gt;’s talk and live coding demo of &lt;a href="http://lamp.epfl.ch/~mcdirmid/papers/mcdirmid06superglue.pdf"&gt;SuperGlue&lt;/a&gt; was the most impressive new thing I saw at the show. SuperGlue is an event driven language and a live programming environment. As you edit programs (in Eclipse, of course) the program is continuously executed and re-executed. Sean built up a game of Pac-man, Julia-Child-style. As each new block of code was added to the program, the game gained new behavior. Even, thanks in part to eclipse, responding to typing successive characters of a numeric constant, like “330″. I really hope that he makes his code, or at least videos, available. Unfortunately, I’m afraid that Sean’s demonstration and discussion of the benefits of live programming overshadowed his more theoretical contribution of object-oriented signalling. His paper from ECOOP 2006, &lt;a href="http://lamp.epfl.ch/~mcdirmid/papers/mcdirmid06superglue.pdf"&gt;SuperGlue: Component Programming with Object-oriented Signals&lt;/a&gt; may discuss that in more detail. Sean is unlikely to keep working on SuperGlue, which is implemented in Scala on Eclipse, as he is going to work for Microsoft.&lt;/li&gt;&#10;&lt;li&gt;Sharing the stage with Sean, linked in the minds of the organizers because both talks had “live” in their title, was &lt;a href="http://www.oopsla.org/oopsla2007/index.php?page=sub/&amp;amp;id=9"&gt;Living in the Comfort Zone&lt;/a&gt;, which proposes restricting program inputs using a “rectifier” in order to avoid exposing programs to inputs that, while legal, might be unexpected and trigger bugs. Interesting idea.&lt;/li&gt;&#10;&lt;li&gt;The Tuesday night performance of &lt;a href="http://www.oopsla.org/oopsla2007/index.php?page=sub/&amp;amp;id=267"&gt;50 in 50 by Guy Steele and Dick Gabriel&lt;/a&gt; was indescribably awesome. I expect a video, and will post a link when it becomes available. Various people compared it to Steele’s 1998 performance-essay &lt;a href="http://citeseer.ist.psu.edu/steele99growing.html"&gt;Growing a Language&lt;/a&gt;, which I had not previously seen and which I can now recommend (you may not understand what he is getting at until page 4).&lt;/li&gt;&#10;&lt;li&gt;Tony Kay presented &lt;a href="http://www.oopsla.org/oopsla2007/index.php?page=sub/&amp;amp;id=17"&gt;a way to punctuate transactional-memory transactions to make them nest&lt;/a&gt;, which just further convinced me that transactional memory is far from the solution to the difficulty of threaded programming. Their model might be better, but it is at best a patch which solves only some of the problems caused by an insufficient underlying abstraction.&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="http://www.oopsla.org/oopsla2007/index.php?page=sub/&amp;amp;id=41"&gt;StreamFlex&lt;/a&gt; was definitely interesting. Inspired by &lt;a href="http://www.cag.csail.mit.edu/streamit/"&gt;StreamIT&lt;/a&gt; and other stream processing work, it provides an events-and-operators model not unlike &lt;a href="http://www.cs.brown.edu/research/aurora/"&gt;Aurora&lt;/a&gt; (the prototype for &lt;a href="http://www.streambase.com/"&gt;StreamBase&lt;/a&gt;), where the operators are kernels of Java code. The main contribution, to me, was the approach to real-time semantics. They instrumented their virtual machine to provide some simple transactional memory features, and then use them to assure real-time performance of the real-time thread. All method calls into objects shared with the real-time thread are logged using transactional memory. In any conflict between the real-time thread and another thread, the transaction is aborted for the non-real-time thread. However, to make this work they introduce a somewhat complicated object-ownership system, enforced by compile-time typechecking. Combining the real-time approach with the object ownership of AmbientTalk I mentioned above might be interesting.&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="http://www.mm.informatik.tu-darmstadt.de/staff/kuehne/"&gt;Thomas Kuehne&lt;/a&gt; tried to answer the question &lt;a href="http://www.oopsla.org/oopsla2007/index.php?page=sub/&amp;amp;id=36"&gt;Can Programming be Liberated from the Two Level Style?&lt;/a&gt;, but I remained unconvinced. The two level style means classes and objects. In many programs, the &lt;a href="http://www.ksc.com/article3.htm"&gt;“item-description pattern”&lt;/a&gt; is used to allow a richer set of “is-a” relationships than the class hierarchy generally affords. While I support the idea of &lt;a href="http://c2.com/cgi/wiki?AreDesignPatternsMissingLanguageFeatures"&gt;turning design patterns into language features&lt;/a&gt;, the mechanics of DeepJava failed to inspire me with a desire to teach them to the average 6.170 student. Inheritance is tricky enough without meta-inheritance.&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="http://www.oopsla.org/oopsla2007/index.php?page=sub/&amp;amp;id=11"&gt;No Silver Bullet Reloaded&lt;/a&gt; was the Panel Of The Stars at OOPSLA, with Fred Brooks, David Parnas, and other panelists who would have seemed famous in other company. Martin Fowler, in particularly, put on a fabulous performance as The Werewolf (who spent much of his time gloating). The forgone conclusion was that no, there had been no successful silver bullet in the 10 years since Mythical Man Month was updated. As for discussion of what we should do about it, the general idea was that we should do all those good things software engineering pundits have been telling us for years, and that we should make sure to employ smart people. Interestingly, panelists from industry were the ones pushing for employing only smart people, which seems like an ineffective strategy when you are trying to develop software in the large at a company like Cisco. The attitude of cynical self-satisfaction (“industry just needs to do what we already told them to do, which they will never do”) seemed distressingly pervasive at OOPSLA this year.&lt;/li&gt;&#10;&lt;li&gt;I caught the end of a talk by &lt;a href="https://en.wikipedia.org/wiki/John_McCarthy_%28computer_scientist%29"&gt;John McCarthy&lt;/a&gt; about &lt;a href="http://www-formal.stanford.edu/jmc/elephant/elephant.html"&gt;Elephant 2000&lt;/a&gt;, a new language which he has been developing for over a decade. I didn’t really follow his description of Elephant, and after talking to others about it I think it is ill conceived. The second question was, roughly, “Could you talk about your experience inventing LISP instead?”. McCarthy seemed happy to do that, and what followed was 30 minutes of entertaining anecdotes about early computing.&lt;/li&gt;&#10;&lt;li&gt;There were a number of interesting projects presented only on posters at the conference. &lt;a href="http://www.sable.mcgill.ca/~cpicke/"&gt;Chris Pickett&lt;/a&gt; of McGill presented &lt;a href="http://www.sable.mcgill.ca/~cpicke/papers/pickett-07-software-SRC-abstract.pdf"&gt;Software Speculative Multithreading for Java&lt;/a&gt;, which not only contained several interesting ideas, but was the most interactive poster I’ve seen (&lt;a href="http://www.sable.mcgill.ca/~cpicke/papers/pickett-07-software-SRC-poster.jpg"&gt;photo here&lt;/a&gt;), being made of movable felt pieces that could be used to talk through demonstrations. The general idea was that at each method call site, come up with a result predictor, and spawn a speculation thread that will continue the computation as if that result had been returned. Speculation can be running several levels deep at a time. This required significant VM modification, which he is now turning into a library so that it can be added to the IBM JVM. There is also a lot of work to be done on heuristics for choosing call sites for speculation, and choosing predictors.&lt;/li&gt;&#10;&lt;li&gt;Talking to people about startups versus large companies, I got an interesting anecdote from someone involved in VoIP at Nortel: In their estimation, it takes them 2 years from project start to get a product into the marketplace, while it takes their startup competitors only 1 year. However, after 2 years they have a product which meets the needs of their customer base, while it takes the startup 3.5 years. Makes me wonder what these constants look like in other product areas.&lt;/li&gt;&#10;&lt;li&gt;I attended the &lt;a href="http://www.seaside.st/"&gt;Seaside&lt;/a&gt; &lt;a href="https://en.wikipedia.org/wiki/Birds_of_a_Feather_%28computing%29"&gt;BoF&lt;/a&gt;. I find a lot of the Seaside technology very interesting, but as befits their roots in the Smalltalk community, they have a lot of difficulty marketing themselves. I ended up serving as a resident heretic, which I hope was helpful, as their main topic of discussion was how to make Seaside adoption as easy as Ruby on Rails adoption. My heresies included “What do you mean I have to use a special smalltalk editor instead of emacs?”, “Are continuations really scalable? Why can’t I get a straight answer?” and “How am I supposed to choose a runtime/database/editor/etc when I don’t know anything about Smalltalk yet?” This turned into some extensive discussions about the adoption curve of destabilizing development tools, which I will try to write up later.&lt;/li&gt;&#10;&lt;li&gt;I had a slow morning on Thursday and missed &lt;a href="http://www.oopsla.org/oopsla2007/index.php?page=sub/&amp;amp;id=265"&gt;Context, Perspective and Programs&lt;/a&gt;, which for many people was something of a religious (or drug-induced) experience. That’s what I get for not reading speaker bios in addition to abstracts. Hopefully there will be a video.&lt;/li&gt;&#10;&lt;li&gt;I sat in on a talk titled &lt;a href="http://www.oopsla.org/oopsla2007/index.php?page=sub/&amp;amp;id=341"&gt;Neovictorian Computing&lt;/a&gt;, which had a lot of good quotes, but didn’t say a whole lot. The best quote, which reflected a lot of what went on at OOPSLA, was &lt;em&gt;“The pedagogy of software engineering is almost entirely about guilt.”&lt;/em&gt; The speaker is the creator of &lt;a href="http://www.eastgate.com/Tinderbox/"&gt;Tinderbox&lt;/a&gt;, a tool for keeping personal notes. The thrust of the talk was that we need to empower our users to be craftspeople, and to produce small software systems that meet their own unique needs. Tinderbox, as described in the talk, seemed potentially the right system for my contact management needs (I’ve been unsatisfied with all off the shelf contact managers). Unfortunately, I found it difficult to use and not nearly as interesting as the talk had made it seem. Maybe it is the best we can do, when targeting end user programmers (the tool is used mostly by authors to manage book notes), but I would hope we could do better.&lt;/li&gt;&#10;&lt;li&gt;I had a couple of talks with Canadians about how their country could benefit from more startups. Unfortunately, most encouragement of startups seems to be government funding, which I think is fundamentally flawed. More on this later.&lt;/li&gt;&#10;&lt;li&gt;The &lt;a href="http://www.oopsla.org/oopsla2007/index.php?page=sub/&amp;amp;id=342"&gt;final talk of OOPSLA was Brian Foote&lt;/a&gt;, revisiting his paper &lt;a href="https://en.wikipedia.org/wiki/Big_ball_of_mud"&gt;Big Ball of Mud&lt;/a&gt;, about the commonness of evolved software systems. He is a very good speaker, and it was an entertaining talk. His focus was on finding the right metaphors to communicate how something is working. My favorite was “sustainable development”, suggesting that many deadline-driven software projects take unsustainable shortcuts, much like some farmers in the Amazon, prematurely depleting a programs maintainability. But he was also quick to point out that some techniques that software engineering pundits disdain, like cut and paste, are a fundamental part of nearly all software development, and that when you let reuse become the overriding concern, you can end up with something highly inefficient, like the Space Shuttle (the reuse of the machine, not the software, in that case). He also described at length about how we are losing the “War on Bugs”, how attempts to crack down on domestic production have merely driven bug production overseas. Programmers start with “gateway bugs” like unchecked error codes and undocumented exceptions, and move on to harder bugs like cross cutting dependencies and threading. Foote went on like that for a while. I may just pull the quotes out of my notes and post them separately.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;That’s it for my train of consciousness notes from OOPSLA 2007. It inspired a lot of thoughts, so you may be hearing more from me on some of these topics.&lt;/p&gt;</description></item><item><title>OOPSLA 2007: “The Popularity Cycle of Graphical Tools, UML, and Libraries of Associations” – not the workshop I expected</title><link>https://bulrushlabs.com/articles/2007/10/23/oopsla-2007-the-popularity-cycle-of-graphical-tools-uml-and-libraries-of-associations-not-the-workshop-i-expected/</link><pubDate>Tue, 23 Oct 2007 09:59:00 +0000</pubDate><guid>https://bulrushlabs.com/articles/2007/10/23/oopsla-2007-the-popularity-cycle-of-graphical-tools-uml-and-libraries-of-associations-not-the-workshop-i-expected/</guid><description>&lt;p&gt;Today was my first day at &lt;a href="http://www.oopsla.org/oopsla2007/index.php?page=home/"&gt;OOPSLA 2007&lt;/a&gt; in Montreal. After a brief exposure to the amazing “Underground City” (really a shopping mall that is infecting downtown like a cancer), I crashed a workshop for which I had not signed up, and had a completely different experience than I had planned at &lt;a href="http://www.codefarms.com/OOPSLA07/workshop/index.htm"&gt;The Popularity Cycle of Graphical Tools, UML, and Libraries of Associations&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;The title implied it was the workshop about graphical programming languages and tools. As an author of a graphical programming language, &lt;a href="http://www.streambase.com/developers/docs/latest/concepts/canvas.html"&gt;StreamBase StreamSQL EventFlow&lt;/a&gt;, it seemed like the place to be. My plan had been to pick up some contacts in the graphical languages space, and learn about what has come before. However, the participants (with one vocal exception) had already accepted as a given that UML would eventually decline in popularity, to be replaced by a and they were focused on what would come next.&lt;/p&gt;</description></item><item><title>Transactional Memory Not Solution To All Problems</title><link>https://bulrushlabs.com/articles/2006/12/01/transactional-memory-not-solution-to-all-problems/</link><pubDate>Fri, 01 Dec 2006 20:10:00 +0000</pubDate><guid>https://bulrushlabs.com/articles/2006/12/01/transactional-memory-not-solution-to-all-problems/</guid><description>&lt;p&gt;I was at MIT today and so I ended up going to an invited talk on computer architecture, &lt;a href="https://www.csail.mit.edu/events/eventcalendar/calendar.php?show=event&amp;amp;id=1298"&gt;Subtle Semantics and Unrestricted Implementation of Transactional Memory&lt;/a&gt;. &lt;a href="https://en.wikipedia.org/wiki/Transactional_memory"&gt;Transactional Memory&lt;/a&gt; is a very hot topic in systems and architecture. It is perceived to be a better model for programmers, so language designers like it. And there are a variety of options for pure-software and hardware-assisted implementations. And because it enables optimistic concurrency control, transactional memory can help make programs faster and more scalable on new multi-core architectures. There is every reason to believe that processor vendors will begin including some form of hardware support for transactional memory.&lt;/p&gt;</description></item></channel></rss>