Skip to content

Instantly share code, notes, and snippets.

@Araq
Araq / parseBool.nim
Created February 20, 2011 13:17
parseBool
proc parseBool(s: string): bool =
case normalize(s)
of "y", "yes", "true", "1", "on": result = true
of "n", "no", "false", "0", "off": result = false
else: raise newException(EInvalidValue, "cannot interpret as a bool: " & s)
#
#
# Nimrod's Runtime Library
# (c) Copyright 2011 Andreas Rumpf
#
# See the file "copying.txt", included in this
# distribution, for details about the copyright.
#
## This module implements big integers for Nimrod.
@Araq
Araq / gist:1235428
Created September 22, 2011 17:38
Module injection
# module A
when not defined(dolog):
template dolog(msg: string) = nil
proc whatever() =
dolog "start of whatever"
doSomeWork
dolog "end of whatever"
@Araq
Araq / cstrings.nim
Created January 22, 2012 13:58
More procs for dealing with CStringArray
proc allocCStringArray*(a: openArray[string]): cstringArray =
## creates a NULL terminated cstringArray from `a`. The result has to
## be freed with `deallocCStringArray` after it's not needed anymore.
result = cast[cstringArray](alloc0((a.len+1) * sizeof(cstring)))
for i in 0 .. a.high:
# XXX get rid of this string copy here:
var x = a[i]
result[i] = cast[cstring](alloc0(x.len+1))
copyMem(result[i], addr(x[0]), x.len)
@Araq
Araq / widestrings.nim
Created January 22, 2012 18:48
Windows' wide strings to Nimrod
import os
type
TUtf16Char = distinct int16
WideCString = ptr array[0.. 1_000_000, TUtf16Char]
const
utf8Encoding = 65001
proc len(w: WideCString): int =
@Araq
Araq / tsortdev.nim
Created January 28, 2012 22:46
yet another showstopper (part 2)
discard """
disabled: false
"""
import math, algorithm
proc sorted[T](a: openArray[T], order: TSortOrder): bool =
result = true
for i in 0 .. < a.high:
if cmp(a[i], a[i+1]) * order > 0:
proc p =
var delta = 7
proc accumulator(start: int): proc(): int =
var x = start-1
result = proc (): int =
x = x + delta
inc delta
return x
var a = accumulator(3)
@Araq
Araq / closureExample.nim
Created March 10, 2012 11:00
closure issue
var funcs: seq[proc (): int {.closure.}] = @[]
proc main() =
var i = 0
while i <= 10:
funcs.add((proc (): int =
var x = i
return x * x))
inc i
@Araq
Araq / closures.nim
Created June 18, 2012 22:21
another closure issue
proc outer =
var x = 0
proc innerB() =
capture x
while true:
var y = 0
proc innerA =
@Araq
Araq / desc.txt
Created September 29, 2012 21:34
Nimrod_description
Nimrod is a statically typed, imperative programming language that tries to
give the programmer ultimate power without compromises on runtime efficiency.
This means it focuses on compile-time mechanisms in all its
various forms. Beneath a nice infix/indentation based syntax with a
powerful (AST based, hygienic) macro system lies a semantic model that supports
a soft realtime GC on thread local heaps. Asynchronous message passing is used
between threads, so no "stop the world" mechanism is necessary. An unsafe
shared memory heap is also provided for the increased efficiency that results
from that model.