Komut dosyası dili ile normal programlama dili arasındaki fark nedir?


20

Programlama dili ile komut dosyası dili arasındaki fark nedir? Örneğin, Perl'e karşı C'yi düşünün.

Komut dosyası dillerinin yalnızca tercüman gerektirdiği ve derleme ve bağlantı gerektirmediği tek fark mıdır?


4
Korkarým ki burasý burada; bilmek istediğiniz şey tamamen bir dil uygulaması meselesidir. Ayrıca her zaman kırmızı bir bayrak olan sığ / görüş cevaplarını (kendi başına hatanız değil) çekiyor gibi görünüyor.
Raphael

Donanım, derlenmiş diller için bir "yorumlayıcı" dır. Tek fark, kaç tercümandan geçtiğinizdir. Makine eşdeğer Turing ve siz eşdeğer Turing bir dil kullanıyorsanız, bir derlenmiş tercüman yazabilirim Asonra bir tercüman yazma, dil Btercüman o dilde Ayürütebileceği, daha sonra bir tercüman Cdilinde tercüman olduğunu Byürütebileceği Temelde, her şey, teorik hesaplama temeline bağlı olarak daha az ve pratik mühendislik endişeleriyle daha fazla ilgili olan dolaylı bir meseledir.
Patrick87

Maaşlar (DevOps öncesi)
Phil Lello

Yanıtlar:


21

Bence farkın dilin kullanım amacı ile ilgisi var.

Örneğin, Python yorumlanır ve Prolog gibi derleme ve bağlantı gerektirmez. Her ikisini de programlama dilleri olarak sınıflandırırdım.

Programlama dilleri yazılım yazmak içindir. Büyük projeleri yönetmek için tasarlanmıştır. Muhtemelen programları arayabilir, dosyaları okuyabilirler, ancak bunda bir betik dili kadar iyi olmayabilirler.

Komut dosyası dilleri büyük ölçekli yazılım geliştirme için tasarlanmamıştır. Sözdizimleri, özellikleri, kitaplıkları, vb. Küçük görevleri hızlı bir şekilde yerine getirmeye odaklanmıştır. Bu, programlama dillerinden bazen daha "hackish" oldukları ve aynı hoş özelliklerin hepsine sahip olmayabilecekleri anlamına gelir. Bir grup dosyada yineleme yapmak veya sysadmin görevleri gerçekleştirmek gibi yaygın olarak gerçekleştirilen görevleri otomatikleştirmek için tasarlanmıştır.

Örneğin, Bash güzel bir şekilde aritmetik yapmaz, bu da büyük ölçekli yazılım yazmayı kabus haline getirir.

Bir tür ölçüt olarak: Perl'de asla bir müzik çalar yazmam, muhtemelen yazabilseydim. Benzer şekilde, asla verilen bir klasördeki tüm dosyaları yeniden adlandırmak için C ++ kullanmaya çalışmazdım.

Bu çizgi bulanıklaşıyor ve bulanıklaşıyor. JavaScript, tanımı gereği bir "betik" dili, giderek daha fazla yazılım alanında olan "web uygulamaları" geliştirmek için kullanılmaktadır. Benzer şekilde, Python başlangıçta bir betik dilinin özelliklerinin çoğuna uyuyor, ancak birincil platform olarak Python kullanılarak daha fazla yazılım geliştirildiğini görüyor.


1
Gerçek hayattaki örnek için +1: Toplu yeniden adlandırma görevleri gerçekleştirmek için C ++ kullanmak zorunda kalmayı hayal edemiyorum!
Casey Kuball

3
Herhangi bir kavramsal farklılık belirtmezsiniz, sadece ilgili kullanım durumları hakkında popüler bir fikir vermezsiniz.
Raphael

3
Ayrıca, binlerce geliştiricinin birlikte çalışmasına izin veren sürüm kontrol sistemi olan tüm eğilimi (Perl'de LJ) tanıtan ilk bloglama hizmetlerinden biri olan dünyanın en büyük sosyal ağını komut dosyası dilinde (PHP'de FB) "yazmaz mıydınız" (Mercurial Python)? Üzgünüz, ama bu "komut dosyası küçük görevler için" sadece popüler buzzwordy çöp.
Oleg V.Volkov

