Programlama Dili - Biçimlendirme Dili - Script Dili


38

Şimdiye kadar bu üç arasındaki KEY farklarını bilmiyorum . Biri bana bunu sorduğunda, onlara sadece C # 'nın bir programlama dili olduğunu söylüyorum, HTML ve XML biçimlendirme dilleri ve JavaScript ve VBScript betik dilleri. Fakat onları birbirinden ayıran temel farklılıklar nelerdir?


Dilleri sorgulamayı unutma!
Kyle Delaney,

Yanıtlar:


38

Bu üç dil dili arasında bir ayırma çizgisi bulmaya çalışmama izin verin. Tabii ki, bu sadece benim görüşüm olduğu için çok sayıda istisna ve karşı örnek olacak.

  • Bir işaretleme dili, "bu kullanıcı adlarını bir madde listesi veya tablo olarak gösterme" gibi verilerin sunumunu kontrol etmek için kullanılır .

  • Veri üretmek için programlar arasında arabuluculuk yapmak için bir betik dili kullanılır . Bu, bash gibi kabuk betik dilleri için özellikle doğrudur, ancak bunu düşünürseniz, Python veya Perl de UNIX'te C dilinde bir program yazmadan görevleri yerine getirme ihtiyacından doğmuştur. Dil , sizin için genel görevleri yerine getiren tercümandır . Etkileşim kurduğunuz diğer tipik programlar veritabanı sunucuları veya web sunucularıdır.

    Kullanıcı listesi metaforuna geri dönersek, bir betik dilinde veritabanına "tüm kullanıcı adlarını ver" deyin, ardından web sunucusuna "bu kullanıcı listesini bu istek sahibine gönder" deyin.

  • Verileri dönüştürmek için bir programlama dili kullanılır . Bunu, giriş verilerini çıktıya yeniden yazan CPU komutları oluşturarak yapar; umarım, istenen çıktı. Dönüştürme verilerinin örnekleri, bir dizi ekden bir toplamı hesaplamak veya bir dizi koşuldan bir diferansiyel denklem sistemini çözmek veya bir ağaç benzeri yapıdan olası eşzamanlı sorgu dizisi verilen tutarlı bir şekilde yazmak ve okumaktır. .

    Kullanıcı listesi metaforuna geri dönersek, bir programlama dilinde bir kayıt tablosundan nasıl geçileceğini, her bir kayıttan "ad" alanını çıkarmayı ve hepsini talep eden kişiye geri göndermeyi yazarsınız.

Kodlama dillerinin bir programlama dili alt kümesi olduğunu unutmayın, yani bir dil hem "kodlama" hem de "programlama" olabilir: Python düzenli olarak "programlar arasında arabuluculuk yapmak" ve ayrıca "verileri dönüştürmek" için kullanılır. Java gibi nadiren "programlar arasında arabuluculuk yapmak" için kullanılan başka diller vardır, çünkü bu imkansız değildir, fakat bunu kolaylaştırmak için tasarlanmamışlardır. Bir betik dilinin temel özelliği, tıpkı bir betik gibi bir aktöre kendi rolünü başlatması için ipucu verdiği gibi diğer programları da düzenleyebilmesidir.


7
Script dilleri resmen programlama dillerinin bir alt sınıfıdır. (Ayrıca C ve Java gibi dillerin tamamen yorumlandığını gördüm, bir REPL ile; bariyer her iki yönde de sızıntı yapıyor ...)
Donal Fellows

1
@DonalFellows: haklısın. Bunu aklımda kullanarak cevap verdim, ancak açıkça "biri diğerinin alt kümesidir" ifadesini kullanmadım. Ayrıca, bir kategorinin yorumlandığını, diğerinin ise öyle olmadığını ima etmedim, çünkü bunun zayıf bir ayrım olduğunu biliyordum.
logc

1
@DonalFellows: Birinin diğerinin alt kümesi olduğunu açıkça belirtmek için cevabımı düzenlemiştim.
logc

