C'de Coroutine'ler
- Coroutine'lere giriş: Büyük programları yapılandırmak her zaman zordur. Veriyi üreten kod ile tüketen kod olduğunda, hangisinin çağıran (caller) hangisinin çağrılan (callee) olduğuna karar verme sorunu sıkça ortaya çıkar.
- Yeniden yazım (Rewriting): İletişim kanalının bir tarafını çağrılabilir bir fonksiyon olarak yeniden yazmak yaygın çözümdür. Bu, özgün koda göre daha az açık olur ve bakım yükünü artırır.
- Knuth'un coroutine'leri (Knuth's coroutines): Donald Knuth, yığın kavramını terk edip süreçleri eşit düzeyde işbirlikçiler olarak ele alan bir çözüm önerdi. Ancak bu yalnızca assembly dilinde mümkündür; C gibi yüksek seviyeli diller bunu desteklemez.
- Yığın tabanlı coroutine'ler (Stack-based coroutines): Amaç, C'de Knuth'un coroutine çağrı ilkesini taklit etmektir. Bunun için
goto deyimi ve durum değişkeni kullanılarak fonksiyon içinde denetimin istenen bir noktaya taşınması yöntemi kullanılır.
- Duff's device: Etiketler yerine
switch içindeki case dalları kullanılarak atlama işlemi switch deyiminin kendisiyle gerçekleştirilir. Böylece coroutine hilesi uygulanır.
- Değerlendirme (Evaluation): Coroutine makroları kullanılarak üretici ile tüketici arasında veri aktarımı mümkün hale gelir. Bu, ANSI C'de taşınabilir biçimde uygulanır.
- Kodlama standartları (Coding Standards): Bu teknik kodlama standartlarını ihlal eder, ancak algoritmanın yapısını daha açık ortaya koymaya yardımcı olur. Kodlama standartları sözdizimsel açıklıktan çok algoritmik açıklığı hedeflemelidir.
- İyileştirmeler ve kod (Refinements and Code): Gerçek uygulamalarda statik değişkenlere dayanmayan, yeniden girişe uygun ve çok iş parçacıklı ortamlarda da çalışan coroutine uygulamaları gerekir. Bunun için bağlam yapısı parametre olarak kullanılır.
GN⁺ görüşü
- Önemi: Bu yazı, C dilinde coroutine uygulamak için yaratıcı bir yöntem sunarak programcıların veri üreticileri ile tüketicileri arasındaki etkileşimi daha verimli kodlamasını açıklıyor.
- İlgi çekiciliği: Knuth'un coroutine kavramını C diline uygulama girişimi, programlama dillerinin sınırlarını aşmaya çalışan geliştirici yaratıcılığını gösteriyor.
- Faydası: Coroutine'ler, karmaşık durum makinelerini açıkça yazmadan asenkron işlemeyi gerçekleştirmeyi mümkün kılar; böylece kodun okunabilirliği ve bakımı iyileşir.
Henüz yorum yok.