This document describes the Oil language from clean slate perspective. Knowledge of Unix shell or the compatible OSH language isn’t assumed. But shell users will see similarities, simplifications, and upgrades.

Remember, Oil is for Python and JavaScript users who avoid shell! See the project FAQ for more color on that.

This document is long because it demonstrates nearly every feature of the language. You may want to read it in multiple sittings, or read The Simplest Explanation of Oil first.

A summary of what follows:

  1. Oil has interleaved word, command, and expression languages.

    • The command language has Ruby-like blocks, and the expression language has Python-like data types.

  2. Oil has two kinds of builtins that form the “standard library”.

  3. Languages for data (like JSON) are complementary to Oil code.

  4. OSH and Oil share both an interpreter data model and a process model (provided by the Unix kernel). Understanding these common models will make you both a better shell user and Oil user.

Keep those 4 points in mind as you read the details below.

Read More

If you have heard of Zig before, you may know it as a promising new programming language which is ambitiously trying to overthrow C as the de-facto systems language. But did you know that it also can straight up compile C code?

This has been possible for a while, and you can see some examples of this on the home page. What’s new is that the zig cc sub-command is available, and it supports the same options as Clang, which, in turn, supports the same options as GCC.

Now, I’m sure you’re feeling pretty skeptical right about now, so let me hook you real quick before I get into the juicy details.

Read More

A lean, statically typed, compiled, general-purpose, procedural, object-oriented, and garbage collected programming language in the Pascal tradition, with support for generic programming…

Janet is a functional and imperative programming language and bytecode interpreter. It is a lisp-like language, but lists are replaced by other data structures (arrays, tables (hash table), struct (immutable hash table), tuples). The language also supports bridging to native code written in C, meta-programming with macros, and bytecode assembly.

There is a REPL for trying out the language, as well as the ability to run script files. This client program is separate from the core runtime, so Janet can be embedded in other programs. Try Janet in your browser at https://janet-lang.org.

Read More

I’m Linus. In 2019, I made a programming language called Ink. Since then, I’ve used it to build a number of side projects, including a ray tracer, a compiler, an assembler, a Twitter client, a writing app, and some personal productivity tools. I write about Ink, programming languages, and software at large on this blog, which is served by a server written in Ink.

Ink takes after Go, JavaScript, and Lua. Here’s a simple Ink program.

Swift is a general-purpose programming language built using a modern approach to safety, performance, and software design patterns.

The goal of the Swift project is to create the best available language for uses ranging from systems programming, to mobile and desktop apps, scaling up to cloud services. Most importantly, Swift is designed to make writing and maintaining correct programs easier for the developer.

I’m writing a new functional programming language called Sasquach that targets the Java Virtual Machine (JVM). This post aims to answer why I’m building it, why I’m not just using another language, the goals and non-goals of the language, and why it’s targeting the JVM.

Unison’s core idea is that code is immutable and identified by its content. This lets us reimagine many aspects of how a programming language works. We simplify codebase management — Unison has no builds, no dependency conflicts, and renaming things is trivial. The same core idea forms the basis for a runtime that robustly supports dynamic code deployment, allowing a single Unison program to describe entire elastic distributed systems.

Pocketlang is a small (~3000 semicolons) and fast functional language written in C. It’s syntactically similar to Ruby and it can be learned within 15 minutes. Including the compiler, bytecode VM and runtime, it’s a standalone executable with zero external dependencies just as it’s self descriptive name. The pocketlang VM can be embedded in another hosting program very easily.

The language is written using Wren Language and their wonderful book Crafting Interpreters as a reference.

A Functional Language with Effect Types and Handlers

/ A generator effect with one operation
effect yield<a> {
  fun yield( x : a ) : ()
}

// Traverse a list and yield the elements fun traverse( xs : list<int> ) : yield<int> () { match(xs) { Cons(x,xx) -> { yield(x); traverse(xx) } Nil -> () } }

fun main() : console () { with fun yield(i : int) { println(“yielded ” ++ i.show)
} [std/core/Cons: forall<a> (head : a, tail : list<a>) -> list<a>1,2,3].traverse }

Read More

Foolang is a Smalltalk-inspired language that, like all new languages, has somewhat optimistic aspirations:

  • Elegance and power of Smalltalk and Self: Smalltalk-like syntax, deep object orientation, and late binding as default.

  • Performance of C++: Support for early binding when you need it, so that the compiler can go to town. Low-level operations which allow eliding overflow checking in tight loops, etc.

  • Fault tolerance of Erlang: Agent-model, isolated heaps, and supervisors. No undefined behavior.

Read More
May 31

Terra is a low-level system programming language that is embedded in and meta-programmed by the Lua programming language:

