~pepe/pan.earth

f2f7cc481d95e483069251d18b7a36ce1b9e2125 — Josef Pospíšil 2 years ago 4521dc3
Add why I will stay Janet post
2 files changed, 122 insertions(+), 1 deletions(-)

M .gitignore
A content/posts/why-i-will-stay-janet.mdz
M .gitignore => .gitignore +1 -1
@@ 1,2 1,2 @@

public
jpm_tree

A content/posts/why-i-will-stay-janet.mdz => content/posts/why-i-will-stay-janet.mdz +121 -0
@@ 0,0 1,121 @@
{:author "pepe"
 :title "Why I will stay Janet"
 :description "Reasons I will stay with Janet programming language"
 :date "2021-08-28"
 :template "/templates/blog"}
---

This post is the last part of my Óde to Janet programming
language. If this is the first time you are here, please read the
@link[how-i-became-janet.html][past] and @link[why-i-am-janet.html][present]
tense of the story first. Writing this part took much longer, as
I had turbulent times in the past half a year. But it gave me a chance to
think more about the reasons. They appear in the order of importance for me.

## Community

I have already touched on this point in the first part. But the more I am in
this community, the more I admire its members. It is a usual mixed bag with
different stories and attitudes. But I have yet to witness any animosity
or infighting in it. I consider the community to be part of any programming
language development efforts, and this one I like a lot.

### Bakpakin

Many communities, especially at the beginning, need a good leader.

A good leader needs to be courageous yet humble, flexible but steady, kind
yet assertive. I am confident that the creator of the Janet language is
just like this. And great computer science thinker on top of that. Given
the sheer amount of work needed for the Janet language project, I wonder
how \@bakpakin can manage it almost single-handedly. Bravo sir!

### My little corner

In the course of the Janetuary, I have become part of the
GitHub Janet organization with particular responsibility for the
@link[https://github.com/janet-lang/pkgs][packages] repository. Not that I
did a lot of the work, but some I did, and it is a great honor and the peak
of my professional career. Thank you for the opportunity sir!

## Janet way

I was programming in many languages, starting with ZX Spectrum basic, 8048
Assembler, and ending with (you guessed it) Janet. Many of them had their
unique touch and feel, but not one I saw as so distinct as I see (again,
you guessed it) Janet.

I am still not sure, what are the basics of this feeling, but I guess a mix
of its creator's personality, the history of Lisp, and all the development
CS made from its beginning. I hope I will once be able to write a separate
post about this phenomenon. Just one example for now:

### Async

I have already talked about the @pre[ev] module in Janet core in the
@link[why-i-am-janet.htm][Why I am Janet post]. At the time, it was an
experimental part of the language. It is not anymore. It became one of the
fundamental stones of the Janet experience. It is pretty similar to some other
implementation, most notably Erlang (or people who understand it say). The
fiber is still the basic computational unit that you can run on the event
loop, but we also moved the thread under its umbrella. On top of it all,
sit the channels for convenient communication between fibers. There is also
the concept of the supervisor channel assigned to the fiber at its creation,
implicit or explicit.

Where it made sense, I embraced this concept in every library from the
@link[https://good-place.org][Good Place] project. It allowed me to create
just one actual
@link[https://git.sr.ht/~pepe/chidi/tree/master/item/chidi/server.janet#L97][network server]
, where you need only to supply a specialized supervisor function, which solves
all the protocol specifics. Be it
@link[https://git.sr.ht/~pepe/chidi/tree/master/item/chidi/server.janet#L72][HTTP]
, [https://git.sr.ht/~pepe/trevor/tree/master/item/trevor/init.janet#L56][WebSockets]
, or @link[https://git.sr.ht/~pepe/hemple/tree/master/item/hemple/init.janet#L35][Janet RPC].

## My work

My attempt at developing the collection of the libraries for Janet is called
@link[https://good-place.org][Good Place]. It was first showed to the world
on my last birthday. It is still in the exploration phase of the development
but is entirely usable. Right now, I am in the process of renaming individual
libraries, so they better signal the intent. Please stay tuned.

### Neil

@link[https://git.sr.ht/~pepe/neil][Neil] is also part of the Good Place
project. It is the testing ground and showcases most of the technology
developed as part of the project. But it is also a time tracker/todo hybrid I
am using to track all my work by the computer. There is also a slight chance
I will implement it for the needs of one organization for which I am doing
contracting work.

### Mental health

I wrote about Janet's help during the immense struggle I had with my depression
relapse last year. And I am still perusing the time with Janet as my primary
antidepressive cure. It is true today, as I am writing this post and finally
moved this site to my own static site generator solution. I hope you do not
have these problems yourself, but I highly recommend you try Janet if you do.

### Future

After mustering Neil to its current shape, I cannot imagine using any other
language for my future projects. Not only because I have spent a lot of
time writing all the library code, but because the road from the idea to
the working thing is the closest with Janet for me.

## Finale

This is the last installment of my praise of Janet programming language. I have
hope that at least part of my enthusiasm transfers to you, my dear reader,
and that you will join us on this journey. If you do, do not hesitate to say
hello in the @link[Matrix channel] we are using for the discussion these times.

In \@bakpakin's words: Everything Janet is fair game! I am
convinced that fairness is what we all need.