BLISS

**BLISS** — bul shama menen 1970-jılı Karnegi Mellon universitetinde (CMU) W. A. Vulf, D. B. Rassel hám A. N. Xabermann tárepinen islep shıǵılǵan sistemalıq programmalastırıw tili. Ol bir neshe jıl ótkennen keyin C payda bolǵanǵa shekem eń belgili sistema tili bolǵan shıǵar. Sonnan berli, C ataqlı hám keń tarqalǵan bolıp, al BLISS umıtıldı. C endi rawajlanıp atırǵan waqıtta, Bell Labs ishindegi bir neshe joybarlar BLISS penen C-diń artıqmashılıqların talqıladı.

BLISS — bul operatorlar ornına ańlatpalarǵa tiykarlanǵan, tipsiz, blok-strukturalıq programmalastırıw tili bolıp, qátesiz qayta islew, korutinalar hám makroslar ushın konstrukciyalardı óz ishine aladı. Onda goto operatorı joq.

Atamanıń Basic Language for Implementation of System Software yamasa System Software Implementation Language, Backwards sózleriniń qısqartpası ekeni haqqında hár qıylı pikirler bar. Degen menen, Babbage Institutınıń Kompyuter Qáwipsizligi Tariyxı Joybarı ushın 2015-jılǵı awızeki tariyxında, Vulf bul qısqartpanıń dáslep «Sistemalıq programmalıq támiynattı ámelge asırıw ushın Billdiń tili» atına tiykarlanǵanın ayttı.

Dáslepki Karnegi Mellon kompilyatorı optimallastırıwdı keń qollanıwı menen belgili bolǵan hám «Optimallastıratuǵın kompilyatordıń dizaynı» atlı klassikalıq kitaptıń tiykarın quradı.

Digital Equipment Corporation (DEC) PDP-10, PDP-11, VAX, DEC PRISM, MIPS, DEC Alpha hám Intel IA-32 ushın BLISS kompilyatorların islep shıqtı hám qollap-quwatladı. Bul til klientler arasında keń tarqalmadı hám az sanlılarda ǵana kompilyator bolǵan, biraq DEC onı 1980-jıllarǵa shekem ishki jumıslarda keńnen qollandı; OpenVMS operaciyalıq sistemasınıń kópshilik utilita programmaları BLISS-32 de jazılǵan. DEC BLISS kompilyatorı IA-64 hám x86-64 arxitekturalarına OpenVMS-ti usı platformalarǵa kóshiriwdiń bir bólimi retinde kóshirilgen. x86-64 BLISS kompilyatorı Alpha hám IA-64 ushın qollanılǵan menshikli GEM backendin almastırıp, óziniń backend kod generatorı retinde LLVM-di paydalanadı.

## Tildiń táriypi

BLISS tili tómendegi ózgesheliklerge iye:

