Кіріспе

BASIC09 — Motorola компаниясының тапсырысы бойынша Microware компаниясы Motorola 6809 процессоры үшін әзірлеген және 1980 жылдың ақпанында жарық көрген BASIC бағдарламалау тілінің құрылымдық диалектісі. Ол негізінен 1979 жылы шыққан OS 9 операциялық жүйесімен қолданылады. Microware сондай-ақ 68000 процессорында Microware BASIC ретінде OS 9/68k үшін де нұсқасын шығарды. Көптеген BASIC тілдерінен өзгеше, BASIC09 I код деп аталатын ықшам байт-кодты құрастыратын көп кезеңді компиляторды қамтиды. I код басқа BASIC тілдеріндегі дерек құрылымдарының орнына код пен мәндерге тікелей сілтемелерді пайдаланады, бұл өнімділікті арттырады. Пайдаланушылар PACK командасын қолданып кодты толық құрастыра алады, содан кейін OS 9 оны тікелей шақырып, жүйелік код ретінде іске қоса алады. Толық құрастырылған код үшін BASIC09 жұмыс уақытының қысқартылған нұсқасы Runb қолданылады, бұл жадты үнемдеуге және жүктелу уақытын қысқартуға мүмкіндік береді. Тілге жергілікті айнымалылар, жол нөмірін ескермей, атаулы процедураларды пайдалану мүмкіндігі, пайдаланушы анықтаған құрылымдар және әртүрлі базалық дерек түрлері кіреді, оның ішінде 16 биттік және 8 биттік (байттық) бүтін сандар, сондай-ақ қалқыма нүктелі және мәтіндік деректер.

Өңдеу

Басты нұсқада, редакторға қолдау көрсету үшін жол нөмірлері қолданылды. Пайдаланушылар кодтың белгілі бір жолдарын нөмірді теру арқылы өңдейтін, ал содан кейін мәтін жадыдағы жолдарға қосылып немесе оларды ауыстыратын. Кодтың әрбір жолының нөмірі болғандықтан, бұл оларды GOTO немесе GOSUB мақсатын көрсетуге ыңғайлы етті, бұл үшін FORTRAN сияқты басқа тілдерде бөлек "жол белгісі" пайдаланылатын. BASIC09 әдетте жол нөмірлерін қолданбағандықтан, пайдаланушыға жолды нөмірмен атамай-ақ өңдеуге мүмкіндік беру үшін оның редакторы өзгертілді. Алайда, BASIC09 толық экран мүмкіндігін қабылдамады, сондықтан курсор пернелерін пайдалану мүмкін болмады. Оның орнына жүйеде бөлек редакторлық сұрау болды және пайдаланушы бір уақытта бір жолды алға немесе артқа жылжыту арқылы қозғалуға мүмкіндік берді. Жаңа код жолын жол нөмірісіз енгізу үшін пайдаланушы оператордың басында бос орын қалдырды. Назарда болсын, тіл процедуралар мен айнымалылардың атаулары сияқты пайдаланушы берген мәндерге сезімтал, бірақ кілт сөздерге емес. Редакторға кіші әріптермен енгізілген кілт сөздер бағдарлама LISTed болғанда үлкен әріптермен көрсетіледі. BASIC09 кодтың бір жолында бірнеше операторға рұқсат берді, бірақ көптеген нұсқаларда қолданылатын нүкте-құрт белгісінің орнына бөлгіш ретінде пайдаланды. Бұл оның тағайындау операторында екі нүктені (:) пайдаланғандықтан болды, ол әдеттегі теңдік белгісіне (=) қосымша болды. := теңдік белгісімен (=) бірдей әсерге ие болды, бірақ тағайындаулар мен салыстырулар арасындағы айырмашылықты анықтап көрсетті.

Компилятор

Ішкі көп өткелді компилятор BASIC09 бастапқы кодын токенизацияланған, оптимизацияланған байт-кодқа, яғни I-кодқа түрлендіреді. I-код көптеген BASIC-терде кездесетін дәстүрлі токендеу әдісінен ерекшеленеді, себебі бірқатар элементтер сілтемелерді пайдаланудың орнына тікелей жадқа орналастырылды. Мысалы, MS негізделген интерпретаторларда кодтағы айнымалыға сілтеме жол түрінде қалдырылады; VAR айнымалысы жадта үш ASCII символы "VAR" арқылы бейнеленеді. Орындалу кезінде, егер кодта осы айнымалы кездессе, интерпретатор айнымалылар тізімінен осы жолды іздеп, жадтағы байланысты сақтау адресін тауып, содан кейін сол жерде сақталған мәнді оқиды. Тізім әдетте мәні атаудан кейін орналастырылады, соңғы іздеу кезінде уақытты үнемдеу үшін. Ал I-кодта айнымалының адресі алдын ала анықталады және кодтағы сілтеме сол адреспен ауыстырылады. Бұл айнымалылар тізімі бойынша орындалу уақытында іздеуді болдырмайды. Басқа оптимизацияларға индекстік айнымалы INTEGER болғанда қолданылатын жеке FOR/NEXT процедурасы және жеке INTEGER және REAL математикалық кітапханалары кіреді. Қосымша өнімділік үшін BASIC09 сонымен қатар PACK командасын қамтыды, ол процедураның атын қабылдап, оптимизацияланған нұсқасын қайтарады. Осы оптимизациялардың кейбіреулері кодталмаған нұсқауларды, мысалы, кодқа түсініктемелерді жоюды және тұрақты өрнектерді бір мәнмен алмастыруды қамтиды. Мысалы, PACK LET x=x+SQR(100)/2 командасында оң жақта тек тұрақтылар бар екенін анықтап, оны x=x+5 кодымен алмастырады, бұл орындалу кезінде тек бір операцияны – қосуды қажет етеді, бөлу мен квадрат түбірді алып тастайды. PACK процедураның жадты пайдалануын азайтып, өнімділікті шамамен 10-30%-ға арттырды.

Жеңіл жүгіру уақыты

Басқа BASIC-тердегідей, BASIC09 ортасында бағдарламаларды іске қосу жиі кездесетін жайт болғанмен, BASIC09 Runb деп аталатын кодтың жеке іске қосу нұсқасымен де бірге келді. Runb жүйенің өңдеу және түзету мүмкіндіктерін жойды, соның салдарынан толық BASIC09-дың көлемінен екі есе кіші болды. Runb-тің негізгі мақсаты басқа бағдарламалардан шақырылған PACKed модульдерді іске қосу еді. Яғни, егер пайдаланушы OS/9 командалық жолында BASIC09 модулінің атын теріп, ал ол модуль PACKed деп белгіленген болса, ол BASIC09 емес, Runb арқылы ашылып, іске қосылады. Бұл жадты үнемдеп, жүктелу уақытын жақсартады.