Draft:Odin (programming language)
![]() | Review waiting, please be patient.
This may take 2 months or more, since drafts are reviewed in no specific order. There are 1,601 pending submissions waiting for review.
Where to get help
How to improve a draft
You can also browse Wikipedia:Featured articles and Wikipedia:Good articles to find examples of Wikipedia's best writing on topics similar to your proposed article. Improving your odds of a speedy review To improve your odds of a faster review, tag your draft with relevant WikiProject tags using the button below. This will let reviewers know a new draft has been submitted in their area of interest. For instance, if you wrote about a female astronomer, you would want to add the Biography, Astronomy, and Women scientists tags. Editor resources
Reviewer tools
|
Submission declined on 21 November 2021 by Artem.G (talk). This submission is not adequately supported by reliable sources. Reliable sources are required so that information can be verified. If you need help with referencing, please see Referencing for beginners and Citing sources. Neologisms are not considered suitable for Wikipedia unless they receive substantial use and press coverage; this requires strong evidence in independent, reliable, published sources. Links to sites specifically intended to promote the neologism itself do not establish its notability.
Where to get help
How to improve a draft
You can also browse Wikipedia:Featured articles and Wikipedia:Good articles to find examples of Wikipedia's best writing on topics similar to your proposed article. Improving your odds of a speedy review To improve your odds of a faster review, tag your draft with relevant WikiProject tags using the button below. This will let reviewers know a new draft has been submitted in their area of interest. For instance, if you wrote about a female astronomer, you would want to add the Biography, Astronomy, and Women scientists tags. Editor resources
This draft has not been edited in over six months and qualifies to be deleted per CSD G13. Declined by Artem.G 3 years ago. Last edited by RopeRaker 21 months ago. Reviewer: Inform author.This draft has been resubmitted and is currently awaiting re-review. | ![]() |
Comment: of 9 refs 6 are from odin website, and 2 are youtube videos Artem.G (talk) 18:35, 21 November 2021 (UTC)
![]() | |
Paradigms | imperative, procedural |
---|---|
Designed by | Ginger Bill |
First appeared | July 7, 2016 |
Stable release | dev-2023-0x[1]
|
Typing discipline | Static, strong, inferred, nominal, structural, generic |
Platform | x86-64, ARM/ARM64, WebAssembly |
OS | Cross-platform |
License | 3-clause BSD.[2] |
Filename extensions | .odin |
Website | odin-lang |
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] to achieve "high performance" on "modern systems"[12][13], with features like compile-time parametric polymorphism, array programming, and runtime reflection.
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[14], 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[15][16], 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.[17]
// 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[18]. 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[19] 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[20] with many adjustments.
Compared to C, Odin:
- Removes text-based preprocessing stage
- Introduces strong typing
- Adds array programming and improves runtime reflection
- Has explicit function overloading[21]
Compared to Go, Odin:
- Has manual memory management[22]
- Does not have interfaces
- Lacks language-level concurrency primitives, but implements them as part of its core library
Notable software built with Odin
- EmberGen, a real-time volumetric fluid simulator by JangaFX[23][24][25].
See also
References
- ^ "Latest releases". GitHub.
- ^ https://github.com/odin-lang/Odin/blob/master/LICENSE
- ^ https://gamefromscratch.com/odin-programming-language/
- ^ "Jai vs Odin systems programming languages". YouTube. Retrieved 2022-07-06.
- ^ "Frequently Asked Questions".
- ^ "Interview with Odin language creator gingerBill". YouTube.
- ^ "Overloading and/Or (Multi) Methods in Julia, C, Odin, Nim, C#, & TypeScript". YouTube.
- ^ "Overview". odin-lang.org. Retrieved 2022-10-20.
- ^ "Odin programming language review".
- ^ "Something is Happening to Our Programming Languages, and I like It". 31 May 2020.
- ^ "Introducing Odin Lang (Japanese)". Qiita. Retrieved 2019-09-29.
- ^ https://odin-lang.org/
- ^ "Comparisons with other languages - C3 Documentation".
- ^ "Odin programming language review".
- ^ "Generating the multiplication table for octonions in Odin".
- ^ "Overview". odin-lang.org. Retrieved 2022-10-20.
- ^ "Data Type (GLSL) - OpenGL Wiki".
- ^ "A review of the Odin programming language". graphitemaster. Retrieved 2022-09-10.
- ^ "Overview".
- ^ "Low-Level Programming with Odin Lang". Dev. Retrieved 2022-09-21.
- ^ "Overview". odin-lang.org. Retrieved 2022-10-20.
- ^ "Low-Level Programming with Odin Lang - Perfect for Beginners".
- ^ "EmberGen: Real-Time Fluid Simulations for Fire, Smoke, and Explosions!".
- ^ "EmberGen Real-Time Fluid Simulation". 9 May 2022.
- ^ "Episode 289 - EmberGen". 9 March 2021.
External links
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