Initial import

This commit is contained in:
Andreas Rumpf 2008-06-22 16:14:11 +02:00
commit 405b86068e
324 changed files with 163599 additions and 0 deletions

1
web/documentation.txt Executable file
View file

@ -0,0 +1 @@
.. include:: ../doc/docs.txt

1
web/docutils.tmpl Executable file
View file

@ -0,0 +1 @@
%(body)s

10
web/download.txt Executable file
View file

@ -0,0 +1,10 @@
"There are two major products that come out of Berkeley: LSD and UNIX.
We don't believe this to be a coincidence." -- Jeremy S. Anderson.
Here you can download the latest version of the Nimrod Compiler.
Please choose your platform:
* binary and source for Windows (95, 98, XP): `<download/nimrod_win_0.7.0.exe>`_
* source for Unix (including MacOS X): `<download/nimrod_unix_0.7.0.zip>`_
.. include:: ../install.txt

52
web/genweb.py Executable file
View file

@ -0,0 +1,52 @@
#!/usr/bin/env python
# Generates the beautiful webpage.
# (c) 2007 Andreas Rumpf
TABS = [ # Our tabs: (Menu entry, filename)
("home", "index"),
("documentation", "documentation"),
("download", "download"),
("Q&A", "question"),
("links", "links")
]
TEMPLATE_FILE = "sunset.tmpl"
import sys, string, re, glob, os
from Cheetah.Template import Template
from time import gmtime, strftime
def Exec(cmd):
print cmd
return os.system(cmd) == 0
def Remove(f):
try:
os.remove(f)
except OSError:
Warn("could not remove: %s" % f)
def main():
CMD = "rst2html.py --template=docutils.tmpl %s.txt %s.temp "
if not Exec(CMD % ("news","news")): return
newsText = file("news.temp").read()
for t in TABS:
if not Exec(CMD % (t[1],t[1]) ): return
tmpl = Template(file=TEMPLATE_FILE)
tmpl.content = file(t[1] + ".temp").read()
tmpl.news = newsText
tmpl.tab = t[1]
tmpl.tabs = TABS
tmpl.lastupdate = strftime("%Y-%m-%d %X", gmtime())
f = file(t[1] + ".html", "w+")
f.write(str(tmpl))
f.close()
# remove temporaries:
Remove("news.temp")
for t in TABS:
Remove(t[1] + ".temp")
if __name__ == "__main__":
main()

59
web/index.txt Executable file
View file

@ -0,0 +1,59 @@
====
Home
====
"The most important thing in the programming language is the name. A language
will not succeed without a good name. I have recently invented a very good
name and now I am looking for a suitable language."
-- D. E. Knuth
**This page is about the Nimrod programming language, which combines Lisp's
power with Python's readability and C++'s performance.**
Welcome to the Nimrod programming language
------------------------------------------
**Nimrod** is a new statically typed, imperative
programming language, that supports procedural, functional, object oriented and
generic programming styles while remaining simple and efficient. A special
feature that Nimrod inherited from Lisp is that Nimrod's abstract syntax tree
(*AST*) is part ofthe specification - this allows a powerful macro system which
can be used to create domain specific languages.
*Nimrod* is a compiled, garbage-collected systems programming language
which has an excellent productivity/performance ratio. Nimrod's design
focusses on the 3E: efficiency, expressiveness, elegance (in the order of
priority).
Some more of Nimrod's highlights:
* Native code (currently via compilation to C).
* Garbage collection, but not dependant on a Virtual Machine.
* Portable: The Nimrod Compiler runs on Windows, Linux and Mac OS X.
Porting to other platforms is easy.
* System programming features: Ability to manage your own memory and access the
hardware directly. You will never have to use C/C++ for that again!
* Closures and iterators.
* Exceptions.
* Modern type system with local type inference, tuples, variants, etc.
* User-defineable operators; new operators often easier to read than overloaded
ones
* High level datatypes: strings, sets, sequences, etc.
* Compile time evaluation without resorting to meta-programming facilities.
* *Forward* compatibility: If later versions of the language introduce new
keywords old code won't break!
* Bindings to GTK2, X11, the Windows API, the POSIX API. New bindings are
easily generated in a semi-atomatic way.
* A plugable parser system: If you don't like Nimrod's syntax, you can plug in
a parser and a source renderer for your own syntax!
..
The Zen of Nimrod
-----------------
* Faster computers are for solving bigger problems, not wasting cycles.
* Static is better than dynamic: More efficient, more understandable,
better verifyable.
* Don't criple the language in the name of simplicity.
* Be backward and *forward* compatible.

