Кіріспе

DEC PDP сериялы машиналарында қолданылатын бағдарламалау тілі және HP41 калькуляторларындағы бағдарламалаумен байланысты емес мүмкіндіктер жиынтығы. FOCAL (Algebraic Language, немесе FOrmula CALculator) – JOSS негізінде құрылған, интерактивті интерпретацияланатын бағдарламалау тілі. Көбінесе Digital Equipment Corporation (DEC) Programmed Data Processor (PDP) сериялы машиналарында қолданылды. JOSS бағдарламалауды білмейтін адамдарға да бағдарламаларды оңай жазуға мүмкіндік беретін қарапайым, интерактивті тіл ретінде әзірленген. FOCAL қолдайтын командалар мен тілдің жалпы синтаксисі жағынан JOSS-қа өте ұқсас. Айырмашылығы, JOSS-тың диапазондар мен пайдаланушы анықтаған функциялар сияқты бірқатар кеңейтілген мүмкіндіктері талдаушыны (parser) жеңілдету үшін алынып тасталды. Кейбір резервтелген сөздер (кілттік сөздер) қайта аталды, осылайша олардың барлығы бірегей әріппен басталады. Бұл пайдаланушыларға бір таңбалы операторларды қолданып бағдарлама жазуға мүмкіндік берді, соның арқасында жадқа қажетті орын азайды. Бұл PDP 8 үшін маңызды еді, себебі оның жады көлемі көбінесе бірнеше килобайтқа (KB) дейін шектелген. JOSS сияқты, кейін BASIC тілінде де, PDP 8-дегі FOCAL толыққанды ортаны ұсынды, оған жол редакторы, интерпретатор және кіріс/шығыс процедуралары кірді. Бұл жиынтық FOCAL 8 деп аталды және PDP 5 және PDP 12 машиналарында да жұмыс істеді. PDP 11-ге көшірілген кезде, FOCAL 11 файлдарды қолдау және өңдеу үшін RT 11 негізгі операциялық жүйесіне сүйенді. Тілдің сипаттамасы екі рет жаңартылды: FOCAL 69 және FOCAL 71. Intel 8080 үшін де портталған нұсқасы болды. FOCAL алғашқы Hamurabi және Lunar Lander видео ойындарының түпнұсқа нұсқалары жазылған тіл ретінде танымал. Кейін екеуі де BASIC-ке көшірілді, онда олар одан да кеңінен танылды. FOCAL PDP платформасынан тыс жерде кең таралған жоқ және VAX 11-ге көшу кезінде жоғалып кетті. Бірақ ол КСРО-да жақсы дамыды, онда PDP 11 клондары білім беру және үй компьютерлері ретінде (BK сериясы) қолданылды.

JOSS

JOSS 1963 жылғы мамыр айында RAND корпорациясының JOHNNIAC компьютерінде пайда болды. RAND-та оның қолданылуы тез өсті, ал 1953 жылы салынған компьютердің мүмкіндіктері тез шектеліп қалды. JOHNNIAC 1966 жылы қызметтен шығарылды, ал JOSS жаңадан сатып алынған PDP 6 компьютерінде қайта іске асырылды, бұл Digital Equipment Corporation (DEC) компаниясының алғашқы "үлкен" машинасы болды. Қолданылуы одан әрі өсіп, 1970 жылға қарай жүйені ел бойынша 500-ден 600-ға дейін пайдаланушылар қолданды және бөлмелер арасында жылға қабілетті, жылдам қол жеткізу үшін қосылатын мобильді компьютерлік терминалдар сияқты бірнеше жаңалықтар пайда болды. JOSS өте әсерлі болды. Ол уақытты бөлісу енгізіліп жатқан кезде пайда болды. Адам-машина өзара әрекеттесуіне үлкен қызығушылық болды және компьютерлер кеңінен қолданыла бастады. Көптеген уақытты бөлісу операциялық жүйелері пайдаланушы тіркелгісі мен файлдарды басқаруға баса назар берді, пайдаланушылар өз бағдарламаларын жасауға міндетті болды, ал JOSS файлдарды өңдеу және бағдарламалау тілін бірге ұсынды. RAND жүйені сала мамандарына көрсетті.

ТАҢДЫРЫЛЫҚ

FOCAL DEC машиналарында танымал бола бастағанда, BASIC басқа платформаларда одан да танымал баламаға айналды. 1960 жылдардың соңына қарай бірнеше компания DEC-тің мини-компьютерлердегі бастығын бұзып, BASIC-тің уақытты бөлісу нұсқаларын іске қосатын ұқсас машиналарды сата бастады. Олардың ішінде HP Time Shared BASIC жүйесімен жұмыс істейтін HP 2100 сериясы ерекше көзге түсті. Дэвид Х. Ахл жақында DEC-тің PDP 8 тобына қосылғанда, компания машинаны білім беру саласына сатуға қызығушылық танытты. BASIC-тің білім беру нарығындағы танымалдылығы, әсіресе Миннесота білім берулік есептеу консорциумының BASIC бағдарламаларының кеңейіп келе жатқан кітапханасының арқасында, Ахл машинаны FOCAL арқылы сатудың қиын екенін анықтады, оның артықшылықтарына қарамастан. Кейін ол былай деп атап өтті:

Ахл платформа үшін BASIC жүйесін жасауды өз міндетіне алды, кейін ол Бруклиндегі бір ғана бағдарламашы екенін білген компанияны 4 кВт-тық PDP 8 үшін нұсқасын жасау үшін жалдады. DEC PDP 8-ді терминалдармен және BASIC-пен бірге "EduSystem" желісі ретінде сатуды бастады, сериядағы үлкен жүйелер BASIC-тің кеңейтілген нұсқаларымен, ал кейбір жағдайларда FOCAL және FORTRAN-мен де бірге келді. PDP 11 негізіндегі бірнеше EduSystem жүйелері де құрылды. Содан кейін Ахл FOCAL-дан BASIC-ке бағдарламаларды көшіруді бастады, әсіресе The Sumer Game (оның атын Хамураби деп өзгертті), Lunar Lander нұсқасы және көптеген кішкентай FOCAL демонстрациялары. Өз көшірмелерін сыртқы бағдарламашылардың ұсыныстарымен біріктіре отырып, ол 1973 жылы DEC-тің 101 BASIC компьютерлік ойынын шығаруға жеткілікті материал жинады. Кітап бірден сәттілікке ие болды және 1975 жылға дейін үш рет қайта басылды. 1970 жылдардың ортасына қарай BASIC барлық DEC машиналарының стандартты мүмкіндігіне айналды және FOCAL қолданысы тоқтады.

Кеңес Одағындағы қайта тууы

PDP 11 1970 жылдары Кеңес Одағында әскери мақсаттар үшін көшірілген. 1980 жылдары LSI 11-ге ұқсас, бір чипті нұсқалар жасалды, олар PDP 11-ге үйлесімді үй компьютерлерінің бірнеше сериясына жол ашты. Осы модельдердің ішінде ең танымалдары 1985 жылы жарық көрген Electronika BK сериясы болды. Олар бастапқыда FOCAL тілімен жабдықталған ROM картриджімен келді, ал BASIC картриджі қосымша опция ретінде ұсынылды. Кейінірек шыққан модельдерде BASIC тілі стандартты түрде орнатылған күйі келді.

Тіл

Төмендегі сипаттама FOCAL 8 тілдік анықтамалық нұсқаулығында келтірілген FOCAL 69 негізінде жасалған.

Тікелей және жанама режимдер

FOCAL командалық желі интерфейсі арқылы өзара әрекеттесу үшін JOSS үлгісін пайдаланды. Бұл пайдаланушыларға командаларды "тікелей режимде" теруге мүмкіндік берді, олар дереу орындалды, немесе олардың басына жол нөмірін қоюға болды, мұндайда егер нөмір бірегей болса, команда бағдарламаға қосылды, ал егер бұрын қолданылған болса, сол нөмірдегі код жаңартылды. Жұмыс принципі BASIC-тің "тез режимге" қарсы "бағдарламалық режимге" ұқсас. Бұл JOSS-тан өзгеше, онда барлық командалар – бағдарламалық және тікелей – пайдаланушының жұмыс кеңістігінің бір бөлігі ретінде сақталып, жүктелді. Бұл JOSS-қа жол нөмірінсіз командаларды пайдалануға мүмкіндік берді, олар анықтамалар және басқа да міндеттер үшін қолданылды. FOCAL-да мұндай мүмкіндік болмағандықтан, жүктеліп, сақталуы қажетті нұсқаулар басқа бағдарламалық режимдегі командалардың опцияларына айналды.

Бағдарламаның мазмұны

FOCAL бағдарламасындағы әрбір жол жол нөмірімен басталуы тиіс. JOSS сияқты, жол нөмірлері үтірмен бөлінген екі екі таңбалы бүтін саннан тұратын қатарлы сан болып табылады. FOCAL 8-де жарамды жол нөмірлері 1.01-ден 31.99-ға дейін. Басып шығарғанда, FOCAL BASIC-тегідей, бастың алдына нөлдер қосылады; мысалы, 1.10 деп басылады. Бұл шығарылғанда барлық жол нөмірлерін бес таңбалы етеді, осылайша барлық жол нөмірлері тізімделгенде түзу сызықта орналасады. Бұл жолдарға сілтеме жасайтын операторларда бастың алдына нөлдер қою қажет емес, мысалы, . Нүктенің сол жағындағы сан "топ нөмірі" деп аталады. Топтар Фортран немесе BASIC сияқты тілдерде жоқ кодты ұйымдастырудың бір деңгейін қамтамасыз етеді. Олардың негізгі мақсаты топты процедура ретінде пайдалану болды, оны , мысалы, 5-топтағы процедураға секіру үшін шақыруға болады. Редактор да оларды өңдеу кезінде пайдаланды, мысалы, 2-топтағы кодтың тізімін жасауға немесе 4-топтағы барлық жолдарды жоюға болады. Әрбір жол жол нөмірінен кейін команданың кілт сөзі болуы керек. BASIC-тегідей, міндетті емес оператор сияқты, "әдепкі команда" деген түсінік жоқ. Бірнеше операторды үтірлермен бөліп, бір жолға орналастыруға болады. Әдетте, FOR циклдерін қоспағанда, бұл операторлар бөлек жолдарда болғаннан ешқандай айырмашылық жасамайды.

Сұрау

Команда (қысқартылған А) жолдар мен айнымалылар тізімін қабылдайды, жолдарды қайталайды және пайдаланушы енгізгенін айнымалыларға сақтайды. BASIC-тің мына нұсқауларына балама:

01.01 ASK "NAME", NAME
01.02 ASK "COORDINATES", X, Y
01.03 ASK "A1",A1,"OMEGA",W,"T0",T0,"DAMPING FACTOR",DAMPINGFACTOR

Егер пайдаланушы сан емес, мәтін енгізсе, жүйе бастапқы әріпті санға айналдырады: "A" = 1, "B" = 2, және т.б.

Ескертпе

Команда (қысқартылған C) түсініктеме жасайды. Бастапқы нұсқаулықта бос жолдарды белгілеу үшін қолданылатын COMMENT синонимі ретінде тізімделген, бірақ бұл ішкі айырмашылықты білдірмейді. 01.01 КОММЕНТАРИЙ: "СУМЕР ОЙЫНЫ", РИЧАРД МЕРРИЛЛ.

ДО

Команда (қысқартылған атауы D) орындауды кіші бағдарламаға бағыттайды. Бұл BASIC-тегі кіші бағдарламаға шақырумен тең. Кіші бағдарлама топ нөмірімен немесе жол нөмірімен анықталады. Егер жол нөмірі берілсе, онда тек сол бір жол орындалады және кейін бастапқы командаға оралады. Егер жол нөмірі берілмесе, орындау блоктың бірінші жолынан басталып, блок соңына жеткенге дейін немесе командасы кездескенге дейін жалғасады. Кіші бағдарламадан ерте шығу үшін ғана қажет, топтың соңында қажет емес. 01.15 ДО 7.24 01.16 ДО 8

GOTO

Команда (қысқартылған G) бағдарлама орындалуын көрсетілген жол нөміріне дейін секіреді. Бұл BASIC-тегі бірдей аталатын оператормен бірдей. FOCAL-да BASIC-тегідей орындалуды бастау үшін де қолданылады, бірақ осы жағдайда құжаттамада оған негізгі команданың бірдей болғанына қарамастан, оның орнына деп аталады. 01.05 GOTO 1.01 02.90 TYPE ! !,"TRY AGAIN.",!!!!! ;GOTO 1.1

IF

Команда (I қысқартуы) өрнектің таңбасына негізделген шартты тармақталуды қамтамасыз етеді. Сандық өрнектен кейін IF командасы бірден үшке дейін жол нөмірін қабылдай алады. Егер өрнек нөлден кем болса, орындау бірінші жол нөміріне; егер нөлге тең болса, екінші жол нөміріне; егер нөлден үлкен болса, үшінші жол нөміріне бұрылады. Тілде үлкен, тең немесе кішіден сияқты салыстыру операторлары болған жоқ. Егер X > 5 болса, X пен 5-ті салыстыру қажет. 02.20 IF (25 25) 2.4,2.3,2.4 03.01 IF (X) 3.1,3.02,3.1 IF командасын бірінші жол нөмірінен кейін нүктелі-құрт (немесе жол соңы) қою арқылы қысқартуға болады. Мысалы: 02.20 IF (X) 1.8; ТІПТЕ "Q" 02.30 IF (X) 1.8,2.50 02.40 ТІПТЕ "P" Осы жағдайда 2.20 нөмірлі тест теріс нәтиже берсе, бағдарлама 1.8 жолына секіреді, әйтпесе ол жалғасады және консольге "Q" деп шығарады. 2.30 жолы мәні теріс немесе нөл болса, 1.8 немесе 2.5 жолына секіреді, әйтпесе консольге "P" деп шығаруды жалғастырады.

ҚОЛУ

Команда (қысқартылған атауы Q) бағдарламаның орындалуын тоқтатады және басқаруды өңдеу ортасына қайтарады. BASIC-тегі STOP немесе 01.10 FOR X= 10,1,10;TYPE X 01.20 QUIT-қа тең.

ҚҰНДЫРУ

Команда (қысқартылған R) орындауды кіші бағдарламадан шақыру орнына қайтарады. Кіші бағдарламаның соңғы жолында оны пайдалану міндетті емес, өйткені кіші бағдарлама тобының соңғы жолында бәрібір қайтарылады. "Иә/жоқ" сұрауын мәнге түрлендіруге арналған мысал кіші бағдарлама: 22.78 КОММЕНТАРИЙ: 'ИӘ НЕ ЖОҚ' КІШІ БАҒДАРЛАМА
22.80 СҰРАУ "ЖАУАП ИӘ НЕ ЖОҚ ?",AN
22.82 ЕГЕР (AN 0ИӘ)22.84,22.86
22.84 ЕГЕР (AN 0ЖОҚ)22.8,22.88,22.8
22.86 X=2 ҚОЮ;ҚАЙТАРУ
22.88 X=1 ҚОЮ;ҚАЙТАРУ

SET

Команда (қысқартылған атауы S) өрнектің нәтижесін көрсетілген айнымалыға тағайындайды. BASIC-тің 01.30 SET PI=3.14156 және 01.60 SET INTEREST=PRINCIPAL*(RATE/100)*TERM-імен мағынасы бірдей.

