Jump to content

Draft:Odin (programming language)

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Karl.zylinski (talk | contribs) at 10:44, 27 November 2023 (Added additional sources). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
  • Comment: None of the sources used are reliable and/or independent and nothing suggests this can meet the notability guidelines. S0091 (talk) 19:34, 15 August 2023 (UTC)
  • Comment: of 9 refs 6 are from odin website, and 2 are youtube videos Artem.G (talk) 18:35, 21 November 2021 (UTC)

Odin
Paradigmsimperative, procedural
Designed byGinger Bill
First appearedJuly 7, 2016; 8 years ago (2016-07-07)
Stable release
dev-2023-0x[1]
Typing disciplineStatic, strong, inferred, nominal, structural, generic
Platformx86-64, ARM/ARM64, WebAssembly
OSCross-platform
License3-clause BSD.[2]
Filename extensions.odin
Websiteodin-lang.org
Influenced by
Pascal[3], C, Go, Oberon-2, Newsqueak, Jai[4], GLSL[5]

Odin is an imperative, general-purpose, compiled, statically typed, and distinct types using system programming language designed by Ginger Bill[6]

The language supports: compile-time parametric polymorphism, runtime reflection, cross-compilation, manual memory management, array programming, and SOA data types.[7][8][9][10]

Example

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)
}

Design

Odin is designed to be an alternative for the C programming language[11][12] to achieve "high performance" on "modern systems"[13][14], with features like compile-time parametric polymorphism, array programming, and runtime reflection.[9]

Syntax

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

Odin has procedure overloading[15], 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

Odin provides array programming[16][17], 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.[18]

// 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

A matrix is a mathematical type built into Odin.[19]. 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[20] 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

The syntax of Odin partially resembles Go's syntax[21] with many adjustments.

Compared to C, Odin:

Compared to Go, Odin:

  • Has manual memory management[23]
  • Does not have interfaces
  • Lacks language-level concurrency primitives, but implements them as part of its core library

Notable software built with Odin

See also

References

  1. ^ "Latest releases". GitHub.
  2. ^ https://github.com/odin-lang/Odin/blob/master/LICENSE
  3. ^ https://gamefromscratch.com/odin-programming-language/
  4. ^ "Jai vs Odin systems programming languages". YouTube. Retrieved 2022-07-06.
  5. ^ "Frequently Asked Questions".
  6. ^ "Interview with Odin language creator gingerBill". YouTube.
  7. ^ "Overloading and/Or (Multi) Methods in Julia, C, Odin, Nim, C#, & TypeScript". YouTube.
  8. ^ "Overview". odin-lang.org. Retrieved 2022-10-20.
  9. ^ a b "Odin programming language review".
  10. ^ "Something is Happening to Our Programming Languages, and I like It". 31 May 2020.
  11. ^ "Introducing Odin Lang (Japanese)". Qiita. Retrieved 2019-09-29.
  12. ^ "Programming Games by Hand Using Odin". CodeNewbie Community 🌱. 2022-11-04. Retrieved 2023-11-27.
  13. ^ https://odin-lang.org/
  14. ^ "Comparisons with other languages - C3 Documentation".
  15. ^ "Odin programming language review".
  16. ^ "Generating the multiplication table for octonions in Odin".
  17. ^ "Overview". odin-lang.org. Retrieved 2022-10-20.
  18. ^ "Data Type (GLSL) - OpenGL Wiki".
  19. ^ "A review of the Odin programming language". graphitemaster. Retrieved 2022-09-10.
  20. ^ "Overview".
  21. ^ "Low-Level Programming with Odin Lang". Dev. Retrieved 2022-09-21.
  22. ^ "Overview". odin-lang.org. Retrieved 2022-10-20.
  23. ^ "Low-Level Programming with Odin Lang - Perfect for Beginners".
  24. ^ "EmberGen: Real-Time Fluid Simulations for Fire, Smoke, and Explosions!".
  25. ^ "EmberGen Real-Time Fluid Simulation". 9 May 2022.
  26. ^ "Episode 289 - EmberGen". 9 March 2021.

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