“Anlamsal olarak gözlemlenebilir” yan etki tam olarak ne anlama geliyor?


11

Saf fonksiyonlarla ilgili sorum var. Wikipedia sayfasına göre, saf bir işlev için gerekli olanlardan biri:

Sonucun değerlendirilmesi, değiştirilebilir nesnelerin mutasyonu veya G / Ç cihazlarına çıktı gibi herhangi bir anlamsal olarak gözlenebilir yan etkiye veya çıktıya neden olmaz.

Şimdi bu ne anlama geliyor. Ya da semantik olarak gözlemlenemeyen bir yan etkiyi nasıl yapabilirim?


2
Bir zamanlar Wikipedia'da bulabilen el dalgalı şeylere çok fazla ağırlık uygulamamalısınız.
Andrej Bauer

1
@AndrejBauer Huh? Bu konuda ne dalgalı? Araştırma düzeyinde değil, belki de (bunun Bilgisayar Bilimine geçip geçmediği umurumda değil ) - tepkiniz verilse de, belki de değil.
Gilles 'SO- kötü olmayı kes'

Sanırım sadece "anlamsal olarak gözlemlenebilir" ifadesini sevmiyorum.
Andrej Bauer

1
Başka bir ifade edeyim: "anlamsal olarak gözlemlenebilir" ve "gözlemlenebilir" arasındaki fark nedir? "Anlamsal" sadece anlamsız bir kelime.
Andrej Bauer

"semantik" programlama teorisinin çeşitli alanlarında, muhtemelen onlarca yıl geri döndüğü dilbilim / felsefeden ithal bazı özel bir anlamı var gibi görünüyor "sözdizimi vs anlambilim" .... belki de orada başka bir soru ....
vzn

Yanıtlar:


11

Bir programın anlambilimi, herhangi bir bilimsel model gibi, çalışmak istemediğiniz yönleri göz ardı eden davranış modelidir.

Bir programın yürütülmesinin son derece ayrıntılı bir modeli, yürütme süresi, güç tüketimi, elektromanyetik radyasyon, vb.Dahil olmak üzere, bilgisayarı yürüten fiziksel davranışını modelleyecektir. Yine de bazen önemlidir: uçak otopilotunun yararlı bir modelinin çalışma zamanı bilgilerini içermesi gerekir, kredi kartının güvenliğinin kullanışlı bir modelinin elektromanyetik radyasyon içermesi gerekir ...

Tipik anlambilimde, zamanlama ve güç tüketimi gibi yan etkiler göz ardı edilir. Haskell yorumlayıcı istemine bir ifade yazdığınız sıradan bir ortamda bile, sonucun yazdırılması bir yan etkidir (sonsuz bir nesneyi yazdırmaya çalışırsanız, önemlidir). Haskell yorumlayıcısının belleği tükenirse, bu aynı zamanda “gerçek dünya” modelinde gözlemlenebilir bir yan etkidir, ancak sınırsız hesaplamalara etkili bir şekilde izin veren ideal bir Haskell modelinde değil.

Bir gözlemlenebilir yan etki semantik modellenmiştir biridir. Programlama dillerinin tipik modellerinde bellek tüketimi modellenmez, bu nedenle 1 TB depolama alanı gerektiren bir hesaplama saf olabilir, ancak PC'nizde çalıştırmayı deneseniz bile gözle görülür bir şekilde başarısız olur.

Gözlenemeyen bir başka yan etki de işlevin içinde olan yan etkidir. Sanırım çoğu semanist, gözlemlenemeyen yan etkiler hakkında konuşurken ne düşünürdü. Değiştirilebilir verileri dahili olarak kullanan ancak bu değiştirilebilir verileri programın başka bir bölümü ile paylaşmayan bir hesaplama düşünün. Örneğin, listeyle aynı öğelere sahip bir dizi oluşturan, diziyi yerinde sıralayan ve öğeleri son sıralarında dizi olarak içeren bir liste döndüren bir liste sıralama işlevi: Bu işlevin alt ifadelerinin semantik bir modeli tarafını gösterir efektler (dizinin modifikasyonları), ancak işlevin kendisinin harici bir yan etkisi yoktur, bu yüzden saftır.

Daha ince bir örnek için, bazı verileri geçici bir dosyaya yazan ve kendinden sonra temizleyen bir işlevi düşünün. Geçici dosyalar için her zaman yeterli alan ve programların geçici dosyaları paylaşmadığı bir anlambilimde, işlevin yan etkisi yoktur; geçici dosya işlev tarafından kullanılan fazladan bellek görevi görür. Dosya sisteminin tüm koşullarını dikkate alan bir anlamda, işlevin bir yan etkisi vardır - dış koşullar nedeniyle başarısız olabilir. Makinenin kilitlenmesine izin veren bir anlamda, işlevin bir yan etkisi vardır: işlevin yürütülmesi sırasında bir kilitlenme varsa, geçici dosya geride kalabilir. Eşzamanlı olarak yürütülen programların geçici dosyayı görmesine ve değiştirmesine izin veren bir anlamda, işlevin bir yan etkisi vardır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.