Типы неизменяемых объектов

Изобретение относится к компьютерно-реализуемому способу, машиночитаемому носителю и вычислительной системе для обеспечения неизменяемости экземпляров типа объекта. Технический результат заключается в автоматическом управлении экземпляром типа объекта. Способ содержит этапы, на которых осуществляют доступ в исходном коде программного обеспечения к содержащему явную аннотацию к типу объекта объявлению, которым задается то, что данный тип объекта является неизменяемым, в ответ на осуществление доступа к объявлению, выполняют этапы, на которых автоматически формулируют машиноисполняемые команды, которые реализуют то, что каждый экземпляр упомянутого типа объекта классифицируется как неизменяемый после его создания, включая команды, которые игнорируют любое заданное пользователем разрешение для данного типа объекта, так что все экземпляры этого типа объекта являются неизменяемыми, даже если присвоено разрешение изменяемый, также то, что все прямо или косвенно доступные элементы экземпляра упомянутого типа объекта классифицируются как неизменяемые, а также то, что существование любой ссылки, позволяющей выполнять присвоение полей экземпляра упомянутого типа объекта, не допускается после момента, в который данный экземпляр становится доступным создателю этого экземпляра. 3 н. и 18 з.п. ф-лы, 4 ил.

 

Уровень техники изобретения

[0001] Вычислительные системы получили высокую степень функциональности посредством исполнения системных программ. Программы состоят из исполняемых компьютером команд, которые хранятся в какой-либо постоянной форме, такой как на жестком диске, компакт-диске, флэш-накопителе, флэш-памяти или подобном. В ходе исполнения, такие исполняемые компьютером команды могут зачастую загружаться в постоянное запоминающее устройство и выполняться посредством одного или более процессоров вычислительной системы, производя выполнение задач вычислительной системой.

[0002] В объектно-ориентированном программировании, эти исполняемые компьютером команды организованы в объекты, которые взаимодействуют через вызовы функций и они могут иметь одно или несколько свойств. Управляемый код является кодом, который выполняется в управляемой среде, которая обеспечивает безопасность с точки зрения типов, но также может обеспечивать управление распределением памяти и обработку исключительных ситуаций. В управляемом коде, объекты имеют неограниченное время жизни, никаких ограничений по хранению, и способы ограничения доступа подразумевают использование косвенной адресации или дополнительных ресурсов.

[0003] Программирование системного уровня основано на жестком и эффективном управлении доступом к и временем жизни ресурсов (таких, как объекты) во всей системе. Один общий способ обеспечения такого жесткого управления заключается в использовании прикладного программного интерфейса (API) для управления временем жизни и доступом к ресурсам.

Сущность изобретения

[0004] Описанные в настоящем документе, по меньшей мере, некоторые варианты осуществления относятся к расширению языка, которое улучшает надежность в системном программировании. В соответствии с расширением языка, весь тип может быть объявлен как являющийся неизменяемый в случае, в котором все экземпляры этого типа являются неизменяемыми. Описание неизменяемых типов автоматически вызывает рассмотрение любых экземпляров этого типа как неизменяемых, и также автоматически вызывает рассмотрение всех прямо или косвенно достижимых элементов (например, полей, методов, свойств) экземпляра как неизменяемых. Кроме того, любая привязка ко времени конструирования, которая предусматривает присвоение полей в экземпляре, не разрешается для сохранения работоспособности после момента, в котором экземпляр становится доступным создателю. Соответственно, этот экземпляр, и любой другой экземпляр того же самого типа, будут неизменяемыми с самого момента их конструирования.

[0005] Способность классифицировать все такие экземпляры как неизменяемые является существенной, поскольку неизменяемая характеристика позволяет выполнять действия, которые обычно не будут разрешены по причине безопасности доступа к ресурсам. Например, экземпляр может совместно использоваться между несколькими компонентами и несколькими потоками, поскольку нет никакого риска того, что эти компоненты и потоки так или иначе будут выполнять конфликтующие действия в отношении экземпляра.

[0006] Это краткое изложение сущности изобретения не предназначено ни для определения ключевых признаков или существенных признаков заявленного изобретения, ни для использования для помощи в определении объема заявленного изобретения.

Краткое описание чертежей

[0007] Для описания способа, посредством осуществления которого могут быть получены вышеупомянутые и другие преимущества и признаки, будет предоставлено более конкретное описание различных вариантов осуществления посредством ссылки на сопроводительные чертежи. Понимая, что данные чертежи изображают исключительно типовые варианты осуществления и, следовательно, не должны рассматриваться как ограничивающие объем изобретения, будут описаны и объяснены варианты осуществления с дополнительной спецификой и деталями с помощью сопроводительных чертежей, на которых:

[0008] Фиг.1 абстрактно иллюстрирует вычислительную систему, в которой могут быть использованы некоторые описанные в настоящем документе варианты осуществления;

[0009] Фиг.2 абстрактно иллюстрирует систему управляемых кодов, которая представляет иллюстративную среду, в которой могут быть использованы описанные в настоящем документе варианты осуществления;