1
web/links.txt Executable file
View file

@ -0,0 +1 @@
Currently there are no links to other Nimrod-related sites.

7
web/news.txt Executable file
View file

@ -0,0 +1,7 @@
| `2008-01-12`:newsdate:
| Nimrod version 0.8.0 has been released!
Get it `here <./download.html>`_.
| `2008-01-06`:newsdate:
| This page is finally online!

108
web/question.txt Executable file
View file

@ -0,0 +1,108 @@
===========================================
Questions and Answers
===========================================
`How is Nimrod licensed?`:Q:
The Nimrod compiler is GPL licensed, the runtime library is LGPL licensed.
This means that you can use any license for your own programs developed with
Nimrod. If I receive enough requests with good arguments, I may change the
license of Nimrod to the BSD license.
`Why is compilation so slow?`:Q:
*Compilation* is fast. The problem is that Nimrod always
recompiles **everything**. In the next version, only modules that
have changed will be recompiled.
Another issue may be that the C compiler that is called by Nimrod is slow.
Especially GCC's compile times are a bad joke. On Linux you may be able to get
`Tiny C <http://fabrice.bellard.free.fr/tcc/>`_ to work. TCC has excellent
compile times. You should not use TCC for producing the release version
though, as it has no optimizer.
Experimental features are the *AST cache* and the *C file cache*. Both
are not activated. To activate, add to your ``nimrod.cfg`` file the following
lines::
--ast_cache:on
--c_file_cache:on
`Which version of Freepascal is needed to compile Nimrod?`:Q:
Version 2.0.0 or later. Earlier development versions like 1.9.6 may work,
but 1.0.10 won't. Note that I have never compiled Nimrod with FPC's
optimizer turned on; it may break things due to bugs in FPC.
`How do I build a shared library?`:Q:
This is currently not supported. The GC that makes trouble.
`How do I use a different C compiler than the default one?`:Q:
Edit the ``config/nimrod.cfg`` file.
Change the value of the ``cc`` variable to one of the following:
============== ============================================
Abbreviation C/C++ Compiler
============== ============================================
``dmc`` Digital Mars C++
``wcc`` Watcom C++
``bcc`` Borland C++ (including Borland C++Builder)
``vcc`` Microsoft's Visual C++
``gcc`` Gnu C
``pcc`` Pelles C
``lcc`` Lcc-win32
``tcc`` Tiny C
``llvm_gcc`` LLVM-GCC compiler
``icc`` Intel C++ compiler
``ucc`` Generic UNIX C compiler
============== ============================================
If your C compiler is not in the above list, try using the
*generic UNIX C compiler* (``ucc``). If the C compiler needs
different command line arguments you have to edit the ``extccomp``
module to add support for it and recompile the compiler. Please
contribute a patch in this case.
`Calling the C compiler fails - what's wrong?`:Q:
Many C compilers need special environment variables to work
properly. Although Nimrod tries hard to set them correctly (see
``extccomp.pas`` for details), this may fail if you use a
different version of the C compiler. The solution is to
ensure that all environment variables are set correctly.
You can set environment variables temporarily by using the
``@putenv "key" "val"`` directive in the ``config/nimrod.cfg``
configuration file. There are also ``@append_env`` and
``@prepend_env`` directives for appending or prepending
to environment variables.
`Calling the C compiler still fails`:Q:
Try to call the C compiler directly by doing the following::
nimrod --compile_only --gen_script your_path/your_file
sh ./your_path/rod_gen/compile_your_file.sh
`How to overload the ``in`` operator?`:Q:
The ``in`` and ``not_in`` operators are implemented as templates. The reason is
that these operators need a reverse unification algorithm (don't ask). See the
``system.nim`` module for a deeper explanation. The solution is to implement a
simple ``in_Operator`` proc where the arguments are the other way round::
proc in_operator(s: string, c: char): bool =
for x in items(s):
if x == c: return True
return False
writeln(stdout, 'z' in "abcdz") # now works!

BIN
web/style/back.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 224 B

BIN
web/style/graphic.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

BIN
web/style/link.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 B

BIN
web/style/logo.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
web/style/menu.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 B

BIN
web/style/menu_hover.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 B

BIN
web/style/sbi_header.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 201 B

398
web/style/style.css Executable file
View file

@ -0,0 +1,398 @@
/* global */
html{height: 100%;}
body
{ font-family: verdana, arial, sans-serif;
padding: 0px;
margin: 0px;
font-size: .70em;
}
pre, tt
{
font-size: 130%;
}
p
{ margin: 0px;
padding: 0px 0px 16px 0px;
line-height: 1.7em;
}
#column2 h1
{ font-family: arial, sans-serif;
letter-spacing: .1em;
}
#column2 h2
{ margin: 0px;
padding: 0px 0px 4px 0px;
font-size: 100%;
}
img{border: 0px;}
a.reference{outline: none;}
/* image positioning - left, right and center */
.left
{ float: left;
padding: 0px 8px 0px 0px;
}
.right
{ float: right;
padding: 0px 0px 0px 8px;
}
.center
{ display: block;
text-align: center;
margin: 0 auto;
}
/* block quote */
blockquote
{ margin: 20px 0px 20px 0px;
padding: 10px 20px 0px 20px;
border-left: 8px solid;
}
/* unordered list */
ul
{ margin: 2px 0px 16px 16px;
padding: 0px;
}
ul li
{ list-style-type: square;
margin: 0px 0px 6px 0px;
padding: 0px;
}
/* ordered list */
ol
{ margin: 8px 0px 0px 24px;
padding: 0px;
}
ol li
{ margin: 0px 0px 11px 0px;
padding: 0px;
}
/* main container */
#main
{ width: 780px;
margin-left: auto;
margin-right: auto;
}
/* links above the logo / footer */
#links, #footer
{ margin-left: auto;
margin-right: auto;
padding: 10px 21px 0px 19px;
width: 720px;
height: 26px;
font-size: 94%;
text-transform: uppercase;
}
#links{text-align: right;}
#footer{text-align: center;}
#links a.reference, #footer a.reference{text-decoration: none;}
#links a.reference:hover, #footer a.reference:hover{text-decoration: underline;}
/* logo */
#logo
{ margin-left: auto;
margin-right: auto;
width: 760px;
height: 100px;
text-align: left;
}
#logo h1
{ margin: 0px;
padding: 41px 0px 0px 19px;
font-size: 150%;
letter-spacing: .2em;
}
/* navigation menu */
#menu
{ height: 42px;
width: 760px;
margin-left: auto;
margin-right: auto;
}
#menu ul{margin: 0px auto;}
#menu li
{ float: left;
margin: 0px;
padding: 0px;
}
#menu li a, #menu li a:visited
{ display: block;
float: left;
height: 37px;
text-decoration: none;
padding: 3px 19px 2px 19px;
text-transform: uppercase;
color: #DBD7D1;
}
/* main content */
#content
{ margin-left: auto;
margin-right: auto;
width: 760px;
height: auto;
padding: 0px;
overflow: hidden;
}
/* column 1 - contains sidebar items */
#column1
{ width: 207px;
float: right;
padding: 16px 0px 15px 0px;
}
.sidebaritem
{ text-align: left;
width: 188px;
float: left;
margin: 0px 0px 25px 0px;
}
.sbihead
{ height: 14px;
width: 188px;
padding: 5px 0px 5px 19px;
text-transform: uppercase;
}
.sbihead h1
{ padding: 0px;
margin: 0px;
font-weight: bold;
font-size: 112%;
}
#column1 h1 a, #column1 h1 a:hover, #column1 h1 a:visited
{
text-decoration:none;
font-size: 80%;
}
.sbicontent{padding: 14px 8px 8px 19px;}
.sbicontent p
{ line-height: 14px;
padding: 0px 0px 8px 0px;
}
.sbilinks{padding: 0px;}
.sbilinks ul{margin: 0px auto;}
.sbilinks li
{ margin: 0px;
float: left;
list-style: none;
}
.sbilinks li a.reference , .sbilinks li a.reference:hover
{ float: left;
height: 16px;
text-decoration: none;
padding: 5px 0px 4px 19px;
width: 188px;
border: 0px;
}
/* column 2 - page content */
#column2
{ text-align: justify;
width: 512px;
float: left;
padding: 12px 3px 15px 19px;
}
#column2 h1
{ padding: 6px 0px 4px 0px;
margin: 0px 0px 12px 0px;
border-bottom: 1px solid;
/* font-size: 150%; */
text-transform: uppercase;
font-weight: normal;
}
.sidebaritem a.reference , .sidebaritem a.reference:hover
{ padding: 0px 0px 2px 0px;
text-decoration: none;
border-bottom: 1px dashed;
}
.sidebaritem a.reference:hover{border-bottom: 1px solid;}
/* contact page - form layout */
form{margin-top: 0px;}
div.row
{ clear: both;
width: 448px;
}
div.row span.formlabel
{ float: left;
width: 150px;
text-align: left;
}
div.row span.forminput
{ float: right;
text-align: right;
}
div.spacer
{ clear: both;
width: 80px;
}
input, textarea
{ width: 259px;
font-family: verdana, arial, sans-serif;
border: 1px solid;
font-size: 100%;
margin: 2px;
}
.submit
{ font-family: verdana, arial, sans-serif;
border: 1px solid;
width: 70px;
height: 22px;
cursor: pointer;
font-size: 100%;
}
html{height: 100%;}
body
{ background: #837560;
color: #70695A;
}
blockquote
{ background: #FFFFFF;
color: #70695A;
border-color: #767676;
}
#main
{ background: #FFFFFF url(back.png) repeat-y;
color: #70695A;
}
#links, #footer, #menu, #menu li a.reference
{ background: #FFFFFF url(menu.png);
color: #DBD7D1;
border-color: #D7D7D7;
}
#links a.reference, #footer a.reference,
#links a.reference:hover, #footer a.reference:hover
{ background: transparent;
color: #DBD7D1;
}
#logo
{ background: #FFFFFF url(logo.jpg) no-repeat;
color: #70695A;
}
#logo h1
{ background: transparent;
color: #FFFFFF;
}
#column2 h1, #column2 h1 a.reference,
#column2 h2, #column2 h2 a.reference
{ background: transparent;
color: #CE7014;
border-color: #CAAE90;
font-size: 150%;
}
#column2 h2, #column2 h2 a.reference {
font-size: 110%;
}
#menu li a:hover, #menu li a#selected,
#menu li a#selected:hover
{ background: #FFFFFF url(menu_hover.png);
color: #70695A;
}
#content
{ background: transparent;
color: #111; /* #70695A; */
}
#column2 a.reference, #column2 a.reference:hover {
color: #fb7f03;
}
#column2 a.reference:visited {
color: #7b5224;
}
.sidebaritem, .sidebaritem a.reference, .sidebaritem a.reference:hover
{ background: transparent;
color: #DBD7D1;
}
.sbihead
{ background: #FFFFFF url(sbi_header.png);
color: #70695A;
}
.sbihead h1
{ background: transparent;
color: #70695A;
}
.sbilinks li a.reference
{ background: #FFFFFF url(link.png);
color: #DBD7D1;
}
.sbilinks li a.reference:hover
{ background: #B7B7B7;
color: #CE7014;
}
input, textarea
{ background: #FFFFFF;
color: #70695A;
border-color: #CAAE90;
}
span.Q {
font-size: 120%;
font-weight: bold;
}
span.newsdate {
font-size: 110%;
font-weight: bold;
}

