Code Monkey home page Code Monkey logo

disassemble's Issues

Typed Racket support

Hi! Thank you very much for this library, it is extremely interesting.

One thing I tried out is checking how the emitted assembly changes under gradual typing. But I could not find in the documentation how to work with Typed Racket; I also tried racket/contract.

My attempt with Typed Racket on the REPL:

$ racket -I typed/racket
Welcome to Racket v7.1.
> (: my-square (-> Number Number))
> (define (my-square x) (* x x))
> (require disassemble)
> (disassemble my-square)
; readline-input:7:0: Type Checker: missing type for identifier;
;  consider using `require/typed' to import it
;   identifier: disassemble
;   from module: disassemble
;   in: (disassemble my-square)
; [,bt for context]

> (require/typed disassemble [disassemble (-> Any Any)])
> (disassemble my-square)
; disassemble: contract violation
;   expected: non-primitive procedure
;   given: #<procedure:my-square>
; [,bt for context]
> ^D

And here is my attempt to use disassemble on an untyped Racket procedure that has a contract:

$ racket
Welcome to Racket v7.1.
> (require disassemble)
> (define (my-square x)
    (* x x))
> (disassemble my-square)
;; ... elided: it works ...

> (define/contract (real-square x)
    (-> real? real?)
    (* x x))
> (disassemble real-square)
; disassemble: contract violation
;   expected: non-primitive procedure
;   given: #<procedure:real-square>
; [,bt for context]
> ^D

Is this possible, but undocumented? Or is it just not doable?

Thanks again!

Strange results from disassemble for fib

With racket 7.0, disassemble for fib:

(define (fib n)
  (cond
    [(<= n 1) n]
    [else (fib (+ n 1) (+ n 2))]))

returns the following partial assembly code:

      2f: 48bed749bc2e567f0000           (mov rsi #x7f562ebc49d7)
      39: 488975d8                       (mov (mem64+ rbp #x-28) rsi)
      3d: 48bee049bc2e567f0000           (mov rsi #x7f562ebc49e0)

With nasm it shows up as:

0000002F  48BE574EBC2E567F  mov rsi,0x7f562ebc4e57
         -0000
00000039  488975D8          mov [rbp-0x28],rsi
0000003D  48BE604EBC2E567F  mov rsi,0x7f562ebc4e60
         -0000

I am confused about what those -0000 are and they look like some parsing bug of sorts.

Can't disassemble

$ racket
Welcome to Racket v8.5.0.7 [cs].
> (require disassemble my-lib)
> (disassemble a-proc-of-my-lib)
inspector-object: invalid message 'code to object type 'record [,bt for context]
> ,bt
inspector-object: invalid message 'code to object type 'record
  context...:
   /usr/local/google/home/lorseau/.local/share/racket/snapshot/pkgs/disassemble/disassemble/main.rkt:142:5: body of top-level
   /usr/local/google/home/lorseau/.local/share/racket/snapshot/pkgs/disassemble/disassemble/main.rkt:193:0: disassemble
   /usr/share/racket-8.5.0.7/pkgs/xrepl-lib/xrepl/xrepl.rkt:1573:0
   /usr/share/racket-8.5.0.7/collects/racket/repl.rkt:11:26
> 

The same happens whether I remove zos or recompile beforehand.

The basic example of the docs does work though.

Internal error on `map`

Example:

-> (require disassemble)
-> (disassemble map)
; error: contract violation
;   expected: (or/c string? symbol?)
;   given: '#(map
;     #<path:/home/asumu/plt/racket-git/racket/collects/racket/private/map.rkt>
;     21 13 588 924 #f)
;   argument position: 1st
; [,bt for context]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.