Derlenmiş kod ve yorumlanmış kodun performansı hakkında genel açıklamalar yapabilir miyiz?


60

Bir şirket tarafından kullanılması gereken bir öneriye ulaşmak için iki teknolojiyi karşılaştırıyorum. Teknoloji A'nın kodu, teknoloji B'nin kodu makine koduyla derlenirken yorumlanır. Karşılaştırmada, genel olarak teknoloji B'nin yorumlama sürecinin ek yükü olmadığı için daha iyi performans göstereceğini belirtiyorum. Ayrıca, bir programın birçok şekilde yazılabileceğinden, A teknolojisinde yazılmış bir programın B teknolojisinde yazılmış bir programdan daha iyi performans gösterebileceğini de belirtiyorum.

Bu raporu incelemeye sunduğumda, gözden geçiren, genel olarak yorumlama sürecinin genel giderinin, teknolojinin B performansının daha iyi olacağı sonucuna varabilecek kadar büyük olmasının net bir nedenini teklif etmediğimi belirtti.

Öyleyse sorum şu ki, derlenmiş / yorumlanmış teknolojilerin performansı hakkında bir şey söyleyebilir miyiz? Derlenmiş olanların genellikle daha hızlı olduğunu söyleyebilirsek yorumlanabilir, amacımı gözden geçiren kişiyi nasıl ikna edebilirim?


76
Bu, akademik bir uygulama değil pratik bir problem gibi gözüktüğü için, genel bir cevap vermeye çalışmamak, hatta aslında A ve B teknolojilerini değerlendirmek bile önerilebilir. Genel bir cevap verilemezken, iki özel teknolojinin performans özellikleri, kuruluşunuzun ilgilendiği uygulama
türleriyle

26
Soru geneller hakkında soru sorar, ancak gerçek probleminiz Teknoloji A ve B'nin özellikleri ile ilgili gibi görünüyor. Genel olarak yorumlanmış dillerin bir bütün olarak daha yavaş olabileceğini düşünüyorum , ancak bu gerçeğin sizin özel teknolojileriniz üzerinde kesinlikle hiçbir etkisi olmadığını düşünüyorum. Spesifik yorumladığınız B'nin, genel eğilimden bağımsız olarak derlenmiş A'nızdan daha hızlı olması oldukça muhtemeldir.
Bryan Oakley

18
Yorumlanmış bir dili ve bir derlenmiş dili rastgele seçin ve derlenmiş olanın daha hızlı olduğu bir dolarlık bahis yapın. Yeterince tekrarlayın ve sonunda Subway'de öğle yemeği almak için yeterince ileri çıkacaksınız. Ancak, yetkin bir programcının bu kadar para kazanması için daha hızlı ve daha ilginç yollar vardır. Ve metro zaten o kadar da iyi değil.
Ed Plunkett

23
Kendinle çelişiyor gibisin. Bir yandan, yorumlanmış ve derlenmiş diller hakkında genel bir açıklama yapmak istersiniz. Ancak diğer yandan, bu genel ifadeyi somut bir senaryoya uygulamak istiyorsunuz. Fakat bunu bir kez somut bir senaryoya uyguladığınızda, artık genelleşmiyor . Dolayısıyla, yorumlanan dillerin genel olarak daha yavaş olduğu durumunu ortaya çıkarabilseniz bile , inceleyen kişi bunu umursamaz. İki çok özel teknolojinin analizini yapıyorsunuz. Bu, genellemenin tam tersidir.
17'de loneboat

8
Dürüst olmak gerekirse, neden heck öncelikle performansa dayalı iki teknolojiden biri için şirket ile ilgili bir öneri vermek istiyorsunuz? Özel durumlarda (3D yüksek hızlı oyun programlaması gibi) performans ilgili bir kriter olabilir, ancak çoğu gerçek dünyadaki iş programları için, ilk karşılaştırdığınız şey değil, karşılaştırdığınız son şey olmalıdır.
Doktor Brown

Yanıtlar:


111

Hayır.

Genel olarak, bir dil uygulamasının performansı öncelikle üzerinde harcanan para, kaynak, insan gücü, araştırma, mühendislik ve geliştirme miktarına bağlıdır.

Ve özellikle, belirli bir programın performansı temel olarak algoritmalarına dahil edilen düşünce miktarına bağlıdır.

Bazı vardır çok orada hızlı tercümanlar ve üretmek bazı derleyiciler çok yavaş kod.

