<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://lambda-the-ultimate.org">
<channel>
 <title>Lambda the Ultimate - DSL</title>
 <link>http://lambda-the-ultimate.org/taxonomy/term/24/0</link>
 <description>Domain Specific Languages</description>
 <language>en</language>
<item>
 <title>Introducing PathQuery, Google&#039;s Graph Query Language</title>
 <link>http://lambda-the-ultimate.org/introducing-google-path-query</link>
 <description>&lt;p &gt;&lt;a href=&quot;https://arxiv.org/abs/2106.09799&quot;&gt;Introducing PathQuery, Google&#039;s Graph Query Language&lt;/a&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;We introduce PathQuery, a graph query language developed to scale with Google&#039;s query and data volumes as well as its internal developer community. PathQuery supports flexible and declarative semantics. We have found that this enables query developers to think in a naturally &quot;graphy&quot; design space and to avoid the additional cognitive effort of coordinating numerous joins and subqueries often required to express an equivalent query in a relational space. Despite its traversal-oriented syntactic style, PathQuery has a foundation on a custom variant of relational algebra -- the exposition of which we presently defer -- allowing for the application of both common and novel optimizations. We believe that PathQuery has withstood a &quot;test of time&quot; at Google, under both large scale and low latency requirements. We thus share herein a language design that admits a rigorous declarative semantics, has scaled well in practice, and provides a natural syntax for graph traversals while also admitting complex graph patterns.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Things that are somewhat interesting to me, from an engineering standpoint:&lt;/p&gt;
&lt;p &gt;1. PathQuery has a module/compilation system, enabling re-use of PathQuery modules across projects.  (Someone had mentioned that Google has around 40,000 PathQuery modules already, internally...)&lt;br &gt;
2. PathQuery supports native functions so that some query pieces can be evaluated procedurally (peephole optimization)&lt;br &gt;
3. Use of relational algebra to enable a lot of known optimizations, plus future optimizations&lt;/p&gt;
&lt;p &gt;Also, from a socio-linguistic perspective, Graph Languages are effectively the new Object-Relational Mapping layer, but they solve an interesting organizational problem of allowing multiple teams to code in different languages, without needing to re-write / re-implement entities and mapping configurations in each language.  It&#039;s the Old New Thing again...&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/24">DSL</category>
 <pubDate>Wed, 30 Jun 2021 13:23:37 +0000</pubDate>
</item>
<item>
 <title>Type Systems as Macros</title>
 <link>http://lambda-the-ultimate.org/node/5426</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://www.ccs.neu.edu/home/stchang/pubs/ckg-popl2017.pdf&quot;&gt;Type Systems as Macros&lt;/a&gt;, by Stephen Chang, Alex Knauth, Ben Greenman:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;We present TURNSTILE, a metalanguage for creating typed embedded languages. To implement the type system, programmers write type checking rules resembling traditional judgment syntax. To implement the semantics, they incorporate elaborations into these rules. TURNSTILE critically depends on the idea of linguistic reuse. It exploits a &lt;em &gt;macro system&lt;/em&gt; in a novel way to simultaneously type check and rewrite a surface program into a target language. Reusing a macro system also yields modular implementations whose rules may be mixed and matched to create other languages. Combined with typical compiler and runtime reuse, TURNSTILE produces performant typed embedded languages with little effort.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;This looks pretty awesome considering it&#039;s not limited to simple typed languages, but extends all the way to System F and F-omega! Even better, they can reuse previous type systems to define new ones, thereby reducing the effort to implement more expressive type systems. All code and further details &lt;a href=&quot;http://www.ccs.neu.edu/home/stchang/popl2017/&quot;&gt;available here&lt;/a&gt;, and &lt;a href=&quot;http://blog.racket-lang.org/2017/04/type-tailoring.html&quot;&gt;here&#039;s a blog post&lt;/a&gt; where Ben Greenman further discusses the related &quot;type tailoring&quot;, and of course, these are both directly related to &lt;a href=&quot;http://lambda-the-ultimate.org/node/1339&quot;&gt;Active Libraries&lt;/a&gt;.&lt;/p&gt;
