<?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>Google Brain&#039;s Jax and Flax</title>
 <link>http://lambda-the-ultimate.org/google-brain-jax</link>
 <description>&lt;p &gt;Google&#039;s AI division, Google Brain, has two main products for deep learning: TensorFlow and Jax.  While TensorFlow is best known, Jax can be thought of as a higher-level language for specifying deep learning algorithms while automatically eliding code that doesn&#039;t need to run as part of the model.&lt;/p&gt;
&lt;p &gt;&lt;a href=&quot;https://github.com/google/jax&quot;&gt;Jax&lt;/a&gt; evolved from Autograd, and is a combination of Autograd and &lt;a href=&quot;https://www.tensorflow.org/xla&quot;&gt;XLA&lt;/a&gt;.  Autograd &quot;can automatically differentiate native Python and Numpy code. It can handle a large subset of Python&#039;s features, including loops, ifs, recursion and closures, and it can even take derivatives of derivatives of derivatives. It supports reverse-mode differentiation (a.k.a. backpropagation), which means it can efficiently take gradients of scalar-valued functions with respect to array-valued arguments, as well as forward-mode differentiation, and the two can be composed arbitrarily. The main intended application of Autograd is gradient-based optimization.&quot;&lt;/p&gt;
&lt;p &gt;&lt;a href=&quot;https://github.com/google/flax/&quot;&gt;Flax&lt;/a&gt; is then built on top of Jax, and allows for easier customization of existing models.&lt;/p&gt;
&lt;p &gt;What do you see as the future of domain specific languages for AI?&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/26">Python</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/34">Scientific Programming</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/17">Software Engineering</category>
 <pubDate>Fri, 15 Jan 2021 13:59:26 +0000</pubDate>
</item>
<item>
 <title>Automating Ad hoc Data Representation Transformations</title>
 <link>http://lambda-the-ultimate.org/node/5378</link>
 <description>&lt;p &gt;&lt;a href=&quot;https://yanniss.github.io/adrt-oopsla15.pdf&quot;&gt;Automating Ad hoc Data Representation Transformations&lt;/a&gt; by Vlad Ureche, Aggelos Biboudis, Yannis Smaragdakis, and Martin Odersky:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
To maximize run-time performance, programmers often specialize their code by hand, replacing library collections and containers by custom objects in which data is restructured for efficient access. However, changing the data representation is a tedious and error-prone process that makes it hard to test, maintain and evolve the source code.&lt;/p&gt;
&lt;p &gt;We present an automated and composable mechanism that allows programmers to safely change the data representation in delimited scopes containing anything from expressions to entire class definitions. To achieve this, programmers define a transformation and our mechanism automatically and transparently applies it during compilation, eliminating the need to manually change the source code.&lt;/p&gt;
&lt;p &gt;Our technique leverages the type system in order to offer correctness guarantees on the transformation and its interaction with object-oriented language features, such as dynamic dispatch, inheritance and generics.&lt;/p&gt;
&lt;p &gt;We have embedded this technique in a Scala compiler plugin and used it in four very different transformations, ranging from improving the data layout and encoding, to&lt;br &gt;
retrofitting specialization and value class status, and all the way to collection deforestation. On our benchmarks, the technique obtained speedups between 1.8x and 24.5x.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;This is a realization of an idea that has been briefly discussed here on LtU a few times, whereby a program is written using high-level representations, and the user has the option to provide a lowering to a more efficient representation after the fact.&lt;/p&gt;
&lt;p &gt;This contrasts with the typical approach of providing efficient primitives, like primitive unboxed values, and leaving it to the programmer to compose them efficiently up front.&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/6">General</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/12">Object-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>Thu, 22 Sep 2016 18:29:03 +0000</pubDate>
</item>
<item>
 <title>Simon Peyton Jones elected into the Royal Society Fellowship</title>
 <link>http://lambda-the-ultimate.org/node/5332</link>
 <description>&lt;p &gt;&lt;A href=&#039;http://research.microsoft.com/en-us/people/simonpj/&#039;&gt;Simon Peyton Jones&lt;/A&gt; has been &lt;A href=&quot;https://royalsociety.org/fellows/fellows-directory/#?earliestelectedyear=2016&quot;&gt;elected&lt;/A&gt; as a &lt;A href=&#039;https://royalsociety.org/people/simon-peyton-jones-12889/&#039;&gt;Fellow of the Royal Society&lt;/A&gt;. The Royal Society biography reads:&lt;BLOCKQUOTE &gt;&lt;br &gt;
