Skip to content

Latest commit

 

History

History
146 lines (134 loc) · 15.1 KB

to_do.md

File metadata and controls

146 lines (134 loc) · 15.1 KB

References

  1. Basic writing and formatting syntax
  2. Autolinked references and URLs

Templates

  1. (Commit)

Tasks

To Do

  1. Allow producing JVM artifacts without source-tracking/debugging information.
  2. The Design and Implementation of an Extensible System Meta-Programming Language
  3. HasChor: Functional Choreographic Programming for All (Functional Pearl)
  4. Compile not-like pattern-matching with ~ in languages/targets which support it, instead of compiling them as ifs.
  5. How a durable workflow engine works: you might not need a queue
  6. Dag-Calculus: A Calculus for Parallel Computation
  7. Allow importing profiles into project.lux files in order to allow more re-use of configuration.
  8. Rhombus: A New Spin on Macros Without All the Parentheses
  9. CppCon 2015: Juan Pedro Bolívar Puente “Transducers: from Clojure to C++"
  10. CppCon 2015: Jason Turner “The Current State of (free) Static Analysis"
  11. CppCon 2015: Andrei Alexandrescu “Declarative Control Flow"
  12. CppCon 2015: Neil MacIntosh “Evolving array_view and string_view for safe C++ code"
  13. CppCon 2015: Greg Miller “Time Programming Fundamentals"
  14. CppCon 2015: Joel Falcou PART 1 “Expression Templates - Past, Present, Future” 0. CppCon 2015: Joel Falcou PART 2 “Expression Templates: Past, Present, Future" 0. CppCon 2015: Joel Falcou PART 3 “Expression Templates: Past, Present, Future” 0. Expression templates
  15. CppCon 2015: Kyle Markley "Extreme Type Safety with Opaque Typedefs"
  16. CppCon 2015: Kostya Serebryany “Beyond Sanitizers...”
  17. Superscopes: Local, global... is there any more? - Fabian Renn-Giles [ CppCon 2015 ]
  18. CppCon 2015: André Bergner “Faster Complex Numbers”
  19. CppCon 2016: John McFarlane “fixed_point"
  20. CppCon 2016: Howard Hinnant “Welcome To The Time Zone"
  21. CppCon 2017: Odin Holmes “Agent based class design”
  22. CppCon 2017: John McFarlane “CNL: A Compositional Numeric Library”
  23. CppCon 2017: Walter E. Brown “Programming with C++ Constraints: Background, Utility, and Gotchas"
  24. CppCon 2018: “Multi-Precision Arithmetic for Cryptology in C++, at Run-Time and at Compile-Time”
  25. Safe numerics.
  26. Replace recursive type calls from (0 "") to (0 0)
  27. Extract the variable link-ring machinery being used by both the control/logic and meta/type/check modules into its own module.
  28. Implement type-level naming (Ghosts of Dependent Proofs-style), in order to give unique names to classes, to force distinctions between them beyond their state types.
  29. Notation for 2-adic numbers (as a sibling to Rev)
  30. Have alternative arithmetic operators for Fraction that do not normalize the result after the operation (+', -', *', /').
    • Normalization would obfuscate an interesting fact about working with infinity.
    • ^ Which is: (infinity + point) == (infinity / point) == (infinity * (/ point))
    • It may also obfusface the possibility that there are multiple infinities (and multiple zeroes) which may be equivalente to one another, but not necessarily equal.
    • Such inequality may prove useful in some calculations, but it would be erased during normalization (leading to ambiguities).
  31. Have a special rules for Fraction/Rational multiplication that says:
    • a/b * b/c = a/c && a/b * c/a = c/b && a/b * c/d = ac/bd.
    • The above rule can make a/0 * 0/b = a/b and 0/a * b/0 = b/a, bypassing any possibility for 0/0.
    • It may also make the de-normalized zeroes and infinities carry useful information, instead of losing it through normalization.
  32. Unify the handling of globals between extensions, analysis & declaration.
  33. Replace the usages of single-use variables with the expressions they are bound to, in order to eliminate unnecessary register allocations.
  34. Polytypic Binary format machinery.
  35. Go from having I32 variant tags to I08 tags. 0. Make the JVM compiler use Bytes instead of Integers for storing variant/sum tags/lefts.
  36. Implement extensible pattern-matching in the compiler, guided by the experiment in control/pattern.
  37. Inject the type-names of the different primitive types in the prelude using analysis extensions.
  38. Eta-conversion in the synthesis phase for inlining/code-fusion optimizations.
  39. Add special origin/provenance parameter to Exceptions in order to track from which definition they came, in order to disambiguate between multiple possible origins.
  40. Allow inline functions to be partially applied.
  41. Pre-calculate the sizes of pattern-matching stacks and allocate arrays with those sizes, rather than using dynamically-sized stacks.
  42. Fix {library/lux/data/format/tar.invalid_end_of_archive} error, which makes it impossible to use manually-packaged TAR files.
  43. Aggressively optimize the compiler.
  44. Replace the usage of .tar files in the compiler with a new (more consistent) archiving format. Both for packaging libraries and making cache files.
  45. Unary - and / for numbers that feature inverses.
  46. multithreading: a tiny runtime that allows you to execute JavaScript functions on separate threads
  47. Get rid of the .in_module# extension. It can be replaced by a macro that piggy-backs on the existing quoted_module mechanism.
  48. An anonymous type for un-tagged sums. E.g. {3 #1 x} = (All (_ a b c d) (Or a b c (Or d (type_of x)))) && {3 #0 x} = (All (_ a b c d) (Or a b c (Or (type_of x) d)))
  49. Unsafe text module.
  50. Dissolve math/random into the rest of the standard library.
  51. Dissolve injection/.../text into the rest of the standard library.

Done

  1. (Commit) Optimize compilation of pattern-matching expressions like (when <input> <literal> <then> _ <else>) into if expressions that test the literal, instead of full-blown pattern-matching.
    • Add if_i64 & if_f64 & if_text synthesis Terms.
  2. (Commit) Add <, <=, >, >= definitions to every module that has an Order.
  3. (Commit) Re-name panic! to halt! in honor of the halting problem.
  4. (Commit) Re-name I8 to I08
  5. (Commit) N/D native parser syntax for Fraction numbers.
  6. (Commit) (+|-)N/D native parser syntax for Rational numbers.
  7. (Commit) The safe_decimal random generator should produce Decimals all over the range of safe values, instead of just the [0, 1] interval.
  8. (Commit) Make the denominator in Rational a Natural number.
  9. (Commit) Fix stack-overflow error during TAR compression when trying to deploy with Aedifex.
  10. (Commit) When setting nested directories in Aedifex's "target", have the compiler create the nested directories.
  11. (Commit) Fix Cannot find artifact data. bug in scripting compilers.
  12. (Commit) Number alias in all the math/number modules.
  13. (Commit) Compile or-like pattern-matching, and and-like pattern-matching with || and && in languages/targets which support it, instead of compiling them as ifs.
  1. (Commit) Full names for number modules. nat => natural, dec => decimal, rat => rational, int => integer, rev => revolution, frac => fraction, char => character.
    • Also, big-name aliases for the types.
  2. (Commit) Fix bug wherein two imported modules can have the same alias.
  3. (Commit) Add a = definition to every module that has an Equivalence.
  4. (Commit) Eliminated the bootstrapping compiler
  5. (Commit) Better syntax for the .when# extension.
  6. (Commit) Re-name the left and right macros in the prelude. Also, get rid of their highlighting in lux-mode.
  7. (Commit) Make type-normalization no longer confuse local type parameters with globally-defined types/macros.
    • Remove instances of (.except left right).
  8. (Commit) Favor partial calls over successive calls when compiling function application.
  9. (Commit) Re-name Codec to Embedding. Alternatively, re-name to Format.
  10. (Commit) Get rid of library/lux/world/db.
  11. (Commit) Replace uses of All with for_all or for_any. Do the same for Ex.
  12. (Commit) Get rid of licentia.
  13. (Commit) Add extensions for pattern-matching and function definition, instead of having custom syntax for both.
  14. (Commit) Re-name Format to Injection.
  15. (Commit) Fix bug wherein private aliases in module A of public definitions in module B are seen in module C, if it imports A.
  16. (Commit) Re-name Parser to Projection.
  17. (Commit) Introduce an Int-based alternative to Frac(tion) called Rat(tional).
  18. (Commit) <- as reverse-order function syntax.
  19. (Commit) Re-name Codec#encoded to injection, and Codec#decoded to projection.
  20. (Commit) Move abstract/mix to algorithm/mix.
  21. (Commit) Re-name Ratio to Frac(tion).
  22. (Commit) Re-name check.subsumes? to check.subsumed?.
  23. (Commit) Get rid of Dec encoding/decoding default extensions.
  24. (Commit) Re-name Frac(tion) to Dec(imal).
  25. (Commit) Implement polytypic counting/length via induction.
  26. (Commit) Re-implement all the current polytypic code just using induction.
  27. (Commit) Allow for an alternative syntax for anonymous Variant/Sum construction where just a statically-known bit and a term are provided.
    • e.g. {#0 left}, or {#1 right}. They are equivalent to similar terms with a 0 lefts term prepended.
  28. (Commit) Aliases: Any => True/Verum && Nothing => False/Falsum