Komut Dosyası Dili ve Programlama Dili


347

Komut Dosyası Dili ve Programlama Dili arasındaki farkı lütfen açıklayabilir misiniz?
Ayrıca her biri için bazı örnekler verebilir misiniz? Çok fazla Google'ı aradım ama her zaman Stack Overflow'dan en iyi yanıtları buluyorum.

Yanıtlar:


466

Komut dosyası dilleri, açık bir derleme adımı gerektirmeyen programlama dilleridir.

Örneğin, normal durumda, bir C programını çalıştırmadan önce derlemeniz gerekir. Ancak normal durumda, bir JavaScript programını çalıştırmadan önce derlemenize gerek yoktur. Dolayısıyla JavaScript'e bazen "komut dosyası" dili denir.

Modern donanım ve modern derleme teknikleri ile derleme çok hızlı olabileceğinden, bu çizgi gittikçe bulanıklaşıyor. Örneğin, Google Chrome'daki JavaScript motoru olan ve tarayıcının dışında da çok kullanılan V8, aslında JavaScript kodunu yorumlamak yerine anında makine koduna derler. (Aslında, V8 optimize edici iki fazlı bir derleyicidir.)

Ayrıca, bir dilin "komut dosyası" dili olup olmadığının çevre hakkında dilden daha fazla olabileceğini unutmayın. Bir C tercümanı yazamamanızın ve bunu bir betik dili olarak (ve insanların sahip olduğu) kullanmamanızın bir nedeni yoktur. JavaScript'i makine koduna derleyememenizin ve bunu yürütülebilir bir dosyada (ve kişilerin sahip olduğu) depolamamanızın bir nedeni yoktur. Ruby dili buna iyi bir örnektir: Orijinal uygulama tamamen yorumlanmıştır (bir "betik" dili), ancak şimdi bunun için birden fazla derleyici var.

"Komut dosyası oluşturma" dillerinden bazı örnekler (örneğin, geleneksel olarak açık bir derleme adımı olmadan kullanılan diller ):

  • Lua
  • JavaScript
  • VBScript ve VBA
  • Perl

Ve geleneksel olarak açık bir derleme adımı ile kullanılanların küçük bir saçılması :

  • C
  • C ++
  • D
  • Java (ancak Java'nın bayt koduna derlendiğini ve daha sonra çalışma zamanında yorumlandığını ve / veya yeniden derlendiğini unutmayın)
  • paskal

... ve sonra her iki kampta da oturan Python gibi şeyleriniz var: Python derleme adımı olmadan yaygın olarak kullanılır, ancak ana uygulama (CPython) bunu bayt kodunu derlemede derleyip bayt kodunu bir VM ve yapabilirsiniz dosyaları (bu bayt kodunu yazmak .pyc, .pyoyeniden derlemeden kullanım için).

Bu çok az, eğer biraz araştırma yaparsanız çok daha fazlasını bulabilirsiniz.


1
Mükemmel açıklama!
Gladyatör

48
@ mg30rg: Heh - betikleme tamamen "gerçek" programlama olabilir. (Gördüğüm bazı bash betiklerine inanmazsınız ...) Bence onu tanımlamanın en basit yolu (ve yine, bu bir dil şey değil, bu bir çevre şeyidir): Çalışma zamanı ortamı var mı? kaynak kodunu görüyor musunuz? Eğer öyleyse, buna "betik" derdim. değilse, yapmazdım. Bu bakımdan, tarayıcı tabanlı JavaScript "komut dosyasıdır" çünkü V8 gibi motorlar anında derlese bile, kaynak yine de çalışma zamanı ortamına iletilir. Benzer şekilde komut dosyalarını da kabuklar. Geleneksel bir C programının kaynağı çalışma zamanına teslim edilmez .
TJ Crowder

2
@ mg30rg: Ama yine, bu çizgiler her zaman daha bulanıklaşıyor. :-) Java bayt kodunu düşünün. JVM olmadan çalıştıramazsınız, ancak kaynak kodu değildir. (Genellikle bir kod çözücü tarafından makul görünümlü kaynak koduna dönüştürülebilir, ama ...) Java'yı (uzaktan) geleneksel bir ortamda bir betik dili olarak düşünmüyorum. Ama sonra, ben de kategorileri düşünmek için fazla zaman harcamıyorum. :-)
TJ Crowder