1
Bu cevabı, işaretleme dillerinin veri yapısını tanımlayan diller olduğunu iddia eden (şimdiye kadar) tek kişi olduğu için destekliyorum.
Idan Arye

3
@ JörgWMittag: Bunu ben ile başladı niçin "sayısız istisna uygulanmayacak" dır, istisnalar olacağını biliyordu :) Aksi takdirde, cevabım ben bir betik dili olduğuna ilişkin imalar anlamına nerede değil derlenmiş? Bu
çöküşü

11

Bir biçimlendirme dili , yapılandırılmış verileri göstermek için kullanılan bir dildir. Örneğin, HTML, düz metin belgesine kıyasla, belgenin bir bölümünün bir başlık veya bazı bölümlerin bir liste olduğunu belirtmeyi sağlar.

Biçimlendirme dilleri programlama dilleri olarak kabul edilmez¹.

Programlama dilleri arasındaki fark her zaman açık değildir. Örneğin, XSLT Turing-tamamlanmış bir dildir², ancak bir biçimlendirme dili olan XML'e dayanır.

Vikipedi'nin kendisi, XSLT'yi bir programlama dili veya bir biçimlendirme dili olarak nitelendirmekten kaçınmak için önemli çaba sarf etmektedir. Yalnızca bir bildirim dili olduğunu ve “işlevsel programlama dillerinde ve veritabanı sorgulama dillerinde bulunan optimizasyon tekniklerini” kullandığını söylüyor.

Bir kodlama dili , derleme yerine yorumlanan bir programlama dilidir, bu da kodlama dillerinin tüm programlama dillerinin bir alt kümesini temsil ettiği anlamına gelir.

Bir programlama dilinin bir betik dili olup olmadığı her zaman açık değildir, bir dilin derlenmiş veya yorumlanmış olup olmadığı her zaman açık değildir. Örneğin, PHP olabilir ara bytecode³ derlenebilir ve yine komut language⁴ olarak kabul edilirken, daha sonra tam zamanında derleyici tarafından makine koduna ranslated.

Ayrıca bakınız: Meta-Kılları Steven Lott ile Bölme .


¹ “XML bir programlama dili değildir”. XML'i 10 noktada görün .

² “XSLT Turing-tamamlanmış bir dildir” Vikipedi'de XSLT'e bakınız

³ “HHVM, Hack ve PHP'yi ara bayt kodunda derler. Bu bayt kodu daha sonra çalışma zamanında dinamik olarak bir tam zamanında (JIT) derleyici tarafından x64 makine koduna çevrilir . ”Bkz. HHVM .

Betik dilleri Vikipedi'de tipine göre programlama dilleri arasında Listesi'nde.


16
Diller hiçbir zaman derlenmez veya yorumlanmaz. Diller sadece vardır . Derleme ve yorumlama, dili uygulamak için kullanılan derleyici veya tercümanın özellikleridir. "Derlenmiş dil" veya "yorumlanmış dil" terimleri bile anlam ifade etmiyor, farklı soyutlama seviyelerine aitler. Englisch yazılı bir dil olsaydı, "derlenmiş dil" olurdu TypeError! Her dil bir tercüman tarafından, her dil bir derleyici tarafından uygulanabilir.
Jörg W Mittag

@ JörgWMittag "Her dil bir tercüman tarafından, her dil bir derleyici tarafından uygulanabilir" -% 100 doğru mu?
spartacus

@ spartacus Buna tereddütlü bir "hayır" diyorum. Derlenebilecek herhangi bir dilin de yorumlanabileceğini düşünüyorum (sadece onu kaydetmek yerine talimatı yerine getirin), ama eşcinselliğin derleme olasılığını ciddi şekilde kısıtladığını duydum
Izkata 16

@Izkata Homoikonikliğin kendisinin derleme olasılığını değiştirdiğini söyleyemem, bunun yerine izin verdiği metaprogramlamanın çok fazla derlemenin çalışma zamanına ertelenmesi gerektiği anlamına gelir.
Mark Hurd