[0010] Фиг.3 иллюстрирует среду, которая включает в себя среду разработки, в которой исходный код, в котором может быть выполнено описание неизменяемых типов в соответствии с принципами, описанными в настоящем документе; и

[0011] Фиг.4 иллюстрирует схему последовательности операций способа обеспечения того, что множество экземпляров типа объекта являются неизменяемыми, в соответствии с вариантами осуществления, описанными в настоящем документе.

Подробное описание

[0012] В соответствии с описанными в настоящем документе вариантами осуществления, описано расширение языка, которое повышает надежность в системном программировании, в котором весь тип может быть объявлен как неизменяемый. Описание неизменяемых типов автоматически вызывает рассмотрение любых экземпляров этого типа как неизменяемых, а также автоматически вызывает рассмотрение всех прямо или косвенно достижимых элементов (например, полей, методов, свойств) экземпляра как неизменяемых. Кроме того, осуществление любой привязки по времени конструирования, которая предусматривает присвоение полей в экземпляре, не разрешается после момента, в котором экземпляр становится доступным создателю. Соответственно, этот экземпляр, и любой другой экземпляр того же самого типа, будут неизменяемыми с самого момента их конструирования. Способность классифицировать все такие экземпляры как неизменяемые является существенной, поскольку неизменяемая характеристика позволяет выполнять действия, которые обычно не будут разрешены по причине безопасности доступа к ресурсам. Например, экземпляр может совместно использоваться между несколькими компонентами и несколькими потоками, поскольку нет никакого риска, что эти компоненты и потоки, так или иначе, будут выполнять конфликтующие действия в отношении экземпляра.

[0013] Со ссылкой на Фиг.1 будет выполнено небольшое предварительное обсуждение вычислительной системы. Затем, со ссылкой на Фиг.2, будет описана система управляемых кодов. И наконец, со ссылкой на Фиг.3 и 4, будут описаны принципы расширения языка для объявления неизменяемых типов.

[0014] В настоящее время, вычислительные системы принимают все более и более широкий спектр форм. Вычислительные системы могут, например, быть портативными устройствами, бытовым электронным оборудованием, ноутбуками, настольными компьютерами, универсальными вычислительными машинами, распределенными вычислительными системами, или даже устройствами, которые традиционно не считались вычислительной системой. В этом описании и в формуле изобретения, термину «вычислительная система» дано широкое определение, как включающему в себя любое устройство или систему (или их сочетание), которое включает в себя, по меньшей мере, один физический и реальный процессор, и физическое и реальное запоминающее устройство, способное иметь записанные на нем исполняемые компьютером команды, которые могут быть выполнены посредством процессора. Запоминающее устройство может принимать любую форму и может зависеть от характера и формы вычислительной системы. Вычислительная система может быть распределена по сетевой среде и может включать в себя несколько составляющих вычислительных систем.

[0015] Как иллюстрировано на Фиг.1, в ее самой базовой конфигурации, вычислительная система 100, как правило, включает в себя, по меньшей мере, один процессор 102 и запоминающее устройство 104. Запоминающее устройство 104 может быть физическим системным запоминающим устройством, которое может быть энергозависимым, энергонезависимым или каким-либо их сочетанием. Термин «запоминающее устройство» также может быть использован в настоящем документе для ссылки на энергонезависимое запоминающее устройство большой емкости, такое, как физические среды хранения данных. Если вычислительная система является распределенной, то обработка данных, запоминающее устройство и/или емкость накопителя данных также могут быть распределенными. Используемые в настоящем документе термины «выполняемый модуль» или «выполняемый компонент» могут относиться к программным объектам, маршрутизации или способам, которые могут быть выполнены посредством вычислительной системы. Различные компоненты, модули, подсистемы и службы, описанные в настоящем документе, могут быть реализованы в виде объектов или процессов, которые выполняются в вычислительной системе (например, в виде отдельных потоков).

[0016] В последующем описании, варианты осуществления описаны со ссылкой на действия, которые выполняются посредством одной или более вычислительных систем. Если такие действия реализованы в программных средствах, то один или более процессоров соответствующей вычислительной системы, которая совершает действие, направляет операцию вычислительной системы в ответ на факт выполнения исполняемых компьютером команд. Например, такие исполняемые компьютером команды могут быть реализованы на одной или более машиночитаемых средах, которые формируют компьютерный программный продукт. Пример такой операции предполагает манипуляцию данными. Исполняемые компьютером команды (и манипулируемые данные) могут храниться в запоминающем устройстве 104 вычислительной системы 100. Вычислительная система 100 также может содержать каналы 108 обмена данными, которые обеспечивают возможность вычислительной системе 100 обмениваться данными с другими процессорами обработки сообщений, например, с сетью 110.

