<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://lambda-the-ultimate.org">
<channel>
 <title>Lambda the Ultimate - Software Engineering</title>
 <link>http://lambda-the-ultimate.org/taxonomy/term/17/0</link>
 <description>Programming language issues related to SE. For example: module systems, genericity etc.</description>
 <language>en</language>
<item>
 <title>Effective Scala</title>
 <link>http://lambda-the-ultimate.org/node/4446</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://twitter.github.com/effectivescala/&quot;&gt;It&#039;s&lt;/a&gt; from Twitter, &lt;a href=&quot;http://twitter.github.com/effectivescala/&quot;&gt;It&#039;s&lt;/a&gt; open source, &lt;a href=&quot;http://twitter.github.com/effectivescala/&quot;&gt;It&#039;s&lt;/a&gt; about Scala. What&#039;s not to like?&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/32">Scala</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/17">Software Engineering</category>
 <pubDate>Tue, 07 Feb 2012 13:41:45 -0500</pubDate>
</item>
<item>
 <title>Seven Myths of Formal Methods Revisited</title>
 <link>http://lambda-the-ultimate.org/node/4425</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.24.5280&quot;&gt;Software Engineering with Formal Methods: The Development of a Storm Surge Barrier Control System - Seven Myths of Formal Methods Revisited (2001)&lt;/a&gt;, by Jan Tretmans, Klaas Wijbrans, Michel Chaudron:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;Bos is the software system which controls and operates the storm surge barrier in the Nieuwe Waterweg near Rotterdam. It is a complex, safety-critical system of average size, which was developed by CMG Den Haag B.V., commissioned by Rijkswaterstaat (RWS) – the Dutch Ministry of Transport, Public Works and Water Management. It was completed in October 1998 on time and within budget.&lt;/p&gt;
&lt;p &gt;CMG used formal methods in the development of the Bos software. This paper discusses the experiences obtained from their use. Some people claim that the use of formal methods helps in developing correct and reliable software, others claim that formal methods are useless and unworkable. Some of these claims have almost become myths. A number of these myths are described and discussed in a famous article: Seven Myths of Formal Methods [Hal90]. The experiences obtained from using formal methods for the development of Bos will be discussed on the basis of this article. We will discuss to what extent these myths are true for the Bos project.&lt;/p&gt;
&lt;p &gt;The data for this survey were collected by means of interviews with software engineers working on the Bos project. These include the project manager, designers, implementers and testers, people who participated from the beginning in 1995 until the end in 1998 as well as engineers who only participated in the implementation phase, and engineers with and without previous, large-scale software engineering experience.&lt;/p&gt;
&lt;p &gt;This paper concentrates on the experiences of the software engineers with formal methods. These experiences, placed in the context of the seven myths, are described in section 3. This paper does not discuss technical details about the particular formal methods used or the way they were used; see [Kar97, Kar98] for these aspects. Moreover, formal methods were only one technique used in the development of Bos. The overall engineering approach and the way diﬀerent methods and techniques were combined to assure the required safetycritical quality, are described [WBG98, WB98]. Testing in Bos  is described in more detail in [GWT98], while [CTW99] will give a more systematic analysis of the results of the interviews&lt;br &gt;
with the developers.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Discussion of formal methods and verification has come up &lt;a href=&quot;http://lambda-the-ultimate.org/node/2783&quot;&gt;a few times here on LtU&lt;/a&gt;. In line with the recent discussions on the need for more empirical data in our field, this was an interesting case study on the use of formal methods. The seven myths of formal methods are reviewed in light of a real project:&lt;/p&gt;
&lt;ol &gt;
&lt;li &gt;Myth 1: Formal methods can guarantee that software is perfect&lt;/li&gt;
&lt;li &gt;Myth 2: Formal methods are all about program proving&lt;/li&gt;
&lt;li &gt;Myth 3: Formal methods are only useful for safety-critical system&lt;/li&gt;
&lt;li &gt;Myth 4: Formal methods require highly trained mathematicians&lt;/li&gt;
&lt;li &gt;Myth 5: Formal methods increase the cost of developmen&lt;/li&gt;
&lt;li &gt;Myth 6: Formal methods are unacceptable to users&lt;/li&gt;
&lt;li &gt;Myth 7: Formal methods are not used on real, large-scale software&lt;/li&gt;
&lt;/ol&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/17">Software Engineering</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/19">Theory</category>
 <pubDate>Tue, 27 Dec 2011 11:19:15 -0500</pubDate>
