Альтернативы C ++ Ссылка / Синтаксис указателя - PullRequest
3 голосов
/ 11 марта 2010

Какие языки, кроме C и C ++, имеют явные ссылки и квалификаторы типов указателей? Людей, кажется, легко смущает порядок чтения типов справа налево, где char*& - это «ссылка на указатель на символ» или «ссылка на указатель символа»; Используют ли языки с явными ссылками порядок чтения слева направо, например &*char / ref ptr char? Я работаю над небольшим языковым проектом, и разборчивость - одна из моих ключевых задач.

Мне кажется, что это один из тех вопросов, на которые человеку легко, а поисковой системе сложно дать ответ. Заранее спасибо!

Ответы [ 4 ]

5 голосов
/ 11 марта 2010

Страуструп отмечается как говорящий, что синтаксис объявления - «эксперимент, который не удался». К сожалению, C ++ должен согласиться с этим для совместимости с C. Первоначальная идея заключалась в том, что объявление выглядело как использование, например:

char * p;  // declare
* p;       // use (dereference)

но это быстро разваливается для более сложных объявлений. Многие люди (по крайней мере, многие программисты на Pascal) предпочитают синтаксис:

variable : type;

где тип что-то вроде:

array of char

, который читается примерно так, как вы собираетесь, и слева направо.

2 голосов
/ 11 марта 2010

Я думаю, что это несущественно, но это может быть полезно для вас: http://en.wikipedia.org/wiki/Significantly_Prettier_and_Easier_C%2B%2B_Syntax

1 голос
/ 11 марта 2010

Напротив, подход Perl 5 читается слева направо при разыменовании:

$i = 10;  # Scalar
say $i;

$j = \$i;  # Scalar reference
say $$j;

@a = (1, 2, 3);  # Array
$b = \@a;  # Array reference
say $a[0];
say $$b[0];  # prints same thing

Но, в отличие от C / C ++, сигил, используемый против имени переменной, определяет тип, который будет читаться (скаляр против массива и хеш)

say "Array size: " . scalar(@a);
say "Array size: " . scalar($@b);  # dereference with $, access as @ (array)
0 голосов
/ 11 марта 2010

Pascal обеспечивает псевдонимы типов. Вы не можете объявить:

myvar: ссылка на массив struct {.. указатель на символ.}

Вы должны объявить каждый шаг в цепочке отдельно в блоке TYPE.

Улучшает читаемость (если вы не возражаете против прокрутки вверх и вниз), возможно, также обеспечивает более легкий анализ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...