If you read my previous posts here or saw some of my Cedalion videos, you probably understand that the Cedalion programming language is different than most other languages. It is different in how it treats syntax, and in how it relates to editing. In this post I will elaborate about this different approach, named projectional editing, why it was chosen for Cedalion and what it means for you if you want to use Cedalion.
When I discuss the ideas behind cloudalion with people, a concern that keeps coming up is whether a declarative implementation of an application can ever perform as well as an imperative implementation.
In this post I intend to answer this concern by giving a few examples in which declarative approaches lead to better performance than imperative ones.
At the end of my previous post, I think I lost most of the readers when I compared Web applications to DSLs, and then talked about implementing them as external or internal DSLs. For people with no actual experience with implementing DSLs this comparison is probably hard, and especially the distinction between internal and external DSLs. I remember having long conversations with fellow DSL researchers not agreeing if a certain DSL framework works with external or internal DSLs. So if I lost you there, don’t feel bad. It’s on me.
In this post I am going to demonstrate this equivalence between DSLs and Web apps by defining the logic of a simple Web application using Cedalion — a language designed to host DSLs. We are not going to implement a Web application here. Unfortunately, no actual application will come out of this exercise, but with a bit of imagination this exercise will demonstrate what the goal of my research is: I want Web applications to be as easy to implement as this!
If you tried out, or at least read the Cedalion DSL tutorial, or at the very least watched the “hello, world” video in the “first steps” page, you would agree that Cedalion is different than any other programming language you know.
Cedalion is not new. I published my first paper on Cedalion back in 2011, about five years ago. So why did I start blogging about it just now? Why did I not make an effort to showcase it to people who may find it useful?
Why? because until recently, it wasn’t that useful. In this post I will tell you why, and share the insight that I believe makes Cedalion matter.
We ended part II of this tutorial at a point where our DSL allowed us to define functions. But these functions are limited. We easily defined a function that squares a number, but if we were to generalize this to say, raise a number by a given power, we were in for a problem. We could do this with recursion, of course, but recursion needs to stop at some point. For that, we need support for conditionals — a way to ask whether we need to stop or to carry on recursing.
In this part we will define the two necessary components: a >= predicate that compares expressions, and a conditional expression. We will focus on giving both the look and feel of their mathematical counterparts. To demonstrate our new abilities we will implement the factorial operator.Read More »
During the last few days I wrote a few tutorials on installing Cedalion and getting started with it. All tutorials are accompanied by videos. In this post I will guide the reader (you…) as you will implement your first DSL in Cedalion. To keep things simple, I’ll base this DSL on the one we implemented in Prolog in my previous post.Read More »