cyclone/docs/API.md
2021-03-26 11:41:24 -04:00

68 KiB

cyclone-scheme

API Documentation

Standard Libraries

This section of the Cyclone API is based on the R7RS Scheme Specification:

Library Name Description
Primitives This is not actually a library but rather a summary of all of the built-in functions (AKA primitives).
scheme base The R7RS base library. This is quite extensive and will be required by most programs.
scheme case-lambda
scheme char
scheme complex
scheme cxr
scheme eval
scheme file
scheme inexact
scheme lazy
scheme load
scheme process-context
scheme read
scheme repl
scheme time
scheme write

SRFI Libraries

Cyclone supports the following Scheme Requests for Implementation (SRFI) libraries. Detailed information is available in the linked SRFI page as well as the provided Cyclone API.

Note that these libraries may be imported using either the SRFI number, such as (srfi 1), or a descriptive name: (scheme list). These descriptive names follow the recommendations from R7RS Large where available.

Library Name SRFI Number Description External Documentation
scheme list srfi 1 List library Link
cyclone and-let* srfi 2 AND-LET*: an AND with local bindings, a guarded LET* special form Link
N/A srfi 8 Binding to multiple values - Included as part of scheme base. Link
cyclone threads srfi 18 Multithreading support Link
cyclone random srfi 27 Sources of random bits Link
cyclone format srfi 28 Basic format strings Link
cyclone integer-bits srfi 60 Integers as bits Link
scheme hash-table srfi 69 Basic hash tables Link
cyclone socket srfi 106 Basic socket interface Link
scheme box srfi 111 Boxes Link
scheme set srfi 113 Sets and bags Link
scheme list-queue srfi 117 Mutable queues Link
scheme generator srfi 121 Generators Link
scheme comparator srfi 128 Comparators Link
scheme sort srfi 132 Sort libraries Link
scheme vector srfi 133 Vector library (R7RS-compatible) Link
cyclone fixnum srfi 143 Fixnums Link

Cyclone Libraries

These libraries are provided as Cyclone-specific extensions:

Library Name Description
cyclone concurrent A helper library for writing concurrent code.
cyclone foreign Provides a convenient interface for integrating with C code. It is recommended to use this library if possible rather than our lower-level FFI.
cyclone match A hygienic pattern matcher based on Alex Shinn's portable match.scm.
cyclone test A unit testing framework ported from (chibi test).
scheme cyclone pretty-print A pretty printer.

Internal Compiler API

These libraries are used by the Cyclone compiler. Some of these are stable and unlikely to change, whereas others could change as the compiler evolves.

Library Name Description
scheme cyclone ast Abstract syntax tree types used during compilation.
scheme cyclone cgen C code generation
scheme cyclone common Mostly version numbers and header comments
scheme cyclone cps-optimizations Compiler optimizations, analysis, and related transformations
scheme cyclone libraries Compiler support for R7RS libraries
scheme cyclone primitives Compiler support for primitives
scheme cyclone transforms Various Scheme-to-Scheme transformations of the intermediate code
scheme cyclone util Utility functions used internally by the compiler

C API

This documentation covers the C API provided by Cyclone Scheme. It is intended both to help understand how the Cyclone runtime works as well as to provide a useful reference manual when working with the Cyclone FFI.

Index

This section is an alphabetic listing of all the functions, objects, and macros provided by the previous libraries.


%adb:make-fnc %adb:make-var


*Cyc-version-banner* * *af-inet* *af-inet6* *af-unspec* *ai-addrconfig* *ai-all* *ai-canonname* *ai-numerichost* *ai-v4mapped* *c-file-header-comment* *defined-macros* *do-code-gen* *ipproto-ip* *ipproto-tcp* *ipproto-udp* *msg-oob* *msg-peek* *msg-waitall* *primitives* *primitives* *primitives-num-args* *shut-rd* *shut-rdwr* *shut-wr* *sock-dgram* *sock-stream* *trace-level* *version* *version-banner* *version-name* *version-number*


+


->heap -


/


<=? <= <? <


=? =


>=? >= >? >


Cyc-er-compare? Cyc-er-rename Cyc-minor-gc


