anchor.diff:  
       var length = codeUnits.length;
       end = RangeError.checkValidRange(start, end, length);
  -    var buffer = StringBuffer();
  +
  +    // Fast case for ASCII strings avoids StringBuffer/_Utf8Decoder.
  +    int oneBytes = _scanOneByteCharacters(codeUnits, start, end);
  +    StringBuffer buffer;
  +    bool isFirstCharacter = true;
  +    if (oneBytes > 0) {
  +      var firstPart = String.fromCharCodes(codeUnits, start, start + oneBytes);
  +      start += oneBytes;
  +      if (start == end) {
  +        return firstPart;
  +      }
  +      buffer = StringBuffer(firstPart);
  +      isFirstCharacter = false;
  +    }
  +
  +    buffer ??= StringBuffer();
       var decoder = _Utf8Decoder(buffer, _allowMalformed);
  +    decoder._isFirstCharacter = isFirstCharacter;
       decoder.convert(codeUnits, start, end);
       decoder.flush(codeUnits, end);
       return buffer.toString();
  
positive.code:         var oneBytes = _scanOneByteCharacters(codeUnits, i, endIndex);
          if (oneBytes > 0) {
            _isFirstCharacter = false;
            addSingleBytes(i, i + oneBytes);
            i += oneBytes;
            if (i == endIndex) break;
          }
  
negative.code:     _value = 0;
      _expectedUnits = 0;
      _extraUnits = 0;
  
      var i = startIndex;
      loop:
  