2
@ CME64: Hayır, ana uygulama (CPython) bayt kodunu anında derler ve bayt kodunu bir sanal makinede çalıştırır. Python-C-C araçları (Cython ve Pyrex) olsa da, genellikle Python'un çalışma şekli bu değildir.
TJ Crowder

2
@ Vityata'nın savunması için VBScript, Not Defteri'nde yazılır ve metin girişi olarak yorumlanırken, editörde yazarken VBA kodu P-Kodu olarak derlenir , yani bir kod satırını değiştirdikten sonra editörde gördüğünüz kaynak kodu, yazdığınız kod değildir, ancak VBE'nin temel P-Kodunu yorumlaması : VBA'nın VBScript'e karşı mekaniği tamamen ve tamamen farklıdır ve onları bu listede bir araya getirmek hiç de doğru hissettirmez. VBA, VB6'ya VBScript'ten çok daha yakındır; bağımsız bir yürütülebilir dosya oluşturmasını engelleyen yalnızca açık bir kısıtlamadır.
Mathieu Guindon

103

Komut dosyası dili ile programlama dili arasındaki farkı anlamak için, komut dosyası dillerinin neden doğduğunu anlamak gerekir.

Başlangıçta, excel, word, tarayıcılar, oyunlar ve benzeri programlar oluşturmak için yazılmış programlama dilleri vardı. Bu programlar c ve java gibi dillerle oluşturuldu. Fazla mesai, bu programlar kullanıcıların yeni işlevsellik yaratmaları için bir yola ihtiyaç duyuyordu, bu yüzden bayt kodlarına bir arayüz sağlamak zorunda kaldılar ve böylece kodlama dilleri doğdu.

Bir komut dosyası dili genellikle derlenmez, bu nedenle anlamlı bir şey yazdığınızda çalışabilir. Bu nedenle excel C ++ kullanılarak oluşturulabilir, ancak kullanıcıların işlevselliği tanımlaması için VBA adlı bir komut dosyası dili ortaya çıkarır. Benzer şekilde tarayıcılar C ++ / Java ile oluşturulabilir, ancak javascript (herhangi bir şekilde java ile ilgili değil) adı verilen bir betik dili ortaya koyarlar. Oyunlar, genellikle C ++ ile oluşturulur, ancak kullanıcıların özel işlevleri tanımlamaları için Lua adlı bir dili ortaya çıkarır.

Komut dosyası dili genellikle bazı programlama dillerinin arkasında bulunur. Komut dosyası yazma dilleri, orijinal programlama dilinin bir alt kümesinde çalıştıklarından genellikle bilgisayarın yerel yeteneklerine daha az erişime sahiptir. Burada bir örnek Javascript'in dosya sisteminize erişemeyeceğidir. Komut dosyası yazma dilleri genellikle programlama dillerinden daha yavaştır.

Komut dosyası dilleri daha az erişime ve daha yavaş olmasına rağmen, çok güçlü araçlar olabilirler. Komut dosyası oluşturma dillerinin başarısına atfedilen bir faktör, güncelleme kolaylığıdır. Web üzerindeki java uygulamalarının günlerini hatırlıyor musunuz, bu bir programlama dili (java) veya bir komut dosyası dili (javascript) çalıştırma örneğidir. O zamanlar bilgisayarlar o kadar güçlü değildi ve javascript o kadar olgun değildi, bu yüzden Java uygulamaları sahneleri domine etti. Ancak Java uygulamaları can sıkıcıydı, kullanıcının dili bir şekilde yüklemesini ve derlemesini gerektiriyordu. Günümüze gelince, Java uygulamaları neredeyse tükenmiş ve Javascript sahneye hakim. Tarayıcı bileşenlerinin çoğu zaten kurulduğundan, Javascript'in yüklenmesi son derece hızlıdır.

Son olarak, betik dilleri de programlama dilleri olarak kabul edilir (bazı insanlar bunu kabul etmeyi reddetse de) - burada kullanmamız gereken terim, derlenmiş dillere karşı betik dilleri.


4
Kastettiğinizi düşünmüyor musunuz? "Betik dilleri ve derlenmiş diller" yerine "yorumlanmış diller vs derlenmiş diller" ??
bitsapien