&lt;p &gt;Taken to its extreme, why not have an assembler with a powerful macro system of this sort as your host language, and every high-level language would be built on this. I&#039;m not sure if this approach would extend that far, but it&#039;s an interesting idea. You&#039;d need a cpp-like highly portable macro tool, and porting to a new platform consists of writing architecture-specific macros for some core language, like System F.&lt;/p&gt;
&lt;p &gt;This work may also conceptually dovetail with &lt;a href=&quot;http://lambda-the-ultimate.org/node/5424&quot;&gt;another thread discussing fexprs and compilation&lt;/a&gt;.&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/11">Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/20">Lambda Calculus</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/15">Meta-Programming</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Wed, 19 Apr 2017 23:38:56 +0000</pubDate>
</item>
<item>
 <title>kdb+ 3.5 released last month</title>
 <link>http://lambda-the-ultimate.org/node/5420</link>
 <description>&lt;p &gt;kdb+ is a real-time time series database, known in the financial services universe as the fastest tick database on the market. It was first conceived by Arthur Whitney at Morgan Stanley as a prototype, and over the last 35+ years has grown to add many features.  The database makes such aggressive usage of mmap() POSIX function for mapping file chunks into main memory, to the point where it has exposed issues with the implementation of mmap itself.&lt;/p&gt;
&lt;p &gt;Recently, the company now behind kdb+ has also built &lt;a href=&quot;https://kx.com/media/2017/02/9.-Kx-for-DaaS-Flyer.pdf&quot;&gt;Kx for DAAS&lt;/a&gt; (Data-as-a-Service), which is basically a cloud-based, massively clustered version of kdb+ that deals with the curious oddity that kdb+ is effectively entirely singly threaded. For those interested in reading more about kdb+&#039;s unique cloud architecture (as compared to &quot;big data&quot; solutions like Hadoop), you can read the following whitepapers as suggestive guidelines for how the q community thinks about truly &quot;big data&quot; several orders of magnitude faster and larger than most Hadoop data sets:&lt;/p&gt;
&lt;ul &gt;
&lt;li &gt;&lt;a href=&quot;http://code.kx.com/qref/wp/query_routing_a_kdb_framework_for_a_scalable_load_balanced_system.pdf&quot;&gt;Query Routing: a kdb+ Framework for a Scalable, Load Balanced System&lt;/a&gt; (whitepaper) and &lt;a href=&quot;https://www.youtube.com/watch?v=junVwvU0J0g&quot;&gt;Kevin Holsgrove: Query Routing, A kdb+ Framework for a Scalable, Load Balanced System&lt;/a&gt; (YouTube talk from Kx Meet-up last year)&lt;/li&gt;
&lt;li &gt;&lt;a href=&quot;http://code.kx.com/qref/wp/common_design_principles_for_kdb_gateways.pdf&quot;&gt;Common Design Principles for kdb+ Gateways&lt;/a&gt;&lt;/li&gt;
&lt;li &gt;&lt;a href=&quot;http://code.kx.com/qref/wp/a_natural_query_interface_for_distributed_systems.pdf&quot;&gt;A Natural Query Interface for Distributed Systems&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p &gt;While I don&#039;t suggest these papers are the blueprint for copying/mimicking the DAAS product, it does help the LtU reader imagine a &quot;different world&quot; of data processing than the often cited Map/Reduce paper and other more mainstream approaches.  What is particularly striking is how tiny q.exe (the program that runs kdb+ and provides a CLI for q scripting) is.  Language researchers are looking at provably correct C compilers, and it is not a huge leap to think about the world soon seeing provably correct real-time time series databases using kdb+ as an inspiration.&lt;/p&gt;
&lt;p &gt;Another curiosity, relevant to us here at LtU, is that kdb+ has its own programming language, q. q is a variant of APL with a special library for statistics. Most &quot;big data&quot; solutions don&#039;t have native implementations for weighted average, which is a fairly important and frequently used function in quantitative finance, useful for computing volume weighted average price (VWAP) as well as tilt and weighted spread. q is itself implemented in another language, k. The whole language of each is just a couple lines of (terse) code.&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/16">Parallel/Distributed</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/34">Scientific Programming</category>
 <pubDate>Sat, 25 Mar 2017 15:45:23 +0000</pubDate>
