должно быть возможно выполнять проверку
В D должна допускаться проверка типов во время компиляции.
Комментарии
В этом предписании имеется в виду, что – насколько это осуществимо – должно быть возможно выполнять проверку на стадии компиляции, чтобы на стадии исполнения не могли происходить какие-либо ошибки типов.
Если в языке D поддерживается наследование типов, то такая поддержка должна подчиняться модели наследования, определенной в Части IV этой книги.108
D должен быть вычислительно полным. То есть в D могут поддерживаться ( но не должны требоваться) вызовы из так называемых “основных программ”, написанных на языках, отличных от D. Аналогично, в D может поддерживаться (но не должно требоваться) использование других языков программирования для реализации определяемых пользователями операций.
Инициация транзакций должны производиться только посредством явного выполнения операции “begin transaction”. Завершение транзакции должно производиться только посредством выполнения операций “commit” или “rollback”; фиксация всегда должна быть явной, а откат может быть неявным (в том и только в том случае, когда транзакция завершается неуспешно не по своей вине). Если транзакция TX
завершается фиксацией (“нормальное завершение”), то изменения, произведенные TX в соответствующей базе данных, должны быть зафиксированы. Если транзакция TX
завершается откатом (“аварийное завершение”), то изменения, произведенные транзакцией TX в соответствующей базе данных, должны быть аннулированы.
В D должны поддерживаться вложенные транзакции, т.е. должна допускаться инициация транзакцией-предком TX транзакции- потомка TX’ до завершения транзакции TX. При этом:
- TX и TX’
должны взаимодействовать с одной и той же базой данных (что в действительности требуется RM-предписанием 17);
- Потребуется ли задержка выполнения TX на время выполнения TX’, должно определяться в зависимости от реализации. Однако TX
не должна завершаться до завершения TX’; другими словами, TX’ должна полностью содержаться в TX.
- Откат TX должен включать откат TX’, даже если TX’ завершилась фиксацией. Другими словами, “фиксация” всегда интерпретируется в контексте предка (если он существует) и может быть отменена транзакцией-предком (опять же, если она существует).
Пусть AggOp – агрегатная
операция, такая как SUM. Если аргумент AggOp
является пустым, то:
- Если AggOp является сокращенной формой некоторой итеративной скалярной бинарной операции Op (в случае SUM это операция “+”), и если для Op существует начальное значение (0 в случае SUM), то результатом вызова AggOp должно быть это начальное значение.
- В противном случае результат вызова AggOp s должен быть неопределенным.