PreviousUpNext

14.4.136  Unsafe

The standard library Unsafe api defines access to various datastructures and functions which by-pass the usual compiler type-safeness guarantees. By using this api, you can write code just as flaky and core-dump prone as any C program! This functionality is occasionally used in truly time-critical code to avoid some runtime checks.

In general the best advice when tempted to use this module is — don’t!

The Unsafe api is implemented by the unsafe package.

The Unsafe api source code is in src/lib/std/src/unsafe/unsafe.api.

The above information is manually maintained and may contain errors.

api {   package mythryl_callable_c_library_interface
          : api {
                exception CFUN_NOT_FOUND String;
                find_c_function : {fun_name:String, lib_name:String} -> X -> Y;
                    find_c_function' :
                        {fun_name:String, lib_name:String}
                        ->
                        (Ref((X -> Y) ) , (({fun_name:String, io_call:X -> Y, lib_name:String} -> X -> Y) -> Void));
                    find_c_function'' :
                        {fun_name:String, lib_name:String}
                        ->
                        ((X -> Y) , Ref((X -> Y) ) , (({fun_name:String, io_call:X -> Y, lib_name:String} -> X -> Y) -> Void));
                    find_c_function''' :
                        {fun_name:String, lib_name:String}
                        ->
                        (   (Y -> X) , Ref((Y -> X) ) , (({fun_name:String, io_call:Y -> X, lib_name:String} -> Y -> X) -> Void)
                            , (Y -> Z) , Ref((Y -> Z) ) ,
                            (({fun_name:String, io_call:Y -> X, lib_name:String} -> Y -> Z) -> Void)
                        );
                restore_redirected_syscalls_to_direct_form : Void -> Void;
                System_Constant  = {id:Int, name:String};
                exception SYSTEM_CONSTANT_NOT_FOUND String;
                find_system_constant : (String , List(System_Constant )) -> Null_Or(System_Constant );
                bind_system_constant : (String , List(System_Constant )) -> System_Constant;};;
        package unsafe_chunk
          : api {
                Chunk;
                    Representation
                    = BYTE_RO_VECTOR
                    |
                    BYTE_RW_VECTOR
                    |
                    FLOAT64
                    |
                    FLOAT64_RW_VECTOR
                    |
                    LAZY_SUSPENSION
                    |
                    PAIR
                    |
                    RECORD
                    |
                    REF
                    |
                    TYPEAGNOSTIC_RO_VECTOR
                    |
                    TYPEAGNOSTIC_RW_VECTOR
                    |
                    UNBOXED
                    |
                    UNT1
                    |
                    WEAK_POINTER;
                to_chunk : X -> Chunk;
                make_tuple : List(Chunk ) -> Chunk;
                boxed : Chunk -> Bool;
                unboxed : Chunk -> Bool;
                rep : Chunk -> Representation;
                length : Chunk -> Int;
                exception REPRESENTATION;
                to_tuple : Chunk -> List(Chunk );
                to_string : Chunk -> String;
                to_ref : Chunk -> Ref(Chunk );
                to_rw_vector : Chunk -> Rw_Vector(Chunk );
                to_float64_rw_vector : Chunk -> runtime::asm::Float64_Rw_Vector;
                to_byte_rw_vector : Chunk -> runtime::asm::Unt8_Rw_Vector;
                to_vector : Chunk -> ?.Vector(Chunk );
                to_byte_vector : Chunk -> ?.vector_of_one_byte_unts::Vector;
                to_exn : Chunk -> Exception;
                to_float : Chunk -> Float;
                to_int : Chunk -> Int;
                to_int1 : Chunk -> one_word_int::Int;
                to_unt : Chunk -> Unt;
                to_unt8 : Chunk -> one_byte_unt::Unt;
                to_unt1 : Chunk -> one_word_unt::Unt;
                nth : (Chunk , Int) -> Chunk;};;
        package software_generated_periodic_events
          : api {
                exception BAD_SOFTWARE_GENERATED_PERIODIC_EVENT_INTERVAL;
                software_generated_periodic_events_switch_refcell__global : Ref(Bool );
                    set_software_generated_periodic_event_handler :
                    Null_Or((fate::Fate(Void ) -> fate::Fate(Void )) ) -> Void;
                    get_software_generated_periodic_event_handler :
                    Void -> Null_Or((fate::Fate(Void ) -> fate::Fate(Void )) );
                set_software_generated_periodic_event_interval : Null_Or(Int ) -> Void;
                get_software_generated_periodic_event_interval : Void -> Null_Or(Int );};;
        package vector
          : api {
                get : (?.Vector(X ) , Int) -> X;
                make : (Int , List(X )) -> ?.Vector(X );};;
        package rw_vector
          : api {
                get : (Rw_Vector(X ) , Int) -> X;
                set : (Rw_Vector(X ) , Int , X) -> Void;
                make : (Int , X) -> Rw_Vector(X );};;
        package vector_of_chars
          : api {
                Vector  = Vector;
                Element  = Element;
                get : (Vector , Int) -> Element;
                set : (Vector , Int , Element) -> Void;
                make : Int -> Vector;};;
        package rw_vector_of_chars
          : api {
                Rw_Vector  = Rw_Vector;
                Element  = Element;
                get : (Rw_Vector , Int) -> Element;
                set : (Rw_Vector , Int , Element) -> Void;
                make : Int -> Rw_Vector;};;
        package vector_of_one_byte_unts
          : api {
                Vector  = Vector;
                Element  = Element;
                get : (Vector , Int) -> Element;
                set : (Vector , Int , Element) -> Void;
                make : Int -> Vector;};;
        package rw_vector_of_one_byte_unts
          : api {
                Rw_Vector  = Rw_Vector;
                Element  = Element;
                get : (Rw_Vector , Int) -> Element;
                set : (Rw_Vector , Int , Element) -> Void;
                make : Int -> Rw_Vector;};;
        package rw_vector_of_eight_byte_floats
          : api {
                Rw_Vector  = Rw_Vector;
                Element  = Element;
                get : (Rw_Vector , Int) -> Element;
                set : (Rw_Vector , Int , Element) -> Void;
                make : Int -> Rw_Vector;};;
    get_handler : Void -> fate::Fate(X );
    set_handler : fate::Fate(X ) -> Void;
    get_current_microthread_register : Void -> X;
    set_current_microthread_register : X -> Void;
    get_pseudo : Int -> X;
    set_pseudo : (X , Int) -> Void;
    unpickle_datastructure : vector_of_one_byte_unts::Vector -> X;
    pickle_datastructure : X -> vector_of_one_byte_unts::Vector;
    boxed : X -> Bool;
    cast : X -> Y;
        package p
          : api {   Pervasive_Package_Pickle_List
                      = CONS (vector_of_one_byte_unts::Vector , unsafe_chunk::Chunk , Pervasive_Package_Pickle_List) | NIL;};;
    pervasive_package_pickle_list__global : Ref(p::Pervasive_Package_Pickle_List );
    sigint_fate : Ref(fate::Fate(Void ) );
        posix_interprocess_signal_handler_refcell__global :
        Ref(((Int , Int , fate::Fate(Void )) -> fate::Fate(Void )) );};


Comments and suggestions to: bugs@mythryl.org

PreviousUpNext