</item>
<item>
 <title>Extensible Programming with First-Class Cases</title>
 <link>http://lambda-the-ultimate.org/node/4394</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://ttic.uchicago.edu/~wchae/files/icfp06.pdf&quot;&gt;Extensible Programming with First-Class Cases&lt;/a&gt;, by Matthias Blume, Umut A. Acar, and Wonseok Chae:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;We present language mechanisms for polymorphic, extensible records and their exact dual, polymorphic sums with extensible first-class cases. These features make it possible to easily extend existing code with new cases. In fact, such extensions do not require any changes to code that adheres to a particular programming style. Using that style, individual extensions can be written independently and later be composed to form larger components. These language mechanisms provide a solution to the expression problem.&lt;/p&gt;
&lt;p &gt;We study the proposed mechanisms in the context of an implicitly typed, purely functional language PolyR. We give a type system for the language and provide rules for a 2-phase transformation: first into an explicitly typed λ-calculus with record polymorphism, and finally to efficient index-passing code. The first phase eliminates sums and cases by taking advantage of the duality with records.&lt;/p&gt;
&lt;p &gt;We implement a version of PolyR extended with imperative features and pattern matching—we call this language MLPolyR. Programs in MLPolyR require no type annotations—the implementation employs a reconstruction algorithm to infer all types. The compiler generates machine code (currently for PowerPC) and optimizes the representation of sums by eliminating closures generated by the dual construction.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;This is an elegant solution to the expression problem for languages with pattern matching. This paper &lt;a href=&quot;http://lambda-the-ultimate.org/node/3338&quot;&gt;was posted twice in LtU comments&lt;/a&gt;, but it definitely deserves its own story. Previous solutions to the exression problem are rather more involved, like &lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.38.8079&quot;&gt;Garrigue&#039;s use of recursion and polymorphic variants&lt;/a&gt;, because they lack support for extensible records which makes this solution so elegant.&lt;/p&gt;
&lt;p &gt;Extensible records and first-class cases unify object-oriented and functional paradigms on a deeper level, since they enable first-class messages to be directly encoded. Add a sensible system for dynamics, and I argue you have most of the power people claim of dynamic languages without sacrificing the safety of static typing.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/17">Software Engineering</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/19">Theory</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Sun, 30 Oct 2011 17:41:17 -0400</pubDate>
</item>
<item>
 <title>Microsoft Roslyn Project whitepaper</title>
 <link>http://lambda-the-ultimate.org/node/4390</link>
 <description>&lt;p &gt;Microsoft has recently detailed their &quot;Compiler as a Service&quot; initiative in a whitepaper.  The whitepaper calls the project &lt;a href=&quot;http://www.microsoft.com/download/en/details.aspx?id=27744&quot;&gt;Roslyn&lt;/a&gt;.&lt;/p&gt;
&lt;p &gt;Related, IBM sponsors the Eclipse IMP project for its X10 language (and the X10DT).  IMP is also used for Eelco Visser&#039;s Spoofax IDE and WebDSL IDE.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/17">Software Engineering</category>
 <pubDate>Thu, 27 Oct 2011 13:00:29 -0400</pubDate>
</item>
<item>
 <title>Speciﬁcation and Veriﬁcation: The Spec# Experience</title>
 <link>http://lambda-the-ultimate.org/node/4285</link>
 <description>&lt;p &gt;&lt;i &gt;Mike Barnett, Manuel Fähndrich, K. Rustan M. Leino, Peter Müller, Wolfram Schulte, and Herman Venter, &lt;a href=&quot;http://research.microsoft.com/en-us/um/people/leino/papers/krml196.pdf&quot;&gt;Speciﬁcation and Veriﬁcation: The Spec# Experience&quot;&lt;/a&gt; Preprint of an article appearing in the June 2011 CACM.&lt;/i&gt;&lt;/p&gt;