Örneğin, Forth'un hala popüler olmasının nedenlerinden biri, birçok durumda, bir yorumlanmış bir Forth programının eşdeğer derlenmiş C programından daha hızlı olması ve aynı zamanda Forth ile yazılmış kullanıcı programının ve Forth yorumcunun yazılı olduğu. C, C ile yazılmış kullanıcı programından daha küçüktür.


12
bildiğim kadarıyla söyleyebilirim kendi öncesinde cevabı Bağlı (muhtemelen bir kopya) soru bu çok daha iyi bu konuları kapsar
sivrisineği

11
Performans hakkında genel sonuçlar çıkarmak mümkün değilse ve A'da benzer bir programı geride bırakan belirli bir program yazabiliriz, ancak B'de A'da yazılmış olandan daha iyi bir program yazabiliriz. o zamanlar dilin hızı? Neyse, Forth ilginç görünüyor, daha sonra onun hakkında daha fazla okumak zorunda kalacağım.
EpicSam

36
@ EpicSam: Doğru. “Bir dilin hızı” fikri çok temelde algısal değildir.
Jörg W Mittag

23
Genel olarak: spesifik olun.
igouy,

19
Sanırım "... ve çok yavaş derleyiciler" ile derleme hızlarını değil, oluşturdukları kodu kastediyorsunuz.
martineau

81

Genellemeler ve özel senaryolar kelimenin tam anlamıyla zıtlıklar.

Kendinle çelişiyor gibisin. Bir yandan, yorumlanmış ve derlenmiş diller hakkında genel bir açıklama yapmak istersiniz. Ancak diğer yandan, bu genel ifadeyi Teknoloji A ve Teknoloji B'yi içeren somut bir senaryoya uygulamak istiyorsunuz.

Bir şeyi somut bir senaryoya uyguladığınızda, artık genelleşmiyor . Dolayısıyla, yorumlanmış dillerin genel olarak daha yavaş olduğu durumunu ortaya çıkarabilseniz bile , hala bir şey ifade etmiyorsunuz. Gözden geçiren kişi genellemeleri umursamıyor. İki çok özel teknolojinin analizini yapıyorsunuz. Bu, genellemenin tam tersidir.


3
Bu, soru metninin aksine soru metninin en iyi cevabıdır.
David Moles

37

Genel bir kural olarak, bir yorumlanmış program, programı yorumlayıcının ana dilinde yazmasından 2x - 10x daha yavaştır ve daha dinamik diller için tercümanlar daha yavaştır. Bunun nedeni, yorumlanan programın tüm fiili çalışmaları yapmak zorunda olması, ancak ek olarak yorumlama ek yüküne sahip olmasıdır.

Tercümanın yapısına bağlı olarak, çok önemli farklılıklar olabilir. İki çelişkili tercüman tasarım okulu vardır: Biri opcodların olabildiğince küçük olması gerektiğini söyler, böylece daha kolay bir şekilde optimize edilebilirler, diğeri ise opcodlerin mümkün olduğu kadar büyük olması gerektiğini söyler. Programınızın yapısı tercümanın felsefesiyle eşleştiğinde, genel gider ihmal edilebilir hale gelir.

Perl, metin manipülasyonuna yönelik, yorumlanmış bir dildir. Metin manipülasyonu yapan bir deyimsel Perl programı, bir C programından çok daha yavaş olmayacaktır ve bazı durumlarda C programını bile daha iyi yapamayabilir (Perl farklı bir dize temsili kullandığından ve çeşitli metin ve IO ile ilgili optimizasyonlara sahip olduğundan). Bununla birlikte, Perl'de sayı çatırdaması yapmak, dayanılmaz derecede yavaş olacaktır. Bir artış ++xtek bir montaj talimatıdır, ancak Perl yorumlayıcısı için çoklu işaretçi geçişleri ve dalları içerir. Geçenlerde CPU'ya bağlı bir Perl betiğini C ++ 'a taşıdım ve derleyici optimizasyon seviyesine bağlı olarak 7x-20x hızlandım.

İyileştirmeler hakkında konuşmak burada önemlidir; çünkü cilalı, optimize edilmiş bir tercüman, optimize edilemeyen bir saf derleyiciden makul bir şekilde daha iyi performans gösterebilir. Optimize edici bir derleyici oluşturmak zor olduğundan ve çok çaba gerektirdiğinden, “B teknolojisi” nizin bu vade seviyesine sahip olması muhtemel değildir.

