Конкатенация строк

@ibond как раз только что сказал что это уже работает.

И - я проверил, таки да.
Ваш код из последнего ответа (если добавить writeln((a,s)) ) превращается в:

      PABCSystem.PABCSystem.Writeln((object) Tuple.Create<int, string>(5, "StringString"));

Ну так я не это имел ввиду. Речь идёт о том, что компилятор должен преобразовать это

var a := 2 + 3;
var s := 'String' + 'String';

В это

var a := 5;
var s := StringString;

В var a := 5; - не должен ни разу, если он не оптимизирующий. Может, если так разработчики сделают, но никак уж не должен.

Нет, таки про это. Именно это он и сделал. посмотрите внимательно в код. То что все промежуточные переменные убирает - это особенность IL, в нём просто нет разницы между этим:

var a := 5;
writeln(a);

И этим:

writeln(5)
1 симпатия

А ничего, что компилятор должен оптимизировать код?

Это кто Вам сказал? Компилятор должен лишь если он называется оптимизирующим.