[0017] Варианты осуществления, описанные в настоящем документе, могут содержать или использовать компьютер специального назначения или общего назначения, включающий в себя аппаратные средства вычислительной техники, такие как, например, один или более процессоров и системных запоминающих устройств, которые более подробно обсуждаются ниже. Варианты осуществления, описанные в настоящем документе, также содержат физическую и другую машиночитаемые среды (носители) для транспортирования или хранения исполняемых компьютером команд и/или структур данных. Такая машиночитаемая среда может являться любой доступной средой, к которой может быть получен доступ посредством компьютерной системы общего назначения или специального назначения. Машиночитаемая среда, на которой хранятся исполняемые компьютером команды, является физической средой хранения данных. Машиночитаемая среда, которая транспортирует исполняемые компьютером команды, является средой передачи данных. Следовательно, для примера, но не ограничения, варианты осуществления изобретения могут содержать, по меньшей мере, два явно различных вида машиночитаемых сред: среду хранения данных и среду передачи данных.

[0018] Среды хранения данных для вычислительных машин включают в себя RAM (оперативное запоминающее устройство), ROM (постоянное запоминающее устройство), EEPROM (электрически-стираемое программируемое постоянное запоминающее устройство), CD-ROM (постоянное запоминающее устройство на компакт-диске) или другой накопитель на оптических дисках, накопитель на магнитных дисках или другие магнитные запоминающие устройства, или любую другую среду, которая может быть использована для хранения требуемых средств программного кода в форме исполняемых компьютером команд или структур данных, и к которым можно получить доступ посредством компьютера общего назначения или специального назначения.

[0019] «Сеть» определена как один или более каналов передачи данных, которые обеспечивают возможность транспортирования электронных данных между компьютерными системами и/или модулями и/или другими электронными устройствами. При передаче и предоставлении информации по сети или другому коммуникационному соединению (проводному, беспроводному, или комбинации проводного и беспроводного) на компьютер, компьютер должным образом рассматривает соединение в качестве среды передачи данных. Среда передачи данных может включать в себя сеть и/или каналы передачи данных, которые могут быть использованы для транспортирования требуемых средств программного кода в форме исполняемых компьютером команд или структур данных, и к которым можно получить доступ посредством компьютера общего назначения или специального назначения. Комбинации вышеупомянутых элементов также должны находиться в рамках понятия машиночитаемой среды.

[0020] Кроме того, после достижения различных компонентов компьютерной системы, средство программного кода в форме исполняемых компьютером команд или структур данных может быть автоматически передано из среды передачи данных в среду хранения данных вычислительной машины (или наоборот). Например, исполняемые компьютером команды или структуры данных, принятые по сети или каналу обмена данными, могут быть помещены в буфер в RAM в пределах модуля сетевого интерфейса (например, «NIC (плата сетевого интерфейса)»), а затем, в конечном счете, переданы в RAM компьютерной системы и/или на менее энергозависимую среду хранения данных вычислительной машины в компьютерной системе. Таким образом, следует понимать, что среда хранения данных вычислительной машины может быть включена в состав компонентов компьютерной системы, в которых также (или даже в первую очередь) используется среда передачи данных.

[0021] Исполняемые компьютером команды включают в себя, например, команды и данные, которые, при их исполнении в процессоре, вызывают выполнение определенной функции или группы функций компьютером общего назначения, компьютером общего назначения или устройством обработки данных специального назначения. Исполняемые компьютером команды могут быть, например, двоичными кодами, командами промежуточных форматов, такими как язык ассемблера, или даже исходным кодом. Несмотря на то, что предмет изобретения был описан языком, определенным для структурных признаков и/или методологических действий, следует понимать, что объект изобретения, определяемый приложенной формулой изобретения, не обязательно ограничен описанными признаками или вышеописанными действиями. Скорее, описанные признаки и действия раскрыты в виде иллюстративных форм реализации формулы изобретения.

[0022] Специалисты в данной области техники поймут, что изобретение может быть осуществлено на практике в среде сетевых вычислений со многими типами конфигураций компьютерных систем, включая персональные компьютеры, настольные компьютеры, ноутбуки, процессоры обработки сообщений, портативные устройства, мультипроцессорные системы, микропроцессорная или программируемая бытовая электроника, сетевые PC (персональные компьютеры), миникомпьютеры, универсальные вычислительные машины, мобильные телефоны, PDA (карманные персональные компьютеры), пейджеры, маршрутизаторы, коммутаторы, и т.п. Изобретение также может быть осуществлено в средах распределенной системы, где задачи выполняются обеими системами, а именно локальной и удаленной компьютерными системами, которые соединены (посредством проводных каналов передачи данных, беспроводных каналов передачи данных, или посредством комбинации проводных и беспроводных каналов передачи данных) через сеть. В среде распределенной системы, программные модули могут быть расположены как в локальных, так и в удаленных запоминающих устройствах.

