Just to follow up on this:
- Thanks for catching a couple of bugs. For the additional features you mentioned in Github issues, you may want to also start threads on the forum (
forum.lolcode.org) in case people want to add their opinions there.
- lci doesn't implement the special-purpose slots (like omgwtf). It's not clear if these should be handled in that way or if some exception mechanism would work better. This is something that should be discussed.
- Thanks for pointing this out. I looked into this, and this was due to lci linearly traversing an array to lookup and update values in scopes (which is really inefficient when there are a lot of values in a scope). I've changed the future branch of lci to store values in scopes in lexicographical order and do a lexicographic binary search to locate values. On my system this changed initializing a 100K element array from taking 83.20s on average to taking 0.98s on average.
The downside of the last point is that since the data is still stored as an array, insertion still takes O(n) time and so for large arrays, the initialization time will be dominated by this (a 1M element array took around 63s to initialize). Since this is typically done once, it's probably worth it to keep the faster lookup and update times, though.
Another thing that helped slightly for me was to make sure you use the -DCMAKE_BUILD_TYPE=Release flag with CMake.
I made quite a few changes to some core code and though all the unit tests still pass, you may want to re-run some of your code to make sure it works OK on the future branch.
- Justin