| CARVIEW |
Select Language
HTTP/2 200
date: Tue, 30 Dec 2025 13:00:27 GMT
content-type: text/html; charset=utf-8
vary: X-PJAX, X-PJAX-Container, Turbo-Visit, Turbo-Frame, X-Requested-With,Accept-Encoding, Accept, X-Requested-With
etag: W/"3a6789572f08acd0aa5714ec44299b00"
cache-control: max-age=0, private, must-revalidate
strict-transport-security: max-age=31536000; includeSubdomains; preload
x-frame-options: deny
x-content-type-options: nosniff
x-xss-protection: 0
referrer-policy: no-referrer-when-downgrade
content-security-policy: default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com *.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com github.githubassets.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com proxy.individual.githubcopilot.com proxy.business.githubcopilot.com proxy.enterprise.githubcopilot.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net/ productionresultssa1.blob.core.windows.net/ productionresultssa2.blob.core.windows.net/ productionresultssa3.blob.core.windows.net/ productionresultssa4.blob.core.windows.net/ productionresultssa5.blob.core.windows.net/ productionresultssa6.blob.core.windows.net/ productionresultssa7.blob.core.windows.net/ productionresultssa8.blob.core.windows.net/ productionresultssa9.blob.core.windows.net/ productionresultssa10.blob.core.windows.net/ productionresultssa11.blob.core.windows.net/ productionresultssa12.blob.core.windows.net/ productionresultssa13.blob.core.windows.net/ productionresultssa14.blob.core.windows.net/ productionresultssa15.blob.core.windows.net/ productionresultssa16.blob.core.windows.net/ productionresultssa17.blob.core.windows.net/ productionresultssa18.blob.core.windows.net/ productionresultssa19.blob.core.windows.net/ github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com wss://alive-staging.github.com api.githubcopilot.com api.individual.githubcopilot.com api.business.githubcopilot.com api.enterprise.githubcopilot.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com private-avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com release-assets.githubusercontent.com secured-user-images.githubusercontent.com/ user-images.githubusercontent.com/ private-user-images.githubusercontent.com opengraph.githubassets.com marketplace-screenshots.githubusercontent.com/ copilotprodattachments.blob.core.windows.net/github-production-copilot-attachments/ github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com/ secured-user-images.githubusercontent.com/ private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com github.githubassets.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/
server: github.com
content-encoding: gzip
accept-ranges: bytes
set-cookie: _gh_sess=bb5%2F5ZnEdYyLgCkv1EByy9VnuXmNAGYrBtBWb5u%2FNEMLFMoYY%2FPqVSNGPgIzx8mFZ2Jl3S8evbZkj3hrFa4DhSi3KdkN8KjXCrUp33l3uWBXn4R28XZFv%2FpyOm2fCyAQsa7EW3VRiC0PgRsTm1Kbn8pVypjHlRCcrvcv%2FVpT80lTinfMrnOnr3iCMR0p7jIMcSS2FNowa9DkLFfhW%2BUbp4vpF2gtzTInzIWwoB4wYGrfcXxvTRC75k54YoecZ9krw0ozbZmUtGEH9D8LgETbdw%3D%3D--2zlk7rctWRUgE8tj--%2FzWUonEBYZDn%2FF4GE86gnA%3D%3D; Path=/; HttpOnly; Secure; SameSite=Lax
set-cookie: _octo=GH1.1.1419285334.1767099627; Path=/; Domain=github.com; Expires=Wed, 30 Dec 2026 13:00:27 GMT; Secure; SameSite=Lax
set-cookie: logged_in=no; Path=/; Domain=github.com; Expires=Wed, 30 Dec 2026 13:00:27 GMT; HttpOnly; Secure; SameSite=Lax
x-github-request-id: 8982:14CF36:A4528A:B3755D:6953CCEB
GitHub - gerdr/m0: M0 interpreter
Skip to content
Navigation Menu
{{ message }}
-
Notifications
You must be signed in to change notification settings - Fork 1
M0 interpreter
License
gerdr/m0
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
An implementation of Parrot's M0 specification[1] [1] https://github.com/parrot/parrot/blob/m0/docs/pdds/draft/pdd32_m0.pod Changes to the spec will be properly documented once the design is more stable. Some preliminary pointers: - use an m0b header without padding and add a field for the file size - add offsets for metadata and bytecode segments to directory entries; this means the chunk can be constructed immediately when reading the entry without having to parse the rest of the file - add an encoding field to directory entries so we have the same format as m0 strings and can use the mmap'd data directly - int and num register sizes are configurable, but ops are always 32-bit, which avoids unreasonable comlexity Some things which haven't been implemented yet, but should be kept in mind: - alignment has to be taken into account when writing entries into the constants table: unaligned access carries a performance penalty on most architectures (if it's even possible at all); eg x86 provides atomic access to doubles only if they are 8-byte aligned - typed registers are a necessity for efficient JIT compilation; each callframe allocation should therefore be accompanied by metadata which lists the register types (which can also be used by the gc, which needs to detect PMC registers); the fixed type mapping by register number isn't flexible enough and doesn't play well with variably-sized callframes; the interpreter however will allocate registers of uniform size to avoid complexity and at the cost of a bit of wasted space in case of register types with different sizes - data structures will be dense (no linked lists to avoid chasing pointers though memory) and probably power-of-two sized, which hopefully results in a reasonable allocation strategy for many access patterns and again at the cost of some space; this also means that there's no need to keep track of both load and size (resize when the load hits a power of two) Build instruction: $ make $ make test $ make exe Cleanup instructions: $ make clean $ make realclean Uses clang by default - to use gcc, change all make invocations to $ make CC=gcc CFLAGS=-std=c99 If you want to compile as C++, try $ make CC=clang++ CFLAGS=-xc++ The code doesn't compile warning-free with gcc 4.5, which is probably related to a compiler bug fixed in 4.6 (not verified); it doesn't compile at all with g++ 4.5. Compiling with Visual Studio is supported, though you'll still need GNU make and perl in PATH (both Cygwin and MinGW versions should work). Instead of calling make directly, use the accompanying batch file, ie $ vsmake $ vsmake test $ vsmake exe
About
M0 interpreter
Resources
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published
You can’t perform that action at this time.