[0023] Фиг.2 иллюстрирует среду 200, в которой могут работать описанные в настоящем документе принципы. Среда 200 включает в себя инфраструктуру 210, которая отслеживает изоляцию и изменяемость объектных графов. Инфраструктура 210 организовывает различные ссылки 221 на объектные графы посредством управления доступом к ссылке. Ссылка может быть локальной переменной, параметром метода, полем объекта или любой другой ссылкой на объектный граф. В иллюстрированном варианте осуществления, ссылки 221 иллюстрированы как включающие в себя ссылки 221A-221E, при том, что эллипсы 221F символически представляют, что инфраструктура 210 может управлять доступом к любому количеству ссылок 220.

[0024] Инфраструктура 210 управляет доступом к ссылкам 221 посредством присвоения разрешений ссылкам. «Разрешение» является аннотацией к ссылке, которая указывает какое-либо свойство насчет возможности изменения ссылки. Такие разрешения абстрактно представлены посредством разрешений 211 на Фиг.2. Разрешения включают в себя разрешения 211A «читаемая», разрешения 211B «записываемая» и разрешения 211С «неизменяемая».

[0025] Разрешение 211A «читаемая» означает, что может быть выполнено только чтение из соответствующего объекта (и всех его прямо и косвенно доступных элементов).

[0026] Разрешение 211B «записываемая» означает, что может быть выполнена запись в соответствующий объект.

[0027] Разрешение 211С «неизменяемая» является аналогичным разрешению 211A «читаемая», но оно дополнительно обеспечивает, что больше никто не имеет перезаписываемой ссылки на этот объект. Разрешение 211С «неизменяемая» может дополнительно обеспечивать, что больше никогда не будет перезаписываемой ссылки на этот объект. Таким образом, разрешение 211С «неизменяемая» означает, что никогда не будет выполнена запись в соответствующий объект (и никогда не будет выполнена запись во все его прямо и косвенно доступные элементы), а так же никогда не будет выполнена запись во все его поля и все поля его полей, и т.д. Все постоянные поля в объекте рассматриваются инфраструктурой 210 как имеющие неизменяемое разрешение 211С.

[0028] Разрешение 211D «новая», означает, что 1) нет никаких внешних ссылок на конкретный объектный граф (или любой объект в пределах конкретного объектного графа), на который ссылается возвращаемая ссылка, и 2) нет никаких изменяемых ссылок в пределах объектного графа на любой объект за пределами объектного графа. Разрешение 211E «не сконструирована» будет более подробно описано ниже.

[0029] Инфраструктура 210 также включает в себя блок 212 управления изолированной памятью, который аннотирует участки памяти как изолированные. Аннотация «изолированный» для участка запоминающего устройства означает, что в этом участке хранится значение, которое является внешне уникальным. То есть, для любого объекта, хранящегося в данном участке, нет никаких внешних ссылок на этот объект в системе, и, при этом, нет никаких ссылок ни на один из прямо или косвенно доступных элементов объекта, хранящегося в данном участке. Например, блок 212 управления изолированной памятью осуществляет управление изолированными участками 222 памяти. Участки изолированной памяти проиллюстрированы как включающие в себя два участка 222A и 222B изолированной памяти, притом, что эллипсы 222C представляют, что участки 222 изолированной памяти могут включать в себя любое количество участков изолированной памяти.

[0030] Компонент 201 аннотирования основан на инфраструктуре 210. Альтернативно или дополнительно, компонент 201 аннотирования может функционировать как часть инфраструктуры 210. Компонент 201 аннотирования сконфигурирован для оценки исполняемого компонента, который возвращает ссылку, такую как одна из ссылок 221 по Фиг.2.

[0031] Настоящее описание ориентировано на актуальную задачу в системе, имеющей дело со связанными со ссылками разрешениями, относительно того, как представлять тип, который всегда является неизменяемым по завершении конструирования. Поля этих типов являются неизменяемыми и доступны только для чтения, и они не могут быть изменены даже при помощи перезаписываемой ссылки. Просто не существуют никакого механизма, посредством которого может произойти изменение. Далее в настоящем документе эти типы будут упоминаться «как неизменяемые типы», а все остальные - как «изменяемые типы».

[0032] Неизменяемые типы распространены в системном программировании в связи с тем, что они представляют часть данных, которые могут свободно совместно использоваться среди различных компонентов и различных потоков. Нет никакой опасности, что один компонент может изменить данные таким образом, что эффекты будут заметны для другого компонента.

[0033] Первая проблема при классификации неизменяемых типов заключается в том, что неизменяемые типы зачастую берут входные параметры, классифицированные в их конструкторах как «перезаписываемые». Однако, перезаписываемые входные данные не сохраняются в поле, за исключением случая, когда экземпляр находится в процессе конструирования, и, следовательно, тип объекта, в целом, больше не может рассматриваться как неизменяемый и, вместо этого, будет иметь изменяемый тип. Однако, неизменяемые типы могут выполнять вычисление некоторых неизменяемых данных на основе перезаписываемого входного параметра, а затем сохранять это окончательное неизменяемое значение в виде поля. Таким образом, неизменяемый тип сохраняет свою неизменяемую характеристику с момента конструирования соответствующих экземпляров.

