the plafrom post has been added
This commit is contained in:
parent
60178fb547
commit
d7767f60a8
|
@ -0,0 +1,116 @@
|
||||||
|
---
|
||||||
|
layout: post
|
||||||
|
title: "Choosing the right platform"
|
||||||
|
date: 2019-12-07
|
||||||
|
categories: Programming
|
||||||
|
tags: language
|
||||||
|
theme: dark
|
||||||
|
---
|
||||||
|
After wrapping my head around the [rational](/programming/rational-and-a-name/) of
|
||||||
|
[My new programming language](/programming/my-new-programming-language/), I have
|
||||||
|
a big decision to make. Choose a platform.
|
||||||
|
|
||||||
|
As programmers, we have a tough life when it comes to making a decision that
|
||||||
|
has direct impact on our product. I'm pretty sure you went through this process
|
||||||
|
at least once. From choosing a semantically great name for a variable to choosing
|
||||||
|
a right technology for your next billion dollar startup. It is always hard to
|
||||||
|
pick a tech stack for a new project. Specially when the new product happens to be
|
||||||
|
a new programming language. If I get my hands dirty with a wrong tech stack for
|
||||||
|
a simple web application, no big deal. I still can rewrite the whole thing and
|
||||||
|
pay a penalty. But in case of programming languages that's not the case. Wrong
|
||||||
|
platform can easily destroy you. From the dawn of computers, many smart people
|
||||||
|
created tons of languages. But only few of them made it to the top. While there
|
||||||
|
are so many reasons for their success, going with the right platform is one
|
||||||
|
the most important ones.
|
||||||
|
|
||||||
|
The obvious question that comes to mind when we're talking about "The platform"
|
||||||
|
is that should we build a platform from scratch or should we piggyback on others?
|
||||||
|
Creating a programming language and a virtual machine from scratch is gigantic and
|
||||||
|
bone crushing task. It needs a crazy set of skills and knowledge. Even with such
|
||||||
|
wisdom and experience people who went through it has made many mistakes and had to
|
||||||
|
constantly iterate to come up with the right implementation. The evolution of
|
||||||
|
programming languages such as [Scheme](https://en.wikipedia.org/wiki/Scheme_%28programming_language%29)
|
||||||
|
is a good example of it (for more information take a look at [R6RS](http://www.r6rs.org/)).
|
||||||
|
|
||||||
|
While I think creating a programming language and a VM from scratch is really fun,
|
||||||
|
but it can be really frustrating as well. I don't want to get annoyed with myself
|
||||||
|
during the process and abandon my goal. I should ride on the shoulders of the giants
|
||||||
|
to gain benefit from their great work. I should choose a platform that helps me to
|
||||||
|
move faster and iterate through different ideas quicker.
|
||||||
|
|
||||||
|
From technical perspective, Starting from scratch means that I have to write a
|
||||||
|
program that includes at least a parser and a compiler. Building a compiler
|
||||||
|
is no joke. Hypothetically let's say we have a working compiler and parser, What
|
||||||
|
about use libraries and ecosystem ?? It would be really hard to convince people
|
||||||
|
to use a programming language that does not have any useful library and they have
|
||||||
|
to build everything by themselves. It might have been the case 30 years ago but
|
||||||
|
it is not the case in the modern age of programming languages anymore.
|
||||||
|
|
||||||
|
So the idea of creating [Serene](https://serene-lang.org) from scratch is out of
|
||||||
|
the picture. We need to find a good platform for it. But what are the options ???
|
||||||
|
|
||||||
|
## Racket
|
||||||
|
> Racket is a general-purpose programming language as well as the world’s first ecosystem
|
||||||
|
> for language-oriented programming. Make your dream language, or use one of the dozens
|
||||||
|
> already available.
|
||||||
|
|
||||||
|
[Racket](http://racket-lang.org) is a dialect of Lisp which allows us to build our own
|
||||||
|
language by extending it. While Racket is really cool and have long list of pros and
|
||||||
|
[many reasons why to use it](https://beautifulracket.com/appendix/why-racket-why-lisp.html)
|
||||||
|
(It's Lisp after all), it has a disadvantage that forced me to stop thinking about it
|
||||||
|
for **Serene**. As I mentioned in the [rational](/programming/rational-and-a-name/)
|
||||||
|
I'm not trying to build a toy language or a domain specific one and Racket's ecosystem
|
||||||
|
isn't as great as a battle tested and well-known ecosystem like Java or Python (or other
|
||||||
|
popular ecosystems).
|
||||||
|
|
||||||
|
## Javascript
|
||||||
|
We're living in the age of Web and one of the big players in this era is Javascript. The number
|
||||||
|
of the programming languages that compile to Javascript is increasing rapidly. Javascript
|
||||||
|
as a language [sucks](https://whydoesitsuck.com/why-does-javascript-suck/) but as platform
|
||||||
|
it is amazing. Lots of money and engineering afford has been spent on improving Javascript engines.
|
||||||
|
As a result Javascript is a crappy language with well engineered engines such as
|
||||||
|
[V8](https://v8.dev/).
|
||||||
|
|
||||||
|
Creating a language base on Javascript platform means that I have to be involved with the whole
|
||||||
|
transpiling scenario and deal with the fact that this new language can be used on different
|
||||||
|
browsers or on the backend. Or even on IE6 (Just kidding). I don't want to deal with all this.
|
||||||
|
I think Javascript platform can't be a good fit for what I need. So i won't go in details about
|
||||||
|
it
|
||||||
|
|
||||||
|
## Python
|
||||||
|
Python is another famous platform form creating programming languages. Many people has built
|
||||||
|
programming languages on top of Python (Checkout [Lispy](http://norvig.com/lispy.html) if you're
|
||||||
|
a Python fan). Python is super popular these days and you'll see it everywhere. Creating a language
|
||||||
|
on top of Python (just like Javascript) gives me access to a rich ecosystem with huge number of
|
||||||
|
libraries and a robust ecosystem.
|
||||||
|
|
||||||
|
But as I mentioned in the [rational](/programming/rational-and-a-name/) I want support for built-in
|
||||||
|
concurrency and parallelism. Python isn't even good when it comes to parallelism and concurrency.
|
||||||
|
I'm using python for more that 10 years now and I'm very familiar with it. I know about all the
|
||||||
|
effort to create useful concurrency and parallelism such as asyncIO. But the fact is Python
|
||||||
|
is not designed for this job. **GIL** is a huge problem in Python that literally prevents
|
||||||
|
us from Running two piece of code in parallel in two kernel space thread. It is a problem
|
||||||
|
for me. If you can't do a decent concurrency and parallel execution you have no chance
|
||||||
|
against modern languages like Clojure, Go, Elixir and others. Python is fine now despite
|
||||||
|
of its problems because it is good at other stuff and people accepted it for what it is.
|
||||||
|
Python is out there for about 25 years now and it has established a big community. If
|
||||||
|
Guido van Rossum created Python a year ago, I'm pretty sure that it would've fail because
|
||||||
|
it can't compete with modern languages. Don't get me wrong, I'm not trying to trash Python.
|
||||||
|
It is great and it has many good qualities but a good Concurrency and parallel execution model
|
||||||
|
ain't one of them.
|
||||||
|
|
||||||
|
## BEAM
|
||||||
|
Erlang ecosystem is amazing, Robust and well tested. I have read a lot about it and when
|
||||||
|
ever I'm studying anything around computer science that can be related to Erlang, I ask
|
||||||
|
myself "How is Erlang doing it?". Erlang ecosystem truly had a huge impact on the world
|
||||||
|
today.
|
||||||
|
|
||||||
|
The problem with Erlang ecosystem for me is that I always read about it and my knowledge
|
||||||
|
around it is only theoretical. Building a language on top a platform needs a good level
|
||||||
|
of practical experience on the platform as well which I don't have that. So it's obvious
|
||||||
|
that I have to pass.
|
||||||
|
|
||||||
|
## JVM
|
||||||
|
As much as I dislike Java (Mostly because of the syntax and the fact that it is an object
|
||||||
|
oriented language), I like JVM a lot.
|
||||||
|
## One VM to rule them all
|
Loading…
Reference in New Issue