For the latest Dart news, visit our new blog at https://medium.com/dartlang .
Posted by Seth Ladd
Today, the Dart VM team announced they will be removing support for String + operator from the VM on June 17th. In an email to the misc@dartlang.org group, Matthias Hausner wrote:
"On Sunday, June 17, we will turn off support for the String + operator in the VM compiler and runtime. Any code that still uses + will break.
You can test now whether your code is free of String + by invoking the VM with --allow_string_plus=false, or by locally editing runtime/vm/parser.cc and setting the default value of this flag to false and recompile the VM. Then, run your code and fix any fallout."
Rationale
After careful consideration, the string operator+ was removed because:
You have three options to construct Strings, in the absence of the + operator.
String interpolation
String interpolation is great when you need to construct a simple string using other values. For example:
var to = 'Dart developer';
var msg = 'Hello $to!';
assert(msg == 'Hello Dart developer!');
StringBuffer
A StringBuffer allows you to build up a string without actually constructing a string instance. For example:
var to = 'Dart developer';
var buffer = new StringBuffer();
buffer.add('Hello ');
buffer.add(to);
buffer.add('!');
var msg = buffer.toString();
assert(msg == 'Hello Dart developer!');
String buffers are useful when you're building a string using a loop.
Today, the Dart VM team announced they will be removing support for String + operator from the VM on June 17th. In an email to the misc@dartlang.org group, Matthias Hausner wrote:
"On Sunday, June 17, we will turn off support for the String + operator in the VM compiler and runtime. Any code that still uses + will break.
You can test now whether your code is free of String + by invoking the VM with --allow_string_plus=false, or by locally editing runtime/vm/parser.cc and setting the default value of this flag to false and recompile the VM. Then, run your code and fix any fallout."
Rationale
After careful consideration, the string operator+ was removed because:
- It causes puzzlers (exhibit A)
- It's superfluous in the presence of string interpolation.
- It encourages people to write inherently inefficient (quadratic) code.
Alternatives
You have three options to construct Strings, in the absence of the + operator.
String interpolation
String interpolation is great when you need to construct a simple string using other values. For example:
var to = 'Dart developer';
var msg = 'Hello $to!';
assert(msg == 'Hello Dart developer!');
StringBuffer
A StringBuffer allows you to build up a string without actually constructing a string instance. For example:
var to = 'Dart developer';
var buffer = new StringBuffer();
buffer.add('Hello ');
buffer.add(to);
buffer.add('!');
var msg = buffer.toString();
assert(msg == 'Hello Dart developer!');
String buffers are useful when you're building a string using a loop.
Adjacent string literals
When you have long string literals that should be split across different lines, the Dart runtimes will automatically concatenate adjacent string literals.
var longMessage = 'This is a long message that might exceed 80 '
'characters because I have '
'so much to say, so I split it across many '
'lines using adjacent string literals';
While Dart does support the triple-quote string (which allows you to write strings across many lines), sometimes you want to control leading and trailing spacing. In those cases, adjacent string literals is very useful.
Thanks for working with Dart! As always, the Dart discussion list is open for your thoughts and feedback.