&lt;p &gt;CACM tagline: &lt;b &gt;Can a programming language really help programmers write better programs?&lt;/b&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;Spec# is a programming system that facilitates the development of correct software. The Spec# language extends C# with contracts that allow programmers to express their design intent in the code. The Spec# tool suite consists of a compiler that emits run-time checks for contracts, a static program veriﬁer that attempts to mathematically prove the correctness of programs, and an integration into the Visual Studio development environment. Spec# shows how contracts and veriﬁers can be integrated seamlessly into the software development process. This paper reﬂects on the six-year history of the Spec# project, scientiﬁc contributions it has made, remaining challenges for tools that seek to establish program correctness, and prospects of incorporating veriﬁcation into everyday software engineering.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Spec# is, in some ways, quite similar to &lt;a href=&quot;http://www.eecs.ucf.edu/~leavens/JML/&quot;&gt;JML&lt;/a&gt;+&lt;a href=&quot;http://kind.ucd.ie/products/opensource/ESCJava2/&quot;&gt;ESC/Java2&lt;/a&gt;. But Spec# is a language rather than a set of annotations, which allows it to incorporate features such as a non-null type system and a very tight integration with the IDE.&lt;/p&gt;
&lt;p &gt;Spec# was &lt;a href=&quot;http://lambda-the-ultimate.org/node/686&quot;&gt;previously mentioned&lt;/a&gt; on LtU back in 2005. &lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/14">OOP</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/17">Software Engineering</category>
 <pubDate>Wed, 01 Jun 2011 02:11:00 -0400</pubDate>
</item>
<item>
 <title>Passing a Language through the Eye of a Needle </title>
 <link>http://lambda-the-ultimate.org/node/4277</link>
 <description>&lt;p &gt;&lt;i &gt;Roberto Ierusalimschy, Luiz Henrique de Figueiredo, and Waldemar Celes, &lt;a href=&quot;http://queue.acm.org/detail.cfm?id=1983083&quot;&gt;&quot;Passing a Language through the Eye of a Needle: How the embeddability of Lua impacted its design&quot;&lt;/a&gt;, ACM Queue vol. 9, no. 5, May 2011.&lt;/i&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;A key feature of a scripting language is its ability to integrate with a system language. This integration takes two main forms: extending and embedding. In the first form, you extend the scripting language with libraries and functions written in the system language and write your main program in the scripting language. In the second form, you embed the scripting language in a host program (written in the system language) so that the host can run scripts and call functions defined in the scripts; the main program is the host program.&lt;br &gt;
...&lt;br &gt;
In this article we discuss how embeddability can impact the design of a language, and in particular how it impacted the design of Lua from day one. Lua is a scripting language with a particularly strong emphasis on embeddability. It has been embedded in a wide range of applications and is a leading language for scripting games.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;An interesting discussion of some of the considerations that go into supporting embeddability. The design of a language clearly has an influence over the API it supports, but conversely the design of an API can have a lot of influence over the design of the language.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/7">History</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/17">Software Engineering</category>
 <pubDate>Wed, 18 May 2011 01:55:55 -0400</pubDate>
</item>
<item>
 <title>Asynchronous Proof Processing with Isabelle/Scala and Isabelle/jEdit</title>
 <link>http://lambda-the-ultimate.org/node/4260</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://www4.in.tum.de/~wenzelm/papers/async-isabelle-scala.pdf&quot;&gt;Asynchronous Proof Processing with Isabelle/Scala and Isabelle/jEdit&lt;/a&gt;. Makarius Wenzel, UITP 2010. &lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
