Bir dil ne zaman bir betik dili olarak kabul edilir? [kapalı]


107

Bir dili betik dili yapan nedir? Bazılarının "derlemek yerine yorumlandığında" dediğini duydum. Bu, PHP'yi (örneğin) bir betik dili yapar. Tek kriter bu mu? Yoksa başka kriterler var mı?

Ayrıca bakınız:


Sorunuzu biraz genişletmek isteyebilirsiniz. Bunun başka türlü neredeyse bir aldatmaca olduğunu düşünüyorum. Diğerleri ayrımı göremeyebilir
Kent Fredric

Hangi başka soruya bir dupe?
Sietse

2
stackoverflow.com/questions/98268/… Pek çok benzerlik var. Zorunlu olarak aynı değil, ancak birçok paylaşılan bağlam / fikir.
Kent Fredric

7
... Bir dil API'yi bozduğunda ve her küçük sürümde sözdizimini değiştirdiğinde, bakılmamış 100 kirli buggy C kitaplığı etrafında bir sarmalayıcı olduğunda, o zaman bir betik dilidir. ;)
ivan_ivanovich_ivanoff

1
"İlgili" kenar çubuğunda, stackoverflow.com/questions/1514206/… 'yi bulursunuz ve buna daha sonra stackoverflow.com/questions/101055/… adresine giden mevcut kopyaların bir yığınını bağladım .
dmckee --- eski moderatör yavru kedi

Yanıtlar:


52

Komut dosyası dili, başka şeyler yapmak için "komut dosyası oluşturan" bir dildir. Öncelikli odak noktası, öncelikli olarak kendi uygulamalarınızı oluşturmak değil, mevcut bir uygulamayı istediğiniz şekilde hareket ettirmek kadar, örneğin tarayıcılar için JavaScript, MS Office için VBA.


Peki ya Python gibi diller? Odak noktasının nerede olduğunu söylemek kolay değil, ancak kendi uygulamalarına daha çok odaklandığı söylenebilir, yine de buna "komut dosyası dili" denir. Belki de CPython impl referansının bayt koduna gizli derleme olduğu içindir. "tür güvenliği" ile ilgili derleme hataları oluşturmaz mı? Belki
Oded'in

Bayt kodu ve tür sistemlerinin bununla hiçbir ilgisi yoktur. Yukarıdaki tanıma göre, bir uygulama bir API'yi Python'a gösterirse, komut dosyası dili olarak Python'u kullandığı söylenir. Tamamen Python'da bir uygulama oluşturursanız, bu uygulama onu bir programlama dili olarak kullanır.
hata

"Komut dosyası oluşturma", bir dil türünün tanımı değildir. Dillerin sahip olabileceği bir özelliktir . Dolayısıyla, Python "iyi bir betikleme dilidir" çünkü bir şeyleri betimleyen kod yazmayı kolaylaştırır. Assembly, komut dosyası yazmayı zorlaştırdığı için iyi bir betik dili değildir. C ortada bir yerdedir, çünkü seslenmek için bir anahtar kelimesi (sistemi) olmasına rağmen, siz oraya ulaşmadan önce kullanıcıyı çok fazla pürüzlülükle rahatsız eder.
nomen

93

Basit. Ben onu kullandığımda, bu modern ve dinamik bir dil, kullandığınızda, sadece bir betik dili!


19
Evet. "Bu bir 'oyuncak dili' değil, 'üst düzey bir dil'": P
Roberto Bonvallet

6
bu inişli çıkışlı ve konu dışı, -1
adf88

1
- (1 + 1) ile bile, onay işaretli olandan yaklaşık 2x + 1s alır. : D
anatoly techtonik

En iyi. Cevap. EVAR!
iconoclast

41

Geleneksel olarak, komut dosyası oluşturma ile programlama arasındaki farktan bahsederken, komut dosyaları yorumlanır ve programlar derlenir. Bir dil farklı şekillerde çalıştırılabilir - yorumlanabilir veya derlenebilir (bayt koduna veya makine koduna). Bu, bir dili öyle ya da böyle yapmaz .

Bazı gözlerde, sen yolu kullanmak bir dil, bir kodlama dili yapar (örneğin, C ++ irade ağırlıklı geliştirmek oyun geliştiriciler komut Lua nesneleri). Yine, satırlar bulanık - bir dil bir kişi tarafından bir programlama için kullanılabilir ve aynı dil bir başkası tarafından kodlama dili için kullanılabilir.

Bu, komut dosyası dilleri hakkındaki Wikipedia makalesinden alınmıştır:

Bir komut dosyası dili, kod dili veya uzantı dili, bir veya daha fazla yazılım uygulamasının kontrolüne izin veren bir programlama dilidir. "Komut dosyaları", genellikle farklı bir dilde yazıldıkları ve genellikle son kullanıcı tarafından oluşturulduğu veya en azından değiştirildiği için uygulamanın temel kodundan farklıdır. Komut dosyaları genellikle kaynak kodundan veya bayt kodundan yorumlanırken, kontrol ettikleri uygulamalar geleneksel olarak yerel makine koduna derlenir. Komut dosyası dilleri neredeyse her zaman kontrol ettikleri uygulamalara yerleştirilmiştir.

"Genellikle", "sıklıkla", "geleneksel olarak" ve "hemen hemen her zaman" ifadelerinin kullanıldığını fark edeceksiniz - bunların hepsi size, belirli bir dili "betik dili" yapan hiçbir farklı öznitelik kümesi olmadığını söyler .


1
@Amr: Buna java betiği
sepp2k

1
@Ram Bhat - ayrım yapay olduğu için kafa karıştırıcı.
Oded

11
@Andrey: Tüm modern JavaScript uygulamaları derlendi. Ve C için tercümanlar var
Jörg W Mittag

27
Bu tamamen yanlış. Aslında yanlış bile değil , sadece açık bir şekilde mantıklı değil. Derlenmiş veya yorumlanmış dil diye bir şey yoktur. Bir dil derlenmiş değildir, bir dil sadece olduğunu . Bir sürü soyut matematiksel kural. Yorumlama ve derleme, bir dilin değil , bir yürütme motorunun özellikleridir . Her dil bir derleyici veya bir yorumlayıcı ile uygulanabilir. Aslında, bu sayfada "yorumlanan" olarak belirtilen tüm diller, neredeyse tamamen derlenmiş uygulamalara sahiptir, örneğin JavaScript, PHP, Python, Ruby.
Jörg W Mittag

