Без оператора Новый: Указатели будут удалены из встроенного языка 1C
Комитет по стандартизации встроенного ЯП 1СДве недели назад на Дмитровском шоссе встречался комитет стандартизации языка 1C.
Сегодня он хочет представить короткую сводку и написать о революционном решении, принятом на собрании в Москве.
Комитет по стандартизации языка принял решение о том, что оператор Новый будет объявлен устаревшим в 1C 9.0 и с большой долей вероятности будет удален из 1C 10.0.
Откровенно говоря, то, что кажется революционном, — всего лишь последний шаг длинной эволюции, начатой в 2003-м году удалением функции СоздатьОбъект
.
Указатели существуют в 1C с самого начала. Мы получили их из Бейсика. Но с самого начала развития 1C всегда была тенденция сделать управление указателями более удобными без значительных потерь.
В 1C 8.2 мы получили СтандартныйАвтоУказатель
для выражения исключительного владения. Но СтандартныйАвтоУказатель
имел большой изъян. Когда вы копируете СтандартныйАвтоУказатель
, владение ресурсом передавалось копии. Копирование выглядело как перемещение.
Это было очень плохо, приводило к множеству серьёзных багов. Поэтому мы получили СтандартныйУникальныйУказатель
в 1C 8.3, и объявили СтандартныйАвтоУказатель
устаревшим в 1C 8.3, и окончательно удалили из 1C 8.4.
Дополнительно мы получили СтандартныйРазделяемыйУказатель
и СтандартныйСлабыйУказатель
в 1С 8.4 для управления владением. Вы не можете копировать, но можете перемещать СтандартныйУникальныйыйУказатель
и если копируете или присваиваете СтандартныйРазделяемыйУказатель
, счётчик ссылающихся указателей увеличивается
Дополнительно мы получили и СтандартныйРазделяемыйУказатель
в 1C 8.4 для управления владением. Вы не можете копировать, но можете перемещать СтандартныйУникальныйыйУказатель
, и если копируете или присваиваете СтандартныйРазделяемыйУказатель
, счётчик ссылающихся указателей увеличивается.
Новая семантика владения.
Честно говоря, мы используем указатели и, в частности, обычные указатели очень часто. Вопрос, должны ли вы использовать указатель, сводится к следующему: Кто владелец? К счастью, с помощью кода мы можем чётко выразить это.
Локальные объекты.
Рантайм 1С как владелец автоматически управляет жизнью таких ресурсов. То же самое относится к глобальным объектам или членам класса "Справочники", которые сводят это к области видимости.
Ссылки: я не владелец. Я только обеспечиваю, что ресурс не может быть пустым.
Обычные указатели: я не владелец. Я только ссылаюсь на ресурс, если он есть. Я не должен удалять ресурс.
СтандартныйУникальныйУказатель: я исключительный владелец ресурса. Я могу явно освободить мой ресурс.
СтантартныйУникальныйУказатель: я разделяю ресурс с другим СтантартныйУникальныйУказатель-ем. Я могу явно удалить мой разделяемый ресурс, если он больше никому не нужен.
СтантартныйСлабыйУказатель: я не владелец ресурса, но я могу временно разделять ресурс при вызове моего метода СтантартныйСлабыйУказатель::Заблокировать.
СтантартныйСильныйУказатель: мы не решили, что он будет делать, но специально зарезервировали его для Вас.
Нам нужно будет изменить только одну из шести практик использования указателей и мы уверены, что Вы будете рады следующему шагу в развитии встроенного языка 1C, позволяющему радикально улучшить Ваш контроль над создаваемыми объектами, тем самым сэкономив на закупках новых модулей памяти для серверов.