After several decades, most proof assistants are still centered around TTY-based interaction in a tight read-eval-print loop. Even well-known Emacs modes for such provers follow this synchronous model based on single commands with immediate response, meaning that the editor waits for the prover after each command. There have been some attempts to re-implement prover interfaces in big IDE frameworks, while keeping the old interaction model. Can we do better than that? &lt;/p&gt;
&lt;p &gt;Ten years ago, the Isabelle/Isar proof language already emphasized the idea of proof document (structured text) instead of proof script (sequence of commands), although the implementation was still emulating TTY interaction in order to be able to work with the then emerging Proof General interface. After some recent reworking of Isabelle internals, to support parallel processing of theories and proofs, the original idea of structured document processing has surfaced again. &lt;/p&gt;
&lt;p &gt;Isabelle versions from 2009 or later already provide some support for interactive proof documents with asynchronous checking, which awaits to be connected to a suitable editor framework or full-scale IDE. The remaining problem is how to do that systematically, without having to specify and implement complex protocols for prover interaction.&lt;/p&gt;
&lt;p &gt;This is the point where we introduce the new Isabelle/Scala layer, which is meant to expose certain aspects of Isabelle/ML to the outside world. The Scala language (by Martin Odersky) is suﬃciently close to ML in order to model well-known prover concepts conveniently, but Scala also runs on the JVM and can access existing Java libraries directly. By building more and more external system wrapping for Isabelle in Scala, we eventually reach the point where we can integrate the prover seamlessly into existing IDEs (say Netbeans).&lt;/p&gt;
&lt;p &gt;To avoid getting side-tracked by IDE platform complexity, our current experiments are focused on jEdit, which is a powerful editor framework written in Java that can be easily extended by plugin modules. Our plugins are written again in Scala for our convenience, and to leverage the Scala actor library for parallel and interactive programming. Thanks to the Isabelle/Scala layer, the Isabelle/jEdit implementation is very small and simple.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;I thought this was a nice paper on the pragmatics of incremental, interactive proof editing. I&#039;ve suspected for a while that as programming languages and IDEs grow more sophisticated and do more computationally-intensive checks at compile time (including but not limited to theorem proving), it will become similarly important to design our languages to support modular and incremental analysis. &lt;/p&gt;
&lt;p &gt;However, IDE designs also need more experimentation, and unfortunately the choice of IDEs to extend seem to be limited to archaic systems like Emacs or industrial behemoths like Eclipse or Visual Studio, both of which constrain the scope for new design -- Emacs is too limited, and the API surface of Eclipse/VS is just too big and irregular. (Agda-mode for Emacs is a heroic but somewhat terrifying piece of elisp.)&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/17">Software Engineering</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Fri, 22 Apr 2011 11:06:17 -0400</pubDate>
</item>
<item>
 <title>Finding and Understanding Bugs in C Compilers</title>
 <link>http://lambda-the-ultimate.org/node/4241</link>
 <description>&lt;p &gt;In &lt;a href=&quot;http://www.cs.utah.edu/~regehr/papers/pldi11-preprint.pdf&quot;&gt;Finding and Understanding Bugs in C Compilers&lt;/a&gt; Xuejun Yang, Yang Chen, Eric Eide, and John Regehr of University of Utah, School of Computing describe Csmith, a fuzzer for testing C compilers.  The hard part was avoiding undefined behavior.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt; Compilers should be correct. To improve the quality of C compilers, we created Csmith, a randomized test-case generation tool, and spent three years using it to ﬁnd compiler bugs. During this period we reported more than 325 previously unknown bugs to compiler developers. Every compiler we tested was found to crash and also to silently generate wrong code when presented with valid input. In this paper we present our compiler-testing tool and the results of our bug-hunting study. Our ﬁrst contribution is to advance the state of the art in compiler testing. Unlike previous tools, Csmith generates programs that cover a large subset of C while avoiding the undeﬁned and unspeciﬁed behaviors that would destroy its ability to automatically ﬁnd wrong code bugs. Our second contribution is a collection of qualitative and quantitative results about the bugs we have found in open-source C compilers.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Two bits really stuck out for me.  First, formal verification has a real positive impact&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;The striking thing about our CompCert results is that the middleend bugs we found in all other compilers are absent. As of early 2011, the under-development version of CompCert is the only compiler we have tested for which Csmith cannot ﬁnd wrong-code errors. This is not for lack of trying: we have devoted about six CPU-years to the task. The apparent unbreakability of CompCert supports a strong argument that developing compiler optimizations within a proof framework, where safety checks are explicit and machine-checked, has tangible beneﬁts for compiler users.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;And second, code coverage is inadequate for ensuring good test thoroughness for software as complex as a compiler.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;Because we ﬁnd many bugs, we hypothesized that randomly generated programs exercise large parts of the compilers that were not covered by existing test suites. To test this, we enabled code coverage monitoring in GCC and LLVM. We then used each compiler to build its own test suite, and also to build its test suite plus 10,000 Csmith-generated programs. Table 3 shows that the incremental coverage due to Csmith is so small as to be a negative result. Our best guess is that these metrics are too shallow to capture Csmith’s effects, and that we would generate useful additional coverage in terms of deeper metrics such as path or value coverage.&lt;/p&gt;&lt;/blockquote&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/17">Software Engineering</category>
 <pubDate>Mon, 28 Mar 2011 12:58:01 -0400</pubDate>
