Кіріспе
Компьютерлік бағдарламалау тілі
S algol (St Andrews Algol) Тілді анықтайтын техникалық есеп, The S algol Reference Manual (1979, 1988), бірнеше адамға көмегі үшін алғыс айтады, соның ішінде Дэвид Тернерге 1975 жыл шамасында тіл дизайны бойынша болған әңгімелері үшін. 1981 жылғы компьютер ғылымы бойынша оқулық «Рекурсивті түсу арқылы компиляциялау» компилятордың іске асырылуы және бастапқы жүктеу процесін сипаттайды, ал 1982 жылғы «S algol-мен бағдарламалауға кіріспе» кітабы компьютерлік бағдарламалауды үйрету үшін осы тілді пайдаланады. S algol-дің алғашқы нұсқасы Unix операциялық жүйесінде жұмыс істейтін PDP 11/40 компьютерінде іске асырылды және Паскаль тілін ойлап тапқан Никлаус Вирт осыны қолдады. PDP 11 жадының 32К 16 биттік сөздер ретінде ұйымдастырылуын ескере отырып, S кодының нұсқаулық кодтамасы әр байткоды бір сөзден тұратындай етіп жасалған.
Тілдер туралы жалпы түсінік
S algol бағдарламасы - декларациялар мен ережелердің тізбегі. Декларацияланған тіл элементтеріне тұрақтылар, айнымалылар, процедуралар мен құрылымдар кіреді. Тұрақты және айнымалы декларацияларында бастапқы мән міндетті түрде көрсетілуі керек. Компилятор мәлімделген тұрақты немесе айнымалының дерек типін бастапқы мәннің типінен анықтайды, сондықтан тип нақты көрсетілмейді. Дерек типтеріне бүтін сан, нақты сан, логикалық, жол, құрылымға сілтеме және файл, сондай-ақ осы типтердің векторлары (массивтері) кіреді. Процедура декларациялары аргументтерінің дерек типтерін және қайтарылатын мәнді (егер мән болмаса) көрсетеді. Құрылымдар өздерінің өрістерінің дерек типтерін де көрсетеді. Ережелерге өрнектер мен басқару құрылымдары (егер, жағдай, үшін, кезде және қайталап кезде) кіреді. Егер және жағдай басқару құрылымдары мәндерге ие болуы мүмкін және типтердің үйлесімділік ережелері сақталған жағдайда, өрнектерде еркін қолданылуы мүмкін. Бұл жұмыстың бастауы Питер Лэндин және Кристофер Стречидің еңбектерінде жатыр. Абстракциялау принципі – Тілдегі барлық мағыналық санаттар бойынша абстракциялау мүмкін болуы керек. Мысалдарға функция, яғни өрнектер бойынша абстракция, және процедура, яғни операторлар бойынша абстракция кіреді. Теннент және Моррисон бұл принципті қолдану қиын екенін атап өтті, себебі абстракциялауға тиіс семантикалық мағыналы конструкцияларды анықтау қиын. Сондай-ақ, қолданылмайтын сілтемелердің тудыратын мәселелер де бар. Бақылау идентификаторы тұрақты және цикл ішінде өзгертілмейді. Сонымен қатар, <шарт> болғанда <оператор> және <оператор> <шарт> болғанда қайталап орындау циклдары да кең таралған. <оператор> қайталап <шарт> болғанда <оператор> конструкциясы ерте шығуды немесе "жартысынан бірге n" циклін қамтамасыз етеді.
Абстракциялар
S algol өрнектерді функциялар ретінде, ал мәлімдемелерді (бос өрнектерді) процедуралар ретінде абстракциялайды. Модульдер декларациялардың абстракциясын қамтамасыз ететін еді, бірақ S algol модульдерді қамтымайды, себебі олар блок құрылымды ауқымда қиындықтар тудырады. Соңғы синтаксистік категория – секвенсер немесе басқару құрылымы. Теннент секвенсерлер арқылы абстракция үшін "жалғау" терминін қолданды, бұл goto және break-тің жалпылама түрі болар еді. Бұл категориядағы ең белгілі абстракция – ағымдағы жалғасумен шақыру, бірақ ол бірнеше жылдан кейін ғана толыққанды түсінілді. S algol goto немесе break-ті қамтымайды және секвенсерлер арқылы абстракциялауды да қамтымайды.
Декларациялар мен параметрлер
S algol-дегі әрбір дерек объектісі мәлімделген кезде міндетті түрде мәнмен берілуі керек. Бұл мән бойынша параметрлерді жіберуге сәйкес келеді және инициализацияланбаған мәнді пайдалану мүмкіндігін жояды. Шындығында, S algol-де параметрлерді жіберудің жалғыз тәсілі – мән бойынша жіберу. Сілтемелік және нәтижелік параметрлер қабылданбайды, бұл S algol-дің l-мәндерін жіберуге тыйым салуымен үйлеседі. Құрылымдар мен векторлар нысандарға көрсеткіштер ретінде жіберіледі, бірақ бұл әлі де мән бойынша жіберу болып табылады, себебі мінез-құлқы тапсырмалардың оң жағында қолданылатын мәнмен бірдей. Кез келген жариялаудың параметрлік эквиваленті бар. Барлық процедура параметрлерінің түрлері көрсетілуі тиіс. Параметр ретінде жіберілген кез келген процедураның толық түрі көрсетіледі (Pascal-дан айырмашылығы), және бұл құрылым класы үшін де дұрыс.
Кіріс-шығыс моделі
S algol I/O ағындары үшін файлдық дерек типін ұсынады, және негізгі типтермен жұмыс істеу үшін оқу және жазудың бірнеше түрлері анықталған. Әрбір нақты іске асылым осы қарапайым мүмкіндіктерді қажеттілікке қарай кеңейтеді деп күтілуде.
Нақты синтаксис
АЛГОЛ тілдері сөз көптеп қолданылатыны үшін сынға ұшырайды. S algol бұл мәселені шешуге тырысады, осы үшін шектеулер аз синтаксис ұсынады. Бұл көбінесе декларация синтаксисінде көрінеді. Айткенде, айнымалылар декларациясында әрқашан бастапқы мән міндетті болғандықтан, түрін анық көрсетудің қажеті жоқ. Процедураның параметрлері мен қайтарылатын мәнін процедура қалай шақырылатынын қарастыру арқылы анықтауға болса да, S algol параметрлер мен қайтарылатын мәндерді көрсетуді талап етеді. Бұл – практикалық шешім, себебі процедураны оның шақырылуларын қарастырмастан түсінуге болады. Көптеген АЛГОЛ тілдерінде блок ішіндегі барлық декларациялар мәлімдемелерден бұрын болуы керек. S algol-да декларацияларды мәлімдемелермен араластыруға болады, өйткені әрбір нәрсе қолданылғанға дейін жариялануы тиіс және декларацияны өткіріп жіберуге мүмкіндік беретін goto операторы жоқ.