release of 0.10.2
This commit is contained in:
parent
a70a64b74d
commit
27f1743793
12 changed files with 224 additions and 232 deletions
|
|
@ -927,17 +927,18 @@ proc readTypeParameter(c: PContext, typ: PType,
|
||||||
paramName: PIdent, info: TLineInfo): PNode =
|
paramName: PIdent, info: TLineInfo): PNode =
|
||||||
let ty = if typ.kind == tyGenericInst: typ.skipGenericAlias
|
let ty = if typ.kind == tyGenericInst: typ.skipGenericAlias
|
||||||
else: (internalAssert(typ.kind == tyCompositeTypeClass); typ.sons[1])
|
else: (internalAssert(typ.kind == tyCompositeTypeClass); typ.sons[1])
|
||||||
|
#debug ty
|
||||||
let tbody = ty.sons[0]
|
let tbody = ty.sons[0]
|
||||||
for s in countup(0, tbody.len-2):
|
for s in countup(0, tbody.len-2):
|
||||||
let tParam = tbody.sons[s]
|
let tParam = tbody.sons[s]
|
||||||
if tParam.sym.name == paramName:
|
if tParam.sym.name.id == paramName.id:
|
||||||
let rawTyp = ty.sons[s + 1]
|
let rawTyp = ty.sons[s + 1]
|
||||||
if rawTyp.kind == tyStatic:
|
if rawTyp.kind == tyStatic:
|
||||||
return rawTyp.n
|
return rawTyp.n
|
||||||
else:
|
else:
|
||||||
let foundTyp = makeTypeDesc(c, rawTyp)
|
let foundTyp = makeTypeDesc(c, rawTyp)
|
||||||
return newSymNode(copySym(tParam.sym).linkTo(foundTyp), info)
|
return newSymNode(copySym(tParam.sym).linkTo(foundTyp), info)
|
||||||
|
#echo "came here: returned nil"
|
||||||
|
|
||||||
proc builtinFieldAccess(c: PContext, n: PNode, flags: TExprFlags): PNode =
|
proc builtinFieldAccess(c: PContext, n: PNode, flags: TExprFlags): PNode =
|
||||||
## returns nil if it's not a built-in field access
|
## returns nil if it's not a built-in field access
|
||||||
|
|
|
||||||
|
|
@ -1083,6 +1083,11 @@ proc localConvMatch(c: PContext, m: var TCandidate, f, a: PType,
|
||||||
arg: PNode): PNode =
|
arg: PNode): PNode =
|
||||||
# arg.typ can be nil in 'suggest':
|
# arg.typ can be nil in 'suggest':
|
||||||
if isNil(arg.typ): return nil
|
if isNil(arg.typ): return nil
|
||||||
|
|
||||||
|
# sem'checking for 'echo' needs to be re-entrant:
|
||||||
|
# XXX we will revisit this issue after 0.10.2 is released
|
||||||
|
if f == arg.typ and arg.kind == nkHiddenStdConv: return arg
|
||||||
|
|
||||||
var call = newNodeI(nkCall, arg.info)
|
var call = newNodeI(nkCall, arg.info)
|
||||||
call.add(f.n.copyTree)
|
call.add(f.n.copyTree)
|
||||||
call.add(arg.copyTree)
|
call.add(arg.copyTree)
|
||||||
|
|
|
||||||
|
|
@ -154,8 +154,8 @@ Generic Operating System Services
|
||||||
|
|
||||||
* `streams <streams.html>`_
|
* `streams <streams.html>`_
|
||||||
This module provides a stream interface and two implementations thereof:
|
This module provides a stream interface and two implementations thereof:
|
||||||
the `PFileStream` and the `PStringStream` which implement the stream
|
the `FileStream` and the `StringStream` which implement the stream
|
||||||
interface for Nim file objects (`TFile`) and strings. Other modules
|
interface for Nim file objects (`File`) and strings. Other modules
|
||||||
may provide other implementations for this standard stream interface.
|
may provide other implementations for this standard stream interface.
|
||||||
|
|
||||||
* `marshal <marshal.html>`_
|
* `marshal <marshal.html>`_
|
||||||
|
|
|
||||||
|
|
@ -1516,7 +1516,7 @@ const
|
||||||
NimMinor*: int = 10
|
NimMinor*: int = 10
|
||||||
## is the minor number of Nim's version.
|
## is the minor number of Nim's version.
|
||||||
|
|
||||||
NimPatch*: int = 1
|
NimPatch*: int = 2
|
||||||
## is the patch number of Nim's version.
|
## is the patch number of Nim's version.
|
||||||
|
|
||||||
NimVersion*: string = $NimMajor & "." & $NimMinor & "." & $NimPatch
|
NimVersion*: string = $NimMajor & "." & $NimMinor & "." & $NimPatch
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,7 @@ proc TestLoops() =
|
||||||
break
|
break
|
||||||
break
|
break
|
||||||
|
|
||||||
while True:
|
while true:
|
||||||
break
|
break
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -73,7 +73,7 @@ proc main() =
|
||||||
res: int
|
res: int
|
||||||
s: string
|
s: string
|
||||||
#write(stdout, mymax(23, 45))
|
#write(stdout, mymax(23, 45))
|
||||||
write(stdout, "Hallo! Wie heißt du? ")
|
write(stdout, "Hallo! Wie heisst du? ")
|
||||||
s = readLine(stdin)
|
s = readLine(stdin)
|
||||||
# test the case statement
|
# test the case statement
|
||||||
case s
|
case s
|
||||||
|
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
import strutils
|
|
||||||
|
|
||||||
echo ParseFloat("5000") / ParseFloat("10")
|
|
||||||
|
|
@ -397,7 +397,7 @@ proc esc(c: char, reserved = {'\0'..'\255'}): string =
|
||||||
elif c in reserved: result = '\\' & c
|
elif c in reserved: result = '\\' & c
|
||||||
else: result = $c
|
else: result = $c
|
||||||
|
|
||||||
proc singleQuoteEsc(c: Char): string = return "'" & esc(c, {'\''}) & "'"
|
proc singleQuoteEsc(c: char): string = return "'" & esc(c, {'\''}) & "'"
|
||||||
|
|
||||||
proc singleQuoteEsc(str: string): string =
|
proc singleQuoteEsc(str: string): string =
|
||||||
result = "'"
|
result = "'"
|
||||||
|
|
@ -421,11 +421,11 @@ proc charSetEscAux(cc: set[char]): string =
|
||||||
c1 = c2
|
c1 = c2
|
||||||
inc(c1)
|
inc(c1)
|
||||||
|
|
||||||
proc CharSetEsc(cc: set[char]): string =
|
proc charSetEsc(cc: set[char]): string =
|
||||||
if card(cc) >= 128+64:
|
if card(cc) >= 128+64:
|
||||||
result = "[^" & CharSetEscAux({'\1'..'\xFF'} - cc) & ']'
|
result = "[^" & charSetEscAux({'\1'..'\xFF'} - cc) & ']'
|
||||||
else:
|
else:
|
||||||
result = '[' & CharSetEscAux(cc) & ']'
|
result = '[' & charSetEscAux(cc) & ']'
|
||||||
|
|
||||||
proc toStrAux(r: TPeg, res: var string) =
|
proc toStrAux(r: TPeg, res: var string) =
|
||||||
case r.kind
|
case r.kind
|
||||||
|
|
@ -522,12 +522,12 @@ proc `$` *(r: TPeg): string {.rtl, extern: "npegsToString".} =
|
||||||
|
|
||||||
type
|
type
|
||||||
TCaptures* {.final.} = object ## contains the captured substrings.
|
TCaptures* {.final.} = object ## contains the captured substrings.
|
||||||
matches: array[0..maxSubpatterns-1, tuple[first, last: int]]
|
matches: array[0..MaxSubpatterns-1, tuple[first, last: int]]
|
||||||
ml: int
|
ml: int
|
||||||
origStart: int
|
origStart: int
|
||||||
|
|
||||||
proc bounds*(c: TCaptures,
|
proc bounds*(c: TCaptures,
|
||||||
i: range[0..maxSubpatterns-1]): tuple[first, last: int] =
|
i: range[0..MaxSubpatterns-1]): tuple[first, last: int] =
|
||||||
## returns the bounds ``[first..last]`` of the `i`'th capture.
|
## returns the bounds ``[first..last]`` of the `i`'th capture.
|
||||||
result = c.matches[i]
|
result = c.matches[i]
|
||||||
|
|
||||||
|
|
@ -695,7 +695,7 @@ proc rawMatch*(s: string, p: TPeg, start: int, c: var TCaptures): int {.
|
||||||
while start+result < s.len:
|
while start+result < s.len:
|
||||||
var x = rawMatch(s, p.sons[0], start+result, c)
|
var x = rawMatch(s, p.sons[0], start+result, c)
|
||||||
if x >= 0:
|
if x >= 0:
|
||||||
if idx < maxSubpatterns:
|
if idx < MaxSubpatterns:
|
||||||
c.matches[idx] = (start, start+result-1)
|
c.matches[idx] = (start, start+result-1)
|
||||||
#else: silently ignore the capture
|
#else: silently ignore the capture
|
||||||
inc(result, x)
|
inc(result, x)
|
||||||
|
|
@ -739,7 +739,7 @@ proc rawMatch*(s: string, p: TPeg, start: int, c: var TCaptures): int {.
|
||||||
inc(c.ml)
|
inc(c.ml)
|
||||||
result = rawMatch(s, p.sons[0], start, c)
|
result = rawMatch(s, p.sons[0], start, c)
|
||||||
if result >= 0:
|
if result >= 0:
|
||||||
if idx < maxSubpatterns:
|
if idx < MaxSubpatterns:
|
||||||
c.matches[idx] = (start, start+result-1)
|
c.matches[idx] = (start, start+result-1)
|
||||||
#else: silently ignore the capture
|
#else: silently ignore the capture
|
||||||
else:
|
else:
|
||||||
|
|
@ -836,7 +836,7 @@ iterator findAll*(s: string, pattern: TPeg, start = 0): string =
|
||||||
while i < s.len:
|
while i < s.len:
|
||||||
var L = matchLen(s, pattern, matches, i)
|
var L = matchLen(s, pattern, matches, i)
|
||||||
if L < 0: break
|
if L < 0: break
|
||||||
for k in 0..maxSubPatterns-1:
|
for k in 0..MaxSubPatterns-1:
|
||||||
if isNil(matches[k]): break
|
if isNil(matches[k]): break
|
||||||
yield matches[k]
|
yield matches[k]
|
||||||
inc(i, L)
|
inc(i, L)
|
||||||
|
|
@ -866,7 +866,7 @@ template `=~`*(s: string, pattern: TPeg): expr =
|
||||||
## echo("syntax error")
|
## echo("syntax error")
|
||||||
##
|
##
|
||||||
when not definedInScope(matches):
|
when not definedInScope(matches):
|
||||||
var matches {.inject.}: array[0..maxSubpatterns-1, string]
|
var matches {.inject.}: array[0..MaxSubpatterns-1, string]
|
||||||
match(s, pattern, matches)
|
match(s, pattern, matches)
|
||||||
|
|
||||||
# ------------------------- more string handling ------------------------------
|
# ------------------------- more string handling ------------------------------
|
||||||
|
|
@ -907,7 +907,7 @@ proc replacef*(s: string, sub: TPeg, by: string): string {.
|
||||||
## "var1<-keykey; val2<-key2key2"
|
## "var1<-keykey; val2<-key2key2"
|
||||||
result = ""
|
result = ""
|
||||||
var i = 0
|
var i = 0
|
||||||
var caps: array[0..maxSubpatterns-1, string]
|
var caps: array[0..MaxSubpatterns-1, string]
|
||||||
while i < s.len:
|
while i < s.len:
|
||||||
var x = matchLen(s, sub, caps, i)
|
var x = matchLen(s, sub, caps, i)
|
||||||
if x <= 0:
|
if x <= 0:
|
||||||
|
|
@ -924,7 +924,7 @@ proc replace*(s: string, sub: TPeg, by = ""): string {.
|
||||||
## in `by`.
|
## in `by`.
|
||||||
result = ""
|
result = ""
|
||||||
var i = 0
|
var i = 0
|
||||||
var caps: array[0..maxSubpatterns-1, string]
|
var caps: array[0..MaxSubpatterns-1, string]
|
||||||
while i < s.len:
|
while i < s.len:
|
||||||
var x = matchLen(s, sub, caps, i)
|
var x = matchLen(s, sub, caps, i)
|
||||||
if x <= 0:
|
if x <= 0:
|
||||||
|
|
@ -942,7 +942,7 @@ proc parallelReplace*(s: string, subs: varargs[
|
||||||
## applied in parallel.
|
## applied in parallel.
|
||||||
result = ""
|
result = ""
|
||||||
var i = 0
|
var i = 0
|
||||||
var caps: array[0..maxSubpatterns-1, string]
|
var caps: array[0..MaxSubpatterns-1, string]
|
||||||
while i < s.len:
|
while i < s.len:
|
||||||
block searchSubs:
|
block searchSubs:
|
||||||
for j in 0..high(subs):
|
for j in 0..high(subs):
|
||||||
|
|
@ -1055,7 +1055,7 @@ type
|
||||||
TPegLexer {.inheritable.} = object ## the lexer object.
|
TPegLexer {.inheritable.} = object ## the lexer object.
|
||||||
bufpos: int ## the current position within the buffer
|
bufpos: int ## the current position within the buffer
|
||||||
buf: cstring ## the buffer itself
|
buf: cstring ## the buffer itself
|
||||||
LineNumber: int ## the current line number
|
lineNumber: int ## the current line number
|
||||||
lineStart: int ## index of last line start in buffer
|
lineStart: int ## index of last line start in buffer
|
||||||
colOffset: int ## column to add
|
colOffset: int ## column to add
|
||||||
filename: string
|
filename: string
|
||||||
|
|
@ -1118,38 +1118,38 @@ proc getEscapedChar(c: var TPegLexer, tok: var TToken) =
|
||||||
case c.buf[c.bufpos]
|
case c.buf[c.bufpos]
|
||||||
of 'r', 'R', 'c', 'C':
|
of 'r', 'R', 'c', 'C':
|
||||||
add(tok.literal, '\c')
|
add(tok.literal, '\c')
|
||||||
Inc(c.bufpos)
|
inc(c.bufpos)
|
||||||
of 'l', 'L':
|
of 'l', 'L':
|
||||||
add(tok.literal, '\L')
|
add(tok.literal, '\L')
|
||||||
Inc(c.bufpos)
|
inc(c.bufpos)
|
||||||
of 'f', 'F':
|
of 'f', 'F':
|
||||||
add(tok.literal, '\f')
|
add(tok.literal, '\f')
|
||||||
inc(c.bufpos)
|
inc(c.bufpos)
|
||||||
of 'e', 'E':
|
of 'e', 'E':
|
||||||
add(tok.literal, '\e')
|
add(tok.literal, '\e')
|
||||||
Inc(c.bufpos)
|
inc(c.bufpos)
|
||||||
of 'a', 'A':
|
of 'a', 'A':
|
||||||
add(tok.literal, '\a')
|
add(tok.literal, '\a')
|
||||||
Inc(c.bufpos)
|
inc(c.bufpos)
|
||||||
of 'b', 'B':
|
of 'b', 'B':
|
||||||
add(tok.literal, '\b')
|
add(tok.literal, '\b')
|
||||||
Inc(c.bufpos)
|
inc(c.bufpos)
|
||||||
of 'v', 'V':
|
of 'v', 'V':
|
||||||
add(tok.literal, '\v')
|
add(tok.literal, '\v')
|
||||||
Inc(c.bufpos)
|
inc(c.bufpos)
|
||||||
of 't', 'T':
|
of 't', 'T':
|
||||||
add(tok.literal, '\t')
|
add(tok.literal, '\t')
|
||||||
Inc(c.bufpos)
|
inc(c.bufpos)
|
||||||
of 'x', 'X':
|
of 'x', 'X':
|
||||||
inc(c.bufpos)
|
inc(c.bufpos)
|
||||||
var xi = 0
|
var xi = 0
|
||||||
handleHexChar(c, xi)
|
handleHexChar(c, xi)
|
||||||
handleHexChar(c, xi)
|
handleHexChar(c, xi)
|
||||||
if xi == 0: tok.kind = tkInvalid
|
if xi == 0: tok.kind = tkInvalid
|
||||||
else: add(tok.literal, Chr(xi))
|
else: add(tok.literal, chr(xi))
|
||||||
of '0'..'9':
|
of '0'..'9':
|
||||||
var val = ord(c.buf[c.bufpos]) - ord('0')
|
var val = ord(c.buf[c.bufpos]) - ord('0')
|
||||||
Inc(c.bufpos)
|
inc(c.bufpos)
|
||||||
var i = 1
|
var i = 1
|
||||||
while (i <= 3) and (c.buf[c.bufpos] in {'0'..'9'}):
|
while (i <= 3) and (c.buf[c.bufpos] in {'0'..'9'}):
|
||||||
val = val * 10 + ord(c.buf[c.bufpos]) - ord('0')
|
val = val * 10 + ord(c.buf[c.bufpos]) - ord('0')
|
||||||
|
|
@ -1159,11 +1159,11 @@ proc getEscapedChar(c: var TPegLexer, tok: var TToken) =
|
||||||
else: tok.kind = tkInvalid
|
else: tok.kind = tkInvalid
|
||||||
of '\0'..'\31':
|
of '\0'..'\31':
|
||||||
tok.kind = tkInvalid
|
tok.kind = tkInvalid
|
||||||
elif c.buf[c.bufpos] in strutils.letters:
|
elif c.buf[c.bufpos] in strutils.Letters:
|
||||||
tok.kind = tkInvalid
|
tok.kind = tkInvalid
|
||||||
else:
|
else:
|
||||||
add(tok.literal, c.buf[c.bufpos])
|
add(tok.literal, c.buf[c.bufpos])
|
||||||
Inc(c.bufpos)
|
inc(c.bufpos)
|
||||||
|
|
||||||
proc skip(c: var TPegLexer) =
|
proc skip(c: var TPegLexer) =
|
||||||
var pos = c.bufpos
|
var pos = c.bufpos
|
||||||
|
|
@ -1171,7 +1171,7 @@ proc skip(c: var TPegLexer) =
|
||||||
while true:
|
while true:
|
||||||
case buf[pos]
|
case buf[pos]
|
||||||
of ' ', '\t':
|
of ' ', '\t':
|
||||||
Inc(pos)
|
inc(pos)
|
||||||
of '#':
|
of '#':
|
||||||
while not (buf[pos] in {'\c', '\L', '\0'}): inc(pos)
|
while not (buf[pos] in {'\c', '\L', '\0'}): inc(pos)
|
||||||
of '\c':
|
of '\c':
|
||||||
|
|
@ -1203,7 +1203,7 @@ proc getString(c: var TPegLexer, tok: var TToken) =
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
add(tok.literal, buf[pos])
|
add(tok.literal, buf[pos])
|
||||||
Inc(pos)
|
inc(pos)
|
||||||
c.bufpos = pos
|
c.bufpos = pos
|
||||||
|
|
||||||
proc getDollar(c: var TPegLexer, tok: var TToken) =
|
proc getDollar(c: var TPegLexer, tok: var TToken) =
|
||||||
|
|
@ -1244,7 +1244,7 @@ proc getCharSet(c: var TPegLexer, tok: var TToken) =
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
ch = buf[pos]
|
ch = buf[pos]
|
||||||
Inc(pos)
|
inc(pos)
|
||||||
incl(tok.charset, ch)
|
incl(tok.charset, ch)
|
||||||
if buf[pos] == '-':
|
if buf[pos] == '-':
|
||||||
if buf[pos+1] == ']':
|
if buf[pos+1] == ']':
|
||||||
|
|
@ -1264,7 +1264,7 @@ proc getCharSet(c: var TPegLexer, tok: var TToken) =
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
ch2 = buf[pos]
|
ch2 = buf[pos]
|
||||||
Inc(pos)
|
inc(pos)
|
||||||
for i in ord(ch)+1 .. ord(ch2):
|
for i in ord(ch)+1 .. ord(ch2):
|
||||||
incl(tok.charset, chr(i))
|
incl(tok.charset, chr(i))
|
||||||
c.bufpos = pos
|
c.bufpos = pos
|
||||||
|
|
@ -1275,7 +1275,7 @@ proc getSymbol(c: var TPegLexer, tok: var TToken) =
|
||||||
var buf = c.buf
|
var buf = c.buf
|
||||||
while true:
|
while true:
|
||||||
add(tok.literal, buf[pos])
|
add(tok.literal, buf[pos])
|
||||||
Inc(pos)
|
inc(pos)
|
||||||
if buf[pos] notin strutils.IdentChars: break
|
if buf[pos] notin strutils.IdentChars: break
|
||||||
c.bufpos = pos
|
c.bufpos = pos
|
||||||
tok.kind = tkIdentifier
|
tok.kind = tkIdentifier
|
||||||
|
|
@ -1312,11 +1312,11 @@ proc getTok(c: var TPegLexer, tok: var TToken) =
|
||||||
getCharset(c, tok)
|
getCharset(c, tok)
|
||||||
of '(':
|
of '(':
|
||||||
tok.kind = tkParLe
|
tok.kind = tkParLe
|
||||||
Inc(c.bufpos)
|
inc(c.bufpos)
|
||||||
add(tok.literal, '(')
|
add(tok.literal, '(')
|
||||||
of ')':
|
of ')':
|
||||||
tok.kind = tkParRi
|
tok.kind = tkParRi
|
||||||
Inc(c.bufpos)
|
inc(c.bufpos)
|
||||||
add(tok.literal, ')')
|
add(tok.literal, ')')
|
||||||
of '.':
|
of '.':
|
||||||
tok.kind = tkAny
|
tok.kind = tkAny
|
||||||
|
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
import sockets, os
|
|
||||||
var s: TSocket
|
|
||||||
s = socket()
|
|
||||||
if s == InvalidSocket: osError(osLastError())
|
|
||||||
|
|
||||||
s.connect("www.google.com", TPort(80))
|
|
||||||
|
|
||||||
var data: string = ""
|
|
||||||
s.readLine(data)
|
|
||||||
echo(data)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
You can download the latest version of the Nimrod compiler here.
|
You can download the latest version of the Nim compiler here.
|
||||||
|
|
||||||
**Note:** The Nimrod compiler requires a C compiler to compile software. On
|
**Note:** The Nim compiler requires a C compiler to compile software. On
|
||||||
Windows we recommend that you use
|
Windows we recommend that you use
|
||||||
`Mingw-w64 <http://mingw-w64.sourceforge.net/>`_. GCC is recommended on Linux
|
`Mingw-w64 <http://mingw-w64.sourceforge.net/>`_. GCC is recommended on Linux
|
||||||
and clang on Mac OS X.
|
and clang on Mac OS X.
|
||||||
|
|
@ -9,10 +9,12 @@ and clang on Mac OS X.
|
||||||
Binaries
|
Binaries
|
||||||
========
|
========
|
||||||
|
|
||||||
Unfortunately for now we only provide builds for Windows.
|
Unfortunately for now we provide no binary builds.
|
||||||
|
|
||||||
* 32 bit: `nimrod_0.9.6.exe <download/nimrod_0.9.6.exe>`_
|
..
|
||||||
* 64 bit: `nimrod_0.9.6_x64.exe <download/nimrod_0.9.6_x64.exe>`_
|
Unfortunately for now we only provide builds for Windows.
|
||||||
|
* 32 bit: `nim_0.10.2.exe <download/nim_0.10.2.exe>`_
|
||||||
|
* 64 bit: `nim_0.10.2_x64.exe <download/nim_0.10.2_x64.exe>`_
|
||||||
|
|
||||||
|
|
||||||
Installation based on generated C code
|
Installation based on generated C code
|
||||||
|
|
@ -22,13 +24,13 @@ This installation method is the preferred way for Linux, Mac OS X, and other Uni
|
||||||
like systems. Binary packages may be provided later.
|
like systems. Binary packages may be provided later.
|
||||||
|
|
||||||
|
|
||||||
Download `nimrod_0.9.6.zip <download/nimrod_0.9.6.zip>`_, extract it and follow
|
Download `nim_0.10.2.zip <download/nim_0.10.2.zip>`_, extract it and follow
|
||||||
these instructions:
|
these instructions:
|
||||||
|
|
||||||
* sh build.sh
|
* sh build.sh
|
||||||
* Add ``$your_install_dir/bin`` to your PATH.
|
* Add ``$your_install_dir/bin`` to your PATH.
|
||||||
|
|
||||||
There are other ways to install Nimrod (like using the ``install.sh`` script),
|
There are other ways to install Nim (like using the ``install.sh`` script),
|
||||||
but these tend to cause more problems.
|
but these tend to cause more problems.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,7 @@
|
||||||
News
|
News
|
||||||
====
|
====
|
||||||
|
|
||||||
..
|
2014-12-29 Version 0.10.2 released
|
||||||
2014-10-21 Version 0.10.2 released
|
|
||||||
==================================
|
==================================
|
||||||
|
|
||||||
This release marks the completion of a very important change to the project:
|
This release marks the completion of a very important change to the project:
|
||||||
|
|
@ -29,7 +28,7 @@ News
|
||||||
|
|
||||||
The unpopular "T" and "P" prefixes on types have been deprecated. Nim also
|
The unpopular "T" and "P" prefixes on types have been deprecated. Nim also
|
||||||
became more expressive by weakening the distinction between statements and
|
became more expressive by weakening the distinction between statements and
|
||||||
epxressions. We also added new and searchable forums, a new website, and our
|
epxressions. We also added a new and searchable forum, a new website, and our
|
||||||
documentation generator ``docgen`` has seen major improvements.
|
documentation generator ``docgen`` has seen major improvements.
|
||||||
|
|
||||||
What's left to be done
|
What's left to be done
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
|
<a class="news" href="news.html#Z2014-12-29-version-0-10-2-released">
|
||||||
|
<h4>Dec 29, 2014</h4>
|
||||||
|
<p>Nim version 0.10.2 has been released!</p>
|
||||||
|
</a>
|
||||||
|
|
||||||
<a class="news" href="news.html#Z2014-12-09-new-website-design">
|
<a class="news" href="news.html#Z2014-12-09-new-website-design">
|
||||||
<h4>Dec 9, 2014</h4>
|
<h4>Dec 9, 2014</h4>
|
||||||
<p>The new website design and forum are now online!</p>
|
<p>The new website design and forum are now online!</p>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<a class="news" href="news.html#Z2014-10-19-version-0-9-6-released">
|
|
||||||
<h4>Oct 19, 2014</h4>
|
|
||||||
<p>Nimrod version 0.9.6 has been released!</p>
|
|
||||||
</a>
|
|
||||||
|
|
||||||
<a class="news" href="news.html#Z2014-02-11-nimrod-featured-in-dr-dobb-s-journal">
|
<a class="news" href="news.html#Z2014-02-11-nimrod-featured-in-dr-dobb-s-journal">
|
||||||
<h4>Feb 11, 2014</h4>
|
<h4>Feb 11, 2014</h4>
|
||||||
<p>Nimrod featured in Dr. Dobb's Journal</p>
|
<p>Nimrod featured in Dr. Dobb's Journal</p>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue