AI Asistanı

Bu makale hakkında size nasıl yardımcı olabilirim?

AI Analiz Ediyor...

AI Yanıtı

Powered by Burak Beşli

Dyad: Açık Kaynak Yerel AI Uygulama Geliştirme Aracı
Açık Kaynak

Dyad: Açık Kaynak Yerel AI Uygulama Geliştirme Aracı

07 Ocak 2026 8 dk okuma
Burak Beşli

Burak Beşli

Yazar

Dyad, C dilinde yazılmış, olay döngüsü tabanlı, asenkron ağ programlama için tasarlanmış minimalist bir kütüphanedir. Yüksek performans, düşük kaynak tüketimi ve kolay kullanım prensiplerini benimser. Bu makalede, Dyad kütüphanesini derinlemesine inceleyecek, temel kavramlarını açıklayacak ve çeşitli kullanım senaryoları için örnek kodlar sunacağız. Amacımız, Dyad'ın ne olduğunu, nasıl çalıştığını ve projelerinizde nasıl kullanabileceğinizi anlamanıza yardımcı olmaktır.


Dyad'e Giriş

Dyad, geleneksel blocking I/O modelinin aksine, asenkron I/O kullanarak ağ programlamayı kolaylaştırır. Bu, tek bir iş parçacığı üzerinde çok sayıda bağlantıyı eşzamanlı olarak yönetebileceğiniz anlamına gelir. Özellikle yüksek trafikli sunucular, gerçek zamanlı uygulamalar ve gömülü sistemler gibi kaynak kısıtlamalarının önemli olduğu durumlarda büyük avantaj sağlar. Dyad'ın minimalist tasarımı, öğrenme eğrisini azaltır ve hızlı prototiplemeye olanak tanır.

Neden Dyad?

Geleneksel ağ programlama yaklaşımları genellikle karmaşık ve kaynak yoğun olabilir. Dyad, bu karmaşıklığı basitleştirerek aşağıdaki avantajları sunar:

  • Asenkron I/O: Blocking I/O'nun aksine, Dyad asenkron I/O kullanarak tek bir iş parçacığı üzerinde birden fazla bağlantıyı yönetir. Bu, daha yüksek performans ve daha düşük kaynak tüketimi sağlar.
  • Minimalist Tasarım: Dyad, küçük bir API yüzeyine sahiptir ve öğrenmesi kolaydır. Bu, hızlı prototipleme ve hızlı geliştirme döngüleri sağlar.
  • Çoklu Platform Desteği: Dyad, Windows, Linux ve macOS gibi çeşitli platformlarda çalışır.
  • Olay Döngüsü Tabanlı: Dyad, olay döngüsü tabanlı bir mimariye sahiptir. Bu, olayları (örneğin, veri alma, bağlantı kurulma, bağlantı kesilmesi) yakalayarak ve bunlara yanıt vererek uygulamanızın davranışını kontrol etmenizi sağlar.
  • Düşük Bağımlılık: Dyad, minimum sayıda harici bağımlılığa sahiptir. Bu, uygulamanızın dağıtımını kolaylaştırır.

Dyad'ın Temel Kavramları

Dyad'ı kullanmaya başlamadan önce, temel kavramlarını anlamak önemlidir.

Dyad Nesnesi

Dyad'ın temel yapı taşı dyad nesnesidir. Bu nesne, bir ağ bağlantısını temsil eder. dyad nesnesi oluşturarak, bir sunucu dinleyebilir, bir istemciye bağlanabilir veya mevcut bir bağlantıyı yönetebilirsiniz.

Olay Döngüsü (Event Loop)

Dyad, olay döngüsü tabanlı bir mimariye sahiptir. Olay döngüsü, uygulamanızın olayları (örneğin, veri alma, bağlantı kurulma, bağlantı kesilmesi) yakalamasını ve bunlara yanıt vermesini sağlar. Dyad, olay döngüsünü otomatik olarak yönetir.

Geri Çağrı Fonksiyonları (Callbacks)

Olaylara yanıt vermek için geri çağrı fonksiyonlarını kullanırsınız. Örneğin, bir bağlantı kurulduğunda, bir veri alındığında veya bir hata oluştuğunda bir geri çağrı fonksiyonu çağrılabilir.

Dyad ile Sunucu Uygulaması Oluşturma

Dyad ile basit bir sunucu uygulaması oluşturalım. Bu sunucu, gelen bağlantıları kabul edecek ve her bağlantıya "Merhaba Dünya!" mesajını gönderecektir.

