# KPD: Karamel Programlama Dili

**Karamel Programlama Dili**, Türkçe taban alarak oluşturulan bir yazılım programlama dilidir. Ana dili Türkçe olan kişilerin Türkçe ile programlama yapabilmeleri için geliştirilmektedir. Türlü türlü amaçlar için kullanılabilir.

<figure><img src="https://images.unsplash.com/photo-1498050108023-c5249f4df085?crop=entropy&#x26;cs=tinysrgb&#x26;fm=jpg&#x26;ixid=MnwxOTcwMjR8MHwxfHNlYXJjaHwzfHxjb2RlJTIwd2lkZXxlbnwwfHx8fDE2Njc4NjQ5MjA&#x26;ixlib=rb-4.0.3&#x26;q=80" alt=""><figcaption></figcaption></figure>

Bilişim alanındaki; yazılım alanındaki; çaylaklar ve uzmanlar için kullanması kolay, öğrenmesi eğlenceli, işlek, ilgi uyandırıcı ve örnek bir Türkçe tabanlı geliştirme ortamı sağlamak başta gelen amaçlarımızdır.

## Karamel

Karamel dili, gözde dillerde bulunan özelliklerden esinlenerek geliştirilmeye başladı. Tanınan bilinen iki işletim düzeni olan **Windows** ve **MacOsX** üstünde sorunsuzca kullanılabilir.

Kendisine ait sanal düzenek üzerinde çalışır. Ayrıca birçok düzlemde çalıştırılabilir özelliktedir. Dinamik olarak değişken tanımlayabilir ve dahasını edebilirsiniz.

Bütün dil, **Rust Programlama Dili** kullanılarak geliştirilmektedir. Kendi sanal düzeneği üstünde çalışan dil olmasının yanısıra, **WebAssembly** yardımı ile ağ üzerinde de kullanılabilir.

## Kılavuzlar

Bir programlama dili olan **Karamel dilini**, öğrenip kullanmak için kılavuzlardaki bilgilerden yararlanabilirsiniz. Bilinmesi gereken ayrıntıları anlaşılır biçimde size sunduk.

### İndirilebilir Durumda Mı?

Üzgünüz, henüz bilgisayarınıza veya başka bir aygıta indirilebilir bir örneğini paylaşmadık. Ancak en kısa sürede ağ üstünden çalışan sürüm yayınlamayı düşünüyoruz.

#### 👉 Deneme sürümünü şimdi dene! <https://erhanbaris.github.io/karamel/karamelweb/src/www/>

### Karamel Hangi Aşamada?

* Geliştirilme aşamasında olup emekleme dönemindedir.
* Dört bir yandan gelecek düşünce, görüş ve kodlama gibi türlü yardıma gerek duymaktadır.
* Terim dağarcığında oturmamış konuları bulunmaktadır.
* Sözdizimi üzerinde esnek tutum sergilense bile kömek gerekmektir. Başka deyiş ile yardım gerekmektedir.

### Karamel Hangi Ölçünlere Göre Geliştiriliyor?

