Кіріспе
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 сериясы) қолданылды.
the unrelated set of programming related features on HP41 calculators
FOCAL (acronym for Formulating On line Calculations in Algebraic Language, or FOrmula CALculator) is an interactive interpreted programming language based on JOSS and mostly used on Digital Equipment Corporation (DEC) Programmed Data Processor (PDP) series machines. JOSS was designed to be a simple interactive language to allow programs to be easily written by non programmers. FOCAL is very similar to JOSS in the commands it supports and the general syntax of the language. It differs in that many of JOSS' advanced features like ranges and user defined functions were removed to simplify the parser. Some of the reserved words (keywords) were renamed so that they all start with a unique first letter. This allows users to type in programs using one character statements, further reducing memory needs. This was an important consideration on the PDP 8, which was often limited to a few kilobytes (KB). Like JOSS, and later BASICs, FOCAL on the PDP 8 was a complete environment that included a line editor, an interpreter, and input/output routines. The package as a whole was named FOCAL 8, which also ran on the PDP 5 and PDP 12. When ported to the PDP 11, the resulting FOCAL 11 relied on the underlying operating system, RT 11, to provide file support and editing. The language definition was updated twice, to FOCAL 69 and a very slightly modified FOCAL 71. A port to the Intel 8080 was also available. FOCAL is notable as the language in which the original versions of the early video games Hamurabi and Lunar Lander were written. Both were later ported to BASIC, where they became much better known. FOCAL was not popular outside the PDP platform and largely disappeared during the move to the VAX 11. It had a strong revival in the Soviet Union where PDP 11 clones were used as educational and home computers (BK series).
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 циклдерін қоспағанда, бұл операторлар бөлек жолдарда болғаннан ешқандай айырмашылық жасамайды.
The number on the left of the period is known as the "group number". Groups provide some level of code organization that is lacking in languages like Fortran or BASIC. The primary use of these was to use a group as a subroutine which can be called with , for example, will jump to the subroutine written in group 5. The editor also used these during edit time, for example, one could to produce a listing of the code in group 2, or to delete all of the lines in group 4. Every line must start with a command keyword following the line number. There is no concept of a "default command" as is the case in BASIC with its optional statement. Multiple statements can be placed on a single line, separated by semicolons. Usually, the behavior is no different than if the statements had been on separate lines, except in the case of FOR loops.
Сұрау
Команда (қысқартылған А) жолдар мен айнымалылар тізімін қабылдайды, жолдарды қайталайды және пайдаланушы енгізгенін айнымалыларға сақтайды. BASIC-тің мына нұсқауларына балама:
01.01 ASK "NAME", NAME
01.02 ASK "COORDINATES", X, Y
01.03 ASK "A1",A1,"OMEGA",W,"T0",T0,"DAMPING FACTOR",DAMPINGFACTOR
If the user doesn't enter a number but enters text, the system will convert the initial character to a number with "A"=1, "B"=2, etc.
01.01 ASK "NAME", NAME
01.02 ASK "COORDINATES", X, Y
01.03 ASK "A1",A1,"OMEGA",W,"T0",T0,"DAMPING FACTOR",DAMPINGFACTOR
01.01 ASK "NAME", NAME
01.02 ASK "COORDINATES", X, Y
01.03 ASK "A1",A1,"OMEGA",W,"T0",T0,"DAMPING FACTOR",DAMPINGFACTOR
If the user doesn't enter a number but enters text, the system will convert the initial character to a number with "A"=1, "B"=2, etc.
Егер пайдаланушы сан емес, мәтін енгізсе, жүйе бастапқы әріпті санға айналдырады: "A" = 1, "B" = 2, және т.б.
01.01 ASK "NAME", NAME
01.02 ASK "COORDINATES", X, Y
01.03 ASK "A1",A1,"OMEGA",W,"T0",T0,"DAMPING FACTOR",DAMPINGFACTOR
If the user doesn't enter a number but enters text, the system will convert the initial character to a number with "A"=1, "B"=2, etc.
Ескертпе
Команда (қысқартылған C) түсініктеме жасайды. Бастапқы нұсқаулықта бос жолдарды белгілеу үшін қолданылатын COMMENT синонимі ретінде тізімделген, бірақ бұл ішкі айырмашылықты білдірмейді. 01.01 КОММЕНТАРИЙ: "СУМЕР ОЙЫНЫ", РИЧАРД МЕРРИЛЛ.
ДО
Команда (қысқартылған атауы D) орындауды кіші бағдарламаға бағыттайды. Бұл BASIC-тегі кіші бағдарламаға шақырумен тең. Кіші бағдарлама топ нөмірімен немесе жол нөмірімен анықталады. Егер жол нөмірі берілсе, онда тек сол бір жол орындалады және кейін бастапқы командаға оралады. Егер жол нөмірі берілмесе, орындау блоктың бірінші жолынан басталып, блок соңына жеткенге дейін немесе командасы кездескенге дейін жалғасады. Кіші бағдарламадан ерте шығу үшін ғана қажет, топтың соңында қажет емес. 01.15 ДО 7.24 01.16 ДО 8
01.16 DO 8
GOTO
Команда (қысқартылған G) бағдарлама орындалуын көрсетілген жол нөміріне дейін секіреді. Бұл BASIC-тегі бірдей аталатын оператормен бірдей. FOCAL-да BASIC-тегідей орындалуды бастау үшін де қолданылады, бірақ осы жағдайда құжаттамада оған негізгі команданың бірдей болғанына қарамастан, оның орнына деп аталады. 01.05 GOTO 1.01 02.90 TYPE ! !,"TRY AGAIN.",!!!!! ;GOTO 1.1
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" деп шығаруды жалғастырады.
03.01 IF (X) 3.1,3.02,3.1
IF could be short formed by placing a semicolon (or end of line) beyond the first line number. For example:
02.20 IF (X)1.8; TYPE "Q"
02.30 IF (X)1.8,2.50
02.40 TYPE "P"
In this case the test at 2.20 will cause the program to jump to line 1.8 if the test is negative, otherwise it will continue and type "Q" to the console. Line 2.30 will jump to 1.8 or 2.5 if the value is negative or zero, and otherwise continue to type "P" to the console.
ҚОЛУ
Команда (қысқартылған атауы Q) бағдарламаның орындалуын тоқтатады және басқаруды өңдеу ортасына қайтарады. BASIC-тегі STOP немесе 01.10 FOR X= 10,1,10;TYPE X 01.20 QUIT-қа тең.
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 ҚОЮ;ҚАЙТАРУ
22.80 ASK "ANSWER YES OR NO ? ",AN
22.82 IF (AN 0YES)22.84,22.86
22.84 IF (AN 0NO)22.8,22.88,22.8
22.86 SET X=2;RETURN
22.88 SET X=1;RETURN
SET
Команда (қысқартылған атауы S) өрнектің нәтижесін көрсетілген айнымалыға тағайындайды. BASIC-тің 01.30 SET PI=3.14156 және 01.60 SET INTEREST=PRINCIPAL*(RATE/100)*TERM-імен мағынасы бірдей.
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
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 іске қосылғанда, пайдаланушыға қандай мүмкіндіктерді пайдаланғысы келетінін сұрайтын әңгіме терезесін ашты.
As all of these options used up limited memory, when started, FOCAL,1971 entered a dialog that asked the user what features they wanted to use.
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-дағы операторымен біріктірілді.
1.10 Type A if X>10. 1.20 Type i for i=1(1)10. The first line optionally prints A based on the value of X, and the second prints the numbers 1 to 10. In contrast, FOCAL lacked the ability to compare values, and loops were applied by skipping to the next line when they completed. The equivalent code in FOCAL would be:
1.10 IF (X 10),,1.30
1.20 TYPE A! 1.30 FOR I=1,1,10;TYPE I,! JOSS' implementation makes common constructs easier to build and more closely match a programmer's intentions, at the cost of making the runtime more complex. For example, JOSS allowed ranges in loops to be described in a flexible fashion like 1,2,3,10(5)50,75,78. This flexibility comes at a cost; in FOCAL the start, stop, and step can be written in a custom in memory structure and easily updated as the loop is performed, whereas JOSS requires it to reevaluate an expression that may be, but often isn't, more complex. In order to make the code terser in FOCAL, changes were relatively minor. For example, JOSS' becomes the slightly smaller FOCAL , while becomes Command keywords were also shortened where possible, so JOSS' becomes FOCAL's , both to make it shorter and to allow the letter D to be uniquely used for
To simplify the parser, some FOCAL options were removed. For example, JOSS could perform multiple assignments with while in FOCAL these had to be made individual statements, Likewise, JOSS' , used to format output, was combined into FOCAL's with the .
Версиялар мен қосалқы өнімдер
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 енді қолжетімді емес.