Do you have a new systems programming project on your todo list? If you’re feeling adventurous, I would like you to give it a crack in our new systems programming language, and to use it to drive improvements in the less-developed areas of our standard library.

Are you making a new coreutils implementation? A little OS kernel? A new shell? A GUI toolkit? Database system? Web server? Whatever your systems programming use-case, we think that our language is likely to be a good fit for you, and your help in proving that, and spurring development to rise to meet your needs, would be quite welcome.

Here’s our pitch:

XXXX is a systems programming language designed to be simple and robust. XXXX uses a static type system, manual memory management, and a minimal runtime. It is well-suited to writing operating systems, system tools, compilers, networking software, and other low-level, high performance tasks.

You can get a peek at how it feels by reading about the finger server I wrote with it.

Sounds interesting? Please tell me about your project idea!

Read More

With the recent release of version 1.2.2, it seems like a good moment to talk about the future. We are making plans for a version 1.3 and, eventually a “Rosie 2.0”. In this post, we’ll first look at the use cases for Rosie/RPL and then what’s coming in Rosie v1.3. We’ll save the topic of “Rosie 2.0” for a future post.

In 1994, LaTeX2e was released as a transitional step towards LaTeX 3. 26 years later, there still isn’t a 1.0 release of LaTeX 3. In the interim, we’ve seen the rise of HTML and the web, the dominance of PDF as a format for representation of printed material (and now there is a plan to have PDF extended with “liquid mode” that allows reflowing of PDF text for smaller screens).

In the meantime, the TeX engine has been extended multiple times, the little-used TeX-XeT, some early efforts to support large Asian character sets, and we have in widish use pdfTeX, XeTeX, LuaTeX along with an assortment of abandoned engines. Worst of all, it seems that none of pdfTeX, XeTeX or LuaTeX can serve as the one TeX to rule them all, each with some limitations that can require users to switch engines depending on their needs.

Read More

Natalie is a work-in-progress Ruby implementation, compiled to C++, by Tim Morgan.

Squeak is an open, highly-portable Smalltalk implementation whose virtual machine is written entirely inSmalltalk, making it easy to debug, analyze, and change. To achieve practical performance, a translator produces anequivalent C program whose performance is comparable to commercial Smalltalks.

Other noteworthy aspects of Squeak include: a compact object format that typically requires only a single word of overhead per object; a simple yet efficient incremental garbage collector for 32-bit direct pointers; efficient bulk-mutation of objects; extensions of BitBlt to handle color of any depth and anti-aliased image rotation and scaling;and real-time sound and music synthesis written entirely in Smalltalk.

Read More

I’m developing a programming language called Kernel.  Kernel is a conservative, Scheme-like dialect of Lisp in which everything is a first-class object.

“But,” you may ask, “aren’t all objects first-class in Scheme?”  (I’m glad you asked.)  No, they aren’t.  Special-form combiners are second-class objects.  To borrow a phrase from the original description of first- and second-class objects by Christopher Strachey, they have to appear in person under their own names.  (There are also several other kinds of second-class objects in Scheme, but special-form combiners are the most commonplace.)

The idea of first-class operative combiners, i.e., first-class combiners whose operands are never evaluated, has been around a long time.  Such creatures were supported by mainstream Lisps through the 1970s, under the traditional name fexprs, but they made a mess out of the language semantics because they were non-orthogonal to the ordinary variety of procedures constructed via lambda — and, more insidiously, because at that time the mainstream Lisps were dynamically scoped (a language feature that causes more problems for fexprs than it does for the less powerful macros).

Read More

As I already explained, I’ve invented and implemented a simple functional language (PYFL) with a few interesting twists. Including a promising but simple approach to input.

The basic language itself is pretty standard, except that it uses infix operators and conventional mathematical notation for function calling; e.g. f(h,a+2*y). It also has a wide range of variable binding operators; as in the following program

This short blog post is about the origin of languages for describing tasks in automation, in particular for industrial robot arms. Three people who have passed away, but were key players were Doug Ross, Victor Scheinman, and Richard (Lou) Paul, not as well known as some other tech stars, but very influential in their fields. Here, I must rely not on questions to them that I should have asked in the past, but from personal recollections and online sources.

Jolie is a contract-first programming language, which puts API design at the forefront. It supports both synchronous and asynchronous communication. Data models are defined by types that support refinement (in red on the right), and DTO (Data Transfer Objects) transformations are transparently managed by the interpreter.

hyperscript is an experimental scripting language designed for the web, inspired by HyperTalk

hyperscript features include:

Read More
Programming Languages

Discuss interesting/experimental programming languages.

Created on Nov 12, 2020
By @root