I've become more enamored with the immutable strings idea as I read
through the branch diff (immutable_strings_part1). It's quite impressive
how much redundant code gets removed when we can rely on a string to
never change.
The branch does a good job of hiding the details from the user too. That
is, for the most part HLL code can run ahead as usual, and never need to
know that a given string operation has changed a register/variable to
point to a different string header.
A few comments:
* Since opcodes like 'downcase' are changing to return a value rather
than modifying one, then the opcodes should be clear about it. That is,
deprecate the one argument:
downcase $S0
In favor of the two argument:
$S1 = downcase $S0
* We've lost the semantic difference between 'set' and 'assign' for
strings, they're now identical. This isn't necessarily a bad thing, but
it seems sensible to deprecate 'assign' for strings and keep it only for
PMCs where it's meaningful.
* In src/string/encoding/fixed_8.c there's a stray FIXME in the wrong
comment style (// instead of /* */) which I'm guessing someone intends
to remove before merging.
* In src/string/api.c, does 'string_capacity' really make sense anymore
as a function? Shouldn't the capacity of an immutable string always be
the same as the length of the string? Possibly another deprecation item.
* Can Parrot_str_append be changed to just call Parrot_str_concat? Or,
perhaps deprecate append, since they notionally do the same thing now.
* It sure removes a lot of cruft from substr to have it only return a
new value.
* Another stray wrong-style comment in src/string/api.c, in
Parrot_str_pin on a call to Parrot_str_write_COW. Again on another call
to the same function later in the same file.
* A bit of complexity added to join, but unavoidable with immutable
strings. At least it avoids generating a pile of temporary strings by
allocating enough memory to hold the whole result at once.
Three cheers for unconventional thinking, finding speed gains and code
simplifications in unexpected places.
Allison
_______________________________________________
http://lists.parrot.org/mailman/listinfo/parrot-dev