<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://lambda-the-ultimate.org">
<channel>
 <title>Lambda the Ultimate - LtU Forum</title>
 <link>http://lambda-the-ultimate.org/taxonomy/term/1/0</link>
 <description>Main Discussion Forum</description>
 <language>en</language>
<item>
 <title>Languages with &#039;unique&#039; programs</title>
 <link>http://lambda-the-ultimate.org/node/4520</link>
 <description>&lt;p &gt;Has there been any PL research into languages where every semantically distinct program has exactly one representation in the source language? In other words, a language where for any given set of inputs, any change in the source text will create a program that for the same set of input produces a different set of outputs than the original program. Basically taking Python&#039;s &quot;there should be one-- and preferably only one --obvious way to do it&quot; philosophy to its logical extreme. I&#039;m interested in how limiting this is on what you can express, since for any two equivalent algorithms only one of them could be written in the language. Is there an established technical term for this I can Google?&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/1">LtU Forum</category>
 <pubDate>Tue, 22 May 2012 09:40:21 -0400</pubDate>
</item>
<item>
 <title>Languages &amp; Niches</title>
 <link>http://lambda-the-ultimate.org/node/4519</link>
 <description>&lt;p &gt;Hi there, I&#039;ve been reading LtU for a while now, but I finally took the plunge and registered. I&#039;m mostly self-taught and I can appreciate the quote by Dominic Fox on the Policies page. Hopefully, at worst I&#039;m a newbie and not a wannabe. Anyways, I&#039;m working on designing my own language, and I&#039;ve actually settled most of the design choices, even started writing up parts of the compiler front-end.&lt;/p&gt;
&lt;p &gt;Before I finally start setting things in stone though, I wanted to step back and make sure I&#039;m not missing anything. I think it&#039;s interesting that the past few stories have been more about the &quot;pragmatics&quot; (if I can sneak in a linguistics term) of languages: adoption, tool-support, an active community. I found the comments to the story on R really interesting &lt;a href=&quot;http://lambda-the-ultimate.org/node/4503#comment-70565&quot;&gt;especially starting here&lt;/a&gt;.&lt;/p&gt;
&lt;p &gt;I think Dennis Ritchie&#039;s advice on not expecting to become a superstar is apt too, but I figure if I&#039;m going to put a lot into this project, shoot for the moon, right? When it comes to adoption though, I think Peter Gabriel&#039;s &quot;&lt;a href=&quot;http://www.jwz.org/doc/worse-is-better.html&quot;&gt;Worse is Better&lt;/a&gt;&quot; makes sense. Needs either arise or remain that other languages don&#039;t fill. It&#039;s almost evolutionary, where a new niche opens up and the first language into it, even if it&#039;s far from perfect, gets the opportunity and support to adapt.&lt;/p&gt;
&lt;p &gt;I&#039;ve read a lot of opinions that handling concurrency well is the current big hurdle to clear, but I&#039;ve also read a few logical arguments that concurrency is a hyped issue. I&#039;m far from the most experienced or smartest about this so I was wondering if anyone, based on their own research or work, had a different opinion on what the great, unfilled niche is. My own impression is that a toolchain and primitives that help simplify parallelism over data and air-tight security are actually stronger needs (like &lt;a href=&quot;http://erights.org/&quot;&gt;E&lt;/a&gt;?), but I could see concurrency being valuable for real-time systems.&lt;/p&gt;
&lt;p &gt;Obviously, I&#039;m going to make the language as complete as possible, but there&#039;s a point past which you just burn yourself out. If there are any articles or papers I should check out, I&#039;d really appreciate it. Besides that, I hope this isn&#039;t too long or off topic, and I look forward to being part of the site.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/1">LtU Forum</category>
 <pubDate>Mon, 21 May 2012 19:54:54 -0400</pubDate>
</item>
<item>
 <title>Predicates, ghost predicates and higher order predicates</title>
 <link>http://lambda-the-ultimate.org/node/4518</link>
 <description>&lt;p &gt;This short &lt;a href=&quot;http://softwareverificaton.wordpress.com/2012/05/17/predicates-ghost-predicates-and-higher-order-predicates/&quot;&gt; article &lt;/a&gt; describes how predicates are handled in Modern Eiffel.&lt;/p&gt;
