We are building a new systems programming language March 19, 2021 on Drew DeVault's blog

It’s an open secret: the “secret project” I’ve been talking about is a new systems programming language. It’s been underway since December ‘19, and we hope to release the first version in early 2022. The language is pretty small — we have a mostly complete specification which clocks in at 60 pages. It has manual memory management, no runtime, and it uses a superset of the C ABI, making it easy to link with libraries and C code. It should be suitable almost anywhere C is useful: compilers, system utilities, operating systems, network servers and clients, and so on.

use io;

export fn main() void = {
	const greetings = [
		"Hello, world!",
		"¡Hola Mundo!",
		"Γειά σου Κόσμε!",
		"Привет мир!",
		"こんにちは世界!",
	];
	for (let i = 0z; i < len(greetings); i += 1) {
		io::println(greetings[i]);
	};
};

We could compare our language to many other languages, but let’s start with how it compares to C:

Our language currently supports Linux on x86_64 or aarch64, and we plan on expanding this to the BSDs, Haiku, and Plan 9; as well as i686, riscv64 and riscv32, and ppc64 before the release.

I plan to continue keeping the other details a secret until the release — we want the first release to be a complete, stable, production-ready programming language with all of the trimmings. The first time most people will hear about this language will also be the first time they can ship working code with it.

However, if you want to get involved sooner, there’s a way: we need your help. So far, we’ve written most of the spec, the first of two compilers, and about 15,000 lines of the standard library. The standard library is what needs the most help, and I’m seeking volunteers to get involved.

The standard library mandate begins with the following:

The xxxx standard library shall provide:

  1. Useful features to complement xxxx language features
  2. An interface to the host operating system
  3. Implementations of broadly useful algorithms
  4. Implementations of broadly useful formats and protocols
  5. Introspective meta-features for xxxx-aware programs

Each of these services shall:

  1. Have a concise and straightforward interface
  2. Correctly and completely implement the useful subset of the required behavior
  3. Provide complete documentation for each exported symbol
  4. Be sufficiently tested to provide confidence in the implementation

We have a number of focus areas for standard library development. I expect most contributors, at least at first, to stick to one or two of these areas. The focus areas we’re looking into now are:

Algorithms
Sorting • compression • math • etc
Cryptography
Hashing • encryption • key derivation • TLS • etc
Date & time support
Parsing • formatting • arithmetic • timers • etc
Debugging tools
ELF and DWARF support • vDSO • dynamic loading • etc
Formats & encodings
JSON • XML • HTML • MIME • RFC 2822 • tar • etc
xxxx language support
Parsing • type checker • hosted toolchain • etc
Networking
IP & CIDR handling • sockets • DNS resolver • HTTP • etc
Platform support
New platforms and architectures • OS-specific features
String manipulation
Search, replace • Unicode • Regex • etc
Unix support
chmod • mkfifo • passwd • setuid • TTY management • etc

If any of this sounds up your alley, we’d love your help! Please write me an email describing your interest areas and previous systems programming experience.

Update 2021-03-20: We’re targeting the first release in early 2022, not 2021.

Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to ~sircmpwn/public-inbox@lists.sr.ht [mailing list etiquette]

Articles from blogs I read Generated by openring

Summary of changes for May

Hey everyone! This is the list of all the changes we've done to our projects and apps during the month of May. We'll also be reporting in our on position in the world, and on our future plans. Summary Of Changes Noodle, released Uxn version. Imp…

via Hundred Rabbits June 8, 2021

Fuzzing is Beta Ready

We are excited to announce that native fuzzing is ready for beta testing in its development branch, dev.fuzz! Fuzzing is a type of automated testing which continuously manipulates inputs to a program to find issues such as panics or bug…

via The Go Programming Language Blog June 3, 2021

SourceHut is leaving Freenode

SourceHut has been a proud user of the Freenode IRC network since its inception. Today we have five sr.ht-related IRC channels for end-user support, operational monitoring, staff coordination, and more. We will be moving our channels to Libera Chat, effectiv…

via Blogs on Sourcehut May 19, 2021