1
"Scripting language" kısmı "Jörg W Mittag" in de işaret ettiği gibi tamamen yanlış. Üstelik "Programlama dili" nin bir açıklaması yok.
David Raab

2

Her türlü taksonomiyi üretmek için önce kendinize bazı sorular sormanız gerekir:

  • Düzgün bir şekilde tanımlanan ilişkilere gireceğim nesneler mi?
  • Eğer öyleyse, gerçekten varlar mı?
  • Kendimi nesneler arasında yalnızca belirli bir ilişki türüyle sınırlandırıyor muyum, yoksa sistemin yalnızca meşru ilişkileri kullanması için belirli bir şart var mı?

Genelde, sorduğunuz gibi bir soru duyulduğunda, beklenen cevap birkaç varsayımda bulunur. Örneğin, bunların hepsinin dil olduğu için, daha genel bir dil kavramı altında bir hiyerarşi oluşturmaları gerektiğini veya tüm dillerin alanını ayırdıklarını veya birbirlerinin altkümeleri olduğunu varsaymak doğaldır.

Programlama dilleri

Ne yazık ki, yukarıdakilerin hiçbiri doğru görünmüyor. Belki de sadece programlama dilleri üzerinde en çok üzerinde anlaşılan bir tanım vardır. Programlama dilleri, programları kodlayan dillerdir. Kodlama, dilde bir kelimenin program (yorum dizisi) olarak yorumlanabileceği anlamına gelir. Bilgisayar programlama dilleri bunların bir alt kümesidir. Bilgisayar dışı programlama dillerinin örnekleri: bir süpermarketteki bir alıcının yönlendiricisi olarak yorumlanan bir bakkal listesi, peptitlerin transkripsiyonuyla yorumlanan DNA, bir teyp için bir program olarak kullanılan bir analog müzik kaydı.

Böylece bilgisayar programlama dilleri bilgisayarları programlayan dillerdir.

Script dilleri

İyi tanımlanmış değil. Bu terimin ne anlama geldiğinin yorumuna açıktır. Tarihsel olarak, makine kodu üretmek için bir derleyiciye sahip olmayan programlama dillerinin bu şekilde adlandırıldığı anlaşılıyor. Bugünün standartlarına göre bu, her popüler programlama dili sans Assemblers'ı bu kategoriye koyar. C gibi düşük seviyeli diller bile önceden var olan prosedürlere sahip bir çalışma zamanı gerektirir, bu nedenle bir C programı derleyerek elde edilen ikili dosyalar tamamen makine kodu değildir, aynı zamanda şimdi ve sonra çalışma zamanını da çağırır.

İşaretleme dilleri

İyi tanımlanmış değil. Terim ne zaman kullanılsa, amaç, öncelikle görsel veya işitsel görüntü üretmek için kullanılan çok sınırlı bir sözlüğe sahip olan bir programlama dilini tanımlamak gibi görünmektedir. XML'i bir şey programlama olarak görmek zor olabilir, ancak Man veya TexInfo işaretlemesine bakarsanız, "özel" karakterlerin aslında tercümanın talimatları olduğunu görürsünüz.

XML dili için şöyle bir "programlama" yorumu yapmak da mümkündür.

< := put interpreter in the reading node mode
! := if reading node, start CData/Comment mode
     else if not in read text mode, signal error
-- := if in start CData/Comment mode, start comment
      else if in comment, put in end comment mode
      else if in end comment mode, signal error
...

Alt satır: bugün itibariyle bu bölünme, çok anlamlı görünmüyor, yalnızca ne tür bir dille karşı karşıya olduğunuza dair bazı sezgiler sunabilir, ancak size titiz bir tanım vermeyecektir.


1

Her üç kavram da birbiriyle örtüşüyor, böylece XSLT'nin bir programlama dili olup olmadığı ya da Python'un bir betik dili olup olmadığı konusunda sonsuz argümanlar alabilirsiniz.

