Skip to main content

Emulator for the RASP machines proposed by Cook & Reckow in 1973

Project description

RASP Machines

last release on PyPI License Build status Code coverage Code quality Downloads

This is a small Python 3 emulator for the random access stored procedure machine (RASP) designed by Cook & Reckhow in 1973 below. I developed this as a companion tool for a course in algorithms & data structures, where it helps (I hope) to with understanding computation models, growth orders and the applicability of the Big-O notation.

  • Cook, Stephen A., and Robert A. Reckhow. "Time bounded random access machines." Journal of Computer and System Sciences 7, no. 4 (1973): 354–375. DOI

In a nutshell, the RASP machine is a mini computer with eight instructions, two registers (an accumulator and instruction pointer), and an I/O device. As a computation model, it closely resembles an actual computer, as opposed to a Turing machine for instance.

How to install RASP?

The simplest way to install the latest version is to use PyPI as follows:

  $ pip install rasp-machine

Please, refer to the documentation for a more comprehensive help!

How to use the RASP machine?

A Simple Program: Adding Two Integers

Let us consider a tiny program for the rasp machine. To simplify writing programs, RASP provides a simple assembly language, as shown below, with the code needed to read two integers from the I/O device and to print their sum back onto it.

segment: data
    left     1       0
    right    1       0
    result   1       0

segment: code
    read     left      ;; left = user_input()
    read     right     ;; right = user_input()
    load     0
    add      left
    add      right
    store    result    ;; result = left + right
    print    result
    halt     -1

Provided we save the code above into a file named addition.asm, we can get the associated machine code, using the following command

$ rasp assemble addition.asm
Machine code saved in 'addition.rx'

Note that the option --debug will yield machine code that contains debugging information, useful when using the debugger.

Debugging & Executing RASP

Now we have the machine code, we can execute it using the following commands:

$ rasp execute addition.rx
rasp? 10
rasp? 20
30

Note that you can extract some performance measure (CPU cycle, read, writes, etc.) using the --use-profiler option.

Should there be any problem with the execution, we can start the associated debugger with the command:

$ rasp debug addition.rx
RASP-Machine 0.1.0
 ┼ debug >

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

RASP-Machine-0.1.2.tar.gz (18.1 kB view details)

Uploaded Source

Built Distribution

RASP_Machine-0.1.2-py3-none-any.whl (24.7 kB view details)

Uploaded Python 3

File details

Details for the file RASP-Machine-0.1.2.tar.gz.

File metadata

  • Download URL: RASP-Machine-0.1.2.tar.gz
  • Upload date:
  • Size: 18.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.8.10

File hashes

Hashes for RASP-Machine-0.1.2.tar.gz
Algorithm Hash digest
SHA256 869a1a28997ff8104bd17787cbd18cc62f0dbd22a9c4e59ff379b639c33f8061
MD5 c6e7296127b5ca6a85a2794f07573835
BLAKE2b-256 0ecd80e438805fc9ac78502a31807b351932e8d602e02e077f7a7034f9cd58f8

See more details on using hashes here.

File details

Details for the file RASP_Machine-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: RASP_Machine-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 24.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.8.10

File hashes

Hashes for RASP_Machine-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 fbcc7290c0236ee1b509dd2c7ccc6314c96e086235621290b0523d6a38e52c11
MD5 a47405fa44d7b569436b21ccd38c207a
BLAKE2b-256 c8820f0a2b8e61fab9ba156a61416dfa47f95247b9c1883641318bcc75734ecd

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page