6
"Burada bir örnek, Javascript'in dosya sisteminize erişemeyeceğidir", Nodejs merhaba diyor
Muhammed

@Mohammad NodeJS, kodlayıcıların Javascript'i kodlama için bir "dil" olarak kullanmasına izin veren bir çalışma zamanıdır. NodeJS% 100 Javascript değil.
JeffNhan

65

Tüm kodlama dilleri programlama dilidir.

Diller komut dosyası olarak sınıflandırılmaz veya edilmez - tamamen yürütme ortamına bağlıdır.

Ortam yorumlanan ortamsa, buna genellikle komut dosyası ortamı denir.


18

Farklılıklar gittikçe önem kazanıyor. Geleneksel olarak, betik dilleri mevcut programları genişletir ... Bence bu "betiklemenin" ana tanımı, mevcut bir varlığın gerçekleştirmesi için bir dizi talimat yazmayı ifade etmesidir. Ancak, komut dosyası dillerinin özel ve konuşma diline dayalı sözdizimi ile başladığı yerlerde, günümüzde yaygın olanların çoğu C ile bir miktar borçludur.

"Yorumlanan ve derlenen" ayrımın gerçek bir farktan ziyade mevcut bir programı (yerleşik bir tercümanla) genişletmenin bir belirtisi olduğunu düşünüyorum. Hangi programcılar ve meslekten olmayanlar, "programcı ne yapıyor?" Bir programın yorumlanması ve başka bir programın derlenmesi, içerik oluşturucunun etkinlik farkını belirlemede çok az anlama gelir. Bir oyun yazarının, oyunlarının daha yaygın olarak yüksek sesle okunması veya sahnede icra edilmesine karar vermezsiniz, değil mi?


12

Programlama Dili: Makine koduna derlenir ve temel İşletim Sisteminin donanımında çalışır.

Komut Dosyası Dili: Programlama dilinin yapı alt kümesidir. Genellikle yorumlanır. temelde bir şeyler yapmak için başka şeyler "betik". Birincil odak noktası öncelikle kendi uygulamalarınızı oluşturmak değil, mevcut bir uygulamanın istediğiniz gibi davranmasını sağlamaktır, örneğin tarayıcılar için JavaScript, TCL vb.

*** Ancak bir programlama dilinin tercümana dönüştürüldüğü ve kullanımın tersi gibi bir durum söz konusu olduğunda, 'C' Senaryosu yapabileceğiniz bir C tercümanı vardır. Komut dosyaları genellikle bir uygulama davranışını denetlemek için yazılır; burada Programlama Dili uygulama oluşturmak için kullanılır. Ancak, Python örneği olarak sınırlamanın her geçen gün bulanıklaştığına dikkat edin, bu dilin nasıl kullanıldığına bağlıdır.


10

Komut dosyası dilleri, programlama dillerinin bir alt kümesidir.

  1. Komut dosyası dilleri kullanıcı tarafından makine koduna derlenmez (python, perl, kabuk, vb.). Aksine, başka bir program (tercüman denir, programı çalıştırır ve davranışını simüle eder)
  2. Komut dosyası olmayan bazı programlama dilleri (C, C ++, Haskell ve diğer 'derlenmiş' diller), makine koduna derlenir ve daha sonra çalıştırılır.

5

"Fark" olarak belirttiğiniz şeyin aslında gerçek farkın bir sonucu olduğunu düşünüyorum.

Gerçek fark, yazılan kodun hedefidir. Bu kodu kim yönetecek?

Bir yazılım sistemini hedefleyecek kodu yazmak için bir komut dosyası dili kullanılır. Bu yazılım sistemindeki işlemleri otomatikleştirecek. Komut dosyası, hedef yazılım sistemine yönelik bir talimatlar dizisi olacaktır.

Bir programlama dili, gerçek veya sanal bir makine olabilen bilgisayar sistemini hedefler. Talimatlar makine tarafından yürütülür.

Tabii ki, gerçek bir makine sadece ikili kodu anlar, bu nedenle bir programlama dilinin kodunu derlemeniz gerekir. Ancak bu, bir program yerine bir makineyi hedeflemenin bir sonucudur.