Bir biçimlendirme dili , yapılandırılmış verileri metin biçiminde temsil eden bir dildir , HTML en çok bilinen yöntemdir, ancak grafikler için SVG, web hizmeti arabirimlerini tanımlamak için WSDL, resouce dosyaları için resx gibi çeşitli amaçlar için sayısız biçim vardır. net ve benzeri. Temel bir kural, biçimlendirme dilinin bir işlem veya algoritmayı tanımlamaması (programlama dili gibi) ve saf veri olmasıdır. Ama oradaki temel CS içgörü de olduğuKod ve veri arasında temel bir fark yoktur. XSLT gibi bazı biçimlendirme dilleri "gerçek" bir programlama dili gibi döngülere ve koşullara sahiptir ve Prolog gibi bazı programlama dilleri, kodda hiçbir işlem belirtilmeyen neredeyse saf verilerdir. Lisp çizgiyi o kadar bulanıklaştırır ki kodunu yapılandırılmış bir veri formatı olarak ele alır.

Programlama dili ile kodlama dili arasındaki ayrım gelince , bu bugün neredeyse eski olan tarihi bir ayrımdır. Daha eski günlerde, C dilinde yazılmış bağımsız programları derledik ve sonra diğer programları ve araçları işlemek için yorumlanıp tasarlanan, kabuk komut dosyaları veya Word Basic gibi komut dilleri kullandık. Bugün, birçok derleme alanı oldukça bulanık, çünkü çeşitli derleme ve yorumlama seviyelerine (bayt kodu derlemesi, JIT derlemesi vb.) Ve dilden bağımsız API'lere sahibiz. Öyleyse ayrım o kadar da kullanışlı değil.


0

Mantıktan çok verileri tanımlamak için bir işaretleme dili kullanılır. Bunların tipik bir kullanımı, belge oluşturmayı tanımlamaktır, örneğin HTML bunun için tasarlanmıştır. Ancak bazen genel veri formatları olarak da kullanılırlar, XML genellikle sadece verileri tanımlamak için kullanılan bir işaretleme dilidir.

Programlama ve komut dosyası dilleri arasındaki fark çok bulanık, her ikisi de onlarla hesaplanabilir herhangi bir sorunu çözebileceğiniz için tamamlanma eğilimindedir. Bir dilin bir programlama dili olup olmadığını görmek için arayabileceğiniz bazı genel ipuçları vardır.

  • Kod Yazma Dilleri genellikle derlenmek yerine yorumlanır veya en azından yorumlanma seçeneğini sunar.
  • Komut Dosyası Dilleri, genellikle hızlı koşmak yerine çalışmak için hızlı olacak şekilde oluşturulur.
  • Betik Dilleri çok geniş standart kütüphanelerle birlikte gelir. Birçok programlama dili de aynı şekilde çalışır, ancak bu onlar için daha isteğe bağlıdır.

Fakat sonunda, eğer bir dil bir betik yazıyorsa veya programlama dili herhangi bir kesin ölçüt yerine, bir konvansiyon meselesidir. Yukarıdaki ipuçları bile sadece trendler olsa bile, bir betik dili için tüm kriterleri yerine getiren programlama dillerini bulacaksınız, ancak yine de programlama dilleri olarak kabul edilir.


4
Diller hiçbir zaman derlenmez veya yorumlanmaz. Diller sadece vardır . Derleme ve yorumlama, dili uygulamak için kullanılan derleyici veya tercümanın özellikleridir. "Derlenmiş dil" veya "yorumlanmış dil" terimleri bile anlam ifade etmiyor, farklı soyutlama seviyelerine aitler. Englisch yazılı bir dil olsaydı, "derlenmiş dil" olurdu TypeError! Her dil bir tercüman tarafından, her dil bir derleyici tarafından uygulanabilir. Bir tercümandan otomatik olarak bir derleyici oluşturmak bile mümkündür, bunun tersi de geçerlidir.
Jörg W Mittag

@ JörgWMittag, hiçbir dilin doğası gereği derlenemediği veya yorumlanmadığı doğrudur. Fakat genellikle bunun nasıl yürütüldüğüne dair sık ​​sık sözleşmeler var, bu esas olarak burada neyi kastediyorum.
Pierre Andersson
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.