</item>
<item>
 <title>The Habit Programming Language: The Revised Preliminary Report</title>
 <link>http://lambda-the-ultimate.org/node/4205</link>
 <description>&lt;p &gt;Habit is a systems programming dialect of Haskell from the &lt;a href=&quot;http://hasp.cs.pdx.edu/&quot;&gt;High-Assurance Systems Programming (HASP)&lt;/a&gt; project at Portland State University. From &lt;a href=&quot;http://hasp.cs.pdx.edu/habit-report-Nov2010.pdf&quot;&gt;The Habit Programming Language: The Revised Preliminary Report&lt;/a&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;This report presents a preliminary design for the programming language Habit, a dialect of Haskell that supports the development of high quality systems software. The primary commitments of the design are as follows:&lt;/p&gt;
&lt;p &gt;* Systems programming: Unlike Haskell, which was intended to serve as a general purpose functional programming language, the design of Habit focusses on features that are needed in systems software development. These priorities are reﬂected fairly directly in the new features that Habit provides for describing bit-level and memory-based data representations, the introduction of new syntactic extensions to facilitate monadic programming, and, most  signiﬁcantly, the adoption of a call-by-value semantics to improve predictability of execution. The emphasis on systems programming also impacts the design in less direct ways, including assumptions about the expected use of whole program compilation and optimization strategies in a practical Habit implementation.&lt;/p&gt;
&lt;p &gt;* High assurance: Although most details of Haskell’s semantics have been formalized at some point in the research literature, there is no consolidated formal description of the whole language. There are also known differences in semantics, particularly with respect to operational behavior, between different Haskell implementations in areas where the Haskell report provides no guidance. Although it is not addressed in the current report, a high-priority for Habit is to provide a full, formal semantics for the complete language that can be used as a foundation for reasoning and formal veriﬁcation, a mechanism for ensuring consistency between implementations, and a basis for reliably predicting details about memory allocation, asymptotic behavior, and resource utilization.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;HASP has a couple of &lt;a href=&quot;http://lambda-the-ultimate.org/node/4204&quot;&gt;postdoc positions&lt;/a&gt; open to help with Habit.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/17">Software Engineering</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/19">Theory</category>
 <pubDate>Fri, 18 Feb 2011 11:06:41 -0500</pubDate>
</item>
<item>
 <title>Ghosts of Unix Past: a historical search for design patterns</title>
 <link>http://lambda-the-ultimate.org/node/4156</link>
 <description>&lt;p &gt;Not strictly PLT-related, but Neil Brown has contributed an amazing series of articles to Linux Weekly News:&lt;/p&gt;
&lt;ul &gt;
&lt;li &gt;&lt;a href=&quot;http://lwn.net/Articles/411845/&quot;&gt;Ghosts of Unix Past: a historical search for design patterns&lt;/a&gt;&lt;/li&gt;
&lt;li &gt;&lt;a href=&quot;http://lwn.net/Articles/412131/&quot;&gt;Ghosts of Unix past, part 2: Conflated designs&lt;/a&gt;&lt;/li&gt;
&lt;li &gt;&lt;a href=&quot;http://lwn.net/Articles/414618/&quot;&gt;Ghosts of Unix past, part 3: Unfixable designs&lt;/a&gt;&lt;/li&gt;
&lt;li &gt;&lt;a href=&quot;http://lwn.net/Articles/416494/&quot;&gt;&lt;span &gt;Ghosts of Unix past, part 4: High-maintenance designs&lt;/span&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote &gt;&lt;p &gt;For this series we try to look for patterns which become visible only over an extended time period. As development of a system proceeds, early decisions can have consequences that were not fully appreciated when they were made. If we can find patterns relating these decisions to their outcomes, it might be hoped that a review of these patterns while making new decisions will help to avoid old mistakes or to leverage established successes.&lt;/p&gt;&lt;/blockquote&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/17">Software Engineering</category>
 <pubDate>Sat, 04 Dec 2010 23:12:25 -0500</pubDate>
