comp.lang.ada
 help / color / mirror / Atom feed
From: Brian Drummond <brian@shapes.demon.co.uk>
Subject: Re: is there a version of unix written in Ada
Date: Fri, 9 Oct 2020 14:41:25 -0000 (UTC)	[thread overview]
Message-ID: <rlpsql$ql8$1@dont-email.me> (raw)
In-Reply-To: b53cf6f5-9b1b-459d-8cb8-3de43bee757en@googlegroups.com

On Fri, 09 Oct 2020 05:35:22 -0700, Olivier Henley wrote:

> On Thursday, October 1, 2020 at 5:36:40 PM UTC-4, Brian Drummond wrote:
>> Maybe I should knock together a new Linn Rekursiv on an FPGA.
> 
> Just finished 'LINN REKURSIV: A PERSISTENT OBJECT COMPUTER' by Dick
> Pountain and indeed this is utterly interesting.
> By looking at what is available in the wild about it, it is quite clear
> you are one of a few with the appropriate 'overall skillset' to bring
> that back to life.
> If you do so, please publish the work somewhere lasting...

I remember that (Byte, I think) as being one of the better articles.

In many ways we only scratched the surface of what it could do. 

The fact that we could save and restore state in microcode meant that if 
an instruction that allocated, failed, we could suspend it, do some 
garbage collection, or even page something out, and resume the same 
instruction.

(That of course ties the CPU up for some time! Would have become a 
serious objection if the project had got much further, but now with 
hyperthreading, you'd switch to executing another process while waiting 
for the page operation).

------------

One thing I never really got a chance to try, was departing from the idea 
of linear instruction streams. This thing could have implemented tree-
like instructions : imagine an IfThenElse instruction that called a 
boolean expression (suspending itself), then resumed and jumped to either 
arm according to the result.

So you could potentially just execute a parse tree directly. That would 
IMO have been interesting for interpreted languages along the lines of 
Python; simplifying and (in those days it mattered) accelerating 
compilation..

------------

But even Lingo was compiled to 11 mostly straightforward sequential 
instructions (with one exception) (later, others were added as 
optimisations), the exception being "Send".

Send encoded a "message send" : applying a selector to any object, 
discovering which method was bound between that selector and the type of 
that object, and executing that method.

Method discovery traversed the type hierarchy from the object's type, 
looking up the selector in the method dictionary for that type (aka vtable 
for C++) - if not there, recursively using the parent type, until the 
parent of all objects, i.e. Object. (Where failure raised "Unknown 
Selector exception).

Sounds slow, but in parallel with all that, hashing the selector and type 
and lookup the method in a hashed array, took 4 cycles, so that was the 
practical penalty for dynamic binding.

------------

I added optimisation in the form of targeted Send instructions, like 
"Send +" for common selectors like "+". (Selectors could be operators, or 
subprogram names). 

On the face of it, this simplified "Push +; Send" into one instruction.
In practice, it performed integer addition in parallel with setting up 
the Send instruction, so that if both argument types matched Integer, all 
it had to do was push the result and exit. Otherwise, branch into Send.

Fun times...

Maybe I'll put it on the list of retirement projects...

-- Brian

  reply	other threads:[~2020-10-09 14:41 UTC|newest]

