Experimental / Compilation details
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 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.