2013-09-28 32 views
11

Bu, this question numaralı bir izleme işlemidir.Lokasyon neden derleme zamanında belirlenir?

  1. Niçin çalışma zamanı derleme zamanında değil, derleme zamanında belirlenir? Sadece performans için mi?
  2. Değişkenlerini yürütme zamanında arayan diller var mı? Yani Bir değişkene her erişildiğinde, bu değişken ilk önce yerel kapsamda aranır ve sonra arama tüm kapsam kapsamları boyunca artar?
  3. ECMA dilleri bunu nasıl yapıyor?

yani soruyu 2 koymak için:

def f(): print ('f') 

def g(): 
    f() 
    f = 42 

g() 
+0

Kod ne yapmalı? –

+0

"Bağlantısız yerel değişken" veya bu satır boyunca bir şey yüklemeden "f" yazdırın. – Hyperboreus

cevap

5

Bu davranış sözcük kapsam denir: (gerekirse sözdiziminde) Aşağıdaki kod çalışır diller var mıdır. # 2'de tanımladığınız şey, sözel açıklamanın yanıltıcı olmasına rağmen dinamik kapsam olarak adlandırılır ("işlevleri çağırmak" veya "etkinleştirme kayıtları" nın daha doğru olacağını "kapsayan kapsamlar" dırsınız). Genel kullanımda herhemen hemen her Python değil, sözcüksel genişleme kullanır. Bu C# ve ECMAScript/JavaScript içerir (eval ve with barring), "ECMA dilleri" ile ne demek istediğimi varsayalım. Diller var ve bazıları hala kullanılıyor. Emacs Lisp birdir ve Perl hem sözcüksel hem de dinamik kapsam belirleme sunar.

Sözcüksel kapsam belirleme mantığı sadece performans için değil (kapaklar dahil olmak üzere tam anlamıyla sözcük kapsamının gerçek bir performansa sahip maliyeti, funcarg sorunlarına bakın), basitlik ve güvenilirlik içindir. İlk önce dili öğrenirken şaşırtıcı olsa da, kurallar aslında çok basittir, bu yüzden deneyimli bir programcı, hangi tanımlayıcının hangi kapsamda kullanıldığını anlatabilir. Bu işlevler, yürütme işlevini kim tarafından etkilenmediği veadında değişkenlerini nasıl belirlemeye karar verdiğinden, yalıtımdaki işlevleri anlayabilir.

+0

Cevabınız için teşekkür ederiz. "ECMA dilleri" ile ECMA-262 (ISO/IEC 16262) ile uyumlu tüm uygulamalara başvurmayı planlıyorum: JavaScript, JScript, QtScript, vb ... – Hyperboreus

İlgili konular