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

167
todo.txt Executable file
View file

@ -0,0 +1,167 @@
TO IMPLEMENT
============
BPbRchqU
RST
---
- footnotes; prefix :i: whitespace before :i:, _reference, `reference`__
__ anonymous: www.nimrod.org
- don't generate <p></p> if it is not allowed by the HTML standard; switch to
<br /> for those parts; this is pretty easy to fix
High priority
-------------
- BUG: aliasing of record/object types does not work properly
- BUG: repr from seq[string]
- replace ``seq = []; setLen(seq, x)`` by something more efficient
- disallow ``var var T``
- replace appropriate asserts by internal errors!
- type generation for tuples in the C code generator is difficult!
- also check code generator for var-types
- better code generation for const data
- code generation for sets is wrong: &63
- implement field checks for case records
- evaluation + macros
- ``is`` operator is missing
- get assignable right!
Low priority
------------
- macros: ``check`` pragma; this is really a good idea! This allows
transformations based on types!
- make callconv a set
- pasparse.nim: fixVarSection() loses its comment!
- partial generic instantation is missing
- commas are not optional any longer as this may lead to bugs
- get code generation for C++ exception handling right!
- implement the simple and cheap to implement module cache (default: disabled!)
- remove r'c': it is pointless!
- nkConv is not well-defined for rnimsyn; as are other node kinds;
separate them? But this way lies madness! Better make them consistent!
- find a way for easy constructors and destructors; though constructors are
flawed... destructors are not, however!
- multiple dispatch
- LIB: stream implementation - the compiler should use it too!
Changelog
=========
- pasparse: comments after begin end; are not longer part of the nkStmtList
node
- BUGFIX in ccgexprs.genSetLengthSeq
- adapted ast.pas for nil sons
- case records: type information generation is now complete
- enums: size depends on the number of values
- fixType pass in semantic checking altered
- implicit conversion from pointer to other pointer type disallowed
- $ifdef implemented for Pascal parser
- fixed bug in types.pas concerning computation of set size (div rounds down!)
- fixed a bug in ``sameFile`` in ``nos.pas``
- BUGFIX: Conversion from string to cstring
For the next versions
=====================
- separate compilation
- multi-processor support
- tuple assignment
- more Parser/Renderer combinations
- IDE
- better support for GDB
- support for Boehm's GC
- support for dynamic libraries
Language features to be implemented
===================================
- sets of a basetype that is not starting at zero are broken
- bit fields for ordinal types: {.bits: 9}
- properties are the way to mimic OOP methods::
type
TFile = object
fx, fy: int
prop x: int in fx out fx
proc open
f.open(filename) is the same as open(f, filename)
open(f, filename)
- this is the way to go::
type
TFile = object
...
method open(f: TFile, mode: TFileMode) = # belongs to TFile!
...
f.open(mode)
- profiling support
- yield statement warning/error
Documentation to be written
===========================
- document generics
- document (anonymous) procs
- cookbook: a[i|j] for example
Implementation details
======================
- {a} can lead to an memory overwrite if a is not in range of
set basetype?
Optimizations
=============
- acyclic type detection; not needed; GC optimization does not work!
- optimization of GC: types that cannot be involved in cycles should
not be stored in the AT; this does not work because the AT is needed
for stack checking!
- better: generational GC for cycles
- optimization for the GC: merge the refcount with the type info field
- optimize range checks away (and out of bounds checks!)
- merge set;string data (not critical; does C compiler for us)
Further ideas/nice to have
==========================
- introduce: refany type???
- CLR code generator; better use XYZ? --> Version 1.2?
- provide an interactive shell: if the user wants his commands
to be executed, the command should end with #
- multi-threaded programming
- support for Boehm's GC
- do finalizers right and add the built-in 'finalize'
- built-in ``fast_assign``
- implement packed arrays (bit arrays)/ packed records
- implement tables (implement as library? - no! Builtin because of
constructor syntax is nice to have)
- each compilation unit (proc, top-level-statement, etc.)
needs the options stored with them (for procs already done)
Planned libraries
=================
- generic algorithm library (trees, tables, etc.)
- An Unicode library (UTF8)
- Binding for Opengl library (should be easy)
- Binding for Sockets library (which one?)
- xml parser; cgi module; fast cgi module
- a good/extensive math library
- neuronal network library; genetic algorithms
- html parser
- URL library
- mySQL, sqlite interface
- extensive platform independant AdvancedOS library
- Lua, Python interface (almost done)
- code generator for SQL-Schemes? ("Hibernate" done right)
- mathematical expression parser (with lookup table for identifiers)
- YAML parser (use generic AST for this)