[racket] Best typed/racket representation for bitfield of width 125?

From: John Clements (johnbclements at gmail.com)
Date: Sat Sep 6 02:36:24 EDT 2014

Is this a bug, or just a known limitation of typed racket? It looks like a
fixnum can be up to 2^61, but the type checker for integer literals doesn't
like them. This program:

#lang typed/racket

(require racket/fixnum)

(define (ensure-fixnum i)
  (cond [(fixnum? i) i]
        [else (error 'ensure-fixnum)]))

(fixnum? 281474976710656) ;; -> #t
(: i Fixnum)
(define i (ensure-fixnum 281474976710656))

works fine, but requires the ensure-fixnum, because the type checker does
not believe that the literal 281474976710656 lives in fixnum.

You can also see this at the top level, using (:print-type 281474976710656)

Is this a bug, or is this just a known compromise to simplify the
type-checker's portability and numeric tower?

John




On Thu, Sep 4, 2014 at 12:35 PM, Vincent St-Amour <stamourv at ccs.neu.edu>
wrote:

> Would an fxvector of length 5 (to account for the tag bits) work?
>
> If all you're doing is bitwise ops and comparisons, it should be easy to
> convince TR that you're staying within fixnum range.
>
> Vincent
>
>
>
>
> At Thu, 4 Sep 2014 10:45:48 -0700,
> John Clements wrote:
> >
> > [1  <multipart/alternative (7bit)>]
> > [1.1  <text/plain; UTF-8 (quoted-printable)>]
> > I want to represent a bitfield of 125 bits, using typed racket. I’ll be
> > combining them using bitwise operations, and checking for zero-ness. I
> > think that’s about it.
> >
> > I could just use type Integer, but it seems like that would impose
> > additional checking, since the type system doesn’t know the size.  In
> > untyped racket I used a vector of four integers in the range 0-2^32, but
> > those don’t fit in typed Racket’s “Fixnum” because it uses a signed
> > representation (and indeed, untyped racket may have been falling prey to
> > the same problem. Perhaps I should break it up into four integers in the
> > range 0-2^31? That seems weird, but maybe that’s my best choice? Or… I
> > could use a byte string.
> >
> > Apologies if I’m missing something in the docs, here; I’ve spent a few
> > minutes searching, without turning anything up.
> >
> > Thanks for any advice,
> >
> > John
> > [1.2  <text/html; UTF-8 (quoted-printable)>]
> >
> > [2  <text/plain; us-ascii (7bit)>]
> > ____________________
> >   Racket Users list:
> >   http://lists.racket-lang.org/users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20140905/0500f5ee/attachment.html>

Posted on the users mailing list.