SuperSonicHub1 / awesome-language-specs

A one-stop shop for everything programming language specifications, references, and test suites.
The Unlicense
0 stars 0 forks source link

awesome-language-specs

A one-stop shop for everything programming language specifications, references, and test suites.

Why?

I have two reasons for starting this project:

You on the other hand may find this project useful for a few reasons:

What is any of this stuff anyway?

A programming language specification is a lot like a blueprint. It describes a language's design, including syntax, features, and runtime details. It's written by the creators of a programming language so that you can understand how it functions at a low level in order to write an implementation or hack on an existing one. Not all languages have one, but they are extremely useful for compiler and interpreter writers and help to justify a language's existance and design.

A programming language reference acts as a language's manual. It gives the end-user a high-level overview of the language and helps them to learn how to write in it and make good use of its features. Most users of a language will likely reference (heh) the reference and never touch the specification, as the former is much more practical for daily usage of a language. Most programming languages have one; it would be really annoying to learn a language that has no documentation. If you're trying to implement a programming language, it's likely in your best interest to read the reference first before jumping headfirst if you're not already familiar with it.

An implementation is a piece of software which implements (heheh) a specification. Most languages have a model implementation which most users are expected to use and can help implementers get a feel for the architecture of a langauge. Think Python and CPython, or C# and .NET, or Java and Java SE. Some languages, however, don't have a model implementation, like C (GCC, Clang) and JavaScript (SpiderMonkey, V8). Not all implementations follow the spec word-for-word: some are intentionally incomplete, only wanting to maintain a "core" set of features, others extend it, and others still radically change a language just to experiment.

A test suite allows an implementer to test if their implementation functions as the specification intends. They are usually written in the language described by the specification itself and come with a harness which allows one to hook up the test suite to their implementation. Some languages may decide to specify themselves using only a test suite along side a reference.

Notation

This document is generally organized like this:

Specifications

General Resources

Dart

Language Features

Latest

5th Edition, Version 2.10 (April 9, 2021)

4th Edition, Version 1.11 (August 19, 2015 / December 2015)

3rd Edition, Version 1.9 (April 15, 2015 / June 2015)

2nd Edition, Version 1.6 (November 21, 2014 / December 2014)

1st Edition, Version 1.3 (March 27, 2014 / June 2014)

Java

SE 17 (September 2021)

SE 16 (March 2021)

SE 15 (September 2020)

SE 14 (March 2020)

SE 13 (September 2019)

SE 12 (March 2019)

SE 11 (September 2018)

SE 10 (March 2018)

SE 9 (September 2017)

SE 8 (March 2014)

SE 7 (July 2011)

SE 6 (December 2006)