On Thu, 26 Aug 2010, pancake wrote:
*) mv ReadMe README
*) add install/uninstall/deinstall targets in makefile honoring PREFIX and
DESTDIR vars
*) CC, CFLAGS and others should be ?= and not =, this way make(1) honors the
environment variables
*) fix help message of ns to be in one line, description of what the program
does must be in the manpage.
*) 'ns' by default should read+eval one line of text. If first argument is a
file, then open it, if it's '-' read from stdin.
the current 'ns' only executes code when ^D is pressed..which is not really
what read-eval-loop is..
*) 'ns' must pop the last integer in stack and exit() with this value. or just
add the 'exit' function
Done! :)
*) follow dwm syntax (to keep same syntax in all projects)
*) use tabs :)
Hmm... I'm really used to Allman already, but I guess I could try this.
Will 'indent -linux' work?
*) I will prefer to have comments at the begiging of line or at least honour
the 78 column rule in all files
I understand that commenting every line in test programs is probably a good
way to learn the language, but
such verbose
*) use oneline license comments in files and distribute a single LICENSE file
in root
Ok, I will do this. How about MIT license?
*) add manpage, and document the language there.
Good idea. I will have to learn some man syntax first though.
most of those points are up to you.. I just like to have similar development
rules in all
the suckless projects :)
Nice to hear you consider nscript a suckless project now. :)
So here'r more:
*) add this script:
$ cat nscc
...
I see you've made another thread about nscc, we will discuss there.
For the code:
*) i would do some optimizations in the stack implementation.
- a fixed array for stack will be far more efficient and reserving a fixed
amount of stack isn't
that bad, you can add a config.def.h with STACKSIZE=4096 in it do define
such size at compile time.
Hmm, this sounds like a nice idea if it leads to a good optimisation. It
also can make the code a little simpler. I think I could add this.
*) do you think that running more than one 'nscript' vm in the same program
takes sense?
should it be good to have a NsVM *vm = ns_new(); ?
this will make it fun to have multithreaded nscript apps, so you can import
the stack
state from another script for a while.
I dont really know if all this stuff must go upstream.. it's just random
buzzing :)
- this change will make it slighly more complex..and i dont think in the
benefits for it
in short term, so will be better to think on it later.
I was thinking about it too - it would be a matter of moving most of the
currently global stuff into some 'nsvm' struct. It might become harder
to do later...
*) "" must be for escapable strings and '' for unscaped ones. I think this will be saner,
Other languages use @"" for
literal strings, but ""/'' is simpler
This is already implemented - "" has C escapes, '' has only one escape -
double ' will escape the ' itself.
*) about using 'def' instead of $ ..is probably more forthy, but reduces the
performance of the VM.. having 'def' will enable
to override 'def' definition..which is one of the most important features of
lisp/fortran. the same applies to math
operators like '+'.
This can also be done with '$'. I'm actually thinking of removing
'functrie' and putting everything into 'variabletrie' - even the
constants, operators. What do you think?
About 'def' - it could be easy to implement actually, after reading
Kris's latest email. We simply need to add a new 'symbol' type that
holds a string. Whenever the parser finds '$foo' it will push on a stack
a symbol with that name.
<obj> <symbol> def will make a new variable with the name being the
symbol and assign obj to it.
Then 'execute' will need one more addition - if it encounters a symbol
it looks for the variable of the same name and executes it.
I'm still thinking about what advantages this 'symbol' idea could
offer...
*) We need a way to work with arrays and strings. those funcs would be good to
have:
- len/setch/getch/
Will be easy to implement, I will add them.
*) Arrays would be interesting.. and same for data structures. clojure have a
very nice syntax for structures in lisp syntax,
this is very good if you want to do a program bigger than a hello world.
Because you can solve any problem using lists
or stacked.. which is imho not
Interesting. For arrays, shall we simply use a dynarray of ns_objs?
Structures could simply again themselves be tries of strings to ns_objs.
*) You can have a look at java vm internals book, it's a stack based vm and you
can get ideas by reading the list of opcodes.
*) Real fortran compilers/emulators
I will check these out some time.
*) What do you think about memory references as for '&' ?
You mean like pointers? This could be a good idea for allowing 'mutable
objects'.
Actually we have to think about memory management - right now there's a
lot of dynarray memory for example that's leaking. Should we add some
kin of reference counting mechanism for ns_objs?
I think a good point for a language like nscript is that it must be consistent
and simple. And this is something
that many times collides with the ease of use or simplicity to do some stuff
with it.
That was my main intent actually - to keep it as simple as possible. The
'stack' idea actually gives a very easy way of data passing. I think the
'executable' idea (blocks) and them being assigned to variables to
create functions makes things a little consistent too. The thing is,
there's no explicit argument passing - it's all on the stack - so every
'function' is inherently 'void func(void)' - you just need to execute
it, the data passing will handle itself.