DEV Community

Cover image for Pros and Cons of PicoLisp Unfolded
Mia
Mia

Posted on

Pros and Cons of PicoLisp Unfolded

This article will present you the pros and cons of the programming language PicoLisp. It will be only a rough overview - we will come back to all of these points in more detail later.

Secondly, we will take a look at a very small PicoLisp web app to get a first impression how the language looks like.


Tractatus Pico Blaesicus

The article is inspired by the famous "Tractatus Logico-Philosophicus" of the German philosopher Ludwig Wittgenstein.

In the original Tractatus, each proposition is a kind of declarative statement that is further elaborated on sub-levels. If you are interested in philosophy, you might know the first few sentences:

1 The world is all that is the case.

1.1 The world is the totality of facts, not of things.

1.11 The world is determined by the facts, and by their being all the facts.

And so on and so forth. Very interesting, and very hard to read - but this just as a side note, because we want to talk about PicoLisp.


There is a little fun web app inspired by the Tractatus, which lists the pros and cons of PicoLisp: The Tractatus Pico Blaesicus. (The Latin word "blaesus" means "lisping" 😀) Let's take a look at it - first at the content, then at the sources.

I recommend to open the link in another browser tab while reading this article.

tractatus1.png

Similarly to the Tractatus, it contains items that unfold the sublevels.


The Pros of PicoLisp

Let's start with the good news and click on "cons". PicoLisp is:

  • Simple
  • Transparent
  • Powerful
  • Efficient.

Well, anybody can say that, but what is meant by that? Let's open up the next level.

tractatus2.png

There are still more sublevels which elaborate the statements further. You get the principle - feel free to check out explore the sublayers on your own.


The Cons of PicoLisp

Nothing is perfect, here are the cons:

  • Lisp syntax
  • Interpreter-only
  • Omitted features
  • Flaws

Or, to be more precise:

tractatus3.png

Again, feel free to explore the sublayers on your own. We will not go into detail about the content now, since each of these items is worth its own post.


Analyzing the "Tractatus" Web App

The Tractatus Pico-Blaesicus is also a nice example about the strength of PicoLisp: to write a dynamically rendering HTML page with extremely few lines of code.

Let's download the code and look at it with the eyes of someone who doesn't know any PicoLisp at all.

Download

To get the source code, type

$ wget https://gitlab.com/picolisp-blog/single-plage-scripts/-/raw/main/tractatus/tractatus.l
Enter fullscreen mode Exit fullscreen mode

or open this link in the browser and download it manually.

Running the script

In the folder where the script has downloaded, type

$ pil tractatus.l
Enter fullscreen mode Exit fullscreen mode

and point your browser to http://localhost:8080. You should see the page rendering like this - it works!

tractatus.png

(if you haven't installed PicoLisp yet, read this first).


A first impression

The second purpose of this article is to give an impression how PicoLisp looks like. If you are only used to Python or JavaScript, it might look very foreign to you at first.

So here is a challenge for you: Try to take a look at the source code and figure out roughly what is going on! (no details!)

Finding 1: The level function

Let's start with the most obvious: starting from line 67, we find the actual text.

# Text
Pro
   Simple
      Simple NOT in the sense of "small number of features"
               ...
Enter fullscreen mode Exit fullscreen mode

Since the numbering is missing, there must be some algorithm that "counts" the spaces and converts it to numbering. We can guess that this is done using the level function, where we find the term sp? which could maybe represent the "space" characters:

# Content
(de level (Lst)
   (for (I . C) Lst
      (NIL (sp? C) I) ) )
Enter fullscreen mode Exit fullscreen mode

Finding 2: The menu Function

Thelevel-function gets called within a certain menu-function:

 [<menu>
     ~(let (L (0)  L1 (prog (skip "#") (line))  L2 (line))
        (recur (L)
           ...
              (let I (level L1)
                 (loop
                     ...
Enter fullscreen mode Exit fullscreen mode

We see two variables, L1 and L2 which might be two consecutive lines. The program loops over L1 and L2 and calls the level function on them. And we also know the result: there will be clickable items that can expand and show subitems. So this reminds us... of a navigation menu, right?

The code transforms the text items to a navigation menu, which are then rendered to an HTML page.

Finding 3: Serving HTML and CSS

If you did some web programming before, you know that the browser usually expect a HTML and also a CSS file. However, we only have one single page of PicoLisp...?!

This is because PicoLisp creates everything from the source code. The browser "thinks" that it gets a css file, but in reality it is only a function.

# CSS
(de tractatus.css ()
   (httpHead "text/css" 86400 "!tractatus.css")
   (ht:Out *Chunked
      (prinl "html {background-color: #eee}")
      (prinl "body {margin: auto; max-width: 96ex; border: 1px solid #bbb; font: 20px serif; background-color: #ffd; padding: 2em 5% 4em 5%}")
   ...
Enter fullscreen mode Exit fullscreen mode

In the end, everything get mapped to a HTML text stream that is displayed in the browser using the function httpEcho:

## Source
(de tractatus.l ()
   (httpEcho `(pack (car (file)) (cadr (file))) "text/octet-stream" 3600 T) )
Enter fullscreen mode Exit fullscreen mode

Finding 4: The Server

If there is a browser client, then there must also be a server. And right, at the very end of the script, we can also find the server, listening on port 8080:

(server (or (format (sys "PORT")) 8080) "!tractatus")
Enter fullscreen mode Exit fullscreen mode

Now we also know why we can access the script through localhost:8080.


Summary

With this, we got a first impression of the pros and cons on a very rough level. We will keep it in mind for further posts.

Also, we have seen our first PicoLisp script: Without going too much in detail, we see that we can create the client, server and content in just a few lines of code.

If you are interested to understand how this works exactly, stay tuned for the "Getting Started" and "Web Application Basics"-Tutorials. Of course, you can also check out the documentation and tutorials on the PicoLisp-site by yourself.


Sources

Top comments (0)