Mike Gerwitz

Activist for User Freedom

aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* TAMER: Additional crate::ld documentationMike Gerwitz2020-03-021-7/+69
|
* Replace XSLT-based linker with errorMike Gerwitz2020-03-022-1156/+7
| | | | | | | | | | All systems should be using the provided Makefile, so this shouldn't be invoked anymore. The new linker is still considered a proof-of-concept, but bugs have been encountered in the old one that are not worth investing the time into fixing. The new linker has been used in production for nearly a couple months and is functioning properly.
* TAMER: Extract quick_xml event-related mocksMike Gerwitz2020-02-264-110/+149
|
* TAMER: Separate static xmle sectionMike Gerwitz2020-02-263-3/+7
|
* TAMER: Virtual symbol overrideMike Gerwitz2020-02-267-10/+165
|
* TAMER: POC: Use FxHash to remove nondeterminismMike Gerwitz2020-02-261-7/+7
| | | | | The default SipHash is a cryptographic hash and causes ordering to change between runs.
* TAMER: xmle output changes to support Summary PageMike Gerwitz2020-02-2610-89/+415
| | | | Co-Authored-By: Joseph Frazer <joseph.frazer@ryansg.com>
* TAMER: POC: Output xmleMike Gerwitz2020-02-269-84/+598
| | | | This is a working proof-of-concept that will be finalized in future commits.
* TAMER: Symbol source data and metadataMike Gerwitz2020-02-268-29/+311
|
* TAMER: Initial abstract semantic graph (ASG)Mike Gerwitz2020-02-2611-249/+1433
| | | | | | | This begins to introduce the ASG, backed by Petgraph. The API will continue to evolve, and Petgraph will likely be encapsulated so that our implementation can vary independently from it (or even remove it in the future).
* configure.ac: Rust 1.{39>41}.0 version bumpMike Gerwitz2020-02-251-2/+3
| | | | | | Relaxes orphan rules for foreign traits. This also modifies the error to suggest how to update using rustup.
* TAMER: Fail on empty fragment ids (and fix underlying problem)Mike Gerwitz2020-02-252-0/+23
|
* TAMER: xmlo: Add Package eventMike Gerwitz2020-02-253-3/+196
|
* TAMER: poc: Use xmlo readerMike Gerwitz2020-02-251-125/+44
| | | | TODO: More information
* TAMER: xmlo readerMike Gerwitz2020-02-257-1/+1704
| | | | | | This introduces the reader for xmlo files produced by the XSLT-based compiler. It is an initial implementation but is not complete; see future commits.
* Makefile.am (html-am): Add --document-private-itemsMike Gerwitz2020-02-251-1/+1
| | | | | This generated documenation is only going to be read be developers, and the private information is very useful to them.
* TAMER (sym::Interner::intern_utf8_unchecked): New functionMike Gerwitz2020-02-252-0/+34
| | | | This removes boilerplate for reading xmlo files. See next commit.
* TAMER: Display for SymbolMike Gerwitz2020-02-241-0/+18
| | | | | | One of the benefits of storing a reference to the interned string on the symbol itself is that we get to get its underlying value essentially for free.
* Order symtable, sym-dep, fragmentsMike Gerwitz2020-02-245-17/+66
| | | | | | | | | | | | This ordering will simplify streaming processing of xmlo files in TAMER. Specifically, we know that symbols will have been declared by the time dependencies are added to the graph (and so we should only be creating edges to existing nodes); and we can halt reading as soon as the closing fragments tag is encountered, avoiding parsing the entirety of these massive XML files. On one particularly large program, this cuts time down from ~0.333s to ~0.300 in the POC linker.
* TAMER: Arena-based string internerMike Gerwitz2020-02-244-828/+375
| | | | | | | | | | | | | | | | | | Contrary to what I said previously, this replaces the previous implementation with an arena-backed internment system. The motivation for this change was investigating how Rustc performed its string interning, and why they chose to associate integer identifiers with symbols. The intent was originally to use Rustc's arena allocator directly, but that create pulled in far too many dependencies and depended on nightly Rust. Bumpalo provides a very similar implementation to Rustc's DroplessArena, so I went with that instead. Rustc also relies on a global, singleton interner. I do not do that here. Instead, the returned Symbol carries a lifetime of the underlying arena, as well as a pointer to the interned string. Now that this is put to rest, it's time to move on.
* tamer::sym: FNV => Fx HashMike Gerwitz2020-02-244-60/+87
| | | | | | | | | | | | | | | | | | | | | | | | For strings of any notable length, Fx Hash outperforms FNV. Rustc also moved to this hash function and noticed performance improvements. Fortunately, as was accounted for in the design, this was a trivial switch. Here are some benchmarks to back up that claim: test hash_set::fnv::with_all_new_1000 ... bench: 133,096 ns/iter (+/- 1,430) test hash_set::fnv::with_all_new_1000_with_capacity ... bench: 82,591 ns/iter (+/- 592) test hash_set::fnv::with_all_new_rc_str_1000_baseline ... bench: 162,073 ns/iter (+/- 1,277) test hash_set::fnv::with_one_new_1000 ... bench: 37,334 ns/iter (+/- 256) test hash_set::fnv::with_one_new_rc_str_1000_baseline ... bench: 18,263 ns/iter (+/- 261) test hash_set::fx::with_all_new_1000 ... bench: 85,217 ns/iter (+/- 1,111) test hash_set::fx::with_all_new_1000_with_capacity ... bench: 59,383 ns/iter (+/- 752) test hash_set::fx::with_all_new_rc_str_1000_baseline ... bench: 98,802 ns/iter (+/- 1,117) test hash_set::fx::with_one_new_1000 ... bench: 42,484 ns/iter (+/- 1,239) test hash_set::fx::with_one_new_rc_str_1000_baseline ... bench: 15,000 ns/iter (+/- 233) test hash_set::with_all_new_1000 ... bench: 137,645 ns/iter (+/- 1,186) test hash_set::with_all_new_rc_str_1000_baseline ... bench: 163,129 ns/iter (+/- 1,725) test hash_set::with_one_new_1000 ... bench: 59,051 ns/iter (+/- 1,202) test hash_set::with_one_new_rc_str_1000_baseline ... bench: 37,986 ns/iter (+/- 771)
* Makefile.am (clean): New targetMike Gerwitz2020-02-241-0/+3
| | | | Not sure how I missed this one.
* tameld: Move documentation to tamer::ldMike Gerwitz2020-02-242-13/+32
|
* HashMapInterner: New interner, docs, and benchmarksMike Gerwitz2020-02-242-23/+473
| | | | | This interner will be suitable for providing an index to look up nodes in the ASG.
* TAMER: sym::tests: Generate with macroMike Gerwitz2020-02-241-9/+27
| | | | | | | | | | This will be used for generating the common tests between HashSet and HashMap implementations. This is my first macro in Rust. There does not seem to be a way to concatenate identifiers (!), so I'm placing them within modules instead. That ended up working out just fine, since then I can use a type to provide the SUT.
* TAMER: Initial string interning abstractionMike Gerwitz2020-02-246-2/+910
| | | | | | | | | | | | | | | | | | | | | | | This is missing two key things that I'll add shortly: a HashMap-based one for use in the ASG for node mapping, and an entry-based system for manipulations. This has been a nice start for exploring various aspects of Rust development, as well as conventions that I'd like to implement. In particular: - Robust documentation intended to guide people through learning the necessary material about the compiler, as well as related work to rationalize design decisions; - Benchmarks; - TDD; - And just getting used to Rust in general. I've beat this one to death, so I'll commit this and make smaller changes going forward to show how easily it can evolve. (This module was originally named `intern` but this commit and those that follow rewrote it to `sym`.)
* Makefile.am (html-am): Run doc testsMike Gerwitz2020-02-241-0/+1
| | | | Ensure that we have good examples before generating docs.
* Makefile.am (doc, html): Use intra_rustdoc_linksMike Gerwitz2020-02-243-1/+43
| | | | | | | This is enabled by default in nightly, and is not available at all in stable. Considering the PITA that it will be to go back and rewrite docs to use the new format, and how important of a feature this is, we will just make use of it now.
* Makefile.am (bench): New targetMike Gerwitz2020-02-245-1/+59
| | | | | The configure script will determine if nightly is required for running benchmarks, because `test` is currently an unstable feature.
* Makefile.am (check): Check whether formatting is requiredMike Gerwitz2020-02-243-2/+48
| | | | | | | | | | | | Given that developers should be doing TDD and therefore running this target frequently, this has the effect of providing immediate feedback when formatting is needed and outputting a diff. Developers will then quickly understand what changes need to be made to avoid future issues (and can run `cargo fmt` to fix it), at which point they'll rarely ever encounter formatting errors. The original purpose was to ensure pipelines fail when the formatter has not been run.
* [DEV-6306] Add retry templateAustin Schaffer2020-02-204-0/+95
| | | | | | [DEV-6306] Add testing instructions to README.md [DEV-6306] Add assertion to retry template
* [DEV-6947] Add template to match UI valuesJoseph Frazer2020-01-311-1/+25
| | | | | | The UI values need to match AND the question needs to be visible. We do not have the visibility classifications yet, so we need to define externs to allow this to build.
* [DEV-6947] Allow param values to remove underscoresJoseph Frazer2020-01-311-0/+4
|
* Pass canterm flag to ratersAustin Schaffer2020-01-291-2/+2
|
* Reduce size of compiler outputMike Gerwitz2020-01-233-200/+65
|\ | | | | | | | | | | This both reduces some of the output and permits it to be run through Google's Closure compiler. Combined, this has the potential to halve the size of classification-heavy executables, like the UI's classifier.
| * build-aux/closure-externs.js: New fileMike Gerwitz2020-01-221-0/+17
| |
| * src/current/compiler/js.xsl: Remove inline defaults for anyValueMike Gerwitz2020-01-221-10/+10
| | | | | | | | | | | | This not only reduces file size, but also has a significant performance benefit for the UI, which is almost entirely classifications. A run for one of our systems was reduced from 1m30s to 11s from this change.
| * src/current/compiler/js.xsl: Strip unused result-set (@yields alt)Mike Gerwitz2020-01-221-32/+8
| |
| * src/current/compiler/js.xsl: Remove last anyValue arg by defaultMike Gerwitz2020-01-221-3/+8
| | | | | | | | | | | | | | | | This was used to provide additional information on the stack for debugging the compiled code. Since this is very rarely needed, and is only needed by someone debugging the compiler, it can be manually enabled if desired. This also wraps it so that it'll be stripped if it is included.
| * src/current/compiler/js.xsl: {._CMATCH_=>[_CMATCH_]}Mike Gerwitz2020-01-221-1/+1
| | | | | | | | This was confusing Closure Compiler.
| * src/current/compiler/js.xsl: @expose Closure Compiler annotationsMike Gerwitz2020-01-221-21/+21
| | | | | | | | | | This is deprecated, but neither of the recommended @export or @nocollapse work the same way.
| * src/current/compiler/js.xsl: Remove dead arg check codeMike Gerwitz2020-01-221-130/+0
| | | | | | | | | | This was removed during The Great Refactoring. It will be replaced with a better systemin TAMER.
| * src/current/compiler/js-calc.xsl (compile-calc)[c:let]: Remove global assignmentMike Gerwitz2020-01-221-6/+3
|/ | | | | The previous code was unintentionally assigning to an undefined global variable.
* bin/tamed: Fail without explicit DONEMike Gerwitz2020-01-211-0/+5
| | | | We want to fail e.g. on a JVM crash.
* build: Add revision files for xml{o,e}Mike Gerwitz2020-01-143-2/+10
| | | | This will force a rebuild and will be useful for upcoming changes.
* build-aux/Makefile.am: Optional timestampingMike Gerwitz2020-01-022-3/+22
| | | | | | | Note that, because of the way this is implemented, the timestamps may become mangled (multiple per line) for parallel builds. Output can be prettied up in the future.
* Cargo.toml (profile.release)[lto]: EnableMike Gerwitz2020-01-021-0/+3
|
* [DEV-6595] Loosen the way we find classification matchesJoseph Frazer2019-12-101-1/+1
|\ | | | | | | | | | | | | Merge branch 'jira-6595' * jira-6595: [DEV-6595] Loosen the way we find classification matches
| * [DEV-6595] Loosen the way we find classification matchesJoseph Frazer2019-12-101-1/+1
|/ | | | | | The `<t:match-class-code-lookup />` matches were not showing in the summary pages. I loosened the selector so it is able to find the matches when it generates the summary pages.
* TAMER: tameld: Proof-of-conceptMike Gerwitz2019-12-0214-12/+623
|\ | | | | | | | | This is a POC playing around with Rust to demonstrate how the linker could be approached and to gather benchmarks.