#include #include #include #include "dyad.h" static void onConnect(dyad* d) { printf("Bağlantı kabul edildi: %s\n", dyad_getAddress(d)); dyad_writef(d, "Merhaba Dünya!\r\n"); dyadshutdown(d, DYADSHUTDOWN_SEND); // Göndermeyi kapat. } static void onDisconnect(dyad* d) { printf("Bağlantı kesildi: %s\n", dyad_getAddress(d)); } int main() { DyadStartup(); dyad* server = dyad_newStream(); dyad_listen(server, NULL, 12345); dyadaddListener(server, DYADEVENT_ACCEPT, onConnect, NULL); dyadaddListener(server, DYADEVENT_DISCONNECT, onDisconnect, NULL); printf("Sunucu 12345 portunda dinliyor...\n"); while (dyad_getNumHandles() > 0) { dyad_update(); } DyadShutdown(); return 0; }

Bu kod örneği şunları yapar:

1. DyadStartup() fonksiyonu ile Dyad kütüphanesini başlatır. 2. dyad_newStream() fonksiyonu ile yeni bir dyad nesnesi oluşturur. Bu nesne sunucuyu temsil eder. 3. dyad_listen() fonksiyonu ile sunucuyu 12345 portunda dinlemeye başlar. 4. dyadaddListener() fonksiyonu ile DYADEVENTACCEPT (yeni bağlantı kabul edildi) ve DYADEVENT_DISCONNECT (bağlantı kesildi) olayları için geri çağrı fonksiyonlarını kaydeder. 5. onConnect() fonksiyonu, yeni bir bağlantı kabul edildiğinde çağrılır. Bu fonksiyon, bağlantıya "Merhaba Dünya!" mesajını gönderir ve bağlantıyı kapatır. 6. onDisconnect() fonksiyonu, bir bağlantı kesildiğinde çağrılır. 7. dyad_update() fonksiyonu, olay döngüsünü çalıştırır. Bu fonksiyon, olayları yakalar ve ilgili geri çağrı fonksiyonlarını çağırır. 8. DyadShutdown() fonksiyonu ile Dyad kütüphanesini kapatır.

Bu kodu derleyip çalıştırdığınızda, 12345 portunda dinleyen bir sunucu elde edersiniz. Bir tarayıcı veya telnet gibi bir araç kullanarak bu sunucuya bağlanabilirsiniz. Sunucu, size "Merhaba Dünya!" mesajını gönderecek ve bağlantıyı kapatacaktır.

Sunucu Kodunu Derleme

Bu kodu derlemek için bir C derleyicisine ihtiyacınız olacak (örneğin, GCC). Ayrıca, Dyad kütüphanesinin başlık dosyalarını ve kütüphane dosyalarını derleyiciye belirtmeniz gerekecektir. Örneğin, GCC ile derleme komutu şu şekilde olabilir:

gcc -o server server.c dyad.c -I.

Burada -I. parametresi, başlık dosyalarının bulunduğu dizini (mevcut dizin) belirtir. dyad.c dosyası da derleme işlemine dahil edilmelidir.

Dyad ile İstemci Uygulaması Oluşturma

Şimdi de Dyad ile basit bir istemci uygulaması oluşturalım. Bu istemci, yukarıda oluşturduğumuz sunucuya bağlanacak ve sunucudan gelen cevabı yazdıracaktır.

#include #include #include #include "dyad.h" static void onData(dyad d, const char data, size_t len) { printf("Sunucudan gelen veri: %.*s\n", (int)len, data); dyadshutdown(d, DYADSHUTDOWN_BOTH); // Hem göndermeyi hem de almayı kapat. } static void onConnect(dyad* d) { printf("Sunucuya bağlandı!\n"); } static void onDisconnect(dyad* d) { printf("Sunucu ile bağlantı kesildi.\n"); } int main() { DyadStartup(); dyad* client = dyad_newStream(); dyad_connect(client, "127.0.0.1", 12345); dyadaddListener(client, DYADEVENT_CONNECT, onConnect, NULL); dyadaddListener(client, DYADEVENT_DATA, onData, NULL); dyadaddListener(client, DYADEVENT_DISCONNECT, onDisconnect, NULL); while (dyad_getNumHandles() > 0) { dyad_update(); } DyadShutdown(); return 0; }

Bu kod örneği şunları yapar:

