[fpc-devel] Project Idea: Mini-FPC

John Clymer john at johnclymer.net
Sun Sep 11 12:04:29 CEST 2011


There is a slightly more "modern" P5 based off of P4, with source code that can 
be compiled using Borland Pascal (and presumably, FPC's Turbo mode should be 
close to compiling it as well.)

http://www.standardpascal.org/p5.html




________________________________
From: Skybuck Flying <skybuck2000 at hotmail.com>
To: FPC developers' list <fpc-devel at lists.freepascal.org>
Sent: Sun, September 11, 2011 12:01:50 AM
Subject: Re: RE : [fpc-devel] Project Idea: Mini-FPC

"
Have a look at the P4 pascal compiler
"

Ok, I had a look at it.

"
http://homepages.cwi.nl/~steven/pascal/ .
"

Nice site.


"
The whole compiler is written in pascal and is only 4000 lines in 1 file.
"

Line-wise not to bad, the code itself also looks not to bad, but it does look:

1. Very old.
2. Written by a C programmer or so or a really old pascal programmer.
3. It doesn't use the case insensitivity future of pascal.
4. It has a huge ammount of q's, p's, kl's and lpt's as variable names just 
illustrate that this code and the variable names are not "self-documenting".
The website/book tries to document these variables but I think I already spotted 
some variables which remained unexplained.

Therefore I do think this code needs a huge ammount of "refactoring" or simply 
put: "renaming of variables".

5. It was also not written in an object orientated way, this will probably mean 
that it's not very extendable and goes against the oo encapsulation philosophy 
and so forth...
So use just pascal only will need lead to name space conflicts within 
units/modules, this could be somewhat diverted by using multiple units/modules 
and perhaps prefixes but it is far from ideal.

6. Ultimately it would be beneficial if a mini-fpc or mini-pascal compiler would 
also include all modern oo features just so I can compile my own sources to 
whatever instruction set. So for this purpose this
code does not really seem that suited ?!?

7. Why is it called an "interpreter" and not simply an "executor" ? Is there a 
technical reason for it ? The word "interpreter" has a bad association in my 
mind... I associate it with a "basic interpreter" which I think parses and 
executes at the same time.
This is not what the interpreter seems to be doing... it's actually executing 
instructions so it's not really an interpreter then is it ?

"It generates a high level pcode and comes with a pcode interpreter (1000 lines 
of pascal in a second file)."

This is nice, though the instruction set still seems a little bit large and a 
little bit weird here and there...

For example what is "SET - Set intersection"  ???

"Simpler you can't get. Cross platform. Only standard pascal though, no
objects, etc.
"

Hmm I don't know if that claim is true about being "simpelst" I doubt that 
actually... There is one more pascal compiler out there which might also be 
pretty good ;)

I find it kinda odd how all the documentation is seperated from the source code 
in an html file... at the same time I also find it somewhat interesting.

This allows the comments/explanations to be read seperatedly from the source... 
but it also requires some back and forth switching to see what it is referring 
to.

Perhaps a second version could be made where code and documentation is 
integrated into each other, this would probably/actually be a better way to keep 
the code usuable.

As it is right now it seems hard to maintain because of all the  q's p's and so 
forth, but perhaps that is fixeable, but then it becomes a question of "is it 
worth it ?"

The answer to that question depends on many other things.

For now it is kinda interesting and I will probably play a little bit with it 
just to see if it will compile in Delphi ;) :)

I have my doubts thought ;) :) but so far I am willing to believe that it will 
compile and run ;) :)

The biggest adventage so far:

1. It's free.

2. It's relatively tiny.

3. It's pretty well documented.

4. It seems to produce "virtual" instructions which could be a big adventage, 
especially if it's possible to modify the instruction set, not sure about that 
though.

5. It seems to have an executor (which executes the instructions).

6. It seems to assume each instruction is the same size, which I kinda like too.

7. It has syntax checking/error reporting.

8. All source is freely available.

9. The book/documentation is freely available (a draft)

