Delphi, C++, Ada — шпаргалка языковых фич

Несмотря на мои предпочтения в сторону языка Ада, эту страницу я постарался сделать как можно более информативной, объективной и как можно менее идеологизированной. Оформлено в виде таблицы. Каждый раз, как я смотрю на какой–то новый язык, разработчики подсовывают на видное место какие–то одни фичи, в то время, как меня волнуют совсем другие, и эти другие надо искать где–то в мануалах. Так как фичи выписаны в таблице, если что–то для одного языка является важным, с некоторой вероятностью всплывёт в этой таблице, а, значит, и в других языках. Таблицу пополняю в свободное время.

DelphiC++Ada
Объявление (некопируемого) классаtype
  TNewClass = class
   // ...
 end;

 
class new_class {
   // ...
private:
    new_class(const new_class& source) { }
}

 
type New_Class is limited tagged record
  -- ...
end record;
 
Инициализация полей конструктором по умолчаниюtype
  TNewClass = class
   // ...
 public
    FBar: Integer;
   constructor Create;
 end;

// ...

constructor TNewClass.Create;
begin
 inherited Create;
  FBar := 2;
end;
class new_class {
   // ...
public:
   int bar;
    new_class() : bar(2) { }
private:
    new_class(const new_class& source) { }
}
type New_Class is limited tagged record
  Bar : Integer := 2;
end record;
То же самое, но поле приватноеtype
  TNewClass = class
   // ...
 private
    FBar: Integer;
 public
   constructor Create;
end;

// ...

constructor TNewClass.Create;
begin
 inherited Create;
    FBar := 2;
end;
class new_class {
   // ...
private:
   int bar;
public:
    new_class() : bar(2) { }
private:
    new_class(const new_class& source) { }
}
type New_Class is limited tagged private;
-- ...
private -- приватная часть спецификации пакета
-- ...
type New_Class is limited tagged record
  Bar : Integer := 2;
end record;


В языке Ада контроль видимости не в типах, а в модулях. В частности, сделать одно поле видимым, а другое приватным возможно, только если отнаследовать дважды. Однако, примитивные операции могут быть частично публичными, частично приватными. Кроме того, родительский пакет может предоставлять не все операции с объектом сразу. Дочерние пакеты, имея доступ к внутреннему представлению могут предоставлять дополнительные операции. Например, Ada.Text_IO.Streams позволяет воспринимать открытые текстовые файлы как бинарные потоки.
Инициализация и гарантированное уничтожениеvar
  sl: TStringList;
// ...
sl := TStringList.Create;
try
 // ...
finally
 FreeAndNil(sl);
end;

Используя интерфейсы или варианты, можно и покороче, аналогично другим языкам
{
    vector<string> sl;
   // ...
}
declare
   s : VectorOfStrings;
begin
  -- ...
end;
Перегрузка операторовТолько, используя варианты или recordК любому типу, кроме тех, для которых объявлены операции по стандартуК любому типу, так же, как и другие функции.
Тэги:
Код для вставки: :: :: :: ГОСТ ::
Поделиться: //