Last time I blogged about
scala-uri was in January when
0.2 was released. Since then a whole bunch of changes have been made and
scala-uri is now at version
0.3.5. Here’s the highlights of the changes that have been happening:
- The Parser has been completely reimplemented in
parboiled. Why did I do this? Mainly because the core scala Parser Combinators have a couple of issues highlighted in SI-4929. a) They are not thread-safe, so I was having to instatiate a new instance for each parse and b) There is a memory leak that requires a hacky workaround. The implementation with parboiled solved both of these problems and also fixed some bugs in the process, such as failing to parse query string params with empty values
- Support for protocol relative urls has been added
- Code coverage repoting on coveralls. To acheive this I spawned a new project
xsbt-coveralls-plugin. Thanks to the lack of boilerplate code in scala, the test coverage is way higher than any Java project I’ve worked on (currently 97%)
- Several other bug fixes. Thanks to everyone who raised bugs.
The next thing I would like to work on in
scala-uri is a
scala-uri currently percent encodes reserved characters when rendering URLs however doesn’t decode percent encoded characters when parsing URLs. As raised by
hgiddens this makes the parser and
toString a bit wonky. Expect this soon!
My other main goal is to tackle parsing performance. I’ve set up a github repo with some micro benchamrks of
scala-uri. Large hostnames, paths and query string params fair pretty poorly in the benchmarks and despite most people working with small URLs, I think it is still worth looking to improve this so I’m going to break out VisualVM and see if there are some quick wins.