Phel: A Lisp that compiles to PHP

https://phel-lang.org/

The Phel Language

Phel is a Functional Programming (FP) language that compiles to PHP. It is a dialect of Lisp inspired by Clojure and Janet.

Features

  • Built on PHP’s ecosystem
  • Good error reporting
  • Different Datastructures (Arrays, Tables, and Tuples)
  • Macros
  • Recursive functions
  • Powerful but simple Syntax
  • REPL

Why Phel?

Phel is a creation of Jens Haase and, as he mentions on the website, “it is the result of many failed attempts to do functional programming in PHP”. He was looking for something with these characteristics:

  • A LISP-inspired
  • Functional Programming language
  • That runs on cheap hosting providers
  • And is easy to write and debug

From my point, it was at the end of May 2020 when I finished the book “Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages”, in which I learned a bit of Prolog, Erlang, Clojure, Haskell… I even created a repository in Github to store my progress over the weeks with these learnings.

Suddenly, one day at the beginning of June 2020, I saw a post in Reddit's PHP official channel with a message of someone mentioning this “Phel” project, claiming to be a “functional programming language written in PHP”! (or something like that).

I work with PHP for around 8 years so far and I always try to combine OOP with FP as much as possible (because I believe both paradigms are better combined; they are not necessarily exclusive), and a new dialect of Lisp fully written in native PHP 7.4 sounded so exciting that I decided to take a look at it. I wanted to see the code.

The fresh readings from Mathias NoBack books such as Object Design Style Guide, Principles of Package Design, and Advanced Web Application Architecture, gave me the courage to try out what I learned and put it for real in a project. This was (and still is) a beautiful challenge that helps me to test myself and grow professionally at the same time.

My first commit was done on 6 June 2020, and since then I work on this project a bit (almost) every day in my free time. It helps me to learn more about FP, languages internal design, and best practices on testing and software design architecture in general.

I started applying minor changes until I ended refactoring the whole compiler structure (among other things) in order to make the modules easier to read and understand. Psalm, strict types, good test coverage, unifying code style… These were some of my favorite topics.

Example of Phel code

The following example gives a short impression of how Phel looks like:

# Define a namespace
(ns my\example)
# Define a variable with name "my-name" and value "world"
(def my-name "world")
# Define a func with name "print-name" and one argument "your-name"
(defn print-name [your-name]
(print "hello" your-name))
# Call the function
(print-name my-name)

Current status of Phel

Check out the official website with all documentation of the Phel Language:

https://phel-lang.org/

Also recommended

--

--

--

Aka: Chema. I love writing about stuff that I find interesting and bring some value to my life, so I can share them with you. https://chemaclass.com

Love podcasts or audiobooks? Learn on the go with our new app.

Recommended from Medium

Flutter Google Maps and Live Location Tracking

ICON Development Roadmap Update — July 2020

[Day 5] Sequence How To Guide

Self-Reflection: MongoDB Workshop

A Coder Always Talks to Strangers

Difference between a struck, a proto, and a class in Swift

map{} vs flatMap{} and flatten in Kotlin

CRM Light in Modern SharePoint. The Design.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Jose Maria Valera Reales

Jose Maria Valera Reales

Aka: Chema. I love writing about stuff that I find interesting and bring some value to my life, so I can share them with you. https://chemaclass.com

More from Medium

How to write a clean server-side code (and save 30% of it)

A Jokingly Simple Go Web Server To Deliver Chuck Norris Jokes

360° IT Check #44 — Node.js 18, Serverless Functions Running On Deno, And More!

The cover photo for our blog post. Includes the logos of Linux, Node.js and Deno.

Simple API in Go with Fiber and Docker

Cool Gopher