FredAtBootstrap
http://bootstrap.me.uk
https://dev.to/redfred7
Fred
Quest for a new language
Requirements:
● Safe
● Portable
● Performant
● Expressive
● Elegant
Candidates:
1. Rust
2. Go
3. Nim
● 2005: Andreas Rumpf
● Community-driven
● Imperative
● Multi-paradigm
● Current release: 1.0.2
Origins
© Nim In Action, Dominik Picheta, Manning Publications, 2016
Portability
● nim c cc:gcc myproject.nim
● nim c --cpu:i386 --os:linux --compileOnly --genScript
myproject.nim
● nim c --cpu:arm --os:linux myproject.nim
● nim c -d:mingw myproject.nim
● nim c --os:nintendoswitch myproject.nim
--passC="-I$DEVKITPRO/libnx/include"
--passL="-specs=$DEVKITPRO/libnx/switch.specs
-L$DEVKITPRO/libnx/lib -lnx"
Compilation
● FFI
● Wrapping code or libraries (see next slide)
● c2nim = Parse a C file and generate equivalent
Nim code
Interoperability with C-family
languages
● Non-tracing GC
● Can be customised
○ GC_setMaxPause(MaxPauseInUs: int)
○ GC_step(us: int, strongAdvice = false, stackSize = -1)
● Can be turned off
○ GC_disable()
Garbage Collection
Tooling
● $> choosenim 0.12
● $> nimble install nake
● Sublime, vim, VS Code, Aporia Editor
Nim Basics
Statically typed + variable state
Functions - classic return
Functions - implicit return
Functions - returning result
Functions - style agnostic calls
Functions - UFC
Function: overloading
Generics
First-class Functions
Modules
person.nim
main.nim
Modules
Functional programming
Side-effect checking
Built-in functional style
Multi-tasking &
Asynchronous coding
Multi-threading
Async + Futures
Async Await
Metaprogramming
Templates
Macros
● Modify the
AST
● See example
Macros
Macros
Compile-time function execution
(CTFE)
Nim in Action, Dominik Picheta, Manning
Publications 2016
Compile-time Function
Execution
proc fillString(): string =
result = ""
echo("Generating string")
for i in 0 .. 4:
result.add($i)
const count = fillString()
NimScript
Embedded scripts
let script1 = compileScript("script1.nims")
let result = script1.call
Other features
- Deferred code execution
- Iterators
- staticExec
- {.emit.}
-
- Asm
Why Nim?
❏ Portability
❏ High Performance
❏ Compatibility
❏ Excellent type system
❏ Syntactic sugar
❏ Strong Concurrency & Parallelism
Learn more!
http://nim-lang.org/
https://hookrace.net/blog

Nim programming language - DevFest Berlin 2019