62
web/sunset.tmpl Executable file
View file

@ -0,0 +1,62 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Nimrod Programming System</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" type="text/css" href="style/style.css" />
</head>
<body>
<div id="main">
<div id="links">
<!-- **** INSERT LINKS HERE **** -->
</div>
<div id="logo"><h1>Nimrod Programming System</h1></div>
<div id="content">
<div id="menu">
<ul>
#for $name, $t in $tabs
#if $tab == $t
<li><a id="selected" href="${t}.html" title = "Nimrod - $name">$name</a></li>
#else
<li><a href="${t}.html" title = "Nimrod - $name">$name</a></li>
#end if
#end for
</ul>
</div>
<div id="column1">
<div class="sidebaritem">
<div class="sbihead">
<h1>latest news</h1>
</div>
<div class="sbicontent">
$news
</div>
</div>
<div class="sidebaritem">
<div class="sbihead">
<h1>additional links</h1>
</div>
<div class="sbilinks">
<!-- **** INSERT ADDITIONAL LINKS HERE **** -->
<ul>
<li><a class="reference" href="http://llvm.org">LLVM</a></li>
<li><a class="reference" href="http://gcc.gnu.org">GCC</a></li>
</ul>
</div>
</div>
</div>
<div id="column2">
$content
</div>
</div>
<div id="footer">
copyright &copy; 2008 Andreas Rumpf | Last update: $lastupdate
| <a class="reference" href="http://validator.w3.org/check?uri=referer">XHTML 1.1</a>
| <a class="reference" href="http://jigsaw.w3.org/css-validator/check/referer">CSS</a>
| <a class="reference" href="http://www.dcarter.co.uk">design by dcarter</a>
</div>
</div>
</body>
</html>

