aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEduardo Julian2019-07-24 20:25:55 -0400
committerEduardo Julian2019-07-24 20:25:55 -0400
commite87fba1b7204ee611dcb5528b8a8a3716588c976 (patch)
tree77420205b2617c189a26af573b341771bf361b59
parentedcc0a2433722d09e7b1ef7922e7fa1f51e7fc15 (diff)
Small improvements here and there.
-rw-r--r--documentation/research/Internet of Things (IoT).md22
-rw-r--r--documentation/research/Optics (eg lenses & prisms).md22
-rw-r--r--documentation/research/Optimization.md24
-rw-r--r--documentation/research/Probabilistic data-structure.md31
-rw-r--r--documentation/research/Security.md54
-rw-r--r--documentation/research/Software Reliability Engineering (SRE).md4
-rw-r--r--documentation/research/Type theory/Dependent types.md38
-rw-r--r--documentation/research/back-end/WebAssembly (WASM).md30
-rw-r--r--documentation/research/cryptography.md56
-rw-r--r--documentation/research/distributed_programming.md1
-rw-r--r--documentation/research/game_programming.md13
-rw-r--r--documentation/research/machine_learning.md1
-rw-r--r--documentation/research/math.md8
-rw-r--r--documentation/research/web_framework.md1
-rw-r--r--stdlib/source/lux/abstract/hash.lux13
-rw-r--r--stdlib/source/lux/control/parser/binary.lux45
-rw-r--r--stdlib/source/lux/data/format/binary.lux4
-rw-r--r--stdlib/source/lux/data/maybe.lux8
-rw-r--r--stdlib/source/lux/data/number/frac.lux8
-rw-r--r--stdlib/source/lux/data/text.lux18
-rw-r--r--stdlib/source/lux/math/random.lux8
-rw-r--r--stdlib/source/lux/world/input/keyboard.lux145
-rw-r--r--stdlib/source/test/lux/data/number/frac.lux5
23 files changed, 447 insertions, 112 deletions
diff --git a/documentation/research/Internet of Things (IoT).md b/documentation/research/Internet of Things (IoT).md
new file mode 100644
index 000000000..9d147ee43
--- /dev/null
+++ b/documentation/research/Internet of Things (IoT).md
@@ -0,0 +1,22 @@
+# Device
+
+1. https://www.pine64.org/
+1. http://beagleboard.org/
+
+# Language
+
+1. [A Programming Language for the Internet of Things](https://www.duo.uio.no/bitstream/handle/10852/56894/Thesis.pdf)
+1. http://www.eclipse.org/mita/
+
+# Protocol
+
+1. http://coap.technology/
+1. https://medium.com/@patburns/a-new-way-to-think-about-the-p2p-iot-5fde27e96833
+1. https://plc4x.apache.org/
+1. [OpenThread](https://openthread.io/)
+1. [Thread](https://www.threadgroup.org/)
+
+# Security
+
+1. https://www.theregister.co.uk/2019/03/13/congress_iot_security/
+
diff --git a/documentation/research/Optics (eg lenses & prisms).md b/documentation/research/Optics (eg lenses & prisms).md
new file mode 100644
index 000000000..62667bbfc
--- /dev/null
+++ b/documentation/research/Optics (eg lenses & prisms).md
@@ -0,0 +1,22 @@
+# Reference
+
+1. https://medium.com/urbint-engineering/haskell-lens-operator-onboarding-a235481e8fac
+1. https://fstarlang.github.io/general/2018/01/12/lens-indexed-lenses.html
+1. [Jeremy Gibbons - Profunctor Optics Modular Data Accessors](https://www.youtube.com/watch?v=sfWzUMViP0M &&& http://www.cs.ox.ac.uk/people/jeremy.gibbons/publications/poptics.pdf)
+1. http://hackage.haskell.org/package/profunctors-3.3.0.1/docs/Data-Profunctor.html
+1. https://github.com/purescript-contrib/purescript-profunctor-lenses
+1. https://hackage.haskell.org/package/lens-4.16/docs/Control-Lens-Indexed.html
+1. http://oleg.fi/gists/posts/2017-04-18-glassery.html
+1. http://oleg.fi/gists/posts/2017-12-23-functor-optics.html
+1. [Edward Kmett - Monad Transformer Lenses](https://www.youtube.com/watch?v=Bxcz23GOJqc)
+1. [Brian McKenna - Productionisation of Functional Optics](https://www.youtube.com/watch?v=H01dw-BMmlE)
+1. [YOW! Lambda Jam 2017 Ken Scambler - Lenses for the Masses – Introducing Goggles](https://www.youtube.com/watch?v=oIhdOqaKSEg)
+1. https://bartoszmilewski.com/2017/07/07/profunctor-optics-the-categorical-view/
+1. [Profunctor Optics: The Categorical Approach - Bartosz Milewski](https://www.youtube.com/watch?v=l1FCXUi6Vlw)
+1. https://calmm-js.github.io/partial.lenses/
+1. http://evincarofautumn.blogspot.com/2016/01/thoughts-on-using-fractional-types-to.html
+1. https://www.slideshare.net/davidoverton/comonad
+1. http://codingismycraft.com/index.php/2017/10/04/adding-descriptors-to-your-python-arsenal/
+1. https://blog.jle.im/entry/lenses-products-prisms-sums.html
+1. http://www.philipzucker.com/lens-as-a-divisibility-relation-goofin-off-with-the-algebra-of-types/
+
diff --git a/documentation/research/Optimization.md b/documentation/research/Optimization.md
new file mode 100644
index 000000000..f46215cdd
--- /dev/null
+++ b/documentation/research/Optimization.md
@@ -0,0 +1,24 @@
+# Reference
+
+1. https://docs.google.com/presentation/d/1tpeJZFObkeick4CF-mx0L3CeCgvT15B96aJeRpxEPcE/preview?slide=id.p
+1. https://www.quora.com/What-is-the-future-of-optimizing-compilers?share=1
+1. https://advancedweb.hu/2016/05/27/jvm_jit_optimization_techniques/ &&& https://advancedweb.hu/2016/06/28/jvm_jit_optimization_techniques_part_2/
+1. http://www.scala-native.org/en/latest/blog/interflow.html
+1. https://github.com/roman01la/closure-compiler-handbook
+1. http://hubicka.blogspot.com/2018/06/gcc-8-link-time-and-interprocedural.html
+1. [CppCon 2017: Matt Godbolt “What Has My Compiler Done for Me Lately? Unbolting the Compiler's Lid”](https://www.youtube.com/watch?v=bSkpMdDe4g4)
+1. http://duriansoftware.com/joe/Optimizing-is-multiple-checks-with-modular-arithmetic.html?
+1. https://www.ericsson.com/research-blog/outperforming-state-art-compilers-unison/
+1. http://compileroptimizations.com/index.html
+1. https://polly.llvm.org/
+1. http://paulcavallaro.com/blog/optimizing-function-placement-with-call-chain-clustering/
+1. http://leto.net/docs/C-optimization.php
+1. https://engineering.purdue.edu/~eigenman/ECE663/Handouts/bacon-compiling4hpc.pdf
+1. http://venge.net/graydon/talks/CompilerTalk-2019.pdf
+1. http://www2.imm.dtu.dk/pubdb/views/edoc_download.php/6620/pdf/imm6620.pdf
+1. [Lost in translation: Exposing hidden compiler optimization opportunities](https://arxiv.org/pdf/1903.11397.pdf)
+1. https://kristerw.blogspot.com/2019/04/how-llvm-optimizes-geometric-sums.html
+1. https://nfrechette.github.io/2019/05/08/sign_flip_optimization/
+1. https://grin-tech.github.io/
+1. [Loop Optimizations in LLVM - Michael Kruse](https://www.youtube.com/watch?v=oAPgGYr8T3Y)
+
diff --git a/documentation/research/Probabilistic data-structure.md b/documentation/research/Probabilistic data-structure.md
new file mode 100644
index 000000000..2b4609c0e
--- /dev/null
+++ b/documentation/research/Probabilistic data-structure.md
@@ -0,0 +1,31 @@
+# Hash function
+
+1. http://fastcompression.blogspot.com/2019/03/presenting-xxh3.html
+1. http://cyan4973.github.io/xxHash/
+
+# Reference
+
+1. [Morton Filters: Faster, Space-Efficient Cuckoo Filters via Biasing, Compression, and Decoupled Logical Sparsity](http://www.vldb.org/pvldb/vol11/p1041-breslow.pdf)
+1. https://github.com/efficient/SuRF
+1. https://medium.com/orbs-network/constructing-bloom-filters-without-false-positives-7aaf50b92f3b
+1. https://welcometotheoryland.wordpress.com/2017/10/19/what-is-a-hash-function-it-depends-on-whos-speaking/
+1. http://docs.pipelinedb.com/probabilistic.html
+1. [Probabilistic Data Structures](https://www.youtube.com/watch?v=F7EhDBfsTA8)
+1. http://www.i-programmer.info/programming/theory/4641-the-invertible-bloom-filter.html
+1. https://github.com/seiflotfy/hyperbitbit
+1. https://blog.yld.io/2017/04/19/hyperloglog-a-probabilistic-data-structure/#.WPtT_R_6zCI
+1. http://www.partow.net/programming/bloomfilter/idx.html
+1. https://github.com/pawandubey/cuckoo_filter
+1. https://cloud.google.com/blog/big-data/2017/07/counting-uniques-faster-in-bigquery-with-hyperloglog
+1. https://blog.dataweave.com/using-probabilistic-data-structures-to-build-real-time-monitoring-dashboards-25b17c968c08
+1. https://bdupras.github.io/filter-tutorial/
+1. https://sagi.io/2017/07/bloom-filters-for-the-perplexed/
+1. https://www.somethingsimilar.com/2012/05/21/the-opposite-of-a-bloom-filter/
+1. https://github.com/splatlab/cqf
+1. [LogLog-Beta and More: A New Algorithm for Cardinality Estimation Based on LogLog Counting](https://arxiv.org/ftp/arxiv/papers/1612/1612.02284.pdf)
+1. https://blog.acolyer.org/2017/08/08/a-general-purpose-counting-filter-making-every-bit-count/
+1. [Ode on a Random Urn (Functional Pearl)](https://www.youtube.com/watch?v=O37FMxLxm78)
+1. http://smalldatum.blogspot.com/2018/09/bloom-filter-and-cuckoo-filter.html
+1. https://hackernoon.com/cuckoo-filter-vs-bloom-filter-from-a-gophers-perspective-94d5e6c53299
+1. https://github.com/axiomhq/hyperminhash
+
diff --git a/documentation/research/Security.md b/documentation/research/Security.md
new file mode 100644
index 000000000..0609f92c0
--- /dev/null
+++ b/documentation/research/Security.md
@@ -0,0 +1,54 @@
+# Programming language
+
+1. [Secure Compilation](https://blog.sigplan.org/2019/07/01/secure-compilation/)
+
+# Cautionary tale
+
+1. [Thou Shalt Not Depend on Me: A look at JavaScript libraries in the wild](https://queue.acm.org/detail.cfm?id=3205288)
+1. https://medium.com/@nodepractices/were-under-attack-23-node-js-security-best-practices-e33c146cb87d
+
+# Surface area
+
+1. [Towards Automated Application-Specific Software Stacks](https://arxiv.org/pdf/1907.01933.pdf)
+
+# Vulnerability
+
+1. https://medium.com/@shnatsel/how-rusts-standard-library-was-vulnerable-for-years-and-nobody-noticed-aebf0503c3d6
+1. [ACLs don’t](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.406.4684&rep=rep1&type=pdf)
+1. https://www.cs.auckland.ac.nz/~pgut001/pubs/book.pdf
+1. https://pwnedkeys.com/
+1. [What Spectre Means for Lanugage Implementers - Ben Titzer - PLISS 2019](https://www.youtube.com/watch?v=FGX-KD5Nh2g)
+1. https://rambleed.com/
+1. https://browserleaks.com/
+
+# Reference
+
+1. [Secure Socket API](https://securesocketapi.org/)
+1. [Mind your Language(s): A discussion about languages and security](https://www.ssi.gouv.fr/uploads/IMG/pdf/Mind_Your_Languages_-_version_longue.pdf)
+1. https://www.microsoft.com/en-us/research/blog/scaling-the-everest-of-software-security-with-dr-jonathan-protzenko/
+1. https://www.owasp.org/index.php/Main_Page
+1. https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project
+1. https://wiki.sei.cmu.edu/confluence/display/seccode/Top+10+Secure+Coding+Practices
+1. https://www.archive.ece.cmu.edu/~grey/
+1. http://www.cs.umd.edu/projects/PL/selinks/
+1. http://www.cis.upenn.edu/~stevez/sol/related.html
+1. https://www.bsimm.com/
+1. https://www.microsoft.com/en-us/securityengineering/sdl/
+1. https://www.engineeringtrustworthysystems.com/
+1. http://www.ats-lang.org/
+1. http://www.cis.upenn.edu/~stevez/papers/publications.html
+1. http://collingreene.com/6_buckets_of_prodsec.html
+1. [On Post-Compromise Security](https://eprint.iacr.org/2016/221.pdf)
+1. https://messaginglayersecurity.rocks/
+1. https://github.blog/2019-05-23-introducing-new-ways-to-keep-your-code-secure/
+1. [RustBelt](https://plv.mpi-sws.org/rustbelt/popl18/)
+1. https://github.com/dckc/awesome-ocap
+1. https://projects.csail.mit.edu/jeeves/
+1. https://www.sans.org/top25-software-errors/
+1. https://www.owasp.org/index.php/Top_10_2013-Top_10
+1. https://nvd.nist.gov/cwe.cfm
+1. https://en.wikipedia.org/wiki/Software_Development_Security
+1. http://gigi.nullneuron.net/gigilabs/the-sorry-state-of-the-web-in-2016/
+1. http://www.ranum.com/security/computer_security/editorials/dumb/index.html
+1. [Information Technology — Programming languages — Guidance to avoiding vulnerabilities in programming languages](http://www.open-std.org/jtc1/sc22/wg23/docs/ISO-IECJTC1-SC22-WG23_N0751-tr24772-1-after-pre-meeting-51-webex-20171016.pdf)
+
diff --git a/documentation/research/Software Reliability Engineering (SRE).md b/documentation/research/Software Reliability Engineering (SRE).md
new file mode 100644
index 000000000..bd6a8443b
--- /dev/null
+++ b/documentation/research/Software Reliability Engineering (SRE).md
@@ -0,0 +1,4 @@
+# Reference
+
+1. [A Case Study in Community-Driven Software Adoption](http://landing.google.com/sre/resources/practicesandprocesses/case-study-community-driven-software-adoption/)
+
diff --git a/documentation/research/Type theory/Dependent types.md b/documentation/research/Type theory/Dependent types.md
new file mode 100644
index 000000000..f8849fcd1
--- /dev/null
+++ b/documentation/research/Type theory/Dependent types.md
@@ -0,0 +1,38 @@
+# Exemplar
+
+1. https://cedille.github.io/
+
+# Reference
+
+1. [F# Linear algebra with type-level dimensions and static checks](https://notebooks.azure.com/allisterb/projects/sylvester/html/Sylvester.Tensors.ipynb)
+1. [From Scheme to Dependent Types in 100 lines by Gershom Bazerman](https://vimeo.com/134561872 &&& https://vimeo.com/135746080)
+1. [A Tutorial Implementation of a Dependently Typed Lambda Calculus](https://www.andres-loeh.de/LambdaPi/)
+1. [The calculus of constructions](http://www.sciencedirect.com/science/article/pii/0890540188900053#)
+1. https://www.idris-lang.org/
+1. https://www.amazon.com/Type-driven-Development-Idris-Edwin-Brady/dp/1617293024/
+1. http://blog.codersbase.com/posts/2013-12-03-learning-dependent-types.html
+1. http://oxij.org/note/BrutalDepTypes/
+1. https://hydraz.club/posts/2017-09-08.html
+1. [Hoare Type Theory, Polymorphism and Separation](http://ynot.cs.harvard.edu/papers/jfpsep07.pdf)
+1. ["Dependent Types in Haskell" by Stephanie Weirich](https://www.youtube.com/watch?v=wNa3MMbhwS4)
+1. [A Little Bit of Dependent Types](https://youtu.be/WI8uA4KjQJk?t=5169)
+1. [Type Checking Without Types](https://matthias.benkard.de/typecore/typecore.pdf)
+1. [Cubical Type Theory: a constructive interpretation of the univalence axiom](http://www.cse.chalmers.se/~coquand/cubicaltt.pdf)
+1. https://github.com/mortberg/cubicaltt
+1. https://leanprover.github.io/introduction_to_lean/
+1. [Infinity](https://github.com/groupoid/infinity)
+1. https://github.com/groupoid
+1. http://groupoid.space/
+1. https://existentialtype.wordpress.com/2016/07/31/cubical-higher-type-theory-as-a-programming-language/
+1. https://github.com/silt-lang/silt
+1. [Parametric Quantifiers for Dependent Type Theory](https://people.cs.kuleuven.be/~andreas.nuyts/ParametricQuantifiers.pdf &&& https://www.youtube.com/watch?v=lJB5MhYJ4Js)
+1. [A Specification for Dependently-Typed Haskell:](http://www.seas.upenn.edu/~sweirich/papers/systemd-submission.pdf)
+1. [A Specification for Dependent Types in Haskell](http://www.seas.upenn.edu/~sweirich/papers/systemd-submission.pdf &&& https://cs.brynmawr.edu/~rae/papers/2017/dep-haskell-spec/dep-haskell-spec.pdf &&& https://www.youtube.com/watch?v=0157rUxC4_8)
+1. [Normalization by Evaluation for Sized Dependent Types](http://publications.lib.chalmers.se/records/fulltext/252072/local_252072.pdf &&& https://www.youtube.com/watch?v=uSP91COE_ZA)
+1. https://bluishcoder.co.nz/2018/01/03/writing-basic-proofs-in-ats.html
+1. [AN INTRODUCTION TO UNIVALENT FOUNDATIONS FOR MATHEMATICIANS](http://www.ams.org/journals/bull/2018-55-04/S0273-0979-2018-01616-9/S0273-0979-2018-01616-9.pdf)
+1. https://medium.com/@maiavictor/about-induction-on-the-calculus-of-constructions-581fcfdb89c5
+1. [05 A Dependent Haskell Triptych](https://www.youtube.com/watch?v=soKl1IslU-I)
+1. https://cs.ru.nl/~wouters/Publications/ThePowerOfPi.pdf
+1. [Algebraic Presentations of Dependent Type Theories](https://arxiv.org/abs/1602.08504v3)
+
diff --git a/documentation/research/back-end/WebAssembly (WASM).md b/documentation/research/back-end/WebAssembly (WASM).md
new file mode 100644
index 000000000..6d9368fbe
--- /dev/null
+++ b/documentation/research/back-end/WebAssembly (WASM).md
@@ -0,0 +1,30 @@
+# Exemplar
+
+1. https://github.com/vvanders/wasm_lua
+1. https://github.com/AppCypher/webassemblylanguages
+1. https://medium.com/perlin-network/life-a-secure-blazing-fast-cross-platform-webassembly-vm-in-go-ea3b31fa6e09
+
+# Reference
+
+1. [Faster Fractals with Multi-Threaded WebAssembly](https://blog.scottlogic.com/2019/07/15/multithreaded-webassembly.html)
+1. https://blog.scottlogic.com/2018/07/20/wasm-future.html
+1. http://fitzgeraldnick.com/2018/04/26/how-does-dynamic-dispatch-work-in-wasm.html
+1. https://hacks.mozilla.org/2018/03/making-webassembly-better-for-rust-for-all-languages/
+1. https://webassembly.github.io/
+1. https://github.com/WebAssembly/spec/blob/md-proto/md-proto/WebAssembly.md
+1. https://github.com/WebAssembly/binaryen
+1. [NYLUG Presents: Luke Wagner -on- WebAssembly: A New Compiler Target For The Web](https://www.youtube.com/watch?v=RByPdCN1RQ4)
+1. https://binji.github.io/2017/03/05/webassembly-type-checking.html
+1. https://github.com/WebAssembly/spec/tree/master/interpreter
+1. https://mbebenita.github.io//WasmExplorer/
+1. http://thecodebarbarian.com/getting-started-with-webassembly-in-node.js.html
+1. http://blog.seraum.com/compiling-javascript-to-webassembly-wasm-or-asm-js-with-nectarjs
+1. https://hacks.mozilla.org/2017/07/memory-in-webassembly-and-why-its-safer-than-you-think/
+1. [Using WebAssembly and Threads (Chrome Dev Summit 2018)](https://www.youtube.com/watch?v=zgOGZgAPUjQ)
+1. https://github.com/wasmerio/wasmer
+1. https://www.fastly.com/blog/announcing-lucet-fastly-native-webassembly-compiler-runtime
+1. https://hacks.mozilla.org/2019/03/standardizing-wasi-a-webassembly-system-interface/
+1. https://cybernetist.com/2019/04/25/wasm-universal-application-runtime/
+1. https://github.com/intel/wasm-micro-runtime
+1. https://medium.com/wasmer/running-webassembly-on-the-kernel-8e04761f1d8e
+
diff --git a/documentation/research/cryptography.md b/documentation/research/cryptography.md
new file mode 100644
index 000000000..8176bbcf7
--- /dev/null
+++ b/documentation/research/cryptography.md
@@ -0,0 +1,56 @@
+# Constant-time programming
+
+1. [FaCT: A Flexible, Constant-Time Programming Language](https://cseweb.ucsd.edu/~dstefan/pubs/cauligi:2017:fact.pdf)
+1. [FaCT: A DSL for Timing-Sensitive Computation](https://ranjitjhala.github.io/static/fact_dsl.pdf)
+1. ["FaCT: A New Language for Constant-Time Programming" by Sunjay Cauligi](https://www.youtube.com/watch?v=kbn9UCRK2Qg)
+
+# Zero-knowledge proof
+
+1. [Zero-Knowledge Proofs: What are they, how do they work, and are they fast yet?](https://zkp.science/)
+
+# Hash
+
+1. [On future-proof cryptographic hashes](https://pascalprecht.github.io/posts/future-proofed-hashes-with-multihash/)
+
+# Library
+
+1. [zinc: Introduce minimal cryptography library](https://git.kernel.org/pub/scm/linux/kernel/git/zx2c4/linux.git/commit/?h=zinc)
+1. https://joshlf.com/post/2018/11/06/introducing-mundane/
+1. https://github.com/akhawaja/ecc-crypto-helper
+1. [Introducing CIRCL: An Advanced Cryptographic Library](https://blog.cloudflare.com/introducing-circl/)
+
+# Criticism
+
+1. [Fuck RSA](https://blog.trailofbits.com/2019/07/08/fuck-rsa/)
+
+# Reference
+
+1. [Sunjay Cauligi - Constant-time crypto programming with FaCT](https://www.youtube.com/watch?v=SSEHF_u79e4)
+1. https://blog.acolyer.org/2018/07/06/oblix-an-efficient-oblivious-search-index/
+1. https://cryptography.pizza/
+1. [HACL∗: A Verified Modern Cryptographic Library](https://eprint.iacr.org/2017/536.pdf)
+1. [How to Use Java Cryptography API Securely](https://www.youtube.com/watch?v=3HIdaSgxMlo)
+1. [A Graduate Course in Applied Cryptography](http://toc.cryptotextbook.net/home)
+1. https://github.com/InstantWebP2P/tweetnacl-java
+1. https://github.com/kevinburke/nacl
+1. https://github.com/miracl/MIRACL
+1. https://github.com/open-quantum-safe/liboqs
+1. https://www.bearssl.org/bigint.html
+1. https://timtaubert.de/blog/2018/08/bitslicing-an-introduction/
+1. [CT-Wasm: Type-Driven Secure Cryptography for the Web Ecosystem](https://arxiv.org/abs/1808.01348)
+1. https://arstechnica.com/information-technology/2013/10/a-relatively-easy-to-understand-primer-on-elliptic-curve-cryptography/
+1. https://medium.com/@dbkats/a-gentle-introduction-to-attribute-based-encryption-edca31744ac6
+1. https://cryptoswift.io/
+
+# Language
+
+1. https://cryptol.net/
+1. [Formally Verified Cryptographic Web Applicationsin WebAssembly](https://eprint.iacr.org/2019/542.pdf)
+
+# Randomness extractor
+
+1. [An introduction to randomness extractors](https://cs.haifa.ac.il/~ronen/online_papers/ICALPinvited.pdf)
+
+# Homomorphic Encryption
+
+1. [Practical Homomorphic Encryption Over the Integers](https://arxiv.org/abs/1702.07588)
diff --git a/documentation/research/distributed_programming.md b/documentation/research/distributed_programming.md
index ae96c46e3..018357958 100644
--- a/documentation/research/distributed_programming.md
+++ b/documentation/research/distributed_programming.md
@@ -66,6 +66,7 @@
# Logical clock
+1. [Distributed Systems: Physical, Logical, and Vector Clocks](https://levelup.gitconnected.com/distributed-systems-physical-logical-and-vector-clocks-7ca989f5f780)
1. [The Bloom Clock](https://arxiv.org/pdf/1905.13064.pdf)
1. [Why Logical Clocks are Easy: Sometimes all you need is the right language.](https://queue.acm.org/detail.cfm?id=2917756)
diff --git a/documentation/research/game_programming.md b/documentation/research/game_programming.md
index de74e10f2..3ff01be0a 100644
--- a/documentation/research/game_programming.md
+++ b/documentation/research/game_programming.md
@@ -1,3 +1,14 @@
+# Ethics
+
+1. [Ethics in Game Design - PAX Prime 2012](https://www.youtube.com/watch?v=sIS5cJzeLGA)
+
+# Grinding
+
+1. [When Games Idolize Busywork](https://medium.com/@fischerdesign/when-games-idolize-busywork-8454bfe769ff)
+1. [PAX West 2016 - The Grind - Full Panel](https://www.youtube.com/watch?v=32DCEzpcVEY)
+1. [A Brief History of Leveling Systems](https://theludite.com/2014/08/03/a-brief-history-of-leveling-systems/)
+1. [Leveling Systems Part Two: Where We Could Go From Here](https://theludite.com/2014/08/28/leveling-systems-part-two-where-we-could-go-from-here/)
+
# Engine
1. https://www.raylib.com/index.html
@@ -48,6 +59,8 @@
# Rendering
+1. [Lazy Incremental Computation for Efficient Scene Graph Rendering](https://www.cg.tuwien.ac.at/courses/RendEng/2015/RendEng-2015-11-16-paper2.pdf)
+1. [3D Wireframes in SVG](https://prideout.net/blog/svg_wireframes/)
1. https://zzz.dog/
1. https://www.marmoset.co/posts/basic-theory-of-physically-based-rendering/
1. https://roughjs.com/
diff --git a/documentation/research/machine_learning.md b/documentation/research/machine_learning.md
index 018c259c2..04df5bbc1 100644
--- a/documentation/research/machine_learning.md
+++ b/documentation/research/machine_learning.md
@@ -6,6 +6,7 @@
# Reference
+1. [Layer rotation: a surprisingly powerful indicator of generalization in deep networks](https://arxiv.org/abs/1806.01603v2)
1. https://nostalgebraist.tumblr.com/post/185326092369/the-transformer-explained
1. [HyperE: Hyperbolic Embeddings for Entities](https://hazyresearch.github.io/hyperE/)
1. https://www.samcoope.com/posts/playing_around_with_noise_as_targets
diff --git a/documentation/research/math.md b/documentation/research/math.md
index 89f1cdd39..5c8db787c 100644
--- a/documentation/research/math.md
+++ b/documentation/research/math.md
@@ -1,3 +1,7 @@
+# Trigonometry
+
+1. [Approximating the Sine Function](http://datagenetics.com/blog/july12019/index.html)
+
# Period
1. https://en.wikipedia.org/wiki/Ring_of_periods
@@ -39,6 +43,7 @@
# Quaternions
+1. [Stepping into a New Dimension: Using Quaternions to See the Invisible](https://medium.com/@vieyrasoftware/stepping-into-a-new-dimension-using-quaternions-to-see-the-invisible-478087c9ebbf)
1. [How Quaternions Produce 3D Rotation](https://penguinmaths.blogspot.com/2019/06/how-quaternions-produce-3d-rotation.html)
1. [APPLICATION OF DUAL QUATERNIONS ON SELECTED PROBLEMS](https://otik.uk.zcu.cz/bitstream/11025/28563/1/phd_Application%20of%20dual%20quaternions%20on%20selected%20problems.pdf)
1. https://www.3dgep.com/understanding-quaternions/
@@ -108,6 +113,7 @@
# Category Theory
+1. [Categorical Query Language](https://www.categoricaldata.net/)
1. [Abstract and Concrete Categories: The Joy of Cats](http://katmat.math.uni-bremen.de/acc/acc.pdf)
1. https://bartoszmilewski.com/
1. [YOW! Lambda Jam 2018 - Mark Hopkins -All of Basic Category Theory](https://www.youtube.com/watch?v=9u1q3lH7VbE)
@@ -279,6 +285,8 @@
# **Temp Cache**
+1. [Quadratic splines are useful too](https://wordsandbuttons.online/quadric_splines_are_useful_too.html)
+1. [Derivations of Applied Mathematics](http://www.derivations.org/)
1. https://www.juliahomotopycontinuation.org/
1. https://marginalrevolution.com/marginalrevolution/2018/05/one-parameter-equation-can-exactly-fit-scatter-plot.html
1. https://plato.stanford.edu/entries/mathematics-inconsistent/
diff --git a/documentation/research/web_framework.md b/documentation/research/web_framework.md
index da37dc68a..c0fc7c9b5 100644
--- a/documentation/research/web_framework.md
+++ b/documentation/research/web_framework.md
@@ -101,6 +101,7 @@
# Styling
+1. [Index fun](https://psuter.net/2019/07/07/z-index)
1. [Constraint layouts](https://blog.gtk.org/2019/07/02/constraint-layouts/)
1. https://every-layout.dev/
1. https://github.com/diegohaz/reuse
diff --git a/stdlib/source/lux/abstract/hash.lux b/stdlib/source/lux/abstract/hash.lux
index d2dee3bcb..752227fb7 100644
--- a/stdlib/source/lux/abstract/hash.lux
+++ b/stdlib/source/lux/abstract/hash.lux
@@ -1,9 +1,8 @@
(.module:
lux
[//
- [equivalence (#+ Equivalence)]])
+ ["." equivalence (#+ Equivalence)]])
-## [Signatures]
(signature: #export (Hash a)
{#.doc (doc "A way to produce hash-codes for a type's instances."
"A necessity when working with some data-structures, such as dictionaries or sets.")}
@@ -11,3 +10,13 @@
&equivalence)
(: (-> a Nat)
hash))
+
+(def: #export (product leftH rightH)
+ (All [l r] (-> (Hash l) (Hash r) (Hash [l r])))
+ (structure
+ (def: &equivalence
+ (equivalence.product (:: leftH &equivalence)
+ (:: rightH &equivalence)))
+ (def: (hash [leftV rightV])
+ (n/* (:: leftH hash leftV)
+ (:: rightH hash rightV)))))
diff --git a/stdlib/source/lux/control/parser/binary.lux b/stdlib/source/lux/control/parser/binary.lux
index 8d01d2d48..2912e0a52 100644
--- a/stdlib/source/lux/control/parser/binary.lux
+++ b/stdlib/source/lux/control/parser/binary.lux
@@ -48,7 +48,7 @@
(template [<name> <size> <read>]
[(def: #export <name>
- (Parser (I64 Any))
+ (Parser I64)
(function (_ [offset binary])
(case (<read> offset binary)
(#try.Success data)
@@ -63,6 +63,18 @@
[bits/64 ..size/64 binary.read/64]
)
+(template [<name> <type>]
+ [(def: #export <name> (Parser <type>) ..bits/64)]
+
+ [nat Nat]
+ [int Int]
+ [rev Rev]
+ )
+
+(def: #export frac
+ (Parser Frac)
+ (//@map frac.from-bits ..bits/64))
+
(exception: #export (invalid-tag {range Nat} {byte Nat})
(exception.report
["Range" (%.nat range)]
@@ -71,11 +83,11 @@
(def: #export (or left right)
(All [l r] (-> (Parser l) (Parser r) (Parser (| l r))))
(do //.monad
- [flag bits/8]
+ [flag ..nat]
(case flag
0 (:: @ map (|>> #.Left) left)
1 (:: @ map (|>> #.Right) right)
- _ (//.lift (exception.throw ..invalid-tag [2 (.nat flag)])))))
+ _ (//.lift (exception.throw ..invalid-tag [2 flag])))))
(def: #export (rec body)
(All [a] (-> (-> (Parser a) (Parser a)) (Parser a)))
@@ -89,28 +101,11 @@
(def: #export bit
(Parser Bit)
- (function (_ [offset binary])
- (case (binary.read/8 offset binary)
- (#try.Success data)
- (case (: Nat data)
- (^template [<nat> <bit>]
- <nat> (#try.Success [(inc offset) binary] <bit>))
- ([0 #0]
- [1 #1])
-
- _
- (exception.throw ..invalid-tag [2 data]))
-
- (#try.Failure error)
- (#try.Failure error))))
-
-(def: #export nat (Parser Nat) (//@map .nat ..bits/64))
-(def: #export int (Parser Int) (//@map .int ..bits/64))
-(def: #export rev (Parser Rev) (//@map .rev ..bits/64))
-
-(def: #export frac
- (Parser Frac)
- (//@map frac.bits-to-frac ..bits/64))
+ (do //.monad
+ [choice (..or ..any ..any)]
+ (wrap (case choice
+ (#.Left _) #0
+ (#.Right _) #1))))
(template [<name> <bits> <size>]
[(def: #export <name>
diff --git a/stdlib/source/lux/data/format/binary.lux b/stdlib/source/lux/data/format/binary.lux
index a947de559..58ea7eb05 100644
--- a/stdlib/source/lux/data/format/binary.lux
+++ b/stdlib/source/lux/data/format/binary.lux
@@ -127,7 +127,7 @@
try.assume)])]))
(template [<name> <type>]
- [(def: #export <name> (Writer <type>) (|>> .i64 ..bits/64))]
+ [(def: #export <name> (Writer <type>) ..bits/64)]
[nat Nat]
[int Int]
@@ -136,7 +136,7 @@
(def: #export frac
(Writer Frac)
- (|>> frac.frac-to-bits ..bits/64))
+ (|>> frac.to-bits ..bits/64))
(template [<name> <bits> <size> <write>]
[(def: #export <name>
diff --git a/stdlib/source/lux/data/maybe.lux b/stdlib/source/lux/data/maybe.lux
index b96e014b3..3ba5e87e9 100644
--- a/stdlib/source/lux/data/maybe.lux
+++ b/stdlib/source/lux/data/maybe.lux
@@ -2,10 +2,10 @@
[lux #*
[abstract
[monoid (#+ Monoid)]
- ["." functor (#+ Functor)]
+ [equivalence (#+ Equivalence)]
[apply (#+ Apply)]
- ["." monad (#+ Monad do)]
- [equivalence (#+ Equivalence)]]])
+ ["." functor (#+ Functor)]
+ ["." monad (#+ Monad do)]]])
## (type: (Maybe a)
## #.None
@@ -111,4 +111,4 @@
(def: #export assume
(All [a] (-> (Maybe a) a))
- (|>> (default (undefined))))
+ (|>> (..default (undefined))))
diff --git a/stdlib/source/lux/data/number/frac.lux b/stdlib/source/lux/data/number/frac.lux
index a23c5c4e2..6fb8f3831 100644
--- a/stdlib/source/lux/data/number/frac.lux
+++ b/stdlib/source/lux/data/number/frac.lux
@@ -343,7 +343,7 @@
["7FF" special-exponent-bits]
)
-(def: #export (frac-to-bits input)
+(def: #export (to-bits input)
(-> Frac I64)
(i64 (cond (not-a-number? input)
..not-a-number-bits
@@ -392,8 +392,8 @@
[sign sign-mask 1 (n/+ exponent-size mantissa-size)]
)
-(def: #export (bits-to-frac input)
- (-> (I64 Any) Frac)
+(def: #export (from-bits input)
+ (-> I64 Frac)
(let [S (sign input)
E (exponent input)
M (mantissa input)]
@@ -424,4 +424,4 @@
(structure: #export hash (Hash Frac)
(def: &equivalence ..equivalence)
- (def: hash frac-to-bits))
+ (def: hash ..to-bits))
diff --git a/stdlib/source/lux/data/text.lux b/stdlib/source/lux/data/text.lux
index ad5d49ae2..8a4b8a02a 100644
--- a/stdlib/source/lux/data/text.lux
+++ b/stdlib/source/lux/data/text.lux
@@ -27,15 +27,15 @@
[(def: #export <long> (from-code <code>))
(def: #export <short> <long>)]
- [00 \0 null]
- [07 \a alarm]
- [08 \b back-space]
- [09 \t tab]
- [10 \n new-line]
- [11 \v vertical-tab]
- [12 \f form-feed]
- [13 \r carriage-return]
- [34 \' double-quote]
+ [00 \0 null]
+ [07 \a alarm]
+ [08 \b back-space]
+ [09 \t tab]
+ [10 \n new-line]
+ [11 \v vertical-tab]
+ [12 \f form-feed]
+ [13 \r carriage-return]
+ [34 \'' double-quote]
)
(def: #export (size x)
diff --git a/stdlib/source/lux/math/random.lux b/stdlib/source/lux/math/random.lux
index ef1ed3e37..1bdc9931a 100644
--- a/stdlib/source/lux/math/random.lux
+++ b/stdlib/source/lux/math/random.lux
@@ -111,7 +111,7 @@
(def: #export frac
(Random Frac)
- (:: ..monad map frac.bits-to-frac ..nat))
+ (:: ..monad map (|>> .i64 frac.from-bits) ..nat))
(def: #export safe-frac
(Random Frac)
@@ -276,14 +276,14 @@
(All [a] (-> PRNG (Random a) [PRNG a]))
(calc prng))
-(def: pcg-32-magic-mult Nat 6364136223846793005)
+(def: pcg-32-magic Nat 6364136223846793005)
-(def: #export (pcg-32 [inc seed])
+(def: #export (pcg-32 [increase seed])
{#.doc (doc "An implementation of the PCG32 algorithm."
"For more information, please see: http://www.pcg-random.org/")}
(-> [(I64 Any) (I64 Any)] PRNG)
(function (_ _)
- [(|> seed .nat (n/* pcg-32-magic-mult) ("lux i64 +" inc) [inc] pcg-32)
+ [(|> seed .nat (n/* ..pcg-32-magic) ("lux i64 +" increase) [increase] pcg-32)
(let [rot (|> seed .i64 (i64.logic-right-shift 59))]
(|> seed
(i64.logic-right-shift 18)
diff --git a/stdlib/source/lux/world/input/keyboard.lux b/stdlib/source/lux/world/input/keyboard.lux
index a918ba635..b6fdb06ee 100644
--- a/stdlib/source/lux/world/input/keyboard.lux
+++ b/stdlib/source/lux/world/input/keyboard.lux
@@ -6,73 +6,98 @@
(type: #export Key
Nat)
-(template [<name> <code>]
+(template [<code> <name>]
[(def: #export <name> Key <code>)]
- [caps-lock 20]
- [num-lock 144]
- [scroll-lock 145]
-
- [back-space 8]
- [enter 10]
+ [00008 back-space]
+ [00010 enter]
+ [00016 shift]
+ [00017 control]
+ [00018 alt]
+ [00020 caps-lock]
+ [00027 escape]
+ [00032 space]
+ [00033 page-up]
+ [00034 page-down]
+ [00035 end]
+ [00036 home]
- [shift 16]
- [control 17]
- [alt 18]
+ [00037 left]
+ [00038 up]
+ [00039 right]
+ [00040 down]
- [escape 27]
- [page-up 33]
- [page-down 34]
- [end 35]
- [home 36]
+ [00065 a]
+ [00066 b]
+ [00067 c]
+ [00068 d]
+ [00069 e]
+ [00070 f]
+ [00071 g]
+ [00072 h]
+ [00073 i]
+ [00074 j]
+ [00075 k]
+ [00076 l]
+ [00077 m]
+ [00078 n]
+ [00079 o]
+ [00080 p]
+ [00081 q]
+ [00082 r]
+ [00083 s]
+ [00084 t]
+ [00085 u]
+ [00086 v]
+ [00087 w]
+ [00088 x]
+ [00089 y]
+ [00090 z]
- [left 37]
- [up 38]
- [right 39]
- [down 40]
+ [00096 num-pad-0]
+ [00097 num-pad-1]
+ [00098 num-pad-2]
+ [00099 num-pad-3]
+ [00100 num-pad-4]
+ [00101 num-pad-5]
+ [00102 num-pad-6]
+ [00103 num-pad-7]
+ [00104 num-pad-8]
+ [00105 num-pad-9]
- [delete 127]
- [print-screen 154]
- [insert 155]
- [windows 524]
+ [00127 delete]
+ [00144 num-lock]
+ [00145 scroll-lock]
+ [00154 print-screen]
+ [00155 insert]
+ [00524 windows]
- [num-pad-0 96]
- [num-pad-1 97]
- [num-pad-2 98]
- [num-pad-3 99]
- [num-pad-4 100]
- [num-pad-5 101]
- [num-pad-6 102]
- [num-pad-7 103]
- [num-pad-8 104]
- [num-pad-9 105]
-
- [f1 112]
- [f2 113]
- [f3 114]
- [f4 115]
- [f5 116]
- [f6 117]
- [f7 118]
- [f8 119]
- [f9 120]
- [f10 121]
- [f11 122]
- [f12 123]
- [f13 61440]
- [f14 61441]
- [f15 61442]
- [f16 61443]
- [f17 61444]
- [f18 61445]
- [f19 61446]
- [f20 61447]
- [f21 61448]
- [f22 61449]
- [f23 61450]
- [f24 61451]
+ [00112 f1]
+ [00113 f2]
+ [00114 f3]
+ [00115 f4]
+ [00116 f5]
+ [00117 f6]
+ [00118 f7]
+ [00119 f8]
+ [00120 f9]
+ [00121 f10]
+ [00122 f11]
+ [00123 f12]
+ [61440 f13]
+ [61441 f14]
+ [61442 f15]
+ [61443 f16]
+ [61444 f17]
+ [61445 f18]
+ [61446 f19]
+ [61447 f20]
+ [61448 f21]
+ [61449 f22]
+ [61450 f23]
+ [61451 f24]
)
(type: #export Press
- {#input (Either Key Char)
- #pressed? Bit})
+ {#pressed? Bit
+ #input Key})
diff --git a/stdlib/source/test/lux/data/number/frac.lux b/stdlib/source/test/lux/data/number/frac.lux
index e683fb134..9edc0f921 100644
--- a/stdlib/source/test/lux/data/number/frac.lux
+++ b/stdlib/source/test/lux/data/number/frac.lux
@@ -48,6 +48,7 @@
(hex "+dead,BE.EF"))))
(do r.monad
[sample gen-frac]
- (_.test (format (%.name (name-of /.frac-to-bits)) " " (%.name (name-of /.bits-to-frac)))
- (|> sample /.frac-to-bits /.bits-to-frac (f/= sample))))
+ (_.test (format (%.name (name-of /.to-bits))
+ " & " (%.name (name-of /.from-bits)))
+ (|> sample /.to-bits /.from-bits (f/= sample))))
)))))