okto/README.md
2025-01-14 17:42:23 +11:00

4.4 KiB

Okto programming language logo

oktolang - A silly little programming language

What is Okto?

Okto is an interpreted programming language written in C++. It's a strongly typed language which tells you exactly where you messed up if there's an error. Both a REPL and file input are supported.

Why is Okto?

No reason.

Maybe one day the NodeJS community will find it and obsess over it in it's unoptimisedness. But that remains to be seen.

How do I Okto?

If you'd like to try online, a replit template is avaliable.

Okto uses features from C++ 17, so make sure you have an updated compiler. I recommend gcc. Here are some instructions:

Linux (and most other Unix-like)

First, install gcc or another C++ compiler.

Clone the repository, CD into it and run:

g++ src/main.cpp -o okto

If needed, statically link with -static.

Run ./okto to run, and test with ./okto example.okto (assuming you did clone the repository)

MacOS

First, install Xcode and accept the agreement.

Then, clone the repository CD into it and run:

g++ src/main.cpp -o okto -std=c++17

If needed, statically link with -static.

Run ./okto to run, and test with ./okto example.okto (assuming you did clone the repository)

Windows

There are three ways to compile for Windows: through Linux (I personally recommend, can be done through WSL), through MSYS2 or Cygwin, or through Windows.

Through Linux

Install your distro's mingw GCC package. On Arch Linux, it's mingw-w64-gcc. Compile with:

x86_64-w64-mingw32 src/main.cpp -o okto.exe -static

If you're not using WSL, you may want to use Wine to test the build. At the time of writing, all Okto features should work when run with Wine.

Through MSYS2/Cygwin

Refer to the documentation for these platforms. Steps should be similar to compiling for Linux.

Through Windows

Search for a package including g++ through winget, and install your preferred option. Compile with:

g++ src/main.cpp -o okto

If needed, statically link with -static This is highly recommended if distributing to other Windows machines..

Now we can start writing our code!

The Basics of Okto

Syntax

Okto's syntax is still developing, and may change at any time. So if you update and your code breaks, check back here.

Functions usually work like this:

functionName arg1 arg2 arg3

A bit like Python 2 or shell.

Some built in functions include:

log: Log something to the console. Usage: log (string, decimal, integer) Example: log "Hello, World!"

type: Check the type of something. If it doesn't have a type, it's unknown. Usage: type (function, variable, string, decimal, integer, incrementor, modifier, operator, comparitor, equals) Example: type 432

run: Run a command on the system. May not work on every OS. Usage: run (string)

in: Take input from the console. For now, this doesn't do much, but this will change soon. Usage: in (optional: string) Example: in "What's your name? "

exit: Exit the program. Usage: exit (optional: integer)

Okto is strongly typed, which means we need to learn about all the different types in the language! At present there are three types in Okto: strings, integers and decimals. Defining variables uses a C/C++ like syntax.

Strings

Strings are a bunch of letters enclosed in double quotes, like "this".

Define a string in Okto with str myString = "Hello World!"

Integers

Integers are whole numbers, like 7.

Define an integer in Okto with int myInteger = 7

Decimals

Decimals are non-whole numbers, like 3.14159.

Define a decimal in Okto with dec myDecimal = 3.14159

Using variables

Use variables in your code like $variable, but replace variable with your actual variable's name. Make sure to use correct types in places! Incorporate a variable inside a string with "${variable}"

Updating Variables

Right now only integers and decimals can be changed. I'll refer to these as numbers.

Increment numbers with myVariable ++ and decrement with myVariable --.

Add stuff together in number variables with myVariable = $myOtherVariable + 7. You can also subtract, multiply and divide with -, * and / respectively. For now you can't math outside of variables as it's still a prototype feature.