<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://lambda-the-ultimate.org">
<channel>
 <title>Lambda the Ultimate - Object-Functional</title>
 <link>http://lambda-the-ultimate.org/taxonomy/term/12/0</link>
 <description>Combining OOP and functional programming</description>
 <language>en</language>
<item>
 <title>Generics of a Higher Kind</title>
 <link>http://lambda-the-ultimate.org/node/2579</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://www.cs.kuleuven.be/~adriaan/files/genericshk/tcpoly.pdf&quot;&gt;Generics of a Higher Kind&lt;/a&gt;. Adriaan Moors, Frank Piessens, and Martin Odersky.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;With Java 5 and C# 2.0, first-order parametric polymorphism was introduced in mainstream object-oriented programming languages under the name of generics. Although the first-order variant of generics is very useful, it also imposes some restrictions: it is possible to abstract over a type, but the resulting type constructor cannot be abstracted over. This can lead to code duplication. We removed this restriction in Scala, by allowing type constructors as type parameters and abstract types. This paper presents the design and implementation of the resulting type constructor polymorphism. It combines type constructor polymorphism with implicit parameters to yield constructs similar to, and at times more expressive than, Haskell’s constructor type classes. The paper also studies interactions with other object-oriented language constructs, and discusses the gains in expressiveness.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Many readers will already be aware that Scala has added support for higher-kinded generics, related to Haskell&#039;s type constructor classes. I believe Scala is the first language to provide this capability in an OO &quot;generics&quot; framework. This ECOOP submission presents this work, with many practical examples.&lt;/p&gt;
&lt;p &gt;(Consider this penance for my last post...)&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/12">Object-Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/32">Scala</category>
 <pubDate>Thu, 20 Dec 2007 14:54:02 -0500</pubDate>
</item>
<item>
 <title>OCaml Light: A Formal Semantics For a Substantial Subset of the Objective Caml Language</title>
 <link>http://lambda-the-ultimate.org/node/2544</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://www.cl.cam.ac.uk/~so294/ocaml/&quot;&gt;OCaml Light: a formal semantics for a substantial subset of the Objective Caml language.&lt;/a&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