1. DyadStartup() fonksiyonu ile Dyad kütüphanesini başlatır. 2. dyad_newStream() fonksiyonu ile yeni bir dyad nesnesi oluşturur. Bu nesne istemciyi temsil eder. 3. dyad_connect() fonksiyonu ile istemciyi "127.0.0.1" adresindeki 12345 portuna bağlar. 4. dyadaddListener() fonksiyonu ile DYADEVENTCONNECT (sunucuya bağlandı), DYADEVENTDATA (veri alındı) ve DYADEVENT_DISCONNECT (bağlantı kesildi) olayları için geri çağrı fonksiyonlarını kaydeder. 5. onConnect() fonksiyonu, sunucuya bağlandığında çağrılır. 6. onData() fonksiyonu, sunucudan veri alındığında çağrılır. Bu fonksiyon, alınan veriyi yazdırır ve bağlantıyı kapatır. 7. onDisconnect() fonksiyonu, sunucu ile bağlantı kesildiğinde çağrılır. 8. dyad_update() fonksiyonu, olay döngüsünü çalıştırır. 9. DyadShutdown() fonksiyonu ile Dyad kütüphanesini kapatır.

Bu kodu derleyip çalıştırdığınızda, yukarıda oluşturduğumuz sunucuya bağlanan bir istemci elde edersiniz. İstemci, sunucudan gelen "Merhaba Dünya!" mesajını yazdıracak ve bağlantıyı kapatacaktır.

İstemci Kodunu Derleme

İstemci kodunu derlemek için de bir C derleyicisine ihtiyacınız olacak. Derleme komutu sunucu kodu ile aynıdır:

gcc -o client client.c dyad.c -I.

Dyad ile Daha Karmaşık Uygulamalar

Dyad, sadece basit sunucu ve istemci uygulamaları oluşturmak için değil, aynı zamanda daha karmaşık uygulamalar için de kullanılabilir. Örneğin:

  • Web Sunucusu: Dyad ile basit bir web sunucusu oluşturabilirsiniz. Bu sunucu, HTTP isteklerini işleyebilir ve statik dosyaları sunabilir.
  • Oyun Sunucusu: Dyad ile gerçek zamanlı bir oyun sunucusu oluşturabilirsiniz. Bu sunucu, oyuncular arasındaki iletişimi yönetebilir ve oyunun durumunu güncelleyebilir.
  • IoT Cihazları: Dyad, düşük kaynak tüketimi sayesinde IoT cihazlarında kullanılabilir. Örneğin, bir sensörden veri toplayan ve bu veriyi bir sunucuya gönderen bir uygulama oluşturabilirsiniz.

Dyad'ın Avantajları ve Dezavantajları

Avantajları

  • Yüksek Performans: Asenkron I/O sayesinde yüksek performans sağlar.
  • Düşük Kaynak Tüketimi: Minimalist tasarımı sayesinde düşük kaynak tüketir.
  • Kolay Kullanım: Basit API'si sayesinde kolayca öğrenilebilir ve kullanılabilir.
  • Çoklu Platform Desteği: Windows, Linux ve macOS gibi çeşitli platformlarda çalışır.
  • Düşük Bağımlılık: Minimum sayıda harici bağımlılığa sahiptir.

Dezavantajları

  • Tek İş Parçacığı: Olay döngüsü tek bir iş parçacığı üzerinde çalıştığı için, uzun süren işlemler uygulamanın yanıt vermemesine neden olabilir. Bu durumu çözmek için iş parçacığı havuzları kullanılabilir.
  • Hata Ayıklama Zorluğu: Asenkron programlamanın doğası gereği, hata ayıklama senkron programlamaya göre daha zor olabilir.

Sonuç

Dyad, asenkron ağ programlama için minimalist ve güçlü bir kütüphanedir. Yüksek performansı, düşük kaynak tüketimi ve kolay kullanımı sayesinde çeşitli uygulamalar için uygundur. Bu makalede, Dyad'ın temel kavramlarını, nasıl çalıştığını ve çeşitli kullanım senaryoları için örnek kodlar sunduk. Dyad'ı kullanarak, daha ölçeklenebilir, daha verimli ve daha hızlı ağ uygulamaları oluşturabilirsiniz. Dyad'in resmi GitHub deposunu (https://github.com/dyad-sh/dyad) ziyaret ederek daha fazla bilgi edinebilir ve kütüphaneyi indirebilirsiniz. Unutmayın, asenkron programlama başlangıçta biraz karmaşık gelebilir, ancak sunduğu avantajlar öğrenmeye değer. İyi kodlamalar!


Yorum Yapmak İçin Giriş Yapın

Bu makale hakkında düşüncelerinizi paylaşmak için üye olun veya giriş yapın.