abs acos adb:clear! adb:function? adb:get-db adb:get/default adb:get adb:make-fnc adb:make-var adb:set! adb:variable? adbf:set-simple! adbf:set-unused-params! adbf:simple adbf:unused-params adbv:assigned-value adbv:const-value adbv:const? adbv:defined-by adbv:global? adbv:reassigned? adbv:ref-by adbv:set-assigned-value! adbv:set-const! adbv:set-const-value! adbv:set-defined-by! adbv:set-global! adbv:set-reassigned! adbv:set-ref-by! address-family address-info alist->bag alist->hash-table alist-cons alist-copy alist-delete! alist-delete alpha-convert analyze-cps analyze-mutable-variables and-let* and angle any-bits-set? any any app->args app->fun app? append! append-map! append-map append-reverse! append-reverse append apply arithmetic-shift ash asin assoc assq-remove-key assq-remove-keys assq assv ast:%make-lambda ast:ast->pp-sexp ast:ast->sexp ast:lambda-args ast:lambda-body ast:lambda-formals->list ast:lambda-formals-type ast:lambda-id ast:lambda? ast:make-lambda ast:set-lambda-args! ast:set-lambda-body! ast:sexp->ast atan atom? atom azip


bag->alist bag->list bag->set bag-adjoin bag-adjoin! bag-any? bag-comparator bag-contains? bag-copy bag-count bag-decrement! bag-delete bag-delete! bag-delete-all bag-delete-all! bag-difference bag-difference! bag-disjoint? bag-element-comparator bag-element-count bag-empty? bag-every? bag-filter bag-filter! bag-find bag-fold bag-fold-unique bag-for-each bag-for-each-unique bag-increment! bag-intersection bag-intersection! bag-map bag-member bag-partition bag-partition! bag-product bag-product! bag-remove bag-remove! bag-replace bag-replace! bag-search! bag-size bag-sum bag-sum! bag-unfold bag-union bag-union! bag-unique-size bag-xor bag-xor! bag<=? bag<? bag=? bag>=? bag>? bag? bag basename begin->exps begin? begin bit-count bit-field bit-set? bitwise-and bitwise-if bitwise-ior bitwise-merge bitwise-not bitwise-xor boolean-hash boolean=? boolean? booleans->integer box? box break! break built-in-syms bytevector bytevector->generator bytevector-append bytevector-copy! bytevector-copy bytevector-length bytevector-u8-ref bytevector-u8-set! bytevector?


caaaar caaadr caaar caadar caaddr caadr caar cadaar cadadr cadar caddar cadddr caddr cadr call-with-current-continuation call-with-input-file call-with-output-file call-with-port call-with-socket call-with-values call/cc car car+cdr case-lambda case cdaaar cdaadr cdaar cdadar cdaddr cdadr cdar cddaar cddadr cddar cdddar cddddr cdddr cddr cdr ceiling cell->value cell-get->cell cell-get? cell? char->integer char-alphabetic? char-ci-hash char-ci<=? char-ci<? char-ci=? char-ci>=? char-ci>? char-downcase char-foldcase char-hash char-lower-case? char-numeric? char-upcase char-upper-case? char-whitespace? char<=? char<? char=? char>=? char>? char? circular-list? circular-list clear-mutables close-input-port close-output-port close-port closure->env closure->fv closure->lam closure-convert closure? command-line-arguments command-line comparator-check-type comparator-equality-predicate comparator-hash comparator-hash-function comparator-hashable? comparator-if<=> comparator-ordered? comparator-ordering-predicate comparator-register-default! comparator-test-type comparator-type-test-predicate comparator? compare-and-set! complex? concatenate! concatenate cond-expand cond condition-variable-broadcast! condition-variable-signal! condition-variable-wait! condition-variable? cons cons* const? copy-bit-field copy-bit cos count cps-convert create-environment current-error-port current-input-port current-jiffy current-output-port current-second current-test-applier current-test-comparator current-test-epsilon current-test-group-reporter current-test-group current-test-handler current-test-skipper current-test-verbosity cyc:error


default-hash default-random-source define->exp define->lambda define->var define-c? define-lambda? define-record-type define-syntax? define? delay-force delay delete delete! delete-duplicates delete-duplicates! delete-duplicates delete-file delete denominator deref difference digit-value display do dotted-list? drop-right! drop-right drop-while drop dynamic-wind


eighth emergency-exit emit* emit-newline emit emits* emits env-get->env env-get->field env-get->id env-get? env-make->fields env-make->id env-make->values env-make? env:_lookup-variable-value env:add-binding-to-frame! env:all-values env:all-variables env:define-variable! env:enclosing-environment env:extend-environment env:first-frame env:frame-values env:frame-variables env:lookup env:lookup-variable-value env:make-frame env:set-variable-value! env:the-empty-environment eof-object? eof-object eq? equal? eqv? error error eval even? every every exact-integer? exact? exact exit exp expand expand-lambda-body expt


