Skip to content

Standard Library (built-in modules) #74

Description

@Rudxain

What it is

These are just *.rickroll files that the interpreter can conditionally embed into userland *.rickroll files. They are assigned to a special namespace, which the interpreter/compiler knows exactly where to locate unambiguously.

What it ISN'T

This isn't a generalized module system, as there's no support for userland scripts. This shall be implemented in a separate proposal (#75), for simplicity's sake.

Why

  • Portability
    • RR programs would no longer need 3rd-party lang-specific libraries, so they can work exactly the same on any implementation.
  • Abstraction
    • Everything is self-contained.
  • Fun!
    • We'll have freedom to name modules however we want! Example: core.math.pie is the π constant from the math module.

How

The implementation details are yet to be stabilized. I have a rough idea of how we could do it: RR modules would be inlined in a C-like manner, which is quite simple, but not perfect.

The reason behind a "special namespace" for built-in modules, is to simplify the module-resolution algorithm for when we add support for userland RR libs:

  • Userland libs would be imported using file-system path-string-literals, such as we know the "./FILE_NAME" and we're gonna play it (notice how the extension is optional)
  • Built-ins would be imported using similar (maybe exactly the same?) syntax as we know the std.MOD_NAME and we're gonna play it (notice the prefix to disambiguate between C/Py and built-in)

We could take inspiration from Rust by having different namespace-prefixes:

  • core
    • for self-contained stuff, such as
      • math processing
      • string formatting
      • list iteration and sorting
      • etc...
  • std
    • for abstractions over platform-specific and impl-specific code, such as

std would CONSIDERABLY reduce the need for importing Py libs/mods such as sys and os

Outro

I'm willing to contribute modules. We could even use stuff from the examples folder as a starting point. Even better, core/std could become examples themselves!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions