Apakah bahasa pemrograman menjadi lebih seperti bahasa alami?

27

Bisakah kita mempelajari bahasa pemrograman dalam konteks linguistik? Apakah bahasa pemrograman berkembang secara alami dengan cara yang mirip dengan bahasa alami?

Meskipun rasionalitas penuh, dan konsistensi matematis sangat penting untuk bahasa pemrograman, masih ada kebutuhan (terutama bahasa modern) untuk membuatnya mudah dibaca dan nyaman bagi manusia.

Apakah bahasa pemrograman berkembang menjadi lebih linguistik dan dengan demikian lebih alami? Misalnya kode mesin, kartu punch dan bahasa rakitan telah memberi jalan ke bahasa yang lebih mudah dibaca seperti Ruby dan Python dll

Ketika saya mengatakan bahasa komputer menjadi lebih alami, saya tidak berarti mereka mengandung lebih banyak 'kata-kata yang kita miliki dalam bahasa Inggris', maksud saya mereka tampaknya menjadi lebih seperti bahasa alami, dalam hal kompleksitas grammer dan kemampuan mereka untuk mengekspresikan makna (misalnya, dapat dengan jelas menggambarkan permintaan dari basis data dengan cara yang rasional dan dapat dipahami manusia).

Apa yang kalian pikirkan? Apakah bahasa pemrograman menjadi lebih seperti bahasa alami, dan dengan demikian menjadi berlaku untuk hukum Linguistik?

Atau mungkin bahasa hidup dalam spektrum, di mana di satu sisi Anda memiliki bahasa rasional yang ekstrim dan yang lain lebih kreatif. Mungkin, pemrograman dan bahasa alami adalah identik dan keduanya hanya terletak pada spektrum bahasa ini (satu-satunya perbedaan mereka, mungkin menjadi 'hal' yang mereka coba berikan artinya).

Apakah ada hubungan antara pemisahan (bahasa Babel Tower) bahasa manusia dan bahasa komputer? Apakah mereka menjadi lebih beragam karena alasan yang sama (yaitu untuk memecahkan masalah yang berbeda dalam sistem komputer / sistem budaya dll.)?

Jamie Fearon
sumber
3
jawaban singkat: ya, ya mereka.
17
Jawaban singkat: tidak, tidak.
Pertanyaan ini sedang dibahas di Meta .
Robert Harvey
3
Bahasa komputer cenderung bekerja dengan baik dengan kelembutan dan presisi, agak seperti notasi matematika, yang tidak menunjukkan kecenderungan khusus untuk berevolusi menuju bahasa alami (yang saya sadari) selama beberapa ribu tahun terakhir. Saya juga ragu bahwa jika Anda berkomunikasi dengan bayi Anda secara eksklusif di Haskell selama beberapa tahun pertama hidupnya, ia akan mengembangkan kefasihan bahasa alami. Jadi, saya pikir ada perbedaan yang cukup tajam antara bahasa alami dan komputer. Mungkin penyebaran teknik konstruksi bahasa yang lebih luas telah sedikit meningkatkan "kealamian", saya kira.
@ryanOptini: Apakah C #, JavaScript, Python, atau SQL terlihat seperti bahasa alami? Meskipun mereka semua menggunakan kata kunci dari bahasa Inggris, tidak ada yang konvergen ke format bahasa alami. COBOL mungkin yang paling dekat, tapi saya tidak berpikir bahwa banyak orang menggunakan COBOL untuk proyek greenfield mereka.
Jim G.

Jawaban:

32

Tidak juga, tidak. Bahasa pemrograman menjadi lebih seperti bahasa alami hanya dalam arti “kata-kata yang kita miliki dalam bahasa Inggris” ( sic ).

Fitur utama dari bahasa pemrograman adalah mereka tidak ambigu. Ketika Anda menulis sebuah program dan menjalankannya, ia memiliki makna yang jelas, yaitu perilakunya. Jika Anda ingin menulis sebuah program yang berfungsi sebagaimana dimaksud (tujuan yang sulit), adalah penting bahwa perilaku¹ program tersebut dapat diprediksi sedapat mungkin. Bahasa pemrograman tidak membuat banyak perbedaan dalam kesenjangan yang luas terhadap bahasa alami.

Sebaliknya, ada pekerjaan dalam menjembatani kesenjangan dari sisi lain: menganalisis bahasa alami dengan alat yang sama seperti bahasa pemrograman. Bidang ini disebut pemrosesan bahasa alami . Pendekatan ini telah cukup banyak dibuang demi pembelajaran mesin . Saya akan mengutip bagian dalam artikel Wikipedia yang secara langsung relevan di sini:

Hingga 1980-an, sebagian besar sistem NLP didasarkan pada serangkaian aturan tulisan tangan yang kompleks. Mulai akhir 1980-an, bagaimanapun, ada revolusi di NLP dengan pengenalan algoritma pembelajaran mesin untuk pemrosesan bahasa. Hal ini disebabkan oleh peningkatan kekuatan komputasi yang dihasilkan oleh Hukum Moore dan berkurangnya dominasi teori linguistik Chomsky secara bertahap (misalnya tata bahasa transformasional), yang landasan teoretisnya mengecilkan jenis linguistik corpus yang mendasari pendekatan pembelajaran mesin ke pemrosesan bahasa.

Salah satu cara berkembangnya pemrograman adalah ketika kita merancang sistem yang lebih besar dan lebih besar, kode sumber tidak selalu merupakan cara yang baik untuk memahaminya. Sebagai contoh, CPU Intel adalah salah satu objek paling kompleks yang pernah dirancang oleh Man, dan "kode sumber" -nya bukan hanya kumpulan file teks, jauh dari itu. Tetapi desain lengkapnya tidak berevolusi menjadi sesuatu yang menyerupai bahasa manusia. Saya tidak tahu apa alat kognitif yang tepat atau metafora di sini, dan saya pikir belum ada yang tahu; tanya lagi dalam beberapa abad.

¹ Atau lebih tepatnya serangkaian perilaku yang mungkin dijelaskan dengan keadaan di mana mereka muncul, tapi itu hanya menambahkan satu langkah tipuan dalam pemodelan, jadi ini tidak benar-benar relevan di sini.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Perlu dicatat bahwa upaya untuk membuat bahasa "alami" yang lebih seperti bahasa pemrograman telah, well, tidak terlalu sukses. Lihat Lojban sebagai contoh paling maju.
Dougal
perbandingan antara arsitektur CPU dan pemrograman agak tidak jujur, desain perangkat keras selalu sebagian besar tidak berbasis teks, karena memiliki masalah yang sama sekali berbeda untuk dipecahkan misalnya penempatan 2d dan masalah routing. (jika ada desain perangkat keras bergerak menuju desain berbasis teks dengan HDL)
jk.
2

Bahasa komputer cenderung bekerja dengan baik dengan kelembutan dan presisi, agak seperti notasi matematika, yang tidak menunjukkan kecenderungan khusus untuk berevolusi menuju bahasa alami (yang saya sadari) selama beberapa ribu tahun terakhir.

Saya juga ragu bahwa jika Anda berkomunikasi dengan bayi Anda secara eksklusif di Haskell selama beberapa tahun pertama hidupnya, ia akan mengembangkan kefasihan bahasa alami. Jadi, saya pikir ada perbedaan yang cukup tajam antara bahasa alami dan komputer.

Mungkin penyebaran yang lebih luas dari teknik konstruksi bahasa telah meningkatkan "kealamian" sedikit dari waktu ke waktu, saya kira, karena pemrogram "memilih dengan kaki sana" dengan menggunakan bahasa yang tampaknya lebih mudah bagi mereka dan jumlah orang yang mampu menciptakan bahasa telah meningkat dengan lebih banyak praktisi dan alat yang lebih baik, tetapi ini adalah efek kecil di sekitar dan tidak mewakili transformasi mendasar bahasa pemrograman menjadi bahasa manusia.

psr
sumber
2

studi kasus yang menarik di bidang ini adalah Perl vs Ruby (dan Python ). Perl adalah bahasa scripting yang dikembangkan pada awal 90-an yang menambahkan banyak kemampuan dibandingkan dengan bahasa scripting berbasis Unix sebelumnya (misalnya bash). penulis Larry Wall tercatat mengatakan latar belakangnya dalam linguistik menginspirasi beberapa fitur bahasa.

Namun Perl memiliki sintaks yang canggung dan banyak kasus khusus yang membuat bahasa tersebut agak seperti bahasa Inggris dalam semua keanehan halus yang menginspirasi berbagai tingkat kritik . kemudian bahasa scripting seperti Ruby dan Python, yang dikembangkan oleh para ilmuwan komputer, memiliki konsistensi lebih dalam sintaksis mereka. masalah utama adalah bahwa bahasa alami memiliki sejumlah besar ambiguitas (ini dipelajari dalam bidang linguistik.) sehingga bahasa alami akan memiliki tempat utama pada antarmuka manusia-komputer di masa depan seperti Siri tetapi antarmuka tersebut secara inheren akan mengalami masalah ambiguitas.

jadi, inilah kasus di mana evolusi bahasa komputer menjauh dari ide bahasa alami. selain itu, sejarah umum bahasa pemrograman komputer adalah bahwa mereka telah dikembangkan dan diubah untuk menghilangkan ambiguitas (yang sangat melekat pada bahasa alami). ini tidak dipahami pada awal sejarah kompiler (katakanlah mungkin pada tahun 1970-an) dan misalnya versi awal bahasa Fortran memiliki pernyataan dengan makna ambigu yang bergantung pada implementasi kompiler. beberapa teori bahasa CS terkait parsing dikembangkan sebagian sebagai tanggapan terhadap penemuan ambiguitas dalam parsing bahasa.

ay
sumber
Anda memiliki tanggal yang salah: Perl dirilis pada tahun 1987, Bash pada tahun 1989. Juga bermasalah untuk membaca posting Anda karena kesalahan kapitalisasi.
tchrist
1

Bahasa mesin sangat tepat, sedangkan teks yang ditulis manusia biasanya dapat diinterpretasikan dengan berbagai cara (misalnya beberapa teks puitis).

Apa yang lebih dan lebih berkembang adalah pencocokan pola, misalnya ketika Anda menulis beberapa kode jelek, kompiler dapat membantu Anda mengusulkan beberapa solusi yang mungkin dan kemudian melemparkan beberapa peringatan atau kesalahan yang dapat membantu Anda menjelaskan diri sendiri. (berdasarkan pola kode umum misalnya)

Ada penelitian khusus tentang pola interaksi / desain, bahkan T9 dan SWYPE adalah pengenal pola yang banyak membantu Anda (program yang merekam suara Anda dan mengubahnya menjadi teks juga pengenal pola).

Tentu saja sebuah program adalah sesuatu yang bergantung pada mekanisme yang tepat sehingga Anda membutuhkan bahasa yang tepat (bukan alami), sementara pencarian web sederhana di google sangat alami, Anda hanya perlu mengetik beberapa kata dan Anda mendapatkan apa yang Anda inginkan.

Setiap tugas dan tujuan yang berbeda memiliki bahasa sendiri, itu bukan "evolusi bahasa tunggal" yang sederhana, ada lebih banyak bahasa. Tugas yang tepat membutuhkan bahasa yang tepat dan tugas yang santai membutuhkan bahasa yang santai

Anda dapat menulis potongan kode C yang sama dan kemudian mengompilasinya dengan beberapa kompiler yang berbeda, dan (kecuali jika beberapa kompiler disadap) hasil dari kode tersebut akan sama bahkan jika perakitan yang berbeda dihasilkan, sedangkan untuk pencarian web memberikan yang sama kata kunci ke mesin pencari yang berbeda memberikan hasil yang berbeda.

GameDeveloper
sumber
1

Beberapa tahun yang lalu putra sulung saya dan saya mengembangkan pemrograman dan pengembangan sistem Bahasa Inggris Sederhana untuk menjawab pertanyaan-pertanyaan berikut:

  1. Dapatkah program tingkat rendah (seperti kompiler) ditulis dengan nyaman dan efisien dalam bahasa tingkat tinggi (seperti bahasa Inggris)?

  2. Dapatkah bahasa alami diuraikan secara relatif "ceroboh" dan masih menyediakan lingkungan yang cukup stabil untuk pemrograman yang produktif?

  3. Apakah lebih mudah diprogram ketika Anda tidak harus menerjemahkan pikiran bahasa alami Anda ke dalam sintaksis alternatif?

Kita sekarang dapat menjawab masing-masing dari tiga pertanyaan ini, dari pengalaman langsung, dengan "Ya" yang tegas.

Parser kami beroperasi, kami pikir, seperti otak manusia. Mempertimbangkan. Seorang ayah berkata kepada putra bayinya:

"Ingin mengisap botol ini, anak kecil?"

Dan anak itu mendengar,

"bla, bla, SUCK, bla, bla, BOTOL, bla, bla."

Tapi dia merespons dengan baik karena dia punya "gambar" botol di sisi kanan kepalanya yang terhubung ke kata "botol" di sisi kiri, dan "keterampilan" yang sudah ada di dekat bagian belakang lehernya terhubung ke istilah "payah". Dengan kata lain, anak itu mencocokkan apa yang dia bisa dengan gambar (tipe) dan keterampilan (rutinitas) yang dia kumpulkan, dan mengabaikan sisanya. Kompiler kami melakukan hal yang sama, dengan gambar-gambar baru (tipe) dan keterampilan (rutinitas) didefinisikan - bukan oleh kami, tetapi - oleh programmer, ketika ia menulis kode aplikasi baru.

Definisi tipe tipikal terlihat seperti ini:

Poligon adalah benda dengan beberapa simpul.

Secara internal, nama "poligon" sekarang dikaitkan dengan jenis struktur yang dialokasikan secara dinamis yang berisi daftar simpul yang terhubung ganda. "Vertex" didefinisikan di tempat lain (sebelum atau setelah definisi ini) dengan cara yang serupa; bentuk jamak secara otomatis dipahami.

Rutin yang biasa terlihat seperti ini:

Untuk menambahkan x coord dan ay coord ke poligon: Buat simpul yang diberi x dan y. Tambahkan simpul ke simpul poligon.

Perhatikan bahwa nama formal (kata benda yang tepat) tidak diperlukan untuk parameter dan variabel. Kami percaya ini adalah wawasan utama. Kursi dan meja dunia nyata saya tidak pernah (dalam percakapan normal) disebut "c" atau "myTable" - saya menyebutnya sebagai "kursi" dan "meja". Demikian juga di sini: "titik" dan "poligon" adalah nama alami untuk hal-hal seperti itu.

Perhatikan juga bahwa spasi diperbolehkan dalam "nama" rutin dan variabel (seperti "x coord"). Ini abad ke-21, ya? Dan "julukan" itu juga diizinkan (seperti "x" untuk "x coord"). Dan yang posesif ("simpul poligon") digunakan dengan cara yang sangat alami untuk referensi "bidang" dalam "catatan".

Perhatikan, juga, bahwa kata "diberikan" bisa saja "menggunakan" atau "dengan" atau setara lainnya karena penguraian ceroboh kami berfokus pada gambar (jenis) dan keterampilan (rutinitas) yang diperlukan untuk memahami, dan mengabaikan, sebanyak mungkin, sisanya.

Pada level terendah, semuanya terlihat seperti ini:

Untuk menambahkan nomor ke nomor lain: Intel $ 8B85080000008B008B9D0C0000000103.

Perhatikan bahwa dalam hal ini kami memiliki bahasa tertinggi dan terendah - Bahasa Inggris dan kode mesin (meskipun dalam heksadesimal) - dalam satu rutinitas. Wawasan di sini adalah bahwa (seperti buku matematika biasa) suatu program harus ditulis terutama dalam bahasa alami, dengan potongan yang tepat dalam sintaksis yang lebih nyaman sesuai kebutuhan (dan hanya sesuai kebutuhan).

Anda bisa mendapatkan sistem pengembangan kami di sini: www.osmosian.com/cal-3040.zip. Ini adalah program Windows kecil, berukuran kurang dari satu megabyte. Jika Anda mulai dengan PDF di direktori "dokumentasi", sebelum Anda pergi sepuluh halaman Anda akan mengkompilasi ulang seluruh shebang itu sendiri (dalam waktu kurang dari tiga detik pada mesin bottom-of-the-line dari Walmart).

Pertanyaan dan komentar harus ditujukan ke [email protected]

Gerry Rzeppa
sumber
Apakah Anda mengetahui upaya.di.uzh.ch/site/description dikendalikan bahasa Inggris? Anda tampaknya duduk di antara itu dan Inform7 en.wikipedia.org/wiki/Inform#Example_game_2
Pete Kirkham
Saya suka ide itu, tetapi sepertinya masih ada beberapa sintaks yang harus dilewati. Sebagai contoh, saya tidak berpikir saya atau siapa pun yang memodelkan hal-hal geometris akan mempertimbangkan koordinat X dan Y yang ditambahkan secara terpisah, jadi "Untuk menambahkan x coord dan ay coord ..." terdengar sangat aneh bagi saya. Seperti halnya "Buat simpul diberi x dan y". Hampir dapat dimaafkan karena sebenarnya sebagian besar dibaca seperti bahasa Inggris, tetapi masih terlalu ketat. Mungkin saya terlalu terbiasa untuk tidak berpikir seperti manusia atau sesuatu, saya tidak tahu.
cHao
1

Pemisahan bahasa manusia berasal dari (darwinian?) Evolusi dalam komunitas terisolasi. Pemisahan bahasa pemrograman berasal dari variasi dalam kebutuhan teknis, ideologi teknis, dari perubahan dalam pemahaman teknis dan teoritis, dari perubahan dalam kemampuan teknis kami untuk mengimplementasikan. Ini adalah proses yang agak lebih sadar, saya pikir.

Mungkinkah bahasa komputer lebih seperti bahasa alami? Mungkin agak, sampai batas tertentu. Saya kira sebagian besar dari kompleksitas bahasa alami dihasilkan dari berbagai fenomena evolusi bersamaan yang tidak memiliki alasan untuk menghasilkan hasil yang konsisten pada satu titik waktu, walaupun ada kemungkinan bahwa inkonsistensi lama mungkin semakin dihilangkan secara progresif sementara yang baru muncul . Saya bukan ahli linguistik diakronis. Tetapi apakah kita menginginkan kompleksitas semacam itu dalam bahasa pemrograman.

Masalah ambiguitas adalah masalah yang penting, tetapi tidak seperti yang dinyatakan oleh kebanyakan orang. Bahasa adalah sarana komunikasi, dan harus dianalisis dalam konteks komunikasi itu (man-man, man-machine, keduanya, antara tempat atau di antara waktu, ... untuk mengatakannya sedikit secara sederhana). Yang penting bukanlah apakah Anda hanya dapat membuat pernyataan yang tidak ambigu dalam bahasa tersebut, tetapi apakah Anda selalu dapat memastikan bahwa komunikasi akan tidak ambigu dalam konteks yang dimaksud. Ada satu bahasa pemrograman yang terkenal dan banyak digunakan, yang memungkinkan penulisan program yang ambigu (ya, memang, tapi saya belum melihat versi terbaru untuk sementara waktu). Dalam hal ini, kompiler cukup pintar untuk mendeteksi ambiguitas dan meminta klarifikasi, yang dapat dimasukkan dalam program menghilangkan ambiguitas. Perhatikan bahwa deteksi ambiguitas tidak berarti bahwa hanya satu dari pilihan yang mungkin memiliki makna, semuanya memiliki arti. Masalahnya adalah apakah salah satu entitas yang berkomunikasi dapat mendeteksi ambiguitas sehingga pengirim dapat mengklarifikasi. Manusia buruk dalam hal ini, tetapi komputer bisa sangat bagus.

Formalisme dan bahasa pemrograman bisa memiliki sintaksis yang lebih kaya dan lebih fleksibel. Saya percaya alasan utama mereka tidak melakukannya adalah konservatisme sederhana. Alat sintaksis yang digunakan masih sangat sering alat yang dirancang tiga puluh tahun yang lalu atau lebih, untuk memenuhi keterbatasan komputer pada waktu itu. Efisiensi parsing tidak lagi menjadi masalah kritis dalam menyusun dan teknik yang lebih kuat memang ada secara bijak.

Menariknya, dasar yang paling banyak digunakan untuk sintaksis bahasa pemrograman berasal dari penelitian bahasa alami: tata bahasa bebas konteks. Banyak penelitian teknis yang memindahkannya ke teori / teknis ilmu komputer pada tahun enam puluhan, untuk agak ditemukan kembali pada awal tahun delapan puluhan oleh orang-orang bahasa alami (saya menyederhanakan). Sejak itu, banyak kemajuan telah dibuat untuk sintaks dalam bahasa alami, sementara ilmu komputer tampaknya sebagian besar terjebak dengan alat sintaksis lama. Pendulum bahasa alami sekarang berayun lagi ke arah teknik statistik, tetapi pendekatan aljabar untuk sintaksis tidak dilupakan. Kemungkinan besar, pendekatan yang baik akan datang dari kombinasi teknik aljabar dan statistik.

Perasaan saya adalah bahwa area kritis adalah semantik dan transisi antara sintaksis dan semantik. Ini masih sangat sulit untuk diformalkan untuk bahasa alami, sementara kami memiliki banyak teknik yang tepat dalam hal bahasa pemrograman dan sistem formal. Karena gim ini jauh dari dimainkan untuk bahasa alami, sulit untuk mengatakan apa dampaknya pada bahasa pemrograman di masa depan.

Poin lain adalah bahwa banyak perancang bahasa pemrograman mencoba membuktikan sesuatu atau menegakkan ideologi teknis. Dengan demikian mereka mendapatkan desain yang sangat preskriptif untuk mencegah pengguna menyimpang dari paradigma yang diinginkan. Sayangnya ini sangat kontraproduktif untuk kreativitas. Bahasa paling kreatif yang pernah dirancang adalah yang pertama: Lisp (1958). Kebebasan dan fleksibilitas yang dibolehkan adalah sumber kreativitas yang cukup besar. Harganya adalah itu membutuhkan disiplin diri dan pemahaman. Tapi Lisp benar-benar sebuah bahasa logam, bahasa untuk penciptaan bahasa.

Sekarang, untuk mengambil perspektif lain, program sebenarnya bukti spesifikasi mereka dilihat sebagai pernyataan matematika (well, saya menyederhanakan lagi). Beberapa orang (saya tidak ingat referensi, maaf) telah bermain dengan pembuktian teorema untuk menghasilkan bukti yang kelihatannya ditulis oleh ahli matematika dalam bahasa alami. Jadi saya kira gagasan memiliki program yang sepertinya ditulis dalam bahasa alami mungkin tidak sepenuhnya absurd.

Namun Anda mungkin memperhatikan bahwa, bahkan ketika ditulis secara informal oleh seorang ahli matematika, wacana matematika terlihat sangat berbeda dari pembicaraan biasa, atau dari buku sejarah. Hal ini disebabkan oleh perbedaan yang signifikan dalam semesta wacana yang bersangkutan, domain semantik yang sedang dibicarakan. Jadi sementara Anda dapat membayangkan bahasa pemrograman yang lebih mirip bahasa alami, ada batasan alami yang merupakan domain wacana dan sifat-sifatnya yang diinginkan sendiri. Kemungkinan besar itu akan tetap dasarnya dangkal, yaitu sebagian besar sintaksis. Ahli matematika dapat berbicara tentang sistem formal dan tentang politik. Semoga kedua wacana tersebut tidak akan terlihat serupa. Komputer tidak bisa (belum?) Berbicara tentang politik, atau memahaminya. Hari mereka melakukannya tidak lagi pemrograman.