</item>
<item>
 <title>Pure and Declarative Syntax Definition: Paradise Lost and Regained, Onward 2010</title>
 <link>http://lambda-the-ultimate.org/node/4150</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://www.lclnet.nl/publications/pure-and-declarative-syntax-definition.pdf&quot;&gt;Pure and Declarative Syntax Definition: Paradise Lost and Regained&lt;/a&gt; by Lennart C. L. Kats, Eelco Visser, Guido Wachsmuth from Delft&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;Syntax definitions are pervasive in modern software systems, and serve as the basis for language processing tools like parsers and compilers. Mainstream parser generators pose restrictions on syntax definitions that follow from their implementation algorithm. They hamper evolution, maintainability, and compositionality of syntax definitions. The pureness and declarativity of syntax definitions is lost. We analyze how these problems arise for different aspects of syntax definitions, discuss their consequences for language engineers, and show how the pure and declarative nature of syntax definitions can be regained.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;I haven&#039;t compared this version with the Onward 2010 version, but they look essentially the same.  It seems timely to post this paper, considering the other recent story &lt;a href=&quot;http://lambda-the-ultimate.org/node/4148&quot;&gt;Yacc is dead&lt;/a&gt;.  There is not a whole lot to argue against in this paper, since we all &quot;know&quot; the other approaches aren&#039;t as elegant and only resort to them for specific reasons such as efficiency.  Yet, this is the first paper I know of that tries to state the argument to software engineers.&lt;/p&gt;
&lt;p &gt;For example, the Dragon Book, in every single edition, effectively brushes these topics aside.  In particular, the Dragon Book does not even mention scannerless parsing as a technique, and instead only explains the &quot;advantages&quot; of using a scanner.  Unfortunately, the authors of this paper don&#039;t consider other design proposals, either, such as Van Wyk&#039;s &lt;a href=&quot;http://www.umsec.umn.edu/publications/Context-Aware-Scanning-Parsing-Extensible-Language&quot;&gt;context-aware scanners&lt;/a&gt; from GPCE 2007.  It is examples like these that made me wish the paper was a bit more robust in its analysis; the examples seem focused on the author&#039;s previous work.&lt;/p&gt;
&lt;p &gt;If you are not familiar with the author&#039;s previous work in this area, the paper covers it in the references.  It includes &lt;a href=&quot;http://lambda-the-ultimate.org/user/438&quot;&gt;Martin Bravenboer&lt;/a&gt;&#039;s work on modular Eclipse IDE support for AspectJ.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/4">Critiques</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/24">DSL</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/7">History</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/17">Software Engineering</category>
 <pubDate>Mon, 29 Nov 2010 12:19:39 -0500</pubDate>
</item>
<item>
 <title>First-class modules: hidden power and tantalizing promises</title>
 <link>http://lambda-the-ultimate.org/node/4101</link>
 <description>&lt;p &gt;Oleg just posted a new page, &lt;a href=&quot;http://okmij.org/ftp/ML/first-class-modules/&quot;&gt;First-class modules: hidden power and tantalizing promises&lt;/a&gt;, related to new features in OCaml 3.12 (&lt;a href=&quot;http://lambda-the-ultimate.org/node/4050&quot;&gt;on LtU&lt;/a&gt;).&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;First-class modules introduced in OCaml 3.12 make type constructors first-class, permitting type constructor abstraction and polymorphism. It becomes possible to manipulate and quantify over types of higher kind. We demonstrate that as a consequence, full-scale, efficient generalized algebraic data types (GADTs) become expressible in OCaml 3.12 as it is, without any further extensions. Value-independent generic programming along the lines of Haskell&#039;s popular ``Generics for the masses&#039;&#039; become possible in OCaml for the first time. We discuss extensions such as a better implementation of polymorphic equality on modules, which can give us intensional type analysis (aka, type-case), permitting generic programming frameworks like SYB.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;It includes a nice intro to first-class modules by Frisch and Garrigue: &lt;a href=&quot;http://www.math.nagoya-u.ac.jp/~garrigue/papers/ml2010-show.pdf&quot;&gt;First-class modules and composable signatures in Objective Caml 3.12&lt;/a&gt;.&lt;/p&gt;
