2012-07-23 1 views
0

Можете ли вы объяснить эти термины для меня: эталонная семантика и семантика значений (и как они контрастируют) и нелинейное изменчивое состояние. Они упоминаются в комментариях к обзору книги в этой ссылке http://lambda-the-ultimate.org/node/2849Может ли кто-нибудь объяснить эти термины программирования: эталонная семантика, нелинейное изменяемое состояние?

Книга, конечно, «Программирование: принципы и практике Использования C++» Многие комментаторы призывающей книги бесполезной для обучения за игнорирование эталонных семантик, я могу почти думаю, что это значит, но я не уверен на 100%.

Я думаю, что они имеют в виду программирование с использованием типов ссылок (например, классы) является способом пойти против программирования с использованием типов значений (например, структура)

Я сомневаюсь, мое понимание, потому что я сомневаюсь, что Бьерн stroustup бы сделать это, C++ является о классах ... поэтому я думаю, что есть что-то более глубокое в терминах семантики ссылок, что-то менее очевидное, по крайней мере, для меня.

Также использовались термины линейное и нелинейное состояния, которые кажутся интригующими, и которые я не знаю Понимаю.

Так что, если кто-то может объяснить эти термины, что было бы здорово

+2

В C++ классы и структуры в основном одинаковы. Их различие, безусловно, не имеет отношения к ссылочной и ценностной семантике. – juanchopanza

+0

Вы заметили, что «книга бесполезна» была написана 6 месяцев * до того, как была опубликована книга? Откуда они узнали? –

ответ

2

Не читать слишком много в эти комментарии. Они не такие просветительские.

В принципе, «эталонная семантика» означает, что вы используете int*, тогда как семантика значений означает, что вы используете int. «Achilleas Margaritis» жалуется, что в книге используется vector<int>, и он думает, что на самом деле вы обычно имеете vector<int*>. (Я, очевидно, не согласен).

«не-линейное изменяемое состояние» похоже на то, что я называю неортогональным состоянием. Например. вы можете установить Foo.x на 7 и Foo.y до 8, если только Foo.z не является 9. В частности, это означает, что набор разрешенных мутаций не зависит от предыдущих операций. Это правда, если вы управляете char[] самостоятельно, но мутаторы std::string ведут себя очень разумно.

+0

Все комментарии неверны! Даже этот. ;-П – rodrigo