ПРОЕЦИРОВАНИЕ СОБСТВЕННЫХ ИНТЕРФЕЙСОВ ПРИКЛАДНОГО ПРОГРАММИРОВАНИЯ ОПЕРАЦИОННОЙ СИСТЕМЫ В ДРУГИЕ ЯЗЫКИ ПРОГРАММИРОВАНИЯ
PROJECTION OF OWN APPLICATION PROGRAMMING INTERFACES OF OPERATING SYSTEM INTO OTHER LANGUAGES

УРОВЕНЬ ТЕХНИКИ
[0001] Операционная система обычно обладает несколькими интерфейсами прикладного программирования, которые позволяют приложениям осуществлять доступ к функциональности, поддерживаемой операционной системой. Такие API, обычно, определяются операционной системой с использованием именованного файла или объекта на языке программирования компьютера. Например, язык программирования C использует заголовочные файлы, которые могут иметь имя, например, "interface.h". Аналогично, в C# механизм, называемый "P/Invoke", сигнатуры используется для осуществления доступа к API операционной системы. Человек, пишущий компьютерную программу, которая будет использовать API операционной системы, обычно включает ссылку на именованный файл API или объект в программу, или использует другой механизм, обеспечиваемый языком программирования. Эта программа, например, кроме того, включает в себя вызовы функций, определенных этим API, в синтаксисе, используемым этим API.
[0002] API, определенные подобным образом, не могут быть непосредственно доступны посредством языков, отличных от языков, на которых они написаны. Чтобы стать доступными программам, написанным на других языках, API «заключают в оболочку». Это «заключение в оболочку» обычно должно быть сделано вручную для каждого API и для каждого языка и требует глубокого понимания как целевого языка, так и API, и операционной системы. Следовательно, многие API операционной системы недоступны.
СУЩНОСТЬ ИЗОБРЕТЕНИЯ
[0003] Раздел Сущность изобретения обеспечен для представления подборки понятий в упрощенной форме, которые дополнительно описаны ниже по тексту в разделе Подробное описание. Раздел Сущность изобретения не предназначен для идентификации ключевых признаков или существенных признаков заявленного объекта, а также не предназначен для использования его для ограничения объема заявленного объекта.
[0004] Когда строится операционная система, информация о API генерируется и сохраняется в известном формате, в известном месте, в операционной системе. Эта информация полностью описывает все API, подвергающиеся действию посредством операционной системы. Это включает в себя, но не ограничено этим, информацию об именованных элементах API различных типов, таких как базовые типы, перечислимые типы, структуры, делегаты, интерфейсы, классы, методы, свойства и события. Эта информация хранится в файлах метаданных API.
[0006] Соответственно в одном аспекте метаданные, описывающие интерфейсы прикладного программирования операционной системы, сохраняются в памяти. Давая указание именованного элемента в программе на языке программирования, обращающееся к элементу одного из интерфейсов прикладного программирования, именованный элемент проецируется на язык программирования с использованием метаданных. Проецирование может происходить во время компиляции или интерпретации программы. Проецирование может включать в себя создание кода, который создает один или более элементов на языке программирования, а также маршалинг данных для созданных элементов согласно типу. Интерфейсы, включающие в себя свои методы, свойства и события могут быть проецированы таким образом. Проецирование также может включать в себя распространение исключений из операционной системы в приложение.
[0007] Такое проецирование API операционной системы на другие языки может быть воплощено в реализуемом компьютером процессе, готовом изделии, включающем в себя одну или более сред (носителей) хранения компьютера, или вычислительной машине.
[0008] В последующем описании делается ссылка на приложенные чертежи, которые составляют часть данного документа и на которых показаны в качестве иллюстрации специфические примерные реализации этого подхода. Понятно, что другие варианты осуществления могут быть использованы и без отступления от объема раскрытия могут быть сделаны структурные изменения.
ОПИСАНИЕ ЧЕРТЕЖЕЙ
[0009] Фиг. 1 представляет собой блок-схему системы, которая включает в себя проецирование API на другие языки программирования.
[0010] Фиг. 2 представляет собой блок-схему последовательности операций, иллюстрирующую примерную работу инструмента разработки.
[0011] Фиг. 3 представляет собой блок-схему последовательности операций, иллюстрирующую примерную работу компилятора или интерпретатора.
[0012] Фиг. 4 представляет собой блок-схему примерного вычислительного устройства, в котором такая система может быть реализована.
ПОДРОБНОЕ ОПИСАНИЕ
[0013] Нижеследующий раздел обеспечивает примерную операционную среду, в которой может быть реализовано такое проецирование API родной системы на другие языки.
[0014] Обращаясь к фиг. 1, выполняющееся приложение 100 осуществляет доступ к API 102 родной системы во время выполнения. Для того чтобы такое приложение обладало такой функциональностью, программа 106 обычно пишется с использованием инструмента 112 разработки, такого как редактор. Такие программы либо компилируются, либо интерпретируются компилятором или интерпретатором 108 языка, чтобы обеспечить приложение 100 среды выполнения (runtime). Инструмент 112 разработки и компилятор или интерпретатор 108 осуществляют доступ к метаданным 110, которые полностью описывают API 102 операционной системы. Инструмент 112 разработки помогает разработчику в написании программ, но информирует разработчика о доступных API родной системы посредством метаданных и делает возможным доступ к этим API с использованием языка программирования разработчика. Компилятор или интерпретатор воплощает проецирование API родной системы на язык программирования разработчика с использованием метаданных. В частности, именованные элементы в API отображаются на именованные элементы в целевом языке и осуществляется маршалинг значений в тех элементах между форматами, используемыми целевым языком и операционной системой.
[0015] Построение такой системы начинается с построения операционной системы с API, описанными с помощью метаданных. Метаданные представляют каждый именованный элемент описания API в независимой от языка программирования форме. Эти метаданные обеспечивают полное описание интерфейса. Метаданные комбинированной системы могут быть сохранены в ряде файлов метаданных в формате ECMA-335 CLI, но специфичный формат является несущественным для изобретения.
[0016] С учетом этого контекста примерная реализация такой системы будет описана более подробно на фиг. 2-4.
[0017] Сейчас будет описан пример работы инструмента разработки с фиг. 2. При написании компьютерной программы разработчик, как правило, использует такую форму инструмента разработки, как редактор. Этот редактор может выполнять разнообразные задачи, такие как проверка синтаксиса и предложение завершений для строк, вводимых разработчиком. В этой среде метаданные, описывающие интерфейсы прикладного программирования операционной системы, могут быть использованы различными способами. В частности, они могут быть использованы, чтобы позволить разработчику обнаружить доступные API. Инструмент разработки принимает 200 ввод строки, например ключевое слово, которое может быть использовано в API в качестве идентификатора (например, "мышь") или пространства имен (например, имя операционной системы). Может быть осуществлен поиск 202 метаданных для идентификации элементов, имеющих принятый ввод как часть идентификатора или пространства имен. Идентификаторы для набора соответствующих элементов могут быть собраны и возвращены 204 в инструмент разработки. Инструмент разработки может представить 206 элементы разработчику для выбора и использовать информацию из метаданных для представления таких элементов в формате, подходящем для языка компьютера, который использует разработчик.
[0018] Обращаясь теперь к фиг. 3, будет описан пример работы компилятора языка или интерпретатора. При обработке компьютерной программы вне зависимости от того, компилировать или интерпретировать ее, выявляется 300 последовательность элементов компьютерной программы. Определяется 302, является ли элемент компьютерной программы ссылкой на API операционной системы. Например, это может быть определено путем поиска элемента в метаданных. С использованием метаданных создается 304 элемент проецирования, что делает возможной передачу данных между компьютерной программой и операционной системой. В частности, компилятор или интерпретатор реализует проецирование именованного элемента в API операционной системы на именованный элемент в целевом языке. Метаданные делают возможными создание объекта и осуществление маршалинга значений между форматом данных, используемым программой, и форматом, используемым операционной системой. Во время выполнения этот элемент позволяет программе осуществить доступ 306 к API операционной системы и осуществить маршалинг данных между приложением и операционной системой.
[0019] Теперь, описав общую работу такой системы, будет описан частный пример. В частности, теперь будет описано больше подробностей примерного проецирования между метаданными, описывающими API, и специфичным для языка компьютера представлением элементов API.
[0020] Нижеследующее описание представляет собой лишь одну возможную реализацию и не рассматривается как ограничивающее изобретение. В частности, следует понимать, что нижеследующее представляет собой лишь пример проецирования языка, который может быть реализован, и что возможны другие реализации для этого языка и возможны другие проецирования на другие языки.
[0022] Когда скрипт пытается создать экземпляр конкретного объекта, определенного посредством API операционной системы, объект Projector отвечает за доступ к метаданным для создания заглушек маршалинга, которые преобразуют данные между разными типами, возможно вовлекая создание прокси-объектов, а также для назначения вызовов методов, управления событиями и управления функциями обратного вызова.
[0031] Следует отметить, что посредством интерпретации метаданных проецирование также может перераспределить типы из родной среды в существующие типы в проецировании языка в некоторых случаях. Например, это возможно и желательно, когда типы в проецированиях языков и родного API имеют совместимую структуру данных, которая может легко происходить с фундаментальными типами данных. С помощью отображения метаданных, проецирование может просто перенаправлять все операции, такие как методы или свойства в отношении языковых типов, непосредственно в собственные типы. Это делает использование этих типов более естественным и привычным для разработчиков языков. Например, перераспределение структуры DateTime может быть реализовано таким образом. В родном API структура DateTime подвергается воздействию как Windows.Foundation.DateTime в метаданных без каких-либо дополнительных операций. В проецировании С# этот тип может быть перенаправлен в System.DateTimeOffset в C# с богатой поддержкой.
[0035] В этом примере операционная система не имеет типа для массива, но вместо этого позволяет аргументам для методов быть парой длины целочисленной переменной без знака, представляющей некоторое число элементов, не байтов, в массиве, за которой следует указатель на первый элемент массива.
[0041] Пример метаданных:
[uuid(...)]
delegate HRESULT Comparer([in] HSTRING s1, [in] HSTRING s2,
[out, retval] boolean* value)
interface IStringCollection
{
HRESULT Sort([in] Comparer compare);
}
[0042]
//создать экземпляр класса, который реализует IStringCollection
strCol=getIStringCollection()
strCol.sort(function (s1, s2) { return s1>s2; });
[0051] Такие интерфейсы, как отмечено выше по тексту, обладают методами, параметрами и событиями.
[0054] События на уровне проецирования языка реализуются в качестве методов прослушивателя событий add (добавления) и remove (удаления). Метод add принимает экземпляр делегата и возвращает данные, описывающие прослушивателя, в то время как метод remove принимает данные, описывающие прослушивателя, и ничего не возвращает.
[0056] Функция addEventListener принимает аргумент строки, который представляет имя события для прослушивания, функцию обратного вызова для назначения в качестве прослушивателя и необязательный третий параметр, который игнорируется. Эта функция вызывает базовый метод add_Event, передавая маршалируемую функцию обратного вызова в качестве делегата, и сохраняет получившийся в результате токен в сопоставлении, закрепленном посредством ссылочной идентификации объекта функции обратного вызова.
[0057] Функция RemoveEventListener принимает аргумент строки, который представляет имя события, от которого необходимо удалить прослушивателя, функцию обратного вызова, которая должна быть удалена, и необязательный третий параметр, который игнорируется. Эта функция ищет функцию обратного вызова посредством ссылочной идентификации в сопоставлении сохраненных токенов, и если токен найден, вызывает базовый метод remove_Event, передавая извлекаемый токен.
[0059] Как показано выше по тексту, имея уровень Projection (проецирования) API для языка, именованные элементы API операционной системы, как точно определены метаданными, хранящимися в операционной системе, могут быть использованы для автоматического создания объектов и данных маршалинга между форматом API операционной системы и форматом языка прикладного программирования. Следует понимать, что приведенное выше по тексту является лишь примером проецирования между примерной операционной системой и примерным языком программирования, и что изобретение не ограничено этим примером.
[0060] Теперь описав пример реализации, будет описана вычислительная среда, в которой такая система выполнена с возможностью работы. Нижеследующее описание предназначено для обеспечения краткого, общего описания подходящей вычислительной среды, в которой эта система может быть реализована. Система может быть реализована с многочисленными конфигурациями вычислительного аппаратного обеспечения специального назначения или общего назначения. Примеры хорошо известных вычислительных устройств, которые могут быть пригодны, включают в себя, но не ограничены упомянутым, персональные компьютеры, компьютеры-серверы, карманные или портативные устройства (например, мультимедийные проигрыватели, компьютеры-ноутбуки, сотовые телефоны, карманные персональные компьютеры, диктофоны), многопроцессорные системы, основанные на микропроцессоре системы, телевизионные приставки, игровые консоли, программируемую бытовую электронику, сетевые ПК, суперкомпьютеры, среды распределенных вычислений, которые включают в себя любые из вышеперечисленных систем или устройств и т.п.
[0061] Фиг. 4 иллюстрирует пример подходящей среды вычислительной системы. Среда вычислительной системы является лишь одним примером подходящей вычислительной среды и не предназначена для введения какого-либо ограничения как на объем использования, так и на функциональность такой вычислительной среды. Не следует интерпретировать вычислительную среду как обладающую какой-либо зависимостью или требованием, относящимся к любой комбинации компонентов, проиллюстрированных в примерной операционной среде.
[0062] Со ссылкой на фиг. 4, пример вычислительной среды включает в себя вычислительную машину, такую как вычислительная машина 400. В своей самой базовой конфигурации вычислительная машина 400, как правило, включает в себя по меньшей мере один блок 402 обработки и память 404. Вычислительное устройство может включать в себя многочисленные блоки обработки и/или дополнительные блоки совместной обработки, такие как блок 420 обработки графики. В зависимости от точной конфигурации и типа вычислительного устройства, память 404 может быть энергозависимой (такой как ОЗУ), энергонезависимой (такой как ПЗУ, флэш-память и т.д.) или некоторой комбинацией двух упомянутых. Эта наиболее общая конфигурация проиллюстрирована на фиг. 4 пунктирной линией 406. Дополнительно вычислительная машина 400 также может обладать дополнительными особенностями/функциональностью. Например, вычислительная машина 400 также может включать в себя дополнительное средство хранения (съемное и/или несъемное), включающее в себя, но не ограничиваясь этим, магнитные или оптические диски или ленту. Такое дополнительное средство хранения проиллюстрировано на фиг. 4 съемным средством 408 хранения и несъемным средством 410 хранения. Носители данных компьютера включают в себя энергозависимые и энергонезависимые, съемные и несъемные носители, реализованные любым способом или технологией для сохранения информации, такой как инструкции компьютерной программы, структуры данных, программные модули или другие данные. Память 404, съемное средство 408 хранения и несъемное средство 410 хранения все являются примерами носителей данных компьютера. Носители данных компьютера включают в себя, но не ограничиваются ими, ОЗУ, ПЗУ, EEPROM, флэш-память или другую технологию памяти, CD-ROM, цифровые универсальные диски (DVD) или другое оптическое средство хранения, магнитные кассеты, магнитную ленту, средство хранения на магнитном диске или другие магнитные устройства хранения, или любой другой носитель, который может быть использован для хранения требуемой информации и к которому может быть осуществлен доступ посредством вычислительного устройства 400. Любые носители данных компьютера могут быть частью вычислительной машины 400.
[0063] Вычислительная машина 400 также может содержать соединение(я) 412 связи, которое позволяет устройству осуществлять связь с другими устройствами. Соединение(я) 412 связи является примером сред связи. Среды связи, как правило, переносят инструкции компьютерной программы, структуры данных, программные модули или другие данные в модулированном сигнале данных, таком как несущая волна или другой механизм транспортировки, и включает в себя любые среды доставки информации. Термин «модулированный сигнал данных» означает сигнал, который имеет одну или более из его характеристик, установленных или измененных таким образом, чтобы кодировать информацию в сигнале, тем самым изменяя конфигурацию или состояние приемного устройства сигнала. Посредством примера, а не ограничения, среды связи включают в себя проводные среды, такие как проводная сеть или прямое проводное соединение, и беспроводные среды, такие как акустические, радиочастотные, инфракрасные и другие беспроводные среды.
[0064] Вычислительная машина 400 может иметь различные устройства(о) 414 ввода, такие как устройство отображения, клавиатура, мышь, перо, камера, устройство (сенсорного) ввода касанием и так далее. Устройство(а) 416 вывода, такие как громкоговорители, принтер и так далее, также могут быть включены в состав. Все эти устройства хорошо известны в данной области и нет необходимости обсуждать их подробно в этом документе.
[0065] Эта система может быть реализована в общем контексте программного обеспечения, включающего в себя исполняемые компьютером инструкции и/или интерпретируемые компьютером инструкции, такие как программные модули, обрабатываемые вычислительной машиной. Обычно программные модули включают в себя подпрограммы, программы, объекты, компоненты, структуры данных и так далее, которые, когда обрабатываются блоком обработки, инструктируют блок обработки выполнять конкретные задачи или реализовать конкретные абстрактные типы данных. Эта система может быть осуществлена на практике в распределенных вычислительных средах, где задачи выполняются удаленными устройствами обработки, которые связаны через сеть связи. В распределенной вычислительной среде программные модули могут быть расположены как на локальных, так и на удаленных носителях данных компьютера, включающих в себя устройства хранения.
[0066] Термины "готовое изделие", "процесс", "машина" и "состав вещества" в родовых понятиях приложенных пунктов формулы изобретения предназначены для ограничения этих пунктов объектом, подразумеваемым в рамках объема патентоспособного объекта, определенного посредством использования этих терминов в 35 U.S.C. §101.
[0067] Любые или все из вышеотмеченных альтернативных вариантов осуществления, описанных в данном документе, могут быть использованы в любой комбинации требуемой для формирования дополнительных гибридных вариантов осуществления. Следует понимать, что объект, определяемый в прилагаемой формуле изобретения, необязательно ограничен специфичными реализациями, описанными выше по тексту. Специфичные реализации, описанные выше по тексту, раскрыты только в качестве примеров.