Giriş
Açıklaması şöyle. Niyeyse bu konuda tam bir uyuşma sağlanamamış.
Kod şöyle olsun
Buna as-if kuralı deniyor. Yani gözlemlenebilen davranışta değişiklik olmaması. Tabi bu kuralı uygulamak ve ispatlamak derleyici açısında zor. Özellikle sistem çağrılarının yan etkisinin olmadığını bilmesi imkansız gibi.
Açıklaması şöyle. Niyeyse bu konuda tam bir uyuşma sağlanamamış.
Elimizde şöyle bir kod olsun.14 Every value computation and side effect associated with a full-expression is sequenced before every value computation and side effect associated with the next full-expression to be evaluated.
using Clock = std::chrono::high_resolution_clock;
auto t1 = Clock::now(); // Statement 1
foo(); // Statement 2
auto t2 = Clock::now(); // Statement 3
auto elapsedTime = t2 - t1;
Bu kodun sırasının değişmemesi gerekir. Eğer şu hale gelirse kod bozulurusing Clock=std::chrono::high_resolution_clock;
foo(); // Statement 2
auto t1 = Clock::now(); // Statement 1
auto t2 = Clock::now(); // Statement 3
auto elapsedTime = t2 - t1;
as-if kuralıKod şöyle olsun
int fred(int x)
{
auto t1 = std::chrono::high_resolution_clock::now();
int y = foo(x);
auto t2 = std::chrono::high_resolution_clock::now();
return y;
}
t1 ve t2 değişkenleri kullanılmıyor. Bu durumda kod içindeki now() metodları teorik olarak yer değiştirebiliyor. Buna as-if kuralı deniyor. Yani gözlemlenebilen davranışta değişiklik olmaması. Tabi bu kuralı uygulamak ve ispatlamak derleyici açısında zor. Özellikle sistem çağrılarının yan etkisinin olmadığını bilmesi imkansız gibi.
Hiç yorum yok:
Yorum Gönder