Правила (который не изменился в C++ 11):
std
, пространство имен резервируется. (Вам разрешают добавить шаблонные специализации, все же.) Из Стандарта C++ 2003 года:
17.4.3.1.2 Глобальных набора [lib.global.names]
Certain имен имен и функциональных подписей всегда резервируются к реализации:
- Каждое имя, которое содержит двойное подчеркивание (
__
) или начинается с подчеркивания, сопровождаемого прописной буквой (2.11), резервируется к реализации для любого использования.- Каждое имя, которое начинается с подчеркивания, резервируется к реализации для использования в качестве имени в глобальном пространстве имен. 165 глоток>
165) глоток> Такие имена также резервируются в пространстве имен
::std
(17.4.3.1).
, поскольку C++ основан на стандарте C (1.1/2, C++ 03), и C99 является нормативной ссылкой (1.2/1, C++ 03), они также применяются с 1999 C Стандарт:
7.1.3 Зарезервированных идентификатора
Каждый заголовок объявляет или определяет все идентификаторы, перечисленные в его связанном подпункте, и дополнительно объявляет или определяет идентификаторы, перечисленные в его связанном будущем подпункте направлений библиотеки и идентификаторах, которые всегда резервируются или для любого использования или для использования в качестве идентификаторов объема файла.
- Все идентификаторы, которые начинаются с подчеркивания и или прописная буква или другое подчеркивание, всегда резервируются для любого использования.
- Все идентификаторы, которые начинаются с подчеркивания, всегда резервируются для использования в качестве идентификаторов с объемом файла и в пробелах обычного и в имени тега.
- Каждое макро-имя в любом из следующих подпунктов (включая будущие направления библиотеки) резервируется для использования, как определено, если какой-либо из его связанных заголовков включен; если явно не указано иначе (см. 7.1.4).
- Все идентификаторы с внешней связью в любом из следующих подпунктов (включая будущие направления библиотеки) всегда резервируются для использования в качестве идентификаторов с внешней связью. 154 глоток>
- Каждый идентификатор с объемом файла, перечисленным в любом из следующих подпунктов (включая будущие направления библиотеки), резервируется для использования в качестве макро-имени и в качестве идентификатора с объемом файла в том же пространстве имен, если какой-либо из его связанных заголовков включен.
Никакие другие идентификаторы не резервируются. Если программа объявляет или определяет идентификатор в контексте, в котором она резервируется (кроме, как позволено 7.1.4) или определяет зарезервированный идентификатор как макро-имя, поведение не определено.
, Если программа удаляет (с
#undef
) какое-либо макроопределение идентификатора в первой упомянутой выше группе, поведение не определено.154) глоток> список зарезервированных идентификаторов с внешней связью включает
errno
,math_errhandling
,setjmp
, иva_end
.
Другие ограничения могли бы применяться. Например, стандарт POSIX резервирует много идентификаторов, которые, вероятно, обнаружатся в нормальном коде:
E
, следовали за цифрой или прописной буквой: is
или to
сопровождаемый строчной буквой LC_
сопровождаемый прописной буквой l
, резервируются SIG
сопровождаемый прописной буквой, резервируются SIG_
сопровождаемый прописной буквой, резервируются str
, mem
, или wcs
сопровождаемый строчной буквой, резервируются PRI
или SCN
сопровождаемый любой строчной буквой или X
, резервируются При использовании этих названий собственных целей прямо сейчас не мог бы вызвать проблему, они действительно указывают на возможность конфликта с будущими версиями того стандарта.
Лично я просто не запускаю идентификаторы с подчеркиваний. Новое дополнение к моему правилу: не используйте двойные подчеркивания нигде, который легок, поскольку я редко использую подчеркивание.
После проведения исследований в области этой статьи я больше не заканчиваю свои идентификаторы [1 123], поскольку это резервируется стандартом POSIX.
правило о любом идентификаторе, заканчивающемся [1 124], удивило меня много. Я думаю, что это - стандарт POSIX (не уверенный все же) поиск разъяснения и официальной главы и стиха. Это от GNU libtool руководство , перечисляя зарезервированные имена.
CesarB обеспечил следующую ссылку на POSIX 2004 зарезервированные символы и примечания, 'которыми много других зарезервированных префиксов и суффиксов... могут быть найдены там'. POSIX 2008 зарезервированные символы определяются здесь. Ограничения несколько более детальны, чем те выше.
Рассмотрите возможность использования библиотеки json lib Django, которая входит в состав GAE.
from django.utils import simplejson as json
# load the object from a string
obj = json.loads( string )
По ссылке выше приведены примеры сериализатора Django, а здесь - ссылка на документацию simplejson .
Если вы хотите сохранить экземпляры или объекты классов Python (в отличие от композиций списков, строк, чисел и словарей), вы, вероятно, захотите посмотреть на pickle .
Я надеюсь, что это поможет.
Между прочим, чтобы запустить Django 1.0 (вместо Django 0.96) в GAE, вы можете использовать следующий вызов в main.py согласно этой статье :
from google.appengine.dist import use_library
use_library('django', '1.0')
Начиная с Google App Engine 1.6.0, вы можете использовать среду выполнения Python 2.7 , добавив среду выполнения:python27
в app.yaml
, а затем вы можете импортировать собственную библиотеку JSON с помощью import json
.
Если вы используете Python2.6 или выше, я успешно использовал встроенную функцию json .load. В противном случае simplejson работает на 2.4 без зависимостей.
Посмотрите на раздел Python json.org . Поддержка стандартной библиотеки для JSON началась в python 2.6, который, как мне кажется, новее, чем то, что предоставляет движок приложения. Может быть, один из других перечисленных вариантов?