</item>
<item>
 <title>PowerShell is open sourced and is available on Linux </title>
 <link>http://lambda-the-ultimate.org/node/5367</link>
 <description>&lt;p &gt;Long &lt;a href=&quot;https://news.ycombinator.com/item?id=12313179&quot;&gt;HN thread&lt;/a&gt; ensues. Many of the comments discuss the benefits/costs of basing pipes on typed objects rather than text streams. As someone who should be inclined in favor of the typed object approach  I have to say that I think the text-only folks have the upper hand at the moment. Primary reason is that text as a lingua franca between programs ensures interoperability (and insurance against future changes to underlying object models) and self-documenting code. Clearly the Achilles&#039; heel is parsing/unparsing.&lt;/p&gt;
&lt;p &gt;As happens often, one is reminded of the discussions of DSLs and pipelines in Jon Bentley&#039;s Programming Pearls... &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/24">DSL</category>
 <pubDate>Fri, 19 Aug 2016 09:23:21 +0000</pubDate>
</item>
<item>
 <title>BWK on &quot;How to succeed in language design without really trying&quot;</title>
 <link>http://lambda-the-ultimate.org/node/5281</link>
 <description>&lt;p &gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Sg4U4r_AgJU&quot;&gt;A talk&lt;/a&gt; by Brian Kernighan at The University of Nottingham.&lt;p &gt;
Describes all the usual suspects: AWK, EQN, PIC. Even AMPL. I was wondering which languages he had in mind when he mentioned that some of his creations were total flops. I&#039;d love to learn from those!&lt;/p&gt;
&lt;p &gt;The talk is a fun way to spend an hour, and the audio would be good for commuters. For real aficionados I would recommend reading Jon Bentley&#039;s articles on the design of these languages (as well as CHEM and others) instead.   &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/7">History</category>
 <pubDate>Fri, 20 Nov 2015 15:50:33 +0000</pubDate>
</item>
<item>
 <title>Portable Efficient Assembly Code-generation in High-level Python</title>
 <link>http://lambda-the-ultimate.org/node/5251</link>
 <description>&lt;blockquote &gt;&lt;p &gt;&lt;a href=&quot;https://github.com/Maratyszcza/PeachPy&quot;&gt;PeachPy&lt;/a&gt; is a Python framework for writing high-performance assembly kernels.&lt;/p&gt;
&lt;p &gt;PeachPy aims to simplify writing optimized assembly kernels while preserving all optimization opportunities of traditional assembly.&lt;/blockquote&gt;
&lt;p &gt;
You can use the same code to generate assembly for Windows, Unix, and Golang assembly. The library handles the various ABIs automatically. I haven&#039;t seen this cool project before.&lt;/p&gt;
&lt;p &gt;Among the cool features is the ability to invoke the generated assembly as regular Python functions.  Nice.&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/5">Fun</category>
 <pubDate>Thu, 17 Sep 2015 00:53:19 +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>Everything old is new again: Quoted Domain Specific Languages</title>
 <link>http://lambda-the-ultimate.org/node/5130</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://www.cse.chalmers.se/~josefs/publications/oldnew.pdf&quot;&gt;Everything old is new again: Quoted Domain Specific Languages&lt;/a&gt;, by Shayan Najd, Sam Lindley, Josef Svenningsson, Philip Wadler:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;We describe a new approach to domain specific languages (DSLs), called Quoted DSLs (QDSLs), that resurrects two old ideas: quotation,&lt;br &gt;