* Barlıq konstantalar qollanılıp atırǵan mashina ushın tolıq sóz bolıp tabıladı, mısalı, PDP-11 sıyaqlı 16-bitlik mashinada turaqlı 16 bit; VAX kompyuterinde konstantalar 32 bit, al PDP-10 da turaqlı 36 bit.
* Ózgeriwshige silteme bárqulla sol ózgeriwshiniń adresi bolıp tabıladı. Mısalı, Z+8 kórsetpesi Z-nıń mánisine emes, al Z-nıń adresine 8 di qosıwdı bildiredi. Eger Z-nıń mánisine 8 di qosıw kerek bolsa, ol ózgeriwshiniń aldına noqat qoyıwı kerek; sonlıqtan bul funkciyanı orınlaw ushın .Z+8 dep jazıw kerek, bul Z-nıń mazmunına 8 di qosadı.
* Menshiklew standart = belgisi menen orınlanadı, mısalı Z=8 – bul 8 di óz ishine alǵan tolıq sózli turaqlını jaratıwdı hám onı adresi Z-nıń adresine sáykes keletuǵın orınǵa saqlawdı bildiredi. Sonlıqtan Z+12=14 (yamasa, alternativ túrde 12+Z=14, degen menen bul forma Digital-daǵı BLISS hújjetlerine sáykes jaman ámeliyat dep esaplanadı) 14 turaqlısın Z-nıń adresinen 12 sózden keyingi orınǵa jaylastıradı.
* Blok operatorları ALGOLǵa uqsas: blok BEGIN operatorı menen baslanadı hám END penen tamamlanadı. ALGOL sıyaqlı, operatorlar útirli noqat (;) penen ajıratıladı. Mánis esaplanǵanda, ol kelesi operator terminatorına shekem saqlanadı – bul mánistiń esaplanıwı, ózgeriwshige menshikleniwi hám kelesi operatorǵa ótkiziliwi múmkin ekenin bildiredi, eger qálese. Alternativ túrde, bloktı baslaw ushın ashılatuǵın qawsırma paydalanılıwı múmkin, al jabılatuǵın qawsırma bloktı jabıw ushın paydalanıladı. Ańlatpaǵa qawsırmalar kirgizilgende, standart orınlanıw tártibi qaǵıydaları paydalanıladı, bul jerde qawsırmalı ańlatpalar birinshi esaplanadı,
* Shártli orınlanıw IF ańlatpasın paydalanadı, ol ras-jalǵan shártin tekseredi, alternativ háreketlerdi orınlaydı hám nátiyje qaytaradı.
* Salıstırıw EQL sıyaqlı gilt sózlerin paydalanadı (sol maqset ushın = belgisin artıqsha júklew ornına), GTR Úlkenirek ushın hám NEQ Teń emes ushın. Mısalı, tómendegi kod Z-nıń absolyut mánisin Q menen kórsetilgen adreske menshikleydi:

:: `Q = (IF .Z GTR 0 THEN .Z ELSE -.Z);`

* *Identifikatorlar* (ózgeriwshiler hám konstantalar) qollanıwdan aldın, ádette OWN gilt sózin paydalanıp járiyalanıwı kerek. Ózgeriwshini járiyalaw ádette kompilyatordıń oǵan orın ajıratıwına sebep boladı; kerek bolǵanda, ózgeriwshige BIND járiyalanıwı arqalı anıq mashina adresi tayınlanıwı múmkin. Bul ózgeshelik tiykarınan ya mashina registrlerine ya belgili bir arnawlı adreslerge kiriw ushın qollanıladı.
* Tildegi kishi programmalar rutinalar dep ataladı hám ROUTINE gilt sózi menen járiyalanadı.
* Tekstti almastırıwǵa imkaniyat beretuǵın makroslar MACRO gilt sózi menen járiyalanadı.
* Til massivlerdi qollaydı, olar strukturalar dep ataladı hám VECTOR gilt sózi menen járiyalanadı.
* Til geypara joqarı dárejeli programmalastırıw tili konstrukciyaların qollaydı, mısalı:
** CASE ańlatpası arqalı alternativ orınlanıw jolları
** ALGOLdıń FOR operatorına uqsas INCR ańlatpasın paydalanıw arqalı cikllı aylanıw
** *Ornatılǵan qatar funkciyaları*
** Ayırım avtomat maǵlıwmat túrlendiriwleri (sandı qatarǵa hám t.b.)

## Derek mısalı
Tómendegi mısal Bliss tiliniń qollanbasınan alınǵan:
```text
MODULE E1 (MAIN = CTRL) =
BEGIN
FORWARD ROUTINE
CTRL,
STEP;
ROUTINE CTRL =
!+
! Bul rutina mánis kirgizedi, onı qayta isleydi hám
! sonnan keyin nátiyjeni shıǵaradı.
!-
BEGIN
EXTERNAL ROUTINE
GETNUM, ! Terminaldan san kirgiziw
PUTNUM; ! Terminalǵa san shıǵarıw
LOCAL
X, ! Kirgizilgen mánis ushın saqlaw ornı
Y; ! Shıǵarılǵan mánis ushın saqlaw ornı
GETNUM(X);
Y = STEP(.X);
PUTNUM(.Y)
END;
ROUTINE STEP(A) =
!+
! Bul rutina berilgen mániske 1 di qosadı.
!-
(.A+1);
END
ELUDOM
```


## Derekler

__BÖLİDİMÖNDEMEW__