Charm (programmalastırıw tili)

**Charm** — bul 1990-jıllardıń basında oylap tabılǵan kompyuter programmalastırıw tili bolıp, RTL/2, Pascal hám C tillerine uqsaslıqları menen birge óziniń ayırım unikal ózgesheliklerin de óz ishine aladı. Charm tili kompilyator dizaynı boyınsha tiykarǵı kitaplarda táriyiplengendey rekursiv tómen túsiwshi sintaksislik analizator tárepinen qayta isleniwge qolaylı kontekstsiz grammatika menen anıqlanǵan.

Kompilyator, assembler hám linkerdi óz ishine alǵan Charm qurallar toplamı Acorn-nıń RISC OS platforması ushın qoljetimli etildi. RISC OS platformaları ushın qayta islengen Charm keyinirek Archive jurnalında kórip shıǵıldı.

Charm jáne de «Raspberry Pi de Charm tilinde Programmalastırıw» atlı elektron kitapta táriyiplengen.

## Grammatika
Charm grammatikasınıń Bekus-Naur formasındaǵı anıqlaması hám Charm konstrukciyalarınıń táriyiplewshi mısalları menen birge Charm tili betinde anıqlanǵan.

Til blok strukturalı bolıp, hárbir blok blokta orınlanıp atırǵan operaciyanıń táriyipleytuǵın til gilt sózi menen baslanadı, mısalı, (iteraciya), , (tańlaw). Hárbir blok { hám } shegaralawshıları menen qorshalǵan. Bunnan tısqarı, anıqlıq ushın blok ishindegi til qatarları ádette sheginis penen jazıladı, degen menen bos orın itibarǵa alınbaǵanlıqtan bul talap etilmeydi.

Hárbir grammatikalıq jaqtan durıs tekst orınlanatuǵın kod hám baylanıslı maǵlıwmatlar toplamın bildiredi, ol Charm qurallar toplamı tárepinen maǵlıwmatlardı qayta islew yamasa grafikalıq paydalanıwshı interfeysi (GUI) arqalı paydalanıwshılar menen óz-ara tásir etiw sıyaqlı paydalı jumıslardı orınlaw ushın operaciyalıq sistema usınatuǵın xızmetlerdi paydalanıp isley alatuǵın programmanı jıynaw waqtında komponent retinde paydalanılıwı múmkin.

### Maǵlıwmat tipleri
Charm — bul qatań tipli til, biraq sanlı hám haqıyqıy sanlı tipler arasında ayırım jasırın túrlendiriwlerge ruqsat beredi. Tómendegi tiykarǵı ózgeriwshi tipleri qollap-quwatlanadı:

:*   – pútin sanlar
:*   – simvollar
:*   – logikalıq mánisler (ras yamasa jalǵan)
:*   – haqıyqıy sanlar

Birdey tiptegi maǵlıwmatlar toplamları array gilt sózi járdeminde járiyalanıwı hám statikalıq túrde inicializaciyalanıwı múmkin, hám olar kóp ólshemli bolıwı múmkin. Hár túrli tiptegi toplamlar record gilt sózi járdeminde járiyalanıwı múmkin, hám bunday járiyalanıw saqlaw ornalasıwı jaǵınan bir-birin basıp ótetuǵın jazıw maydanlarınıń union ın anıqlawına ruqsat etiledi. Moduller sonday-aq statikalıq hám dinamikalıq maǵlıwmat aǵzalarınıń aralaspasın óz ishine alıwı múmkin. Jazıwlardıń da, modullerdiń de (tek dinamikalıq mazmun) úlgileri stekte yamasa new operatorı arqalı stekde instanciyalana aladı. Moduller sonday-aq dinamikalıq maǵlıwmatlardı inicializaciyalaw ushın bir konstruktor procedurasın hám C++ tiline uqsas usılda resurslardı bosatıw ushın sáykes dekonstruktor procedurasın anıqlay aladı.

### Siltemeler
Bir modul kólemindegi maǵlıwmatlar yamasa proceduralar global gilt sózin paydalanıw arqalı sońǵı qosımsha ushın global etiliwi múmkin. Eger bir modul basqa bir Charm modulinen bir proceduraǵa yamasa maǵlıwmatqa silteme beriwdi qálese, ol bunı import gilt sózin paydalanıw arqalı isleydi. Moduller jasırın birinshi parametr this kórsetkishi arqalı member gilt sózi menen járiyalanǵan proceduralar arqalı qoljetimli bolǵan úlgi tiykarındaǵı aǵza ózgeriwshilerin óz ishine ala aladı.

Maǵlıwmatlar konstrukciyalarına hám proceduralarǵa siltemeler ref gilt sózin paydalanıw arqalı islenedi. Olar deref gilt sózin paydalanıw arqalı dereferenciyalanıwı múmkin. Silteme ózgeriwshilerin paydalanǵanda, eki silteme ózgeriwshisiniń birdey maǵlıwmat elementine silteme berip-bermeytuǵının ( :=: ) yamasa olar kórsetip turǵan maǵlıwmatlardıń birdey ekenin ( = ) tekseriw ushın salıstırıw operatorları bar.

### Mısal
Charm tilinde jazılǵan dáslepki klassikalıq «Sálem, álem!» programması:
```text
ext proc write_string (ref array char);
    module hello;
        ent proc start ();
            write_string ("Sálem, álem ");
        end_proc;
    end_module;
```
hám evolyuciyalıq sintaksislik til ózgerislerinen keyingi ekvivalent sońǵı versiyası:
```text
import lib.Out;
    module Hello
    {
        export proc ~start ()
        {
            Out.vdu.str ("Sálem, álem"). nl();
        }
    }
```


## Qurallar toplamı
Qurallar toplamı implementaciyalarınıń Charm derek kodınan hám assembler derek kodınan obyekt faylların payda etiw ushın bir kompilyator hám bir assembler usınıwı kútiledi, olar keyin kitapxana hám orınlanıw waqtındaǵı qollap-quwatlaw faylları menen birge orınlanatuǵın programma payda etiw ushın biriktiriliwi múmkin.

Jazıw waqtında tek bir ǵana Charm qurallar toplamı ornatıwı (biypul) júklep alıw ushın qoljetimli. Qurallardıń ózleri Charm tilinde jazılǵan hám derek kodı GNU General Public License shártleri boyınsha qoljetimli. Olar RISC OS kompyuterlerinde hám ARM oraylıq processorları bar platformalarda (Raspberry Pi sıyaqlı) hám Windows yamasa Linux platformalarında xostlanǵan RISC OS ushın emulyatorlarda (RPCEmu sıyaqlı) isleydi. VFP 2-versiyası soprocessor arxitekturasın qollap-quwatlaytuǵın ARM chiplerine tiykarlanǵan platformalar ushın apparatlıq támiynat járdemindegi eki ese dálliktegi haqıyqıy san operaciyaları ushın kod generaciyası qollap-quwatlanadı.

## Derekler

__BÖLİDİMÖNDEMEW__