Uygulama olmadan bir programlama dili belirtebilir misiniz?


11

Teorik olarak hiçbir uygulamanın bulunamayacağı bir programlama dili belirtmek mümkün mü? Programlama dili işlevleri tanımlamanın bir yoludur. Bir uygulama, belirli bir girdiyi, o girdideki programa karşılık gelen işlevin çıktısına verilen bir girdide o dilde yürütmek için bir yöntem anlamına gelir.

Böyle bir dilin asgari gereksinimleri nelerdir?


3
Bir dilin "uygulaması" nedir?
Raphael

@Raphael: “Programlama dili” ni “dil” olarak değiştiren sensin. Düzenlemeden önce, bir dil uygulamasının ne anlama geldiği açıktı.
Tsuyoshi Ito

@TsuyoshiIto: Pek değil; Başlığı sadece cstheory'de değiştirilen soruya uyacak şekilde uyarladım. Geri değiştirdim, ama bunun ne anlama geldiğini hala belli değil. Bir derleyici? Bir tercüman? Her neyse, neredeyse bir yaşında olan bir soruyu buraya taşımak ve görünüşe göre soruyu hiç gözden geçirmeyen bir kullanıcı tarafından en iyi şekilde tavsiye edilmedi.
Raphael

@Raphael: “Bir dilin uygulaması nedir?” tüm ipuçlarını kaldırdıktan sonra benim anlayışımın ötesindeydi. Ancak sorunun başından beri belirsiz olduğunu kabul ediyorum.
Tsuyoshi Ito

Bence “programlama dili” hakkındaki varsayılan tanımınız kötü düşünülmüş. En azından "fonksiyonları", "hesaplanabilir fonksiyonlar" ile değiştirerek değiştirilmelidir. Aksi halde, dili neden "Programlama dili" olarak adlandırmayı seçeceğiniz açık değildir. Bir kez değiştirdiğinizde, soru anlamsızlaşır, çünkü böyle bir "hiçbir uygulamanın bulunamayacağı programlama dilleri" yoktur.
Uday Reddy

Yanıtlar:


7

Genellikle, bir programlama dili uygulamak en azından Turing-complete'den daha fazla olmayan bir dilde (veya bir dile derleyici) bir tercüman verir.

Bu "tanım" ı kullanarak aşağıdaki gibi bir programlama dili belirleyebiliriz:

  • sadece bir olası program vardır HALT;

  • özellikleri HALT: durdurma sorununu çözen bir işlevdir .

Bu programlama dilini uygulamak, uygulama ile ilgili durdurma problemini çözmeyi gerektirir. (Uygulamamız bir Turing makinesinden daha güçlü olmamasından dolayı imkansızdır).

Spesifikasyon mantığı idare eder ve böylece çok daha fazlasını isteyebilir. Uygulanması imkansız olacak bir diğer özellik "yanlış" tır. (Veya spesifikasyondaki herhangi bir çelişkili cümle) Ama bu bir spesifikasyon gibi gelmiyor, bu yüzden durma problemi örneğini kullandım.


1
Genelleştirilmiş: Tespit edilemeyen bir sorunu çözen bir işlevi belirten herhangi bir dil uygulanamaz.
edA-qa mort-ora-y

@ edA-qamort-ora-y Teknik olarak uygulanabilir. Durdurma Sorununa karar veremezsiniz , ancak bir TM başka bir makineyi simüle edebilir ve makinenin durup durmadığını kabul edebilir; böyle bir TM tarafından kabul edilen dil tam olarak duran makinelerin dilidir (kodlamaları). Ancak pratik amaçlar için normal olarak programlama dillerinin ilkel işlemlerinin sona erdirilmesini garanti ederiz! (en azından "mantıklı" girdide)
Ben

1
Evet, bir dilin işlevleri az bir zaman karmaşıklığını olmalıdır :)Ö()
Eda-qa mort-ora-y

@ edA-qamort-ora-y bu her zaman doğru değildir. Örneğin, Haskell'in anlamsal anlambiliminde ve dolayısıyla bariz maliyet modelinde . Uygulamada, tüm Haskell uygulamaları istisna ve ıraksama arasında ayrım yapar ve GHC, istisnaların nasıl çalışması gerektiğini açıklayan belirli bir çalışma semantiğine sahiptir. Ancak, sonsuza kadar bölünerek sıfıra dolanan uyumlu bir uygulamaya sahip olmak mümkün olurdu! 1/0 let loop = loop in loopΩ()
Philip JF

3

Meraklı bir yan not: C ++ şablon motoru Turing-complete

Teorem 1: Örnekleme sınırlarının yokluğunda, C ++ şablonları Turing tamamlandı.