Өзгергіштер

Айнымалы атаулары F әрпінен басқа кез келген әріппен басталуы мүмкін (F функциялар үшін резервтелген) және әр түрлі әріптер мен сандар тізбегін қамтуы мүмкін. Дегенмен, маңыздысы тек алғашқы екі символ ғана. Мысалы, FOCAL: A New Conversational Language тілінен алынған келесі код үлгісі DESTINATION және DES бірдей айнымалыны көрсетеді. Ішкі жүйеде екі жағдай да DE белгіленген айнымалыға сілтеме жасайды:
01.80 ASK DESTINATION
02.30 IF (DES 14) 2.4,3.1,2.4

Кез келген айнымалыны массив ретінде қарастыруға болады, оған 2048-ден 2047-ге дейінгі индекс қолдануға рұқсат етіледі.

Бағдарламаларды орындау

FOCAL бағдарламаны бастау үшін редакторда қолданылады. Дегенмен, жиі қолданылатын тәжірибе бойынша, оны қысқарту қабылданды. Бұл BASIC-тегі сияқты нәрсе. Сондай-ақ, редакторда белгілі бір жолдан орындауды бастау үшін де қолданылуы мүмкін.

Қате кодтары

Аудармашыда қателік хабарламаларын немесе қателік нөмірлерінің тізімін сақтауға жеткілікті жад орыны болмағандықтан, FOCAL қате табу кодын тұрақты нүктелі сан ретінде көрсету арқылы шешім тапты. Мысалы, нөлге бөлу қатесі анықталғанда, 28.73 саны 28-ші жад бетіндегі осы қатеге тексеру кодын, ал 73 – сол бет ішіндегі 73 сөздік ығысқанды (offset) білдіреді, ал 01.10 – қате орын алған жол нөмірі. PDP 8 компьютеріндегі беттер 128 байттан тұрғандықтан, бұл мекенжай 3657-ші жад орнына сәйкес келеді.

FOCAL, 1971 жыл

Жаңа нұсқадағы бір өзгеріс – үлкен дәлдік үшін 10 таңбалы математикалық пакет болды. Функция енді кіріс өрнегі нөлге тең болса, нөлді қайтарады. Бұрын ол бірді қайтаратын. Енді олар одан да кездейсоқ таратылған сандарды жасайтын жақсырақ алгоритмді қолданды. Сонымен қатар, жаңа функция қосылды, ол жол (string) қабылдап, оның ASCII мәнін қайтарады (BASIC-тегідей) және санды қабылдап, сол ASCII таңбасын қамтитын жол (string) қайтарады. Бұл мүмкіндіктердің барлығы шектеулі жадты қолданғандықтан, FOCAL,1971 іске қосылғанда, пайдаланушыға қандай мүмкіндіктерді пайдаланғысы келетінін сұрайтын әңгіме терезесін ашты.

JOSS-пен салыстыру

