{"push_id":1564534167,"size":21,"distinct_size":21,"ref":"refs/heads/wip/reporter","head":"c4fe95ba5c8ba5ba7a40554d4f66179c39e36478","before":"55ea8c717833092fc4d641c55ed384877fc9577c","commits":[{"sha":"33407c5dec0feb7dba5aa91a256920a3f0449f07","author":{"name":"jvican","email":"212b3e97ba29106c7dd8e6fd4b1ffd8a8c7b49d8@fastmail.es"},"message":"Use `computePhaseDescriptors` directly\n\nThis commit does two things:\n* In 2.8, `computePhaseDescriptors` was accessed using reflection\n  because it was private and inaccessible to `CachedCompiler`.\n  However, it was turned into protected later on by https://github.com/scala/scala/commit/1016d68bef18ea078a83af6e550adf2d8a818ddd.\n  As current Zinc only supports Scala versions 2.10, 2.11 and 2.12, the\n  access to `computePhaseDescriptors` is no longer reflective.\n* Remove unused imports that cluttered the source file.","distinct":true,"url":"https://api.github.com/repos/eed3si9n/zinc/commits/33407c5dec0feb7dba5aa91a256920a3f0449f07"},{"sha":"4a09b04ecf0c88332ba78c03b5ef3a59482c097e","author":{"name":"jvican","email":"212b3e97ba29106c7dd8e6fd4b1ffd8a8c7b49d8@fastmail.es"},"message":"Add first version of JMH benchmarks\n\nThis commit introduces JMH benchmarks as requested by https://github.com/sbt/zinc/pull/225.\n\nThe strategy for the JMH benchmarks is the following:\n\n1. Clone repository to be compiled and checkout at concrete commit (for\n   reproducibility).\n2. Generate sbt task for every subproject we want to test. This task\n   will tell us information about the compiler options: sources and\n   classpath (scalac options are integrated in next commit).\n3. Execute the sbt tasks and get the output.\n4. Instantiate a compiler fully integrated with the compiler bridge that\n   has all the parameters given by the sbt output.\n5. Run and enjoy.\n\nThe JMH benchmarks run this for every iteration, for now. However, they\nonly measure the running time of the **whole** compiler pipeline. There\nis no reliable way to do it only for our Zinc phases since they are\ntightly coupled to the compiler, so this is the best we can do.\n\nThe JMH benchmarks are only 2.12 compatible. This commit introduces a\nbenchmark for Shapeless and shows how easy it is to extend for other\ncodebases. It also adds some tests to make sure that the required\nscaffolding works.\n\nFor that, we have to modify the accessibility of some methods in our\ninfrastructure, particularly `ScalaCompilerForUnitTesting`.","distinct":true,"url":"https://api.github.com/repos/eed3si9n/zinc/commits/4a09b04ecf0c88332ba78c03b5ef3a59482c097e"},{"sha":"dcd5c1f8ac4d865e30f36eaa2d61b8679465078d","author":{"name":"jvican","email":"212b3e97ba29106c7dd8e6fd4b1ffd8a8c7b49d8@fastmail.es"},"message":"Add scalacOptions to the compiler benchmarks\n\nA key piece to compile any project with bare compiler is scalac options.\nThis commit successfully gets this information from sbt and passes it to\nthe instantiated compiler.","distinct":true,"url":"https://api.github.com/repos/eed3si9n/zinc/commits/dcd5c1f8ac4d865e30f36eaa2d61b8679465078d"},{"sha":"c62a6e5801b735c55e9ad74edbeefb1c3b47550d","author":{"name":"jvican","email":"212b3e97ba29106c7dd8e6fd4b1ffd8a8c7b49d8@fastmail.es"},"message":"Add hot and warm shapeless benchmarks\n\nAside from cold benchmarks, shapeless has not warm and hot benchmarks,\ndone similarly to\nhttps://github.com/jvican/compiler-benchmark/blob/master/compilation/src/main/scala/dotty/tools/dotc/DottyBenchmark.scala,\nwhich is inspired by Jason Zaugg.\n\nBenchmarks are now declared in independent file. This help us to\nmodularize benchmarks better and don't add them all in the same source\nfile.","distinct":true,"url":"https://api.github.com/repos/eed3si9n/zinc/commits/c62a6e5801b735c55e9ad74edbeefb1c3b47550d"},{"sha":"b55991977db976525f5390e6ecf4bd8d13c67f0d","author":{"name":"jvican","email":"212b3e97ba29106c7dd8e6fd4b1ffd8a8c7b49d8@fastmail.es"},"message":"Precompute messages for every subproject\n\nCreate the compilation info messages at `Setup` time, not at benchmark\ntime.","distinct":true,"url":"https://api.github.com/repos/eed3si9n/zinc/commits/b55991977db976525f5390e6ecf4bd8d13c67f0d"},{"sha":"7d4bf285cc618debec21e41fc5474ae45c338cbd","author":{"name":"jvican","email":"212b3e97ba29106c7dd8e6fd4b1ffd8a8c7b49d8@fastmail.es"},"message":"Improve benchmark setup running times\n\nJMH runs benchmarks in different forks. The previous benchmark setup was\ncloning repos, getting build information and compiling at the same time,\nwhich meant that for every fork we have to pay the cost of doing all\nthose tasks.\n\nThe following commit separates the previous design into two clear steps:\n\n1. Clone repos and get build information.\n2. Run benchmarks with persisted build information.\n3. Remove stale resources.\n\nThese tasks need to be run independently (in different JVMs) and in a\nsequential order. The changes in this commit make these two independent\nJVMs communicate so that the benchmarks immediately know which projects\nthey have to run and with which compiler inputs.\n\nThe task `runBenchmarks` will make sure that these are run in the proper\norder and with the correct arguments. This setup allows us to run\nbenchmarks for every sbt subproject that we want, but for that we need\nto create an independent benchmark (see `ShapelessBenchmark`).","distinct":true,"url":"https://api.github.com/repos/eed3si9n/zinc/commits/7d4bf285cc618debec21e41fc5474ae45c338cbd"},{"sha":"5fbd7491d7fe3a4775710f1e8691c97f3ba74af8","author":{"name":"jvican","email":"212b3e97ba29106c7dd8e6fd4b1ffd8a8c7b49d8@fastmail.es"},"message":"Use `ignoredSymbol` in API & reorder `isTopLevel`\n\n`API` guards against null and `NoSymbol`s. This commit reuses those\nchecks in `GlobalHelpers` and rewrites `isTopLevel` so that it's easier\nto see what the performed checks are.\n\nThis rewrite also reorders the checks for performance reasons. The way\n`TopLevelTraverser` works is implicitly checking for `isNestedClass`\nbecause it only traverses the trees that are inside package whose\nsymbols should have that package as an owner. `isTopLevel` is checked\nthis way, so it's a redundant check. However, it's not safe to remove it\nfrom here because the semantics of `TopLevelTraverser` could change and\npeople would expect the implementation of `isTopLevel` to be stable.\nTherefore, I've moved that check at the end of the check chain so that\nonly valid top level symbols pay the price of that check and we spare a\ncheck in those symbols that are more likely to fail checks before.\n\nAside from this, `isStatic` is now checked before `isImplClass` because\nnon static symbols are more frequent and will therefore fail the check\nbefore. Aside from this, `isImplClass` will always return `false` in\n2.12 because the encoding of traits has changed.","distinct":true,"url":"https://api.github.com/repos/eed3si9n/zinc/commits/5fbd7491d7fe3a4775710f1e8691c97f3ba74af8"},{"sha":"035c0465bb0aac38a67c81bd675ee8c07d4141bb","author":{"name":"jvican","email":"212b3e97ba29106c7dd8e6fd4b1ffd8a8c7b49d8@fastmail.es"},"message":"Improve performance of `Dependency`\n\n`Dependency` was architectured in two phases. First, a traverser would\nrun in the tree of the compilation unit and populate all the found\ndependencies. Second, the caller of the traverser would go through these\ndata structures and process them.\n\nSince performance is a major feature of Zinc, this commit changes the\nprevious design and mixes the previously described steps into one. This\nis possible because they don't depend on each other and processing\ndependencies does not require any kind of ordering.\n\nThis is likely to have a significant impact in the performance of\n`Dependency` memory-wise for the following reasons:\n\n* At the moment of processing the class dependency, that object is\n  already hot in the cache and its access is for free.\n* We economise the amount of memory required for holding the populated\n  temporary data structures. For larger compilation units, this data would\n  be large and likely to be promoted from young generations to older\n  generations, thus consuming unnecessary GC time.\n\nNote that `addClassDependency` and `addTopLevelImportDependency` cache\nthe added dependency unlike the previous version, which would just add\nto the hash set even though the key was already there.\n\nThis rewrite of `Dependency` tries to touch as less lines as possible to\npreserve the git history for future archeologists of this codebase. It\nalso adds a lot of new comments explaining the underlying algorithm.\n\n@romanowski has performed a similar job before when he rewrote the\ntemporary data structures to use `Iterator`s instead of the underlying\nsets. I'm unsure of the real impact of this change in comparison with\nhis, but it should at least be a little bit faster.","distinct":true,"url":"https://api.github.com/repos/eed3si9n/zinc/commits/035c0465bb0aac38a67c81bd675ee8c07d4141bb"},{"sha":"3f09fd5e0f5992e96be6020a7f23d3df3526bfe9","author":{"name":"jvican","email":"212b3e97ba29106c7dd8e6fd4b1ffd8a8c7b49d8@fastmail.es"},"message":"Remove outdated comment\n\nPrevious comment was referring to some implementation details that are\nnot used anymore. Remove and specify what the phase actually does.","distinct":true,"url":"https://api.github.com/repos/eed3si9n/zinc/commits/3f09fd5e0f5992e96be6020a7f23d3df3526bfe9"},{"sha":"dbba3757a15c912af4acac38ad3631a9b69bce20","author":{"name":"jvican","email":"212b3e97ba29106c7dd8e6fd4b1ffd8a8c7b49d8@fastmail.es"},"message":"Compute moduleClass of `responsibleOfImports` once\n\nAddresses feedback from @romanowski on not repeating this computation\nevery time a top level import is processed by `Dependency`.","distinct":true,"url":"https://api.github.com/repos/eed3si9n/zinc/commits/dbba3757a15c912af4acac38ad3631a9b69bce20"},{"sha":"0ca3830855095ce6a18ac4a6ab1f5be347964687","author":{"name":"jvican","email":"212b3e97ba29106c7dd8e6fd4b1ffd8a8c7b49d8@fastmail.es"},"message":"Reuse name cache and don't add repeated names\n\nThe following rewrites minor parts of `ExtractUsedNames` to:\n\n* Use names instead of strings. This way, we can reuse the set for names\n  as a cache and remove `symbolsCache` which ends up consuming\n  unnecessary memory (we don't care from which symbols we get a name, if\n  two symbols have the same name, only one of them will be used).\n\n* Never add names that are repeated, check for their existence first.\n  This way we will always spare one unnecessary write to a set. As\n  writes are expensive and reads are not, it's better to check with\n  `contains` before `add`ing to a set. Note that this is not a\n  performance overhead because `add` invokes `contains` before `+=`.\n  Check the implementation of mutable `Set`.\n\n* Never add original trees directly. Same as for names.\n\n* Document the current implementation of cached `EnclosingNonLocalClass`\n  and specify what `currentOwner` is.","distinct":true,"url":"https://api.github.com/repos/eed3si9n/zinc/commits/0ca3830855095ce6a18ac4a6ab1f5be347964687"},{"sha":"cd9c3381b9791a40ed16fe68c34d82b01a3f6582","author":{"name":"jvican","email":"212b3e97ba29106c7dd8e6fd4b1ffd8a8c7b49d8@fastmail.es"},"message":"Make `zincBenchmarks` compile with 2.11.8 too\n\n`zincBenchmarks` was a 2.12.x project because it was using the\nright-biased `Either`. This commit makes it compile with 2.11.8.","distinct":true,"url":"https://api.github.com/repos/eed3si9n/zinc/commits/cd9c3381b9791a40ed16fe68c34d82b01a3f6582"},{"sha":"c026d5ede09f272da41d902beea20926d4667fa1","author":{"name":"eugene yokota","email":"07efdd79502b339c1b4b06f319e12a44bf6e1be1@gmail.com"},"message":"Merge pull request #225 from jvican/1.0\n\nAdd JMH benchmarks and improve performance of Zinc phases","distinct":true,"url":"https://api.github.com/repos/eed3si9n/zinc/commits/c026d5ede09f272da41d902beea20926d4667fa1"},{"sha":"14f76c2c63eb0832a7054211b5df29696b9eac3c","author":{"name":"Eugene Yokota","email":"07efdd79502b339c1b4b06f319e12a44bf6e1be1@gmail.com"},"message":"Switch over to using ManagedLogger","distinct":true,"url":"https://api.github.com/repos/eed3si9n/zinc/commits/14f76c2c63eb0832a7054211b5df29696b9eac3c"},{"sha":"0dee711c0da32cd5c7bd11e9031cfd6876082d99","author":{"name":"Eugene Yokota","email":"07efdd79502b339c1b4b06f319e12a44bf6e1be1@gmail.com"},"message":"migrate to java.util.Optional based Position","distinct":true,"url":"https://api.github.com/repos/eed3si9n/zinc/commits/0dee711c0da32cd5c7bd11e9031cfd6876082d99"},{"sha":"8fef6c8146e45c8fd84ca3f0d8ed9493c0b45711","author":{"name":"Eugene Yokota","email":"07efdd79502b339c1b4b06f319e12a44bf6e1be1@gmail.com"},"message":"Logger reporter uses event logging","distinct":true,"url":"https://api.github.com/repos/eed3si9n/zinc/commits/8fef6c8146e45c8fd84ca3f0d8ed9493c0b45711"},{"sha":"dd828b95134f06a9f2cb18e424baea2d026eb164","author":{"name":"Eugene Yokota","email":"07efdd79502b339c1b4b06f319e12a44bf6e1be1@gmail.com"},"message":"Bump util and lm","distinct":true,"url":"https://api.github.com/repos/eed3si9n/zinc/commits/dd828b95134f06a9f2cb18e424baea2d026eb164"},{"sha":"bcba4e3f52956a6a8763b19c1d0766c3155d8f66","author":{"name":"Eugene Yokota","email":"07efdd79502b339c1b4b06f319e12a44bf6e1be1@gmail.com"},"message":"Fix hashCode","distinct":true,"url":"https://api.github.com/repos/eed3si9n/zinc/commits/bcba4e3f52956a6a8763b19c1d0766c3155d8f66"},{"sha":"f624dabf4f3b976be450fc50d4ab8df217fa21b1","author":{"name":"Eugene Yokota","email":"07efdd79502b339c1b4b06f319e12a44bf6e1be1@gmail.com"},"message":"Fix rebasing","distinct":true,"url":"https://api.github.com/repos/eed3si9n/zinc/commits/f624dabf4f3b976be450fc50d4ab8df217fa21b1"},{"sha":"d8a8de94ba06961a1cea2f999f3710da86a4e47f","author":{"name":"Eugene Yokota","email":"07efdd79502b339c1b4b06f319e12a44bf6e1be1@gmail.com"},"message":"Fix DelegatingReporter","distinct":true,"url":"https://api.github.com/repos/eed3si9n/zinc/commits/d8a8de94ba06961a1cea2f999f3710da86a4e47f"}]}
{"actor":{"display_login":"eed3si9n"}}