5
@Andrey: Chakra (IE9), TraceMonkey / JägerMonkey (Firefox), Nitro (Safari), Carakan (Opera), JavaScript'i bayt koduna derler ve ardından bayt kodunun bir kısmı yorumlanır ve bazıları yerel koda göre derlenir. V8 (Chrome) bayt kodunu atlar ve JavaScript'i doğrudan yerel koda derler. IronJS, JavaScript'i CIL bayt koduna derler. Rhino, JavaScript'i JVML bayt koduna derler. BESEN (şimdiye kadarki tek ECMAScript 5 motoru) JavaScript'i BESEN bayt koduna derler ve yerel bir derleyici şu anda eklenmektedir. Yukarıdakilerden bazıları ayrıca normal ifadeleri yerel makine koduna derler.
Jörg W Mittag

31

"Senaryo, oyunculara verdiğin şeydir. Program, izleyiciye verdiğin şeydir." - Larry Duvarı

Artık pek bir fark olduğunu sanmıyorum. Sözde "komut dosyası" dilleri genellikle çok hızlı bir şekilde ve çalışma zamanında derlenir. Ve bazı "programlama" dilleri de çalışma zamanında daha fazla derlenir (JIT'i düşünün) ve "derlemenin" ilk aşaması sözdizimi denetimi ve kaynak çözümlemesidir.

Buna takılma, gerçekten önemli değil.


hmmm .. Kapatmadım ama çoğu görüşmeci ve öğretmen öyle. Ve bu insanlardan hiç birinin bana tatmin edici bir cevap vermesini hiç istemedim!
Laz

1
Ve buradaki diğer cevaplardan birini verdiyseniz, bir röportajcı olarak soruya gerçekten hakim olamayacağınızı düşünürdüm. Ayrım gerçekten bulanık ve net bir cevap yok. "Şey, geleneksel olarak ..." deseydin bunu kabul ederdim, ama o zaman çalışma zamanı derlemesi ve JIT'leme gibi şeyleri de tartışmanı beklerdim.
Clinton Pierce

25

Benim tanımım, genellikle ikili yerine kaynak olarak dağıtılan bir dil olacaktır.


5
Yani php, python, vb. Komut dosyası dilleri mi?
Sietse

"Komut dosyası oluşturma", Python ve PHP için genel bir tanımdır.
S. Lot

22
php ve python - tabii ki bunlar kodlama dilleridir!
Antony Carthy


@Antony Carthy bu yanlış. Python genellikle bir betik dili değildir, ancak diğer diller gibi bir programda kullanılan (Word (VB), Browser (JS) gibi) olabilir
Joschua

16

Buna birçok olası cevap var.

Birincisi: Gerçekten bir soru değil fark bir komut dosyası dili, çünkü bir betik dili ve bir programlama dili arasındaki olan bir programlama dili. Bu daha çok, bir programlama dilini hangi özelliklerin bir betik dili haline getirdiğiyle ilgili bir soru, başka bir programlama dili bir betik dili değildir .

İkincisi: XYZ'nin "komut dosyası", "işlevsel programlama", "nesne yönelimli programlama" veya sizde neye sahip olup olmadığına bakılmaksızın, bir XYZ dilinin ne olduğunu söylemek gerçekten zor. "Fonksiyonel programlama" nın ne olduğu tanımı oldukça açıktır, ancak kimse "fonksiyonel programlama dilinin" ne olduğunu bilmiyor.

Fonksiyonel programlama veya nesne yönelimli programlama, programlama stilleridir ; hemen hemen her dilde işlevsel bir tarzda veya nesneye yönelik bir tarzda yazabilirsiniz. Web'de bkz Java veya C # kodu bir sürü çok prosedürel ve nesne yönelimli değildir oysa Örneğin, Linux Sanal Dosya Sistemi Anahtarı ve Linux Sürücü Modeli, ağır nesne yönelimli C ile yazılmış rağmen vardır hiç . OTOH, oldukça işlevsel bir Java kodu gördüm.

Öyleyse, eğer fonksiyonel programlama ve nesne yönelimli programlama herhangi bir dilde yapılabilen stillerden ibaretse , "nesne yönelimli programlama dilini" nasıl tanımlarsınız? Nesne yönelimli bir programlama dilinin nesne yönelimli programlamaya izin veren bir dil olduğunu söyleyebilirsiniz. Ama bu pek bir tanım değil: tüm diller nesne yönelimli programlamaya izin veriyor, bu yüzden tüm diller nesne yönelimli mi? Diyorsunuz ki, eğer sizi nesne yönelimli bir tarzda programlamaya zorlarsa , dil nesne yönelimli olur . Ama bu da pek bir tanım değil: tüm diller işlevsel programlamaya izin veriyor, bu nedenle hiçbir dil nesne yönelimli değil mi?

Bu yüzden benim için şu tanımı buldum:

Bir dil, her ikisi de olması durumunda bir betik dilidir (nesne yönelimli dil / işlevsel dil)

  • komut dosyası oluşturmayı (nesne yönelimli programlama / işlevsel programlama) kolaylaştırır , yani sadece izin vermekle kalmaz, aynı zamanda kolay ve doğal hale getirir ve yardımcı olan özellikler içerir VE
  • sizi komut dosyası oluşturmaya (nesne yönelimli programlama / işlevsel programlama) teşvik eder ve yönlendirir .

Böylece, beş paragraftan sonra şu sonuca vardım: "bir betik dili, betik için bir dildir". Ne harika bir tanım. DEĞİL.

Açıkçası, şimdi "komut dosyası yazmanın" tanımına bakmamız gerekiyor.

Üçüncü sorunun ortaya çıktığı yer burasıdır: "İşlevsel programlama" terimi iyi tanımlanmıştır ve yalnızca "işlevsel programlama dili" terimi, ne yazık ki komut dosyası ile hem "komut dosyası oluşturma" hem de "komut dosyası oluşturma dili" terimi ile sorunludur. "yanlış tanımlanmıştır.

Eh, öncelikle komut dosyası olduğunu programlama. Bu sadece özel bir tür programlama. IOW: her komut dosyası bir programdır, ancak her program bir komut dosyası değildir; tüm komut dosyaları kümesi, tüm programlar kümesinin uygun bir alt kümesidir.

Kişisel görüşüme göre, komut dosyası komut dosyası yazmayı yapan ve onu diğer programlama türlerinden ayıran şey şudur:

Komut dosyaları, büyük ölçüde

  • komut dosyası tarafından oluşturulmamış,
  • senaryodan bağımsız bir ömre sahip ve
  • komut dosyasının etki alanının dışında yaşamak.

Ayrıca, kullanılan veri türleri ve algoritmalar genellikle komut dosyası tarafından değil, dış ortam tarafından tanımlanır.

Bir kabuk komut dosyası düşünün: kabuk komut dosyaları genellikle dosyaları, dizinleri ve işlemleri yönetir. Sisteminizdeki dosyaların, dizinlerin ve işlemlerin çoğu muhtemelen şu anda çalışan komut dosyası tarafından oluşturulmamıştır. Ve senaryo çıktığında kaybolmazlar: ömürleri senaryodan tamamen bağımsızdır. Ve aslında senaryonun bir parçası değiller, sistemin bir parçası da. Senaryonuza yazarak Fileve Directoryders vererek başlamadınız , bu veri türleri sizi ilgilendirmez: sadece orada olduklarını varsayarsınız ve nasıl çalıştıklarını bile bilmiyorsunuz (ne de bilmenize gerek yok ). Ve kendi algoritmalarınızı da uygulamazsınız, örneğin, sadece findkendi genişlik-ilk-aramanızı uygulamak yerine kullandığınız dizin gezdirme için .

Kısacası: bir betik kendisini betikten bağımsız olarak var olan daha büyük bir sisteme bağlar, sistemin küçük bir bölümünü işler ve sonra çıkar.

Bu daha büyük sistem, bir kabuk komut dosyası durumunda işletim sistemi, tarayıcı komut dosyası durumunda tarayıcı DOM, bir oyun (örneğin, Lua ile World of Warcraft veya Linden Komut Dosyası Dili ile Second Life), bir uygulama (örneğin, AutoLisp AutoCAD veya Excel / Word / Office makroları için dil), bir web sunucusu, bir robot paketi veya tamamen başka bir şey.

Komut dosyası oluşturma yönünün, programlama dillerinin diğer tüm yönlerine tamamen ortogonal olduğunu unutmayın: bir komut dosyası dili güçlü veya zayıf bir şekilde yazılabilir, katı veya gevşek bir şekilde yazılabilir, statik veya dinamik olarak yazılabilir, nominal olarak, yapısal olarak veya basit bir şekilde yazılabilir, hatta tiplenmemiş bile olabilir. . Zorunlu veya işlevsel, nesneye yönelik, prosedürel veya işlevsel, katı veya tembel olabilir. Uygulamaları yorumlanabilir, derlenebilir veya karıştırılabilir.

Örneğin, Mondrian, derlenmiş bir uygulamaya sahip, kesinlikle güçlü bir şekilde statik olarak yazılmış, tembel, işlevsel bir betik dilidir.

Terimi yolu Ancak, tüm bu tartışma, bir komut dosyası dili olduğunu gerçekten gerçek dünyada kullanılan, yukarıdakilerden herhangi biri ile hiçbir ilgisi yoktur. Çoğu zaman sadece bir hakaret olarak kullanılır ve tanımı oldukça basittir, hatta basittir:

  • gerçek programlama dili: benim programlama dilim
  • komut dosyası dili: programlama diliniz

Bu, terimin en sık kullanıldığı yol gibi görünüyor.


Bu cevaplardan bazıları aptalca. Bir dil, nesnelerle programlamaya yönelik olduğunda "nesne yönelimli" dir . Bir dil birinci sınıf işlevlere sahipse "işlevseldir". Bu, bir dilin ikisinin birden olamayacağı anlamına gelmez. Bunlar türlerin tanımları değil, dillerin özellikleridir . Komut dosyası oluşturma benzerdir. Bir dil, komut dosyaları yazmayı kolaylaştırıyorsa - kısa, basit kullanıcı-uygulama etkileşimi bitleri - "iyi bir komut dosyası dilidir".
nomen

16

Tıpkı porno gibi, gördüğünde anlarsın. Bir komut dosyası dilinin tek olası tanımı şudur:

A language which is described as a scripting language.

Biraz dairesel, değil mi? (Bu arada, şaka yapmıyorum).

Temelde, bir dili, özellikle yaratıcıları tarafından böyle olarak adlandırılmasının dışında, bir betik dili yapan hiçbir şey yoktur. Modern betik dillerinin başlıca seti PHP, Perl, JavaScript, Python, Ruby ve Lua'dır. Tcl, ilk büyük modern betikleme dilidir (ilk betik dili değildi, ne olduğunu unuttum, ama Tcl'den önce olduğunu öğrendiğimde şaşırdım).