[0034] Если входные данные в конструктор содержат исключительно неизменяемые или новые входные данные, то объект может быть переведен в «неизменяемый». Однако, это правило не приводит к классификации всех неизменяемых объектов как неизменяемых. Например, рассмотрим следующий пример псевдокода:

public class Container

{

readonly immutable string m_name;

readonly immutable string m_address;

public Container(writable Student student)

{

m_name = student.Name;

m_address = student.Address;

}

}

[0035] В этом примере, Container является неизменяемым на практике после конструирования, однако тип Container получает входной параметр под названием Student, который объявлен как являющийся перезаписываемым. Следовательно, правило (что, если входные данные в конструктор содержат исключительно входные параметры с разрешениями «неизменяемая» или «новая», то объект может быть переведен в «неизменяемый») будет, таким образом, запрещать перевод этого типа в неизменяемый в связи с тем, что он получает перезаписываемые входные данные. Это позволит максимизировать читаемое разрешение.

[0036] Вторая проблема заключается в определении общего хранилища для неизменяемых и не неизменяемых типов. При программировании предпочтительно задать участок памяти, который может быть хранилищем для любого объекта, так чтобы сохраненное значение могло быть извлечено в первоначальном состоянии. Этот процесс оканчивается неудачно, если участок-хранилище должен принимать изменяемые и неизменяемые типы, поскольку нет никакого возможного разрешения, которое работает для обоих типов. Рассмотрим следующий пример псевдокода:

writable Student student = ...;

immutable string name = ...;

??? object storage;

if (condition) {

storage = name;

}

else {

storage = student;

}

[0037] В этом примере нет никакого способа подобрать разрешение для локали «storage», которое позволит выполнять присвоение как от «student», так и от «storage», и позволит извлекать их с первоначальным разрешением. Каждое разрешение имеет проблему. Например, разрешение «записываемая» будет предотвращать присвоение «name», поскольку неизменяемая ссылка не может быть сохранена в ссылке, помеченной как «записываемая». Разрешение «изменяемая» будет предотвращать присвоение «student», поскольку перезаписываемая ссылка не может быть сохранена в неизменяемом хранилище. Разрешение «читаемая» будет предотвращать присвоение в и извлечение из «storage», поскольку присваиваемые и извлекаемые значения будут иметь разрешения, отличные от тех, которыми они первоначально обладали.

[0038] Принципы, описанные в настоящем документе, решают эти проблемы посредством введения концепции неизменяемого типа. Она является явно заданной аннотацией, которую пользователь добавляет к объявлению типа, для указания того, что все экземпляры типа являются неизменяемыми. Например, несмотря на то, что принципы, описанные в настоящем документе, не ограничены способом, которым объявляется неизменяемый тип, рассмотрим следующий иллюстративный псевдокод:

immutable class String {

}

[0039] Фиг.3 иллюстрирует среду 300, в которой могут быть использованы принципы, описанные в настоящем документе. Процессы 310 разработки (такие как программа разработки) позволяют программированию или другому субъекту программирования (такому как программные средства) генерировать код 311 (такой как исходный код или код языка-посредника), который включает в себя объявление 312 неизменяемого типа, пример которого изображен непосредственно сверху. Затем, компилятор 320 выполняет компиляцию кода 311 и, вслед за этим, встречается с объявлением 312 неизменяемого типа.

[0040] Фиг.4 иллюстрирует схему последовательности операций способа 400 обеспечения того, что несколько экземпляров типа объекта являются неизменяемыми. Способ 400 может быть выполнен посредством компилятора после доступа к объявлению того, что тип объекта является неизменяемым (действие 401). Например, со ссылкой на Фиг.3, способ 400 может быть выполнен после осуществления компилятором 320 доступа к объявлению 312 неизменяемого типа.

[0041] В ответ на это объявление, компилятор автоматически формулирует исполняемые компьютером команды, с тем чтобы каждый экземпляр этого типа объекта был классифицирован как неизменяемый (действие 411). Это приводит к тому, что все другие экземпляры неизменяемого типа становятся неявно «неизменяемыми». Кроме того, все прямо или косвенно доступные элементы экземпляра этого типа объекта классифицируются как неизменяемые (действие 412). Например, все типы, области, методы и свойства, которые прямо или косвенно доступны посредством экземпляра, неявно помечаются разрешением «неизменяемый». Кроме того, осуществление любой ссылки, которая позволяет выполнять присвоение полей экземпляра данного объекта во время конструирования, не разрешается после момента, в котором экземпляр становится доступным издателю (действие 413). Например, разрешению для «this» в конструкторе неявно присваивается разрешение, называемое «не сконструирован». Это разрешение иллюстрировано на Фиг.2 как разрешение 211E «не сконструирована».