Sonuç 1: Örnekleme sınırlarının yokluğunda, belirli bir programı derlerken bir C ++ derleyicisinin durup durmayacağı kararsızdır.

... yani C ++ 'ın kendisi için hiçbir "uygulama" bulunamayan bir programlama dili olarak düşünülebilir ... :-D


Bir C "derleyicisi", üretilen kodun umrunda değil, sadece üretilen teşhisin umrundaysa, tercüman olarak kullanılabilir mi?
supercat

Evet, makalede gösterildiği gibi, derleyici Turing makinesinin hesaplama geçmişiyle (ve son bant yapılandırmasıyla) eşleşen bir hata listesi ile durur. Açıkçası girdi etkileşimli olamaz (derleyiciyi çalıştırmadan önce kaynak kodunda kodlanmış olması gerekir).
Vor

2

Bir "programlama dili" ve "bir dilin uygulanması" ile ne demek istediğiniz belirsizdir. Cevap alabilmek için bu ikisinin titiz tanımlarını vermeniz gerekiyor.

Dizeler üzerinde (kısmi) işlevlerin hesaplanması için bir "programlama" dili ile arasında bir eşleme olarak düşünülebilir . Hesaplanamayan fonksiyonlardan biri aralık dahilinde olduğu sürece dil uygulanamaz.Σ*2Σ*

Örneğin, birinci dereceden aritmetik alınabilir. Daha sonra, hesaplanamayan işlevleri, örneğin TM verilen işlevi tanımlamak kolaydır , tüm girişlerde döndürmediğine karar verin . Bu, aritmetik dilinde birinci dereceden bir formülle kolayca ifade edilebilir. Öte yandan hesaplanabilirlik teorisinde hesaplanabilir bir fonksiyon olmaması kolay bir sonuçtur, bu nedenle fonksiyonun uygulanması mümkün değildir.MM0

Ancak bu, insanların "programlama dili" ifadesini kullandıklarında kastettiği türden bir tanımlama dili değildir. Bir programlama dili tipik olarak hesaplanabilir fonksiyonları (süreçler, ...) ifade etmek ve talimatları bir makineye iletmek için kullanılan bir dildir ve bu nedenle bu programları simüle edebilen ve sonuçlarını çıktılayabilen bir TM vardır. Dolayısıyla, bir anlamda uygulanamayan bir programlama diline sahip olmak anlamlı değildir.

(Benim tahminim muhtemelen kafa karıştırıcı olmasıdır programlama dilleri ile ya belirtim dilleri veya resmi dilleri . Her durumda, biz hesaplanabilir olmayan dilleri tanımlayabilirsiniz.)


Eminim "programlama dili" normalde onun hakkında konuşacağımız gibi bir programlama dili anlamına gelir ve "bir dilin uygulanması", o dilde gerçek bilgisayarlarda program yürütmek için bir ortam anlamına gelir. Soru resmileşmiyor , ama kesin değil mi? Yeni bir programlama dili için kolayca bir spekülasyon yazabilirim; sorusu sadece o dili şekilde bunu yapmayı mümkün olup olmadığını soruyor olamaz uygulanabilir.
Ben

@Ben, cstheory'deki orijinal soruya bakarsanız, soruda sadece başlıkta hiçbir kelime programlama olmadığını göreceksiniz. OP tarafından sorulan soru kesinlikle açıktır. ps: Programlama dilinin ne olduğuna dair titiz (resmi olması gerekmez) bir tanımla ilgilenirim. Programlama dilleri hakkında yalnızca sezgi ve örneklere dayalı olumsuz sonuçlar kanıtlayamayız. Bir tanım için referansınız varsa, lütfen bir düzenleme veya soruya yorum olarak gönderin.
Kaveh

SE, 9 saat önce, taşındıktan ve düzenlendikten uzun süre sonra yanıtladığınızı iddia etmesine rağmen, yeterince adil. Yine de aynı soruyu orijinal soruya dayanarak yapardım. Bir programlama dilinin tanımına gelince, açık bir dilin resmi bir dilbilgisi artı ya iyi anlaşılmış diğer bazı hesaplama modellerine (lambda hesabı, turing makinesi, vb.) Bir azalma ya da titiz bir çalışma semantiği olduğunu söyleyebilirim. İndirgeme modeli bu sorunun cevabını açık bir şekilde "hayır" yapar.
Ben

1

Bir uygulama olmadan birçok dil belirtilmiştir, örneğin Algol 60'ın algoritmaları yazmak için bir dil olması gerekiyordu, uygulanmaması gerekiyordu. Intercal akla gelen çok sayıda "sadece eğlence amaçlı" dillerin bazıları bir uygulama yapılmadan çok önce belirtildi.

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.