Penelitian dan tantangan terbuka dalam Teori Bahasa Pemrograman

32

Dalam semangat beberapa diskusi umum seperti ini , saya membuka utas ini dengan maksud untuk mengumpulkan pendapat tentang apa saja tantangan terbuka dan topik hangat dalam penelitian tentang bahasa pemrograman . Saya berharap bahwa diskusi ini bahkan dapat memunculkan pendapat tentang masa depan penelitian dalam bahasa pemrograman.

Saya percaya bahwa diskusi semacam ini akan membantu peneliti mahasiswa baru, seperti saya, tertarik pada PL, serta mereka yang sudah agak terlibat.

bellpeace
sumber
7
komunitas wiki?
Suresh Venkat
2
Saya pikir itu akan sangat meningkatkan pertanyaan ini dan mereka yang menjawabnya jika Anda mengutip atau merangkum teks dari pertanyaan "Frontiers of TCS". Lingkup jawaban yang diharapkan untuk pertanyaan ini tidak jelas sementara pertanyaan lainnya lebih tepat tentang apa yang diharapkan.
Vijay D
ketika saya menanyakan pertanyaan ini di stackoverflow beberapa waktu lalu ... Saya mendapat downvotes dan pertanyaan saya sudah ditutup!
Rorschach

Jawaban:

23

Saya pikir tujuan keseluruhan dari teori PL adalah untuk menurunkan biaya pemrograman skala besar dengan cara meningkatkan bahasa pemrograman dan ekosistem techincal di mana bahasa digunakan.

Berikut ini adalah deskripsi tingkat tinggi, agak kabur dari area penelitian PL yang telah menerima perhatian berkelanjutan, dan mungkin akan terus melakukannya untuk sementara waktu.

  • Sebagian besar penelitian bahasa pemrograman telah dilakukan dalam konteks perhitungan sekuensial, dan saat ini kami telah berkumpul pada inti fitur yang tersedia di sebagian besar bahasa pemrograman modern (misalnya fungsi tingkat tinggi, inferensi tipe (parsial), pencocokan pola, pencocokan pola , ADT, polimorfisme parametrik) dan dipahami dengan baik. Belum ada konsensus tentang fitur bahasa pemrograman untuk komputasi bersamaan dan paralel.

  • Terkait dengan poin sebelumnya, bidang penelitian sistem pengetikan telah melihat sebagian besar aktivitasnya tentang komputasi sekuensial. Bisakah kita menggeneralisasi pekerjaan ini untuk menemukan disiplin pengetikan yang praktis dan bermanfaat membatasi komputasi paralel dan paralel?

  • Sebagai kasus khusus dari poin sebelumnya, korespondensi Curry-Howard mengaitkan teori bukti struktural dan pemrograman fungsional, yang mengarah pada transfer teknologi berkelanjutan antara ilmu komputer dan (dasar-dasar) matematika, dengan misalnya teori tipe homotopy menjadi contoh yang mengesankan. Ada banyak petunjuk menggiurkan bahwa itu dapat diperluas ke (beberapa bentuk) perhitungan bersamaan dan paralel.

  • Spesifikasi dan verifikasi program telah matang banyak dalam beberapa tahun terakhir, misalnya dengan asisten bukti interaktif seperti Isabelle dan Coq, tetapi teknologi ini masih jauh dari dapat digunakan dalam skala besar dalam pemrograman sehari-hari. Masih banyak pekerjaan yang harus dilakukan untuk memperbaiki keadaan ini.

  • Bahasa pemrograman dan teknologi verifikasi untuk bentuk-bentuk komputasi yang baru. Saya sedang
    berpikir di sini khususnya tentang perhitungan kuantum, dan mekanisme komputasi yang diilhami secara biologis, lihat misalnya di sini .

  • Penyatuan. Ada banyak pendekatan untuk bahasa pemrograman, jenis, verifikasi, dan satu kadang-kadang merasa bahwa ada banyak tumpang tindih di antara mereka, dan bahwa ada beberapa pendekatan yang lebih abstrak menunggu untuk ditemukan. Secara khusus, mekanisme komputasi yang diilhami secara biologis cenderung terus membanjiri kita.

Salah satu masalah penelitian PL adalah bahwa tidak ada masalah terbuka yang jelas seperti pertanyaan P / NP di mana kita dapat langsung mengatakan apakah solusi yang diusulkan berfungsi atau tidak.

