Performans için tip sistemi


11

Programların performans özelliklerini resmileştirmeye çalışan (statik) tip sistemler var mı? Bu tür girişimleri bulamıyorum.

Tip sistemleri, programcıların cephaneliğinde programlar hakkında açıklama yapmak için en güçlü araçlardan biri olduğundan ve performansın kritik olduğu birçok örnek olduğundan, girişimlerin gerçekleştirildiğini hayal etmek çok zor görünmemektedir. programların depolama ve çalışma zamanı özellikleri hakkında en azından bazı ifadeler yapmaya çalışan bir tür sistemi oluşturun.


1
Yazı sisteminiz performansı hakkında ne söylerdi if condition then expensive_operation else cheap_operation?
svick

Kodun (ve sonlandırmanın) en kötü durum karmaşıklığını otomatik olarak çıkarmak için soyut yorumu kullanmada gelişmeler olduğunu biliyorum. İlginizi çekebilir ...
Bakuriu

Tamamen ilgili değil, ama yine de: kernelnewbies.org/FAQ/LikelyUnlikely Linux'ta çekirdek / gcc derleyicisinin belirli yolları optimize etmesi muhtemel / olası olmayan makrolardır. Egif (likely(operation_went_fine)) { // Do something } else if (unlikely(error_occured)) { // Do something else }
AmazingDreams

C'deki geçici ve kayıt anahtar kelimeleri akla gelir.
mattnz

Yanıtlar:


6

WCET veya programın karmaşıklığı ile ilgili olacak kadar sofistike bir tip sistem hayal edebilirsiniz . Daha sonra sorun, bunu mümkün kılmak için bir ses tipi analizörü (veya denetleyici) - yani kurallar yazmak - yapmak ve bunu makul derecede faydalı hale getirmek için yeterince verimli bir şekilde uygulamaktır.

Tip sistemlerinin çoğu, pratikte hızlı bir şekilde hesaplanabilecek kadar basittir (en azından bir insan geliştiricinin manuel olarak yazabileceği makul programlar için).

Bazı akademik programlama dilleri (örn. AGDA ) Turing-complete olan çok karmaşık tip sistemlere sahiptir, bu nedenle derleyicileri büyük (belki de sonsuz) zaman alabilir.

(İyi anlarsam, Jérémie Salvucci'nin Paris'teki LIP6'daki doktora çalışması sorunuzla oldukça ilgili; Ona bir e-posta gönderdim; bölgeler ve türleri arayabilirsiniz ...).

Ancak Rice teoreminin ve Durma probleminin farkında olun . Tip sistemleri her zaman olmasını istediğiniz gümüş mermi olmayabilir (eski gümüş mermi kitabına bakın).


4
WCET bu bağlamda "En kötü durum yürütme zamanı" dır (benden başka herhangi birinin merak
etmesi

9
Agda, Coq, Epigram, Guru, Isabelle, vb. Gibi bağımlı olarak yazılan diller, Turting-complete olmadan Durma Problemini, Rice Teoremini ve arkadaşlarını "çözer". Ya inşaat yoluyla (yani, sonsuz bir döngü / sonlandırmayan özyineleme yazmak mümkün değildir), tüm programların sonlandırma denetleyicisinin sonlandırmayı kanıtlayabileceği şekilde yazılmasını zorunlu kılarak veya programcıdan makine tarafından kontrol edilebilir sonlandırma kanıtı.
Jörg W Mittag

3

Tiplerin performans karakteristiklerini kategorize eden bir tip sistemi oluşturmak son derece mümkün görünüyor(örn. "seri erişim için hızlı / yavaş," rasgele erişim için hızlı / yavaş "," bellek verimli / verimsiz ") Bu özellikler hiyerarşiye daha somut türler miras kalacak şekilde yerleştirilen soyut türler olabilir. Bununla birlikte, bu türleri kullanan herhangi bir programın performansı, gerçekte nasıl kullanıldıklarına / erişildiklerine bağlı olacaktır.Tip sisteminin programın kendisi hakkında açıklama yapması için, bu türlerin (erişim) kullanımının kendisinin tür olarak temsil edilmesi gerekir. Bu, yerleşik kontrol yapılarının (örn. / While döngüleri için) kullanılmasının devam etmesi ve bunları uygulayan türlerin kullanılması anlamına gelir.Bu nedenle hiyerarşinin soyut bir seri erişim tipi ve alt öğe listesi seri erişimi, ağaç seri olabilir - erişim türleri vb.Bu durumda kullanımın etkinliği en azından kısmen bu tiplerin birbirine birleştirilmesi ve uygulanması ile ifade edilebilir.

Neredeyse hiç kontrol yapısı olmayan Haskell gibi işlevsel bir dilde bu bana oldukça pratik ve uygulanabilir görünüyor . Java Ancak, bu tür bir sistem (değil çok daha az ulaşılabilir görünüyor böylece sonucun uygulanabilirliği / güvenilirliğinden itibaren uygulanmasından çok).

Haskell zaten bir programın ne kadar saf olduğunu kesin olarak belirtmemize izin veriyor ve mühürlü kutulardaki belirli faaliyetleri sınırlandırmanın yollarını sunuyor. Haskell'deki paralellik / eşzamanlılık tip sistemi aracılığıyla uygulandığından , zaten orada (istediğinize) yolun bir parçası olduğu söylenebilir. Buna karşılık, zorunlu diller (Java gibi statik olarak yazılanlar bile) kodlayıcıya bu girişimi engellemenin birçok yolunu sunar.

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.