[0042] Ключевым свойством неизменяемых типов является то, что им разрешено изменять их состояние во время конструирования, но как только конструирование завершается, любой экземпляр, сконструированный из неизменяемого типа, не может никогда снова изменяться (и, следовательно, является неизменяемым). Далее вводятся в действие следующие правила, действующие после конструирования: 1) поля являются неизменяемыми и, следовательно, не могут изменяться самостоятельно, 2) все сконструированные экземпляры неизменяемого типа являются неизменяемыми, и, следовательно, они не могут выполнять повторное присвоение своих полей (любой элемент, который попытался выполнить повторное присвоение или изменение поля будет отловлен во время компиляции).

[0043] Изменение во время конструирования достигается c помощью разрешения 211E «не сконструирована» (см. Фиг.2). Это разрешение позволяет выполнять по целевой ссылке чтение из полей и запись в поля. Для сохранения инвариантов неизменяемости, нельзя ссылке «this», которая позволяет выполнять присвоение полей, позволить пережить конструктор. Возникнет проблема, если ссылка может быть сохранена с разрешением «не сконструирована» в перезаписываемых входных данных и использована после завершения конструктором дальнейшего изменения объекта. Также значение «this» не может рассматриваться в качестве полностью сконструированного объекта Address, пока конструктор не завершил свою работу. Это позволит объекту Address выглядеть неизменяемым, даже если к нему все еще применялись изменения. Рассмотрим следующий пример псевдокода:

public immutable class Address

{

public Address(out notconstructed Address p)

{

p = this;

Address address = this;

}

}

[0044] Если бы любое из вышеупомянутых присваиваний от «this» было допустимым, то это позволило бы рассматривать полностью сконструированный экземпляр Address как изменяемое. Это разрешение «не сконструирован» предотвращает любое присваивание. Данное разрешение не может быть сформулировано пользователем и, следовательно, не может появляться ни в каком участке хранилища. Вышеупомянутое объявление параметра в примере псевдокода просто было бы недопустимым с точки зрения компилятора. Разрешение «не сконструирован» также не может быть преобразовано в любой другой тип разрешения (даже в читаемое). Этим гарантируется, что оно никогда не переживет конструктор, поскольку невозможно задать участок памяти, в котором оно хранится.

[0045] Эти ограничения означают, что как только неизменяемый тип завершает конструирование, он всегда является неизменяемым. Следовательно, все экземпляры сконструированного неизменяемого типа неявно помечаются разрешением «неизменяемый». Любое разрешение, которое пользователь связывает с типом, включая «записываемый», просто игнорируется системой типов. Изменения просто не возможны, и, следовательно, разрешение больше не является надлежащим.

[0046] Поскольку экземпляр больше никогда не сможет производить изменение, экземпляры неизменяемого типа теперь можно сохранять в участки памяти, которые помечены для изменения. Рассмотрим следующий пример псевдокода:

string si = "test";

immutable string s2 = s1;

writable string s3 = s1;

writable object о1 = s1;

[0047] Следовательно, этим, опять же, допускается общее хранилище для неизменяемых и изменяемых типов. Кроме того, объекты, которые нельзя было бы в ином случае рассматривать как неизменяемые, теперь могут быть безопасно классифицированы как неизменяемые, обеспечивая возможность безопасного совместного использования экземпляров среди различных процессов, без проблемы, связанной с тем, что эти процессы будут мешать друг другу в отношении использования неизменяемого объекта.

[0048] Настоящее изобретение может быть реализовано в других конкретных формах, без отступления от его сущности или важных характеристик. Описанные варианты осуществления должны рассматриваться во всех отношениях исключительно как иллюстративные, а не ограничивающие. Следовательно, объем изобретения определяется приложенной формулой изобретения, а не предшествующим описанием. Все изменения, которые подпадают под содержание и объем эквивалентов формулы изобретения, должны быть охвачены определяемым ею объемом.

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

осуществляют доступ к объявлению в исходном коде программного обеспечения, причем объявление содержит явную аннотацию к типу объекта, при этом объявлением задается то, что данный тип объекта является неизменяемым; и

в ответ на осуществление доступа к объявлению, выполняют следующие этапы, на которых:

автоматически формулируют машиноисполняемые команды, которые реализуют то, что каждый экземпляр упомянутого типа объекта классифицируется как неизменяемый после его создания, включая формулирование машиноисполняемых команд, которые игнорируют любое заданное пользователем разрешение для данного типа объекта, так что все экземпляры этого типа объекта являются неизменяемыми, даже если присвоено разрешение 'изменяемый';

автоматически формулируют машиноисполняемые команды, которые реализуют то, что все прямо или косвенно доступные элементы экземпляра упомянутого типа объекта классифицируются как неизменяемые; и

автоматически формулируют машиноисполняемые команды, которые реализуют то, что существование любой ссылки, которая позволяет выполнять присвоение полей экземпляра упомянутого типа объекта, не допускается после момента, в который данный экземпляр становится доступным создателю этого экземпляра.

2. Компьютерно-реализуемый способ по п.1, в котором по меньшей мере один экземпляр неизменяемого типа объекта принимает одно или более перезаписываемых входных значений.

