[racket] OPERATING SYSTEM ON A FPGA

From: Matthias Felleisen (matthias at ccs.neu.edu)
Date: Wed Dec 5 11:24:20 EST 2012

In the mid 90s, we had this idea to go for a Scheme OS, SOS. As an experiment, we asked a student to write a disk driver in Scheme (Bigloo) and to see what we could do with it. One of the things he was able to do is hot-swap policies for spinning the disk. This sounds so quaint in the age of laptops w/o movable parts. 

In the late 90s, Matthew spent an afternoon so that we could boot Racket (formerly known as PLT Scheme) on raw hardware. Since most of us had dual-boot machines already (Linux and the other one), we went to ternary-boot machines: Linux, PLT Scheme, and the other one. None of us ever had the appetite to add enough device drivers to turn Racket into a real OS but nothing stands in its way. 

Right now, a Darpa project enables us to experiment with Racket on the Router (think RoR, though that acronym has been taken). Again, it's systemish work. This email is going thru the DNS service that we have built so far. 

In short, doable but we haven't done it. 









On Dec 5, 2012, at 11:16 AM, David Blubaugh wrote:

> To All,
>  
>  
> I was wondering if anyone has ever created a real time operating system with Racket.  As well as, create applications within a FPGA device by utilizing racket??  Can racket be a solution to ALL PROBLEMS that is the question.
>  
>  
> David Blubaugh
>  
> 
> 
> --- On Wed, 12/5/12, users-request at racket-lang.org <users-request at racket-lang.org> wrote:
> 
> From: users-request at racket-lang.org <users-request at racket-lang.org>
> Subject: users Digest, Vol 88, Issue 18
> To: users at racket-lang.org
> Date: Wednesday, December 5, 2012, 10:30 AM
> 
> Send users mailing list submissions to
>     users at racket-lang.org
> 
> To subscribe or unsubscribe via the World Wide Web, visit
>     http://lists.racket-lang.org/users/listinfo
> or, via email, send a message with subject or body 'help' to
>     users-request at racket-lang.org
> 
> You can reach the person managing the list at
>     users-owner at racket-lang.org
> 
> When replying, please edit your Subject line so it is more specific
> than "Re: Contents of users digest..."
> 
> 
> [Racket Users list:
> http://lists.racket-lang.org/users]
> 
> 
> Today's Topics:
> 
>    1. Re: Whats the difference between a predicate and a flat
>       contract? (Harry Spier)
>    2. Re: Whats the difference between a predicate and a flat
>       contract? (Robby Findler)
>    3. Re: DRRacket right-click menu fragility in Linux. (Neil Toronto)
>    4. Re: minimum spanning tree (Matthias Felleisen)
> 
> 
> ----------------------------------------------------------------------
> 
> Message: 1
> Date: Tue, 4 Dec 2012 21:59:42 -0500
> From: Harry Spier <vasishtha.spier at gmail.com>
> To: Robby Findler <robby at eecs.northwestern.edu>
> Cc: Carl Eastlund <cce at ccs.neu.edu>, users <users at racket-lang.org>
> Subject: Re: [racket] Whats the difference between a predicate and a
>     flat    contract?
> Message-ID:
>     <CAJ3b0o9_yd-j4U6tbEOQaB+JKWto_A1XwSrh3_xyRTk=Uviy=Q at mail.gmail.com>
> Content-Type: text/plain; charset=UTF-8
> 
> Are flat-contract and flat-contract-predicate equivalent?
> 
> > ((flat-contract 'x) 'x)
> #t
> > ((flat-contract-predicate 'x) 'x)
> #t
> > ((flat-contract 'x) 'y)
> #f
> > ((flat-contract-predicate 'x) 'y)
> #f
> >
> 
> Harry
> 
> On Tue, Dec 4, 2012 at 9:41 PM, Robby Findler
> <robby at eecs.northwestern.edu> wrote:
> > It does that for symbols, but not everything.
> >
> > This is the place you should be looking, I think.
> >
> > http://docs.racket-lang.org/reference/contracts.html
> >
> > Robby
> >
> > On Tue, Dec 4, 2012 at 8:38 PM, Harry Spier <vasishtha.spier at gmail.com> wrote:
> >> OK I see the docs to flat-contract? but not flat-contract
> >> http://docs.racket-lang.org/reference/contract-utilities.html#(def._((lib._racket/contract/private/misc..rkt)._flat-contract~3f))
> >> mention that flat-contracts are more than predicates.  Those docs
> >> don't mention it, but it appears from experimentation that
> >> (flat-contract something) produces a procedure such that
> >> ((flat-contract something) x) is #t if something eq? x .
> >>
> >> Harry Spier
> >>
> >> On Tue, Dec 4, 2012 at 8:57 PM, Robby Findler
> >> <robby at eecs.northwestern.edu> wrote:
> >>> On Tue, Dec 4, 2012 at 7:28 PM, Carl Eastlund <cce at ccs.neu.edu> wrote:
> >>>> On Tue, Dec 4, 2012 at 7:49 PM, Robby Findler <robby at eecs.northwestern.edu>
> >>>> wrote:
> >>>>>
> >>>>> Flat contracts includes more things than contracts. For example:
> >>>>>
> >>>>> [robby at yanpu] ~/git/plt/collects/scribblings/reference$ racket
> >>>>> Welcome to Racket v5.3.1.9.
> >>>>> > (flat-contract? 'x)
> >>>>> #t
> >>>>> > (procedure? 'x)
> >>>>> #f
> >>>>>
> >>>>> The flat-contract function is a holdover from the days when flat contracts
> >>>>> weren't able to be used directly as predicate functions.
> >>>>>
> >>>>>
> >>>>> I'll push a clarification to the docs for flat-contract.
> >>>>
> >>>>
> >>>> Isn't that the wrong way around?  The flat-contract function lets you use a
> >>>> predicate as a contract, not a contract as a predicate.  Presumably it's
> >>>> from before predicates could be used as contracts, although I hadn't
> >>>> realized there was such a time.
> >>>
> >>> There was a time when you had to call 'flat-contract' to turn a
> >>> predicate into a contract, yep. There was a housecleaning (anyone
> >>> remember the days when there were multiple suffixes (not just "/c") on
> >>> the combinators?) and I probably should have gotten rid of it at that
> >>> time, but I didn't.
> >>>
> >>> (Oh and I mean "contracts" where I wrote "preducate functions" above. Oops.)
> >>>
> >>> Robby
> 
> 
> ------------------------------
> 
> Message: 2
> Date: Tue, 4 Dec 2012 21:05:45 -0600
> From: Robby Findler <robby at eecs.northwestern.edu>
> To: Harry Spier <vasishtha.spier at gmail.com>
> Cc: Carl Eastlund <cce at ccs.neu.edu>, users <users at racket-lang.org>
> Subject: Re: [racket] Whats the difference between a predicate and a
>     flat    contract?
> Message-ID:
>     <CAL3TdOMVL4xerBMr9xWqNz3tPjxbSXDfjaiJro2N9j6fxrSrOQ at mail.gmail.com>
> Content-Type: text/plain; charset=UTF-8
> 
> Yes ..., I think so (well, eq? probably messes things up, as usual).
> 
> But that's a funny question! What's really going on there is that
> flat-contract is coercing the value into a contract, and flat
> contracts also acts as predicate functions (matching what the
> contracts match). flat-contract-predicate takes its argument, turns it
> into the contract and then returns the predicate. This last step is
> useless, as flat-contracts are now predicates without any coercion
> (again, not something that was always the case).
> 
> I'll add a similar note to the docs for this function too.
> 
> Robby
> 
> On Tue, Dec 4, 2012 at 8:59 PM, Harry Spier <vasishtha.spier at gmail.com> wrote:
> > Are flat-contract and flat-contract-predicate equivalent?
> >
> >> ((flat-contract 'x) 'x)
> > #t
> >> ((flat-contract-predicate 'x) 'x)
> > #t
> >> ((flat-contract 'x) 'y)
> > #f
> >> ((flat-contract-predicate 'x) 'y)
> > #f
> >>
> >
> > Harry
> >
> > On Tue, Dec 4, 2012 at 9:41 PM, Robby Findler
> > <robby at eecs.northwestern.edu> wrote:
> >> It does that for symbols, but not everything.
> >>
> >> This is the place you should be looking, I think.
> >>
> >> http://docs.racket-lang.org/reference/contracts.html
> >>
> >> Robby
> >>
> >> On Tue, Dec 4, 2012 at 8:38 PM, Harry Spier <vasishtha.spier at gmail.com> wrote:
> >>> OK I see the docs to flat-contract? but not flat-contract
> >>> http://docs.racket-lang.org/reference/contract-utilities.html#(def._((lib._racket/contract/private/misc..rkt)._flat-contract~3f))
> >>> mention that flat-contracts are more than predicates.  Those docs
> >>> don't mention it, but it appears from experimentation that
> >>> (flat-contract something) produces a procedure such that
> >>> ((flat-contract something) x) is #t if something eq? x .
> >>>
> >>> Harry Spier
> >>>
> >>> On Tue, Dec 4, 2012 at 8:57 PM, Robby Findler
> >>> <robby at eecs.northwestern.edu> wrote:
> >>>> On Tue, Dec 4, 2012 at 7:28 PM, Carl Eastlund <cce at ccs.neu.edu> wrote:
> >>>>> On Tue, Dec 4, 2012 at 7:49 PM, Robby Findler <robby at eecs.northwestern.edu>
> >>>>> wrote:
> >>>>>>
> >>>>>> Flat contracts includes more things than contracts. For example:
> >>>>>>
> >>>>>> [robby at yanpu] ~/git/plt/collects/scribblings/reference$ racket
> >>>>>> Welcome to Racket v5.3.1.9.
> >>>>>> > (flat-contract? 'x)
> >>>>>> #t
> >>>>>> > (procedure? 'x)
> >>>>>> #f
> >>>>>>
> >>>>>> The flat-contract function is a holdover from the days when flat contracts
> >>>>>> weren't able to be used directly as predicate functions.
> >>>>>>
> >>>>>>
> >>>>>> I'll push a clarification to the docs for flat-contract.
> >>>>>
> >>>>>
> >>>>> Isn't that the wrong way around?  The flat-contract function lets you use a
> >>>>> predicate as a contract, not a contract as a predicate.  Presumably it's
> >>>>> from before predicates could be used as contracts, although I hadn't
> >>>>> realized there was such a time.
> >>>>
> >>>> There was a time when you had to call 'flat-contract' to turn a
> >>>> predicate into a contract, yep. There was a housecleaning (anyone
> >>>> remember the days when there were multiple suffixes (not just "/c") on
> >>>> the combinators?) and I probably should have gotten rid of it at that
> >>>> time, but I didn't.
> >>>>
> >>>> (Oh and I mean "contracts" where I wrote "preducate functions" above. Oops.)
> >>>>
> >>>> Robby
> 
> 
> ------------------------------
> 
> Message: 3
> Date: Tue, 04 Dec 2012 21:30:23 -0700
> From: Neil Toronto <neil.toronto at gmail.com>
> To: users at racket-lang.org
> Subject: Re: [racket] DRRacket right-click menu fragility in Linux.
> Message-ID: <50BECDDF.4030508 at gmail.com>
> Content-Type: text/plain; charset=UTF-8; format=flowed
> 
> Could what you're experiencing have anything to do with tooltips? It 
> seems my right-click menu doesn't stay up whenever there's a tooltip 
> out. Which is, like, every time I want it.
> 
> Neil ?
> 
> On 12/04/2012 07:55 PM, Ray Racine wrote:
> > Yea, I didn't want to make a big deal out of it, but the up/down button
> > change did not fix the issue.   In fact I'd say no impact positive or
> > negative.
> >
> > It seems to happen when there is additional drawing 'complexity' in
> > co-occurrence with the pop up drawing area.  I.e. the pop up menu is
> > drawing where arrows are drawn or error highlighting is occurring etc.
> > Also maybe when the pop up menu area is near the 'edge' of the Dr window
> > and or pane area.  But again the problem is not consistently
> > reproducible yet happens more often then not.  Its not a once in a blue
> > moon that thing.  Sometimes an attempt to right click pop up  menu will
> > fail numerous times in a row then succeed for no apparent reason.
> >
> > On Dec 4, 2012 9:07 PM, "Robby Findler" <robby at eecs.northwestern.edu
> > <mailto:robby at eecs.northwestern.edu>> wrote:
> >
> >     On Tue, Dec 4, 2012 at 6:11 PM, Stephen Chang <stchang at ccs.neu.edu
> >     <mailto:stchang at ccs.neu.edu>> wrote:
> >      > On Fri, Nov 2, 2012 at 9:33 PM, Robby Findler
> >      > <robby at eecs.northwestern.edu
> >     <mailto:robby at eecs.northwestern.edu>> wrote:
> >      >> I've pushed a fix to this. Thanks to Matthew for looking into it and
> >      >> sorting it out and sorry for the delay.
> >      >
> >      > I'm using git head and I'm still seeing this problem (Ubuntu
> >     11.10). I
> >      > can't reliably reproduce it but in case it helps, it most recently
> >      > happened when I selected tack arrows and now I can't bring up the
> >     menu
> >      > to untack the arrows anymore.
> >      >
> >
> >     The particular fix Matthew pointed me to is popping up the menu on a
> >     mouse down event, not a mouse up event.
> >
> >     http://git.racket-lang.org/plt/blobdiff/27aa99944657c5827eee3772f715df7dd971d1e0..0377bda9474f8848a97509ace898174c83361006:/collects/framework/private/keymap.rkt
> >
> >     So I guess there's something else going on, too (because that's the
> >     code that pops up the menu with the check syntax items).
> >
> >     Robby
> >
> >
> >
> > ____________________
> >    Racket Users list:
> >    http://lists.racket-lang.org/users
> >
> 
> 
> 
> ------------------------------
> 
> Message: 4
> Date: Wed, 5 Dec 2012 10:30:22 -0500
> From: Matthias Felleisen <matthias at ccs.neu.edu>
> To: Pierpaolo Bernardi <olopierpa at gmail.com>
> Cc: Racket mailing list <users at racket-lang.org>
> Subject: Re: [racket] minimum spanning tree
> Message-ID: <CE678990-63D0-4400-AF2A-C6B2880E4FFB at ccs.neu.edu>
> Content-Type: text/plain; charset="iso-8859-1"
> 
> 
> You are making a very good point here, especially the last one, 
> which in a sense exposes the folly of Perlis's maxim (it is better
> to have one data type with a 100 operations than 10 data types 
> with 10 operations each). One, the maxim biases programmers 
> and before they know it, they have introduced bad dependences 
> and performance problems and whoknowswhat. 
> 
> ---------------------------------------------------------------
> 
> Having said that, I think Ian's point is equally good. So here
> is what I am wondering. 
> 
> Isn't the case of graphs worth a case study where we define 
> a WIDE interface for graphs and their operations, which we 
> can do so with contracts. Then we implement it in several 
> different ways and conduct performance studies (small and
> large). And we advertise, which library is good for which 
> kind of scenario. 
> 
> I am sure that some data structure person has done this
> for C++ or some such language. The Saarbr?cken MPI 1 comes
> to mind. BUT, I am also sure that we don't have it and that
> we would benefit from having one. 
> 
> NOW: as we conduct this study, we might be able to articulate
> performance "contracts" (that's probably the wrong word) and
> possibly learn how to add those to library implementations as
> a secondary interface. Doing so would once again distinguish
> Racket from other programming languages. 
> 
> It is probably a dissertation, possibly more. 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> On Dec 4, 2012, at 5:36 AM, Pierpaolo Bernardi wrote:
> 
> > On Mon, Dec 3, 2012 at 5:07 PM, J. Ian Johnson <ianj at ccs.neu.edu> wrote:
> >> Graph algorithms are often meant to be very fast, and different algorithms necessitate different representations. Two popular representations are adjacency lists and shared structures.
> > 
> > The representations usually used in general purpose graphs libraries
> > are adiacency lists and incidence matrices.
> > 
> > Two good examples that I know of are:  Knuth's Stanford GraphBase
> > (available from his home page and in published book form), and the
> > Combinatorica library for Mathematica (code available freely on the
> > net, manual available as a published book "Computational Discrete
> > Mathematics" by Skiena & Pemmaraju).
> > 
> >> It also isn't right to call them lists unless you're talking about multigraphs. Indeed successor nodes should be treated as a set, but Racket's sets have quite a bit of overhead, especially for small sets. Should it be fast to compute predecessor nodes? There are too many considerations for there to be just one blessed representation, IMHO.
> > 
> > Linked lists made of cons pairs are not the best data structure for
> > every possible use of a sequence data structure.  However, we find
> > this data structure very useful, don't we?  we force them into uses
> > for which they are not optimal, because of the convenience of having
> > available a vast library using them. And when we can't fit them to our
> > purpose we use a more specialized data structure.
> > 
> > I think a similar compromise for a graph data structure would be very useful.
> > 
> > Cheers
> > P.
> > 
> > ____________________
> >  Racket Users list:
> >  http://lists.racket-lang.org/users
> 
> -------------- next part --------------
> A non-text attachment was scrubbed...
> Name: smime.p7s
> Type: application/pkcs7-signature
> Size: 4373 bytes
> Desc: not available
> URL: <http://lists.racket-lang.org/users/archive/attachments/20121205/52954024/attachment.p7s>
> 
> End of users Digest, Vol 88, Issue 18
> *************************************
> ____________________
>  Racket Users list:
>  http://lists.racket-lang.org/users

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4373 bytes
Desc: not available
URL: <http://lists.racket-lang.org/users/archive/attachments/20121205/3121990d/attachment.p7s>

Posted on the users mailing list.