Ben büyük betik dillerinin özelliklerini tanımlamak benim kağıt :

 A Practical Solution for Scripting Language Compilers
 Paul Biggar, Edsko de Vries and David Gregg
 SAC '09: ACM Symposium on Applied Computing (2009), (March 2009)

Çoğu dinamik olarak yazılır ve yorumlanır ve çoğunun referans uygulamalarının dışında tanımlanmış bir semantiği yoktur. Bununla birlikte, ana uygulamaları derlenmiş veya JIT edilmiş olsa bile, bu dilin "doğasını" değiştirmez.

Geriye kalan tek soru, yeni bir dilin bir betik dili olup olmadığını nasıl anlayabileceğinizdir. Eğer buna bir betik dili deniyorsa, o birdir. Öyleyse, Faktör bir betik dilidir (ya da en azından o yazıldığı zamandı), ama, diyelim ki, Java değildir.


1
Bu çok iyi bir açıklama, ama eminim ki bazı insanlar "porno" gördükleri için buna olumlu oy veriyorlar
HoKy22

Kağıdın bağlantısı kesildi.
Quazi Irfan

5

"Komut dosyası dili" pek çok anlama gelebilecek bulanık kavramlardan biridir. Genellikle sizi kaynak koddan yürütmeye götüren tek adımlı bir süreç olduğu gerçeğini ifade eder.

Örneğin Perl'de şunları yaparsınız: perl my_source.pl

Yukarıdaki kriterler göz önüne alındığında, PHP bir betik dilidir (örneğin kaynak kodunu "korumak" için Zend Kodlayıcıyı kullanırken bir "derleme" sürecine sahip olsanız bile).

PS. Genellikle (ancak her zaman değil) komut dosyası dilleri yorumlanır. Ayrıca sıklıkla (ancak yine, her zaman değil) komut dosyası dilleri dinamik olarak yazılır.


Perl çalışmadan önce bayt koduna derler.
Brad Gilbert

2
Ya Java? Bir java programını çalıştırmak için bir
jvm'ye

5

Tüm komut dosyası dilleri programlama dilleridir. Yani kesinlikle konuşmak gerekirse, hiçbir fark yok.

Terim, dilin herhangi bir temel özelliğine atıfta bulunmaz, dilin tipik kullanımına atıfta bulunur . Tipik kullanım, esas olarak önceden var olan koda çağrı yapan kısa programlar ve sonuçlar üzerinde bazı basit işlemler yazmaksa (yani, tipik kullanım betik yazmaksa ), o zaman bu bir betik dilidir.


4

Sanırım Bay Roberto Ierusalimschy'nin çok iyi bir cevabı var ya da 'Lua'da Programlama'daki soru:

Bununla birlikte, yorumlanan dillerin ayırt edici özelliği, derlenmemiş olmaları değil, herhangi bir derleyicinin dil çalışma zamanının bir parçası olması ve bu nedenle, anında oluşturulan kodu çalıştırmanın mümkün (ve kolay) olmasıdır.


Bu soruya hiç cevap vermiyor!
Paul Biggar

Tekrar belirteyim, bir betik dili derleyicinin dahil olduğu bir dildir ve anında üretilen kodu çalıştırmanın mümkün olduğunu. Bu soruya nasıl cevap vermez?
Rodrigo Lopez

Bu yorumlanmış bir dildir. Herhangi bir yorumlanan dilin bir betik dili olduğunu söylemeye çalışıyorsanız, bunu söyleyin.
Paul Biggar

Tüm diller komut dosyası yazmak için kullanılabilir, benim için anahtar öğe ne kadar uygun olduklarıdır. Benim için ayırt edici özellik, evet, yorumlanmalarıdır.
Rodrigo Lopez

4
Common Lisp, genellikle bir betik dili olarak düşündüğüm şey değildir, ancak tam güçlü bir evalişlevi vardır.
David Thornley

4

Bir bölüm

  • komut dosyası oluşturma = dinamik olarak yorumlandı
  • normal = derlenmiş

Dinamik olarak yorumlanan bir dil çalışma zamanında yorumlanırken, derlenmiş bir dil çalıştırılmadan önce derlenir.

Jörg'ün de belirttiği gibi, yorumlanmış / derlenmiş ayrımın dilin değil, yürütme motorunun bir özelliği olduğunu eklemeliyim.

Yürütme motoru yerine, ilgili olan ve daha çok dil yönüne odaklanan bu Tip sistemi açıklaması da ilginizi çekebilir . Çoğu komut dosyası dili dinamik olarak yazılırken, "normal" diller çoğunlukla statik olarak yazılır.

Genel olarak, durağan ve dinamik olarak yazılmış dillerin ayrımı daha iyi tanımlanır ve dilin kullanılabilirliği üzerinde daha fazla etkiye sahiptir.


Peki ya Objective-C?
mouviciel

1
Dinamik yazmayı destekler, ancak ben buna bir betik dili demezdim.
Timo Westkämper

2
Bu tamamen yanlış. Aslında yanlış bile değil , sadece açık bir şekilde mantıklı değil. Derlenmiş veya yorumlanmış dil diye bir şey yoktur. Bir dil derlenmiş değildir, bir dil sadece olduğunu . Bir sürü soyut matematiksel kural. Yorumlama ve derleme, bir dilin değil , bir yürütme motorunun özellikleridir . Her dil bir derleyici veya bir yorumlayıcı ile uygulanabilir. Aslında, bu sayfada "yorumlanmış" olarak belirtilen tüm diller, neredeyse tamamen derlenmiş uygulamalara sahiptir, örneğin JavaScript, PHP, Python, Ruby.
Jörg W Mittag

@ jorg-w-mittag, Cevabımı daha doğru hale getirmek için düzenlemekten çekinmeyin. Puanlarınız geçerlidir. Normalde, bir dil hakkında konuşursanız, varsayılan yürütme motorundan da söz edersiniz.
Timo Westkämper

3

Bir betik dili tipik olarak :

  1. Dinamik olarak yazılmış
  2. Performansa çok az vurgu yaparak yorumlandı, ancak iyi taşınabilirlik
  3. Çok daha az standart kod gerektirir , bu da çok hızlı prototip oluşturmaya yol açar
  4. Küçük görevler için kullanılır, bazı yararlı "komut dosyalarını" çalıştırmak için tek bir dosya yazmak için uygundur.

Komut dosyası olmayan bir dil genellikle : 1. Statik olarak yazılmış 2. Performans vurgulanarak derlenmiştir 3. Daha yavaş prototip oluşturmaya ancak daha fazla okunabilirliğe ve uzun vadeli sürdürülebilirliğe yol açan daha fazla standart kod gerektirir 4. Büyük projeler için kullanılır, birçok kişiye uyarlanır tasarım desenleri

Ama bugünlerde daha çok tarihsel bir farklılık bence. Javascript ve Perl küçük, basit betikler düşünülerek yazılırken, C ++ karmaşık uygulamalar düşünülerek yazılmıştır; ancak ikisi de her iki şekilde kullanılabilir. Ve hem modern hem de eski birçok programlama dili, yine de çizgiyi bulanıklaştırır (ve ilk başta bulanıktı!).

Üzücü olan şey, "betik dilleri" olarak algıladıklarından nefret eden, onların daha basit ve güçlü olmadığını düşünen birkaç geliştirici tanıyorum. Bence o eski klişe - iş için doğru aracı kullanın.


2
Derlenmiş veya yorumlanmış dil diye bir şey yoktur. Bir dil derlenmiş değildir, bir dil sadece olduğunu . Bir sürü soyut matematiksel kural. Yorumlama ve derleme, bir dilin değil , bir yürütme motorunun özellikleridir . Her dil bir derleyici veya bir yorumlayıcı ile uygulanabilir. Aslında, bu sayfada "yorumlanmış" olarak belirtilen tüm diller, neredeyse tamamen derlenmiş uygulamalara sahiptir, örneğin JavaScript, PHP, Python, Ruby.
Jörg W Mittag

@Jorg: İyi nokta, katılıyorum. Ancak bunun derlenemeyeceğini söylemedim, sadece bu tür dillerin ortak kullanımda derlenmek yerine tipik olarak yorumlandığını söyledim.
Meşe

Öyle mi? Python, PHP, Perl ve Lua'nın tüm güncel uygulamaları derlenmiştir. MRI haricinde, Ruby'nin tüm güncel uygulamaları derlenir. (Ve orada olan aslında bir değil iki MRI için JIT derleyiciler.) JScript hariç olmak üzere, mevcut tüm JavaScript uygulamaları derlenmiştir. JScript'in halefi Chakra'nın derlendiğine dikkat edin. Scheme'nin birçok uygulaması derlenmiştir. ELisp derlendi.
Jörg W Mittag

3

Komut dosyası dilleri, başlangıçta zor bir programlama dilinde yazılmış uygulamalar için bir kontrol mekanizması olarak düşünülüyordu. Derlenen programlar çalışma zamanında değiştirilemez, bu nedenle komut dosyası oluşturma insanlara esneklik sağladı.

En önemlisi, kabuk betiği işletim sistemi çekirdeğindeki işlemleri otomatikleştiriyordu (geleneksel olarak, Mac'lerde AppleScript); Perl'in eline gittikçe daha fazla geçen ve son zamanlarda Python'a geçen bir rol. Işın izleme sahnelerini bildirmek için kullanılan Scheme (özellikle Guile uygulamasında) gördüm; ve son zamanlarda, Lua, oyunların programlama dili olarak çok popüler - pek çok yeni oyunda sabit kodlanmış tek şeyin grafik / fizik motoru olduğu, oysa tüm oyun mantığı Lua'da kodlanmıştır. Aynı şekilde, JavaScript'in bir web tarayıcısının davranışını kodladığı düşünülüyordu.

Diller özgürleşti; Artık hiç kimse işletim sistemini bir uygulama olarak düşünmüyor (veya bunu çok fazla düşünmüyor) ve daha önce birçok komut dosyası dili kendi başlarına tam uygulamalar yazmak için kullanılmaya başlandı. İsmin kendisi anlamsız hale geldi ve başka bir sistem içinden yorumlanacak şekilde tasarlanıp tasarlanmadığına bakılmaksızın, bugün kullanımda olan birçok yorumlanmış dile yayıldı.

Bununla birlikte, "komut dosyası dilleri" kesinlikle "yorumlanmış diller" ile eşanlamlı değildir - örneğin, BASIC yaşamının çoğu için yorumlanmıştır (yani kısaltmasını kaybetmeden ve Visual Basic haline gelmeden önce), ancak kimse bunu gerçekten betik.

GÜNCELLEME: Wikipedia'da her zamanki gibi okuma materyali mevcuttur .


Aslında, orijinal BASIC uygulaması bir derleyiciydi. Ancak daha sonra BASIC klonları yorumlayıcı olarak yazılmıştır, çünkü yorumlayıcıların yazması derleyicilere göre daha kolaydır.
Jörg W Mittag

1
@ Jörg: Pek değil. Dartmouth BASIC'in ilk test uygulamaları derlenirken (Card BASIC olarak adlandırılır) gerçek uygulamalar tercümanlardı. Aslında, BASIC'in muhtemelen en önemli yeni özelliği etkileşimli olmasıydı. Kaynak kodunu bir karta girip derleyiciye beslemenize gerek yok. Kullanıcı teletype'a oturabilir, programı yazabilir ve sonra çalıştırabilir.
PauliL

Bu cevabın 'sert' bir dil fikrini ortaya çıkarması ilginç. Bu bağlamda 'zor' bir tanıma ihtiyaç duyar mı?
DA Vincent

@DavidVincent: Muhtemelen "daha zor" demek istemeliydim. Resmi bir tanım gerekli değildir, sezgisel anlayış yeterli olmalıdır: Birincisinin ikincisinden çok daha düşük seviyeli ve ayrıntılı olduğu göz önüne alındığında, bir programı Assembly veya C'de yazmak Ruby veya Python'dan çok daha zordur.
Amadan

3

İlk olarak, bir programlama dili bir "komut dosyası dili" veya başka bir şey değildir. Bir "komut dosyası dili" veya başka bir şey olabilir.

İkinci nokta, dilin uygulayıcısı size bunun bir betik dili olup olmadığını söyleyecektir.

Sorunuz "Bir programlama dili hangi uygulamalarda bir betik dili olarak kabul edilir?" Olmalıdır, "Bir betik dili ile bir programlama dili arasındaki fark nedir?" Değil. Arasında yok.

Yine de, bir tür orta düzey yazılım sağlamak için kullanılıyorsa, bir dili bir betik dili olarak kabul edeceğim. Örneğin, JavaScript'in çoğu uygulamasının bir betik dili olduğunu düşünürdüm. JavaScript tarayıcıda değil işletim sisteminde çalıştırılsaydı, o zaman bu bir betik dili olmazdı. PHP, Apache'nin içinde çalışıyorsa, bu bir betik dilidir. Komut satırından çalıştırılıyorsa, çalışmaz.


3

Ben bir betik dilini, açık bir ağırlık hissi 'derleme' adımı gerektirmeyen bir şey olarak görüyorum. Bir programcı bakış açısından ana özellik şudur: kodu düzenler ve hemen çalıştırırsınız.

Bu nedenle JavaScript ve PHP'yi komut dosyası dilleri olarak kabul ediyorum, oysa ActionScript 3 / Flex gerçekte değil.


Peter'ın cevabını karalamak istemiyorum ama fikirden fazlasını ekleyebilir miyiz?
DA Vincent

3

Arkadaşım ve ben şu tartışmayı yaptık: Bir programlama dili ile bir betik dili arasındaki fark nedir?

Popüler bir argüman, programlama dillerinin derlendiği ve komut dosyası dillerinin yorumlandığıdır - Ancak bu argümanın tamamen yanlış olduğuna inanıyorum ... neden?

  1. Chakra & V8 (Microsoft ve Google'ın JavaScript motorları) çalıştırmadan önce kodu derler
  2. QBasic yorumlanıyor - bu Qbasic'i bir "betikleme" dili yapıyor mu?

Bu temelde, bir programlama dili ile bir betik dili arasındaki fark için benim argümanım bu:

Bir programlama dili makine seviyesinde çalışır ve makinenin kendisine (bellek, grafikler, ses vb.) Erişimi vardır.

Bir komut dosyası dili kum kutudur ve yalnızca kum havuzuna maruz kalan nesnelere erişebilir. Temeldeki makineye doğrudan erişimi yoktur.


2

My Opinion'da PHP, Ruby, vb. Gibi dinamik olarak yorumlanan dillerin hala "normal" diller olduğunu söyleyebilirim. "Komut dosyası oluşturma" dillerinin örneklerinin bash (veya ksh veya tcsh veya her neyse) veya sqlplus gibi şeyler olduğunu söyleyebilirim. Bu diller genellikle bir sistemdeki mevcut programları bir dizi tutarlı ve ilgili komutta bir araya getirmek için kullanılır, örneğin:

  1. A.txt dosyasını / tmp / work / konumuna kopyalayın
  2. veritabanı sunucusunda gecelik temizleme işlemini çalıştırın
  3. sonuçları günlüğe kaydedin ve sisteme gönderin

Bu yüzden, farkın (her neyse benim için) dili kullanma şeklinizde daha fazla olduğunu söyleyebilirim . PHP, Perl, Ruby gibi diller "komut dosyası dilleri" olarak kullanılabilir, ancak genellikle bunların "normal diller" olarak kullanıldığını görüyorum (her iki yöne giden Perl dışında.


Teşekkürler .. Bu, işleri biraz daha netleştirir. Özetlemek gerekirse, komut dosyası dilleri zaten var olan programları bir sırayla birlikte kullanmak üzere tasarlanmıştır. ANCAK C gibi diller aynı şeyi API'ler aracılığıyla yapmak için kullanılabilir. Yani teknik olarak her şey kullanıma bağlı
Laz,

Hayır, sadece yapay bir ayrım yapıyorsunuz (bu da budur). Onunla bir şeyi hızlı bir şekilde kırbaçlayabilirseniz, bir dil genellikle komut dosyası dili olarak adlandırılır, ancak bu katı bir tanım veya herhangi bir şey değildir. Yaygın olarak yorumlanan dillere genellikle komut dosyası dilleri de denir.
wlangstroth

@Will: Herhangi bir ayrım yapay olacaktır. Bu benim görüşlü ayrımımdı. ;)
FrustratedWithFormsDesigner

evet, ama bu durumda "komut dosyası yazmak" oldukça konuşma dili ve belirsiz bir kullanımdır. Bunun "halihazırda var olan programları bir sırayla birlikte kullanmak" olduğuna karar vermek çok spesifiktir ve tam olarak doğru değildir. Bu bir kabuk betiğine benziyor , belki ama Perl değil. Sonra bunu API'larla karşılaştırmak için (?) ... Sadece adamın yoldan çıkmasını istemedim.
wlangstroth

2

Devam edip cevabımı yinelenen sorudan taşıyacağım


"Komut dosyası dili" adı, çok özel bir rol için geçerlidir: mevcut bir yazılım uygulamasına göndermek için komut yazdığınız dil. (geleneksel bir televizyon veya film "senaryosu" gibi)

Örneğin, bir zamanlar HTML web sayfaları sıkıcıydı. Her zaman durağandı. Sonra bir gün Netscape, "Tarayıcının sayfadaki küçük komutları okumasına ve bunlara göre hareket etmesine izin verirsek ne olur?" Diye düşündü. Ve bunun gibi Javascript oluşturuldu.

Basit bir javascript komutu, alert()bir uyarı görüntülemek için web sayfasını okuyan tarayıcıya (bir yazılım uygulaması) talimat veren / komut veren komuttur.

Şimdi, alert()herhangi bir şekilde C ++ ile veya tarayıcının uyarıyı görüntülemek için kullandığı herhangi bir kod dili ile ilgili mi? Tabii ki değil. Bir .html sayfasında "alert ()" yazan bir kişi, tarayıcının uyarıyı gerçekte nasıl görüntülediğini anlamıyor. Tarayıcının yorumlayacağı bir komut yazıyor.

Basit javascript kodunu görelim

<script>
var x = 4
alert(x)
</script>

Bunlar, tarayıcının kendi içinde yorumlaması için tarayıcıya gönderilen talimatlardır. Tarayıcının bir değişkeni 4'e ayarlamak ve bunu bir uyarıya koymak için kullandığı programlama dili ... JavaScript ile tamamen ilgisizdir.

Bu son komut dizisine bir "komut dosyası" diyoruz (bu nedenle <script>etiketlerin içine alınmıştır ). Geleneksel anlamda sadece "senaryo" tanımına göre: Oyunculara gönderilen bir dizi talimat ve komut . Örneğin, bir senaryonun (bir film senaryosu) bir senaryo olduğunu herkes bilir.

Senaryo (script) 'dir değil aktörler veya kamera veya özel efektler. Senaryo onlara sadece ne yapacaklarını söylüyor.

Şimdi, bir betik dili tam olarak nedir?

Bir araç kutusundaki farklı araçlar gibi birçok programlama dili vardır; bazı diller özellikle komut dosyası olarak kullanılmak üzere tasarlanmıştır .

Javasript bariz bir örnektir; Komut dosyası oluşturma alanına girmeyen çok az Javascript uygulaması vardır.

ActionScript (Flash animasyonlarının dili) ve türevleri, Flash oynatıcıya / yorumlayıcıya komutlar vermeleri bakımından komut dosyası dilleridir. Elbette, Nesne Yönelimli programlama gibi soyutlamalar var, ancak bunların hepsi sonuna kadar bir araç: flash player'a komutlar gönderin.

Python ve Ruby genellikle komut dosyası dilleri olarak da kullanılır. Örneğin, bir zamanlar Ruby kullanan bir şirkette, bazı temel otomatik testler yapmak için "bu siteye gidin, bu bağlantıyı tıklayın ..." satırlarındaki bir tarayıcıya komutlar göndermek için çalıştım. Ben değil o işte hiçbir şekilde bir "Yazılım Geliştirici". Tarayıcıya komutlar göndermek için bilgisayara komutlar gönderen komut dosyaları yazdım.

Doğası gereği, komut dosyası dilleri nadiren 'derlenir' - yani makine koduna çevrilir ve doğrudan bilgisayar tarafından okunur.

Python ve Ruby'den oluşturulan GUI uygulamaları bile C ++ veya C ile yazılmış bir API'ye gönderilen betiklerdir. C uygulamasına ne yapması gerektiğini söyler.

Elbette bir belirsizlik çizgisi var. Neden Makine Dili / C'nin komut dosyası dilleri olduğunu söyleyemiyorsunuz, çünkü bunlar bilgisayarın temel anakart / grafik kartları / yongalarla arayüz oluşturmak için kullandığı komut dosyalarıdır?

Açıklığa kavuşturmak için çizebileceğimiz bazı çizgiler var:

  1. Bir betik dili yazıp onu "derlemeden" çalıştırabildiğiniz zaman, bu daha çok doğrudan betik türü bir şeydir. Örneğin, oyunculara onunla ne yapacaklarını söylemek için bir senaryo ile herhangi bir şey yapmanıza gerek yok. Zaten orada, olduğu gibi kullanılıyor. Bu nedenle, bazı durumlarda komut dosyası oluşturma amacıyla kullanılabilseler de, derlenmiş dilleri komut dosyası dilleri olarak adlandırılmayacağız.

  2. Komut dosyası dili, karmaşık bir yazılım uygulamasına gönderilen komutları ifade eder ; ilk etapta komut dosyaları yazmamızın tek nedeni budur - bu nedenle, ona komut göndermek için yazılımın nasıl çalıştığının karmaşıklığını bilmenize gerek kalmaz. Bu nedenle, komut dosyası dilleri karmaşık yazılım uygulamalarına (nispeten) basit komutlar gönderen diller olma eğilimindedir ... bu durumda, makine dili ve montaj kodu bunu kesmez.


2

Komut dosyası dillerinin birçok insanın uzaklaştığı bir terim olduğunu söyleyebilir miyim? Bugünlerde çoğunlukla derlenmiş dillere ve dinamik dillere bağlı olduğunu söyleyebilirim.

Demek istediğim, Python ya da Ruby gibi bir şeyi gerçekten söyleyemezsiniz, ya da Ruby bu gün ve çağda "komut dosyası yazan" dillerdir (hatta IronPython ve JIT - en sevdiğin dil gibi şeyler var , fark daha da bulanıklaştı).

Dürüst olmak gerekirse, kişisel olarak PHP'nin artık bir betik dili olduğunu düşünmüyorum. İnsanların özgeçmişlerinde PHP'yi örneğin Java'dan farklı bir şekilde sınıflandırmasını beklemem.


PHP'de çok çalışsam bile, betik tabanlı olmaktan sunucudan atanan görevler / real / fcgi servlet modeli gönderme görevine geçene kadar, kişisel olarak ona "oldukça iyi bir betik dili" diyeceğimi söyleyebilirim. bir uygulama yanılsaması verebilir "
Kent Fredric

Statik / Dinamik, derlenen dinamik diller vardır.
Brad Gilbert

Tekrar ediyorum: Demek istediğim Python gibi bir şey söyleyemezsiniz, ya da Ruby bu gün ve çağda diller "komut dosyası yazıyor" (Hatta IronPython ve JitYourFavoriteLanguage gibi şeyler bile var, fark daha da bulanıklaştı).
Robert Gould

1

Komut dosyası dilleri, daha büyük bir uygulamanın parçası olan bir komut dosyası oluşturma motorunda çalışma eğilimindedir. Örneğin, JavaScript, tarayıcınızın komut dosyası oluşturma motorunun içinde çalışır.


Kabul edilen cevabın iki olumsuz oyu olması komik.
Robert S.

1
Bunun için bir çeşit rozet olmalı. "Gerçeği idare edemem" e ne dersin? Hayır, biraz fazla sözlü. ;-)
Joseph Ferris

3
Perl, Python, Ruby, Tcl / Tk - ad olarak, ancak dört komut dosyası dili - esasen daha büyük bir uygulamada yerleşik değildir.
Jonathan Leffler

3
Ergo - bunlar kodlama dilleri değil.
Milen A. Radev

3
Evet, bu bir şekilde doğru olarak işaretlenmemiş olsaydı iyi olurdu.
Noon Silk

1

Bir komut dosyası dili, komut dosyası her çalıştırıldığında yorumlanan bir dildir, bir yorumlayıcıya sahip olduğu anlamına gelir ve çoğu insan tarafından okunabilir, yararlı olması için bir komut dosyası dilinin öğrenilmesi ve kullanılması kolaydır.

Her derlenebilir dil bir betik diline dönüştürülebilir ve bunun tersi de bir yorumlayıcı veya derleyicinin uygulanmasına bağlıdır, örneğin bir C ++ bir yorumlayıcısına sahiptir, bu nedenle eğer kullanılırsa bir betik dili olarak adlandırılabilir (genel olarak C ++ kadar pratik değildir) çok karmaşık bir dil), şu anda en kullanışlı yazı dillerinden biri Python'dur ...

