BASIC09: Motorola 6809 процессоры үшін құрылымдық BASIC тілі
BASIC09
BASIC09: Motorola 6809 процессоры үшін Microware жасаған құрылымдық BASIC тілі. OS-9 жүйесімен үйлесімді, жылдам I-кодты пайдаланады. Бағдарламалау тілі.
Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
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 биттік (байттық) бүтін сандар, сондай-ақ қалқыма нүктелі және мәтіндік деректер.
BASIC09 is a structured BASIC programming language dialect developed by Microware on behalf of Motorola for the then new Motorola 6809 CPU and released in February 1980. It is primarily used with the OS 9 operating system, released in 1979. Microware also released a version for OS 9/68k on the 68000 as Microware BASIC. In contrast to typical BASICs of the era, BASIC09 includes a multi pass compiler that produces compact bytecode known as I code. I code replaces a number of data structures found in other BASICs with direct pointers to code and values, speeding performance. Users can further compile code using the PACK command, at which point it can be called directly by OS 9 and operated as native code. In the case of PACKed code, a cut down version of the BASIC09 runtime system is used, Runb, further improving memory footprint and load time. The language includes a number of structured programming additions, including local variables, the ability to ignore line numbers in favor of named routines, user defined structures, and several distinct base data types including 16 bit and 8 bit (byte) integers, in addition to floating point and strings.
Өңдеу
Басты нұсқада, редакторға қолдау көрсету үшін жол нөмірлері қолданылды. Пайдаланушылар кодтың белгілі бір жолдарын нөмірді теру арқылы өңдейтін, ал содан кейін мәтін жадыдағы жолдарға қосылып немесе оларды ауыстыратын. Кодтың әрбір жолының нөмірі болғандықтан, бұл оларды GOTO немесе GOSUB мақсатын көрсетуге ыңғайлы етті, бұл үшін FORTRAN сияқты басқа тілдерде бөлек "жол белгісі" пайдаланылатын. BASIC09 әдетте жол нөмірлерін қолданбағандықтан, пайдаланушыға жолды нөмірмен атамай-ақ өңдеуге мүмкіндік беру үшін оның редакторы өзгертілді. Алайда, BASIC09 толық экран мүмкіндігін қабылдамады, сондықтан курсор пернелерін пайдалану мүмкін болмады. Оның орнына жүйеде бөлек редакторлық сұрау болды және пайдаланушы бір уақытта бір жолды алға немесе артқа жылжыту арқылы қозғалуға мүмкіндік берді. Жаңа код жолын жол нөмірісіз енгізу үшін пайдаланушы оператордың басында бос орын қалдырды. Назарда болсын, тіл процедуралар мен айнымалылардың атаулары сияқты пайдаланушы берген мәндерге сезімтал, бірақ кілт сөздерге емес. Редакторға кіші әріптермен енгізілген кілт сөздер бағдарлама LISTed болғанда үлкен әріптермен көрсетіледі. BASIC09 кодтың бір жолында бірнеше операторға рұқсат берді, бірақ көптеген нұсқаларда қолданылатын нүкте-құрт белгісінің орнына бөлгіш ретінде пайдаланды. Бұл оның тағайындау операторында екі нүктені (:) пайдаланғандықтан болды, ол әдеттегі теңдік белгісіне (=) қосымша болды. := теңдік белгісімен (=) бірдей әсерге ие болды, бірақ тағайындаулар мен салыстырулар арасындағы айырмашылықты анықтап көрсетті.
Line numbers were used in most BASIC dialects primarily as a way to support the editor. Users would edit particular lines of code by typing a number, with the text following either adding to or replacing the lines already in memory. As every line of code had a number, this also made them suitable for indicating the target of a GOTO or GOSUB, compared to other languages like FORTRAN where a separate "line label" was used for this purpose. BASIC09 did not normally use line numbers, so its editor had to be modified to allow the user to edit lines without referring to them by number. However, BASIC09 did not assume any sort of full screen capability, so using cursor keys was not an option. Instead, the system had a separate editor prompt and allowed the user to move about using the and keys, moving forward or backward one line at a time. To insert a new line of code without a line number, the user left a blank at the start of the statement. Note that the language is case sensitive for user provided values like procedure and variable names, but not for keywords. Keywords typed into the editor in lower case will be shown in upper case when the program is LISTed. BASIC09 allowed multiple statements on a single line of code, but used the as a separator instead of the used in most dialects. This is because it used the colon in the := assignment operator, which was in addition to the normal =. := was identical in effect to =, but made the difference between assignments and comparisons more obvious.
Компилятор
Ішкі көп өткелді компилятор 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%-ға арттырды.
The internal multipass compiler converts BASIC09 source code into a tokenized, optimized, bytecode, called I code. I code differs from the more traditional tokenizing approach found in most BASICs in that a number of items were placed directly in memory instead of using references that then had to be looked up. For instance, in MS based interpreters, a variable reference in code is left in string format; the variable VAR would be represented in memory by the three ASCII characters "VAR". During execution, when this variable is encountered in the code the interpreter has to look up that string in a table of variables, find the associated storage address in memory, and then finally read the value stored in that location. The table is usually constructed so that the value follows the name, to save time during the final lookup. In contrast, in I code the address of the variable is determined in advance and the reference in code is replaced by that address. This avoids a runtime search through the variable table. Other optimizations include a separate FOR/NEXT routine used when the index variable is an INTEGER, and separate INTEGER and REAL math libraries. For added performance, BASIC09 also included the PACK command which took a procedure name and returned an optimized version. Some of these optimizations included removing non coding instructions like code comments and the replacement of constant expressions to a single value. For instance, PACK would recognize that LET x=x+SQR(100)/2 contains only constants on the right, and replaces it with the code x=x+5, which requires only a single operation at runtime, the addition, removing the division and square root. PACK reduced the memory footprint of the procedure and improved performance by about 10 to 30%.
Жеңіл жүгіру уақыты
Басқа BASIC-тердегідей, BASIC09 ортасында бағдарламаларды іске қосу жиі кездесетін жайт болғанмен, BASIC09 Runb деп аталатын кодтың жеке іске қосу нұсқасымен де бірге келді. Runb жүйенің өңдеу және түзету мүмкіндіктерін жойды, соның салдарынан толық BASIC09-дың көлемінен екі есе кіші болды. Runb-тің негізгі мақсаты басқа бағдарламалардан шақырылған PACKed модульдерді іске қосу еді. Яғни, егер пайдаланушы OS/9 командалық жолында BASIC09 модулінің атын теріп, ал ол модуль PACKed деп белгіленген болса, ол BASIC09 емес, Runb арқылы ашылып, іске қосылады. Бұл жадты үнемдеп, жүктелу уақытын жақсартады.
Although it was common to run programs within the BASIC09 environment, as it was in other BASICs, BASIC09 also shipped with a separate run only version of the code known as Runb. Runb removed the editing and debugging features of the system, and was about half the size of the full BASIC09 as a result. The purpose of Runb was primarily to run PACKed modules when called from other programs. This meant that if the user typed in the name of a BASIC09 module in the OS/9 command line, and that module has been marked as PACKed, it is opened and run by Runb instead of the BASIC09. This reduces memory footprint and improves load time.