Simon&#039;s main research interest is in functional programming languages, their implementation, and their application. He was a key contributor to the design of the now-standard functional language Haskell, and is the lead designer of the widely-used Glasgow Haskell Compiler (GHC). He has written two textbooks about the implementation of functional languages.&lt;/p&gt;
&lt;p &gt;More generally, Simon is interested in language design, rich type systems, compiler technology, code generation, runtime systems, virtual machines, and garbage collection. He is particularly motivated by direct use of principled theory to practical language design and implementation -- that is one reason he loves functional programming so much.&lt;/p&gt;
&lt;p &gt;Simon is also chair of Computing at School, the grass-roots organisation that was at the epicentre of the 2014 reform of the English computing curriculum.&lt;br &gt;
&lt;/BLOCKQUOTE&gt;&lt;/p&gt;
&lt;p &gt;Congratulations SPJ!&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/6">General</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/10">Paradigms</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/29">Semantics</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/17">Software Engineering</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/25">Spotlight</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/18">Teaching &amp; Learning</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/19">Theory</category>
 <pubDate>Sat, 30 Apr 2016 19:44:24 +0000</pubDate>
</item>
<item>
 <title>mbeddr: an Extensible C-based Programming Language and IDE for Embedded Systems</title>
 <link>http://lambda-the-ultimate.org/node/5207</link>
 <description>&lt;p &gt;&lt;i &gt;Markus Voelter, Bernd Kolb1, Daniel Ratiu, and Bernhard Schaetz, &lt;b &gt;&lt;a href=&quot;http://mbeddr.com/files/mbeddr_hilt2014.pdf&quot;&gt;&quot;mbeddr: an Extensible C-based Programming Language and IDE for Embedded Systems&quot;&lt;/a&gt;&lt;/b&gt;, SplashCON/Wavefront 2012.&lt;/i&gt;&lt;/p&gt;
&lt;p &gt;Although embedded systems are an increasingly large part of our lives, and despite the fact that embedded software would undoubtedly benefit from the kind safety guarantees provided by more advanced type systems, most embedded software development is still done in C. That&#039;s partly a result of toolchain availability, and partly because many more advanced languages typically impose requirements on memory, dynamic memory allocation, and other runtime infrastructure that simply aren&#039;t supportable on a lot of resource-constrained microcontrollers or acceptable in a risk-averse environment. Mbeddr seems to be seeking a middle ground between C, and creating a whole new language. From the paper:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;While the C programming language provides very good support for writing efficient, low-level code, it does not offer adequate means for defining higher-level abstractions relevant to embedded software. In this paper we present the mbeddr technology stack that supports extension of C with constructs adequate for embedded systems. In mbeddr, efficient low-level programs can be written using the well-known concepts from C. Higher level domain-specific abstractions can be seamlessly integrated into C by means of modular language extension regarding syntax, type system, semantics and IDE. In the paper we show how language extension can address the challenges of embedded software development and report on our experience in building these extensions. We show that language workbenches deliver on the promise of significantly reducing the effort of language engineering and the construction of corresponding IDEs. mbeddr is built on top of the JetBrains MPS language workbench. Both MPS and mbeddr are open source software&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;It appears that mbeddr allows multiple DSLs to be built on top of C to provide greater safety and more domain-specific expressions of typical embedded software patterns. Additionally, it provides integration with various analysis tools including model-checkers. Another paper, &lt;a href=&quot;http://mbeddr.com/files/mbees2014.pdf&quot;&gt;&quot;Preliminary Experience of using mbeddr for Developing Embedded Software&quot;&lt;/a&gt;, provides a look at how all of these things fit together in use.&lt;/p&gt;
&lt;p &gt;The mbeddr approach seems similar in concept to &lt;a href=&quot;http://ivorylang.org/&quot;&gt;Ivory and Tower&lt;/a&gt;, although mbeddr uses JetBrains MPS as the platform for creating DSLs instead of building an embedded DSL in Haskell. &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/8">Implementation</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/17">Software Engineering</category>
 <pubDate>Fri, 24 Jul 2015 16:47:06 +0000</pubDate>