&lt;p &gt;OCaml definitely just got even more interesting.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/14">OOP</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/17">Software Engineering</category>
 <pubDate>Sat, 09 Oct 2010 09:30:41 -0400</pubDate>
</item>
<item>
 <title>Turning down the LAMP: Software specialization for the cloud</title>
 <link>http://lambda-the-ultimate.org/node/4095</link>
 <description>&lt;p &gt;Several years ago, a reading group I was in read about the Flux &lt;a href=&quot;http://www.cs.utah.edu/flux/oskit/&quot;&gt;OSKit Project&lt;/a&gt;, which aimed to provide a modular basis for operating systems. One of the topics of discussion was the possibility of, and possible benefits of, an application-specific OS. (For example, the fearful spectre of &lt;a href=&quot;http://www.informatimago.com/linux/emacs-on-user-mode-linux.html&quot;&gt;EmacsOS&lt;/a&gt; was raised.)&lt;/p&gt;
&lt;p &gt;Today, I ran across &quot;&lt;a href=&quot;http://anil.recoil.org/papers/2010-hotcloud-lamp.pdf&quot;&gt;Turning down the LAMP: Software specialization for the cloud&lt;/a&gt;&quot;, which actually makes a pretty strong case for the idea on a virtual machine infrastructure,&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
...We instead view the cloud as a stable hardware platform, and present a programming framework which permits applications to be constructed to run directly on top of it without intervening software layers. Our prototype (dubbed Mirage) is unashamedly academic; it extends the Objective Caml language with storage extensions and a custom run-time to emit binaries that execute as a guest operating system under Xen. Mirage applications exhibit significant performance speedups for I/O and memory handling versus the same code running under Linux/Xen.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;As one example, &lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
Frameworks which currently use (for example) fork(2) on a host to spawn processes would benefit from using cloud management APIs to request resources and eliminate the distinction between cores and hosts.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;On the other hand, I suspect that this &quot;unashamedly academic&quot; idea may already be advancing into the commercial arena, if I am correctly reading between the lines of the &lt;a href=&quot;http://www.vmware.com/products/springsource-tcserver/&quot;&gt;VMware vFabric tc Server&lt;sup &gt;TM&lt;/sup&gt;&lt;/a&gt; marketing material.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/24">DSL</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/6">General</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/17">Software Engineering</category>
 <pubDate>Mon, 04 Oct 2010 15:29:26 -0400</pubDate>
</item>
<item>
 <title>Software Development with Code Maps</title>
 <link>http://lambda-the-ultimate.org/node/4092</link>
 <description>&lt;p &gt;&lt;i &gt;Robert DeLine, Gina Venolia, and Kael Rowan, &lt;a href=&quot;http://cacm.acm.org/magazines/2010/8/96613-software-development-with-code-maps/fulltext&quot;&gt;&quot;Software Development with Code Maps&quot;&lt;/a&gt;, Communications of the ACM, Vol. 53 No. 8, Pages 48-54, 10.1145/1787234.1787250&lt;/i&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;Getting lost in a large code base is altogether too easy. The code consists of many thousands of symbols, with few visual landmarks to guide the eye. As a developer navigates the code, she follows hyperlinks, such as jumping from a method caller to a callee, with no visual transition to show where the jump landed. ... Better support for code diagrams in the development environment could support code understanding and communication, and could serve as a &quot;map&quot; to help keep developers oriented. ... Our goal is to integrate maps into the development environment such that developers can carry out most tasks within the map.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Although the focus of this article is largely on &quot;Code Map as UI&quot;, there are hints of the possibility that we might eventually see &quot;Code Map as Language Element&quot; (for example, the comment that &lt;i &gt;&quot;An important lesson from the Oahu research is that developers assign meaning to the spatial layout of the code. Code Canvas therefore takes a mixed initiative approach to layout. The user is able to place any box on the map through direct manipulation...&quot;&lt;/i&gt;). The same ideas will of course be familiar to anyone who has worked with environments like Simulink, which provide a combination of diagrammatic structuring and textual definition of algorithms. But in the past such environments have only really been found in specific application domains -- control systems and signal processing in the case of Simulink -- while the Code Map idea seems targeted at more general-purpose software development. Is the complexity of large software systems pushing us towards a situation in which graphical structures like Code Maps will become a common part of the syntax of general-purpose programming languages?&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/24">DSL</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/17">Software Engineering</category>
 <pubDate>Thu, 30 Sep 2010 06:12:36 -0400</pubDate>