Bu nedenle, sorunuza cevap vermek için, hızlı ve kolay komut dosyası yazılmış programları çalıştırmak için bir yorumlayıcının kullanılması, basit görevleri veya prototip uygulamalarını ele almak için, komut dosyası dillerinden en güçlü kullanım, her kullanım için bir genişletme olasılığını dahil etmektir. derlenmiş uygulama.


1

İnsanların çabayı azalttığını düşündüğüm için "komut dosyası dili" terimini kullanmamalarını tercih ederim. Perl gibi, genellikle "komut dosyası dili" olarak adlandırılan bir dil alın.

  • Perl bir programlama dilidir!
  • Perl, Java ve C ++ gibi derlenmiştir. Sadece çok daha hızlı derlendi!
  • Perl, nesneler ve ad alanları ve kapanışlara sahiptir.
  • Perl'de IDE'ler, hata ayıklayıcılar ve profil oluşturucular vardır.
  • Perl'in eğitimi, desteği ve topluluğu vardır.
  • Perl sadece web değildir. Perl sadece sistem yöneticisi değildir. Perl sadece İnternet'in koli bandı değildir.

Neden derlenmiş Java ile derlenmiş olmayan Ruby arasında bir ayrım yapmamız gerekiyor? Etiketlemenin değeri nedir?