</item>
<item>
 <title> Don Syme receives a medal for F#</title>
 <link>http://lambda-the-ultimate.org/node/5193</link>
 <description>&lt;p &gt;&lt;A href=&quot;http://research.microsoft.com/en-us/people/dsyme/&quot;&gt;Don Syme&lt;/A&gt; receives the Royal Academy of Engineering&#039;s &lt;A href=&quot;http://www.raeng.org.uk/grants-and-prizes/prizes-and-medals/individual-awards/silver-medal&quot;&gt;Silver Medal&lt;/A&gt; for &lt;A href=&quot;http://www.raeng.org.uk/news/news-releases/2015/july/pioneering-innovators-to-receive-academy-silver-me&quot;&gt;his work on F#&lt;/A&gt;. The citation reads:&lt;br &gt;
&lt;BLOCKQUOTE &gt;&lt;br &gt;
F# is known for being a clear and more concise language that interoperates well with other systems, and is used in applications as diverse asanalysing the UK energy market to tackling money laundering. It allows programmers to write code with fewer bugs than other languages, so users can get their programme delivered to market both rapidly and accurately. Used by major enterprises in the UK and worldwide, F# is both cross-platform and open source, and includes innovative features such as unit-of-measure inference, asynchronous programming and type providers, which have in turn influenced later editions of C# and other industry languages.&lt;br &gt;
&lt;/BLOCKQUOTE&gt;&lt;/p&gt;
&lt;p &gt;Congratulations!&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/23">Cross language runtimes</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/5">Fun</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</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/12">Object-Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/14">OOP</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/10">Paradigms</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/17">Software Engineering</category>
 <pubDate>Fri, 03 Jul 2015 19:16:06 +0000</pubDate>
</item>
<item>
 <title>Facebook open sources &quot;Infer&quot;, static program analysis tool</title>
 <link>http://lambda-the-ultimate.org/node/5175</link>
 <description>&lt;p &gt;Linky to Facebook blog: &lt;a href=&quot;https://code.facebook.com/posts/1648953042007882&quot;&gt;Open-sourcing Facebook Infer: Identify bugs before you ship&lt;/a&gt;&lt;/p&gt;
&lt;p &gt;Discuss!&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/17">Software Engineering</category>
 <pubDate>Thu, 11 Jun 2015 18:03:41 +0000</pubDate>
</item>
<item>
 <title>Safely Composable Type-Specific Languages</title>
 <link>http://lambda-the-ultimate.org/node/5018</link>
 <description>&lt;p &gt;&lt;i &gt;Cyrus Omar, Darya Kurilova, Ligia Nistor, Benjamin Chung, Alex Potanin, and Jonathan Aldrich, &lt;a href=&quot;http://www.cs.cmu.edu/~aldrich/papers/ecoop14-tsls.pdf&quot;&gt;&quot;Safely Composable Type-Specific Languages&quot;&lt;/a&gt;, ECOOP14.&lt;/i&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;Programming languages often include specialized syntax for common datatypes (e.g. lists) and some also build in support for specific specialized datatypes (e.g. regular expressions), but user-defined types must use general-purpose syntax. Frustration with this causes developers to use strings, rather than structured data, with alarming frequency, leading to correctness, performance, security, and usability issues. Allowing library providers to modularly extend a language with new syntax could help address these issues. Unfortunately, prior mechanisms either limit expressiveness or are not safely composable: individually unambiguous extensions can still cause ambiguities when used together. We introduce type-specific languages (TSLs): logic associated with a type that determines how the bodies of generic literals, able to contain arbitrary syntax, are parsed and elaborated, hygienically. The TSL for a type is invoked only when a literal appears where a term of that type is expected, guaranteeing non-interference. We give evidence supporting the applicability of this approach and formally specify it with a bidirectionally typed elaboration semantics for the Wyvern programming language.&lt;/p&gt;&lt;/blockquote&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/24">DSL</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, 11 Aug 2014 06:27:19 +0000</pubDate>