1
@ Raphael Bence kavramsal farklılıklar en iyi ihtimalle bulanık. Temel fark popüler kullanımda, IMO. Bu dillerin çoğu Turing'i tamamlayacak ve benzer bir hesaplama modelini takip edecek. Hiçbir zaman resmi bir ayrım veya tanımla karşılaşmadım, ancak cevabınız varsa cevabımı düzenlemekten çekinmeyin.
jmite

3
@Raphael Konunun bir parçası: Hiçbir kavramsal fark yok. Derleme ile çalışma zamanında yapabileceğiniz şey, öncelikle yorumlanan ve derlenen bir konudur ve bu dilin değil, uygulamanın bir özelliğidir (dil tasarımı belirli bir uygulama modelini zorlaştırabilir).
Gilles 'SO- kötü olmayı kes

6

Komut dosyası yazma dillerinde klasik makale John K. Ousterhout'un Scripting'i: Bilgisayar 31 (3), 1998'de yayınlanan 21. Yüzyıl için daha yüksek düzeyli programlamadır . diğeri.

Ousterhout, sistem programlama dillerini programlama için makine dillerinin yerini almak üzere gelişti olarak nitelendirdi. Kayıt ataması ve alt program çağırma dizileri gibi sıkıcı ayrıntıları gizler, döngüler ve diğer yaygın kontrol akışı deyimleri yazmak için basit yapılar sağlar ve yazma disiplini uygular. Genellikle (vaktinden önce) bir derleyici tarafından uygulanır. Bu diller, baştan itibaren yazılım yazmak içindir. Örnekler C, C ++ ve Java'dır.

Buna karşılık, Ousterhout'a göre komut dosyası yazma dilleri, genellikle sistem programlama dillerinde yazılmış, zaten yararlı programların bulunduğu öncülünden başlar. Perl, Python, Tcl, Visual Basic ve Unix kabukları gibi komut dosyası dilleri, bu varolan programları yeni programlarda birleştirmek için araçlar sağlar. Ousterhout, betik dillerini "daktilo" (çoğu dinamik yazım olarak adlandırılanlar dahil) ve hızlı gelişimi vurgulamak olarak nitelendirdi; bunlar genellikle tercümanlar tarafından uygulanır.

Şimdi, tek bir yazarın kavramsal modelinin yetkili olduğunu varsaymamaya dikkat edilmelidir. Her ne kadar bilgisayar bilimcileri her terime kesin tanımlamalar yapan matematikçiler olduğumuzu düşünüyor olsak da, uygulamada çoğu bilgisayar terminolojisi sosyal olarak bulanık ve heterojen anlamlarla inşa edilmiştir; çoğu terim hakkında çok yüksek düzeyde kaba bir fikir birliği vardır, ancak ayrıntılar genellikle kimin yazdığına bağlıdır. Böylece, makalesini, cevabımı ve diğer tüm cevapları büyük bir tuz yığını ile alın.

Sorunuzda ifade ettiğiniz gibi, "normal" bir programlama dilinin varlığına şahsen itiraz edeceğim. Ancak, aktarmaya çalıştığınız kavramın kabaca Ousterhout'un sistem programlama dillerine karşılık geldiğini düşünüyorum.


2

Tüm kodlama dilleri de programlama dilidir. Bunun tersi doğru değil. "Yalnızca tercüman gerektiren" diller , yorumlanmış dillerdir ( derlenmiş dilin aksine - Java gibi bazı diller her iki kategoriye de dahildir).

Komut dosyası dili olarak kategorize edilen bir dil , "tutkal" dili olarak yararlı olduğunu gösterir. Komut dosyaları tam özellikli programlar olma eğilimi göstermez, bunun yerine diğer yazılım parçaları arasındaki boşlukları doldurur.

Komut dosyaları genellikle birden çok programı birbirine bağlamak, ani görevleri çok hızlı / kolay bir şekilde gerçekleştirmek veya hatta performans ve güvenlik endişelerinin daha düşük bir dile aktarıldığı gömülü bir ortamda kullanılır. Komut dosyası yazma dilleri, geliştirme süresini azaltma eğilimindedir, bu nedenle çoğunun yorumlanma nedeni ve çok üst düzeydir.


Herhangi bir kavramsal farklılık belirtmezsiniz, sadece ilgili kullanım durumları hakkında popüler bir fikir vermezsiniz.
Raphael

1

