Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

MASSIVE rewrite of Jako compiler is in

0 views
Skip to first unread message

gre...@focusresearch.com

unread,
Dec 13, 2002, 5:06:06 PM12/13/02
to Dan Sugalski, perl6-i...@perl.org
Dan --

OK.

The big rewrite is "done". There are still plenty of warts on the current
implementation,
not the least of which is a bunch of dead code that I still need to
remove. But, most
of the examples compile and run, including the ever popular (hi, acme!)
mandelzoom.

Queens.jako still doesn't work right, and now neither does primes.jako.
I've printed
out primes.{jako,imc,pasm} to see if I can locate the problem there.
Queens will
have to remain a mystery (not surprising, really -- mystery of royalty and
all) until I
solve primes (there's a thought...).


As a special treat, Jako now has a language feature for telling it about
ops that are
not among the basic set supported by imcc. For example, the test programs
I use
now have sub prototype lines like these in them:

sub print {op} (str s);

That thingee in the curly braces is a single entry in the compile-time
properties for
the sub being declared. The more general form, eventually intended to
support
loadable oplib stuff, is:

sub num coversine { oplib = "obscure", op = "covers" } (num x);

Limitation: You'll really want to be able to tell jakoc about different
versions of the same
op, with different arg types. The renaming notation above could help until
something
cooler comes along. But, in the case of print, you can just use
interpolated strings:

sub print {op} (str s);
const int x = 10;
print("$x\n");

which has the advantage of actually working, even though its not the most
efficient
thing to do (you can see the generated imc code to watch the string be
compiled).

I haven't looked lately at the IO stuff you want (I will soon). But, you
might be able to
do some fiddling with this feature, although be aware that I've not done
any testing
at all with the 'obj' type, which probably means jakoc will throw itself
on the floor and
go into a fit of convulsions and cursing when you try it...

BTW, the same syntax is intended for eventual use with the Native Call
stuff:

sub int BlitSurface { fnlib = "libsdl", fn = "SDL_BlitSurface" } (
obj { nat = "p" } src,
obj { nat = "p" } srcrect,
obj { nat = "p" } dst,
obj { nat = "p" } dstrect
);

Although that is brainware only for now.

This will all be much more useful when the Jako compiler has an include
mechanism. In
anticipation of this, there are a few .jako files in the languages/jako
directory that have
declarations of op-subs for various corners of the core op set.


Regards,

-- Gregor

0 new messages