</item>
<item>
 <title>Jeeves</title>
 <link>http://lambda-the-ultimate.org/node/4892</link>
 <description>&lt;blockquote &gt;&lt;p &gt;It is increasingly important for applications to protect user privacy. Unfortunately, it is often non-trivial for programmers to enforce privacy policies. We have developed &lt;a href=&quot;http://projects.csail.mit.edu/jeeves/index.php&quot;&gt;Jeeves&lt;/a&gt; to make it easier for programmers to enforce information flow policies: policies that describe who can see what information flows through a program. Jeeves allows the programmer to write policy-agnostic programs, separately implementing policies on sensitive values from other functionality. Just like Wooster&#039;s clever valet Jeeves in Wodehouse&#039;s stories, the Jeeves runtime does the hard work, automatically enforcing the policies to show the appropriate output to each viewer.&lt;/blockquote&gt;
&lt;p &gt;From what I gather, Jeeves takes Aspect Oriented approach to privacy. This is of course not a new idea. I presume that many of the classic problems with AOP would apply to Jeeves. Likewise, using information flow analysis for handling privacy policies is not an new idea. Combining the two, however, seems like a smart move. Putting the enforcement at the run-time level makes this sound more practical than other ideas I have heard before. Still, I personally think that specifying privacy policies at the end-user level and clarifying the concept of privacy at the normative, legal and conceptual levels are more pressing concerns. Indeed, come to think of it: I don&#039;t really recall a privacy breach that was caused by a simple information flow bug. Privacy expectations are broken on purpose by many companies and major data breaches occur when big databases are shared (recall the Netflix Prize thing). Given this, I assume the major use-case is for Apps, maybe even as a technology that someone like Apple could use to enforce the compliance of third-party Apps to their privacy policies.&lt;p &gt;
I haven&#039;t looked too closely, so comments from more informed people are welcome.&lt;p &gt;
Jeeves is implemented as an embedded DSL in Scala and Python.&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/32">Scala</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/17">Software Engineering</category>
 <pubDate>Wed, 26 Feb 2014 18:33:08 +0000</pubDate>
</item>
<item>
 <title>Simple Generators v. Lazy Evaluation</title>
 <link>http://lambda-the-ultimate.org/node/4690</link>
 <description>&lt;p &gt;Oleg Kiselyov, Simon Peyton-Jones and Amr Sabry: &lt;a href=&quot;http://okmij.org/ftp/continuations/PPYield/index.html&quot;&gt;Simple Generators&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;Incremental stream processing, pervasive in practice, makes the best case for lazy evaluation. Lazy evaluation promotes modularity, letting us glue together separately developed stream producers, consumers and transformers. Lazy list processing has become a cardinal feature of Haskell. It also brings the worst in lazy evaluation: its incompatibility with effects and unpredictable and often extraordinary use of memory. Much of the Haskell programming lore are the ways to get around lazy evaluation.&lt;/p&gt;
&lt;p &gt;We propose a programming style for incremental stream processing based on typed simple generators. It promotes modularity and decoupling of producers and consumers just like lazy evaluation. Simple generators, however, expose the implicit suspension and resumption inherent in lazy evaluation as computational effects, and hence are robust in the presence of other effects. Simple generators let us accurately reason about memory consumption and latency. The remarkable implementation simplicity and efficiency of simple generators strongly motivates investigating and pushing the limits of their expressiveness.&lt;/p&gt;
&lt;p &gt;To substantiate our claims we give a new solution to the notorious pretty-printing problem. Like earlier solutions, it is linear, backtracking-free and with bounded latency. It is also modular, structured as a cascade of separately developed stream transducers, which makes it simpler to write, test and to precisely analyze latency, time and space consumption. It is compatible with effects including IO, letting us read the source document from a file, and format it as we read.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;This is fascinating work that shows how to gain the benefits of lazy evaluation - decoupling of producers, transformers, and consumers of data, and producing only as much data as needed - in a strict, effectful setting that works well with resources that need to be disposed of once computation is done, e.g. file handles.&lt;/p&gt;
&lt;p &gt;The basic idea is that of Common Lisp signal handling: use a hierarchical, dynamically-scoped chain of handler procedures, which get called - on the stack, without unwinding it - to parameterize code.  In this case, the producer code (which e.g. reads a file character by character) is the parameterized code: every time data (a character) is produced, it calls the dynamically innermost handler procedure with the data (it &lt;em &gt;yields&lt;/em&gt; the data to the handler). This handler is the data consumer (it could e.g. print the received character to the console).  Through dynamic scoping, each handler may also have a super-handler, to which it may yield data. In this way, data flows containing multiple transformers can be composed.&lt;/p&gt;
&lt;p &gt;I especially like &lt;a href=&quot;https://github.iu.edu/sabry/PPYield/blob/master/simple_gen.ml&quot;&gt;the OCaml version of the code&lt;/a&gt;, which is just a page of code, implementing a dynamically-scoped chain of handlers. After that we can already write &lt;a href=&quot;https://github.iu.edu/sabry/PPYield/blob/master/simple_gen.ml#L39&quot;&gt;map and fold&lt;/a&gt; in this framework (fold using a loop and a state cell, notably.)  There&#039;s &lt;a href=&quot;https://github.iu.edu/sabry/PPYield/blob/master/yany.ml&quot;&gt;more sample code&lt;/a&gt;.&lt;/p&gt;
&lt;p &gt;This also ties in with &lt;a href=&quot;http://lambda-the-ultimate.org/node/4349&quot;&gt;mainstream yield&lt;/a&gt;.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/5">Fun</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/10">Paradigms</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/17">Software Engineering</category>
 <pubDate>Thu, 21 Feb 2013 13:30:55 +0000</pubDate>