Martin Berger
sumber
1
jika saya dapat menambahkan, komputasi kuantum dan bahasa pemrograman kuantum, bahkan jika komputasi kuantum tidak terjadi, namun studi tentang bagaimana beberapa konsep pemrograman mungkin ditransfer dalam model komputasi ini menarik jika tidak ada yang lain, pemrograman dalam bahasa alami, pemrograman fuzzy, dan bahkan perhitungan fisik dan pemrograman fisik (pemrograman langsung pada materi, di luar tingkat molekuler)
Nikos M.
1
@NikosM. Saya setuju, QC adalah masalah besar dan banyak diselidiki. Makalah ini menunjukkan hubungan yang mengejutkan antara dasar-dasar mekanika kuantum dan teori bahasa pemrograman, yang digali hanya dengan abstraksi.
Martin Berger
Bagus, mungkin sebuah pertanyaan dapat membahas hubungan formal (atau tidak formal) semacam ini
Nikos M.
11

Biarkan saya membuat daftar beberapa asumsi yang membatasi penelitian bahasa pemrograman. Ini sulit untuk dilepaskan dari karena mereka merasa seperti mereka adalah bagian penting dari apa bahasa pemrograman tentang, atau karena menjelajahi alternatif akan "bukan pemrograman bahasa desain lagi". Dengan asumsi masing-masing saya daftar efek yang membatasi.

  1. Program adalah konstruksi sintaksis.

    • Pemrogram sungguhan tidak akan pernah menggunakan iPad untuk membuat kode sumber. Dan bahkan jika mereka melakukannya, mereka tidak akan pernah seefisien Emacs, Eclipse, NetBeans, XCode, dll.
    • Penelitian tentang cara-cara alternatif membangun program bukan desain bahasa pemrograman, tetapi desain antarmuka pengguna grafis, atau pendidikan (lih. Scratch).
  2. Program yang ditulis sebagian tidak dapat dijalankan.

    • Paling tidak, kesalahan runtime terjadi ketika eksekusi sampai ke bagian yang hilang.
    • Apa gunanya menjalankan program yang belum selesai?
  3. Program adalah tentang memberikan instruksi kepada komputer.

    • Memprogram desain bahasa tidak ada hubungannya dengan bagaimana menulis dan mengatur hukum. ketertarikan.
    • Bakteri tidak menulis program.
  4. Pemrograman seperti rekayasa dan tidak bisa dilakukan oleh orang biasa.

    • Orang biasa tidak tahu sintaks, konsep, alat, sehingga mereka tidak mungkin menulis program.
    • Sekalipun kita berusaha memungkinkan orang awam untuk menulis program, mereka hanya akan bisa menulis hal-hal sepele.

Saya pikir saya bisa melanjutkan.

Andrej Bauer
sumber
2
James: luar biasa, aku akan memberi tahu bibiku. Martin: inilah tepatnya yang saya bicarakan - pemrograman non-tekstual belum secara meyakinkan dibangun karena komunitas PL tidak menganggapnya serius, karena belum secara meyakinkan dibangun. Tapi nampaknya cukup jelas bagi saya bahwa manusia tidak dibuat untuk mengetik kata-kata di layar. Kami pandai melempar barang dan memetik blueberry.
Andrej Bauer
1
@AndrejBauer Sebagai argumen ilmiah, "Ini cukup jelas bagi saya" tidak bisa diperbaiki. Jika Anda melihat sejarah sistem penulisan, yang bahasa pemrogramannya hanyalah contoh baru-baru ini, lintasan sejarahnya jauh dari penulisan logografis. Mungkin kemampuan kita untuk mengurai string lebih relevan daripada blueberry. Tulisan alfabetis telah berevolusi selama ribuan tahun, jadi tidak mungkin tulisan itu mengandung bug besar dan mudah diperbaiki. Yang mengatakan, saya senang percaya bahwa kita bisa melakukan lebih baik daripada string linier berbasis ASCII. Saya pikir itu akan sementara sebelum kita melakukannya.
Martin Berger
1
Inti dari jawaban saya adalah "berpikir di luar kotak". Untuk memeriksa asumsi tersembunyi dalam penelitian PL dan untuk melihat bagaimana mereka membatasi potensi penelitian PL telah didapat.
Andrej Bauer
4
@AndrejBauer, saya pikir membatasi ruang lingkup ke POPL adalah kesalahan - banyak pekerjaan seperti ini dilakukan di OOPSLA, atau di ICSE, atau bahkan di CHI. POPL tidak tertarik kecuali ada pendekatan formal baru, tetapi POPL bukan keseluruhan komunitas PL.
Sam Tobin-Hochstadt
2
@DominicMulligan: tentu, ini semua ide yang sangat disambut. Dengan komentar saya, saya mencoba mengubah persepsi tentang apa itu pemrograman. Jadi, jika ide-ide teoretis dapat dimanfaatkan dengan baik dalam praktik (yang saya maksudkan bahwa programmer "biasa" akan menggunakannya dalam kehidupan sehari-hari), maka kami telah menang.
Andrej Bauer
0

