diff options
36 files changed, 186 insertions, 15 deletions
diff --git a/documentation/bookmark/agriculture.md b/documentation/bookmark/agriculture.md new file mode 100644 index 000000000..f0c601722 --- /dev/null +++ b/documentation/bookmark/agriculture.md @@ -0,0 +1,4 @@ +# Reference + +0. [Agrivoltaics: Opportunities for Agriculture and Energy Transition](https://agri-pv.org/en/) + diff --git a/documentation/bookmark/ambient_computing.md b/documentation/bookmark/ambient_computing.md new file mode 100644 index 000000000..94ec0e56a --- /dev/null +++ b/documentation/bookmark/ambient_computing.md @@ -0,0 +1,4 @@ +# Reference + +0. [Hidden Interfaces for Ambient Computing](https://ai.googleblog.com/2022/04/hidden-interfaces-for-ambient-computing.html) + diff --git a/documentation/bookmark/artificial_intelligence/differentiable_programming.md b/documentation/bookmark/artificial_intelligence/differentiable_programming.md index eb020fd78..69adc6a2f 100644 --- a/documentation/bookmark/artificial_intelligence/differentiable_programming.md +++ b/documentation/bookmark/artificial_intelligence/differentiable_programming.md @@ -1,3 +1,7 @@ +# Programming language + +0. [Myia](https://github.com/mila-iqia/myia) + # Reference 0. [Provably Correct, Asymptotically Efficient, Higher-Order Reverse-Mode Automatic Differentiation](https://www.cl.cam.ac.uk/~nk480/higher-order-ad.pdf) diff --git a/documentation/bookmark/business/luck/beating_the_odds.md b/documentation/bookmark/business/luck/beating_the_odds.md new file mode 100644 index 000000000..669e404c4 --- /dev/null +++ b/documentation/bookmark/business/luck/beating_the_odds.md @@ -0,0 +1,4 @@ +# Reference + +0. [No Time, No Budget, No Problem: Finishing The First Tree](https://www.youtube.com/watch?v=g5f7yixtQPc) + diff --git a/documentation/bookmark/business/model.md b/documentation/bookmark/business/model.md index 7857523b8..464b05efc 100644 --- a/documentation/bookmark/business/model.md +++ b/documentation/bookmark/business/model.md @@ -1,4 +1,5 @@ # Reference +0. [Hardware/Software Business Models](https://www.atomsandbits.io/p/hardware-software-business-models?s=r) 0. [Reciprocity as a Business Model: What motivates people to pay for services they receive?](https://briefthoughts.substack.com/p/reciprocity-as-a-business-model?s=r) diff --git a/documentation/bookmark/concurrency/synchronization.md b/documentation/bookmark/concurrency/synchronization.md new file mode 100644 index 000000000..4f31d3ccd --- /dev/null +++ b/documentation/bookmark/concurrency/synchronization.md @@ -0,0 +1,4 @@ +# Reference + +0. [17. Synchronization Without Locks](https://www.youtube.com/watch?v=5sZo3SrLrGA) + diff --git a/documentation/bookmark/cryptography.md b/documentation/bookmark/cryptography.md index 3ca80b480..888f94add 100644 --- a/documentation/bookmark/cryptography.md +++ b/documentation/bookmark/cryptography.md @@ -9,6 +9,7 @@ # Zero-knowledge proof +0. [Hardware Acceleration for Zero Knowledge Proofs](https://www.paradigm.xyz/2022/04/zk-hardware) 0. ["Rhapsody in Zero Knowledge: Proving Without Revealing" by Tony Arcieri](https://www.youtube.com/watch?v=jKSz7W5dTgY) 0. [Zero-Knowledge Proofs: What are they, how do they work, and are they fast yet?](https://zkp.science/) diff --git a/documentation/bookmark/culture/open_source.md b/documentation/bookmark/culture/open_source.md new file mode 100644 index 000000000..5c87e8300 --- /dev/null +++ b/documentation/bookmark/culture/open_source.md @@ -0,0 +1,4 @@ +# Reference + +0. [Entitlement in Open Source](https://blog.container-solutions.com/entitlement-in-open-source) + diff --git a/documentation/bookmark/database/temporal.md b/documentation/bookmark/database/temporal.md new file mode 100644 index 000000000..46c9fe131 --- /dev/null +++ b/documentation/bookmark/database/temporal.md @@ -0,0 +1,4 @@ +# Reference + +0. [Sign of the Times - Managing inhomogeneously bitemporal data with Datomic and Clojure](https://blog.podsnap.com/bitemp.html) + diff --git a/documentation/bookmark/hardware/accelerator.md b/documentation/bookmark/hardware/accelerator.md new file mode 100644 index 000000000..3a84554ef --- /dev/null +++ b/documentation/bookmark/hardware/accelerator.md @@ -0,0 +1,4 @@ +# Reference + +0. [Calyx: A Compiler Infrastructure for Accelerator Generators](https://calyxir.org/) + diff --git a/documentation/bookmark/law.md b/documentation/bookmark/law.md index d23c71951..20f99340d 100644 --- a/documentation/bookmark/law.md +++ b/documentation/bookmark/law.md @@ -1,5 +1,8 @@ # Reference +0. [Reviewers Edition](https://reviewersedition.org/) +0. [Legal Versioning: refined scheme for functional prose projects](https://writing.kemitchell.com/2022/05/28/Legal-Versioning) + 0. [Legal Versioning](https://legalversioning.com/) 0. [Catala: A Programming Language for the Law](https://arxiv.org/abs/2103.03198) - 0. [Catala](https://github.com/CatalaLang/catala) + 0. [Catala](https://github.com/CatalaLang/catala) diff --git a/documentation/bookmark/machine_learning/deep/geometric.md b/documentation/bookmark/machine_learning/deep/geometric.md new file mode 100644 index 000000000..93de8ff17 --- /dev/null +++ b/documentation/bookmark/machine_learning/deep/geometric.md @@ -0,0 +1,4 @@ +# Reference + +0. [Geometric Deep Learning](https://a-j.gitbook.io/geometric-deep-learning/) + diff --git a/documentation/bookmark/math.md b/documentation/bookmark/math.md index 364f9944b..113ec69a7 100644 --- a/documentation/bookmark/math.md +++ b/documentation/bookmark/math.md @@ -85,6 +85,10 @@ # _Compendium of resources_ +0. [How to Learn Advanced Mathematics Without Heading to University - Part 1](https://www.quantstart.com/articles/How-to-Learn-Advanced-Mathematics-Without-Heading-to-University-Part-1/) + 0. [How to Learn Advanced Mathematics Without Heading to University - Part 2](https://www.quantstart.com/articles/How-to-Learn-Advanced-Mathematics-Without-Heading-to-University-Part-2/) + 0. [How to Learn Advanced Mathematics Without Heading to University - Part 3](https://www.quantstart.com/articles/How-to-Learn-Advanced-Mathematics-Without-Heading-to-University-Part-3/) + 0. [How to Learn Advanced Mathematics Without Heading to University - Part 4](https://www.quantstart.com/articles/how-to-learn-advanced-mathematics-without-heading-to-university-part-4/) 0. [Free and Open-Source Textbooks](http://danaernst.com/resources/free-and-open-source-textbooks/) 0. [ALL IN ONE MATHEMATICS CHEAT SHEET](https://ourway.keybase.pub/mathematics_cheat_sheet.pdf) 0. https://github.com/llSourcell/learn_math_fast diff --git a/documentation/bookmark/math/geometry/geometric_algebra.md b/documentation/bookmark/math/geometry/geometric_algebra.md index b83e0c698..2de56f32f 100644 --- a/documentation/bookmark/math/geometry/geometric_algebra.md +++ b/documentation/bookmark/math/geometry/geometric_algebra.md @@ -1,5 +1,8 @@ # Reference +0. [Projective Geometric Algebra Done Right](http://terathon.com/blog/projective-geometric-algebra-done-right/) + 0. [Symmetries in Projective Geometric Algebra](http://terathon.com/blog/symmetries-in-projective-geometric-algebra/) +0. [Projective Geometric Algebra](http://projectivegeometricalgebra.org/) 0. [A Swift Introduction to Geometric Algebra](https://www.youtube.com/watch?v=60z_hpEAtD8) -0. [Addendum to A Swift Introduction to Geometric Algebra](https://www.youtube.com/watch?v=0bOiy0HVMqA) + 0. [Addendum to A Swift Introduction to Geometric Algebra](https://www.youtube.com/watch?v=0bOiy0HVMqA) diff --git a/documentation/bookmark/memory_management/garbage_collection.md b/documentation/bookmark/memory_management/garbage_collection.md new file mode 100644 index 000000000..9f938dcb1 --- /dev/null +++ b/documentation/bookmark/memory_management/garbage_collection.md @@ -0,0 +1,4 @@ +# Reference + +0. [Summarizing Garbage Collection](https://eschew.wordpress.com/2016/09/02/summarizing-gc/) + diff --git a/documentation/bookmark/optimization/algorithm.md b/documentation/bookmark/optimization/algorithm.md new file mode 100644 index 000000000..243ec7ab0 --- /dev/null +++ b/documentation/bookmark/optimization/algorithm.md @@ -0,0 +1,4 @@ +# Reference + +0. [Efficient Algorithms](https://www.ifi.uzh.ch/en/dast/teaching/EA.html) + diff --git a/documentation/bookmark/optimization/simd.md b/documentation/bookmark/optimization/simd.md index 02cef4b5f..fa90da369 100644 --- a/documentation/bookmark/optimization/simd.md +++ b/documentation/bookmark/optimization/simd.md @@ -1,4 +1,5 @@ # Reference +0. [Closing the Performance Gap Between Lisp and C](https://zenodo.org/record/6335627#.YpzmCDnMJH5) 0. [Vectorization, dependencies and outer loop vectorization: if you can’t beat them, join them](https://johnysswlab.com/vectorization-dependencies-and-outer-loop-vectorization-if-you-cant-beat-them-join-them/) diff --git a/documentation/bookmark/reversible_computing.md b/documentation/bookmark/reversible_computing.md index ce6ce34c7..dced7f151 100644 --- a/documentation/bookmark/reversible_computing.md +++ b/documentation/bookmark/reversible_computing.md @@ -1,4 +1,5 @@ # Reference +0. [Arrow: A Modern Reversible Programming Language](https://digitalcommons.oberlin.edu/cgi/viewcontent.cgi?article=1269&context=honors) 0. [Stanford Seminar - Generalized Reversible Computing and the Unconventional Computing Landscape](https://www.youtube.com/watch?v=IQZ_bQbxSXk) diff --git a/documentation/bookmark/rules_engine.md b/documentation/bookmark/rules_engine.md new file mode 100644 index 000000000..e8d9c2ebb --- /dev/null +++ b/documentation/bookmark/rules_engine.md @@ -0,0 +1,5 @@ +# Reference + +0. [Evrete](https://www.evrete.org/) +0. [OptaPlanner: Solve planning and scheduling problems with OptaPlanner](https://www.optaplanner.org/) + diff --git a/documentation/bookmark/security/auditing/bill_of_materials.md b/documentation/bookmark/security/auditing/bill_of_materials.md new file mode 100644 index 000000000..5f6ec4f4e --- /dev/null +++ b/documentation/bookmark/security/auditing/bill_of_materials.md @@ -0,0 +1,4 @@ +# Reference + +0. [Not All SBOMs Are Created Equal](https://blog.chainguard.dev/not-all-sboms-are-created-equal/) + diff --git a/documentation/bookmark/security/verification/formal.md b/documentation/bookmark/security/verification/formal.md new file mode 100644 index 000000000..ed59c673a --- /dev/null +++ b/documentation/bookmark/security/verification/formal.md @@ -0,0 +1,4 @@ +# Reference + +0. [Verifying Dynamic Trait Objects in Rust](https://www.cs.cornell.edu/~avh/dyn-trait-icse-seip-2022-preprint.pdf) + diff --git a/documentation/bookmark/software_engineering/negative.md b/documentation/bookmark/software_engineering/negative.md new file mode 100644 index 000000000..fa6581c9b --- /dev/null +++ b/documentation/bookmark/software_engineering/negative.md @@ -0,0 +1,4 @@ +# Reference + +0. [What Is Negative Engineering?](https://future.com/negative-engineering-and-the-art-of-failing-successfully/) + diff --git a/documentation/bookmark/software_engineering/practice.md b/documentation/bookmark/software_engineering/practice.md new file mode 100644 index 000000000..bedcd49f3 --- /dev/null +++ b/documentation/bookmark/software_engineering/practice.md @@ -0,0 +1,4 @@ +# Reference + +0. [Thinking of commits like code](https://www.scottantipa.com/thinking-of-commits-like-code.html) + diff --git a/documentation/bookmark/tool/language_server_protocol.md b/documentation/bookmark/tool/language_server_protocol.md new file mode 100644 index 000000000..89246ea39 --- /dev/null +++ b/documentation/bookmark/tool/language_server_protocol.md @@ -0,0 +1,4 @@ +# Reference + +0. [Why LSP?](https://matklad.github.io//2022/04/25/why-lsp.html) + diff --git a/documentation/bookmark/tool/read_eval_print_loop.md b/documentation/bookmark/tool/read_eval_print_loop.md new file mode 100644 index 000000000..6d71c3e53 --- /dev/null +++ b/documentation/bookmark/tool/read_eval_print_loop.md @@ -0,0 +1,4 @@ +# Reference + +0. [reple: "Replay-based" REPLs for compiled languages.](https://github.com/BenBrock/reple) + diff --git a/documentation/bookmark/user_interface/terminal.md b/documentation/bookmark/user_interface/terminal.md new file mode 100644 index 000000000..15a6adf32 --- /dev/null +++ b/documentation/bookmark/user_interface/terminal.md @@ -0,0 +1,4 @@ +# Reference + +0. [Textualize](https://www.textualize.io/) + diff --git a/documentation/bookmark/web-framework.md b/documentation/bookmark/web_framework.md index 71145e190..d98eb95e7 100644 --- a/documentation/bookmark/web-framework.md +++ b/documentation/bookmark/web_framework.md @@ -1,3 +1,7 @@ +# State + +0. [Jotai: Primitive and flexible state management for React](https://jotai.org/) + # Virtual DOM 0. [Virtual DOM is pure overhead](https://svelte.dev/blog/virtual-dom-is-pure-overhead) diff --git a/lux-js/source/program.lux b/lux-js/source/program.lux index f6aecd2e0..ec49efe41 100644 --- a/lux-js/source/program.lux +++ b/lux-js/source/program.lux @@ -33,7 +33,7 @@ ["[0]" world ["[0]" file] ["[1]/[0]" program]] - ["@" target + ["@" target (.only) ["_" js]] [tool [compiler @@ -55,7 +55,7 @@ ["[1]" js]]] [generation ["[0]" reference] - ["[0]" js + ["[0]" js (.only) ["[0]" runtime]]]]]] [default ["[0]" platform (.only Platform)]] diff --git a/stdlib/source/library/lux/ffi.lux b/stdlib/source/library/lux/ffi.lux index 46475ae7d..1ff34a943 100644 --- a/stdlib/source/library/lux/ffi.lux +++ b/stdlib/source/library/lux/ffi.lux @@ -1,13 +1,13 @@ (.using [library - [lux (.except Symbol Alias Global global function type_of) - ["@" target] + [lux (.except Symbol Alias Global global function type_of undefined) ["[0]" meta] [abstract [monad (.only do)]] [control ["[0]" io] ["[0]" maybe (.open: "[1]#[0]" functor)] + ["[0]" try] ["<>" parser (.open: "[1]#[0]" monad) ["<[0]>" code (.only Parser)]]] [data @@ -20,6 +20,8 @@ [syntax (.only syntax:)] ["[0]" code] ["[0]" template]] + ["@" target (.only) + ["[0]" js]] [type [primitive (.except)]]]]) @@ -334,7 +336,7 @@ {#Procedure (Named Procedure)} {#Global Global})) - (def: import + (def: importP (Parser Import) (all <>.or ..class @@ -558,7 +560,7 @@ (virtual_method_definition class alias namespace (the #member it)))) (syntax: .public (import [host_module (<>.maybe <code>.text) - it ..import]) + it ..importP]) (let [host_module_import! (is (List Code) (case host_module {.#Some host_module} @@ -670,6 +672,77 @@ (as Text) (text#= "[object process]"))) (maybe.else false))) - ) + + ... These extensions must be defined this way because importing any of the modules + ... normally used when writing extensions would introduce a circular dependency + ... because the Archive type depends on Binary, and that module depends on this ffi module. + (syntax: (extension_name []) + (do meta.monad + [module meta.current_module_name + unique_id meta.seed] + (in (list (code.text (%.format module " " (%.nat unique_id))))))) + + (with_expansions [<undefined> (..extension_name) + <undefined?> (..extension_name)] + (these (template: (extension_call <name> <parameter>) + [{5 #1 [<name> <parameter>]}]) + + (template: (analysis <name> <bindings> <parser> <inputs> <body>) + [("lux def analysis" <name> + (.function (_ name phase archive inputs) + (.function (_ state) + (let [<bindings> [name phase archive state]] + (case (<code>.result <parser> inputs) + {try.#Failure error} + {try.#Failure (%.format "Invalid inputs for extension: " (%.text name) + text.\n error)} + + {try.#Success <inputs>} + <body>)))))]) + + (template: (generation <name> <bindings> <inputs> <body>) + [("lux def generation" <name> + (.function (_ name phase archive inputs) + (.function (_ state) + (let [<bindings> [name phase archive state]] + (`` (case inputs + (pattern (list (~~ (template.spliced <inputs>)))) + <body> + + _ + {try.#Failure (%.format "Invalid inputs for extension: " (%.text name))}))))))]) + + (analysis <undefined> + [name phase archive state] + <code>.end + _ + {try.#Success [state (extension_call name (list))]}) + + (generation <undefined> + [name phase archive state] + [] + {try.#Success [state js.undefined]}) + + (template: .public (undefined) + [(.is .Any (<undefined>))]) + + (analysis <undefined?> + [name phase archive state] + <code>.any + it + (do try.monad + [[state it] (phase archive it state)] + (in [state (extension_call name (list it))]))) + + (generation <undefined?> + [name phase archive state] + [it] + (do try.monad + [[state it] (phase archive it state)] + (in [state (js.= js.undefined it)]))) + + (template: .public (undefined? <it>) + [(.as .Bit (.is .Any (<undefined?> (.is .Any <it>))))]) + ))) (these)) ) diff --git a/stdlib/source/library/lux/ffi.old.lux b/stdlib/source/library/lux/ffi.old.lux index 1d2603f79..951d58f18 100644 --- a/stdlib/source/library/lux/ffi.old.lux +++ b/stdlib/source/library/lux/ffi.old.lux @@ -10,7 +10,7 @@ ["[0]" io] ["[0]" maybe] ["[0]" try (.only Try)] - ["<>" parser + ["<>" parser (.only) ["<[0]>" code (.only Parser)]]] [data ["[0]" product] diff --git a/stdlib/source/library/lux/tool/compiler/default/init.lux b/stdlib/source/library/lux/tool/compiler/default/init.lux index 6ddca02cf..c253743dd 100644 --- a/stdlib/source/library/lux/tool/compiler/default/init.lux +++ b/stdlib/source/library/lux/tool/compiler/default/init.lux @@ -49,7 +49,7 @@ [meta ["[0]" archive (.only Archive) ["[0]" registry (.only Registry)] - ["[0]" module + ["[0]" module (.only) ["[0]" descriptor] ["[0]" document]]]]]]) diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/js.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/js.lux index 02540a965..fa1cabf00 100644 --- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/js.lux +++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/js.lux @@ -20,7 +20,7 @@ ["/[1]" // ["[1][0]" reference] ["/[1]" // - ["[1][0]" extension + ["[1][0]" extension (.only) [generation [js ["[1]/[0]" common]]]] diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/js/runtime.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/js/runtime.lux index 532f3c826..c8f77a38e 100644 --- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/js/runtime.lux +++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/js/runtime.lux @@ -1,6 +1,6 @@ (.using [library - [lux (.except i64) + [lux (.except i64 left right) ["[0]" meta] [abstract ["[0]" monad (.only do)]] diff --git a/stdlib/source/library/lux/world/file.lux b/stdlib/source/library/lux/world/file.lux index cfbc7ce2c..e88322775 100644 --- a/stdlib/source/library/lux/world/file.lux +++ b/stdlib/source/library/lux/world/file.lux @@ -24,7 +24,7 @@ ["[0]" array (.only Array)] ["[0]" list (.open: "[1]#[0]" functor)] ["[0]" dictionary (.only Dictionary)]]] - ["[0]" ffi + ["[0]" ffi (.only) (~~ (.for "JavaScript" (~~ (.these ["[0]" node_js])) "{old}" (~~ (.these ["node_js" //control/thread])) (~~ (.these))))] diff --git a/stdlib/source/program/compositor.lux b/stdlib/source/program/compositor.lux index 986e1f161..cd6a49dbb 100644 --- a/stdlib/source/program/compositor.lux +++ b/stdlib/source/program/compositor.lux @@ -36,7 +36,7 @@ ["[0]" syntax] ["[0]" generation] ["[0]" directive] - ["[0]" analysis + ["[0]" analysis (.only) [macro (.only Expander)]] [phase [extension (.only Extender)]]]] diff --git a/stdlib/source/test/lux/ffi.js.lux b/stdlib/source/test/lux/ffi.js.lux index fa58458ae..6fe42ec08 100644 --- a/stdlib/source/test/lux/ffi.js.lux +++ b/stdlib/source/test/lux/ffi.js.lux @@ -143,6 +143,9 @@ (|> (TextDecoder::new encoding) (TextDecoder::decode binary))) )))) + (_.coverage [/.undefined /.undefined?] + (and (not (/.undefined? number)) + (/.undefined? (/.undefined)))) $/export.test ))))) |