Zig Programming Language
| Logo for the Zig programming language | |
| Paradigm | imperative, compiled, procedural |
|---|---|
| Designed by | Andrew Kelley |
| First appeared | 2015 |
| Stable release | 0.3.0
/ September 28, 2018[1] |
| Typing discipline | static |
| Platform | i386, x86-64, arm, aarch64, bpf, hexagon, mips, powerpc, r600, amdgcn, sparc, s390x, thumb, spir, lanal |
| OS | Cross-platform[2][3] |
| License | MIT[4] |
| Filename extensions | .zig |
| Website | ziglang |
| Influenced by | |
| C, C++, Go | |
Search Zig Programming Language on Amazon.
Zig is an open-source programming language designed for "robustness, optimality, and clarity".[3][5][6] The language is intended to compete directly with C and libc is not a dependency, although you can still directly import C header files.[5][7][6] The founder and main designer of Zig is Andrew Kelley.[6]
Language Design
Specific inspirations for Zig's design include the following:
- C: Strict outlook on language features
- Rust: Avoiding null types
- Go: Defer
- Jai: Allocators, compile-time function evaluation
- Node.js: @import, async, and await
- LLVM IR: Builtins
The syntax takes cues from C, Rust, and Go. Zig is designed with thorough safety in mind, and as such manual memory management is a critical feature, holding the principle that "edge cases matter."[7][8] Zig purposefully discards C’s preprocessor, instead focusing on other compile-time code possibilities. The language is designed to make cross-compilation easy.[5] Zig utilizes LLVM currently.[9]
The standard library has been influenced by musl, libc, and wine.
Examples
Hello World
const debug = @import("std").debug;
pub fn main() void {
debug.warn("Hello, world!\n");
}
Importing C Header Files
const c = @cImport({
@cInclude("stdio.h");
});
Enumerations
const CatBreed = enum {
Siamese,
Bengal,
Shorthair,
Other,
};
You can also clarify the integers associated with each name.
const CatBreed = enum(u8) {
Siamese = 0,
Bengal = 1,
Shorthair = 5,
Other = 10,
};
Factorial
The code below is an implementation of the factorial function in Zig. Marking a parameter with comptime indicates that the value must be known at compile-time, something that Zig places importance on.[10]
const std = @import("std");
pub fn factorial(comptime n: comptime_int) comptime_int {
return if (n > 0) n * factorial(n - 1) else 1;
}
pub fn main() void {
std.debug.warn("{}\n", u128(factorial(30)));
}
References
- ↑ "GitHub Releases". Github.com. Retrieved 2018-11-12.
- ↑ "GitHub Readme". Github.com. Retrieved 2018-11-12.
- ↑ 3.0 3.1 Elizabeth, Jane (2017-10-19). "New programming language Zig aims to be more pragmatic and readable". Jaxenter.com. Retrieved 2018-11-12.
- ↑ "GitHub License File". Github.com. Retrieved 2018-11-12.
- ↑ 5.0 5.1 5.2 Cardoza, Christina; Moore, Madison (2016-08-29). "SD Times news digest". Sdtimes.com. Retrieved 2018-11-12.
- ↑ 6.0 6.1 6.2 Yegulalp, Serdar (2016-08-29). "New challenger joins Rust to topple C language". Infoworld.com. Retrieved 2018-11-12.
- ↑ 7.0 7.1 "Ziglang Website". Ziglang.org. Retrieved 2018-11-12.
- ↑ "Recurse Center Presentation". Recurse.com. Retrieved 2018-11-12.
- ↑ "LLVM Weekly News". LLVMweekly.org. Retrieved 2018-11-19.
- ↑ "Ziglang Documentation". Ziglang.org. Retrieved 2018-11-12.
External links
This article "Zig Programming Language" is from Wikipedia. The list of its authors can be seen in its historical and/or the page Edithistory:Zig Programming Language. Articles copied from Draft Namespace on Wikipedia could be seen on the Draft Namespace of Wikipedia and not main one.