OCaml light is a formal semantics for a substantial subset of the Objective Caml language. It is written in Ott, and it comprises a small-step operational semantics and a syntactic, non-algorithmic type system. A type soundness theorem has been proved and mechanized using the HOL-4 proof assistant, thereby ensuring that the proof is free from errors. To ensure that the operational semantics accurately models Objective Caml, an executable version of the semantics has been created (and proved equivalent in HOL to the original, relational version) and tested on a number of small test cases.&lt;/p&gt;
&lt;p &gt;Note that while we have tried to make the semantics accurate, we are not part of the OCaml development team - this is in no sense a normative specification of the implemented language.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;From a team including Peter Sewell (&lt;a href=&quot;http://lambda-the-ultimate.org/node/163&quot;&gt;Acute&lt;/a&gt;, &lt;a href=&quot;http://lambda-the-ultimate.org/node/1460&quot;&gt;HashCaml&lt;/a&gt;, &lt;a href=&quot;http://lambda-the-ultimate.org/node/2002&quot;&gt;Ott&lt;/a&gt;).&lt;/p&gt;
&lt;p &gt;I continue to believe that things are heating up nicely in mechanized metatheory, which, in the multicore/multiprocessor world in which we now live, is extremely good news.&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/12">Object-Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/29">Semantics</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>Mon, 26 Nov 2007 13:33:45 -0500</pubDate>
</item>
<item>
 <title>Metaprogramming with Traits</title>
 <link>http://lambda-the-ultimate.org/node/2394</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://people.cs.uchicago.edu/~jhr/papers/2007/ecoop-traits.pdf&quot;&gt;Metaprogramming with Traits&lt;/a&gt;, Aaron Turon and John Reppy. ECOOP 2007&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
In many domains, classes have highly regular internal structure. For example, so-called business objects often contain boilerplate code for mapping database fields to class members. The boilerplate code must be repeated per-field for every class, because existing mechanisms for constructing classes do not provide a way to capture and reuse such member-level structure. As a result, programmers often resort to ad ho code generation. This paper presents a lightweight mechanism for specifying and reusing member-level structure in Java programs. The proposal is based on a modest extension to traits that we have termed trait-based metaprogramming. Although the semantics of the mechanism are straightforward, its type theory is difficult to reconcile with nominal subtyping. We achieve reconciliation by introducing a hybrid structural/nominal type system that extends Java&#039;s type system. The paper includes a formal calculus defined by translation to Featherweight Generic Java.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;This paper explains how to scratch an itch I&#039;ve had for a long, long time -- uniformly generating groups of fields and methods, including &lt;em &gt;computation&lt;/em&gt; of the field/method names. Something like this would be quite useful in an ML-like language&#039;s module system, too.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/12">Object-Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Mon, 13 Aug 2007 11:55:16 -0400</pubDate>
</item>
<item>
 <title>Python in Pardus Linux</title>
 <link>http://lambda-the-ultimate.org/node/2301</link>
 <description>&lt;p &gt;
&lt;a href=&quot;http://www.pardus.org.tr/eng/projects/comar/PythonInPardus.html&quot;&gt;Pardus Linux&lt;/a&gt; is a case study of functional Python.  It&#039;s a Linux distribution built from semi-scratch, the main focii being &lt;a href=&quot;http://www.pardus.org.tr/eng/projects/pisi/PiSi.html&quot;&gt;package management&lt;/a&gt; and init subsystems - places where C and shell script make poor sense.  A funded group has finally tackled these issues.
&lt;/p&gt;

&lt;p &gt;
&lt;blockquote &gt;
A package management software deals a lot with sets, lists, and dependency graphs....We have extensively used functional operators (map, filter, reduce) and list comprehensions, even metaclasses are used in a few places.
&lt;/blockquote&gt;
&lt;/p&gt;

&lt;p &gt;
Someone nudge Guido.  Scheme or Oz might have been the better choice, but give them credit.  They admit frankly to social acceptance issues.
&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/13">Logic/Declarative</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/12">Object-Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/26">Python</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/27">XML</category>
 <pubDate>Tue, 19 Jun 2007 18:55:33 -0400</pubDate>
</item>
<item>
 <title>Combining Total and Ad Hoc Extensible Pattern Matching in a Lightweight Language Extension</title>
 <link>http://lambda-the-ultimate.org/node/2224</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://research.microsoft.com/research/pubs/view.aspx?0rc=p&amp;amp;type=technical+report&amp;amp;id=1275&quot;&gt;Combining Total and Ad Hoc Extensible Pattern Matching in a Lightweight Language Extension&lt;/a&gt;. Don Syme, Gregory Neverov and James Margetson.&lt;br &gt;
&lt;blockquote &gt;&lt;p &gt;
Pattern matching of algebraic data types (ADTs) is a standard feature in typed functional programming languages but it is well known that it interacts poorly with abstraction. While several partial solutions to this problem have been proposed, few have been implemented or used. This paper describes an extension to the .NET language F# called ``Active Patterns&#039;&#039;, which supports pattern matching over abstract representations of generic heterogeneous data such as XML and term structures, including where these are represented via object models in other .NET languages. Our design is the first to incorporate both ad hoc pattern matching functions for partial decompositions and ``views&#039;&#039; for total decompositions, and yet remains a simple and lightweight extension. We give a description of the language extension along with numerous motivating examples. Finally we describe how this feature would interact with other reasonable and related language extensions: existential types quantified at data discrimination tags, GADTs, and monadic generalizations of pattern matching.&lt;/blockquote&gt;
&lt;p &gt;
Quite related to the recent discussions of the relationships between libraries, frameworks and language features.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/12">Object-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, 03 May 2007 06:40:27 -0400</pubDate>
</item>
<item>
 <title>A Real-World Use of Lift, a Scala Web Application Framework</title>
 <link>http://lambda-the-ultimate.org/node/2147</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://blog.lostlake.org/index.php?/archives/45-A-real-world-use-of-lift.html#extended&quot;&gt;A Real-World Use of Lift&lt;/a&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
Well, &lt;i &gt;lift&lt;/i&gt; is actually being used in production. I converted a Rails app to &lt;i &gt;lift&lt;/i&gt; and it was a very interesting experience...&lt;/p&gt;
&lt;p &gt;Then we did some benchmarking.  For single request processing, the &lt;i &gt;lift&lt;/i&gt; code, running inside Tomcat, ran 4 times faster than the Rails code running inside Mongrel.  However, the CPU utilization was less than 5% in the &lt;i &gt;lift&lt;/i&gt; version, where it was 100% of 1 CPU (on a dual core machine) for the Rails version.  For multiple simultaneous requests being made from multiple machines, we&#039;re seeing better than 20x performance of the &lt;i &gt;lift&lt;/i&gt; code versus the Rails code with 5 Mongrel instances.  Once again, the &lt;i &gt;lift&lt;/i&gt; code is not using very much CPU and the Rails code is pegging both CPUs.&lt;/p&gt;
&lt;p &gt;In terms of new features, we&#039;ve been able to add new features to the &lt;i &gt;lift&lt;/i&gt; code with fewer defects than with the Rails code.  Our Rails code had 70% code coverage.  We discovered that anything shy of 95% code coverage with Rails means that type-os turn into runtime failures.  We do not have any code coverage metrics for the &lt;i &gt;lift&lt;/i&gt; code, but we have seen only 1 defect that&#039;s been checked in in the 2 weeks since we started using &lt;i &gt;lift&lt;/i&gt; (vs. an average of 1 defect per checkin with the Rails code.)&lt;/p&gt;
&lt;p &gt;So, yes, I&#039;m pimping my own framework, and yes, I&#039;m able to do with &lt;i &gt;lift&lt;/i&gt; what guys like DHH are able to do with Rails, so the comparison is, in some ways, unfair.&lt;/p&gt;
&lt;p &gt;On the other hand, Scala and &lt;i &gt;lift&lt;/i&gt; code can be as brief and expressive as Ruby code.   &lt;i &gt;lift&lt;/i&gt; offers developers amazing productivity gains vs. traditional Java web frameworks, just as Rails does.  On the other hand, &lt;i &gt;lift&lt;/i&gt; code scales much better than Rails code.  &lt;i &gt;lift&lt;/i&gt; code is type-safe and the compiler becomes your friend (this does not mean you should not write tests, but it means that your tests can focus on the algorithm rather than making sure there are no type-os in variable and method names.)
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;I &lt;em &gt;promise&lt;/em&gt; that &quot;Dave Pollak&quot; is not a pseudonym for &quot;Paul Snively.&quot;&lt;/p&gt;
&lt;p &gt;&lt;b &gt;Update:&lt;/b&gt; I guess the self-deprecating humor hasn&#039;t worked, some 400+ reads later. Although the caveat that Dave offers about trying to objectively compare his own framework with Ruby on Rails is well-taken, I think that this nevertheless is an important marker in applying a very PLT-driven language and framework, Scala and lift, to a very realistic application, especially given that it&#039;s a rewrite from a currently-popular language and framework, Ruby and Rails. We admitted proponents of static typing and weird languages are constantly being asked for this sort of thing, and while it&#039;s doubtful that this adds anything to the PLT discussion &lt;i &gt;per se&lt;/i&gt;&amp;mdash;at least until we have a chance to dig into lift and see how Scala&#039;s design uniquely supports it&amp;mdash;I thought people might find the Scala connection worth commenting on.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/12">Object-Functional</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>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/27">XML</category>
 <pubDate>Thu, 22 Mar 2007 12:06:24 -0400</pubDate>
</item>
<item>
 <title>Threads in JavaScript?</title>
 <link>http://lambda-the-ultimate.org/node/2065</link>
 <description>&lt;p &gt;Threads in JavaScript? &quot;&lt;a href=&quot;http://weblogs.mozillazine.org/roadmap/archives/2007/02/threads_suck.html&quot;&gt;Over your dead body&lt;/a&gt;,&quot; says Brendan.&lt;/p&gt;
&lt;p &gt;But Neil Mix begs to differ -- &lt;a href=&quot;http://www.neilmix.com/2007/02/07/threading-in-javascript-17/&quot;&gt;they&#039;re already there&lt;/a&gt;!&lt;/p&gt;
&lt;p &gt;&lt;a href=&quot;http://www.neilmix.com/2007/02/07/threading-in-javascript-17/&quot;&gt;Neil&#039;s latest blog post&lt;/a&gt; presents a cool hack combining JavaScript 1.7&#039;s &lt;a href=&quot;http://developer.mozilla.org/en/docs/New_in_JavaScript_1.7#Generators&quot;&gt;generators&lt;/a&gt; with &lt;a href=&quot;http://lambda-the-ultimate.org/classic/message2428.html&quot;&gt;trampolined style&lt;/a&gt; to implement very lightweight cooperative threads.&lt;/p&gt;
&lt;p &gt;The &lt;a href=&quot;http://www.neilmix.com/demos/js17threading/Thread.js&quot;&gt;implementation&lt;/a&gt; weighs in at a breathtakingly small 4k.&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/31">Javascript</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/12">Object-Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/16">Parallel/Distributed</category>
 <pubDate>Tue, 13 Feb 2007 19:43:50 -0500</pubDate>
</item>
<item>
 <title>Ralf Lammel: Stop dysfunctional programming</title>
 <link>http://lambda-the-ultimate.org/node/2007</link>
 <description>&lt;blockquote &gt;&lt;p &gt;
40 years after the invention of OO, I am ready to appreciate objects quite a bit because I can use them in combination with functional programming. Naturally, I call this mix functional OO programming. (I don’t quite count functional objects in C++ or ‘functors’ in Java, a misnomer BTW, as functional programming.)&lt;/blockquote&gt;
&lt;p &gt;
Ralf &lt;a href=&quot;http://blogs.msdn.com/ralflammel/archive/2007/01/19/stop-dysfunctional-programming-go-for-functional-oo-programming.aspx&quot;&gt;lists &lt;/a&gt; several of his papers that apply the notion of functional OO programming. He also shares his wish list for future versions of C#.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/12">Object-Functional</category>
 <pubDate>Sat, 27 Jan 2007 05:46:19 -0500</pubDate>
</item>
<item>
 <title>Matching Objects With Patterns</title>
 <link>http://lambda-the-ultimate.org/node/1960</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://lampwww.epfl.ch/~emir/written/MatchingObjectsWithPatterns-TR.pdf&quot;&gt;Matching Objects With Patterns&lt;/a&gt;. Burak Emir, Martin Odersky, and John Williams.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;Data in object-oriented programming is organized in a hierarchy of classes. The problem of object-oriented pattern matching is how to explore this hierarchy from the outside. This usually involves classifying objects by their run-time type, accessing their members, or determining some other characteristic of a group of objects. In this paper we compare six different pattern matching techniques: object-oriented decomposition, visitors, type-tests/typecasts, typecase, case classes, and extractors. The techniques are compared on nine criteria related to conciseness, maintainability and performance. The paper introduces case classes and extractors as two new pattern-matching methods and shows that their combination works well for all of the established criteria.&lt;/p&gt;&lt;/blockquote&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/12">Object-Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/32">Scala</category>
 <pubDate>Thu, 04 Jan 2007 15:01:08 -0500</pubDate>
</item>
<item>
 <title>A Core Calculus for Scala Type Checking</title>
 <link>http://lambda-the-ultimate.org/node/1622</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://lampwww.epfl.ch/~odersky/papers/mfcs06.pdf&quot;&gt;A Core Calculus for Scala Type Checking&lt;/a&gt;, is a new paper by the &lt;a href=&quot;http://scala.epfl.ch/&quot;&gt;Scala&lt;/a&gt; team. &lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;Abstract. We present a minimal core calculus that captures interesting constructs of the Scala programming language: nested classes, abstract types, mixin composition, and path dependent types. We show that the problems of type assignment and subtyping in this calculus are decidable.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;The paper revolves around the question of decidability of type checking in Scala. The following quote summarizes the background of this question. &lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;Scala’s approach to component modeling is based on three programming language constructs: modular mixin composition, abstract type members, and explicit self-types. All three have been studied in the vObj calculus. A key concept of the &lt;a href=&quot;http://lampwww.epfl.ch/~odersky/papers/ecoop03.pdf&quot;&gt;vObj calculus&lt;/a&gt;, path-dependent types, is also present in Scala. However, some other constructions of vObj do not correspond to Scala language constructs. In particular, vObj has first-class classes which can be passed around as values, but Scala has not.&lt;br &gt;
First-class classes were essential in establishing an encoding of F&amp;lt;: in vObj, which led to a proof of undecidability of vObj by reduction to the same property in F&amp;lt;:. However, since Scala lacks first-class classes, the undecidability result for the calculus does not imply that type checking for the programming language is undecidable.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Ehud: Given current interest in Scala and its more or less unique (don&#039;t want to raise controversy here) position as being both a functional and an OO language, furthermore being much more than a toy language, would it be a good idea to give Scala a place in the Spotlight section?  &lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/12">Object-Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Fri, 14 Jul 2006 08:01:14 -0400</pubDate>
</item>
<item>
 <title>Event-Based Programming without Inversion of Control</title>
 <link>http://lambda-the-ultimate.org/node/1615</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://lampwww.epfl.ch/~odersky/papers/jmlc06.pdf&quot;&gt;Event-Based Programming without Inversion of Control&lt;/a&gt;. Philipp Haller and Martin Odersky.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;Scala is different from other concurrent languages in that it contains no language support for concurrency beyond the standard thread model offered by the host environment. Instead of specialized language constructs we rely on Scala&#039;s general abstraction capabilities to define higher-level concurrency models. In such a way, we were able to define all essential operations of Erlang&#039;s actor-based process model in the Scala library.&lt;/p&gt;
&lt;p &gt;However, since Scala is implemented on the Java VM, we inherited some of the deficiencies of the host environment when it comes to concurrency, namely low maximum number of threads and high context-switch overhead. In this paper we have shown how to turn this weakness into a strength. By defining a new event-based model for actors, we could increase dramatically their efficiency and scalability. At the same time, we kept to a large extent the programming model of thread-based actors, which would not have been possible if we had switched to a traditional event-based architecture, because the latter causes an inversion of control.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;(There&#039;s not really a proper abstract. The above is from the conclusion.)&lt;/p&gt;
&lt;p &gt;I enjoyed this paper. It&#039;s a quick read and a nice demonstration of some of Scala&#039;s cool features. It&#039;s also a good example of using exceptions as delimited control operators, and in fact the one substantial restriction is imposed by the lack of the more powerful operators. They use Scala&#039;s type system to reduce the burden of this restriction, however, since they&#039;re able to state that a particular statement never returns normally (and thus must not be followed by more statements).&lt;/p&gt;
&lt;p &gt;Those interested in the language/library boundary will also find it interesting for this reason:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;The techniques presented in this paper are a good showcase of the increased flexibility offered by library-based designs. It allowed us to quickly address problems with the previous thread-based actor model by developing a parallel class hierarchy for event-based actors. Today, the two approaches exist side by side. Thread-based actors are still useful since they allow returning from a receive operation. Event-based actors are more restrictive in the programming style they allow, but they are also more efficient.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;They have some fairly impressive empirical scalability results as well.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/12">Object-Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/16">Parallel/Distributed</category>
 <pubDate>Wed, 12 Jul 2006 18:00:58 -0400</pubDate>
</item>
<item>
 <title>JavaScript 2 and the Future of the Web</title>
 <link>http://lambda-the-ultimate.org/node/1530</link>
 <description>&lt;p &gt;Brendan Eich, &lt;a href=&quot;http://developer.mozilla.org/presentations/xtech2006/javascript/&quot;&gt;JavaScript 2 and the Future of the Web&lt;/a&gt;, &lt;a href=&quot;http://xtech06.usefulinc.com/&quot;&gt;XTech 2006&lt;/a&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;Motivation:&lt;/p&gt;
&lt;ul &gt;
&lt;li &gt;Fix problems in JS1 that bug people daily&lt;/li&gt;
&lt;li &gt;A type system to enforce invariants&lt;/li&gt;
&lt;li &gt;Programming in the large&lt;/li&gt;
&lt;li &gt;Support bootstrapping and metaprogramming&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;&lt;a href=&quot;http://weblogs.mozillazine.org/roadmap/&quot;&gt;Brendan Eich&lt;/a&gt; presented these slides recently at a conference on the future of web technology.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/31">Javascript</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/12">Object-Functional</category>
 <pubDate>Thu, 01 Jun 2006 12:39:33 -0400</pubDate>
</item>
<item>
 <title>Typed Concurrent Programming with Logic Variables</title>
 <link>http://lambda-the-ultimate.org/node/1454</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://citeseer.ist.psu.edu/581802.html&quot;&gt;Typed Concurrent Programming with Logic Variables&lt;/a&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
We present a concurrent higher-order programming language called Plain and a&lt;br &gt;
concomitant static type system. Plain is based on logic variables and computes&lt;br &gt;
with possibly partial data structures. The data structures of Plain are procedures, cells, and records. Plain&#039;s type system features record-based subtyping, bounded existential polymorphism, and access modalities distinguishing between reading and writing.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;You may want to compare this with &lt;a href=&quot;http://citeseer.ist.psu.edu/smolka95oz.html&quot;&gt;The Oz Programming Model&lt;/a&gt; (OPM), which&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
... is a concurrent programming model subsuming higher-order functional and object-oriented programming as facets of a general model. This is particularly interesting for concurrent object-oriented programming, for which no comprehensive formal model existed until now. The model can be extended so that it can express encapsulated problem solvers generalizing the problem solving capabilities of constraint logic programming.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Another paper on OPM is &lt;a href=&quot;http://citeseer.ist.psu.edu/collet01operational.html&quot;&gt;The Operational Semantics of Oz&lt;/a&gt;.&lt;/p&gt;
&lt;p &gt;In short, the model of Plain is based on that of Oz with the main differences being:&lt;/p&gt;
&lt;ol &gt;
&lt;li &gt;Plain statically types programs using a type system with subtyping, while Oz is latently typed.
&lt;li &gt;Therefore Plain chooses to drop support for unification in favor of a single-assignment operation.
&lt;/ol&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/13">Logic/Declarative</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/12">Object-Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/29">Semantics</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Fri, 05 May 2006 04:33:38 -0400</pubDate>
</item>
<item>
 <title>OCaml 3.0.9</title>
 <link>http://lambda-the-ultimate.org/node/1113</link>
 <description>&lt;p &gt;
The most &lt;a href=&quot;http://caml.inria.fr/ocaml/release.en.html&quot; target=&quot;_blank&quot;&gt;recent version&lt;/a&gt; of Objective Caml is 3.09.0. It was released on 2005-10-27.
&lt;/p&gt;
&lt;p &gt;
Some of the highlights in release 3.09 are:
&lt;/p&gt;
&lt;ul &gt;
&lt;li &gt;Introduction of private row types, for abstracting the row variable in object and variant types.&lt;/li&gt;
&lt;li &gt;Added warnings Y and Z for local variables that are bound but never used.&lt;/li&gt;
&lt;li &gt;More portable implementation of the -pack option to ocamlopt.&lt;/li&gt;
&lt;/ul&gt;
&lt;p &gt;
For more information, please consult the &lt;a href=&quot;http://caml.inria.fr/pub/distrib/ocaml-3.09/notes/Changes&quot; target=&quot;_blank&quot;&gt;comprehensive list of changes&lt;/a&gt;.
&lt;/p&gt;</description>
 <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/25">Spotlight</category>
 <pubDate>Wed, 09 Nov 2005 22:34:50 -0500</pubDate>
</item>
<item>
 <title>Haskell&#039;s overlooked object system</title>
 <link>http://lambda-the-ultimate.org/node/979</link>
 <description>A &quot;major new release&quot; from Oleg Kiselyov and Ralf Lämmel:&lt;p&gt;
&lt;blockquote&gt;
In a first phase, we demonstrate how far we can get with object-oriented functional programming, if we restrict ourselves to plain Haskell~98. In the second and major phase, we systematically substantiate that Haskell~98, with some common extensions, supports all the conventional OO features plus more advanced ones, including first-class lexically scoped classes, implicitly polymorphic classes, flexible multiple inheritance, safe downcasts and safe co-variant arguments. Haskell indeed can support width and depth, structural and nominal subtyping. We address the particular challenge to preserve Haskell&#039;s type inference even for objects and object-operating functions. Advanced type inference is a strength of Haskell that is worth preserving. Many of the features we get &quot;for free&quot;: the type system of Haskell turns out to be a great help and a guide rather than a hindrance.&lt;/blockquote&gt;&lt;p&gt;
You can download the paper and OOHaskell from &lt;a href=&quot;http://homepages.cwi.nl/~ralf/OOHaskell/&quot;&gt;here&lt;/a&gt;.</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/12">Object-Functional</category>
 <pubDate>Fri, 16 Sep 2005 08:30:36 -0400</pubDate>
</item>
</channel>
</rss>