FOCAL - бұл JOSS-тің тазартылған нұсқасы, синтаксисті жеңілдету және талдауды оңайлату үшін өзгерістер енгізілді. FOCAL командаларының басым бөлігі JOSS-пен сәйкес келеді және тек егжей-тегжейлі айырмашылықтарға ие. Бірінші көз тартатын өзгеріс – JOSS үлкен және кіші әріптерге сезімтал емес, кілт сөздерді аралас әріптермен шығарады, ал FOCAL тек үлкен әріптерді қолданады. Сонымен қатар, JOSS операторлары нүктемен аяқталады, жазбаша мәлімдемелерге ұқсас, ал FOCAL-да жол соңында нүкте міндетті емес. Маңызды айырмашылық – JOSS толыққанды салыстыру операциялары жиынтығын және логикалық жүйені ұсынады, олар «және» конструкциялары ішінде жұмыс істейді. Бұтақтар мен циклдар кез келген операторға қолданылуы мүмкін, ал FOCAL-да олар тек «goto» операторына баламалы болды. Мысалы, JOSS-те: 1.10 А түрін, егер X>10 болса. 1.20 i = 1(1)10 үшін i түрін таңдаңыз. Бірінші жол X мәніне байланысты А-ны басып шығарады, ал екіншісі 1-ден 10-ға дейінгі сандарды басып шығарады. FOCAL-да мәндерді салыстыру мүмкін емес еді, ал циклдар аяқталғанда келесі жолға секіру арқылы іске асырылды. FOCAL-дағы эквивалентті код: 1.10 IF (X 10),,1.30 1.20 TYPE A! 1.30 FOR I=1,1,10;TYPE I,! JOSS жүзеге асыруы, бағдарламашының ниеттерін жақсырақ көрсететін және жиі қолданылатын конструкцияларды құруды жеңілдетеді, бірақ орындалу уақытын күрделендіреді. Мысалы, JOSS циклдердегі диапазонды 1,2,3,10(5)50,75,78 сияқты икемді түрде сипаттауға мүмкіндік берді. Бұл икемділікке бағасы бар; FOCAL-да бастапқы, соңғы және қадам мәндерін жадтағы арнайы құрылымда сақтауға және цикл орындалғанда оларды оңай жаңартуға болады, ал JOSS оларды қайта бағалауды талап етеді, бұл кейде күрделірек болуы мүмкін. FOCAL-да кодты ықшамдау үшін өзгерістер шамалы болды. Мысалы, JOSS-тегі FOCAL-да кішірек болады, ал команда кілт сөздері де мүмкіндігінше қысқартылды, сондықтан JOSS-тегі FOCAL-да болады, бұл оны қысқартуға және D әрпін тек Parser үшін пайдалануға мүмкіндік береді. Parser-ді оңайлату үшін, FOCAL-дың кейбір опциялары алынып тасталды. Мысалы, JOSS бірнеше мәндерді бірдей тағайындауға мүмкіндік берді, ал FOCAL-да оларды жеке операторлармен жасау қажет болды. Сол сияқты, JOSS-тегі , шығысты форматтау үшін қолданылатын, FOCAL-дағы операторымен біріктірілді.

Версиялар мен қосалқы өнімдер

Coca Cola корпорациясы FOCAL-дың COKE деп аталатын жекелендірілген нұсқасын пайдаланды. Кейін FOCAL PDP 7, PDP 9, PDP 10, PDP 11, PDP 12, PDP 5 және LINC 8 компьютерлерінде іске асырылды. FOCAL нұсқаулығында FOCAL талдайтын құрылғысына командаларды қалай қосу керектігі көрсетілген, сондықтан көптеген орталықтар арнайы аппаратты басқару үшін арнайы командаларды қосты. "Цифрлық жабдықтарды пайдаланушылар қоғамы" FOCAL үшін көптеген түзетулер мен жақсартуларды жинады. Тіпті FOCAL W сияқты FOCAL-дың көптеген жетілдірілген нұсқалары болды, олар көптеген мүмкіндіктерді, соның ішінде жақсы жаппай сақтау файлдық кіріс-шығысын және тіпті виртуалды өзгермелі жадты қамтыды. 1970 жылдардың ортасында DELTA – FOCAL-дың күрделірек нұсқасы болды. Бағдарлама жолдарының нөмірлері 00-ден 99-ға дейін "бөлімдер" және 000000-ден 999999-ға дейін "қадамдар" аралығында әріптік-цифрлық тәртіппен орындалды. DELTA Tektronix 4010/14 дисплейлік осциллографы үшін арнайы командаларды қамтыды. Ресейде ол 1990 жылдардың басына дейін Electronika BK сериялы үй компьютерлерінде қолданылды. Microsoft FOCAL-дың қағаз таспада берілген нұсқасын сатты. Реймонд Ченнің сөзіне сүйенсек, негізгі таспа жоғалып кеткен, сондықтан FOCAL енді қолжетімді емес.