Bununla ilgili daha fazla bilgi için, bkz. Http://xoa.petdance.com/Stop_saying_script .


Hiçbir bilgisayar perl veya ruby'yi (veya derlenebilecekleri herhangi bir formu) yerel olarak çalıştıramaz. Bu nedenle perl ve ruby, bir ayrıştırıcı veya VM tarafından yorumlanan betik dilleridir.
anon6439

@psoul: evet. java da öyle.
Stefano Borini

Ruby'yi makine koduna derlemek için birkaç teknik var, ancak bunlardan herhangi birinin yorumlayıcıyı Ruby kodunu temsil eden dizeyle paketleyip birleştirmediğinden emin değilim, ancak bu doğru olsa bile, makineye kod çevirmeni yapılabilir. diğer şeylerin yanı sıra tüm dinamik gönderim ve gc nedeniyle onu makineye kodlamak onu c hızına yakın bir yere getirmez. Ruby işlemci olduğunu sanmıyorum ama lisp modeline ve java bytecode çalıştıran işlemcilere daha çok uyacak şekilde tasarlanmış makineler.
Roman A. Taycher

1

Önemli bir fark, güçlü yazmadır ( zayıf yazmaya karşı ). Komut dosyası dilleri genellikle zayıf yazılır ve bu da küçük programları daha hızlı yazmayı mümkün kılar. Büyük programlar için bu bir dezavantajdır çünkü derleyicinin / yorumlayıcının belirli hataları özerk olarak bulmasını engeller ve kodu yeniden düzenlemeyi çok zorlaştırır.


1

Komut dosyası dilleri, programların tipik olarak son kullanıcılara okunabilir bir metin biçiminde teslim edildiği ve görünüşte bu programı doğrudan çalıştırabilen bir programın bulunduğu programlama dilleridir . (Program betiği dahili olarak iyi bir şekilde derleyebilir; kullanıcı tarafından görülemediği için burada geçerli değildir.)

Komut dosyası dillerinin, kullanıcıların programlarını sadece yazıp hemen çalıştırabilecekleri etkileşimli bir oturumu destekleyebilmesi nispeten yaygındır. Bunun nedeni, bunun birinci paragraftan itibaren temel gerekliliğin önemsiz bir uzantısı olmasıdır; temel ekstra gereksinim, yazılan bir ifadenin ne zaman tamamlandığını anlamak için bir mekanizmanın eklenmesidir, böylece yürütme motoruna gönderilebilir.


1