10. Because of the "virtual" instructions it could be possible to re-write the 
interpreter in a different language to make the instructions run on different 
platforms so in that sense
it's cross platform like java bytecode (virtual machines running on a "real" 
platform).

The biggest disadventages so far:

1. It's not object oriented, it's not modern, not known if it's possible to 
extend and would require further knowledge and time.

2. It's somewhat badly written, not self-documenting, though this could be fixed 
but this fixing would require some time, and I am not sure if it would make the 
code more readable but I would think so.

3. It's not object orientated which could cause problems, though it could be 
wrapped in objects but would also require more time.

4. Important comments/explanations are not embedded in the source itself, 
perhaps it should and would also require some further time to integrate it.

Conclusion so far:

1. It could be usefull to try and modify it to try and output redcode/corewar 
instructions, that would be cool, then warriors can be written in pascal code ! 
;)

2. It could be usefull to try and write a php interpreter/executor so that the 
pascal p-code/virtual instructions can be run on webservers like 
linux/apache/php/mysql. Programs would be limited to just plain pascal though, 
but could still be somewhat usefull and more easy to debug on for example Delphi 
;) :) (in an algorithmic way... hopefully the compiler/executor don't have any 
bugs itself ??? <- this is a good question and the answer is probably it has 
bugs, most software has bugs, bugs in it would suck, so this could be a hidden 
problem with it ;) :) but perhaps with some help from guys on this mailing list 
it might be fixeable ?!?)

3. It could be usefull to try and expand it so it can compile "cuda" kernels 
written in a pascal like language. (Or perhaps opencl kernels, personally I am 
interested in cuda only though for the time being ;) :))
Here there is also a possible adventage, the compiler could be made "cross 
platform" for cuda and opencl, write a "pascal kernel once" and compile to 
either cuda or opencl intermediate instructions, that in itself would be highly 
interesting, but if it can be done remains to be seen, I'd give it a 90% chance 
of succeeding, though cuda does have some features which opencl does not, but 
90% compatibility would still be nice :)

4. It could also be used for further experimentation to add additional 
instructions or an "interleaved program" which executes between the other 
instructions to collect data/analysis data of how the other program executes, 
which is also interesting.

So this code does have some potential ;) :)

Lastly a comparision with free pascal to mini-fpc "trajectory":

1. The p4 compiler is already very minimal compared to fpc so this will require 
less work.

2. The p4 compiler is already producing "virtual instructions" and does not need 
an entire platform and complex rtl's which will also require less work.

3. I am not sure if the p4 compiler can compile itself, the text claims it 
does... which is kinda interesting... how it does that I don't know yet... it's 
probably not much of an issue because everything is in one file, unlike free 
pascal where a huge ammount of files
and a pretty large ammount of "fpc_" hooks have to be hooked up, perhaps the p4 
compiler is also more clean and doesn't have "self-hosting language features" 
which free pascal does seem to need.

4. There is no assembler code in the p4 compiler which is good/nice.

5. There is no complex binary file format as far as I saw so far... but I could 
be wrong about that... but it's probably not as complex as PE windows format, 
for example...

6. There does not seem to be a complex debugger support, which could be a 
disadventage on the long run, but also an adventage on the short run, less 
complexity because of it.

7. The p4 compiler does seem to support some text, which is kinda nice, but 
ultimately not really required for my purpose I think, but still kinda nice, but 
so does free pascal but probably in a more complex way, and the unicode support 
seems also messy.

8. The free pascal compiler has an enormous mess of types, the types are all 
over the place, they are not located in a single location, but pretty much 
everything, many duplicates, many different names for the same thing.

So at first glance all-in-all it doesn't seem to be bad ;) :) and therefore I 
will have a more closer looksy in the coming days but in the end I would need 
object orientation, so on the long run P4 seems like a dead end ;)

So it depends a bit on if mini-fpc becomes a reality or not, if not then P4 
seems to be a good alternative ;) :)

Bye,
Skybuck. 
_______________________________________________
fpc-devel maillist  -  fpc-devel at lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20110911/549fe4f0/attachment.html>


More information about the fpc-devel mailing list