Türkçe tabanlı yazılım programlama dillerinde kullanılmak üzere oluşturulan kararlı ölçünler henüz bulunmuyor. Bu yüzden şimdilik ölçünsüzdür. Ancak [Türkçe Yazılım Konatı](https://github.com/turkce-yazilim-konati/) altında geliştirilmekte olan [**YAZILIMCA**](https://github.com/turkce-yazilim-konati/yazilimca) ölçünlerini izliyor, uygun bulduğu yanlarını değerlendirip kullanıyor.

### Takıma Katıl

Karamel, Türkçe Yazılım Konatı altında birleşen kişilerle birlikte geliştiriliyor. Bu takımda yer almak için [Türkçe Yazılım Konatı](https://github.com/turkce-yazilim-konati/)'na başvurmanı bekliyoruz.

## Karamel Hakkında Bilmeniz Gerekenler

### Karamel Ne Tür Sanal Düzenek Kullanıyor? <a href="#peki-hangi-ne-tip-sanal-makine-kullaniyor" id="peki-hangi-ne-tip-sanal-makine-kullaniyor"></a>

KPD için Stack Machine adlı sanal makine mimarisini kullanıyoruz. Bunu kullanmamızın nedeni yeni özellikleri daha hızlı bir şekilde gömülü edebilmemizden dolayı. Diğer Register Machine yaklaşımına kıyasla daha yavaş olsa da ilk amacımız performanstan ziyade özellik ekleyip, stabil hâle getirmek.

### Stack Machine Ne Tür Çalışır? <a href="#peki-stack-machine-tam-olarak-nasil-calisiyor" id="peki-stack-machine-tam-olarak-nasil-calisiyor"></a>

Bu mimaride kullanılacak olan değişkenler bir yığın olarak üst üste istiflenir ve sonrasında LIFO (Last In First Out) yaklaşımına göre değişkenler istiflerden geri alınıp işleme tabii tutulur. Bu yapının avantajı kodlar en basit haline dönüştürülerek daha performanslı olarak çalışması sağlanmaktadır. Yazılımcının yazdığı yüksek seviyeli olan kodlar işlenerek ara kodlara dönüştürülmektedir. Dönüştürülen ara kodlar TPD sanal makinesinde çalıştırılmaktadır. Aslında Üst düzey yazmış olduğunuz kodlar ve sanal makinenin işledi kodlar olarak iki farklı programlama dili içermektedir.

#### Başka diller kullanıyor mu?

Python, PHP, Ruby gibi oldukça gözde olan diller Stack Machine yaklaşımını kullanmaktadırlar.

### Temel Tipler

## Karamel Hakkında Bilmeniz Gerekenler

### Karamel Ne Tür Sanal Düzenek Kullanıyor? <a href="#peki-hangi-ne-tip-sanal-makine-kullaniyor" id="peki-hangi-ne-tip-sanal-makine-kullaniyor"></a>

KPD için Stack Machine adlı sanal makine mimarisini kullanıyoruz. Bunu kullanmamızın nedeni yeni özellikleri daha hızlı bir şekilde gömülü edebilmemizden dolayı. Diğer Register Machine yaklaşımına kıyasla daha yavaş olsa da ilk amacımız performanstan ziyade özellik ekleyip, stabil hâle getirmek.

### Stack Machine Ne Tür Çalışır? <a href="#peki-stack-machine-tam-olarak-nasil-calisiyor" id="peki-stack-machine-tam-olarak-nasil-calisiyor"></a>

Bu mimaride kullanılacak olan değişkenler bir yığın olarak üst üste istiflenir ve sonrasında LIFO (Last In First Out) yaklaşımına göre değişkenler istiflerden geri alınıp işleme tabii tutulur. Bu yapının avantajı kodlar en basit haline dönüştürülerek daha performanslı olarak çalışması sağlanmaktadır. Yazılımcının yazdığı yüksek seviyeli olan kodlar işlenerek ara kodlara dönüştürülmektedir. Dönüştürülen ara kodlar TPD sanal makinesinde çalıştırılmaktadır. Aslında Üst düzey yazmış olduğunuz kodlar ve sanal makinenin işledi kodlar olarak iki farklı programlama dili içermektedir.

#### Başka diller kullanıyor mu?

Python, PHP, Ruby gibi oldukça gözde olan diller Stack Machine yaklaşımını kullanmaktadırlar.

### Temel Tipler <a href="#temel-tipler" id="temel-tipler"></a>

* Tam Sayı (*1024*, *1\_204*, *2048*)
* Noktalı Sayı (*1.234*, *1\_234.56789*, *123.4e+4*, *1\_230.4e+4*)
* Yazı (*"Merhaba Dünya"*, *'Merhaba Dünya'*)
* Bool (*doğru*, *yanlış*)
* Atom (*:bilgi*, *:başarılı*, *:hatalı*)
* Liste (*\[1,2,3]*, *\[]*, *\[:kayıt\_başarılı, 'Kullanıcı Bilgisi']*)
* Sözlük (*{'ad':'erhan', 'soyad':'barış'}*)

### Döngü <a href="#doengue" id="doengue"></a>

```
kayıt = 10
toplam = 0
döngü kayıt iken:
    gç::satıryaz(kayıt)
    kayıt -= 1
    toplam += 1
hataayıklama::doğrula(toplam, 10)
hataayıklama::doğrula(kayıt, 0)
```

```
sonsuz:
    gç::satıryaz("Sonsuza kadar devam")
```

Döngü kontrolü için *devam*, *continue*, *kır*, *break*.

### Sorgulama <a href="#sorgulama" id="sorgulama"></a>

```
eğer a == b:  
    gç::satıryaz('a eşittir b')
yoksa a == c:  
    gç::satıryaz('a eşittir c')
yoksa:  
    gç::satıryaz('a hiçbirine eşit değil')
```

## Fonksiyon tanımlama <a href="#fonksiyon-tanimlama" id="fonksiyon-tanimlama"></a>

```
fonk metod_1(a):
    gç::yaz(a)

fonk merhaba_dünya:
    gç::yaz('Merhaba dünya')

fonk metod_1(a):
    gç::yaz(a)

fonk faktoriyel(sayı):    
    eğer sayı==1 veya sayı==0:
        döndür 1
    yoksa:
        döndür sayı * faktoriyel(sayı - 1)

faktoriyel_sonucu = faktoriyel(10)
gç::satıryaz('faktoriyel 10 => ', faktoriyel_sonucu)
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://belge.turkceyazilimkonati.com/karamel/undefined.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