from McCarthy’s Lisp of 1960, and the subformula property, from Gentzen’s natural deduction of 1935. Quoted terms allow the DSL to share the syntax and type system of the host language. Normalising quoted terms ensures the subformula property, which guarantees that one can use higher-order types in the source while guaranteeing first-order types in the target, and enables using types to guide fusion. We test our ideas by re-implementing Feldspar, which was originally implemented as an Embedded DSL (EDSL), as a QDSL; and we compare the QDSL and EDSL variants.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Neat paper first posted &lt;a href=&quot;http://lambda-the-ultimate.org/node/5127#comment-84745&quot;&gt;here by Blaisorblade&lt;/a&gt; that formalizes the properties needed for using quotation to implement DSLs. Most embedded DSLs use custom operators and lifted conditionals to make embedded programs seem more natural, but quoting enables the use of native operators and conditions, and might lead to more natural expressions of lightweight (possibly heterogenous) staged computations.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/24">DSL</category>
 <pubDate>Tue, 07 Apr 2015 13:59:28 +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>A Next Generation Smart Contract and Decentralized Application Platform</title>
 <link>http://lambda-the-ultimate.org/node/5003</link>
 <description>&lt;p &gt;&lt;a href=&quot;https://www.ethereum.org/pdfs/EthereumWhitePaper.pdf&quot;&gt;A Next Generation Smart Contract and Decentralized Application Platform&lt;/a&gt;, Vitalik Buterin.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
When Satoshi Nakamoto first set the Bitcoin blockchain into motion in January 2009, he was simultaneously introducing two radical and untested concepts. The first is the &quot;bitcoin&quot;, a decentralized peer-to-peer online currency that maintains a value without any backing, intrinsic value or central issuer. So far, the &quot;bitcoin&quot; as a currency unit has taken up the bulk of the public attention, both in terms of the political aspects of a currency without a central bank and its extreme upward and downward volatility in price. However, there is also another, equally important, part to Satoshi&#039;s grand experiment: the concept of a proof of work-based blockchain to allow for public agreement on the order of transactions. Bitcoin as an application can be described as a first-to-file system: if one entity has 50 BTC, and simultaneously sends the same 50 BTC to A and to B, only the transaction that gets confirmed first will process. There is no intrinsic way of determining from two transactions which came earlier, and for decades this stymied the development of decentralized digital currency. Satoshi&#039;s blockchain was the first credible decentralized solution. And now, attention is rapidly starting to shift toward this second part of Bitcoin&#039;s technology, and how the blockchain concept can be used for more than just money.&lt;/p&gt;
&lt;p &gt;Commonly cited applications include using on-blockchain digital assets to represent custom currencies and financial instruments (&quot;colored coins&quot;), the ownership of an underlying physical device (&quot;smart property&quot;), non-fungible assets such as domain names (&quot;Namecoin&quot;) as well as more advanced applications such as decentralized exchange, financial derivatives, peer-to-peer gambling and on-blockchain identity and reputation systems. Another important area of inquiry is &quot;smart contracts&quot; - systems which automatically move digital assets according to arbitrary pre-specified rules. For example, one might have a treasury contract of the form &quot;A can withdraw up to X currency units per day, B can withdraw up to Y per day, A and B together can withdraw anything, and A can shut off B&#039;s ability to withdraw&quot;. The logical extension of this is decentralized autonomous organizations (DAOs) - long-term smart contracts that contain the assets and encode the bylaws of an entire organization. &lt;strong &gt;What &lt;a href=&quot;https://www.ethereum.org&quot;&gt;Ethereum&lt;/a&gt; intends to provide is a blockchain with a built-in fully fledged Turing-complete programming language that can be used to create &quot;contracts&quot; that can be used to encode arbitrary state transition functions, allowing users to create any of the systems described above, as well as many others that we have not yet imagined, simply by writing up the logic in a few lines of code.&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Includes code samples.&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/10">Paradigms</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/16">Parallel/Distributed</category>
 <pubDate>Wed, 23 Jul 2014 17:12:15 +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>DYNAMO</title>
 <link>http://lambda-the-ultimate.org/node/4710</link>
 <description>&lt;p &gt;I was surprised to see that DYNAMO hasn&#039;t been mentioned here in the past. &lt;a href=&quot;http://en.wikipedia.org/wiki/DYNAMO_%28programming_language%29&quot;&gt;DYNAMO&lt;/a&gt; (DYNAmic MOdels) was the simulation language used to code the simulations that led to the famous 1972 book &lt;a href=&quot;http://en.wikipedia.org/wiki/Limits_to_Growth&quot;&gt;The Limits to Growth&lt;/a&gt; from  &lt;i &gt;The Club of Rome&lt;/i&gt;. The language was designed in the late 1950s. It is clear that the language was used in several other places and evolved through several iterations, though I am not sure how extensively it was used. When Stafford Beer was creating &lt;a href=&quot;http://en.wikipedia.org/wiki/Project_Cybersyn&quot;&gt;Cybersyn&lt;/a&gt; for  Salvador Allende he used DYNAMO to save time suggesting it was somewhat of a standard tool (this is described in Andrew Pickering&#039;s important book &lt;a href=&quot;http://press.uchicago.edu/ucp/books/book/chicago/C/bo8169881.html&quot;&gt;The Cybernetic Brain&lt;/a&gt;).&lt;p &gt;