features fifth file-exists? filter filter! filter-map filter-unused-variables filter find-tail find finite? first-set-bit first fixnum? flatten floor-quotient floor-remainder floor-remainder floor/ floor flush-output-port fold-right fold foldl foldr for-each force formals->list fourth free-vars future-call future-deref future-done? future? future fx* fx+ fx- fx-greatest fx-least fx-width fx<=? fx<? fx=? fx>=? fx>? fxabs fxand fxarithmetic-shift-left fxarithmetic-shift-right fxarithmetic-shift fxbit-count fxbit-field-reverse fxbit-field-rotate fxbit-field fxbit-set? fxcopy-bit fxeven? fxfirst-set-bit fxif fxior fxlength fxmax fxmin fxneg fxnegative? fxnot fxodd? fxpositive? fxquotient fxremainder fxsqrt fxsquare fxxor fxzero?


gappend gcd gcombine gcons* gdelete-neighbor-dups gdelete gdrop-while gdrop generator->list generator->reverse-list generator->string generator->vector! generator->vector generator-any generator-count generator-every generator-find generator-fold generator-for-each generator-unfold generator gensym get-environment-variable get-environment-variables get-macros get-output-bytevector get-output-string gfilter gindex global-vars gremove gselect gtake-while gtake guard


has-global? hash-bound hash-by-identity hash-salt hash-table->alist hash-table-copy hash-table-delete! hash-table-equivalence-function hash-table-exists? hash-table-fold hash-table-hash-function hash-table-keys hash-table-merge! hash-table-ref/default hash-table-ref hash-table-set! hash-table-size hash-table-update!/default hash-table-update! hash-table-values hash-table-walk hash-table? hash


identifier->symbol identifier=? identifier? if->condition if->else if->then if-else? if? imag-part immutable? inexact? inexact infinite? input-port-open? input-port? insert integer->char integer->list integer-length integer? interaction-environment iota ip-protocol is-mutable? isolate-globals


jiffies-per-second


lambda->exp lambda->formals lambda-formals->list lambda-formals-type lambda-num-args lambda-varargs-var lambda-varargs? lambda? last-pair last lcm length length+ length/obj let*-values let* let->args let->bindings let->bound-vars let->exp let-values let=>lambda let? let letrec* letrec->args letrec->bindings letrec->bound-vars letrec->exp letrec? letrec lib:body lib:exports lib:get-all-import-deps lib:get-all lib:get-dep-list lib:idb:ids lib:import->export-list lib:import->filename lib:import->metalist lib:import->path lib:imports->idb lib:imports lib:include-c-headers lib:includes lib:list->import-set lib:name->string lib:name->symbol lib:name lib:read-imports lib:rename-exports lib:resolve-imports lib:resolve-meta lib:result library? list->bag list->bag! list->generator list->integer list->lambda-formals list->pair list->set list->set! list->string list->vector list-copy list-copy list-delete-neighbor-dups! list-delete-neighbor-dups list-index list-index2 list-index list-insert-at! list-merge! list-merge list-prefix? list-queue-add-back! list-queue-add-front! list-queue-append! list-queue-append! list-queue-append list-queue-append list-queue-back list-queue-concatenate list-queue-concatenate list-queue-copy list-queue-empty? list-queue-first-last list-queue-for-each list-queue-front list-queue-list list-queue-map! list-queue-map list-queue-remove-all! list-queue-remove-back! list-queue-remove-front! list-queue-set-list! list-queue-unfold-right list-queue-unfold list-queue? list-queue list-ref list-set! list-sort! list-sort list-sorted? list-stable-sort! list-stable-sort list-tabulate list-tail list= list? list load log2-binary-factors log logand logbit? logcount logior lognot logtest logxor lset-adjoin lset-diff+intersection! lset-diff+intersection lset-difference! lset-difference lset-intersection! lset-intersection lset-union! lset-union lset-xor! lset-xor lset<= lset=


macro:add! macro:cleanup macro:expand macro:get-defined-macros macro:get-env macro:load-env! macro:macro? magnitude make-atom make-bytevector make-client-socket make-comparator make-condition-variable make-constructor make-coroutine-generator make-default-comparator make-eq-comparator make-equal-comparator make-eqv-comparator make-for-each-generator make-getter make-hash-table make-iota-generator make-list-comparator make-list-queue make-list make-list make-mutex make-pair-comparator make-parameter make-polar make-promise make-random-source make-range-generator make-rectangular make-server-socket make-setter make-shared-queue make-shared make-string make-thread-pool make-thread make-type-predicate make-unfold-generator make-vector make-vector-comparator mangle mangle-global map! map-in-order map mark-mutable match-lambda* match-lambda match-let* match-let match-letrec match max member memq memv message-type min modulo mta:code-gen mutex-lock! mutex-unlock! mutex?