Ada satu masalah yang saya pikirkan. Saya tidak tahu apakah itu memenuhi syarat sebagai tantangan terbuka.

Pengetahuan matematika terus berkembang seiring waktu. Fondasi teoretis, konsep, notasi, dan bukti telah berkembang selama berabad-abad. Matematikawan telah berhasil agregasi tanpa harus memeriksa konsistensi globalnya secara sistematis dan formal pada setiap titik waktu (meskipun ada upaya untuk melakukannya).

Kita harus mengharapkan bahasa pemrograman dan pustaka program untuk berkumpul dan berkembang dengan cara yang sama dari waktu ke waktu. Alat macam apa yang dapat membantu mengatur agregasi hasil pemrograman dan perpustakaan agar tetap konsisten dan dapat digunakan oleh semua orang, karena komputer dapat menjadi lebih formal dan menuntut konsistensi. Apakah kita harus mengulang perpustakaan untuk setiap bahasa pemrograman baru. Mengapa kita harus memilih bahasa karena memiliki perpustakaan yang tepat untuk aplikasi yang dimaksud daripada kualitas intrinsiknya sebagai media pemrograman?

Pada topik yang berbeda, Anda mungkin menemukan ide dalam pertanyaan berikut: Apakah bahasa pemrograman menjadi lebih seperti bahasa alami? Saya menyadari bahwa gagasan itu mungkin tidak menarik bagi banyak ilmuwan komputer teoretis, tetapi mungkin masih berguna dengan melihat masalah yang berbeda atau dari sudut pandang yang berbeda. Saya jauh dari setuju dengan banyak ide yang diposting, tetapi itulah gunanya diskusi.

babou
sumber
Konsistensi berlebihan.
Andrej Bauer
1
Saya bisa melihat tidak ada banyak kesepakatan tentang saran ini, namun sederhana. Namun, mungkin lebih bermanfaat, setidaknya bagi saya, untuk memiliki beberapa kata penjelasan mengapa. Jika saya tidak jelas, saya tidak pernah bermaksud mengatakan bahwa matematika bisa tidak konsisten, hanya saja matematika tidak (perlu) digabungkan dengan cara yang konsisten (sejarawan akan mengatakan lebih baik). Dari sudut pandang CS, saya mungkin salah mengenai kesulitan agregasi (saya tidak pernah melakukan pekerjaan teknis dalam hal ini), tetapi saya hanya mengaitkan pengalaman pengguna dan sudut pandang yang sering didengar, secara tidak langsung merusak bahasa yang diproduksi oleh TCS.
babou
1
Yah, komentar saya sebagian besar tentang fakta bahwa konsistensi adalah ide semua-atau-tidak sama sekali, sedangkan pada kenyataannya sebagian besar perangkat lunak "sebagian besar konsisten". Namun kami menggunakannya dan merasa bermanfaat. Lalu mengapa para ahli teori terobsesi dengan apa yang tampaknya merupakan konsep yang praktis tidak dapat dicapai dan terlalu idealis? Tampaknya akan lebih baik untuk dapat mengukur konsistensi dalam cara yang kurang sepele.
Andrej Bauer
@AndrejBauer - Terima kasih telah membalas. Saya sedikit terkejut dengan pernyataan Anda, sebagaimana diterapkan pada apa yang saya tulis. Tidak ada yang mendukung beberapa bentuk konsistensi absolut, tetapi hanya keinginan untuk pendekatan yang bisa diterapkan yang akan membuat agregasi menjadi mungkin dan bermakna dalam konteks yang berkembang. Paling konsisten seperti yang Anda katakan, mungkin dilakukan. Menemukan apa yang konsisten harus berarti untuk tujuan itu adalah bagian dari ide, dan saya tidak menyarankan jawaban, sepele atau sebaliknya. Saya tidak pernah menjadi ahli teori yang terobsesi, dan saya tidak melihat dari jawaban Anda di mana kita bisa berselisih.
babou
1
Saya pikir saya hanya mengomel tentang "teori murni", itu saja. Tolong abaikan saya.
Andrej Bauer
0

