C ++ для Ada с указателями и исключениями - PullRequest
0 голосов
/ 13 июня 2019

Я беру интервью у потенциальных кандидатов на разработку программного обеспечения и хотел бы перевести на Ada этот фрагмент кода C ++:

#include <iostream>

int main(int argc, char *argv[])
{
  int *W = NULL;
  try { *W = 3; }
  catch (...) { std::cout << "default exception"; }
}

Как и в случае кода C ++, я хочу, чтобы код Ada приводил к «завершается сигналом SIGSEGV».

Кстати, я использую последнюю версию GNAT (GNAT 9.1.1 20190503 (Red Hat 9.1.1-1) )

Ответы [ 3 ]

6 голосов
/ 13 июня 2019

Соответствующий код в Аде будет выглядеть примерно так:

with Ada.Text_IO; use Ada.Text_IO;

procedure SigSegV is
   type Int_Ptr is access Integer;

   W : Int_Ptr := null;
begin
   W.all := 3;
exception
   when others =>
      Put_Line ("default exception");
end SigSegV;

Но это не вызывает сигнал SIGSEGV, и вы получаете сообщение, как и ожидалось. Более того, компилятор уже предупреждал вас:

sigsegv.adb:8:04: warning: null value not allowed here
sigsegv.adb:8:04: warning: "Constraint_Error" will be raised at run time

Так что я не уверен, что вы можете получить то же поведение, что и в C ++, с кодом Ada ... Кроме вызова C ++ из Ada: D

2 голосов
/ 25 июня 2019
with Ada.Wide_Wide_Text_IO; use Ada.Wide_Wide_Text_IO;
with System;

procedure SigSegV is
   W : Integer with Import, Address => System.Null_Address;
begin
   W := 3;
exception
   when others =>
      Put_Line ("default exception");
end SigSegV;

SIGSEGV преобразуется в Standard.Storage_Error

0 голосов
/ 08 июля 2019

Проведя годы, работая с C ++ и только недавно с Ada, я полагаю, что если бы у меня был выбор самолета с авионикой, написанной на Ada, или самолета с авионикой, написанной на C ++, я бы прыгнул на самолет Ada.Я наблюдал, как C ++ растет с каждым выпуском нового стандарта, становясь все более сложным и, следовательно, все более неуправляемым.

Ada проста (по сравнению с C ++) и, следовательно, намного проще в управлении.Я не уверен, какие преимущества C ++ существуют по сравнению с Ada?Ни один из них не является очевидным ответом.

Обидно, что DoD полностью не справился с Ada, когда он был впервые представлен.Если бы они только заплатили Борланду за разработку "Турбо Ады", а затем отдали ее.

...