nan? negative? newline ninth not-pair? not null-list? null? number->string number-hash number? numerator


odd? one-instance-of-new-mutable-obj? open-input-bytevector open-input-file open-input-string open-output-bytevector open-output-file open-output-string opt:contract opt:inline-prims optimize-cps or output-port-open? output-port?


pack-lambda-arguments pair->list pair-fold-right pair-fold pair-for-each pair? parameterize partition! partition peek-char port? pos-in-list positive? precompute-prim-app? pretty-print prim->c-func prim-call? prim/c-var-assign prim/cvar? prim/data-arg? prim:allocates-object?) prim:arg-count? prim:check-arg-count prim:cont/no-args? prim:cont? prim:mutates? prim? print-exception procedure? promise? proper-list?


quasiquote quote? quotient


raise-continuable raise random-integer random-real random-source-make-integers random-source-make-reals random-source-pseudo-randomize! random-source-randomize! random-source-state-ref random-source-state-set! random-source? rational? read-all read-char read-line read-string read real-part real? receive record? reduce reduce-right reduce ref? remainder remove remove! remove repl reverse! reverse-list->vector reverse-vector->generator reverse-vector->list reverse rotate-bit-field round


second set set!->exp set!->var set!? set->bag set->bag! set->list set-adjoin set-adjoin! set-any? set-box! set-car! set-cdr! set-cell!->cell set-cell!->value set-cell!? set-comparator set-contains? set-copy set-count set-delete set-delete! set-delete-all set-delete-all! set-difference set-difference! set-disjoint? set-element-comparator set-empty? set-every? set-filter set-filter! set-find set-fold set-for-each set-intersection set-intersection! set-map set-member set-partition set-partition! set-remove set-remove! set-replace set-replace! set-search! set-size set-unfold set-union set-union! set-xor set-xor! set<=? set<? set=? set>=? set>? set? setup-environment seventh share-all! shared-queue-add! shared-queue-capacity shared-queue-clear! shared-queue-empty? shared-queue-remove! shared-queue-size shared-queue-wait-count shared-queue? shared-queue shutdown-method simple-lambda? sin sixth slot-set! socket-accept socket-close socket-domain socket-input-port socket-merge-flags socket-output-port socket-purge-flags socket-recv socket-send socket-shutdown socket? span! span split-at! split-at sqrt square string->generator string->list string->number string->symbol string->utf8 string->vector string-append string-ci-hash string-ci-hash string-ci<=? string-ci<? string-ci=? string-ci>=? string-ci>? string-cmp string-copy! string-copy string-downcase string-fill! string-foldcase string-for-each string-hash string-hash string-join string-length string-map string-ref string-replace-all string-set! string-split string-upcase string<=? string<? string=? string>=? string>? string? string substring swap! symbol->string symbol-hash symbol<? symbol=? symbol? syntax-error system


tagged-list? take take! take-right take-while! take-while take tan tenth test-assert test-begin test-end test-equal test-error test-exit test-failure-count test-group-inc! test-group test-not test-propagate-info test-run test-syntax-error test-values test-vars test third thread-join! thread-name thread-pool-idling-count thread-pool-idling? thread-pool-push-task! thread-pool-release! thread-pool-size thread-pool? thread-sleep! thread-specific-set! thread-specific thread-start! thread-terminate! thread-yield! thread? trace trace:debug trace:error trace:info trace:warn truncate-quotient truncate-remainder truncate/ truncate type-slot-offset


unbox unfold-right unfold union unless unzip1 unzip2 unzip3 unzip4 unzip5 utf8->string


values vector->generator vector->list vector->string vector-any vector-append-subvectors vector-append vector-binary-search vector-concatenate vector-copy! vector-copy vector-count vector-cumulate vector-delete-neighbor-dups! vector-delete-neighbor-dups vector-empty? vector-every vector-fill! vector-fold-right vector-fold vector-for-each vector-index-right vector-index vector-length vector-map! vector-map vector-merge! vector-merge vector-partition vector-ref vector-reverse! vector-reverse-copy! vector-reverse-copy vector-set! vector-skip-right vector-skip vector-sort! vector-sort vector-sorted? vector-stable-sort! vector-stable-sort vector-swap! vector-unfold! vector-unfold-right! vector-unfold-right vector-unfold vector= vector? vector


warning when with-exception-handler with-handler with-input-from-file with-output-to-file wrap-mutables write-char write-shared write-simple write-string write


xcons


zero? zip