Diğer yandan, bir komut dosyasının hedef yazılım sistemi kodu derleyebilir veya yorumlayabilir. Yazılım sistemine kalmış.

Eğer gerçek fark derlenmiş olsun ya da olmasın deriz, o zaman bir sorun var çünkü V8 Javascript çalışır derlendi ve Rhino çalışır değil.

Betik dilleri çok güçlü olmak için evrimleştiği için kafa karıştırıcı bir hal alıyor. Bu nedenle, başka bir yazılım sistemindeki işlemleri otomatikleştirmek için küçük komut dosyaları oluşturmakla sınırlı değildirler, onlarla zengin uygulamalar oluşturabilirsiniz.

Python kodu bir tercümanı hedefler, böylece söz konusu tercümandaki işlemleri "betiklediğini" söyleyebiliriz. Ancak Python kodunu yazdığınızda, bunu bir yorumlayıcı komut dosyası olarak görmüyorsunuz, onu bir uygulama oluştururken görüyorsunuz. Tercüman, diğer şeylerin yanı sıra daha üst düzeyde kodlama yapmak için oradadır. Bu yüzden benim için Python bir kodlama dilinden çok bir programlama dilidir.


5

Dünya gençken ve PC dünyasında .exe veya .bat'ı seçtiyseniz, tasvir basitti. Unix sistemleri her zaman kabuk komut dosyalarına (/ bin / sh, / bin / csh, / bin / ksh vb.) Ve Derlenmiş dillere (C / C ++ / Fortran) sahiptir.

Rolleri ve sorumlulukları ayırt etmek için, derlenen diller (genellikle 3.Nesil Diller olarak adlandırılır) bir 'programlama' dilleri ve 'kodlama' dilleri, bir tercüman (genellikle 4.Nesil Diller olarak adlandırılır) olarak adlandırılan diller olarak görülüyordu. Komut dosyası dilleri genellikle birden çok komut / derlenmiş program arasında bağlantı kurmak için 'tutkal' olarak kullanıldı, böylece kullanıcı görevlerini yerine getirmek için bir dizi adım hakkında endişelenmek zorunda kalmadı - tek bir dosya geliştirdiler, bu hangi adımları belirledi başarmak istediler ve bu herkesin izleyeceği bir 'senaryo' oldu.

Çeşitli insanlar / gruplar belirli bir problem alanını çözmek için yeni tercümanlar yazdı. awk daha iyi bilinenlerden biridir ve çoğunlukla desen eşleştirme ve girdi üzerine bir dizi veri dönüşümü uygulamak için kullanılmıştır. İyi çalıştı, ancak sınırlı bir etki alanı vardı. Kaynak kodun kullanılamaması nedeniyle bu alanın genişletilmesi imkansızdı. Perl (Larry Wall, prensip yazarı / mimar) aracı komut dosyası oluşturma bir sonraki seviyeye - ve kullanıcının sadece sistem komutlarını çalıştırmasına, giriş ve çıkış verilerini değiştirmesine, desteklenen tipsiz değişkenlere erişmesine izin vermeyen, aynı zamanda Unix sistem seviyesi API'lerine erişmesine izin veren bir tercüman geliştirdi. komut dosyalarının içindeki işlevler olarak. Muhtemelen yaygın olarak kullanılan ilk üst düzey komut dosyası dillerinden biriydi.