"Komut dosyası dilleri" kümesi, "programlama dilleri" kümesinin alt kümesidir. C ve Perl arasındaki fark, sistem programlama dili ile uygulama dili ve yorumlanan dil ile derlenmiş dil arasındaki farktır.

Sistem programlama dilleri düşük seviyelidir ve bellek yönetimine, öngörülebilir G / Ç'ye vb. Uygulama dilleri, 'dosyadan ayarı okuma, açık yuva ve ayar isteklerine göre işlem istekleri' gibi daha üst düzey sorunların hızlı çözümlenmesine yöneliktir.

Bu nedenle, uygulama dilleri çok daha yüksek seviyeli, daha sonra sistem dilleri olma eğilimindedir, yani büyük miktarda yerleşik soyutlama ve yardımcı tesisler sağlar ve genellikle bir tür otomatik bellek yönetimi ekler.

Derlenmiş dillerdeki programlar, program yürütülmeden önce bazı koda tamamen işlenir. Komut dosyası dilleri yürütme sürecinde dinamik olarak çevrilir ve genellikle dinamik kod oluşturma ve kaynak kodlu dosyalar da dahil olmak üzere olanaklar içerir.

Bu nedenle, tüm kodlama dilleri uygulama dilidir, ancak tam tersi doğru değildir. Sistem dilleri her zaman derlenmiş dillerdir, çünkü kodlama dilleri genellikle dilin kendisi için uygulanması pragmatik olmayan özellikler içerir. Bununla birlikte, komut dosyası yazma (yorumlanmış) / derlenmiş farkının uygulama hakkında daha fazla olduğuna dikkat edin: bazı dillerde, haskell için olduğu gibi, her iki uygulama türü de mevcut olabilir.


Bu yorumlanmış / derlenmiş ikilemi çizmenin yanlış olduğunu düşünüyorum. Ben de bunun bir alt küme ilişkisi olduğunu düşünmüyorum, ancak kesinlikle kümelerin boş olmayan bir kesişimi var. Aynı şekilde, yüksek ve düşük seviyeler de bu farkı doğru olarak tanımlayamazlar. Prolog çok üst düzeydir, ancak bash veya java betiğinin olduğu gibi bir betik dili değildir.
jmite

1

Diğerleri, komut dosyası dilleriyle ve komut dosyası olmayan dillerle ilişkilendirilme eğiliminde olan özniteliklere sahiptir. Bu, insanların "kodlama dili" terimini kullandıklarında ne anlama geldiklerini hissetmek için yararlıdır, ancak düzgün bir şekilde tanımlanmış bir sınırın olmadığını anlamak için daha önemli olduğunu düşünüyorum : Bilgili iki kişi, belirli bir X dilinin komut dosyası dili. Bununla birlikte, "kodlama dili" teriminin faydası vardır, çünkü sınırların çok içinde veya çok dışında olan diller hakkında geniş bir mutabakat vardır.

"Aile arabası" ile "spor araba" veya "dergi" ile "gazete" karşılaştırması yapın. Her aile otomobilini genelleştirilebilen her spor otomobilden ayırt etmek için% 100 güvenilir bir kural bulmanın zor olacağını (temel olarak her kategorideki mevcut tüm arabaların numaralandırılması anlamına gelmediğini) ve en azından potansiyel olarak objektif ( yani herkes için kabul edilebilir). Ancak bu terimler pratikte hala yararlıdır, çünkü karar verilmesi zor bazı durumlar olsa da, birçok araba açıkça bir kategoride ve diğerinde değil.


0

Daha önce bahsetmediğim bir fark, amaçlandığı gibi kullanıldığında, çoğu komut dosyasının yürütme süresine "makroskopik" işlemler hakim olacak ve mikroskopik işlemlerin performansının genel yürütme süresi üzerinde önemli bir etkisi olmayacaktır. Örneğin, bir ışın izleme animasyon programı "görüntüyü oluştur" ifadesine sahip bir komut dosyası dili içeriyorsa, 240 kareyi oluşturmak için bir komut dosyası "görüntüyü oluştur" ifadesinde dört saat harcayabilir ve toplamda dört saniye diğer her Şey. Birisi render motorunun dışındaki her şeyi bir milyon kat hızlandırsa bile, bunun genel performans üzerinde render motorunu% 0,1 hızlandırmaktan daha az etkisi olacaktı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.