Por que não posso retornar um array arbitrário de string?

O compilador permite-me fazer o seguinte:

procedure MyProc(const ADynData: array of string);

ou

procedure MyProc(const ADynData: TStringDynArray);

e passar dados arbitrários da seguinte forma:

MyProc(['Data1', 'Data2']);

No entanto, não permitirá

function MyFunc: TStringDynArray;
....
function MyFunc: TStringDynArray;
begin
    Result := ['Data1', 'Data2'];
end;

ou

function MyFunc: TStringDynArray;
const
    CDynData: array[0..1] of string = ('Data1', 'Data2');
begin
    Result := CDynData;
end;

Por que é isso? Não é issotecnicamente a mesma coisa?

Para esses cenários específicos, qual é a maneira recomendada (e mais eficiente) de retornar um array arbitrário de string?

questionAnswers(3)

yourAnswerToTheQuestion