Melihat ke belakang dalam sejarah, bahasa tingkat tinggi, dari yang pertama (FORTRAN) merupakan upaya untuk lebih dekat ke bentuk yang lebih alami untuk mengekspresikan tugas komputasi, tetapi tugas-tugas ini dipahami sebagai matematika atau logis (Fortran 1957, Algol 1958, Lisp 1958 ), atau lebih berorientasi bisnis (Cobol 1959). Dalam 10 tahun orang-orang khawatir tentang bahasa yang akan lebih dekat, lebih baik beradaptasi dengan masalah yang dihadapi, dan ada penelitian signifikan dalam apa yang disebut extensible languages, mencakup sintaksis dan semantik. Satu jalur utama untuk mengekspresikan masalah secara lebih alami adalah munculnya object orientation(kadang-kadang dengan nama lain). Meskipun selalu sulit untuk menetapkan status sebagai orang tua, itu mungkin muncul dari karya kecerdasan buatan, sebagian besar dalam Lisp, dan dari bahasaSimula 67(Keluarga Algol) yang dengan sendirinya dimaksudkan untuk mengekspresikan masalah dunia nyata yang lebih alami yang akan disimulasikan pada komputer. Semuanya tampak konsisten secara historis.

babou
sumber
0

Meskipun mereka serupa karena pertanyaan yang diajukan serupa, mereka cukup berbeda dalam hal kompleksitas. Perbedaan utama adalah bahwa bahasa alami secara inheren ambigu (bahkan pada tingkat kata). Bahkan tidak jelas apa yang dimaksud dengan sebuah kata? Namun, dalam dunia bahasa pemrograman, berbagai perangkat yang menentukan siap membantu. Lihatlah tata bahasa untuk parsing bahasa alami dan untuk parsing bahasa pemrograman, perbedaan ukurannya menakjubkan. Masalahnya adalah bahwa tata bahasa untuk bahasa pemrograman adalah sistem formal; jadi mereka setuju untuk analisis matematika. Berurusan dengan ambiguitas muncul banyak masalah yang solusinya dalam bahasa pemrograman sepele atau sederhana.

Mungkin kesenjangan antara bahasa alami dan bahasa pemrograman akan menyusut jika kesenjangan antara ilmuwan komputer dan orang "alami" menyusut.

saadtaame
sumber
0

Dalam beberapa tahun terakhir, ketertarikan pada (E) DSL dan antarmuka yang lancar terus meningkat, dalam berbagai bahasa: Haskell, berbagai bahasa scripting, C #, Java, dan bahkan C ++ (pikirkan kelebihan muatan dari operator<<untuk melakukan output).

Hingga taraf tertentu, ini memungkinkan kode untuk membaca lebih alami. Saya akan mengilustrasikan dengan contoh EDSL di groovy. The groovy.time paket memungkinkan Anda untuk menulis

use ( TimeCategory ) {
    // application on numbers:
    println 1.minute.from.now
    println 10.days.ago

    // application on dates
    def someDate = new Date()
    println someDate - 3.months 
}

Jika Anda melakukan ini melalui kelas java.util.Calendar Anda harus menulis sesuatu seperti ini untuk contoh pertama:

void demo() {
    Calendar date = new GregorianCalendar();
    date.add(Calendar.MINUTE, 1);
    System.out.println(date);
}
yatima2975
sumber
0

Bahasa komputer (bahkan bahasa mesin yang belum sempurna di masa lalu) adalah bahasa manusia, karena mereka terutama untuk komunikasi dengan sesama manusia, didefinisikan oleh manusia, dan hanya digunakan secara sekunder untuk menyampaikan instruksi ke mesin. Jadi mereka berevolusi dengan cara yang sama seperti bahasa "alami" berevolusi (lihat saja "idiom" untuk bahasa favorit Anda, periksa bagaimana misalnya C telah berevolusi dari K&R C ke ISO-C saat ini 2011. Tetapi mereka ada di lingkungan yang berbeda, mereka harus menyampaikan makna yang tepat (komputer masih terlalu bodoh untuk masuk akal dan mengoreksi apa yang diminta dari mereka), dan ada premium pada kemudahan pemrosesan (sehingga tata bahasa dan kosakata bahkan C ++, PL / 1, atau APL jauh lebih sederhana daripada misalnya Bahasa Inggris, yang sebagai bahasa alami pergi agak sederhana).

Banyak hal yang sama dapat dikatakan tentang formalisme matematika atau sains pada umumnya, atau bahkan cetak biru (inheren 2D, bukan 1D seperti yang lain).

vonbrand
sumber