&lt;p &gt;In a similar manner as with functions(described in &lt;a href=&quot;http://softwareverificaton.wordpress.com/2012/04/30/functions-ghost-functions-and-higher-order-functions/&quot;&gt; Functions ... &lt;/a&gt;), predicates can be ghost predicates and/or higher order predicates.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/1">LtU Forum</category>
 <pubDate>Thu, 17 May 2012 15:27:55 -0400</pubDate>
</item>
<item>
 <title>Encoding System Fw in predicative dependent type theory</title>
 <link>http://lambda-the-ultimate.org/node/4517</link>
 <description>&lt;p &gt;System F&lt;sub &gt;&amp;#969;&lt;/sub&gt; appears impredicative, but I&#039;m wondering if there is an easy way to embed it into predicative dependent type theory by inferring bounds on universes.  Also, if anyone can provide an example of a System F&lt;sub &gt;&amp;#969;&lt;/sub&gt; term that would be rejected by Coq&#039;s typical ambiguity resolver, that would be helpful to me.  &lt;/p&gt;
&lt;p &gt;Any references or thought are appreciated.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/1">LtU Forum</category>
 <pubDate>Thu, 17 May 2012 10:47:47 -0400</pubDate>
</item>
<item>
 <title>[ANN] Call for Speakers - FP Days 2012 - Cambridge, October 25-26th</title>
 <link>http://lambda-the-ultimate.org/node/4516</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://www.fpdays.net/&quot;&gt;FP Days&lt;/a&gt; is a practically-focussed event for people working with or interested in learning Functional Programming. We&#039;re looking for enthusiastic speakers to share their practical experiences of Functional Programming. Accepted speakers pay no conference fees. You don&#039;t have to be a big name and we encourage and support first-time speakers willing to share their experiences.&lt;/p&gt;
&lt;p &gt;CALL FOR SPEAKERS - &lt;strong &gt;SUBMISSION DEADLINE JULY 6TH&lt;/strong&gt;&lt;/p&gt;
&lt;p &gt;We are seeking high-quality session proposals covering any aspect of functional programming.&lt;/p&gt;
&lt;p &gt;Hands-on sessions, experience reports, tutorials, panels and other interactive sessions are particularly encouraged although more theoretical sessions are also welcome.&lt;/p&gt;
&lt;p &gt;In addition to free entry for the conference, being a speaker gives you a unique opportunity to present your viewpoint to our audience and get feedback.&lt;/p&gt;
&lt;p &gt;MAKING A PROPOSAL&lt;/p&gt;
&lt;p &gt;Making a session proposal isn&#039;t difficult. All we require is some basic information on the session you plan to run - enough to judge that it would be of value to our participants.&lt;/p&gt;
&lt;p &gt;Please visit &lt;a href=&quot;http://www.fpdays.net/fpdays2012/index.php&quot;&gt;http://www.fpdays.net/fpdays2012/index.php&lt;/a&gt; for more information.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/1">LtU Forum</category>
 <pubDate>Sun, 13 May 2012 15:32:43 -0400</pubDate>
</item>
<item>
 <title>Reducers - A Library and Model for Collection Processing</title>
 <link>http://lambda-the-ultimate.org/node/4515</link>
 <description>&lt;p &gt;Rich Hickey&#039;s post on &lt;a href=&quot;http://clojure.com/blog/2012/05/08/reducers-a-library-and-model-for-collection-processing.html&quot;&gt;Reducers - A Library and Model for Collection Processing&lt;/a&gt;&lt;/p&gt;
&lt;p &gt;&lt;i &gt;By adopting an alternative view of collections as reducible, rather than seqable things, we can get a complementary set of fundamental operations that tradeoff laziness for parallelism, while retaining the same high-level, functional programming model. Because the two models retain the same shape, we can easily choose whichever is appropriate for the task at hand.&lt;/i&gt;&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/1">LtU Forum</category>
 <pubDate>Tue, 08 May 2012 15:18:09 -0400</pubDate>
</item>
<item>
 <title>Proofs as programs</title>
 <link>http://lambda-the-ultimate.org/node/4514</link>
 <description>&lt;p &gt;Many software developers are turned away from verification techniques because providing proofs for algorithms seems something horrible and pureley theoretical to them. A newcomer to a proof assistant like Coq or Isabelle needs at least two weeks to be able to prove some simple theorems. And it is difficult to realize that &lt;em &gt;proving&lt;/em&gt; has something to do with &lt;em &gt;programming&lt;/em&gt;.&lt;/p&gt;
&lt;p &gt;In order to provide &lt;em &gt;software verification for the masses&lt;/em&gt; a different approach is necessary.&lt;/p&gt;
&lt;p &gt;If one gains more experience with proofs one realizes that writing a proof is not very different from writing a program. Currently I try to exploit the technique of writing a proof like a program. This led to the notion of proof procedures. With proof procedures there is no need to issue proof commands to some proof engine to manipulate the state of the engine. One just writes assertions (i.e. boolean expressions) in a step by step logical manner. A proof look like a procedure.&lt;/p&gt;
&lt;p &gt;The article &lt;a href=&quot;http://softwareverificaton.wordpress.com/2012/05/08/proofs-made-easy-with-proof-procedures/&quot;&gt; &lt;em &gt; Proofs made easy with proof procedures &lt;/em&gt;&lt;/a&gt; describes the basic approach.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/1">LtU Forum</category>
 <pubDate>Tue, 08 May 2012 13:03:14 -0400</pubDate>
</item>
<item>
 <title>On the Naturalness of Software</title>
 <link>http://lambda-the-ultimate.org/node/4513</link>
 <description>&lt;p &gt;A  &lt;a href=&quot;http://earlbarr.com/publications/naturalness.pdf&quot;&gt;paper&lt;/a&gt; in ICSE 2012 by Abram Hindle, Earl Barr, Zhendong Su, Mark Gabel, and Prem Devanbu. Abstract:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
Natural languages like English are rich, complex, and powerful. The highly creative and graceful use of languages like English and Tamil, by masters like Shakespeare and Avvaiyar, can certainly delight and inspire. But in practice, given cognitive constraints and the exigencies of daily life, most human utterances are far simpler and much more repetitive and predictable. In fact, these utterances can be very usefully modeled using modern statistical methods. This fact has led to the phenomenal success of statistical approaches to speech recognition, natural language translation, question-answering, and text mining and comprehension. &lt;/p&gt;
&lt;p &gt;We begin with the conjecture that most software is also natural, in the sense that it is created by humans at work, with all the attendant constraints and limitations—and thus, like natural language, it is also likely to be repetitive and predictable. We then proceed to ask whether a) code can be usefully modeled by statistical language models and b) such models can be leveraged to support software engineers. Using the widely adopted n-gram model, we provide empirical evidence supportive of a positive answer to both these questions. We show that code is also very repetitive, and in fact even more so than natural languages. As an example use of the model, we have developed a simple code completion engine for Java that, despite its simplicity, already improves Eclipse’s built-in completion capability. We conclude the paper by laying out a vision for future research in this area.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;More a visionary paper, but seems to be the best work I&#039;ve seen so far on how to apply ML to programming. &lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/1">LtU Forum</category>
 <pubDate>Mon, 07 May 2012 10:55:53 -0400</pubDate>
