A fast, concise, readable, pragmatic and open sourced programming language.
The Odin Programming Language
The Odin programming language is fast, concise, readable, pragmatic and open sourced. It is designed with the intent of creating an alternative to C with the following goals:
- simplicity
- high performance
- built for modern systems
- joy of programming
Website: https://odin-lang.org/
package main
import "core:fmt"
main :: proc() {
program := "+ + * ๐ - /";
accumulator := 0;
for token in program {
switch token {
case '+': accumulator += 1;
case '-': accumulator -= 1;
case '*': accumulator *= 2;
case '/': accumulator /= 2;
case '๐': accumulator *= accumulator;
case: // Ignore everything else
}
}
fmt.printf("The program \"%s\" calculates the value %d\n",
program, accumulator);
}
Documentation
Getting Started
Instructions for downloading and installing the Odin compiler and libraries.
Learning Odin
Overview of Odin
An overview of the Odin programming language.
Frequently Asked Questions (FAQ)
Answers to common questions about Odin.
The Odin Wiki
A wiki maintained by the Odin community.
Odin Discord
Get live support and talk with other odiners on the Odin Discord.
References
Language Specification
The official Odin Language specification.
Articles
The Odin Blog
The official blog of the Odin programming language, featuring announcements, news, and in-depth articles by the Odin team and guests.
Setup
Odin only supports x86-64/amd64 at the moment (64-bit), relies on LLVM for code generation and an external linker.
In addition, the following platform-specific steps are necessary:
-
Windows
- Have Visual Studio installed (MSVC 2010 or later, for the linker)
- Have a copy of
opt.exe
andllc.exe
inOdin/bin
. Pre-built Windows binaries can be found here and must be explicitly copied - Open a valid command prompt:
- Basic: run the
x64 Native Tools Command Prompt for VS2017
shortcut bundled with VS 2017, or - Advanced: run
vcvarsall.bat x64
from a blankcmd
session
- Basic: run the
-
MacOS
- Have LLVM explicitly installed (
brew install llvm
) - Have XCode installed (version X.X or later, for linking)
- Make sure the LLVM binaries and the linker are added to your
$PATH
environmental variable
- Have LLVM explicitly installed (
-
GNU/Linux
- Have LLVM installed (opt/llc)
- Have Clang installed (version X.X or later, for linking)
- Make sure the LLVM binaries and the linker are added to your
$PATH
environmental variable
Then build the compiler by calling build.bat
(Windows) or make
(Linux/MacOS). This will automatically run the demo program if successful.
Notes for Linux:: The compiler currently relies on the core
and shared
library collection being relative to the compiler executable. Installing the compiler in the usual sense (to /usr/local/bin
or similar) is therefore not as straight forward as you need to make sure the mentioned libraries are available. As a result, it is recommended to simply explicitly invoke the compiler with /path/to/odin
in your preferred build system, or add /path/to/odin
to $PATH
.
Please read the Getting Started Guide for more information.
Requirements to build and run
Please read the Getting Started Guide.
-
Windows
- x86-64/amd64
- MSVC 2010 installed (C++11 support)
- LLVM binaries for
opt.exe
,llc.exe
, andlld-link.exe
- Requires MSVC's link.exe as the linker
- run
vcvarsall.bat
to setup the path
- run
-
MacOS
- x86-64/amd64
- LLVM explicitly installed (
brew install llvm
) - XCode installed (for the linker)
-
GNU/Linux
- x86-64/amd64
- Build tools (ld)
- LLVM installed
- Clang installed (temporary - this is Calling the linker for now)
-
FreeBSD
- x86-64/amd64
- Build tools (ld)
- LLVM installed
- Clang installed (temporary - this is Calling the linker for now)
Other platforms may be supported but are experimental for the time being.
Warnings
- The Odin compiler is still in development.
Demonstrations:
- First Talk & Demo
- Composition & Refactorability
- Introspection, Modules, and Record Layout
- push_allocator & Minimal Dependency Building
- when, for & procedure overloading
- Context Types, Unexported Entities, Labelled Branches
- Bit Fields, i128 & u128, Syntax Changes
- Default and Named Arguments; Explicit Parametric Polymorphism
- Loadsachanges
- Packages, Bit Sets, cstring