Sorunuz özellikle Python ile ilgiliydi. Python yorumlayıcısı, python kodunu içeren bir metin dosyasına karşı çalıştığından ve python kodunun bir python yorumlayıcısının olduğu her yerde çalışabileceğinden, bir komut dosyası dili olduğunu söyleyebilirim (Perl ile aynı damarda). Her farklı OS / CPU Mimarisi için kullanıcı python komut dosyasını yeniden derlemenize gerek yoktur (C / C ++ / Fortran'da olduğu gibi), böylece daha taşınabilir ve kullanımı daha kolay hale gelir.

Bu cevabın kredisi Jerrold (Jerry) Heyman'a gidiyor. Orijinal konu: https://www.researchgate.net/post/Is_Python_a_Programming_language_or_Scripting_Language


4

Tercüman kullanan dillerin kodlama dilleri olduğu ve bir dilin programlama dilleri olduğu bir anlaşmazlık yaşıyorum. Herhangi bir dil için bir tercüman veya derleyici geliştirebiliriz. Yorumlanan ortam, web komut dizisine daha iyi uyar ve bunu kolaylaştırır.

Komut dosyası dili ile programlama dili arasında herhangi bir fark olmadığını hissediyorum. Her şey işi yapmakla ilgili. Web ile ilgili görevler söz konusu olduğunda, onlara küçük görevleri göz önünde bulundurarak Web komut dosyaları diyoruz ve bu şekilde sistemle ilgili görevleri sistem veya işletim sistemi düzeyinde komut dosyaları olarak ve bu görevleri sistem komut dosyası dilleri olarak gerçekleştirmek için kullandığımız programlama dili olarak da adlandırabiliriz.

Ayrıca, Python ve Web komut dosyalarında sistem düzeyinde kod C dilinde yazılamaz (kesinlikle gerekli platformu ve ortamı kurabilirsek yapabiliriz). Ancak gereken tek şey, hızlı gelişme için zaman kısıtlamasını etkileyebilecek çok fazla çaba ve azaltılmış küçük gecikme süresi, web betiklerinde bize çok fazla fayda sağlamayacaktır. Ancak Python'da sistem seviyesi görevleri gerçekleştirirsek, bunun tersi doğru değildir.

Alt satır: dil seçimi, gerçekleştirilecek görevin doğasına bağlıdır ve bir dili betik dili bir efsane olduğu için ayırt etmek.


4

Yazılı diller

Komut dosyası dilleri başka bir programda yorumlanır. JavaScript bir tarayıcıya yerleştirilir ve bu tarayıcı tarafından yorumlanır.

Komut dosyası dilleri örnekleri

  1. JavaScript
  2. Perl
  3. piton

Komut Dosyası dillerinin avantajları:

  1. Basit - Kodlama dillerinin yazılması programlama dilinden daha kolaydır.

  2. Daha Az Kod Satırı (LOC)

Programlanan diller

Java gibi programlama dilleri derlenir ve başka bir uygulama tarafından aynı şekilde yorumlanmaz.

Programlama dilleri örnekleri

  1. C
  2. C ++ ve
  3. Java

Daha fazla detay


Komut dosyası verilen diller , programlama dilleridir. Ayrıca Java , JVM adı verilen başka bir uygulama tarafından yorumlanır.
bfontaine

4

(JavaScript ve eski PHP sürümleri gibi) Komut Dosyası dillerinde işimizi gerçekleştirmek için mevcut temel işlevleri ve yöntemi kullanırız. JavaScriptKullanabileceğimiz bir örnek verelim ajaxveyaweb-sockets yalnızca tarayıcı veya yöntemler tarafından destekleniyorsa veya tarayıcıda bunları kullanabiliriz. Ancak C veya C ++, Java gibi dillerde, bu özellik için herhangi bir kütüphane mevcut olmasa bile, bu özelliği sıfırdan yazabiliriz, ancak JavaScript'te yapamayız.

Internet Explorer 8 veya öncesinde web soketlerini JavaScript yardımı ile destekleyebilir misiniz? ancak C veya C ++ veya Java'da Internet Explorer 8'e web soketi özelliği ekleyebilecek bir eklenti yazabilirsiniz.

Temel olarak Komut Dosyası dillerinde, işimizi tamamlamak için var olan yöntemleri sırayla yürüten bir kod yazarız. Bir işlem yapmak için dijital bir hesap makinesine sayı ve formül girmek de komut dosyası diline çok iyi bir örnektir. ve yöntemler ve yeni kütüphaneler yazabilir.

PHP Bu biraz s / b programlama ve kodlama dilidir. Başka bir Üst Düzey Dilde yazılmış derlenmiş uzantılar ekleyerek yeni yöntemler ekleyebiliriz. Doğrudan PHP'de ağ oluşturma veya görüntü işleme kütüphaneleri oluşturmanın üst düzey özelliklerini ekleyemeyiz.

PS: Sadece PHP JavaScript etrafında cevabımı döndürdüğüm için gerçekten üzgünüm ama bu ikisinde önemli bir deneyime sahip olduğum için bu ikisini kullanıyorum.


3

Komut Dosyası dilinin Yorumlanması ve Programlama dilinin Derlenmesi arasındaki farkın dışında, sanırım kaçırılan başka bir fark daha var ..

Komut dosyası oluşturma dili, varolan bir sistemin olanaklarını işlemek, özelleştirmek ve otomatikleştirmek için kullanılan bir programlama dilidir. Bu tür sistemlerde, kullanışlı işlevsellik bir kullanıcı arabirimi aracılığıyla zaten kullanılabilir ve kodlama dili bu işlevselliği program denetimine maruz bırakmaya yönelik bir mekanizmadır.

Oysa genellikle Scratch'tan sistemi kodlamak için bir Programlama Dili kullanılır.

src ECMA


2

Mantıksal olarak programlama dilini ve komut dosyası dilini görürsek, bu% 99,09'dur. çünkü döngü, kontrol koşulu, değişken gibi aynı kavramları kullanıyoruz ve evet diyebiliriz ki her ikisi de aynıdır, ancak C / C ++ ve kod çalıştırmadan önce derlediğimiz diğer programlama dilleri arasında sadece bir şey farklıdır. ancak PHP, JavaScript ve diğer kodlama dillerinde derlememiz gerekmez, doğrudan tarayıcıda yürütürüz.

Teşekkürler Nitish K. Jha


2

Komut dosyası dilleri, insanların komut dosyası dili olarak kabul ettiği programlama dilleridir. Açık bir sınırı olmayan yapay bir kategoridir ve önerilen her kuralın bir istisnası vardır.

Bir dilin bir betik dili olduğunu söylemek için kullanılan klasik kurallar tanımlayıcı değil karakterize edicidir. Bir dil bir dizi kuralı karşılıyorsa, bir betik dili olarak görülme şansı yüksektir. Değilse, iyi bir şans yoktur. Kurallar genellikle şunları içerir:

  • Büyük programlar için değil, küçük "komut dosyaları" için tasarlanmıştır.
  • Başka bir uygulamaya gömülüdür, bu uygulamanın küçük modifikasyonları için kullanılır.
  • Derlenmek yerine yorumlanır.
  • Profesyonellere değil, acemi programcılara yöneliktir.
  • Adı "script" ile biter.

Ekleyeceğim:

  • Komut dosyası dili, çalışma zamanında hemen hemen tüm hataların algılandığı bir programlama dilidir.

Yani öyle, olabilir bir dil olması.

Bir programlama dilinin kodu analiz ettiği ve programı çalıştırmadan hataları C, Java veya C # gibi hatalar gibi raporladığı önemli bir "derleme zamanı" davranışı varsa, büyük olasılıkla komut dosyası dili olarak kabul edilmez.

Geleneksel olarak birçok komut dosyası dili doğrudan kaynaktan yorumlanmıştır, ancak daha popüler olanları, Python'un .pycdosyaları gibi kodu derleyen veya çalıştırmadan önce yerel koda derleyen JavaScript motorlarını optimize eden daha performanslı uygulamalar almıştır .

Dil varsa olabilir onu çalıştıran sadece kaynak koduna bakar bir tercüman tarafından uygulanacak, daha sonra büyük olasılıkla bir komut dosyası dili olarak kabul edilir. Aslında bu şekilde uygulanıp uygulanmadığı önemli değildir, ancak olabilirse, kodun derleme zamanı hata denetimini kapsamlı olarak gerektiremez.

Dil, programı çalıştırmaya gerek kalmadan hataları (sözdizimi hataları dışında) algılamaya yardımcı olan kullanışlı bir statik anlambilim sağlıyorsa, muhtemelen bir komut dosyası dili değildir.

Her zaman, herhangi bir gerçek kuraldan daha fazla bir dil etrafında geleneğe dayanan istisnalar vardır. BASIC, herkesin şimdiye kadar bir dil olarak kullandığı tüm kriterleri karşılasa da, genellikle bir "betik dili" olarak kabul edilmez. Bu nedenle, Visual Basic Script, kendisini daha büyük programlara yönelik "gerçek" bir programlama dili olan Visual Basic'ten ayırt etmek için, "script" adını eklemek zorundaydı.

BASIC ayrıca COBOL ve Fortran gibi eski bir programlama dilidir, insanlar bir dilden statik analiz beklemeden ve temelde "betik dilleri" bile bir şeydi.

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.