</item>
<item>
 <title>Feather: A Heapless Functional Programming Language</title>
 <link>http://lambda-the-ultimate.org/node/4512</link>
 <description>&lt;p &gt;Hi all!&lt;/p&gt;
&lt;p &gt;I&#039;m busy designing my third language (or, redesigning the first, depending on how you look at it). I changed Feather to be a heapless functional programming language. Primarily, this means there is no need for a garbage collector. Programs for embedded devices that have real-time constraints stand to benefit the most from this. With any luck, we could get a subset to compile to some GPUs.&lt;/p&gt;
&lt;p &gt;Here&#039;s the design as it is. Note that I use underscores for tabs whitespace due to forum restrictions -&lt;/p&gt;
&lt;p &gt;&lt;code &gt;&lt;br &gt;
The Feather Programming Language is a heapless functional programming language for real-time software, especially on embedded devices. It is a compiled language with a Hindley-Milner type-inferencing algorithm and strict function argument evaluation.&lt;/p&gt;
&lt;p &gt;Feather’s lack of heap is accomplished by extending the end frame pointer for previous stack frames whose return slot uses the data of the successive frames that the end frame pointer is extended over. This elides the need for any type of garbage collection. The cost is that a bunch of dead ‘popped’ variables also get extended over, but this shouldn’t be a big problem in practice when using the techniques described next. Feather can also return closures, but that means the end frame pointer must be extended over the closed-over values, so they must be used with caution.&lt;/p&gt;
&lt;p &gt;Non-consable return values are placed at the beginning of the next stack frame and the previous end frame pointer is extended over it.&lt;/p&gt;
&lt;p &gt;Consable return values like lists and maps are treated with more care. When a consable value is to be returned, 8 to 32 slots are allocated at the beginning of the new stack frame, and any conses that take place on the consable return value are placed in one of those slots. (In fact, there may need to be a way to specify what the beginning slot count should be for a given function call.) Further, any conses on those conses will also be placed in one of those slots. If the return slots are finally filled, then n * 4 new slots are allocated past the last stack variable for further use, and so on. An analyzer could be hooked in at run-time to track the average and max allocations needed at each call site to eliminate most needs to do secondary (and so on) allocations for consable return values.&lt;/p&gt;
&lt;p &gt;There may also be a special cons that allows temporary conses to be used on consable return value that are _not_ placed in the return slots. If one of these accidentally makes it into the returned cons structure, it will be wasteful due to extending the return frame end pointer over that stack variable - but will not be terminal to the program.&lt;/p&gt;
&lt;p &gt;With these technique, I think a minimum amount of space will be wasted on dead varables, but we&#039;ll have to see for sure. Tail-call optimizations should be possible with this set up.&lt;/p&gt;
&lt;p &gt;There will almost certainly be some restrictions on language&#039;s expressiveness due to the heaplessness, but we&#039;ll discover and work around those as we go along. For example, I&#039;m not sure if monads will be implementable without a heap, but the syntax is there in case we can.&lt;/p&gt;
&lt;p &gt;Some syntax -&lt;/p&gt;
&lt;p &gt;/* multi-line comment /* nests */*/&lt;br &gt;
// line comment&lt;br &gt;
/// Documentation comments are done exactly the same as in F#.&lt;/p&gt;
&lt;p &gt;// function definition syntax uses powerful mix-fixity and repetition specification&lt;br &gt;
define two as 1 + 1&lt;br &gt;
define double [x] as 2 * x&lt;br &gt;
define [x] times [y] as x * y&lt;br &gt;
define [x] *** [y] precedence 0.5 as x * x * y * y&lt;br &gt;
define if [condition] then [lazy consequent] else [lazy alternate] as condition ? consequent ?? alternate // ? and ?? are the built-in ternary operator&lt;br &gt;
define let ([n] be [x] *and) in [e] with (Name n, Expr e) as…&lt;br &gt;
define sqrt [x] requiring x &amp;gt;= 0 as… // &#039;requiring&#039; specifies function contract (&#039;ensuring&#039; might mean post-condition).&lt;/p&gt;
&lt;p &gt;// function signatures&lt;br &gt;
asFloat :: x -&amp;gt; y |&amp;gt; (Number x, Float y)&lt;br &gt;
let :: ((n, x), e) -&amp;gt; r |&amp;gt; (Name n, Expr e) // function signatures only use the major word&lt;/p&gt;
&lt;p &gt;(map)________// partial application. Same as (x, y) ~&amp;gt; x map y&lt;br &gt;
(xs map)_____// same as x ~&amp;gt; xs map x&lt;br &gt;
[map]________// translation to a fully curried function. Same as x ~&amp;gt; y ~&amp;gt; x map y&lt;br &gt;
(f) . (g)____// function composition&lt;/p&gt;
&lt;p &gt;() // unit&lt;br &gt;
&#039;c&#039; // char&lt;br &gt;
&quot;string&quot; // string&lt;br &gt;
$(1, 2, 3) // list&lt;br &gt;
$[1, 2, 3] // vector&lt;br &gt;
${1, 2, 3} // tuple&lt;br &gt;
$((&quot;Jim&quot;, 1), (&quot;Bob&quot;, 2)) // association list&lt;br &gt;
$[[&quot;Jim&quot;, 1], [&quot;Bob&quot;, 2]] // dictionary&lt;br &gt;
${{a, b, c}} // set&lt;/p&gt;
&lt;p &gt;double 5&lt;br &gt;
2 times 3&lt;br &gt;
(x + y) * z&lt;br &gt;
x = 5 // equality&lt;br &gt;
x : xs // cons&lt;br &gt;
x | 0xff // all characters in a hex literal must be lower-case (including the &#039;x&#039; separator)&lt;br &gt;
true &amp;amp; false // and operator (non-short-circuiting version)&lt;br &gt;
true &amp;amp;&amp;amp; false // and operator (short-circuiting version)&lt;br &gt;
set x to 5 // x is a variable (mutable)&lt;br &gt;
set x to $(1..5)&lt;br &gt;
set x : xs to $(1, 2, 3)&lt;br &gt;
aVector !! 5 // look up 5th element&lt;br &gt;
lazy 1 + 1 // use lazy evaluation. NOTE: not sure how well this will work in a heapless language…&lt;/p&gt;
&lt;p &gt;(x, y) ~&amp;gt; x * x - y&lt;br &gt;
steps print 1 then print 7&lt;br &gt;
if 3 
let x be 10 and y be 13 in x + y&lt;br &gt;
$(1, 2, 3) map (+ 3) filter (isOdd) // because of white space, (+ 3) != (+3)&lt;br &gt;
for x from someList and y from $(1..5) and where y isOdd then lift x * y&lt;/p&gt;
&lt;p &gt;// recommended indentation&lt;br &gt;
let&lt;br &gt;
____x be 10 and&lt;br &gt;
____y be 88 and&lt;br &gt;
____z be 12 in&lt;br &gt;
____x + y * z&lt;/p&gt;
&lt;p &gt;// sequential expression&lt;br &gt;
steps&lt;br &gt;
____print 1 then&lt;br &gt;
____print 7 then&lt;br &gt;
____print &quot;Hi!&quot;&lt;/p&gt;
&lt;p &gt;// choice expression&lt;br &gt;
choose&lt;br &gt;
____when x = 5 then print 22&lt;br &gt;
____when x &amp;gt;= 5 then print 33&lt;br &gt;
____when x 
____else print 55&lt;/p&gt;
&lt;p &gt;// simple match&lt;br &gt;
match m&lt;br &gt;
____with x : xs then x&lt;br &gt;
____with ${x, x, _} then x&lt;br &gt;
____else m&lt;/p&gt;
&lt;p &gt;// multi-match&lt;br &gt;
match m and n&lt;br &gt;
____with x : xs and x then m&lt;br &gt;
____else n&lt;/p&gt;
&lt;p &gt;// match chain&lt;br &gt;
match m&lt;br &gt;
____with x : xs where x = 5 then xs&lt;br &gt;
____else $()&lt;/p&gt;
&lt;p &gt;// restricted match (makes inferred function type more specific when using a match)&lt;br &gt;
match m as Int&lt;br &gt;
____with 0 then 10&lt;br &gt;
____with 1 then 20&lt;br &gt;
____else 100&lt;/p&gt;
&lt;p &gt;// monad comprehension&lt;br &gt;
for&lt;br &gt;
____x from someList and&lt;br &gt;
____y from $(1..5) and&lt;br &gt;
____where y isOdd then&lt;br &gt;
____lift x * y&lt;/p&gt;
&lt;p &gt;// functional types&lt;br &gt;
data...________// like Haskell data&lt;br &gt;
synonym..._____// like Haskell type&lt;br &gt;
derivation...__// like Haskell newtype&lt;br &gt;
protocol...____// like Haskell class&lt;br &gt;
instance…______// like Haskell instance&lt;/p&gt;
&lt;p &gt;----&lt;/p&gt;
&lt;p &gt;Error handling - Uses a system similar to scheme&#039;s Condition system.&lt;/p&gt;
&lt;p &gt;----&lt;/p&gt;
&lt;p &gt;Literal numbers are Int by default -&lt;br &gt;
5(u)b________// (U)Byte - 8-bit&lt;br &gt;
5(u)s________// (U)Short - 16-bit&lt;br &gt;
5(u)_________// (U)Int - 32-bit&lt;br &gt;
5(u)g________// (U)Long - 64-bit&lt;br &gt;
5.0__________// Float - 32-bit&lt;br &gt;
5d___________// Double - 64-bit&lt;br &gt;
5(u)n________// (U)NInt – Native-size integer – varies by hardware platform.&lt;/p&gt;
&lt;p &gt;----&lt;/p&gt;
&lt;p &gt;Function type arrows –&lt;br &gt;
-&amp;gt; - Describes a function of inferred, unspecified, or dependent purity&lt;br &gt;
=&amp;gt; - Describes a pure function&lt;br &gt;
:&amp;gt; - Describes an impure function&lt;/p&gt;
&lt;p &gt;----&lt;/p&gt;
&lt;p &gt;Uses of semi-colon -&lt;br &gt;
fn (1, 2, 3; &#039;a&#039;, &#039;b&#039;, &#039;c&#039;) // ; separates repeated parameters&lt;br &gt;
fn2 (1, ; &#039;a&#039;) // ; omits optional parameters&lt;br &gt;
class Thing expose attribute Age as var UInt; print 5 // ; manually ends expr scope without a newline. Note that classes aren’t in the language anymore.&lt;/p&gt;
&lt;p &gt;----&lt;/p&gt;
&lt;p &gt;Miscellaneous rules -&lt;br &gt;
import… // very similar to Haskell&#039;s import, but much simpler and less error prone&lt;br &gt;
Module.fn // qualifies fn with module name. A.b != a . b due to whitespace (and apparently capitalization). In the expression Module.(+), the parens are required for symbolic operator qualification.&lt;br &gt;
shadowed fn // calls the function that the current function is shadowing… might be a special form&lt;br &gt;
rest… // the rest parameters with name rest&lt;br &gt;
rule: indentation defines scope&lt;br &gt;
rule: symbolic operators like + and * have specifiable precedence and associativity, textual ones do not&lt;br &gt;
rule: symbolic operators take precedence over all textual operators&lt;br &gt;
rule: symbolic operators can be sequenced and so can textual ones, but they cannot be sequenced together in the same function specification.&lt;br &gt;
rule: &#039;if&#039; is a major word since it&#039;s the beginning of a sequence and &#039;then&#039; and &#039;else&#039; are minor words since they&#039;re in the tail of a sequence.&lt;br &gt;
rule: symbolic chars cannot be mixed with alphanumeric chars in the same word, and neither can be mixed with delimiters such as (, ), {, }, [, and ]. Sadly this means we can’t have meaningful (|banana clips|) or [|oxford brackets|].&lt;br &gt;
rule: words in an ongoing sequence take precedence over a single word or words beginning a new sequence.&lt;br &gt;
rule: the point where a function is injected is its application site, even if it is partially applied with no arguments, like map in the expression fn (map).&lt;br &gt;
rule: purity means more than just no immediate side-effects; it means referentially transparent.&lt;br &gt;
rule: expressions should generally be readable from left to right and top to bottom.&lt;br &gt;
rule: there are 3 types of function purity – pure, impure, and dependent. Only higher order functions can be dependent. A dependent function resolves to pure or impure depending on how it is invoked. If one or more of its parameter functions is impure, it becomes impure. Otherwise, its purity depends on whether it calls other impure functions.&lt;br &gt;
rule: a function with impure contents can be forced to be have a pure type with the pure function modifier. This allows most pure functions to be inferred, and the remaining be manually declared as such.&lt;br &gt;
rule: all module, type, protocol, and type / data constructor names start with an uppercase letter. This makes pattern matching much easier to use (this is what Haskell does).&lt;br &gt;
rule: the only time you need to qualify a name with the module is when it collides with another imported name.&lt;br &gt;
rule: operator precedence and associativity is the same as in C, but with floating point precedence values (is that a good idea if the embedded systems might not have floating-point acceleration?)&lt;br &gt;
rule: like python and its recommended &#039;pythonic&#039; style philosophy, there is a similar recommended philosophy in Feather. In Feather, there is always a single best way to do any one thing, and it should be obvious. This won&#039;t always be achievable, but is a good language goal.&lt;br &gt;
rule: textual operators should typically be written in an active voice.&lt;br &gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p &gt;So anyways, I&#039;ll keep designing this until I get a chance to start implementing it. I&#039;ve already implemented a pure functional programming language with F# (see AmlProject at SourceForge), so I&#039;ve got enough confidence to start on this one. I&#039;m thinking I&#039;ll use LLVM to build the compiler.&lt;/p&gt;
&lt;p &gt;Hopefully this language will finally allow us to program stuff like games for embedded devices and console in a functional style.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/1">LtU Forum</category>
 <pubDate>Sun, 06 May 2012 21:40:30 -0400</pubDate>
</item>
<item>
 <title>Subtyping and dependent types</title>
 <link>http://lambda-the-ultimate.org/node/4511</link>
 <description>&lt;p &gt;Hi,&lt;br &gt;
I&#039;m thinking about combining subtyping with dependent types, and would like to hear from the community if there&#039;s something similar already done or published.&lt;br &gt;
My idea is to allow stablishing subtyping derivations for any new type. For polymorhphic types, the programmer is allows to specify whether each parameter is co or contra variant in relation with subtyping. Then, I would also like to say a type A is subtype of another B if the meaning of A via the proposition-as-types isomorphism can be derived from the meaning of B. Does it sound reasonable?&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/1">LtU Forum</category>
 <pubDate>Sat, 05 May 2012 05:57:56 -0400</pubDate>
</item>
<item>
 <title>Pythonect 0.2.0 Release</title>
 <link>http://lambda-the-ultimate.org/node/4509</link>
 <description>&lt;p &gt;Hi All,&lt;/p&gt;
&lt;p &gt;I am pleased to announce the release of Pythonect 0.2.0, available from &lt;a href=&quot;https://github.com/downloads/ikotler/pythonect/Pythonect-0.2.0.tar.gz&quot;&gt;https://github.com/downloads/ikotler/pythonect/Pythonect-0.2.0.tar.gz&lt;/a&gt;&lt;/p&gt;
&lt;p &gt;This version fixes several bugs and adds a couple of new features.&lt;/p&gt;
&lt;p &gt;Many thanks to everyone who contributed bug reports and feedback that went into this release!&lt;br &gt;
&lt;br &gt;&lt;br &gt;
What&#039;s New in Pythonect 0.2?&lt;br &gt;
============================&lt;br &gt;
&lt;br &gt;&lt;br &gt;
Core and builtins&lt;br &gt;
-----------------&lt;br &gt;
&lt;br &gt;&lt;br &gt;
- Feature #8: Implemented Autoloading. For example:&lt;br &gt;
&lt;code &gt;&lt;br &gt;
    &quot;Hello, world&quot; -&amp;gt; sys.stdout.write&lt;br &gt;
&lt;/code&gt;&lt;br &gt;
is equivalent to:&lt;br &gt;
&lt;code &gt;&lt;br &gt;
    import sys -&amp;gt; &quot;Hello, world&quot; -&amp;gt; sys.stdout.write&lt;br &gt;
&lt;/code&gt;&lt;br &gt;
- Feature #7: Python built-in dictionary as a switch statement. For example:&lt;br &gt;
&lt;code &gt;&lt;br &gt;
    1 -&amp;gt; {1: &#039;One&#039;, 2: &#039;Two&#039;} -&amp;gt; print&lt;br &gt;
&lt;/code&gt;&lt;br &gt;
will print:&lt;br &gt;
&lt;code &gt;&lt;br &gt;
    &#039;One&#039;&lt;br &gt;
&lt;/code&gt;&lt;br &gt;
- Issue #6: Interpreter prints Strings without quotes&lt;br &gt;
&lt;br &gt;&lt;br &gt;
- Issue #5: Interpreter lags when pressing Enter key multiple times&lt;br &gt;
&lt;br &gt;&lt;br &gt;
Build&lt;br &gt;
-----&lt;br &gt;
&lt;br &gt;&lt;br &gt;
- Issue #4: Pythonect reports incorrect version if installed via pip/sdist.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/1">LtU Forum</category>
 <pubDate>Mon, 30 Apr 2012 15:00:56 -0400</pubDate>
</item>
<item>
 <title>Tuples, functions, ghost functions and higher order functions</title>
 <link>http://lambda-the-ultimate.org/node/4508</link>
 <description>&lt;p &gt;Software verification depends on clearly specified functions with well defined properties. Functions can be objects by themselves, i.e. they should be first class values.&lt;/p&gt;
&lt;p &gt;Tuples can be used to treat functions with zero, one or more arguments and one or more return values uniformly. The article &lt;a href=&quot;http://softwareverificaton.wordpress.com/2012/04/29/tuples-and-functions/&quot;&gt; Tuples and functions &lt;/a&gt; demonstrate the versatility of tuples.&lt;/p&gt;
&lt;p &gt;Functions might be computable or not computable. Clearly, in actual computations only computable functions can be used. However on the assertions level (when one reasons about computations) not computable functions are a powerful tool (as long as the functions are well defined). Ghost functions can be defined to fill this gap.&lt;/p&gt;
&lt;p &gt;Higher order functions (i.e. functions that take functions as arguments and/or return functions as values) are standard in functional programming style. Higher order functions help to reason about software and can structure the assertions needed.&lt;/p&gt;
&lt;p &gt;The article &lt;a href=&quot;http://softwareverificaton.wordpress.com/2012/04/30/functions-ghost-functions-and-higher-order-functions/&quot;&gt; Ghost functions and higher order functions &lt;/a&gt; describes the basic concepts. &lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/1">LtU Forum</category>
 <pubDate>Mon, 30 Apr 2012 10:55:35 -0400</pubDate>
</item>
<item>
 <title>Evaluating the Design of the R Language</title>
 <link>http://lambda-the-ultimate.org/node/4507</link>
 <description>&lt;p &gt;From our &lt;a href=&quot;http://lambda-the-ultimate.org/node/4503&quot;&gt;recent discussion&lt;/a&gt; on R, I thought &lt;a href=&quot;http://www.cs.purdue.edu/homes/jv/pubs/ecoop12.pdf&quot;&gt;this paper&lt;/a&gt; deserved its own post (ECOOP final version) by Floreal Morandat, Brandon Hill, Leo Osvald, and Jan Vitek; abstract:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;R is a dynamic language for statistical computing that combines lazy functional features and object-oriented programming. This rather unlikely linguistic cocktail would probably never have been prepared by computer scientists, yet the language has become surprisingly popular. With millions of lines of R code available in repositories, we have an opportunity to evaluate the fundamental choices underlying the R language design. Using a combination of static and dynamic program analysis we assess the success of different language features.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Excerpts from the paper:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;R comes equipped with a rather unlikely mix of features. In a nutshell, R is a dynamic language in the spirit of Scheme or JavaScript, but where the basic data type is the vector. It is functional in that functions are ﬁrst-class values and arguments are passed by deep copy. Moreover, R uses lazy evaluation by default for all arguments, thus it has a pure functional core. Yet R does not optimize recursion, and instead encourages vectorized operations. Functions are lexically scoped and their local variables can be updated, allowing for an imperative programming style. R targets statistical computing, thus missing value support permeates all operations.&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote &gt;&lt;p &gt;One of our discoveries while working out the semantics was how eager evaluation of promises turns out to be. The semantics captures this with C[]; the only cases where promises are not evaluated is in the arguments of a function call and when promises occur in a nested function body, all other references to promises are evaluated. In particular, it was surprising and unnecessary to force assignments as this hampers building inﬁnite structures. Many basic functions that are lazy in Haskell, for example, are strict in R, including data type constructors. As for sharing, the semantics cleary demonstrates that R prevents sharing by performing copies at assignments.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote &gt;&lt;p &gt;The R implementation uses copy-on-write to reduce the number of copies. With superassignment, environments can be used as shared mutable data structures. The way assignment into vectors preserves the pass-by-value semantics is rather unusual and, from personal experience, it is unclear if programmers understand the feature. ... It is noteworthy that objects are mutable within a function (since ﬁelds are attributes), but are copied when passed as an argument.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;But then, they do a corpus analysis to see what features programmers actually use! We don&#039;t do enough of these in PL; examples from the paper:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;R symbol lookup is context sensitive. This feature, which is neither Lisp nor Scheme scoping, is exercised in less than 0.05% of function name lookups...The only symbols for which this feature actually mattered in the Bioconductor vignettes are c and file, both popular variables names and built-in functions.&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote &gt;&lt;p &gt;Lazy evaluation is a distinctive feature of R that has the potential for reducing unnecessary work performed by a computation. Our corpus, however, does not bear this out. Fig. 14(a) shows the rate of promise evaluation across all of our data sets. The average rate is 90%. Fig. 14(b) shows that on average 80% of promises are evaluated in the ﬁrst function they are passed into.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;And so on. A lot of great data-driven insights. &lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/1">LtU Forum</category>
 <pubDate>Tue, 24 Apr 2012 20:34:10 -0400</pubDate>
</item>
<item>
 <title>Inheritance and formal verification of software</title>
 <link>http://lambda-the-ultimate.org/node/4506</link>
 <description>&lt;p &gt;Inheritance is an important technique for abstraction in object oriented software. Functional languages like Haskell have some form of inheritance of concepts as well (e.g. the class Eq).&lt;/p&gt;
&lt;p &gt;Verification techniques should therefore take inheritance into account. &lt;/p&gt;
&lt;p &gt;By looking further into the topic it becomes evident that inheritance is a good vehicle for program verification as well i.e. inheritance helps verification. &lt;/p&gt;
&lt;p &gt;Abstract classes can make some assumptions and prove some other properties based on the assumptions and the defined functions within the absract class.&lt;/p&gt;
&lt;p &gt;A descendant of the abstract concepts just needs to substantiate the assumptions and can inherit all the proved proved properties of the abstract concept.&lt;/p&gt;
&lt;p &gt;This technique is described in the &lt;a href=&quot;http://softwareverificaton.wordpress.com/2012/04/23/inheritance/&quot;&gt; article &quot;inheritance&quot; &lt;/a&gt; and demonstrated with some examples like equality, partial order and total order.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/1">LtU Forum</category>
 <pubDate>Tue, 24 Apr 2012 10:23:08 -0400</pubDate>
</item>
<item>
 <title>Frenetic</title>
 <link>http://lambda-the-ultimate.org/node/4505</link>
 <description>&lt;p &gt;&lt;b &gt;Frenetic&lt;/b&gt; is a Python-embedded combinator notation for writing the control software for &lt;a href=&quot;http://www.openflow.org/wp/learnmore/&quot;&gt;OpenFlow&lt;/a&gt; software-defined networking switches.&lt;/p&gt;
&lt;p &gt;&lt;a href=&quot;http://frenetic-lang.org/papers/frenetic-presto.pdf&quot;&gt;Frenetic: A High-Level Language for OpenFlow Networks&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;Most interfaces for programming network devices are deﬁned at the low level of abstraction supported by the underlying hardware, which leads to complicated programs that are prone to errors. This paper proposes a high-level programming language for OpenFlow networks based on ideas originally developed in the functional programming community. Our language, called Frenetic, includes a rich pattern algebra for classifying packets, a “program like you see every packet” abstraction, and a run-time system that automatically generates the low-level packet-processing rules. We describe the design and implementation of Frenetic, and show how to use it to implement common management tasks.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;&lt;a href=&quot;http://frenetic-lang.org/papers/frenetic-icfp11.pdf&quot;&gt;Frenetic: A Network Programming Language&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;This paper presents Frenetic, a high-level language for programming distributed collections of network switches. Frenetic provides a declarative query language for classifying and aggregating network trafﬁc as well as a functional reactive combinator library for describing high-level packet-forwarding policies. Unlike prior work in this domain, these constructs are—by design—fully compositional, which facilitates modular reasoning and enables code reuse. This important property is enabled by Frenetic’s novel runtime system which manages all of the details related to installing, uninstalling, and querying low-level packet-processing rules on physical switches.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;&lt;a href=&quot;http://frenetic-lang.org/papers/frenetic-popl12.pdf&quot;&gt;A Compiler and Run-time System for Network Programming Languages&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;In this paper, we deﬁne a high-level, declarative language, called NetCore , for expressing packet-forwarding policies on SDNs. NetCore is expressive, compositional, and has a formal semantics. To ensure that a majority of packets are processed efﬁciently on switches—instead of on the controller—we present new compilation algorithms for NetCore and couple them with a new run-time system that issues rule installation commands and trafﬁc-statistics queries to switches. Together, the compiler and run-time system generate efﬁcient rules whenever possible and outperform the simple, manual techniques commonly used to program SDNs today. In addition, the algorithms we develop are generic, assuming only that the packet-matching capabilities available on switches satisfy some basic algebraic laws.&lt;/p&gt;&lt;/blockquote&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/1">LtU Forum</category>
 <pubDate>Sun, 22 Apr 2012 21:52:14 -0400</pubDate>
</item>
</channel>
</rss>

