Кіріспе
BASIC PLUS – бұл BASIC бағдарламалау тілінің кеңейтілген диалектісі, оны Digital Equipment Corporation (DEC) 1970-жылдардың басында 16-биттік PDP 11 сериялы шағын компьютерлер үшін RSTS/E уақыт бөлісу операциялық жүйесінде пайдалану үшін әзірледі. BASIC PLUS, TSS/8 үшін BASIC 8-ге негізделген, ол өзі түпнұсқалық Dartmouth BASIC-ке өте жақын болды. BASIC PLUS бірнеше жаңа құрылымдарды, сондай-ақ шартты операторлар мен форматтауға қатысты JOSS-тан алынған мүмкіндіктерді қосты. Өз кезегінде BASIC PLUS – бастапқы Microsoft BASIC-тің үлгісі болған нұсқа. BASIC PLUS-ке енгізілген қосымшалардың бірі – Dartmouth-тың бастапқы мақсатына қосымша, жолдармен жұмыс істеуге арналған функциялардың енгізілуі. Кейінгі нұсқаларда, әсіресе Microsoft-та, бұл функциялар алынып тасталды және осы операцияларды орындаудың жалғыз тәсілі BASIC PLUS-тің жолдармен жұмыс істеу функциялары болды. Көптеген BASIC тілдері бүгінгі күнге дейін осы қағиданы сақтайды. Кейін тіл BASIC Plus 2 ретінде нағыз компилятор ретінде жаңадан жазылды және VAX 11 платформасына сол машинаның түпкілікті BASIC нұсқасы ретінде көшірілді. Бұл нұсқа бірнеше платформалық өзгерістерден өтті және қазір OpenVMS үшін VSI BASIC деп белгілі.
BASIC PLUS is an extended dialect of the BASIC programming language that was developed by Digital Equipment Corporation (DEC) for use on its RSTS/E time sharing operating system for the PDP 11 series of 16 bit minicomputers in the early 1970s through the 1980s. BASIC PLUS was based on BASIC 8 for the TSS/8, itself based very closely on the original Dartmouth BASIC. BASIC PLUS added a number of new structures, as well as features from JOSS concerning conditional statements and formatting. In turn, BASIC PLUS was the version on which the original Microsoft BASIC was patterned. Notable among the additions made to BASIC PLUS was the introduction of string functions like and , in addition to Dartmouth's original all purpose command. In future versions of the language, notably Microsoft's, was removed and BASIC PLUS's string functions became the only ways to perform these sorts of operations. Most BASICs to this day follow this convention. The language was later rewritten as a true compiler as BASIC Plus 2, and was ported to the VAX 11 platform as that machine's native BASIC implementation. This version survived several platform changes, and is today known as VSI BASIC for OpenVMS.
Операция
Пайдаланушылар терминалға отырып, бағдарламалау тіліндегі операторларды теретін. Операторлар жүйенің командалық интерпретаторына тікелей енгізілуі немесе мәтіндік редакторға енгізіліп, файлға сақталып, содан кейін файлдан командалық интерпретаторға жүктелуі мүмкін. Бастапқы кодтағы қателер жол терілгеннен кейін дереу пайдаланушыға хабарланды. Курсорды басқару мүмкіндігі бар «ақылды» терминал кепілдік берілмегендіктен, BASIC PLUS барлық бастапқы кодты жол нөмірімен белгілеудің жалпы қағидасын қолданды. Кодты жол нөмірін теріп, содан кейін одан кейінгі кодтың мазмұнын өзгерту арқылы өңдеуге болады. Кодтың бір жолын оның жол нөмірін ғана теріп, басқа ештеңе жазбай алып тастауға болады, осылай ол бос жолға айналады. RSTS/E пайдаланушысының виртуалды жад кеңістігі 64 КБ-тан сәл кем болатын. BASIC PLUS-ті пайдалану арқылы осы виртуалды жад кеңістігінің шамамен жартысы біріктірілген командалық интерпретатор мен орындалу кітапханасы (RSTS/E жүйесінде «Орындалу уақыты жүйесі» деп аталады) үшін пайдаланылды. Бұл пайдаланушы бағдарламаларын 32 КБ жадқа шектеді. Үлкен бағдарламалар `statement` операторын пайдаланып жеке орындалатын бөліктерге бөлінді, ал бағдарламалар екінші бағдарламадағы белгілі бір жол нөміріне тізбектеліп, бағдарламаның бірінші жолынан өзге нүктеден орындалуын көрсетуге болатын. Бұл белгілі бір жол нөміріне тізбектелу мүмкіндігі бағдарламаларға басқа бағдарламадан шақырылып жатқанын бір-біріне хабарлауға мүмкіндік берді. «Ортақ ядро» деп аталатын ортақ жад бөлімін пайдалану бағдарламаларға қажет болған жағдайда бір-біріне деректерді беруге мүмкіндік берді. Дискідегі файлдарды да пайдалануға болады, бірақ олар баяу болды. Жадты үнемдеу үшін жүйеге мәтіндік деректер мен байт-код үшін қолданылатын қоқыс жинаушы жад менеджері енгізілген. Іске қосылған бағдарламаны тоқтатып, айнымалыларды қарап, өзгертіп, содан кейін оны қайта іске қосуға болады.
Синтаксис және ерекшеліктері
BASIC PLUS Dartmouth BASIC-тің кейінгі нұсқаларымен тығыз байланысты, оның ішінде оның қуатты MAT командаларымен де. Одан әрі, DEC бірнеше ерекше ағын басқару құрылымдарын қосты.
Өңдеу
Жол нөмірлері 1-ден 32767-ге дейінгі оң бүтін сандар болды. Кодтың логикалық жолдары жол соңында жаңа жол символын пайдалану арқылы бірнеше физикалық жолға бөліне берді, бұл әдеттегі қайтару символының орнына қолданылды. Бастапқы файлды сырттан өңдеуді жеңілдету үшін BASIC PLUS-тің кейінгі нұсқалары жол жалғастыру символы ретінде де қолдануға рұқсат берді. Бірнеше операторларды бір жолға жазуға болады, операторларды бөлу үшін пайдаланылды. Жүйе кодта ақ бос орын ретінде табулацияны қолдануға мүмкіндік берді, бұл циклдарды қазіргі тілдердегідей түсінікті етуге көмектесті. Түсіндірмелерде кілт сөз немесе символ пайдаланылды, ал MS BASIC-те және пайдаланылды.
Стандартты есептер
Команда экранды 14 кеңістікті аймаққа бөліп, үтір осы орындар арасында жылжу үшін пайдаланылды; 1, 2 және 3 сандарын аралықпен шығарады, ал бір ғана бос орын қалдырып, "1 2 3" деп шығарады. Белгілі бір мәтіндік сұрауды (prompt) көрсетуге мүмкіндік берді, бірақ оны үтірдің орнына нүкте-құртпен (semicolon) бөлу үшін қолданды; Мәтіндік тізбектерді бір немесе екі тырнақшамен шектеуге болатын. Жеке таңбаларды мәтіндік форматқа және кері түрлендіретін және функцияларынан басқа, BASIC PLUS Дартмуттың командасын да қолдады. Бұл команда мәтіндік тізбекті қайталап, әр таңбаның ASCII мәнін сандық массивтің ұясы ретінде қайтарады. Мысалы, "nirrі" деген сөзді бергенде, 1-5 ұяларда 110, 105, 114, 114, 105 ASCII кодтары, ал 0-ұяда тізбектің ұзындығы – 5 саны болады. Бұл операцияны кері қайтаруға да болады, X массивіндегі жеке сандарды оқып, оны мәтіндік тізбекке айналдыруға болады.
Strings could be delimited by single or double quotes. In addition to the and functions that converted single characters to and from string format, BASIC PLUS also supported Dartmouth's command. iterated the string and returned each character's ASCII value as a slot in a numeric array. For instance, would return an array with the five ASCII codes, 110, 105, 114, 114, 105, in elements 1 through 5, and the number 5, the length of the string, in element 0. One could reverse the operation as well, would read the individual numbers in the X array and convert it to a string.
Айғақтарды өзгертуші
BASIC PLUS JOSS сияқты, кез келген операторға қолданылатын "оператор модификаторлары" тұжырымын қосты. Мысалы, -і еквівалентті, ал -ің керісі еквівалентті. Циклдар BASIC-тің басқа нұсқаларындағыдай жұмыс істеді, ал командасы ерте шығу үшін өрнекте қолданыла алмады. Оның орнына, және кілт сөздері ерте шығуды басқару үшін пайдаланылуы мүмкін. Мысалы, I=10 болғанша цикл жалғастырылады, келесі код I мәнін өзгертеді деген есеппен, яғни ол 10 рет қайталанғаннан кейін шықпауы мүмкін, бірақ код I-ді 10 деп белгілегенде шығады. Модификаторларды ықшам біржолды циклдар құру үшін де қолдануға болады, мысалы, X 100 болғанша циклделеді.
loops worked as in other versions of BASIC, and the command could not be used in an expression to exit early. Instead, the and keywords could be used to control early exits. For instance, continue looping until I=10, with the assumption that following code would set the value of I, meaning it might not exit after 10 iterations but as soon as the code set I to 10. Modifiers could also be used to build compact one line loops, for instance, would loop until X was 100.
Айнымалылар, өрнектер және матрицалар
BASIC PLUS-тің алғашқы нұсқаларындағы айнымалы атаулары бір әріптен немесе бір әріптен кейін бір саннан тұруы мүмкін еді. Кейінірек нұсқаларда "Extend mode" қосылғаннан кейін айнымалы атаулары 29 символға дейін ұзаратылды, сондай-ақ нүкте (.) рұқсат етілген символ ретінде енгізілді. Әрбір айнымалы атауы әріппен басталуы тиіс еді. BASIC-тің көптеген нұсқаларындағыдай, айнымалыға мән беру үшін кілт сөз міндетті емес еді. Ол бірнеше айнымалыны бір мәнмен орнатуға мүмкіндік берді, мысалы, тіл үш дерек типін қолдады: қалқыма нүктелі сандар, бүтін сандар және жолдар. Жұрнақсыз айнымалылар қалқыма нүктелі сандар (8 байт, 0.29-дан 1.7-ға дейінгі диапазон, 16 таңбаға дейін дәлдік) болып табылды. Бүтін сандық айнымалылар (16 бит, -32768-ден +32767-ға дейінгі диапазон) жұрнақпен, ал жолдық айнымалылар (өзгермелі ұзындығы) жұрнақпен белгіленді. Математикалық және логикалық операторлар тізімі BASIC-тің көптеген нұсқаларына тән болды, сонымен қатар кейбір кеңейтімдер де болды. Математика үшін , , және қолданылды, сондай-ақ кейбір компьютерлік терминалдарда болмаған символдың баламасы ретінде қолданылды. Егер екі сан бірдей басылса, яғни олардың ең маңызды алты цифры сәйкес келсе, логикалық теңестірулер , , , , және стандартты түрде қолданылды. Бір қызықты қосымша – «шамамен тең» операторы, . Егер екі санның алғашқы алты цифры сәйкес келсе, ол «true» мәнін қайтарады. Логикалық операторларға әдеттегі , және операторлары кірді, сонымен қатар егер A және B екеуі де дұрыс немесе екеуі де жалған болса, «true» мәнін қайтаратын , операторы да кірді, ал егер A дұрыс, ал B жалған болса, ал қалған жағдайларда «true» мәнін қайтаратын оператор бар. операторы кез келген үш дерек типінің бір және екі өлшемді массивтерін бөлуге мүмкіндік берді. Индекстер диапазоны әрқашан 0-ден басталады (бірақ операторлары 0-қатардағы немесе 0-бағандағы элементтерді орнатпады). Тілге бүкіл матрицамен (немесе MATrix) жұмыс істеуге арналған бірқатар командалар енгізілді. командасы матрицаны оператордағы мәндермен толтырады, командасы массивті пайдаланушы енгізген мәндермен толтырады, ал командасы элементтерді 1D немесе 2D форматында басып шығарады. Матрицада әдепкі мәндерді орнату үшін де қолданылуы мүмкін, мысалы, байланысты кілт сөздерді пайдаланып, A массивін нөлдермен толтыруға болады. матрицаны көшіріп, оны кері аударуға болады. Сонымен қатар, , , және матрицалармен қолданылуы мүмкін, олар тиісті матрицалық операцияны орындайды.
The language supported three data types; floating point numbers, integers, and strings. Variables with no suffix were floating point (8 bytes, range 0.29 to 1.7, up to 16 digits of precision). Integer variables (16 bit, range −32768 to +32767) were indicated with a suffix, string variables (variable length) were indicated with a suffix. The list of mathematical and logical operators was typical of most BASICs, with some extensions. For math, , , , and were supported, along with as an alternate form of for computer terminals that might not have that character. Standard logical comparisons were , , , , , and One interesting addition was the operator, for "approximately equal". This would return true if the two numbers would be printed the same, that is, their six most significant digits were the same. Logical operators included the typical , and , along with , which return true if both A and B are true or both are false, and which is false if A is true and B is false and otherwise always true. The statement could allocate one dimensional and two dimensional arrays of any of the three data types. The range of subscripts always began with 0 (but statements did not set elements in row 0 or column 0). The language also included a number of commands to work with the entire array (or MATrix). The command would fill the matrix with values in a statement, would fill the array with user typed values, and would print out the elements in a 1D or 2D format. could also be used to set default values in a matrix using associated keywords, for instance, would fill the A array with zeros. would transpose an entire matrix, and would invert it. Additionally, , , and could be used on matrixes, performing the associated matrix operation.
Файлдарды өңдеу
"Virtual DIM" операторы "виртуалды деректер массиві" немесе "виртуалды массивтерді" дискілік файлға бейнелеуге мүмкіндік беретін болды, бұл компьютердің қолжетімді жадысынан (немесе тіпті оның адрестік кеңістігінен) үлкен массивтерді пайдалануға және массив элементтерін дискілік файлдарды оқу, жазу және кеңейту үшін (тұрақты сақтау) қолдануға мүмкіндік берді. Олар осы құрылымды "виртуалды деректер сақтауы" және "виртуалды жад" деп атады, бірақ ол массивтерді бөлу және жадқа бейнеленген файлды пайдаланудың қазіргі заманғы тәсілін қолданбады. Оның орнына, бір буферде бір уақытта 512 байт дерек сақталды, ал виртуалды массивтегі жазбаға қол жеткен кезде тиісті деректер оқылды және қажет болған жағдайда ескі деректер жазылды. Оператор файлды жабу алдында буферді қайта жазуға (қажет болса) себеп болды. Қосымша секторлар кэштелмегендіктен, деректерге "бұрыс" ретпен қол жеткізу дискіге жүгінулер санын арттыруы мүмкін. Виртуалды массивтерге қосымша талаптар қойылды, сондықтан бір дерек жазба шегінен асып кетпеуі керек: әрбір дерек түрі өзінің мөлшерінің еселігіне сәйкес келді. Виртуалды жолдар 2, 4, 8, 16, 32, 64, 128, 256 немесе 512 байтқа дейін шектелген және олар арқылы қол жеткізілді.
Виртуалды машина
BASIC PLUS интерпретатор емес, компиляциялап жұмыс істейтін жүйе болды: BASIC-тің әрбір жолы енгізілген кезде "PPCODE" (Push Pop Code) түріне аударылды, одан кейін виртуалды машинасының жылдам орындалуы үшін. Бұл аудармалар BASIC жолдарын токендемейді, бірақ оларды стек машинасы үшін қайта жазады; осы бейнелеулерді BASIC командаларына кері аудару мүмкін емес еді. Бұл кілт сөздерді қайта-қайта түсіндіру қажеттігін жойды: PPCODE-ге түрлендірілгеннен кейін кілт сөздер сол функцияны орындау үшін процедураларды көрсететін сандарға айналды. BASIC PLUS командасын қамтыды, бірақ бұл толыққанды компилятор емес еді; ол жай ғана бағдарламаның PPCODE бейнесін сақтайтын, сондықтан BASIC бағдарламасы келесі рет жадқа жүктелгенде оны қайта компиляциялаудың қажеті болмайды. Жүйе пайдаланушының бағдарламасын екі форматта сақтайды. Бірі – команда арқылы жасалған және әдетте BAS файлына сақталатын мәтіндік форматтағы өңделінетін бастапқы код. Екіншісі – командамен жасалған және BAC файлына сақталған бағдарламаның PPCODE нұсқасы; BAC файлдары кішкентайрақ және жылдам жүктеліп, орындалады, бірақ оларды өңдеуге болмайды.
BASIC Plus 2 (Баслық плюс 2)
Basic Plus 2 ("BP2" немесе BASIC Plus 2) деп аталатын туыс өнім кейінірек DEC компаниясымен қосымша мүмкіндіктер мен арттырылған өнімділік үшін әзірленді. Ол нақты компиляцияны тізбекті кодқа қолданды және өзінің нәтижесін ассемблер және басқа тілдік жүйелер жасаған машиналық кодтың объектілік файлдарымен үйлесімді объектілік файлдарға жазды. Бұл объектілік файлдар кітапханаларда сақталуы мүмкін. Содан кейін сілтемелеуші (TKB, сонымен қатар тапсырма құрастырушы деп те аталады) объектілік файлдар мен кітапханалардан орындалатын файлдарды жасады. TKB сонымен қатар үстемелерді де қолдады; бұл қажет болғанда жеке процедураларды виртуалды адрестік кеңістікке ауыстыруға мүмкіндік берді, қазіргі уақытта қолданылмайтын процедураларды жабатын. Сонымен қатар, BP2 бағдарламалары RSX Run Time System жүйесінде жұмыс істеді; бұл RTS пайдаланушының виртуалды адрестік кеңістігінің 8 КБ-ын ғана алды, пайдаланушының бағдарламасына 56 КБ қалдырды. (RSTS/E 9 нұсқасы бөлек нұсқаулық және дерек кеңістігін енгізді, сондай-ақ "жоғалып бара жатқан" RSX Run Time System жүйесін, нұсқаулық код пен деректердің әрқайсысына 64 КБ-ға дейін рұқсат берді.) Бұл екі фактор жеке BP2 бағдарламаларының BASIC PLUS бағдарламаларына қарағанда әлдеқайда үлкен болуына мүмкіндік берді, көбінесе бірнеше бағдарлама арасында тізбектеу қажеттілігін азайтады. BASIC PLUS-тан айырмашылығы (ол тек RSTS/E жүйесінде қол жетімді болды), BP2 RSX 11 операциялық жүйесі үшін де қол жетімді болды. BP2 бағдарламалары кейінірек VAX BASIC-пен де үйлесімді болды.
MS BASIC-пен салыстыру
Microsoft BASIC BASIC PLUS-ке өте ұқсас жасалған. MS BASIC-тің алғашқы нұсқалары, 1.x сериясы, бүтін сан айнымалыларынан құралмады, бірақ олар 2.x сериясында, көптеген машиналарда, соның ішінде Commodore PET және Commodore 64-тің кейінгі модельдерінде қосылды. Логикалық және циклдық командаларды бір жолға орналастыру мүмкіндігі, мысалы, көшірілмеді және микрокомпьютер BASIC-тің ең көп таралған нұсқаларында кездеспейді. MS BASIC-те матрицалық командалар да болған жоқ.