Реалізація віртуальних змінних



Стаття | Article    

Download

В цій статті розглянуто поняття змінної, запропоновано його формалізацію. Розширено поняття змінної до поняття віртуальної змінної та наведено перелік операцій для віртуальної змінної.

Ключові слова: віртуальний процес, віртуальна змінна.

Virtual variable realization

In this papervariable notion investigated, formalization for this notion is proposed. Variablenotion extended to virtual variable notion and operation set for virtualvariable is present.

Keywords: virtual process, virtual variable

Iu. V.Krak

Prof, Taras Shevchenko National University of Kyiv

Iu. V.Koval

Assistant, Taras Shevchenko National University of Kyiv

Ukraine, Kyiv

Вступ та постановка задачі

Віртуальний процес складається з атомарних процесів [1]. Термін атомарний вживається для процесів виконання програми локалізованих в межах однієї операційної системи та ідентифікованих ідентифікатором процесу в цій системі. Кожен атомарний процес має свої локальні змінні, що визначені та застосовуються відповідно до правил тієї мови програмування, якою написаний код атомарного процеса. Віртуалізація процеса дозволяє атомарному процесу окрім власних змінних використовувати змінні всього віртуального процесу. Зрозуміло,що з точки зору конкретної мови програмування ці віртуальні змінні мають специфічне синтаксичне оформлення, яке може суттєво відрізнятися від відповідного оформлення в самій мові програмування. Тож необхідно формалізувати загальне поняття змінної та запропонувати його конкретизацію для віртуальних змінних, що і буде задачею цієї публікації.

Формалізація поняття змінної

Змінна оперативної пам'яті

З точки зору атомарного процесу змінна це частина адресного простору процесу наперед визначеного розміру. Структури даних такі, як масив, можуть міняти свій розмір, проте в кожен момент часу їх розмір чітко визначений. Фіксований розмір пам'яті, виділений для змінної, визначає та обмежує множину значень, що може бути застосована, та традиційно називається типом. Ідентифікується така змінна адресою, починаючи з якої виділяється пам'ять для неї.

Змінна мови програмування

З точки зору мови програмування, змінна це іменоване значення іноді певного типу. Де і як зберігається це значення переважно не відомо. Втім, мова програмування С [2], та всі інші мови, які дотримуються визначеного нею підходу,визначає поняття поінтера (вказівника), що, власне, і є адреса. В цілому ж,операція встановлення значення визначається як операція іменування значення. Це принципово відрізняється від того, що відбувається в пам'яті процесу. В такому випадку значення існує завжди, навіть коли не використовується. До нього лише приписують ім'я. Зміна стану змінної полягає не в тому, що змінилося наповнення пам'яті, а в тому, що змінилося значення, до якого приписано ім'я. Тобто змінна не має ні адреси, ні, як такого, розміру. Розмір має значення, но не змінна.

Операція розіменування не знищує зв'язок між ім'ям та значенням (як це звучить в самому слові), а надає доступ до значення, з яким встановлено зв'язок у імені.

Спираючись на такі означення отримаємо формалізацію поняття імені а не змінної. Тож для формалізації поняття змінної оберемо підхід, визначений в мові програмування С, та такий, що узгоджений з поняттям пам'яті процеса та адресного простору.

С-змінна

Як відомо [2], в мові програмування С розрізняють глобальні, статичні, динамічні, локальні автоматичні та локальні статичні змінні. В С++ [3] до цього додаються статичні поля класу. (По суті вони подібні статичним змінним.) Крім того є параметри значення (в С) та параметри посилання (референс) (в С++). (Поінтер як параметр принципово не відрізняється від параметру значення). Глобальні та статичні змінні створюються під час запуску процесу. В коді навіть можуть бути відсутні команди виділення пам'яті для них. Автоматичні змінні та параметри створюються автоматично (що, власне, і дало їм назву). Те саме стосується знищення змінних. Для динамічних змінних операція створення завжди доступна програмісту. Операція знищення іноді закривається процедурою збору сміття. Єдина операція яка не передбачена для цих змінних – це витирання (втрата значення). Сама змінна при цьому залишається існувати. Проблема з реалізацією цієї операції полягає в тому, що в пам'яті не існує неіснуючого значення. Як деяке виключення існує значення NULL або nullptr що є еквівалентом неіснуючого значення. Проте це лише домовленість. Насправді, неіснуюче значення реалізовувалося в ЕОМ «Ельбрус» [4].

Формалізація загального поняття змінної

Таким чином в загальному розумінні змінна це сховище значень, для якого можуть бути реалізовані та застосовуватись наступні п'ять операцій:

$-$ Створення,

$-$ Знищення,

$-$ Встановлення значення,

$-$ Зчитування значення,

$-$ Витирання значення.

Слід зауважити, що не всі операції можуть бути реалізованими, проте операція зчитування значення має бути реалізована завжди. Ім'я змінної є необов'язковим параметром який є еквівалентом адреси в адресному просторі процесу.

Конкретизація віртуальної змінної

Віртуальна змінна реалізує всі наведені базові операції для змінної а також наступні додаткові операції, дуже корисні та притаманні інтерпретованим мовам програмування, в тому числі препроцесором мови С,:

$-$ Перевірка існування змінної,

$-$ Перевірка наявності у змінної значення,

$-$ Обчислення розміру змінної,

$-$ Обчислення розміру значення,

$-$ Перевірка, чи є у змінної ім'я,

$-$ Встановлення імені змінної,

$-$ Отримання імені змінної.

Наступні операції не типові для змінних мов програмування, проте є типовими для баз даних [5] та файлових систем [6]:

$-$ Встановити видимість змінної,

$-$ Отримати видимість змінної,

$-$ Встановити власника змінної,

$-$ Отримати власника змінної,

$-$ Встановити права доступу змінної,

$-$ Отримати права доступу змінної,

$-$ Встановити захист для змінної.

Висновки

В цій статті наведено формалізацію поняття «змінна» та розширено його для створення віртуальних змінних для віртуального процесу. Наведено перелік операцій для віртуальних змінних.

Перелік посилань

$1.$ Крак Ю. В. Віртуальний процес: означення та застосування в створенні системи жестового інтерфейсу / Ю. В. Крак, Ю. В. Коваль, А. Б. Ставровський. // Вісник Київського національного університету імені Тараса Шевченка Серія фізико-математичні науки. – 2015. – №1. – С. 141–144.

$2.$ Ritchie D. M. C Reference Manual [Електронний ресурс] / Dennis MacAlistair Ritchie // Bell Telephone Laboratories, Murray Hill, New Jersey, USA, p. 31. – 1974. – Режим доступу до ресурсу: https://www.bell\-labs.com/usr/dmr/www/cman.pdf.

$3.$ Stroustrup B. The C++ ProgrammingLanguage [Електронний ресурс] / Bjarne Stroustrup. – 2016. – Режим доступу до ресурсу: http://www.stroustrup.com/C++.html.

$4.$ Пентковский В. М. Автокод Эльбрус. Эль-76. Принципы построения языка и руководство к использованию / В. М. Пентковский. – Москва: Наука, 1982.– 352 с.

$5.$ PostgreSQL 9.6.3 Documentation [Електронний ресурс]. – 2017. – Режим доступу до ресурсу: https://www.postgresql.org/docs/9.6/static/index.html.

$6.$ Thompson K. UNIX PROGRAMMER’S MANUAL [Електронний ресурс] / K.Thompson, D. M. Ritchie // Bell Labs, USA, p. 194,. – 1971. – Режим доступу до ресурсу: https://www.bell\-labs.com/usr/dmr/www/1stEdman.html.

Jun 12, 2017