A recapping post

This commit is contained in:
Torsten 2021-11-19 20:36:02 +02:00
parent 1b560ed57d
commit 80195e4e06
2 changed files with 121 additions and 3 deletions

View File

@ -1,12 +1,12 @@
# [RubyX webpages](http://ruby-x.org)
RubyX's webpage are a rails 5.2 application run at Hetzner.
RubyX's webpage is a rails 5.2 application run at Heroku [http://ruby-x.org](http://ruby-x.org).
If you don't know rails, most of the docs are quite close to text (called haml),
found in the app/views/pages directory.
###Contribute
### Contribute
We are _very_ open to improvement so if you see anything that is wrong or misleading, please create an issue.
@ -14,7 +14,7 @@ Also if you feel there is information missing, don't hesitate to mention it.
Even better, clone and send a pull request. Typos and small things don't even need a branch.
###Local viewing
### Local viewing
After having cloned the repository go to the folder and

View File

@ -0,0 +1,118 @@
%p
Sooooo, we bought an old
=ext_link "hospital." , "https://www.hubfeenix.fi/"
Word of advice: don't buy an old hospital if
you can avoid it (obviously we tried and failed). It is understandably taking all
our energy to get the old into the shape of the new (ie a non-profit art center).
%h2 Gather round kids, grandpa's talking
%p
So i am in a pensive mood, definitely reviewing. Maybe it's even the end?
%h3 Constant Types
%p
The one thing to come out of this effort is the importance of constant types.
%p
The relation of fourth to third level languages has eluded me for many years,
at least in the very succinct form i can express it now. Vague notions that
fourth level languages need to be coded in third level languages (wrong!) or
need to be compiled down to third level like c++ was into c (wrong too) where
floating in my head.
%p
Quite early on i hit upon the importance of Types as a way to describe memory.
And the importance of those types being constant or immutable (obvious! but
then everything is in hindsight), because otherwise you wouldn't know here is
what. Third level languages have evolved the model of types naturally, as all
information is available / gathered before the program starts.
%p
A fourth level language has no types (in the sense above), it has classes.
Classes (or prototypes, 6 vs half dozen) can change over time. But if one
assigns a type to a class, the type instance changes when class attributes are
changed.
%p
This essential difference between changing classes and constant types is the
difference between fourth and third level language.
%h3 The need for speed
%p
Speed was brushed aside for the longest time by dynamic language designers.
Luckily things are looking up, more on that below. Interpretation was
the easy way, quick to start but slow to get right. We are now at a point
where we have to retrofit speed, never an easy tasks. Whereas RubyX shows a
compiling approach would not have been difficult, not too difficult for people
in the 60's i mean. But as always, the problem was in the head.
%p
Since C is pretty much as simple as can be, it will be difficult to beat in
terms of speed before a whole lot of work has enabled cross function
compilation and optimization, but i still think it is possible to make code
run faster than c, because of just that. Until then we (rather others), will
have to build just in time compilers for the instructions that VM's like YARV
use.
%p
This process, i am relieved to hear, has started. Not only with the slightly
hacky v8. But properly, by
= ext_link "Maxime." , "https://pointersgonewild.com/about/"
While working for Spotify, she has started a JIT project based on the idea
of collecting and using
= ext_link "immutable type data," , "https://pointersgonewild.com/2021/06/02/yjit-building-a-new-jit-compiler-inside-cruby/"
which she calls BBV. This is very similar to what i was doing for functions,
and she had the good sense to narrow the approach down to Basic Blocks (the BB
in BBV). The V is for versioning and means producing new types and not changing
old, ie having immutable types.
%h2 Too late or too early
%p
Maxime says the Self people were onto this same idea too, but even from just
her phd i feel quite vindicated. While in so many ways i think that this work
has been started way to late, the choices i made (coding in ruby..) probably mean
%em my
work is actually ahead of it's time ie too early. But off course hopelessly
incomplete.
%p
Maxime says in one video that they will probably have to reimplement
parts of ruby in ruby, just so that their jit can perform cross function
compilations. Because they too have noticed very early on that with ruby's
small functions, cross function optimisation is going to be essential (more
vindication).
%p
Imho no decision is the best decision, and since i don't have time to do any
work on ruby-x, i won't :-) Having learned about Maxime and her teams effort,
seriously funded, well accepted, i will sit back and watch the show.
And assume (like in a Disney movie) that the happy end is on it's way.
%h2 The icing: Quajects unravelled
%p
Just because i got some 404's from the
=link_to "synthesis thesis" , "/synthesis/index"
(which i consequently cleaned up and linked in), i touched on the
= link_to "Quajects" , "/synthesis/ch4.html"
again and finally
%em got it.
%p
Quajects are "true" objects in the sense that they combine code and data in
their memory representation. "Normal" objects, implemented by any oo language,
are really only data. Their code is pointed to, not really part of the object,
more of the class. Off course you could argue that a class is an object, but
while that is true, it does not argue the point. As the code for the class is
again in it's class, and not in the object.
%p
Another way to look at Quajects is that they are a partial evaluation of an
original function (that is not present in synthesis). Ie if a normal OS gives
you a file descriptor and a read method that you then pass the descriptor to,
Synthesis gives you a quaject that reads only that one particular file.
Thus partially evaluating a general
read with respect to the given file descriptor.
%p
But while i say "true" object, there is the control flow aspect of Quajects
that has not made it into any higher level programming language. The closest
we got was the goto (shudder), but the quaject way is more like setjump (more
shudders, as both are not named/abstracted). I had a rambling
about that some while back, basically saying that we would have to model not
just functions (that always return to the same point), but also callouts (ie calling
code that is not intended to come back) and callins (places where other code
can land without expecting to be returned to). This is pie in the sky off course,
but it is where
= ext_link "Alexia Massalin" , "https://en.wikipedia.org/wiki/Alexia_Massalin"
was at, already in the 80's. Hat off.