SORU
2 Mayıs 2012, ÇARŞAMBA


Roslyn SyntaxNodes tanımlarlar?

Her ikisi de değişmez Expression tree API benzer bir sorunu çözer Roslyn CTP Bir bakıyordum ama Roslyn oldukça farklı bir şekilde yapar:

  • Expression düğümleri üst düğüm başvuru için, ExpressionVisitor kullanarak değiştirmiş ve büyük parçaları yeniden kullanılabilir.

  • Roslyn SyntaxNode, diğer tarafta, üst için bir başvuru var, tüm düğümlerin etkin imkansız yeniden kullanmak için bir blok haline gelir. Update, ReplaceNode vb, gibi yöntem değişiklikleri yapmaları sağlanmıştır.

Nerede bitecek bu? Document? Project? 7**? API ağaç adım adım değişim (yerine bir düğme kadar), ama her adım yapar tam bir kopyası mı? teşvik

Neden yaptılar böyle bir seçim yapmak? Kaçırıyorum bazı ilginç hile var mı?

CEVAP
2 Mayıs 2012, ÇARŞAMBA


GÜNCELLEME: Bu soru the subject of my blog on June 8th, 2012. Harika soru için teşekkür ederiz!


Çok güzel bir soru. Zam konuları uzun, uzun bir süre tartıştık.

Aşağıdaki özelliklere sahip bir veri yapısı oluşturmak istiyoruz:

  • Değişmez.
  • Bir ağaç şeklinde.
  • Çocuk düğümler ana düğümlerinin ucuz erişim.
  • Bir karakter metin ofset ağacında bir düğüm göster mümkün.
  • Kalıcı.

TarafındansebatYeteneği yaniağaç varolan düğümlerin çoğunu yenidenne zaman bir metni Düzenle tampon yapılır. Düğümler değişmez olduğu için, onları yeniden bir engel yok. Performans için buna ihtiyacımız var; yeniden ayrıştırma dosya büyük wodges her zaman bir kilit vurdun olamayız. Re-lex ve yeniden ayrıştırma sadece etkilendi o ağacın bölümleri düzenlemek için ihtiyacımız var.

Şimdi bir veri yapısı içine tüm bu şeyler beş çalıştığınızda hemen sorun:

  • Nasıl ilk etapta bir düğüm oluşturmak mı? Ebeveyn ve çocuk hem de birbirinize bakın ve değişmez, hangisi ilk inşa ediliyor?
  • Seni düşünürken bu sorunu çözmek için yönetmek nasıl kalıcı yapabilirim? Yeniden kullanım bir çocuk yeni bir ebeveyn olduğunu çocuğa anlatmaya içerir, çünkü farklı bir üst düğüm olamaz. Ama bu çocuk değişmez.
  • Yeni bir karakter içine tampon, mutlak konumu Düzenle ekle . Bu sorunu çözmek için yönetmek varsayalım: ^em>her düğüm bu noktadan sonra pozisyon eşleştirilmişdeğiştirir. Bu düğümlerin çoğunun yayılan değiştirebilir düzenlemek çok zor, çünkü sürekli bir veri yapısı yapmak için yapar!

Ama Roslyn takımda biz rutin olarak imkansız şeyler. Biz aslında tutmak imkansızikiayrıştırma ağaçları. "Ağaç" değişmez, kalıcı, hiçbir anne baba, başvuru, inşa edilmiştir "aşağıdan" her düğüm parça . yeşil ^em>genişlikdeğil . ama ^em>mutlak pozisyon. Bir düzenleme olur ağacında toplam ayrıştırma düğümleri genellikle O konuda Düzenle, (log n) etkilendi yeşil ağacın bölümleri yeniden oluşturun.

"Kırmızı" ağaç değişmezcephebu yeşil ağacın etrafında inşa edilmiştir, inşa edilmiştir "yukarıdan aşağıya"talep üzerineve her üzerine atılır düzenleyin. Ana başvurular hesaplarüst ağaç üzerinden inerken onlara talep üzerine üretim. İnerken genişlikleri onları bilgisayar tarafından mutlak pozisyonlar, yeniden üretmektedir.

Sen, kullanıcı, sadece kırmızı ağaç görmek; yeşil ağaç uygulama ayrıntı. Eğer ayrıştırma bir düğüm iç durumu içine eş, eğer bir başvuru olduğunu göreceksinizbaşka birfarklı türde orada ayrıştırma düğüm; yeşil ağaç düğümü.

Bu arada, bu "kırmızı/yeşil ağaçlar o beyaz tahta marker, çünkü" tasarım toplantıda veri yapısı çizmek için kullanılan renkler denir. Renkler için diğer bir anlamı yok.

Bu stratejinin avantajı, tüm o güzel şeyler olsun: değişmezliğini tanıdı, sebat, üst başvuruları ve benzeri. Maliyeti bu sistem karmaşık ve bellek bir sürü "kırmızı" cepheler büyük olsun. tüketebilir. Mevcut deney yaparken, eğer yararları kaybetmeden maliyeti biraz azaltmak için.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ArkticPlanet

    ArkticPlanet

    9 ŞUBAT 2010
  • esnathesinger

    esnathesinge

    6 NİSAN 2009
  • Kenneth Håkonsen

    Kenneth Håk

    13 Mart 2011

İLGİLİ SORU / CEVAPLAR