The language itself is essentially what you&#039;d expect. It is declarative, programs consisting of a set of equations. The equations are  zero and first-order difference equations of two kinds: level equations (accumulations) and rate equations (flows). Computation is integration over time.  Levels can depend on rates and vice versa with the language automatically handling dependencies and circularities. Code looks like code looked those days: fixed columns, all caps, eight characters identifiers.&lt;p &gt;
Here are a few links:
&lt;ul &gt;
&lt;li &gt;Section 3.7 of this &lt;a href=&quot;http://eprints.cs.vt.edu/archive/00000363/01/TR-93-21.pdf&quot;&gt;history of discrete event simulation languages&lt;/a&gt; is a succinct description of the history of the language and its main features.
&lt;li &gt;A more leisurely description of the language and the Limits to Growth model can be found in this &lt;a href=&quot;http://www.americanscientist.org/libraries/documents/2012491358139046-2012-05Hayes.pdf&quot;&gt;article&lt;/a&gt;. Ironically, the author of the article reimplemented the model &lt;a href=&quot;http://bit-player.org/extras/limits/ltg.js&quot;&gt;in Javascript&lt;/a&gt; (&lt;a href=&quot;http://bit-player.org/extras/limits/&quot;&gt;run it!&lt;/a&gt;). What was originally written in a DSL is now implemented in a general purpose language, with all the niceties handled manually.
&lt;li &gt;Finally, &lt;a href=&quot;http://www.strategy-business.com/media/file/sb40_05308.pdf&quot;&gt;a nice piece on Jay Forrester&lt;/a&gt; who prompted the creation of SIMPLE and DYNAMO, its offspring.
&lt;/ul&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/24">DSL</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/5">Fun</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/7">History</category>
 <pubDate>Mon, 01 Apr 2013 20:34:44 +0000</pubDate>
</item>
<item>
 <title>Validating LR(1) parsers</title>
 <link>http://lambda-the-ultimate.org/node/4548</link>
 <description>&lt;p &gt;&lt;b &gt;&lt;a href=&quot;http://gallium.inria.fr/~fpottier/biblio/pottier_abstracts.html#jourdan-leroy-pottier-12&quot;&gt;Validating LR(1) parsers&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