(Not: Bilgisayar Dili Karşılaştırmaları Oyun sitesi) kafa karıştırıcı bir yapıya sahiptir, ancak bir problem için zaman çizelgesine ulaştığınızda, çeşitli dillerin performansının her yerde olduğunu göreceksiniz - genellikle net bir performans sınırı yoktur. derlenmiş ve yorumlanmış çözümler arasında… Sitenin en önemli kısmı kıyaslama sonuçları değil, anlamlı puanların ne kadar zor olduğu üzerine tartışmalar.)

Bir teknoloji seçerken, bir dil çalışma zamanının kendi içinde başarımı tamamen anlamsızdır. Teknolojinin bazı temel kısıtlamaları karşılaması (bütçemiz x $, yyyy-gg'den önce sunabilmeliyiz, çeşitli işlevsel olmayan gereksinimleri yerine getirmeliyiz) ve daha düşük olması önemli toplam sahip olma maliyeti (geliştirici verimliliğini, donanım maliyetlerini, iş fırsatı maliyetlerini, hata riskini ve teknolojide beklenmeyen kısıtlamaları, bakım maliyetlerini, eğitim ve işe alma maliyetlerini hesaba katar). Örneğin, pazara çıkış süresinin en önemli faktör olduğu bir sektörde, en iyi geliştirici verimliliğine sahip teknoloji en iyi çözüm olacaktır. Büyük bir kuruluş için sürdürülebilirlik ve uzun vadeli maliyetler daha ilginç olabilir.


10
"Bilgisayar Dili Kriterleri Oyun sitesi kafa karıştırıcı bir yapıya sahip" olduğunu düşünüyorsanız, o zaman, insanları asla bulamayacakları bir şey aramaya çalışmaktan ziyade, amacınızı destekleyen belirli sayfaya bir URL verin! Göstermek; sadece söyleme.
igouy,

8
"Sitenin en önemli kısmı kıyaslama sonuçları değil, anlamlı kıyaslamaların ne kadar zor olduğu konusundaki tartışmalar" olduğunu düşünüyorsanız, bu sayfalara URL’ler verin. Göstermek; sadece söyleme.
igouy,

4
Cevabınızı okuyanların rahatlığı için olurdu. (Ben sadece benchmarklar oyununu yöneten birisiyim).
igouy

2
Cevaptaki k-nükleotit örneğini birbirine bağlayan @ amon, tartışmaları birbirine bağlayacağı gibi notu daha okunaklı hale getirecek ve notu daha kullanışlı hale getirecektir (tüm siteyi okumadan, hangi tartışmalardan bahsettiğim bana açık değildir).
David Moles

1
Nereden 2-10X aldın? Bu oran tamamen, her bir işleyicinin ne kadar süreyle çalışacağına bağlı olarak her bayt kodu için işleyiciyi almasının ve göndermesinin ne kadar sürdüğüne bağlıdır; improbably. Daha genel olarak, idareciye işleyici hakimdir. ve alma döngüsü kayıtsızca önemsiz olabilir.
user207421

18

Derlenmiş / yorumlanmış teknolojilerin performansı hakkında kesinlikle bir şey söyleyebilirsiniz. Fakat önce "performans" ı tanımlamanız gerekir. Hesaplamalı olarak basit bir gömülü sistem inşa ediyorsanız, "performans" muhtemelen nesnelerin hafıza kullanımına dayanır. Büyük veri kümeleri üzerinde çalışan hesaplamalı olarak karmaşık bir sistem, JVM veya .NET'ten gelen bellek yükü ihmal edilebilir olacağından, birim zaman başına hesaplama sayısında "performans" tanımlayan kendisini bulabilir.

"Performans" ın ne olduğuna karar verdikten sonra, "herhangi bir zamanda 50 milyar nesneye sahip olacağız ve yorumlu techA'yı" dahili bir yönetim için 400 GB'lık bir ek yüke eşdeğer olan her bir nesneye 8 bayt ekleyen "gibi bir şey diyebilirsiniz. Bu verileri eklemeyen techB ile karşılaştırıldığında "


12

Bu teknik bir sorudur ve zaten çok sayıda iyi teknik cevabınız var, ancak durumunuzun biraz farklı bir yönüne dikkat çekmek isterim: “A teknolojisi veya B teknolojisi” gibi bir kararı tamamen verememeniz gerçeği teknik ve / veya performans nedenleriyle.

Böyle bir şeyin teknik yönleri A ve B arasındaki kararın sadece küçük bir kısmıdır. Akılda tutulması gereken onlarca başka faktör vardır:

  • herhangi bir lisans maliyetini içeriyor mu? Örneğin: bir kümeyi bir PostgreSQL makinesini kullanarak bir SQL Server makinesi kümesini kullanmak için (önemli miktarda) ödemeniz gerekir.
  • Bu teknolojiye (yığına) ve ekosistemine aşina çalışanlarım var mı? Eğer evet ise mevcut mu? Hayır ise, biraz kiralayabilir miyim? Bana ne kadara mal olacak? Yoksa var olanları mı eğitiyorum? Bu bana ne kadara patlayacak?
  • müşteri ne istiyor? Bu, çoğu zaman bir sorun olabilir.
  • önerdiğim teknoloji üretim kullanımına hazır mı? Yoksa belki de ölecek güncel bir yutturmaca mı? (örneğin, ilk çıktığında Node.js'yi düşünün)
  • önerdiğim teknoloji, mevcut mimari veya aklımdaki mimari ile uyumlu mu? Yoksa birlikte sorunsuz çalışmasını sağlayarak çok para harcamak zorunda mıyım?
  • ve kendi durumunuza bağlı olan birçok şey.

Gördüğünüz gibi, böyle bir karar verirken göz önünde bulundurulması gereken bir ton ton var.

Bunun özel olarak sorunuza cevap vermediğini biliyorum ama durumunuz ve bu kararın özellikleri hakkında daha büyük bir resim ortaya koyuyor.


10

Kısmi değerlendirme , tercüman ve derleyicilerle ilgili kavramsal bir çerçevedir.

Derlenmiş kod ve yorumlanmış kodun performansı hakkında genel açıklamalar yapabilir miyiz?

Programlama dilleri spesifikasyonlardır ( R5RS veya n1570 gibi bazı raporlarda yazılı ). Bunlar değil yazılım, bu yüzden bile söz etmek mantıklı değil performans . Ancak, bazı programlama dillerinin tercümanlar ve derleyiciler dahil olmak üzere çeşitli uygulamaları olabilir .

Geleneksel olarak derlenmiş dillerde bile (yani uygulamaları çoğunlukla derleyici olan diller ) C gibi, bazı kısımlar sıklıkla yorumlanır. Örneğin, format kontrol dizisi printf (Cı standardında tanımlanan) olan genellikle ile ( "yorumlanır" Cı standart kitaplığı bir sahiptir, printf fonksiyon ancak Değişken parametreler teknikleri kullanılarak) derleyici (dahil GCC ) -in mümkün olan sınırlı spesifik servis taleplerini optimize etmek ve daha düşük seviyeli aramalara "derlemek" için.

Ve bazı uygulamalar, "tercümanlar" dahilinde bile, JIT derleme tekniklerini kullanıyor (bu nedenle çalışma zamanında makine kodu oluşturun ). İyi bir örnek luajit . Diğer uygulamalar (örneğin Python, Ocaml, Java, Parrot, Lua) bir içine kaynak kodunu çevirmekte olduğunuz bayt sonra yorumlanır.

SBCL , her REPL etkileşimini ( evalvb. Çağırır) dinamik olarak makine koduna çeviren bir Common Lisp "derleyici" dir . Yani tercüman olduğunu düşünüyorsun. Tarayıcılardaki çoğu JavaScript uygulaması (örneğin, v8 ) JIT derleme tekniklerini kullanır.

Başka bir deyişle, tercümanlar ve derleyiciler arasındaki fark oldukça bulanıktır (aslında her ikisi arasında bir süreklilik vardır) ve pratik olarak konuşursak, çoğu programlama dili uygulaması genellikle hem tercüman hem de bir derleyici (en azından bayt kodu) yönüne sahiptir.

Bir uygulama çoğu "derleyici" veya "tercüman" benzeri tekniklerin kullanılmasından bağımsız olarak hızlı veya yavaş olabilir.

Bazı dil özellikleri tercümanlık yaklaşımını desteklemektedir (ve tüm program analizinde ancak etkin bir şekilde derlenebilir ).

İçin bazı problemlerin türleri, bazı yazılım tasarımı metaprogramming yaklaşımları değerli ve önemli hız-up verir. Belirli bir girdi verildiğinde, programınızın dinamik olarak işlemek için özel kod oluşturduğunu hayal edebilirsiniz . Bu da bir olası C veya C ++ (ya da bir tam zamanında kütüphanesi kullanılarak, ya da dinamik yüklenen bir eklenti olarak derlemek, bir Cı-kodu üretme) ile yıkanmıştır.

Ayrıca Python ile ilgili bu soruya bakın .


7

Bu gibi kodlar A = A + Biçin, her biri belirli sayıda döngü alan bir veya iki makine talimatını derleyebilir. Hiçbir tercüman bu döngü sayısında aynı şeyi basit bir nedenden ötürü yapamaz.

Tercüman ayrıca kendi talimat komutunu da uygular (bunlara bayt kodları, p kodları, ara dil, ne olursa olsun). Her seferinde ADD gibi bir bayt kodu gördüğü zaman, bir şekilde bakmak zorundadır ve ilaveyi yapan koda da atlamak zorundadır.

Bir dahaki sefere gördüğü zaman, önceki aramayı hatırlamanın bir yolu olmadıkça , bu aramayı tekrar etmelidir . Önceki aramayı hatırlamanın bir yolu varsa, artık "tercüman" dediğimiz şey değil, tam zamanında bir derleyici veya JITter'dir.

Diğer yandan...

Gibi kod için callSomeFunction( ... some args ...), bu kodu girip bırakmak arasında kaç döngü harcanır? Hepsi içeride ne olduğuna bağlı callSomeFunction. Birkaç olabilir ve callSomeFunctionkendisi derlenmiş olsa bile trilyonlarca olabilir . Çok ise, bu kod satırının yorumlama maliyetini tartışmanın anlamı yoktur - para başka yerdedir.

Yorumlanan dillerin kendilerine ait bir değere sahip olduğunu unutmayın; örneğin bunları derlemeye gerek yoktur. (Bayt kodlarına yüzey sözdiziminin "derlenmesi" önemsiz zaman alır. Örneğin R veya MATLAB atın.)

Ayrıca, akıllı programlama seviyeleri için gereken esneklik vardır. Minsky'nin Zihin Derneği'nde , Bölüm 6.4 B -Beyinler, dünyayla ilgili bir A programı var ve A programları ile ilgilenen B programları var ve daha fazla seviye olabilir. Diğer programları yazan ve yöneten programlar, yorumlayıcı sistemlerde daha kolay yapılabilir.

Lisp'te, (+ A B)A ve B'yi eklemek için yazabilirsiniz , ancak yazıldıktan sonra, sadece onu çalıştırma veya çalıştırma seçeneğine sahipsiniz. Ayrıca (eval (list '+ 'A 'B))programı oluşturanı yazabilir ve ardından çalıştırabilirsiniz. Farklı bir şey inşa edebilir.

Programın konusu başka bir program . Bu, tercüme edilmiş bir dilde yazmak daha kolaydır (Jörg'ün işaret ettiği gibi, Lisp'in daha yeni sürümleri varken evalderleme sırasında derleme yapmaları için yorumlama hızına sahip olmadıkları için).


1
Meta seviyeli programlar yazmanın tercüme edilen dillerde daha kolay olduğunu söylemenizi ilginç buluyorum, ancak çoğu uygulamayı derleyen Lisp'i örnek olarak kullanıyoruz.
Jörg W Mittag

1
@ JörgWMittag: Tabii, fakat hepsinin tercüman olan evalve applyişlevleri var .
Mike Dunlavey,

2
En azından SBCL’de evalyorumlanmadığından eminim . Ve ikisi de değil apply. Kesinlikle tercüman içeren uygulamalar var, ancak SBCL yok.
Jörg W Mittag

1
Tercüman, çalışma süresinde döngü durumunu en iyi duruma getirebilir ve kalan yinelemeleri sıkıştırabilir. Bu nadiren derlenmiş programlarda olabilir. Özellikle, Oracle Hotspot tam olarak bunu yapıyor.
Basilevs

2
@ JörgWMittag: Tabi evalyorumlamak değildir ed . Bir yorumlamak olduğunu er .
Mike Dunlavey,

5

Bir tür, buna bağlı olarak, genel kural olarak derlenir - ister JIT üzerinden isterse statik olarak derlenir - ortam, birçok dil yoğunluğu olan işler için daha hızlı olacaktır - basitlik için aynı dili varsayarsak.

Bunun bir nedeni, tercüme edilen dillerin bir talimatı okuyan, almak için uygun eylemi seçip uygulayan tercüman döngü döngüsüne sahip olması gerektiğidir. Python veya Java bayt kodunu yorumlamak gibi en iyi durumda ( eski JVM’nin yaptığı gibi) birkaç talimatın bir ek yüküne sahiptir ve şube belirleyicisiyle tahribata uğramıştır - sonuncusu olmadan yanlış tahminler nedeniyle büyük cezalar bekleyebilirsiniz. Çok aptal bir JIT bile bunu önemli ölçüde hızlandırmalı.

Bu yorumlanan dil hile olabilir dedi. Örneğin, Matlab matris çarpımı için rutinleri optimize etti ve birkaç değişiklikle GPU'da kod çalıştırabilirsiniz (sorumluluk reddi: nVidia için çalışıyorum - burada ifade edilen herhangi bir fikir benimdir ve işverenimin görünümünü temsil etmiyor). Bu şekilde, detaylardan endişe duymadan kısa ve güçlü bir üst seviye kod yazabilirsiniz - birileri bu konuyla ilgilendi ve düşük seviyeli bir dilde optimize etmek için zaman ve kaynakları harcadı. Miras alınan hiçbir şey yoktur ve örneğin, Matlab'ın kodu JIT'e engellemesini engellemez ancak çoğu zaman yüksek seviye rutini çağırmanın ek yükü, düşük seviyeli olanlara harcanan zamana göre minimum olduğundan hiçbir sebep yoktur.

TL; DR - derlenmiş programların yorumlananlara göre çok büyük performans avantajları vardır ( elmadan elmaya karşılaştırması için PyPy Speed'e bakınız ). Ancak yürütülebilir hız sadece sorunun bir parçasıdır ve genel hıza fazla katkıda bulunmayabilir (eğer zaman çoğunlukla kütüphanelerde harcanırsa). Ayrıca uygulama önemlidir.


5

Bir varsayım olmasına rağmen, varsayımınız sağlam bir şekilde oluşturulmuştur.

Ben derlenmiş kod nedenleri üzerinde gidecek değilim gerektiğini yorumlanır kod daha hızlı: Eğer bilgisayarların nasıl çalıştığını biliyorsanız, bariz olacağı. Fark, belirli problem tipleri için büyüklük dereceleri olabilir. İnceleme uzmanınız bu genel davayı ciddi şekilde tartışırsa, ne hakkında konuştuklarını bilmiyorlar.

Bununla birlikte, bir noktaya değinebilecekleri yerler, geliştirdiğiniz uygulama türünde farkın önemli olup olmadığıdır. Çoğunlukla G / Ç veya çoğunlukla derlenmiş kitaplıkları çağırıyorsa ve çok fazla hesaplama yapmıyorsa, yorumlama işleminin ek yükü gerçekten önemsiz olabilir.

Ancak yazımın amacı şudur: Bir BT uzmanı olarak genellikle işlerin nasıl çalışması gerektiğine dair genel bir bilgiye dayanarak hızlı kararlar almak için çağrılırsınız. Belirli bir test yapmak size daha doğru bir cevap verebilir, ancak çok daha pahalıya mal olur ve oraya ilk önce ulaşmaz.

Fakat zaman zaman yakalanırsın. Başıma geldi. İyi bir varsayımda bulunuyorsunuz ve sonra dünyanın aptallığını hesaba katamadınız.

Fakat tüm zamanların en sevdiğim Dilbert çizgi filmini olduğu kadar açıklayamam. Bundan daha iyi hiçbir şey akıllı kıçlı olmanın tehlikesi değildir.

alt metin

TL; DR: Haklı olmalısın, ama gerçek dünyayı kontrol et.


3

Biraz egzotik bir şey kullanmazsanız, probleminiz, yorumlanmış bir dil A ve derlenmiş dil B performansıyla ilgili olmayacak.

Çünkü eğer siz / ekibiniz A'yı B'yi biliyor ve B'yi bilmezseniz ve A'da B'den daha iyi bir kod yazarsanız, A'da B'den çok daha iyi performansa sahip olabilirsiniz. Eğer bir dilde deneyimli insanlar varsa ve dil / kütüphaneler bunu yapabilir. İhtiyacın olan iş, buna bağlı kal.

İşte çeşitli dillerde regex hakkında bir link; derlenmiş olsa da regex'in bazı dillerde daha iyi uygulandığını göreceksiniz: http://benchmarksgame.alioth.debian.org/u64q/performance.php?test=regexdna


Sorun, takımın hem A hem de B'yi kullanabilmesi ve giriş isteğinde bulunduğumda hiçbir zaman tercihini belirtmemesi.
EpicSam

@ EpicSam peki ya geçmiş projeleri?
Walfrat

1
Hem A hem de B kullanılmıştır. Ancak, tüm projeler için 1 teknolojiyi kullanmaya geçmek istiyorlar. Her iki teknolojinin performansı mevcut projeler için yeterince iyi. Ancak, gelecekteki potansiyel projelere bakılırken, bunlardan birinin potansiyel olarak yüksek performansı dikkate alınmalıdır.
EpicSam

3
@EpicSam, projelerinizde size yardımcı olmak için dil çevresindeki topluluğa ve kütüphane / Çerçeveye bakın.
Walfrat

6
@Walfrat ile aynı fikirdeyim. Bahse girerim "en yüksek potansiyeli" olan dil düz montaj veya bazı ham CPU komut setidir. Ancak bu dillerden bahsetmiyoruz çünkü derleyici, tercüman ve önceden yazılmış kütüphaneler gibi araçlara sahip olmanın çok önemli olduğu "bariz". Araçlar / topluluk bilgisinin mevcudiyeti, yorumlanmış / derlenmiş arasında seçim yapmaktan daha önemli olduğunu düşünüyorum
İvan

1

Bence sadece birinin derlenmesi ve diğeri yorumlanması gerçeğine dayanarak iki teknolojinin performansı hakkında konuşmak iyi bir fikir değil. Diğer cevaplarda belirtildiği gibi, uygulama alanına bağlı olarak (bazı diller bazı işlemleri çok hızlı yapmak ve diğer işlemleri daha yavaş yapmak için optimize edilebilir) ve bu teknolojiyi kullanmak üzere olan insanların deneyimine bağlı olabilir.

Bazı mükemmel yorumlanmış dil kodlayıcıları alırsanız ve aşina olmadıkları bazı teknolojiler verirseniz, performansınızı artırmanızı beklemenin makul olduğunu düşünmüyorum - belki de teorik olarak son MAY daha iyi performansla sonuçlanır, ancak gerekli beceri ve deneyim olmadan, tüm optimizasyon fırsatlarını kullanmayacaksınız.

Tanınmış Silicon Valley şirketi çalışanlarından birinden, bazı yetenekli geliştiricilere karmaşık, ancak son derece optimize edilmiş bir kodu sürdürmekten daha pahalı ve zahmetli olduğu için kullanımı daha kolay olan dili tercih ettiklerini duydum. Daha az verimli olan uygulama ile başa çıkmak için daha fazla donanım satın almak, bu nedenle teknolojiyi seçerken de göz önünde bulundurulmalıdır.


0

Bir zamanlar büyük bir kararı haklı çıkarmak için benzer bir açıklama yapmak zorunda kaldım.

İlk önce mütevazi bir mühendise inanmak istemeyebilirler, bu yüzden karşılaştırılabilir bazı kıyaslama testleri buldum ve alıntı yaptım. Microsoft gibi insanlardan veya tanınmış üniversitelerden pek çoğu var. Ve şöyle şeyler söyleyecekler: Yöntem A, X ve Y değişkenlerine bağlı olarak, yöntem B'den 3 ila 10 kat daha hızlıdır.

İkincisi, belki de söz konusu kodun temsili bir kısmını ya da zaten sahip olduğunuz bir benzerini kullanarak bir kıyaslama yapmak isteyebilirsiniz. Gecede 1000 kez çalıştırın, böylece gerçekten ölçülebilir bir fark var.

Bu noktada, A ve B arasındaki fark (ya da eksiklik) o kadar açık olmalıdır ki, sadece onu sunmak zorundasınız. Bu nedenle sonuçları açık bir şekilde, mümkünse çizerek, tüm varsayımları belirterek ve kullanılan tüm verileri tanımlayarak biçimlendirin.


1
Kendi ölçütümü yapmamdaki sorun, A ve B'de yazılmış bir bütün olarak A ve B'de yazılmış 2 özel programı etkin bir şekilde işaretlememdir. X sorununu hem A hem de B'de çözen, A'nın daha hızlı olduğu ve ardından B'nin daha hızlı ve tersi şekilde yeniden yazdığı programlar oluşturmak mümkün olmalıdır. Bu, esas olarak, sonucunuzdan geriye doğru çalışmanıza izin verir, örneğin A'yı tercih ederseniz, ya A'nın daha hızlı veya basit olduğu bir senaryo seçin, A versiyonunu B'deki olandan daha iyi performans gösterinceye kadar optimize edin. dava genel değil.
EpicSam

Bu kararın ne kadar büyük ve önemli olduğuna bağlı olarak, hem A hem de B'yi kullanarak işlevselliğin temsili bir kısmını uygulayabilirsiniz. Bu gerçekten büyük bir kararsa, o zaman bu boşa harcanmaz. Bölümünüzün ne kadar temsili olduğunu ve kişisel tercihiniz lehine önyargılı olmayacağınızı haklı göstermeniz gerekir.
RedSonja

1
@ EpicSam Açıkça A'yı tercih eden birini bulun ve A kriterini en iyi şekilde değerlendirmelerini sağlayın. B için de aynısını yapın. Ölçüt seçiminde hala problem var, ancak her iki programcının da karara karışmasına izin verin; İdeal olarak, kriter üzerinde aynı fikirde olmalarına izin verin. Diğer bir problem ise boşa harcanan zamandır, ancak bu basit ve kullanışlı bir şey seçerek çözülebilir.
maaartinus

0

Herhangi bir dinamik dilin statik olarak derlenmiş olanlara göre bir avantaja sahip olduğunu iddia ediyorum: "Çalışma zamanı optimizasyonları"

Java'nın C ++ 'dan daha hızlı olmasının sebeplerinden biri de budur

Evet, dinamik olarak yazılmış bir dil yüklemek her zaman çeviri maliyetine sahip olacak ve dezavantajlı olacaktır. Ancak, bir kez çalıştıktan sonra yorumlayıcı, statik dillerin asla sahip olamayacağı çalışma zamanı bilgileriyle sık sık kod yollarını profilleyebilir ve geliştirebilir

NOT: Java, dinamik bir dil değil, çevrilmiş bir dildir. Ancak, çalışma zamanı bilgileriyle neyin hızlandırabileceğinin harika bir örneği


-3

... Ayrıca, bir programın birçok şekilde yazılabileceğinden, A teknolojisinde yazılmış bir programın B teknolojisinde yazılmış bir programdan daha iyi performans gösterebileceğini de belirtiyorum.

Bu raporu incelemeye sunduğumda, gözden geçiren, genel olarak yorumlama sürecinin genel giderinin, teknolojinin B performansının daha iyi olacağı sonucuna varabilecek kadar büyük olmasının net bir nedenini teklif etmediğimi belirtti. ...

Bu benim yaklaşımım olurdu:

Genel olarak, tercümanlar derlenir, bu nedenle her tercüman teknoloji, düşük bir seviyeye bakıldığında derlenmiş bir teknolojiden başka bir şey değildir. Bu nedenle, derlenmiş teknolojiler daha fazla ve daha fazla olasılıkla, eğer akıllıysanız (genel olarak siz) daha da kötüleşemezsiniz. Derleme zamanında ne kadar bilginin mevcut olduğuna ve sadece çalışma zamanında ne kadar bilginin mevcut olduğuna ve derleyicilerin ve tercümanların ne kadar iyi olduğuna bağlıdır, ancak teorik olarak herhangi bir tercümanın performansını uygun bir derleyiciyle en azından eşitlemek mümkün olmalıdır, çünkü tercümanlar derleyiciler tarafından üretilirler. Bunun mümkün olduğu, ancak A ve B teknikleriniz için geçerli olduğu anlamına gelmez.

Uygulamada derleyiciye derlenmiş ve yorumlanmış sistemlerin karşılaştırıldığı tüm kriterleri anlatmanız yeterli. Ardından, optimize edilmiş Derleme kodlu özel algoritmanızı yenen bir tercüman önermesini isteyin.

Belki de, iki genel teknoloji A ve B'yi karşılaştırırken böyle bir genel ifadenin hiç faydası olmadığını eklemeliyiz. Orada, A ve B seçimi, yorumlanması veya derlenmesinden çok daha önemli.


2
Tamamen yanlış. Tercümanların nasıl çalıştığını ve derleyicilerin nasıl çalıştığını anlamıyorsunuz.
rghome
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.