telah ada inovasi dan ledakan yang luar biasa dalam bahasa pemrograman dari sisi teori dan terapan selama abad terakhir, namun suatu kasus dapat dibuat bahwa ini adalah peristiwa tunggal / satu kali dalam sejarah komputasi, mirip dengan "ledakan evolusi" (lihat juga "mengapa ada begitu banyak bahasa pemrograman?" di cs.se), dan karena itu masa depan tidak akan seperti masa lalu dalam hal ini. namun ada beberapa tren jangka panjang saat ini yang dapat diidentifikasi dalam permainan / pengembangan.

  • Pemrograman / kompleksitas perangkat lunak dan cara mengelola / meminimalkan / mengurangi / mengurangi itu adalah topik yang selalu mempengaruhi desain bahasa dan bahkan mungkin lebih signifikan di zaman sekarang dengan sistem perangkat lunak yang sangat besar / kompleks cukup umum. itu adalah aspek utama dari pemikiran desain OOP namun sekarang kami memiliki sistem OOP yang sangat kompleks! Pemikiran yang terfokus pada hal itu telah menghasilkan karya klasik di bidang seperti Mythical man-month oleh Brooks yang dalam banyak hal masih merupakan perspektif yang sangat valid, bahkan mungkin lebih relevan daripada saat ditulis.

  • paralelisme. ada pergeseran dalam perangkat keras menuju paralelisme yang lebih besar (misalnya multicore, dll) dan peningkatan kecepatan clock tidak lagi cukup untuk meningkatkan kinerja. Pergeseran ini terjadi sekitar pertengahan 2000-an dan memiliki pengaruh besar pada penelitian / desain bahasa. paralelisme selalu menjadi topik, tetapi memiliki keunggulan / urgensi terdepan, dan ada beberapa pemikiran / konsensus yang tersebar luas bahwa paralelisme terlalu rumit dan sulit dalam pemrograman dan mungkin pendekatan teoretis yang berbeda dapat meringankan sebagian dari ini. ref bagus tentang ini: The Landscape of Parallel Computing Research: A View from Berkeley

  • datamining / big data . ini mempengaruhi desain bahasa pemrograman. juga arah baru dalam arsitektur basis data adalah riak / dampak bahasa pemrograman.

  • superkomputer memiliki dampak signifikan pada desain bahasa dan juga tumpang tindih dengan paralelisme dan datamining / big data misalnya dengan bahasa baru seperti MapReduce .

  • pemrograman visual / dataflow . telah ada peningkatan dalam jenis "bahasa" (dalam arti pemrograman visual dalam banyak hal sebenarnya memisahkan pemrograman dari "bahasa"). juga penyerbukan silang yang kuat dengan paralelisme.

  • AI . ini lebih merupakan wildcard jangka panjang dan tidak begitu jelas sekarang bagaimana ini akan berdampak pada bahasa komputer dan pemrograman tetapi mungkin akan sangat substansial. di masa lalu [dalam bentuk yang berbeda] itu mengarah ke seluruh bahasa seperti prolog . indikasi awal tentang bagaimana itu dapat diterapkan dengan hasil yang mencolok adalah Algoritma Genetika / Pemrograman Genetik .

referensi yang mungkin memiliki beberapa ide bermanfaat di sepanjang garis "masa depan bahasa pemrograman", Beyond Java by Tate. Ia merenungkan (walaupun secara kontroversial) bahwa mungkin Jawa (bisa dibilang salah satu bahasa pemrograman paling canggih / komprehensif yang ada) mulai menunjukkan usianya dan ada tanda-tanda awal bahasa baru / pendekatan yang muncul untuk mengisi tempatnya dalam jangka panjang.

vzn
sumber