An &lt;i &gt;LR&lt;/i&gt;(1) parser is a finite-state automaton, equipped with a stack, which uses a combination of its current state and one lookahead symbol in order to determine which action to perform next. We present a validator which, when applied to a context-free grammar G and an automaton A, checks that A and G agree. Validating the parser provides the correctness guarantees required by verified compilers and other high-assurance software that involves parsing. The validation process is independent of which technique was used to construct A. The validator is implemented and proved correct using the Coq proof assistant. As an application, we build a formally-verified parser for the C99 language.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;I&#039;ve always been somewhat frustrated, while studying verified compiler technology, that the scope of the effort has generally been limited to ensuring that the AST and the generated code mean the same thing, as important as that obviously is. Not enough attention has been paid, IMHO, to other compiler phases. &lt;a href=&quot;http://lambda-the-ultimate.org/node/4489&quot;&gt;Parsing: The Solved Problem That Isn&#039;t&lt;/a&gt; does a good job illuminating some of the conceptual issues that arise in attempting to take parsers seriously as functions that we would like to compose etc. while maintaining some set of properties that hold of the individuals. Perhaps this work can shed some light on possible solutions to some of those issues, in addition to being worthwhile in its own right. Note the pleasing presence of an actual implementation that&#039;s been used on the parser of a real-world language, C99.&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/11">Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/19">Theory</category>
 <pubDate>Mon, 18 Jun 2012 15:15:09 +0000</pubDate>
</item>
<item>
 <title>Tool Demo: Scala-Virtualized</title>
 <link>http://lambda-the-ultimate.org/node/4522</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://lampwww.epfl.ch/~phaller/doc/pepm2012.pdf&quot;&gt;Tool Demo: Scala-Virtualized&lt;/a&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
This paper describes Scala-Virtualized, which extends the Scala language and compiler with a small number of features that enable combining the beneï¬ts of shallow and deep embeddings of DSLs. We demonstrate our approach by showing how to embed three different domain-speciï¬c languages in Scala. Moreover, we summarize how others have been using our extended compiler in their own research and teaching. Supporting artifacts of our tool include web-based tutorials, nightly builds, and an Eclipse update site hosting an up-to-date version of the Scala IDE for Eclipse based on the Virtualized Scala compiler and standard library.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Scala has always had a quite good EDSL story thanks to implicits, dot- and paren-inference, and methods-as-operators. Lately there are proposals to provide it with both macros-in-the-camlp4-sense and support for multi-stage programming. This paper goes into some depth on the foundations of the latter subject.&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/15">Meta-Programming</category>
 <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/29">Semantics</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Sat, 26 May 2012 22:28:59 +0000</pubDate>
</item>
<item>
 <title>A Semantic Model for Graphical User Interfaces</title>
 <link>http://lambda-the-ultimate.org/node/4352</link>
 <description>&lt;p &gt;Nick Benton and Neel Krishnaswami, ICFP&#039;11, &lt;A href=&quot;http://www.cs.cmu.edu/~neelk/icfp11-krishnaswami-benton.pdf&quot;&gt;A Semantic Model for Graphical User Interfaces&lt;/A&gt;:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
We give a denotational model for graphical user interface (GUI) programming using the Cartesian closed category of ultrametric spaces. [..] We capture the arbitrariness of user input [..] [by a nondeterminism] â€œpowerspaceâ€ monad.&lt;/p&gt;
&lt;p &gt;Algebras for the powerspace monad yield a model of intuitionistic linear logic, which we exploit in the definition of a mixed linear/non-linear domain-specific language for writing GUI programs. The non-linear part of the language is used for writing reactive stream-processing functions whilst the linear sublanguage naturally captures the generativity and usage constraints on the various linear objects in GUIs, such as the elements of a DOM or scene graph.&lt;/p&gt;
&lt;p &gt;We have implemented this DSL as an extension to OCaml, and give examples demonstrating that programs in this style can be short and readable.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;This is an application of their (more squiggly) LICS&#039;11 submission, &lt;A href=&quot;http://www.cs.cmu.edu/~neelk/frp-lics11.pdf&quot;&gt;Ultrametric Semantics of Reactive Programs&lt;/A&gt;. In both these cases, I find appealing the fact the semantic model led to a type system and a language that was tricky to find.&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/5">Fun</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</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/19">Theory</category>
 <pubDate>Sat, 10 Sep 2011 20:25:56 +0000</pubDate>
</item>
</channel>
</rss>