3. Компьютерно-реализуемый способ по п.2, в котором ни одно из упомянутых одного или более перезаписываемых входных значений не сохраняется в поле какого-либо из упомянутого по меньшей мере одного экземпляра.

4. Компьютерно-реализуемый способ по п.1, в котором один или более элементов экземпляра ссылки включают в себя разрешение, которое не является разрешением 'неизменяемый'.

5. Компьютерно-реализуемый способ по п.1, в котором нет никакого механизма, чтобы сделать какой-либо из экземпляров упомянутого типа объекта изменяемым.

6. Компьютерно-реализуемый способ по п.1, в котором элементы экземпляра представляют собой все из полей, методов и свойств экземпляра.

7. Компьютерно-реализуемый способ по п.1, в котором ссылка, которая позволяет выполнять присвоение полей, является ссылкой 'this' конструктора экземпляров, который создает экземпляры упомянутого типа объекта.

8. Компьютерно-реализуемый способ по п.1, в котором совокупность из одного или более действий, которые могут быть выполнены в отношении ссылки, которая позволяет выполнять присвоение полей, ограничена таким образом, чтобы ссылка не сохранялась в виде поля.

9. Компьютерно-реализуемый способ по п.8, в котором упомянутая совокупность из одного или более действий включает в себя чтение и запись.

10. Компьютерно-реализуемый способ по п.1, дополнительно содержащий этап, на котором формулируют объектный граф, содержащий ссылки на объекты, включая присвоение разрешения для каждой ссылки в объектном графе, при этом упомянутое формулирование машиноисполняемых команд, которые реализуют то, что все прямо или косвенно доступные элементы экземпляра упомянутого типа объекта классифицируются как неизменяемые, включает в себя этап, на котором помечают каждую ссылку на каждый прямо или косвенно доступный элемент как неизменяемую в объектном графе.

11. Машиночитаемый носитель данных, на котором сохранены машиноисполняемые команды, которые при их исполнении одним или более процессорами вычислительной системы предписывают вычислительной системе выполнять способ обеспечения того, что множество экземпляров типа объекта являются неизменяемыми, содержащий этапы, на которых:

осуществляют доступ к объявлению в исходном коде программного обеспечения, причем объявление содержит явную аннотацию к типу объекта, при этом объявлением задается то, что данный тип объекта является неизменяемым; и

в ответ на осуществление доступа к объявлению, выполняют следующие этапы, на которых:

автоматически формулируют машиноисполняемые команды, которые реализуют то, что каждый экземпляр упомянутого типа объекта классифицируется как неизменяемый после его создания, включая формулирование машиноисполняемых команд, которые игнорируют любое заданное пользователем разрешение для данного типа объекта, так что все экземпляры этого типа объекта являются неизменяемыми, даже если присвоено разрешение 'изменяемый';

автоматически формулируют машиноисполняемые команды, которые реализуют то, что все прямо или косвенно доступные элементы экземпляра упомянутого типа объекта классифицируются как неизменяемые; и

автоматически формулируют машиноисполняемые команды, которые реализуют то, что существование любой ссылки, которая позволяет выполнять присвоение полей экземпляра упомянутого типа объекта, не допускается после момента, в который данный экземпляр становится доступным создателю этого экземпляра.

12. Машиночитаемый носитель данных по п.11, при этом по меньшей мере один экземпляр неизменяемого типа объекта принимает одно или более перезаписываемых входных значений.

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

14. Машиночитаемый носитель данных по п.11, при этом один или более элементов экземпляра ссылки включают в себя разрешение, которое не является разрешением 'неизменяемый'.

15. Машиночитаемый носитель данных по п.11, при этом нет никакого механизма, чтобы сделать какой-либо из экземпляров упомянутого типа объекта изменяемым.

16. Машиночитаемый носитель данных по п.11, при этом элементы экземпляра представляют собой все из полей, методов и свойств экземпляра.

17. Машиночитаемый носитель данных по п.11, при этом ссылка, которая позволяет выполнять присвоение полей, является ссылкой 'this' конструктора экземпляров, который создает экземпляры упомянутого типа объекта.

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

19. Вычислительная система, выполненная с возможностью обеспечения того, что множество экземпляров типа объекта являются неизменяемыми, при этом вычислительная система содержит:

один или более процессоров; и

одно или более аппаратных запоминающих устройств, на которых сохранены машиноисполняемые команды, которые при их исполнении одним или более процессорами предписывают вычислительной системе реализовывать компилятор, выполненный с возможностью, по меньшей мере:

осуществлять доступ к объявлению в исходном коде программного обеспечения, причем объявление содержит явную аннотацию к типу объекта, при этом объявлением задается то, что данный тип объекта является неизменяемым; и

в ответ на осуществление доступа к объявлению,

автоматически формулировать машиноисполняемые команды, которые реализуют то, что каждый экземпляр упомянутого типа объекта классифицируется как неизменяемый после его создания, включая формулирование машиноисполняемых команд, которые игнорируют любое заданное пользователем разрешение для данного типа объекта, так что все экземпляры этого типа объекта являются неизменяемыми, даже если присвоено разрешение 'изменяемый';

