Мультиасемблерна мова програмування

Предложен новый мультиасемблерный язык программирования високого уровня МАЯ, соединяющий в себе свойства динамичности выполнения, кросс-платформенности та високой продуктивности, а также отсутствия потребности в компиляторе и возможности простой аппаратной интерпретации. A new high level multiassemb...

Full description

Saved in:
Bibliographic Details
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