Soruyu biraz farklı bir şekilde ele almak için. Bir betik dili bir programlama dilidir, ancak bir programlama dili mutlaka bir betik dili değildir. Bir sistemi kontrol etmek veya komut dosyası oluşturmak için bir komut dosyası dili kullanılır. Bu sistem, betik dilinin bash olacağı bir işletim sistemi olabilir. Sistem, kodlama dili olan PHP'ye sahip bir web sunucusu olabilir. Komut dosyası dilleri belirli bir alanı doldurmak için tasarlanmıştır; alana özgü dillerdir. Etkileşimli sistemler, betik dillerini yorumlayarak betik dillerinin yorumlandığı fikrine yol açtı; ancak bu, komut dosyası dilinin kendisinin değil, sistemin bir sonucudur.


1

Komut dosyası dili, mevcut bir programı yapılandıran veya genişleten bir dildir.
Komut Dosyası Dili, bir Programlama dilidir.


1

"Komut dosyası dilinin" tanımı oldukça belirsizdir. Bunu aşağıdaki hususlara dayandırırım:

  1. Komut dosyası dillerinde genellikle kullanıcı tarafından görülebilen derleme adımları yoktur. Tipik olarak, kullanıcı programları tek bir kolay komutla çalıştırabilir.

  2. Komut dosyası dillerindeki programlar normalde kaynak biçiminde aktarılır.

  3. Komut dosyası dilleri normalde çok sayıda sistemde bulunan çalışma zamanlarına sahiptir ve çalışma zamanları çoğu sisteme kolayca kurulabilir.

  4. Komut dosyası dilleri platformlar arası olma eğilimindedir ve makineye özgü değildir.

  5. Komut dosyası dilleri, diğer programları çağırmayı ve işletim sistemiyle arayüz oluşturmayı kolaylaştırır.

  6. Komut dosyası dilleri genellikle daha geleneksel programlama dillerinde yazılmış daha büyük sistemlere kolayca yerleştirilebilir.

  7. Komut dosyası dilleri normalde programlama kolaylığı için ve yürütme hızı çok daha az dikkate alınarak tasarlanmıştır. (Hızlı yürütme istiyorsanız, olağan tavsiye, zaman alıcı parçaları C gibi bir şeye kodlamak ve dili C'ye yerleştirmek veya dilden C bitlerini çağırmaktır.)

Yukarıda listelediğim özelliklerden bazıları uygulamalar için doğrudur, bu durumda daha yaygın uygulamalara atıfta bulunuyorum. (AFAIK) açık bir derleme adımı olmayan C yorumlayıcıları olmuştur, ancak bu çoğu C uygulaması için geçerli değildir. Kesinlikle bir Perl programını yerel koda derleyebilirsiniz, ancak normalde bu şekilde kullanılmaz. Diğer bazı özellikler doğası gereği sosyaldir. Yukarıdaki kriterlerden bazıları bir şekilde örtüşüyor. Dediğim gibi, tanım belirsiz.


0

Betik dili, kendisinin tanımlamadığı varlıkları büyük ölçüde manipüle eden bir dildir diyebilirim. Örneğin JavaScript, tarayıcı tarafından sağlanan DOM nesnelerini işler, PHP çok büyük C tabanlı işlevler kitaplığı çalıştırır ve bu böyle devam eder. Tabii ki kesin bir tanım değil, daha çok düşünmenin bir yolu.


Mmm, PHP temeldeki C kitaplığını kullanır, ancak Java dahil (en düşük düzeyde) çoğu dil için durum böyledir. Ve bu işlevleri değiştirmez ...
PhiLho

0

O / etmezse olmaz CPU üzerinde çalışan, bu benim için bir senaryo. Bir yorumlayıcının programın altındaki CPU üzerinde çalışması gerekiyorsa, bu bir betik ve bir betik dilidir.

Bunu bundan daha karmaşık hale getirmek için bir neden yok mu?

Elbette çoğu durumda (% 99), bir dilin betik dili olup olmadığı açıktır. Ancak, örneğin bir VM'nin x86 komut kümesini taklit edebileceğini düşünün. Bu, x86 bayt kodunu bir sanal makinede çalıştırıldığında bir betik dili yapmaz mı? Ya birisi perl kodunu yerel bir yürütülebilir dosyaya çevirecek bir derleyici yazarsa? Bu durumda, artık dilin kendisine ne isim vereceğimi bilemiyorum. Önemli olan dil değil çıktı olacaktır.

Yine de, bunun gibi bir şeyin yapıldığının farkında değilim, bu yüzden şimdilik hala yorumlanmış dilleri kodlama dilleri aramakta rahatım.


1
Komut dosyası dilleri için yerel ikili olarak derleyenler dışında hemen hemen tüm dilleri mi arıyorsunuz? Java geliştiricilerinin betik yazarı olarak adlandırılmalarından mutlu olacağına eminim;)
truppo

1
Onlar. Senaryolar, yani.
anon6439

0

Bir senaryo görece olan küçük bir program. Bir sistem , nispeten büyük bir program veya nispeten büyük programların bir koleksiyonudur .

Bazı programlama dilleri, dil tasarımcısının ve programlama topluluğunun nispeten küçük programlar yazarken yararlı olduğunu düşündüğü özelliklerle tasarlanmıştır. Bu programlama dilleri, kodlama dilleri olarak bilinir , örneğin PHP.

Benzer şekilde, diğer programlama dilleri, dil tasarımcısı ve programlama topluluğunun nispeten büyük programlar yazarken yararlı olduğunu düşündüğü özelliklerle tasarlanmıştır. Bu programlama dilleri, Java gibi sistem dilleri olarak bilinir .

Artık küçük ve büyük programlar her dilde yazılabilir. Küçük bir Java programı bir betiktir. Örneğin, bir Java "Merhaba Dünya" programı bir komut dosyasıdır, bir sistem değildir. PHP'de yazılmış büyük bir program veya programlar topluluğu bir sistemdir. Örneğin, PHP ile yazılmış Facebook bir sistemdir, komut dosyası değil.

Tek bir dil özelliğini, dilin komut dosyası oluşturma veya sistem programlaması için en uygun olup olmadığına karar vermek için bir "turnusol testi" olarak düşünmek sorgulanabilir. Örneğin, komut verebilir bayt kodu veya makine koduna derlenmiş, ya da olabilir doğrudan soyut sözdizimi ağacı (AST) yorumu ile yürütülecek.

Dolayısıyla, bir dil, tipik olarak betik yazmak için kullanılıyorsa, bir betik dilidir . Sistemleri yazmak için bir komut dosyası dili kullanılabilir, ancak bu tür uygulamalar muhtemelen şüpheli olarak değerlendirilecektir.

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.