1436
web/theindex.txt Executable file

File diff suppressed because it is too large Load diff

137
web/voidspace.css Executable file
View file

@ -0,0 +1,137 @@
/*
:Authors: Ian Bicking, Michael Foord
:Contact: fuzzyman@voidspace.org.uk
:Date: 2005/08/26
:Version: 0.1.0
:Copyright: This stylesheet has been placed in the public domain.
Stylesheet for Docutils.
Based on ``blue_box.css`` by Ian Bicking
and ``html4css1.css`` revision 1.46.
*/
@import url(html4css1.css);
body {
font-family: Arial, sans-serif;
}
em, i {
/* Typically serif fonts have much nicer italics */
font-family: Times New Roman, Times, serif;
}
a.target {
color: blue;
}
a.target {
color: blue;
}
a.toc-backref {
text-decoration: none;
color: black;
}
a.toc-backref:hover {
background-color: inherit;
}
a:hover {
background-color: #cccccc;
}
div.attention, div.caution, div.danger, div.error, div.hint,
div.important, div.note, div.tip, div.warning {
background-color: #cccccc;
padding: 3px;
width: 80%;
}
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
text-align: center;
background-color: #999999;
display: block;
margin: 0;
}
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title {
color: #cc0000;
font-family: sans-serif;
text-align: center;
background-color: #999999;
display: block;
margin: 0;
}
h1, h2, h3, h4, h5, h6 {
font-family: Helvetica, Arial, sans-serif;
border: thin solid black;
/* This makes the borders rounded on Mozilla, which pleases me */
-moz-border-radius: 8px;
padding: 4px;
}
h1 {
background-color: #444499;
color: #ffffff;
border: medium solid black;
}
h1 a.toc-backref, h2 a.toc-backref {
color: #ffffff;
}
h2 {
background-color: #666666;
color: #ffffff;
border: medium solid black;
}
h3, h4, h5, h6 {
background-color: #cccccc;
color: #000000;
}
h3 a.toc-backref, h4 a.toc-backref, h5 a.toc-backref,
h6 a.toc-backref {
color: #000000;
}
h1.title {
text-align: center;
background-color: #444499;
color: #eeeeee;
border: thick solid black;
-moz-border-radius: 20px;
}
table.footnote {
padding-left: 0.5ex;
}
table.citation {
padding-left: 0.5ex
}
pre.literal-block, pre.doctest-block {
border: thin black solid;
padding: 5px;
}
.image img { border-style : solid;
border-width : 2px;
}
h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
font-size: 100%;
}
code, tt {
color: #000066;
}