</item>
<item>
 <title>Koka a function oriented language with effect inference</title>
 <link>http://lambda-the-ultimate.org/node/4589</link>
 <description>&lt;blockquote &gt;&lt;p &gt;Koka is a function-oriented programming language that seperates pure values from side-effecting computations, where the effect of every function is automatically inferred. Koka has many features that help programmers to easily change their data types and code organization correctly, while having a small language core with a familiar JavaScript like syntax.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;&lt;a href=&#039;http://research.microsoft.com/en-us/projects/koka/&#039;&gt;Koka&lt;/a&gt; extends the idea of using row polymorphism to encode an effect system and the relations between them. &lt;a href=&#039;http://research.microsoft.com/en-us/people/daan/&#039;&gt;Daan Leijen&lt;/a&gt; is the primary researcher behind it and his research was featured previously on LtU, mainly on &lt;a href=&#039;http://lambda-the-ultimate.org/node/174&#039;&gt;row polymorphism&lt;/a&gt; in the &lt;a href=&#039;http://lambda-the-ultimate.org/node/1119&#039;&gt;Morrow Language&lt;/a&gt;.&lt;/p&gt;
&lt;p &gt;So far there&#039;s no paper available on the language design, just the &lt;a href=&#039;http://research.microsoft.com/en-us/projects/koka/2012-overviewkoka.pdf&#039;&gt;slides&lt;/a&gt; from a Lang.Next talk (which doesn&#039;t seem to have video available at &lt;a href=&#039;http://channel9.msdn.com/Events/Lang-NEXT/Lang-NEXT-2012&#039;&gt;Channel 9&lt;/a&gt;), but it&#039;s in the program for &lt;a href=&#039;http://hope2012.mpi-sws.org/&#039;&gt;HOPE 2012&lt;/a&gt;.&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/21">Type Theory</category>
 <pubDate>Thu, 16 Aug 2012 05:40:45 +0000</pubDate>
</item>
<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 18:41:45 +0000</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 16:19:15 +0000</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://people.cs.uchicago.edu/~blume/papers/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 21:41:17 +0000</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 17:00:29 +0000</pubDate>
</item>
<item>
 <title>Specification and Verification: The Spec# Experience</title>
 <link>http://lambda-the-ultimate.org/node/4285</link>
 <description>&lt;p &gt;&lt;i &gt;Mike Barnett, Manuel Fahndrich, K. Rustan M. Leino, Peter Muller, Wolfram Schulte, and Herman Venter, &lt;a href=&quot;http://research.microsoft.com/en-us/um/people/leino/papers/krml196.pdf&quot;&gt;Specification and Verification: 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 verifier that attempts to mathematically prove the correctness of programs, and an integration into the Visual Studio development environment. Spec# shows how contracts and verifiers can be integrated seamlessly into the software development process. This paper reflects on the six-year history of the Spec# project, scientific contributions it has made, remaining challenges for tools that seek to establish program correctness, and prospects of incorporating verification 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 06:11:00 +0000</pubDate>
</item>
</channel>
</rss>
