Compiler Interstricts

Experimental / Compilation details

LibNebula

Nebulosas are regions of gas that form stars, many call them the pillars of creation, and in ashen, LibNebula is the pillar of creation.

LibNebula is a internal API that supplements not only the compiler but your projects aswell, it is written in both Ashen and C to facilitate interop.

Why? For a few reasons, having C means Ashen can use the system compiler to determine the operating system and architecture with ease, it also helps with portability. Although, you can technically use libnebula in your code:

import libnebula.index;

WITCH WARNING:Libnebula is purposefuly undocumented, using it directly can cause issues, please open its source code for details on functions.

Runes

Runes are additional compiler metadata, they come in many shapes:

// As information for compilation of procedures:
@DisableNameMangling
proc somePublicAPI(...) {...

// As markers
@Deprecated
proc someDeprecatedFunction (...) {..

// As macros in the case of LocationAware.
@LocationAware
proc logFunc(message : String, location : Byte&) { // location parameter wont be mandatory, and will be auto filled by the compiler

// as struct metadata
@AshenInternal
struct SomeStruct {..

// As type checkers

abstract<T> struct Array {
  ..

  @HideIfArray<T>
  proc split(splitter : T) : T[][] {
    ...
  }
}

WITCH WARNING:Currently, there is no future for user programs to utilize custom metadata as ashen is still in beta, but this type of reflection will be available in Ashen 2.