Между ними нет никакой связи. Классы типов являются чем-то вроде расширенных интерфейсов, но всё же не вполне. У нас классы типов будут лучше интерфейсов (если будут), поскольку будут включать в себя перегрузку операций (этого в обычных интерфейсах нет) и самое главное - определить принадлежность ЛЮБОГО конкретного типа к классу типов можно будет позже, определив instance.
Ну вот в двух словах - самые важные отличия от интерфейсов.
К сожалению, поскольку реализация классов типов затянулась, мы будем выкусывать их из мастер-ветки.
Ну, автоклассы в их сегодняшнем воплощении для этого не используются. Мы думаем заменить автоклассы record-классами в стиле нового C#. Или оставить их одновременно.
Это всё надо улучшать, но Issue написан грязно, потому и закрыли. А так - когда оформится мысль - сделаем и без всякого Issue.
begin
var f := System.IO.File.OpenRead('temp.txt');
try
f.ReadByte;
finally
f.Close;
end;
end.
Разворачивается в:
begin
var f := System.IO.File.OpenRead('temp.txt');
var flag: boolean;
try
f.ReadByte;
flag := true;
raise new Exception;
except
on e: Exception do
begin
f.Close;
if not flag then
raise e;
end;
end;
end.
Зачем? В СIL ведь есть finally, и вы уже его использовали в другом участке компилятора:
begin
foreach var o in Seq(0) do
end.
Разворачивается в:
begin
var enm := Seq(0).GetEnumerator;
try
while enm.MoveNext do
System.Convert.ToInt32(enm.Current);
finally
enm := nil;
end;
end.
P.S. а не надо ли начать новую тему для 3.4? уже ведь 3.4.2 …
А почему запрещено не создавать переменную? Ведь не всегда надо делать это преобразование, бывают случаи когда достаточно знать тип переменной. Это разрешено:
try
except
on ArgumentException do writeln('неправильные аргументы');
on e: Exception do writeln(e);
end;
Можно предположить, что разработчики делали match-with с оглядкой на switch (для типов) из C#. Тем более, для проверки соответствия типов можно пользоваться оператором is. Хотя, я с Вами согласен, что снятие запрета может сделать код более компактным.