Programlama dili teorisinin cevaplamaya çalıştığı “soru” nedir?


10

Bir süredir Kombinasyon Mantığı, Lambda Matematik, Fonksiyonel Programlama gibi çeşitli konularla ilgileniyorum ve bunları inceliyorum. Ancak, "hesaplanabilirlik" sorusunu cevaplamaya çalışan "Hesaplama Teorisi" nin aksine, çeşitli kısıtlamalarla hesaplanabilen / hesaplanamayan şeyler için "Programlama Teorisi" nin analogunu bulmakta zorlanıyorum

Wikipedia bunu şöyle açıklıyor:

Programlama dili teorisi (PLT), programlama dillerinin tasarımı, uygulanması, analizi, karakterizasyonu ve sınıflandırılması ve bunların bireysel özellikleri ile ilgilenen bir bilgisayar bilim dalıdır.

Bu, gerçekten spesifik olmayan "her şey" demek gibidir.

Konuların ortak ilerlemesi genellikle şöyledir:

Birleşik Mantık> Lambda Analiz> Martin Lof Tip Teorisi> Yazılan Lambda Matematik> (Burada bir şeyler olur)> Programlama dilleri geliştirildi - CL / ile çok az bağlantısı olanλ

Ben CL / ile ilgili altta yatan "matematik" görebilirsinizλve Church-Rosser teoremi de dahil olmak üzere ortaya çıkan ilginç kanıtlar ve bu temiz. Ancak, tüm bu girişimlerin "nihai hedefini" anlamak için mücadele ediyorum? İsterseniz PLT'nin kutsal kasesi nedir ? Şimdilik sadece entelektüel bir kaşıntı çiziyor gibi görünüyor, ancak köprüyü araştırma / teoriden pratik bir şeye gerçekten geçemiyorum.

Not: Kullanana kadar alıyorum λ- kararsızlık kanıtları için hesap. Ancak "hesaplanabilirlik" e uygulanabilirliğinin ötesinde, bunu anlamıyorum ve bu dar POV'dan PLT'de araştırma ihtiyacını anlamakta bile zorlanıyorum. Mevcut herhangi bir kitap, PLT'nin "büyük resmine" ışık tutabilecek referanslar var mı?


1
"Ortak ilerlemenizde" bütün PLT alanlarını tamamen görmezden geliyorsunuz. Bazı nedenlerden dolayı görüşünüz eğilmiş gibi görünüyorλhesabı ve tip teorisi. POPL 2019 tarafından kabul edilen makalelere bir göz atalım : eşzamanlı randomize programlama, olasılıklı programlama, doğrulanabilir montaj, cebirsel etkiler, sinir ağlarını, PL ve donanım zayıf bellek modellerini, kuantum programlama vb. tip teorisi ", söylemez miydin?
Andrej Bauer

% 100 haklısın. Bu yüzden "dar POV'umu" söyledim. "Diğer konuları" yalnızca burayı okuyarak ve SIGPLAN / POPL Proceedings'i inceleyerek tanıyorum. Bahsettiğiniz konuları içeren PLT hakkında geniş bir fırça genel görünümü veren bir "bütünsel referans / kitap" henüz bulamadım . Tip teorisi biti (?) Yaratma programlama dillerinin sadece "benim" POV'sinden. Büyük bir resme genel bakış için PLT'nin çeşitli alanlarına üst düzey tanıtımlar sağlayabilecek bazı işaretçileriniz var mı? Altta yatan "modelleri" nasıl ve nasıl kullandıklarını merak ediyorum.λ her yerde?
Doktora

2
@PhD İstediğiniz PLT'nin çeşitli alanlarına üst düzey bir tanıtım yoktur, en la vie ! Belki bir gün bu değişecektir. Ama nefesini tutma. Alan hızla gelişiyor ve kendini alt alanlara ayırıyor. Diğer popüler basit modeller arasındaπ- kalkülüs, yapısal işlemsel anlambilim, basit zorunlu hesaplar (WHILE dili gibi) ve diğerleri. Çoğu zaman, bir uygulama için bir oyuncak hesabı icat eder.
Martin Berger

Yanıtlar:


13

PLT'nin genel amacı , en önemli aracı (programlama dilleri) ve ilgili takım ekosistemini optimize ederek endüstriyel yazılım mühendisliğini (genel anlamda) daha ucuz ( genel anlamda) yapmaktır .

