A cool programming language :)
Go to file
2022-06-22 19:12:41 +02:00
core Precompiled Header :) 2022-06-16 15:56:10 +02:00
editors/vscode/sapphirelang Initial commit (added Sapphire to source control) 2022-03-11 17:00:09 +01:00
examples new changes i said 2022-06-09 17:24:50 +02:00
src Moved all benchmark code to main() 2022-06-22 18:19:27 +02:00
.clang-format used clang-format :) 2022-06-14 16:29:51 +02:00
.gitignore Initial commit (added Sapphire to source control) 2022-03-11 17:00:09 +01:00
build.sh convenient build script, we like that =D 2022-06-08 17:43:29 +02:00
CMakeLists.txt Precompiled Header :) 2022-06-16 15:56:10 +02:00
README.md Added a lot of stuff to README.md 2022-06-22 19:12:41 +02:00
sapphire.cpp disclaimer :) 2022-06-08 20:16:14 +02:00

Sapphire

A modern, fast and reliable programming language. (WIP)

WARNING: Most features in this README (especially the About section) are planned for the future and not yet implemented.

About

Sapphire is a relatively high-level programming language, yet low-level when it needs to be. The language supports low-level memory manipulation using pointers, but pointer arithmetic is only allowed in unsafe contexts, for greater memory safety. Dynamic memory allocation is also a thing, though it is recommended not to use it directly, but instead make great use of smart pointers.

Sapphire is a compiled programming language, with static typing, although type inference is also supported. It also has a high-level standard library, which supports console/file I/O, operating system functions, advanced math operations, string manipulation, and many more.

Basic usage

"Hello world" in Sapphire:

const io from @'core/io';

let @main in {
	io.outln('Hello, World!');
}

or alternatively:

const { outln } from @'core/io';

let @main in {
	outln('Hello, World!');
}

Examples

FizzBuzz:

const io from @'core/io';
const { toString } from @'core/type_utils';

let @fizzBuzz(i32 i) in {
	String result = '';
	if(i % 3 == 0)
	{
		if(i % 5 == 0)
		{
			result = 'FizzBuzz';
		} else {
			result = 'Fizz';
		}
	} else {
		if(i % 5 == 0)
		{
			result = 'Buzz';
		} else {
			result = toString(i);
		}
	}
	io.outln(result);
}

let @main in {
	for(i32 i = 1; i <= 100; i++)
	{
		fizzBuzz(i);
	}
}

Quine:

const io from @'core/io';
String fmt = 'const io from @%ccore/io%c;%cString fmt = %c%s%c;%clet @main in {%c%cio.outf(fmt,39,39,10,39,fmt,39,10,10,9,10,10);%c}%c';
let @main in {
	io.outf(fmt,39,39,10,39,fmt,39,10,10,9,10,10);
}