автоматически формулировать машиноисполняемые команды, которые реализуют то, что все прямо или косвенно доступные элементы экземпляра упомянутого типа объекта классифицируются как неизменяемые; и

автоматически формулировать машиноисполняемые команды, которые реализуют то, что существование любой ссылки, которая позволяет выполнять присвоение полей экземпляра упомянутого типа объекта, не допускается после момента, в который данный экземпляр становится доступным создателю этого экземпляра.

20. Система по п.19, при этом по меньшей мере один экземпляр неизменяемого типа объекта принимает одно или более перезаписываемых входных значений.

21. Система по п.20, при этом ни одно из упомянутых одного или более перезаписываемых входных значений не сохраняется в поле какого-либо из упомянутого по меньшей мере одного экземпляра.



 

Похожие патенты:

Изобретение относится к области вычислительной техники. Техническим результатом является предоставление устройства обработки информации и способа обработки информации, посредством которых надлежащий пользовательский интерфейс, соответствующий состоянию оборудования, может быть создан без подробных сведений по оборудованию.

Изобретение относится к средствам инициализации управляющей сервисной программы в вычислительном окружении. Технический результат заключается в обеспечении возможности сервисной программе быть загруженной во многих конфигурациях без изменения последовательности загрузки.

Изобретение относится к средствам инициализации управляющей сервисной программы в вычислительном окружении. Технический результат заключается в обеспечении возможности сервисной программе быть загруженной во многих конфигурациях без изменения последовательности загрузки.

Изобретение относится к технологиям сетевой связи. Технический результат заключается в повышении скорости обработки данных.

Изобретение относится к средствам для обработки информации. Техническим результатом является расширение арсенала технических средств обработки информации.

Изобретение относится к способу и устройству для установки подключаемого модуля интеллектуального устройства. Техническим результатом является повышение скорости работы терминала за счет установки подключаемого модуля интеллектуального устройства.

Изобретение относится к способу и устройству для установки подключаемого модуля интеллектуального устройства. Техническим результатом является повышение скорости работы терминала за счет установки подключаемого модуля интеллектуального устройства.

Изобретение относится к технологии обработки данных мобильной связи. Технический результат заключается в обеспечении обработки данных для нескольких операционных систем.

Изобретение относится к технологии обработки данных мобильной связи. Технический результат заключается в обеспечении обработки данных для нескольких операционных систем.

Изобретение относится к средствам ввода отпечатков пальцев и принадлежит области технологий распознавания шаблонов. Технический результат заключается в повышении надежности ввода отпечатков пальцев.

Представлен и описан проточный расходомер (1), прежде всего для эксплуатации с обеспечением единства измерений, имеющий корпус (2), по меньшей мере одно расположенное в корпусе устройство (3) обработки данных и расположенный в корпусе интерфейс (4) для коммуникации с внешним устройством (5) управления, причем устройство (3) обработки данных выполнено с возможностью записи данных через интерфейс (4).

Изобретение относится к вычислительной технике. Технический результат заключается в определении DDoS-атаки на сервер при некорректной работе сервисов сервера.

Изобретение относится к решениям для выявления вредоносных файлов. Технический результат – повышение безопасности компьютерной системы.

Изобретение относится к области информационной безопасности. Техническим результатом является обнаружение вредоносного кода в адресном пространстве процесса.

Изобретение относится к использованию шаблонов опасного поведения программ с высоким уровнем ложных обнаружений. Технический результат – уменьшение количества ложных обнаружений угроз при использовании шаблона опасного поведения программ.

Изобретение относится к области вычислительной техники. Техническим результатом является повышение уровня безопасности информационной системы персональных данных.

Изобретение относится к области информационной безопасности. Технический результат заключается в защите чувствительного кода от попыток исполнения с ненадлежащей точкой входа API без излишних издержек.

Изобретение относится к хранению и передачи данных, содержащихся на магнитной полосе. Техническим результатом является повышение безопасности при привязке устройства к определенному счету пользователя.

Изобретение относится к системам и способам автоматического резервного копирования и восстановления цифровых данных. Раскрыта самовосстанавливающаяся система видеонаблюдения.

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

Изобретение относится к сетевой безопасности. Технический результат заключается в расширении арсенала средств того же назначения. Устройство выполнено с возможностью приема ненадежных входных данных в анклаве в электронном устройстве, изоляции ненадежных данных по меньшей мере от участка анклава, передачи по меньшей мере части ненадежных данных в модуль проверки целостности с использованием канала аттестации и приема проверки целостности данных для ненадежных данных от модуля проверки целостности. Модуль проверки целостности может выполнять функции аттестации целостности данных для проверки ненадежных данных, причем функции аттестации целостности данных включают в себя политику аттестации данных и белый список. 4 н. и 21 з.п. ф-лы, 9 ил.
Наверх