Matematiğin dahil olmasının bazı nedenleri:

  • PL'ler son derece önemsizdir ve kanıt olmadan doğru şeyi yaptıkları açık değildir. Matematik, basit programlama dillerinin basitleştirilmiş bir modelini verir . Bu model, gerçek programlama dillerini çok daha basit bir ortamda incelememizi ve halihazırda model düzeyinde olan çoğu sorunu (umarım) ortadan kaldırmamızı sağlar. Gerçek programlama dilleri şu anda matematiksel olarak değiştirilemez. Başka bir deyişle: lambda-calculus meyve sineği, E.Coli, PLT'nin küresel ineği .

  • PLT'nin sahip olması güzel / daha iyi olacak uygun ampirik yöntemlerden yoksundur, bu nedenle matematik bir yedek olarak yapılır.

  • Matematik güzel ve derin.

  • Matematik, doktora öğrencilerinin mezun olmasına yardımcı olmak için önemli olan basit, denenmiş ve test edilmiş bir araştırma metodolojisi verir. Tipik olarak, örn. Bazı varyantları: Lamda hesabına ekleyerek PL özelliğini XYZ araştırın. XYZ için basit tipler ekleyin ve tip sağlamlığını kanıtlayın. XYZ için jenerikler ekleyin ve tip sağlamlığını kanıtlayın. XYZ jenerikleri için bir parametriklik teoremi kanıtlayın. XYZ için bağımlı türler ekleyin ve tür sağlamlığını kanıtlayın. XYZ bağımlı tipler için kısmi bir tür çıkarım geliştirmek. XYZ için kademeli tipler ekleyin ve tip sağlamlığını kanıtlayın. XYZ için sözleşme ekleyin. Bunların her biri bir kağıt. Doktora öğrencinizin veya postdoc'unuzun süresi dolduğunda durabilirsiniz. Yukarıdakilerin her biri ilginçtir ve jenerikler, parametriklik, tip çıkarım vb. Hakkında fikir verecektir. Bu boru hattı harikatüm olası programlama dillerinin zor sularında gezinmenin yolu. İkinci bir öğrenme yöntemi, bir derleyicide dil uygulamaktır, ancak bu bir birey için daha az izlenebilir.

PLT'nin gerekli olup olmadığı ilginç bir sorudur. Çoğu çalışan programcı bunun olmadığını düşünüyor. Yanlışlar: PLT geçmişi olmayan çalışan programcılar (ör. Javascript, PHP) tarafından geliştirilen çoğu dil korkunç bir şekilde başlar ve PL teorisyenlerinin uzun süre nasıl kaçınacaklarını öğrendikleri tüm hataları yapar. Bir amatör tarafından geliştirilen bir PL ana akışa çarparsa, PL teorisyenlerinin bariz kusurları on yıla kadar düzeltmesi gerekir (örneğin statik bir yazım sisteminin iyileştirilmesi, bkz. Dizgi Yazısı). Bu durumu özetleyeyim:

 Every successful programming language ends up being ML! Either because 
 it was designed by a PL theorist as ML from the start, or because a 
 decade of painful evolution removes all the obvious flaws, leaving ML. ;-)

Kenara: Bu durum tamamen PLT'nin hatasıdır çünkü çoğu endüstriyel programlama deneyimine sahip olmadığından, çalışan yazılım mühendislerinin acı noktalarının ne olduğunu gerçekten bilmiyorum. Özellikle, sosyolojik nedenlerden dolayı, PL uzmanlarının çoğu, Agda gibi dillerde saf fonksiyonel programlamanın, incelemeye dayanmayan tüm sorunların çözümü olduğunu düşünmektedir.


1
@MartinBerger: CompCert , gerçek dünyadaki bir programlama dilini "teorik olarak" ele alabilme örneği olarak sayılıyor mu ? Değilse, çubuğu ne kadar yüksek ayarlıyorsunuz, çünkü CompCert oldukça etkileyici.
Andrej Bauer

2
@MartinBerger: Lütfen çoğu PL teorisyeni Agda gibi dillerde saf fonksiyonel programlamanın tüm sorunların çözümü olduğunu düşünüyor "diye düşünmeyi düşünün, çünkü bu sadece sizin sıralamanız ve havalandırmanızdır. Yeni başlayanlar için, şu anda ICFP ve POPL'de mevcut olan konulara baksanız bile, çoğunluğu saf olmayan programlama dilleri ile ilgilidir.
Andrej Bauer

5
@PhD: PLT'de tip teorisinden çok daha fazlası var. Sadece bu tip teorisi fark ettiğiniz ilk şeydir çünkü PLT'nin ana araçlarından biridir.
Andrej Bauer

1
@AndrejBauer CompCert, CakeML vb etkileyici, ancak LLVM, GCC vb. Gibi yaygın olarak kullanılan derleyicilerden uzaktırlar. Ayrıca, derleyiciler, herhangi bir gerçek dünya yazılımından farklı olarak, (tür / tür) bir spesifikasyona sahiptir, ki normal endüstriyel yazılım mühendisliğine giremezsiniz. Xavier'in CompCert üzerindeki erken çalışmalarının büyük bir kısmının spesifikasyonu kesinleştirmekten bahsetmediğinden bahsetmiyorum bile.
Martin Berger

2
@PhD PLT olmayan C / C ++, Java, C # 'dan "" radikal olarak daha üretken "ile ilgili olarak, bu dillere, daha spesifik olarak, zaman içindeki evrimine, aldıkları hemen hemen her şeye bakarsanız, lütfen unutmayın. zaman, örneğin lambdalar, monadlar (LINQ), örüntü eşleştirme, kısmi tip çıkarım PLT'den gelir. C # ekibinin PLT Doktoraları var. Gerçekten de beni bir noktada tutmaya çalıştılar. İş görüşmesi, Anders Heijlsberg'i C #'ın o zaman sevmediği jeneriklere ihtiyacı olduğuna ikna etmeye çalışıyordu ...
Martin Berger
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.