Odin (programming language)

From EverybodyWiki Bios & Wiki

Script error: No such module "Draft topics". Script error: No such module "AfC topic".

The odin programming language logo.svg
Paradigmsimperative, procedural
Designed byGinger Bill
First appearedJuly 7, 2016; 5 years ago (2016-07-07)
Typing disciplineStatic, strong, inferred, nominal, structural, generic
Platformx86-64, ARM, WebAssembly
License3-clause BSD.[1]
Filename extensions.odin
Influenced by
Pascal, C, Go, Oberon-2, Newsqueak, Jai, GLSL[2]

Amazon.com Logo.png Search Odin (programming language) on Amazon.

Odin is an imperative, general-purpose, statically typed, distinctly typed, compiled system programming language designed by Ginger Bill[3]

The language is designed for "high performance, modern systems, and built-in data-oriented data types", supports compile-time parametric polymorphism, runtime reflection, cross-compilation, manual memory management, array programming, and SOA data types.[4][5]


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)


Odin is designed as being an alternative for the C programming language on "high performance, modern systems"[6], with features like compile-time parametric polymorphism, array programming, and runtime reflection.


Odin's declaration syntax is inspired by Newsqueak and Jai.

// Variable declarations
x : int = 123
x := 123 // Type inference

// Constant value declarations
X :: 123
Y : int : 123

// Function declaration
Z :: proc() {}

Explicit procedure overloading[edit]

Odin has procedure overloading, but unlike C++ the overloads have to be specified explicitly.

bool_to_string :: proc(b: bool) -> string {...}
int_to_string  :: proc(i: int)  -> string {...}

// "to_string" is will call either "bool_to_string" or "int_to_string" depending on type.
to_string :: proc{bool_to_string, int_to_string}

Array programming[edit]

Odin provides array programming, enabling arithmetics on array elements:

a := [3]f32{ 1, 2, 3 }
b := [3]f32{ 5, 6, 7 }
c := a * b
d := a + b
e := 1 + (c - d) / 2
fmt.printf("%.1f\n", e) // [0.5, 3.0, 6.5]

The language also features "swizzling" of arrays, similar to the operation in shader languages like GLSL.[7]

// Declaring type Vector to be the same as array of 3 f32's.
Vector3 :: [3]f32

// Cross product using swizzle function
cross :: proc(a, b: Vector3) -> Vector3 {
	i := swizzle(a, 1, 2, 0) * swizzle(b, 2, 0, 1)
	j := swizzle(a, 2, 0, 1) * swizzle(b, 1, 2, 0)
	return i - j

// Cross product using shorter swizzle notation
cross_shorter :: proc(a, b: Vector3) -> Vector3 {
	i := a.yzx * b.zxy
	j := a.zxy * b.yzx
	return i - j

Matrix support[edit]

A matrix is a mathematical type built into Odin. It is a regular array of numbers, arranged in rows and columns. Odin's matrix support allows for matrix-array and matrix-matrix operations making it a Level 3 Basic Linear Algebra Subprograming language.

a: matrix[2, 3]f32 // matrix that has 2 rows and 3 columns with an element type of f32
b: matrix[3, 2]f32 // matrix that has 3 rows and 2 columns with an element type of f32
v: [2]f32          // array that has 2 elements with an element type of f32

a = matrix[2, 3]f32{
	1, 9, -13,
	20, 5, -6,
b = matrix[3, 2]f32{
	3, 5,
    7, 9,
v = [2]f32{2, -4}

m  := a * b // matrix-matrix multiplication
vp := m * v // matrix-array multiplication

The internal representation of a matrix in Odin is stored in column-major format[8] while the matrix literals are written in standard (row-major like) order (e.g. matrix[2, 3]f32 is internally [3][2]f32 (with different a alignment requirement)). Column-major is used in order to utilize (SIMD) vector instructions effectively on modern hardware, if possible.

Comparisons with other languages[edit]

The syntax of Odin resembles Go's syntax with many adjustments.

Compared to C, Odin:

  • Removes UB from the language
  • Removes text-based preprocessing stage
  • Introduces strong typing
  • Adds array programming and improves runtime reflection
  • Has explicit function overloading[9]

Compared to Go, Odin:

  • Has manual memory management
  • Does not have interfaces

Notable software built with Odin[edit]

  • EmberGen, a real-time volumetric fluid simulator by JangaFX.

See also[edit]

Other articles of the topics Free and open-source software AND Computer programming : AdoptOpenJDK, Zig (programming language), PRADO (framework), JDK Flight Recorder, Solarus (game engine), ArcadeDB, Koseven (framework)

Other articles of the topic Free and open-source software : Enguage, Apache Commons DbUtils, Naeon, Lobsters (website), LosslessCut, Libera Chat, l7-filter

Other articles of the topic Computer programming : C++/codebox experiment, Byte Buddy, JDK Flight Recorder, Soaplab, Potato Open Sauce Project, Zig (programming language), Koseven (framework)
Some use of "" in your query was not closed by a matching "".Some use of "" in your query was not closed by a matching "".

  • Pascal
  • C
  • Go
  • Newsqueak
  • Array Programming
  • Basic Linear Algebra Subprograms (BLAS)
  • SIMD


  1. https://github.com/odin-lang/Odin/blob/master/LICENSE
  2. https://odin-lang.org/docs/faq/
  3. https://www.youtube.com/watch?v=2YLA4ajby00
  4. https://www.youtube.com/watch?v=iCqW_RepcW0
  5. https://odin-lang.org/docs/overview/
  6. https://odin-lang.org/
  7. https://www.khronos.org/opengl/wiki/Data_Type_(GLSL)#Swizzling
  8. https://odin-lang.org/docs/overview/#matrix-type
  9. "Overview". odin-lang.org. Retrieved 2021-11-15.

External links[edit]

Category:Programming languages Category:Cross-platform free software Category:Cross-platform software Category:Free compilers and interpreters Category:Programming languages created in 2016 Category:Statically typed programming languages Category:Systems programming languages

This article "Odin (programming language)" is from Wikipedia. The list of its authors can be seen in its historical and/or the page Edithistory:Odin (programming language). Articles copied from Draft Namespace on Wikipedia could be seen on the Draft Namespace of Wikipedia and not main one.