Мультиасемблерна мова програмування
Предложен новый мультиасемблерный язык программирования високого уровня МАЯ, соединяющий в себе свойства динамичности выполнения, кросс-платформенности та високой продуктивности, а также отсутствия потребности в компиляторе и возможности простой аппаратной интерпретации. A new high level multiassemb...
Saved in:
| Date: | 2008 |
|---|---|
| Main Authors: | , , |
| Format: | Article |
| Language: | Russian |
| Published: |
Інститут програмних систем НАН України
2008
|
| Subjects: | |
| Online Access: | https://nasplib.isofts.kiev.ua/handle/123456789/325 |
| Tags: |
Add Tag
No Tags, Be the first to tag this record!
|
| Journal Title: | Digital Library of Periodicals of National Academy of Sciences of Ukraine |
| Cite this: | Мультиасемблерна мова програмування / А.E. Дорошенко, H.В. Котюк, С.С. Николаeв // Пробл. програмув. — 2008. — N 1. — С. 26-36. — Бібліогр.: 7 назв. — укр. |
Institution
Digital Library of Periodicals of National Academy of Sciences of Ukraine| _version_ | 1859741657607438336 |
|---|---|
| author | Дорошенко, А.Е. Котюк, М.В. Ніколаєв, С.С. |
| author_facet | Дорошенко, А.Е. Котюк, М.В. Ніколаєв, С.С. |
| citation_txt | Мультиасемблерна мова програмування / А.E. Дорошенко, H.В. Котюк, С.С. Николаeв // Пробл. програмув. — 2008. — N 1. — С. 26-36. — Бібліогр.: 7 назв. — укр. |
| collection | DSpace DC |
| description | Предложен новый мультиасемблерный язык программирования високого уровня МАЯ, соединяющий в себе свойства динамичности выполнения, кросс-платформенности та високой продуктивности, а также отсутствия потребности в компиляторе и возможности простой аппаратной интерпретации.
A new high level multiassember programming language MAYA is proposed, that combines properties of dynamic execution, cross-platform and high performance. The language does not need a compiler and gives opportunity of simple implementation.
Запропоновано нову мультиасемблерну мову програмування високого рівня МАЯ, що поєднанує у собі властивості динамічності, крос-платформності та високої продуктивності, а також відсутність потреби в компіляторі та можливість простої апаратної інтерпретації.
|
| first_indexed | 2025-12-01T18:50:43Z |
| format | Article |
| fulltext |
Моделі та засоби паралельних і розподілених програм
© А.Ю. Дорошенко, М.В. Котюк, С.С. Ніколаєв, 2008
26 ISSN 1727-4907. Проблеми програмування. 2008. № 1
УДК 681.03
А.Ю. Дорошенко, М.В. Котюк, С.С. Ніколаєв
МУЛЬТИАСЕМБЛЕРНА МОВА ПРОГРАМУВАННЯ
Запропоновано нову мультиасемблерну мову програмування високого рівня МАЯ, що поєднанує у собі
властивості динамічності, крос-платформності та високої продуктивності, а також відсутність потреби
в компіляторі та можливість простої апаратної інтерпретації.
Вступ
Сьогодні для створення і викорис-
тання інформаційних технологій існує без-
ліч мов програмування, що націлені для
вирішення задач певного типу. Чим ширше
коло задач покладається на мову, чим по-
тужнішою є її функціональність і тим
складнішими стають семантика і синтак-
сис мови. З іншого боку, виникнення і роз-
виток різних мов програмування дикту-
ється ще й розвитком особливостей плат-
форм, для яких призначаються виконання
написані цими мовами програми. Усклад-
нення мов програмування призводить до
утруднення вивчення та програмування на
цих мовах, до того ж жодну сучасну мову
програмування не можна вважати дійсно
універсально прийнятною і ефективною.
У зв’язку з цим виникає питання
щодо створення нових кросплатформних
мов програмування з компактним синтак-
сисом і інтуїтивно зрозумілою семанти-
кою, програми для яких мали б високу
продуктивність при виконанні. В даній ро-
боті зроблена спроба розробити таку мову,
названу МАЯ, разом з віртуальною маши-
ною для неї. При цьому за мету поставлено
знаходження балансу між компактністю та
функціональністю мови і вже як наслідок –
розробка синтаксису мови.
МАЯ (від російської назви «муль-
тиассемблерный язык») – це нова мова
програмування високого рівня з новим пі-
дходом до створення віртуальної машини
для виконання програм, написаних цією
мовою. Вона не належить до жодного з іс-
нуючих класів мов програмування і ство-
рена під впливом процедурних мов
МИША [1] та Аналітик [2], підтримує ос-
новні можливості цих мов, а також емулює
деякі засоби декларативних та сценарних
(скриптових), таких мов як Lisp, Haskell,
PHP та Java Script. Її основні властивості –
поєднання динамічності, крос-платформ-
ності, високої продуктивності, а також ві-
дсутність потреби в компіляторі та можли-
вість простої апаратної інтерпретації. МАЯ
створена з використанням програмної пла-
тформи МИША (версія М10) і є гарною
демонстрацією можливостей останньої для
створення інструментальних засобів про-
грамування. Водночас МАЯ є стандартним
компонентом поточної версії платформи
МИША, призначеним для програмування
інтелектуальних алгоритмів. Також ця
мова може бути використана як незалеж-
ний інструмент для проектування веб-сис-
тем та автоматизації роботи з комп’ютером
(створення командних сценаріїв).
МАЯ – це мова з інтернаціональним
синтаксисом, в основі якого лежать не
ключові слова, а математичні позначення і
авторські «ключові символи», які є замін-
никами ключових слів. У подальших роз-
ділах роботи міститься короткий опис за-
собів мови та основні методи роботи, що
ілюструються прикладами і поясненнями.
Особливу увагу приділено роботі зі змін-
ними, так як вони складають чи не най-
більш цінну частину розробки.
Мова МАЯ та віртуальна машина МАЯ
Спочатку мова МАЯ призначалася
для швидкого виконання невеликих ко-
мандних сценаріїв. Проте згодом вияви-
лось, що мова може бути успішно викори-
стана не тільки для опису командних сце-
наріїв, але й для написання різних про-
грам. Внаслідок компактності свого коду
та його швидкодії, які на порядок вищі,
ніж у PHP та JavaScript, мова МАЯ може
Моделі та засоби паралельних і розподілених програм
27
бути також використана й у Інтернет тех-
нологіях, і для задач штучного інтелекту.
Концепція програмування на мові МАЯ
(мікропрограмне управління) як найкраще
підходить для мультипотокових систем,
для яких необхідні алгоритми здатні ефек-
тивно виконуватись у паралельному сере-
довищі (особливо, на процесорах з муль-
тиядерною архітектурою [3]).
МАЯ – це алгоритмічно-орієнто-
вана, імперативна крос-платформна мова
програмування з підтримкою засобів
об’єктно-орієнтовного програмування
(ООП). При створенні мови програмування
МАЯ за основу були взяті мови МИША та
Аналітик. У цій мові програмування поєд-
нуються дуже важливі якості – потужна
функціональність, компактність коду та
простота в освоєнні. Семантика багатьох
конструкцій та елементів мови запозичена
з відомих мов програмування FORTRAN,
С, Pascal, Lisp, МИША. Це помітно знижує
початкові зусилля при вивченні МАЯ, а
підтримка ООП дозволяє створювати про-
грами з допомогою декларативних засобів.
При дотриманні принципів функціональ-
ного чи модульного програмування це до-
зволяє максимально ефективно оптимізу-
вати спільну роботу в певному проекті та
повністю використовувати наявні обчис-
лювальні ресурси.
Мова МАЯ виконується на одной-
менній віртуальній машині. Завдяки вико-
ристанню технології керування пам’яттю
комп’ютера з допомогою символьних імен,
мікропрограмного аналізу коду програми
та тунельної індексації при виконанні, вда-
ється значно прискорити виконання про-
грам, написаних на мові МАЯ. Можна
стверджувати, що втрати швидкості вико-
нання відсутні, окрім втрат на виконання
самої віртуальної машини, через те, що
вищезгадані технології дають можливість
уникати перевірок багатьох зайвих умов,
одразу перевіряючи тільки найнеобхіднішу
з них, і без затримок продовжувати вико-
нання.
Віртуальна машина МАЯ працює
наступним чином. Код програми переда-
ється до віртуальної машини МАЯ, де під-
дається попередньому аналізу. Аналіз коду
виконується один раз при першому запу-
ску програми для відстеження синтаксич-
них та логічних помилок. При цьому ана-
лізуються всі синтаксичні конструкції, ви-
рази та структура програми. При наявності
помилок у коді програми, МАЯ інформує
користувача про тип помилки та її місце
знаходження (детальніше про це – у роз-
ділі далі). Програма не запускається на ви-
конання, якщо у її коді наявна хоча б одна
помилка.
Після того як програма проаналізо-
вана, стає можливим збереження аналізу
структури її коду у вигляді масиву байтів.
Даний масив являє собою область віртуа-
льної оперативної пам’яті комп’ютера у
якій містяться основні характеристики, які
необхідні для виконання даної програми.
Цей масив можна зберегти у файлі на жор-
сткому диску комп’ютера, або на іншому
носієві інформації. Якщо програма була
проаналізована раніше і після цього не
змінювалась, то етап попереднього аналізу
коду не виконується, а одразу починається
виконання самої програми.
Механізм віртуальної машини МАЯ
починає виконувати код після першої ек-
рануючої послідовності ($M),або від са-
мого початку програми, якщо така послі-
довність відсутня, і продовжує виконання
до того моменту, коли зустріне екрануючу
послідовність ($), або дійде до кінця про-
грами. Також передбачена можливість фо-
рсованої зупинки програми на будь-якому
етапі виконання.
Особливості синтаксису та семантики
мови МАЯ
Засоби мови МАЯ містять команди
різних рівнів, і водночас код на мові МАЯ
не можна віднести до жодної категорії
проміжного коду (наприклад, байт-коду
Java [4], або коду MSIL [5]), до того ж жо-
дна високорівнева мова не може бути ви-
конана тим способом, яким виконується
МАЯ. Тому в цих відношеннях мова є уні-
кальною.
Ще однією цікавою особливістю
мови є її семантика. Кожна програма розг-
лядається віртуальною машиною МАЯ як
функція, яка дуже нагадує мікропрограму
[6]: 1) може отримувати параметри від ін-
ших подібних програм і запускати на ви-
Моделі та засоби паралельних і розподілених програм
28
конання подібні програми; 2) має власний
„контейнер”, в якому можуть зберігатися
довільні параметри-константи, що викори-
стовуються або можуть бути використані у
даній програмі-функції; 3) має власний ре-
зультат. Поняття такої мікропрограми-фу-
нкції є змістом терміну евристика, що за-
стосовується в мові МАЯ. Нагадаємо, що
усталеним тлумаченням цього терміну є
натупне:
„Евристикою можна вважати про-
граму, програмну систему чи алгоритм,
здатний до оптимізації своєї поведінки на
основі розрахунку оптимальної стратегії,
шляхом зміни параметрів-констант, за-
кладених у своєму алгоритмі, на основі пі-
дбору оптимальних рішень, вхідних даних
та результатів.”1
Кожна евристика може бути як
окремою програмою, так і частиною вели-
кої системи (просто функцією). Тому, ви-
користовуючи функціональне програму-
вання, за допомогою МАЯ можна створю-
вати досить складні програмні комплекси.
Але, завдяки „контейнеру”, кожну еврис-
тику можна також розглядати і як об’єкт з
певними властивостями, які можна зміню-
вати, що дає змогу будувати проекти у
мові МАЯ за принципами об’єктно-орієн-
тованого програмування.
Принципи евристично-мікропрог-
рамного програмування виявляються дуже
ефективними при паралельних обчислен-
нях. Так, створюючи програми за цими
принципами, можна отримувати програми,
готові до паралельного виконання. Віртуа-
льна машина МАЯ може використовувати
відкладені обчислення подібно до деклара-
тивних мов, виконувати тунельно-індексне
розпаралелення циклів, забезпечувати па-
ралельну роботу спроектованих з допомо-
гою МАЯ нейронно-мережевих ПС.
Розглянемо синтаксис мови. Конс-
трукція розгалуження у МАЯ за семанти-
кою схожа на однойменну конструкцію у
мовах Паскаль та МИША.
1
Академия Наук СССР / „Теория распознавания
образов и обучающихся систем” / Техническая
кибернетика 1963 г. №5 с.98-102
1. Повна форма
2. Скорочена форма
Якщо умова не виконується, вико-
нання програми продовжується після пос-
лідовності ?^ .
Конструкція перехоплення помилок
визначається за схемою:
Якщо, у коді між ключовими сло-
вами ($T і $E) даної конструкції під час
виконання програми буде виявлено поми-
лку (наприклад, ділення на нуль), то про-
грама не буде зупинена, а продовжить своє
виконання після ключового слова $E даної
конструкції. Це дає змогу відвернути не
бажану завчасну зупинку програми, а та-
кож точніше локалізувати місце помилки
та завчасно попередити її прояв.
Конструкція оголошення змінних
починається послідовністю $V , після якої
йде ім’я змінної і яка закінчується симво-
лом „;”.
У цій конструкції можна оголошу-
вати скільки завгодно змінних, перерахо-
вуючи їх імена через кому. Оголошені та-
кою дією змінні будуть видимі тільки для
даної евристики.
У МАЯ є можливість створення ло-
кальних процедур, які є видимими лише
для тої евристики, в якій вони оголошені.
Ці процедури не мають ніяких параметрів і
можуть оперувати як локальними змін-
ними даної евристики, так і глобальними
змінними усього проекту.
?( \Умова \)
\ код, який виконується при виконанні умови\
?Е
\ код, який виконується при неиконанні умови\
?^ \Кінець конструкції \
?( \Умова \)
\ код, який виконується при виконанні умови\
?^ \Кінець конструкції \
$Т \Початок конструкції\
\ код, який може містити помилки\
$Е \перехоплення помилки\
\Реакція при виникненні помилки\
$^ \Кінець конструкції \
Моделі та засоби паралельних і розподілених програм
29
Оголошуються процедури такою
послідовністю: між символом ~ та послі-
довністю ~^ оголошується ім’я процедури
(в даному випадку proc_name). Завершен-
ням процедури вважається перший символ
^ на який натрапить віртуальна машина
при виконанні даної процедури.
Для виклику процедур використо-
вується запис @ ім’я процедури ; або за-
пис @: ім’я змінної, або вираз, що містить
ім’я процедури ;.
Приклад:
Такі процедури стають дуже вигід-
ними при використанні їх у циклах.
У мові МАЯ є можливість ство-
рення різноманітних циклів. Далі будуть
наведені приклади деяких з них.
Приклад програми з використанням
циклу з післяумовою
Також конструкція ~cyc~ @cyc;
може бути використана, як вказівка goto,
де конструкція ~cyc~ є міткою переходу з
іменем „cyc”, а конструкція @cyc; – вказі-
вкою переходу до мітки з іменем „cyc”.
Коментарі у мові МАЯ багаторяд-
кові. Коментар починається та закінчу-
ється символом \ , а все що поміщено в
нього ігнорується віртуальною машиною.
Стиль запису виразів у мові МАЯ
майже ідентичний запису виразів у мові
С, але має чимало особливостей. Запис
виразів відбувається у звичайній інфіксній
формі. Для структурування можна вико-
ристовувати круглі дужки. Наприклад:
a + = 15.2· (b – c)/x; z = ((a < b)&(c > x)).
Результатом виконання першого виразу
буде збільшення значення змінної а на
значення виразу 15.2·(b – c)/x. Результатом
виконання другого виразу буде присвоєння
змінній z значення істини (true), якщо і
значення змінної a буде меншим від
значення змінної b, і значення змінної c
буде меншим від значення змінної x.
Інакше змінній z буде присвоєно значення
false.
Звичайно, програма не обов’язково
має містити всі ці конструкції. Прикладом
найпростішої програма на мові МАЯ, яка
виводить на екран повідомлення «Hello
from MAYA», є програма:
shm{" Hello from MAYA"}
де shm{} – функція виведення на екран по-
відомлення.
Далі представлений алгоритм під-
рахунку ряду чисел Фібоначі, реалізований
мовою МАЯ.
\Алгоритм підрахунку чисел Фібоначі\
$V var,a,b,c;
a=1;b=1;
~cyc~
ar(var)+=a;
c=a+b;
a=b;
b=c;
?(self["Up to number"]<=Last{var})
@cyc;
?^
self["Res"]=var;
~proc_name~^ \початок процедури\
\Код процедури\
^ \завершення та вихід із процедури\
$M\Логічний початок виконання
програми\
@proc_name; \Виклик процедури\
$. \Логічний кінець програми\
~proc_name~^ \початок процедури\
\Код процедури\
^ \завершення та вихід із процедури\
$M\Логічний початок виконання
програми\
$V var;
var="proc_name";\Присвоєння змінній
процедури\
@:var; \Виклик процедури\
$. \Логічний кінець програми\
$V var;\оголошення змінної var\
~cyc~\початок циклу\
var++;
\тіло циклу\
?(var==12)
shm{"Кінець циклу"}
?E @cyc; ?^
Моделі та засоби паралельних і розподілених програм
30
Виконання програм та робота з даними
у мові МАЯ
Виконання програм МАЯ можна
зобразити наступною діаграмою (рис. 1).
При виконанні програм МАЯ у вір-
туальній машині (ВМ) МАЯ працює сис-
тема відстеження та повідомлення про ло-
гічні і технічні помилки, наявні у коді ев-
ристик. Дану систему умовно можна поді-
лити на дві частини, перша з яких повідо-
мляє про синтаксичні помилки (наприклад,
незавершені конструкції і подібне), які від-
стежуються на етапі попереднього аналізу
при першому запуску евристики після її
модифікації, а друга – безпосередньо відс-
тежує логічні помилки під час виконання
(наприклад, ділення на нуль). Є також мо-
жливість одразу виводити повідомлення
про помилку після того як вона буде
знайдена.
У прикладі повідомлення, наведе-
ному далі, повідомляється про три синтак-
сичні помилки: 1) невідома конструкція $"
(у рядку 25); 2) конструкція ?(Condition) не
завершена (відсутній символ ?^); 3) незак-
ритий коментар (у рядку 36); а також пові-
домлення про те, що програма містить
грубі помилки і не може бути виконана.
<Syntax_Error
VMAsmCnt='"25"' Unknown_command=
='"' Construction='$'>
</Syntax_Error>
<Syntax_Error
Construction='If-Then(?(Condition))'
SubConstruction='?^'> Not_Finished
</Syntax_Error>
<Syntax_Error VMAsmCnt='36'
Construction='\'> No_Match </Syntax_Error>
<Log_Error VMAsmCnt='52'>
Compiling.Failed </Log_Error>
Також є можливість перегляду та
збереження усієї структури виконання
будь-якої евристики. Дана структура міс-
тить вміст усіх основних стеків віртуальної
машини МАЯ на кожній ітерації вико-
нання програми, що значно полегшує по-
шук та виправлення помилок. Наприклад,
структура виконання евристики
shm{"Hello!"} (рис. 2).
Мова програмування МАЯ викори-
стовує найбільш зручний та ефективний
метод обробки даних з-поміж усіх засобів,
доступних в рамках програмної платформи
МИША.
Рис. 1. Діаграма виконання програм МАЯ
Головна
мікро-
програма
Диспетчер завдань
платформи МИША
Видача
допом.
завдання
Видача
допом.
завдання
Видача
допом.
завдання
Допом.
«Чергови
й потік»
Введення даних в
процесі роботи
Очікування на отримання аналогічних
завдань з метою забезпечення
мінімізації латентності кластерної
системи та нормальної роботи
розподіленої системи обробки та
збереження даних
Моделі та засоби паралельних і розподілених програм
31
На відміну від багатьох мов про-
грамування зі статичною типізацією, у
мові МАЯ немає необхідності явного ви-
значення типу змінних, хоча така можли-
вість існує. У разі звернення до змінної,
ядро МАЯ трактує її тип відповідно до
�����������������������������������������������������������������������������
��
╟▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒Wellcome to Maya
World!▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒�
╚����������������������������������������������������������������������������
�╝
Program Started :: 0s D::0::Stack
---<Code->---
0 - s
1 - h
2 - m
3 - {
4 - "
5 - H
6 - e
7 - l
8 - l
9 - o
10 - !
11 - "
12 - }
---<-End->---
▐▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▌
▐░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░Labels!░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░▌
▐░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░*░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░▌
▐░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░If-
Then░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▌
▐░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░*░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░▌
▐░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░T-E-
C░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▌
▐░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░*░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░▌
▐░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░Comments!░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░▌
▐░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░*░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░▌
▐▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▄▌
Program Started :: 0s D::1::Stack
0:<s> D::1::Stack
1:<h> D::1::Stacks
2:<m> D::1::Stacksh
3:<{> D::1::Stackshm
4:<"> D::1::Stackshm{
█4:<"> D::6::Stackshm{"
5:<H> D::6::Stackshm{"
6:<e> D::6::Stackshm{"H
7:<l> D::6::Stackshm{"He
8:<l> D::6::Stackshm{"Hel
9:<o> D::6::Stackshm{"Hell
10:<!> D::6::Stackshm{"Hello
11:<"> D::6::Stackshm{"Hello!
█11:<"> D::1::Stackshm{"Hello!"
12:<}> D::1::Stackshm{"Hello!"}
�����������������������������������������������������������������������������
��
▐▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▌
▐░░░░░░░░░░░░░░░░░░░░░░N<1> Br Name <shm> Type
<Funct{}>░░░░░░░░░░░░░░░░░░░░░░▌
▐▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▄▌
1:Const Str:Hello!
╚����������������������������������������������������������������������������
�╝
�����������������������������������������������������������������������������
��
▐▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▌
▐░░░░░░░░░░░░░░░░░░░░░░░N<0> Br Name <> Type
<Round()>░░░░░░░░░░░░░░░░░░░░░░░▌
▐▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▄▌
1:Res from Bracket N:1
Тут виведено код
виконуваної
евристики
Тут
виведено
структуру
евристики
(основні
параметри)
Тут показано сам
процес виконання ев-
ристики (заповнення
основних стеків ВМ
МАЯ)
Рис. 2. Структура виконання евристики shm{"Hello!"}
Моделі та засоби паралельних і розподілених програм
32
контексту. За необхідності можливе при-
ведення змінної до певного типу за допо-
могою відповідних функцій мови. Це може
знадобитись, якщо зважити, що значення
змінної можуть трактуватись по-різному в
залежності від її типу. Так, наприклад,
значення 255 може трактуватись як число
„255”, або ж 255 символ таблиці ANSI –
„я”. Також можливе визначення типу від-
повідної змінної на певному етапі вико-
нання програми. Імена змінних можуть мі-
стити усі символи кодової таблиці, крім
тих, які кодують команди мови, що може
значно зменшити обсяг програм, особливо
при їх автоматичному генеруванні в інте-
лектуальних системах (відповідно, зникає
необхідність в присвоєнні змінним осмис-
лених імен). Найбільш схожі за принци-
пами роботи до змінних мови МАЯ атоми
мови Lisp, хоча і тут є суттєві відмінності.
Як і в мові Lisp, змінні МАЯ не мають яв-
ного фіксованого типу, вони можуть міс-
тити будь-що, починаючи від простих еле-
ментарних констант, закінчуючи багато-
вимірними масивами та надскладними
структурами даних.
На відміну від багатьох інших мов
програмування із змінними мови МАЯ
можна утворити будь-яку структуру даних,
тому автоматично відпадає необхідність у
таких оголошеннях, як record у мові Pascal.
Усе це робить змінні мови універсальними
та унікальними. Далі наведено приклад
оголошення змінної var та заповнення її
структурою даних, що має вигляд масиву,
у кожній чарунці якого зберігаються певні
дані.
Вимога однотипності наповнення
масивів відсутня. Кожна чарунка може мі-
стити довільні дані, незалежно від того, що
знаходиться в сусідніх чарунках. Але в да-
ному випадку усі три чарунки однотипні.
Цю структуру можна доповнювати новими
чарунками, а також змінювати старі.
Слід зазначити, що не існує жодних
обмежень при роботі зі змінними, крім об-
сягу фізичної пам'яті комп’ютера та фанта-
зії програміста.
Технологія управління динамічною па-
м'яттю
Платформа МИША, на основі якої
базована мова МАЯ, працює з пам’яттю у
режимі інтелектуального керування на ос-
нові евристичних технологій. Запропоно-
ваний підхід передбачає значно вищі пока-
зники продуктивності програм та значно
нижчі показники використання ОЗП. Осо-
бливо помітні ці переваги при порівнянні
із поширеним підходом на основі «зби-
рання сміття» та технологією динамічно-
стекової типізації у мовах запису команд-
них сценаріїв.
Ознайомлення з вихідними кодами
системи Mono [7], що є варіантом реаліза-
ції .NET з відкритим кодом (open source)
дає змогу визначити, що алгоритм “зби-
рача сміття” на основі побудови об'єктних
графів має експоненційну складність у за-
лежності від кількості об'єктів (N) для об-
робки “збирачем сміття” – O(AN), де A (кі-
лькість команд для обробки одного об'є-
кта). Водночас інтелектуальна технологія
МИШІ дає змогу забезпечити лінійну за-
лежність O(N) обсягу команд від кількості
об'єктів. При цьому за певних значеннь N
інтелектуальний алгоритм забезпечує відс-
тавання від традиційного підходу, проте
при зростанні N евристична технологія за-
безпечує високу швидкість роботи навіть у
випадку, коли “збирач сміття” теоретично
не здатний обробити потрібну кількість
об'єктів. Дану залежність видно на графіку
(рис. 3), де по осі Ох відкладено кількість
об'єктів, а по осі Оу – обсяг команд для їх
обробки.
$V var;\оголошення змінної var\
var[0,"№"]=8123;
var[0,"ПІБ"]="Д.К. Андрійович";
var[0,"Тел"]=5468212;
var[0,"Бали"]=12;
var[1,"№"]=5131;
var[1,"ПІБ"]="А.І. Олексіївна";
var[1,"Тел"]=5198723;
var[1,"Бали"]=8;
var[2,"№"]=1422;
var[2,"ПІБ"]="О.В. Миколайович";
var[2,"Тел"]=2894537;
var[2,"Бали"]=10;
Моделі та засоби паралельних і розподілених програм
33
Враховуючи специфіку ситуації, в
МИШІ передбачено 4 комплекси керу-
вання пам'яттю для різних типів задач, що
розв'язуються з допомогою платформи:
1) виділення пам'яті в стеку для об-
робки даних за значенням;
2) виділення пам'яті в “купі” з вико-
ристанням обліку посилань;
3) “збирання сміття” для програм,
що обробляють невеликі обсяги даних;
4) інтелектуальна евристична
технологія керування пам'яттю в “купі”;
5) інтелектуальний альтернативний
“файл підкачки” на жорсткий диск.
Для роботи з динамічною пам'яттю
платформа МИША підтримує тип даних
ref, який забезпечує використання динамі-
чної області пам'яті («купи»). Викорис-
тання цього типу дає змогу чітко регламе-
нтувати моменти, в які може відбутися ви-
вільнення пам'яті – це вихід з блоку змін-
них-посилань та присвоєння їм нових зна-
чень. Під час виконання програми під ке-
руванням відлагоджувача інтелектуальний
аналізатор пам'яті МИШІ, реалізований як
нейронна мережа, визначає ті фрагменти
алгоритму, де найчастіше відбувається ви-
вільнення даних. Усі отримані результати
записуються в спеціальну базу у вигляді
мікропрограм, які використовуються в по-
дальшій роботі. Після цього у даних фраг-
ментах виконується встановлення команди
активації очистки з допомогою обліку по-
силань або додавання даного об'єкта в
чергу очистки.
На даний момент МИША містить
базу мікропрограм для керування пам'яттю
обсягом близько 56 Мб, вона безперервно
поповнюється під час експлуатації плат-
форми. Проведені експерименти на алго-
ритмах різного рівня складності однозна-
чно зазначають: даний підхід забезпечує
економію пам'яті в обсязі, пропорційному
до обсягу її гіпотетичного використання.
Розглянемо використання пам'яті та
обчислювальних ресурсів у експеримента-
льній пошуковій системі при індексації
тексту з синтаксично-семантичним аналі-
зом та порівняймо його з аналогічними по-
казниками подібного алгоритму, реалізо-
ваного мовою програмування C# на плат-
формі .NET 3.0. Цей алгоритм забезпечує
необхідні параметри для оцінювання мето-
дів керування пам'яттю: він збільшує ви-
користання оперативної пам’яті і кількість
керованих (managed) вказівників та об'єк-
тів першого покоління, оскільки утворює
складні структури-графи (рис. 4, а і б).
Рис. 3. Залежність складності операцій збирання сміття від кількості об’єктів
Моделі та засоби паралельних і розподілених програм
34
У багатопотоковому режимі вико-
нання (на процесорі AMD Athlon 64 X2
4800+) обсяг використання пам'яті на пла-
тформі .NET залишається сталим. Викори-
стання режиму Concurrent GC дозволяє
збільшити ефективність роботи програми
на двоядерному процесорів, проте це не
дає повного розв'язання проблеми: ми не
можемо повністю використати обидва ядра
процесора, а з часом відбувається переван-
таження ядра, і весь процесорний час ви-
трачається на виконання команд “збирача
сміття”.
Отже, можна говорити про те, що в
складних алгоритмах з обробкою великої
кількості даних збирач сміття платформи
.NET “захлинається” і нездатний забезпе-
чити роботу системи з потрібними харак-
теристиками швидкодії при необхідності
керування більш ніж 50 тисяч об'єктів. Це
накладає суворі обмеження на програму-
вання складних ресурсоємних алгоритмів з
допомогою платформи .NET.
Водночас, технології, використані в
платформі МИША і системі керування да-
ними мультиасемблерної мови МАЯ, да-
ють змогу оптимізувати використання па-
м'яті (рис. 5, а і б).
б
Рис. 4. Загальне використання ресурсів при застосуванні .NET 3.0 (а); використання
виділених даному процесу квантів процесора на виконання коду MSIL (б)
а
Моделі та засоби паралельних і розподілених програм
35
Висновки
У даній роботі запропоновано нову
мультиасемблерну мову програмування
МАЯ, призначену для створення швидкіс-
них інтелектуальних алгоритмів. Підхід,
запропонований для виконання программ
МАЯ, забезпечує можливість реазіації цієї
мови на багатьох класах обчислювачів –
від мобільних пристроїв, де пам'ять є кри-
тичним ресурсом до кластерних систем,
що обробляють великі обсяги даних і віде-
ографічних прискорювачів, де на один
процесор припадає всього 3,2–6,4 Мб
пам'яті.
а
Б
Рис. 5. Використання ресурсів при застосуванні МИША/МАЯ (а);
використання виділених даному процесу квантів процесора на виконання коду алгоритму
в системі МИША/МАЯ (б)
Моделі та засоби паралельних і розподілених програм
36
1. Дорошенко А.Ю., Котюк М.В., Ніко-
лаєв С.С.. Програмна платформа для науко-
вих досліджень // Проблеми програмування.
– 2007. – № 4. – С. 49–59.
2. Глушков В.М., Молчанов И.Н., Визнюк Г.И.
и др. «Программное обеспечение ЭВМ
МИР-1 и МИР-2». – Киев: Наук. думка,
1976.
3. Akhter S., Roberts J.. Multi-Core Program-
ming. Increasing Performance through Soft-
ware Multi-threading. – Intel Press, 2006. –
336 p.
4. Java 2. Patric Haughton, Herbert Shield – Sun
Developers' Guide Press, San Diego, 2004.
5. Troelsen A., The C# 2005 programming
language and .NET 2.0. platform. Apress,
2006.
6. Глушков В.М., Михновский С.Д., Рабинович
З.Л. ЭВМ со структурной реализацией
языка высокого уровня // Кибернетика,
1981. – № 4. С. 9 – 17.
7. Система Mono. http://www.mono-pro-
ject.com/Main_Page
Отримано 17.12.2007
Про авторів:
Дорошенко Анатолій Юхимович,
доктор фізико-математичних наук,
професор, завідувач відділу Інституту
програмних систем НАН України
Котюк Микола Васильович,
Ніколаєв Сергій Сергійович,
члени Київського територіального відді-
лення Малої академії наук «Дослідник».
Місце роботи авторів:
Інститут програмних систем НАН України.
Тел.: (38044) 526 1538,
e-mail: dor@isofts.kiev.ua
м. Київ, вул. Січневого повстання 13.
e-mail: km@p5com.com
|
| id | nasplib_isofts_kiev_ua-123456789-325 |
| institution | Digital Library of Periodicals of National Academy of Sciences of Ukraine |
| issn | 1727-4907 |
| language | Russian |
| last_indexed | 2025-12-01T18:50:43Z |
| publishDate | 2008 |
| publisher | Інститут програмних систем НАН України |
| record_format | dspace |
| spelling | Дорошенко, А.Е. Котюк, М.В. Ніколаєв, С.С. 2008-03-31T13:38:05Z 2008-03-31T13:38:05Z 2008 Мультиасемблерна мова програмування / А.E. Дорошенко, H.В. Котюк, С.С. Николаeв // Пробл. програмув. — 2008. — N 1. — С. 26-36. — Бібліогр.: 7 назв. — укр. 1727-4907 https://nasplib.isofts.kiev.ua/handle/123456789/325 681.3 Предложен новый мультиасемблерный язык программирования високого уровня МАЯ, соединяющий в себе свойства динамичности выполнения, кросс-платформенности та високой продуктивности, а также отсутствия потребности в компиляторе и возможности простой аппаратной интерпретации. A new high level multiassember programming language MAYA is proposed, that combines properties of dynamic execution, cross-platform and high performance. The language does not need a compiler and gives opportunity of simple implementation. Запропоновано нову мультиасемблерну мову програмування високого рівня МАЯ, що поєднанує у собі властивості динамічності, крос-платформності та високої продуктивності, а також відсутність потреби в компіляторі та можливість простої апаратної інтерпретації. ru Інститут програмних систем НАН України Моделі та засоби паралельних і розподілених програм Мультиасемблерна мова програмування Multiassember programming language Article published earlier |
| spellingShingle | Мультиасемблерна мова програмування Дорошенко, А.Е. Котюк, М.В. Ніколаєв, С.С. Моделі та засоби паралельних і розподілених програм |
| title | Мультиасемблерна мова програмування |
| title_alt | Multiassember programming language |
| title_full | Мультиасемблерна мова програмування |
| title_fullStr | Мультиасемблерна мова програмування |
| title_full_unstemmed | Мультиасемблерна мова програмування |
| title_short | Мультиасемблерна мова програмування |
| title_sort | мультиасемблерна мова програмування |
| topic | Моделі та засоби паралельних і розподілених програм |
| topic_facet | Моделі та засоби паралельних і розподілених програм |
| url | https://nasplib.isofts.kiev.ua/handle/123456789/325 |
| work_keys_str_mv | AT dorošenkoae mulʹtiasemblernamovaprogramuvannâ AT kotûkmv mulʹtiasemblernamovaprogramuvannâ AT níkolaêvss mulʹtiasemblernamovaprogramuvannâ AT dorošenkoae multiassemberprogramminglanguage AT kotûkmv multiassemberprogramminglanguage AT níkolaêvss multiassemberprogramminglanguage |