</item>
<item>
 <title>Is Transactional Programming Actually Easier?</title>
 <link>http://lambda-the-ultimate.org/node/4070</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://userweb.cs.utexas.edu/users/rossbach/pubs/wddd09-rossbach.pdf&quot;&gt;Is Transactional Programming Actually Easier?&lt;/a&gt;, WDDD &#039;09, Christopher J. Rossbach, Owen S. Hofmann, and Emmett Witchel.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;Chip multi-processors (CMPs) have become ubiquitous, while tools that ease concurrent programming have not. The promise of increased performance for all applications through ever more parallel hardware requires good tools for concurrent programming, especially for average programmers. Transactional memory (TM) has enjoyed recent interest as a tool that can help programmers program concurrently.&lt;/p&gt;
&lt;p &gt;The TM research community claims that programming with transactional memory is easier than alternatives (like locks), but evidence is scant. In this paper, we describe a user-study in which 147 undergraduate students in an operating systems course implemented the same programs using coarse and fine-grain locks, monitors, and transactions. We surveyed the students after the assignment, and examined their code to determine the types and frequency of programming errors for each synchronization technique. Inexperienced programmers found baroque syntax a barrier to entry for transactional programming. On average, subjective evaluation showed that students found transactions harder to use than coarse-grain locks, but slightly easier to use than fine-grained locks. Detailed examination of synchronization errors in the students’ code tells a rather different story. Overwhelmingly, the number and types of programming errors the students made was much lower for transactions than for locks. On a similar programming problem, over 70% of students made errors with fine-grained locking, while less than 10% made errors with transactions.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;I&#039;ve recently discovered the &lt;a href=&quot;http://www.ece.wisc.edu/~wddd/&quot;&gt;Workshop on Duplicating, Deconstructing, and Debunking (WDDD)&lt;/a&gt; and have found a handful of neat papers, and this one seemed especially relevant to LtU. &lt;/p&gt;
&lt;p &gt;[Edit: Apparently, there is a &lt;A href=&quot;http://userweb.cs.utexas.edu/users/rossbach/pubs/ppopp012-rossbach.pdf&quot;&gt;PPoPP&#039;10 version of this paper&lt;/a&gt; with 237 undergraduate students.]&lt;/p&gt;
&lt;p &gt;Also, previously on LtU:&lt;/p&gt;
&lt;p &gt;&lt;a href=&quot;http://lambda-the-ultimate.org/node/3592&quot;&gt;Transactional Memory versus Locks - A Comparative Case Study&lt;/a&gt;&lt;/p&gt;
&lt;p &gt;Despite the fact Tommy McGuire&#039;s post mentions Dr. Victor Pankratius&#039;s talk was at UT-Austin and the authors of this WDDD&#039;09 paper represent UT-Austin, these are two independent case studies with different programming assignments.  The difference in assignments is interesting because it may indicate some statistical noise associated with problem domain complexity (as perceived by the test subjects) and could account for differences between the two studies.&lt;/p&gt;
&lt;p &gt;Everyone always likes to talk about usability in programming languages without trying to do it.  Some claim it can&#039;t even be done, despite the fact Horning and Gannon did work on the subject 3+ decades ago, assessing how one can &lt;a href=&quot;http://portal.acm.org/citation.cfm?id=908194&quot;&gt; Language Design to Enhance Program Reliability&lt;/a&gt;.  This gives a glimpse both on (a) why it is hard (b) how you can still try to do usability testing, rather than determine the &lt;a href=&quot;http://en.wikipedia.org/wiki/Truthiness&quot;&gt;truthiness&lt;/a&gt; of a language design decision.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/16">Parallel/Distributed</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/17">Software Engineering</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/18">Teaching &amp; Learning</category>
 <pubDate>Tue, 07 Sep 2010 14:13:41 -0400</pubDate>
</item>
</channel>
</rss>

