- Add */run script for every implementation.
- Refactor Clojure build to allow individual jar files for each step.
- Update FFI version for es6 and miniMAL to work with newer node
versions.
The run scripts for the following could use some additional
refactoring:
- java: build individual step jar, use java -jar instead of mvn to run
- plpgsql: maybe combine plpgsql/run and plpgsql/wrap.sh
- vhdl: combine vhdl/run and vhdl/run_vhdl.sh
- vimscript: combine vimscript/run and vimscript/run_vimscript.sh
- Remove most of the step5 excludes in the Makefile except for ones
which don't have TCO capability at all (or the implementation is too
slow): bash, make, mal, matlab.
- Make perf_EXCLUDES consistent with other excludes.
- Add a print-FOO target which prints the resolved value of Makefile
variable FOO. For example, `make print-IMPLS` to print the list of
implementations.
Optimizations:
* In Environment, skip checking unused local slots if we’ve switched
over to the general map.
* Mark as much as possible with “final” and “private”, and build with
-whole-module-optimization, per
https://developer.apple.com/swift/blog/?id=27.
* Refactor to include alternate types.swift with an implementation based
on “enum”. Add Makefile variable allowing us to switch between the two
so that we can compare the results. (At the time of this writing,
using the class-based implementation is better in terms of both size
and speed.)
Swift 1.2:
* Use the form of “if-let-as” that allows us to unwrap multiple
optionals at once.
* Use Swift’s as? rather than our own predicates after determining that
the former did not incur a performance hit.
Swift 2.0:
* Remove some Array conversions where Foundation/Cocoa is now declared
to return arrays of the desired type.
* println -> print.
* print() -> print("")
* Remove some NSError* parameters; changed to do/try/catch.
* Use Swift exception handling rather than tunneling that information in
MalError.
* Use `guard` statements where it makes sense. Especially `guard let a =
b as? c` statements in order to reduce subsequent forced unwrapping.
* Changed count(str) -> str.characters.count.
* Changed Swift.reduce(coll, ...) -> coll.reduce(...).
* Changed reverse(coll) -> coll.reverse().
* Changed use of .allZeros -> default OptionSet c'tor.
* Changed Printable -> CustomStringConvertible.
* Changed Sequence.extend -> Sequence.appendContentsOf
* Changed String.join -> Sequence.joinWithSeparator
* Changed advance(index, delta) -> index.advancedBy(delta)
* Addressed change in function parameter name requirements.
* Added and used substring(s, begin, end).
* Changed “for ch in str” to “for ch in str.characters”
* Changed some switch/case statements to briefer if/case statements.
* Slices are no longer necessarily 0-based.
* Sprinkle in some @noescapes.
* Search for the most recent swiftc compiler to use if Xcode and
Xcode-beta are both installed.
Other:
* Delete debugger symbols in `make clean`.
* Rebuild if Makefile is changed.
* Change "Array" to "ArraySlice"
* Change "as" keyword to "as!"
* Use count(str.utf16) rather than str.utf16count)
* Add "combine:" parameter label to call to slice.reduce