September 19, 2021

Kodlamaya henüz yeni yeni başladım. Aşağıdaki C++ kodunun D'deki karşılığı tam olarak nedir?

#include <iostream>
    using namespace std;

#include <thread>
    using namespace std::this_thread;

#include <chrono>
    using namespace std::chrono;

int main() {
    for (int rakam = 0; rakam < 10; ++rakam) {
        sleep_until(chrono::system_clock::now() + 1s);
        cout << "sleep_until: " << rakam << endl;
    }
    // Yukarıdaki kod her döngüde 1 saniye bekler,
    // rakamlar SIRAYLA çıktıya yazılır.

    for (int rakam = 0; rakam < 10; ++rakam) {
        sleep_for(10ns);
        cout << "sleep_for: " << rakam << endl;
    }
    // Yukarıdakı kod her döngüde 10 saniye bekler,
    // rakamlar NİHAYETİNDE çıktıya yazılır.

    return 0;
}

Ali hocanın kitabını henüz tamamlamış değilim fakat aradığımı kitapta bulamadım.

D ve C++'nın bildiğiniz bir kütüphane karşılaştırması var mı (yazacaklarımın pek doğru karşılaştırmalar olacağından şüpheliyim ama), hangisi daha güvenli, kullanışlı vs. anlamında değil, hiç değilse cout'in D karşılığı write()'tan başlasın, ardından Thread.sleep() ve sleep_for()'a kadar falan gitsin.

Bazen D için kaynak bulmak epey zor olabiliyor. Bulunca da güncellemeyi unuttukları (sanıyorum) D1 versiyonlarını görüyoruz, body anahtar sözcüğünün hala kullanılıyor oluşu hoş değil. Bozuk pluginleri ya da artık ulaşılamayan kitapları katmıyorum bile.

Siz kaynak ararken ne yapıyorsunuz?

September 19, 2021
On 9/19/21 8:47 AM, dunecourser wrote:

> Kodlamaya henüz yeni yeni başladım. Aşağıdaki C++ kodunun D'deki
> karşılığı tam olarak nedir?

sleep_until'den haberim yoktu. Anlaşılan, ikisi de sonuçta aynı işi yapıyorlar. Duruma göre ya "şu saate kadar bekle" ya da "şu kadar süre bekle" diyebiliyoruz.

[...]

>      // Yukarıdaki kod her döngüde 1 saniye bekler,
>      // rakamlar SIRAYLA çıktıya yazılır.

[...]

>      // Yukarıdakı kod her döngüde 10 saniye bekler,
>      // rakamlar NİHAYETİNDE çıktıya yazılır.

"Sırasıyla" ve "nihayetinde" özellikle belirginleştirilmiş ama bence iki döngü de sırasıyla bekler ve çıktıya yazdırır.

D'de bir yolu aşağıdaki gibi olabilir. Notlar:

* C++'a uysun diye sleep_until'i kendim yazacağım ama şu andaki zamanın öğrenilmesinin gerekmesi, bu programda sleep_until'i azıcık (farkedilemeycek kadar ;) ) daha yavaş yapıyor çünkü şu andaki zaman hem o çağrılmadan bilinmeli hem de kendisi bilmeli.

* Her ne kadar derlenmesi biraz daha uzun sürse de ben daha güvenli olduğu için elimi writefln'e alıştırmış durumdayım.

import core.thread;
import std.datetime;
import std.stdio;

void sleep_until(Z)(Z zaman) {
  Thread.sleep(zaman - Clock.currTime());
}

void sleep_for(Duration süre) {
  Thread.sleep(süre);
}

void main() {
  foreach (rakam; 0 .. 10) {
    sleep_until(Clock.currTime() + 1.seconds);
    writefln!"sleep_until: %s"(rakam);
  }

  foreach (rakam; 0 .. 10) {
    sleep_for(10.nsecs);
    writefln!"sleep_for: %s"(rakam);
  }
}

> D ve C++'nın bildiğiniz bir kütüphane karşılaştırması var mı

Sanmıyorum.

> ```cout```'in D karşılığı ```write()```'tan başlasın

Aslında cout'un karşılığı D'de stdout'tur. (write, C++'ta bit kaydırma işleci olan << işlecinin çıkış akımları için yüklenmesinin eşdeğeridir. D, işleç yükleme konusunda çılgınlıklardan kaçınır. :) )

> , ardından
> ```Thread.sleep()``` ve ```sleep_for()```'a kadar falan gitsin.

Çok büyük bir iş olurdu herhalde. Her iki dilin de standart kütüphaneleri çok büyük ve sürekli gelişiyor.

> Bazen D için kaynak bulmak epey zor olabiliyor. Bulunca da güncellemeyi
> unuttukları (sanıyorum) D1 versiyonlarını görüyoruz,

Evet, D1 artık kalmadı. code.dlang.org biraz olsun yardımcı oluyor ama dediğin gibi, bir çok modül ve kütüphane sahipsiz kalabiliyor. Biraz da o yüzden, ben işimde hiç dışarıdan kod kullanmıyorum: yalnızca Phobos (D standart kütüphanesi).

> ```body``` anahtar
> sözcüğünün hala kullanılıyor oluşu hoş değil.

Yazılmış olan kodları bozmamak için o özel kullanımda hâlâ yaşıyor olmasında bir sakınca yok. body'nin özel bir anahtar sözcük haline gelmesi bence başarılı oldu: Kendi kodlarımızda kullanabiliyoruz ve eski kodları da rahatsız etmeden derleyebiliyoruz.

> Bozuk pluginleri ya da
> artık ulaşılamayan kitapları katmıyorum bile.

Ali