Hoşgeldin Misafir

Nim Programlama Dili

Conrado Sol

29 Nis 2026
112 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
Herkese merhabalar bugün farklı bir konu ile karşınızdayım. Geçmişte Crystal gibi pek bilinmeyen diller üzerine konu işlemiştik şimdi ise Nim dilini göreceğiz. Bu dil söz dizimi olarak Python programlama diline çok benziyor bu yüzden öğrenmeniz kolay olur düşüncesindeyim.

jHz4s2JM7gjHaR2I1PHRnkZDFXz-t53c-rrUAhHIXOzBXw_J_oITSN_pCBmUnUS15Vp6mt-YF7EP6oqToS1LoRcXiZjGhcCMmeG52Y0PHBXRg87hefErglHkzd_RoKBsn6XGU8glxEiFKE4VnKF8Xd_mCfJuQ8dJT7YZQR3dONCIAeWY6Yd9nNBnsNpHFGCh

Peki kısaca bakacak olursak bu dile; C, C++ ve Python dillerinin bazı özelliklerini bir araya getiriyor ve çoklu işletim sistemi desteği sunuyor. Tabi ki kurulumdan önce Windows işletim sisteminize MSys2 kurmanız gerekmekte bunun için aşağıda yer alan link üzerinden indirerek kurulumunuzu yapın;

Link : msys2.org/#installation

Daha sonra Windows Başlat menüsünde MSYS2 UCRT64 yazıp açın, MSYS2 UCRT64 terminalini kullanacaksınız. Karşınıza gelen terminal üzerinden aşağıdaki komutu girin ve gelen uyarıların hepsine y deyip kurulumu yapın bu mevcut paketleri güncellemeniz için gerekli olan komut.

Bash:
pacman -Syu

noga8km9.png


Kurulumu yaptıktan sonra CMD üzerine çalışmak ve direkt olarak eklemek için ortam değişkenlerine MSys2 dosyaları içerisinde yer alan bin adlı klasörü ekleyerek tanıtalım muhtemel hedef klasör yolunuz; C:\msys64\ucrt64\bin örnek bir video aşağıya bırakıyorum buradaki adımları da takip edebilirsiniz.


Bunları yaptıktan sonra Nim programlama dilimizi indirelim linkimiz; nim-lang.org/install.html Kurulumu yaptıktan sonra CMD üzerinde aşağıdaki komutları girerek test edebilirsiniz şahsen bende aşağıda yer alan görsel gibi bir sonuç çıkıyor.

Kod:
nim --version
gcc --version

ppibl2ng.png


Ben de bu dille ilk defa tanıştığım için fonksiyon çağrıları, döngüleri vesaire öğrenmediğim için en basit olandan başlamak istiyorum yani Merhaba dünya ile exe ve DLL derleyip C# diline entegre edeceğim. İlk önce exe oluşturmadan başlayalım masaüstüne bir adet merhaba.nim uzantılı bir dosya oluşturalım ve aşağıdaki kod bloğunu girelim.

Kod:
echo "Merhaba Dünya"
echo "Bu program Nim ile derlendi."
discard readLine(stdin)

Daha sonra terminale şu kodu yazalım.

Bash:
nim c -d:release -o:merhaba.exe merhaba.nim

Ardından merhaba.exe dosyamız oluştu tıklayalım bakalım sonuç nedir.

hx1e4b58.png


Görüldüğü üzere işlem başarılı şimdi ise basit bir toplama çıkarma işlemi yapan DLL oluşturup bunu C# ile haberleşmesini yapalım. Herhangi bir dizin üzerinde yine nim uzantılı bir dosya oluşturalım ben math.nim olsun istedim siz keyfinize göre bir isim verebilirsiniz. Daha sonra bu dosya içerisine aşağıdaki kodları girelim.

Kod:
proc Topla*(a, b: cint): cint {.exportc, cdecl, dynlib.} =
  result = a + b

proc Cikar*(a, b: cint): cint {.exportc, cdecl, dynlib.} =
  result = a - b

Daha sonra dizin üzerinde terminale şu komutu verelim.

Bash:
nim c --app:lib -d:release --out:math.dll math.nim

qlvhlnqx.png


Ve DLL dosyamız başarıyla oluştu şimdi bunu C# üzerinde tanıtalım. Basit temelli olduğu için toplama çıkarma işlemi yapacak bu yüzden sayı girilmesi için iki adet textbox ve sonuçları göstermek adına iki adet label operasyonu devreye almak içinse bir adet buton ekledim. Oluşan DLL 'yi ise direkt tanıması için proje klasöründe yer alan bin dosyası içerisine attım.

C#:
 public partial class Form1 : Form
 {
     [DllImport(
        "math.dll",
        EntryPoint = "Topla",
        CallingConvention = CallingConvention.Cdecl)]
     private static extern int NimTopla(int a, int b);

     [DllImport(
         "math.dll",
         EntryPoint = "Cikar",
         CallingConvention = CallingConvention.Cdecl)]
     private static extern int NimCikar(int a, int b);
     public Form1()
     {
         InitializeComponent();
     }

     private void Form1_Load(object sender, EventArgs e)
     {

     }

     private void button1_Click(object sender, EventArgs e)
     {
         if (!int.TryParse(textBox1.Text, out int sayi1) ||
            !int.TryParse(textBox2.Text, out int sayi2))
         {
             MessageBox.Show("Lütfen iki geçerli tam sayı girin.");
             return;
         }

         int toplam = NimTopla(sayi1, sayi2);
         int fark = NimCikar(sayi1, sayi2);

         label1.Text = "Toplama sonucu: " + toplam;
         label2.Text = "Çıkarma sonucu: " + fark;
     }
 }

Şimdi projeyi derleyip çalıştıralım bakalım sonuç veriyor mu?

dfar6g5p.png


aqcouxsg.png


Görüldüğü üzere sonuç başarılı okuduğunuz için teşekkür ederim.