Thread overview: 105+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <e3c51e65-b71e-4623-bd58-c94cdbcc3ba6o@googlegroups.com>
2020-07-25  7:37 ` is there a version of unix written in Ada mockturtle
2020-07-26 19:45   ` Stéphane Rivière
2020-07-26 22:15     ` Jeffrey R. Carter
2020-07-27  7:40       ` Stéphane Rivière
2020-07-28 13:08       ` DrPi
2020-07-28 16:48         ` Simon Wright
2020-07-28 17:00           ` Fabien Chouteau
2020-07-29  9:21             ` DrPi
2020-07-29  9:28               ` Fabien Chouteau
2020-07-29 15:02                 ` DrPi
2020-07-29 15:11                   ` Fabien Chouteau
2020-07-29 20:41                     ` DrPi
2020-07-29  9:20           ` DrPi
2020-07-29 16:53             ` Simon Wright
2020-07-29 20:42               ` DrPi
2020-07-25  8:47 ` Niklas Holsti
2020-07-25  9:36   ` Stéphane Rivière
2020-07-25 10:41 ` Luke A. Guest
2020-07-25 14:43 ` Jesper Quorning
2020-07-25 19:20 ` Andreas ZEURCHER
2020-07-27  7:40   ` Stéphane Rivière
2020-07-27 15:00     ` nobody in particular
2020-07-27 14:58   ` nobody in particular
2020-07-27 20:28 ` Shark8
2020-07-30  0:57 ` gdotone
2020-07-31 14:01   ` Shark8
2020-09-23 17:39   ` Olivier Henley
2020-09-25 15:06     ` DrPi
2020-09-25 17:31       ` Andreas ZEURCHER
2020-09-26  8:50         ` DrPi
2020-09-27 18:55           ` Luke A. Guest
2020-09-27 19:07             ` Luke A. Guest
2020-09-27 18:53         ` Luke A. Guest
2020-09-27 14:25     ` Shark8
2020-09-27 15:01       ` Dmitry A. Kazakov
2020-09-27 20:59         ` DrPi
2020-09-28  7:41           ` Dmitry A. Kazakov
2020-09-28 13:48             ` Olivier Henley
2020-09-28 14:48               ` Dmitry A. Kazakov
2020-09-28 16:28                 ` Olivier Henley
2020-09-28 20:30                   ` Dmitry A. Kazakov
2020-09-28 21:06                     ` Shark8
2020-09-28 17:47                 ` Paul Rubin
2020-09-28 20:27                   ` Dmitry A. Kazakov
2020-09-29 23:54                     ` Paul Rubin
2020-09-30  8:18                       ` Dmitry A. Kazakov
2020-09-30 17:27                         ` Paul Rubin
2020-09-30 19:42                           ` Dmitry A. Kazakov
2020-09-30 20:33                             ` Paul Rubin
2020-09-30 21:03                               ` Dmitry A. Kazakov
2020-09-30 22:42                                 ` Randy Brukardt
2020-10-01  9:28                                   ` Dmitry A. Kazakov
2020-10-01  9:59                                     ` J-P. Rosen
2020-10-01 10:21                                       ` Dmitry A. Kazakov
2020-10-01 11:38                                         ` Niklas Holsti
2020-10-01 11:52                                           ` Niklas Holsti
2020-10-01 12:51                                           ` Dmitry A. Kazakov
2020-10-01 14:18                                             ` J-P. Rosen
2020-10-01 15:44                                               ` Dmitry A. Kazakov
2020-10-01 22:10                                                 ` Randy Brukardt
2020-10-02  5:36                                                 ` J-P. Rosen
2020-10-02  6:56                                                   ` Dmitry A. Kazakov
2020-10-02  7:42                                                     ` J-P. Rosen
2020-10-03  3:14                                                       ` Randy Brukardt
2020-10-01 15:38                                             ` Niklas Holsti
2020-10-01 16:06                                               ` Dmitry A. Kazakov
2020-10-01 17:01                                                 ` Niklas Holsti
2020-10-01 17:37                                                   ` Dmitry A. Kazakov
2020-10-01 22:13                                                 ` Randy Brukardt
2020-10-01 11:48                                         ` J-P. Rosen
2020-10-01 12:54                                           ` Dmitry A. Kazakov
2020-10-01  7:57                                 ` Paul Rubin
2020-10-01  9:26                                   ` Dmitry A. Kazakov
2020-10-01  9:46                                     ` Paul Rubin
2020-10-01 10:35                                       ` Dmitry A. Kazakov
2020-10-01 19:02                                       ` DrPi
2020-10-01 23:12                                         ` Paul Rubin
2020-10-01 21:54                                       ` Randy Brukardt
2020-10-01 23:14                                         ` Paul Rubin
2020-10-01 21:36                             ` Brian Drummond
2020-10-02  6:56                               ` Dmitry A. Kazakov
2020-10-02 18:34                                 ` Brian Drummond
2020-10-02 21:24                                   ` Paul Rubin
2020-10-06 23:54                                     ` Brian Drummond
2020-10-03  6:54                                   ` Dmitry A. Kazakov
2020-10-05 14:03                               ` Shark8
2020-10-07 11:56                               ` Olivier Henley
2020-10-09 12:35                               ` Olivier Henley
2020-10-09 14:41                                 ` Brian Drummond [this message]
2020-09-28 18:40                 ` Vincent Marciante
2020-09-28 20:28                   ` Dmitry A. Kazakov
2020-09-28 17:04               ` DrPi
2020-09-28 17:30                 ` Olivier Henley
2020-09-28 18:05                   ` Olivier Henley
2020-09-28 19:36               ` Shark8
2020-09-03 10:32 ` c+
2020-09-12  4:30 ` sumde121
2020-09-19 14:09 ` erchetan33
2020-10-01 22:21 Randy Brukardt
2020-10-02  6:55 ` Dmitry A. Kazakov
2020-10-03  3:09   ` Randy Brukardt
2020-10-03  6:42     ` Dmitry A. Kazakov
2020-10-03  7:44       ` Niklas Holsti
2020-10-03  8:16         ` Dmitry A. Kazakov
2020-10-03 10:44           ` Niklas Holsti
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox