Hai Bahasa Pemrograman

Dimulai dengan artikel ini, kami mulai mempublikasikan konsep implementasi bahasa pemrograman baru Hi.



Kebutuhan untuk mengembangkan bahasa baru, dan tidak menyalin sintaks dari salah satu bahasa pemrograman umum yang ada, disebabkan oleh sejenis konsep asli, yang akan kita bicarakan hari ini. Menurut kami, proses pembuatan dan penerapan konsep bahasa baru itu sendiri merupakan cerita yang menarik dan informatif bagi semua orang yang tertarik dengan pragmatik bahasa.



Kami berasumsi bahwa untuk memahami materi yang disajikan, pembaca sudah familiar dengan sintaks dan semantik beberapa bahasa pemrograman tujuan umum yang umum.


Jangan gigit jari, lihat ke mana saya menunjuk

Warren S. McCulloch, 1960-an


Pernyataan awal masalah



Awalnya, kami menetapkan tugas penerapan teknologi generasi otonom tugas interaktif untuk pengembangan kecerdasan manusia, yang akan beradaptasi dengan keberhasilan dan kegagalannya. Artinya, jika seseorang berhasil memecahkan urutan teka-teki dan efektif dalam mengoper permainan, maka teknologi ini membangun kembali algoritmanya sehingga seseorang dapat memecahkan teka-teki dengan kondisi baru yang lebih kompleks dan versi permainan yang tidak dapat diprediksi yang tidak pernah benar-benar diulang. Jika terjadi kegagalan, teknologi ini mengembalikan seseorang ke posisi yang sudah dikenalnya untuk menyusun kembali program kemampuan dan kesiapannya untuk melakukan pendakian intelektual baru. Pada intinya, program adaptif melakukan pekerjaan yang sama di sini sebagai pelatih pribadi berpengalaman dalam olahraga.



Secara umum, dengan beberapa batasan, tugas ini diselesaikan kembali pada tahun 2018 oleh aplikasi Helius - penuh kehidupan , yang dapat ditemukan di App Store .



Dalam proses penerapan konsep Helius, kami menyadari bahwa untuk mengambil langkah berikutnya dan mengimplementasikan kelas aplikasi adaptif yang secara fundamental baru yang akan dapat sepenuhnya mengubah arsitekturnya, beradaptasi dengan kemampuan manusia, kami memerlukan bahasa skrip algoritmik bawaan, yang daftarnya dapat berupa sama-sama berhasil dibuat dalam bentuk teks baik oleh aplikasi itu sendiri maupun oleh seseorang, atau dapat dimodifikasi oleh orang atau program lain berdasarkan kode yang diberikan sebagai prototipe awal.



Kami merumuskan persyaratan utama dan dengan cepat menyimpulkan bahwa konsep yang berfokus pada pengungkapan kebutuhan kreatif pengembang tidak dimodelkan dengan baik dalam bahasa umum mana pun, karena tujuan kami, dengan beberapa tingkat lelucon, adalah memprogram orang, bukan komputer.



Karena sama-sama "nyaman" untuk sistem intelektual yang dirancang dengan baik untuk menghasilkan sintaks dari bahasa apa pun yang konsisten dalam bentuk apa pun, untuk menggunakan bahasa komunikasi antara kecerdasan "buatan" dan "alami", masuk akal untuk menggunakan kode algoritme tradisional, membuatnya senyaman mungkin untuk pola berpikir manusia akrab dengan bahasa arus utama, yang leluhurnya adalah Algol. Mereka adalah keturunan di sepanjang garis Pascal (Ada, Modula) dan C (C ++, Java, Swift). Namun, konsep kami membangun abstraksi dan perhatian pada tanda kurung dekat dengan semangat Skema (Lisp), dan integrasi perintah lingkungan pemrograman ke dalam cara ekspresif bahasa sesuai dengan ide bahasa skrip, BASIC antik untuk mikrokomputer pertama dan proyek Oberon - sistem Niklaus Wirth.



Tujuan awal kami juga termasuk menyediakan bahasa algoritmik yang sederhana dan nyaman untuk memprogram permainan pikiran dan teka-teki dengan cepat dengan kurva belajar pengembang pemula selama satu hingga dua jam. Pada saat yang sama, kami pada dasarnya mengesampingkan desain visual objek aplikasi dalam semangat Scratch atau pembuatan prototipe game dalam skrip dan editor visual. Menurut kami, hal ini mengalihkan dari kreativitas dan ekspresi ide sendiri, karena upaya kreatif lebih banyak digantikan oleh studi yang telaten dan transformasi objek [grafis]. Kami mengusulkan di masa depan untuk memberikan pekerjaan ini sebagai pelatihan untuk algoritme untuk agen cerdas.



Hasilnya, kami akan merumuskan tujuan bahasa sebagaipertukaran algoritma antara kecerdasan buatan dan alami, pemrograman tugas bersama (permainan dan teka-teki) untuk diri sendiri dan orang lain, pertukaran teks program secara bebas.



Halo dunia



Sebelum kami membahas poin utama untuk membangun sintaks bahasa, kami menyajikan tiga cuplikan kode pendek. Mari kita mulai dengan program pesan selamat datang tradisional:



PRINT “Hello world!”


Kami melihat bahwa bahasa kami memiliki karakter skrip, dengan asumsi interpretasi cepat; perintah print dalam huruf besar dan argumen fungsi bawaan tidak diikuti oleh tanda kurung di sini.



Mari kita sajikan dua contoh yang lebih menarik: mencari pembagi persekutuan terbesar untuk dua bilangan bulat dalam gaya imperatif dan menggunakan rekursi:



FUN gcd
   INPUT a: INT
   INPUT b: INT
   WHILE a ~= b LOOP
      IF a > b THEN a -= b ELSE b -= a ENDIF
   REPEAT
   PRINT “gcd = “, a
RETURN

FUN gcd _ a: INT, _ b: INT -> INT
   IF b == 0 THEN RETURN a ENDIF
RETURN gcd b, (a % b)

PRINT gcd 6, 9 
#  3


Persyaratan bahasa yang terhormat



Setiap bahasa yang berhasil dirancang dengan tujuan tertentu, yang menentukan fitur sintaksis dan semantiknya. Misalnya, ASSEMBLER dirancang untuk langsung menyandikan instruksi prosesor dalam bentuk mnemonik yang ramah manusia; BASIC (yang memiliki nomor baris dan pernyataan GOTO) berhasil melanjutkan gagasan menerjemahkan perintah langsung ke penerjemah tingkat tinggi. Bahasa pemrograman Hi dimaksudkan untuk menjadi bahasa perintah dan algoritma untuk komunikasi antara Manusia dan kecerdasan abstrak dari beberapa sistem yang dirancang.



Sebagai konsekuensi logis, kode program bukanlah kode mesin yang dikompilasi dan bukan bytecode dari mesin virtual, tetapi kode sumber(daftar) termasuk komentar. Karenanya, implementasi internal kode tidak distandarisasi dengan cara apa pun dan diserahkan kepada kebijaksanaan interpreter atau implementasi compiler.



Jadi tujuan utama kami adalah bertukar pikiran menggunakan bahasa formal. Mari perkenalkan tiga persyaratan utama:



  1. Bahasanya harus mudah dipelajari oleh seseorang
  2. Bahasa tersebut harus dapat diandalkan untuk digunakan
  3. Bahasa tersebut harus mampu mengatur sistem perangkat lunak yang sangat kompleks.


Mari jelajahi persyaratan dasar ini secara lebih rinci.



Bahasanya harus mudah dipelajari



1) Kami akan menggunakan tulisan sintaksis yang mudah dibaca yang akrab bagi setiap orang berpendidikan modern. Kami akan menghindari bereksperimen dengan singkatnya hingga merugikan membaca, seperti yang dilakukan, misalnya, dalam bahasa APL.



Oleh karena itu, kami menggunakan konstruksi jenis LOOP…REPEATdaripada {…}. Sebagai bonus bagus, kita akan menggunakan tanda kurung kurawal seperti ini:

s = {1, 2, 3}kita akan menunjukkan penugasan variabel s ke satu set tiga bilangan bulat.

a = [1, 2, 3]kami akan menunjukkan penugasan variabel a ke array tiga bilangan bulat.



Penggunaan konstruksi bahasa ringkas yang dipikirkan dengan matang juga memungkinkan untuk membuat hubungan yang lebih logis antara semantik dan sintaks bahasa tanpa menggunakan konteks lingkungan. Kami akan membahas tesis ini lebih detail nanti ketika kami mempertimbangkan konstruksi bahasa tertentu.



2) Untuk ekspresi aritmatika, kami menggunakan notasi dalam bentuk :, a + b + cdan bukan (+ a b c), seperti pada keluarga LISP.



3) Sifat bahasa skrip kami membutuhkan pustaka bawaan dari semua fungsi yang diperlukan di lingkungan bahasa tanpa memerlukan kerangka kerja eksternal.



4) Kami menggunakan algoritma asli untuk pola berpikir: bahasa imperatif dengan kemungkinan fungsi rekursif dan elemen komputasi fungsional. Seperti yang akan kita pertimbangkan lebih lanjut untuk menggunakan salah satu contoh, gaya imperatif cukup nyaman untuk memprogram aplikasi berdasarkan arsitektur penanganan peristiwa dalam kunci deklaratif, seperti SwiftUI. Dengan kata lain, istilah "imperatif" dan "deklaratif" lebih mencerminkan posisi pengamat daripada realitas yang diberikan kepada kita dalam arti tertentu.



5) Kami memantau tidak adanya redundansi struktur sintaksis dan ergonomi memasukkan karakter kode. Kami menggunakan baris baru sebagai pemisah. Namun, seperti di Swift, Anda dapat menggunakan ";" pada satu baris sebagai pembatas untuk beberapa ekspresi. Pada saat yang sama, pendidikan teknik kami dengan keras memprotes pemberian makna sintaksis pada indentasi dalam teks program, seperti yang sebelumnya digunakan di Fortran, dan sekarang dengan Python.



Bahasa yang dapat diandalkan



Kondisi yang diperlukan untuk keberadaan sistem yang kompleks pada waktunya adalah persyaratan untuk keunikan semantik lengkap dan kelayakan dari setiap program yang ditulis dengan benar tanpa koreksi jika terjadi evolusi dan komplikasi bahasa yang tak terhindarkan di masa depan. Bagaimana mengatasi masalah keandalan program ini jika terjadi perkembangan dan perluasan yang tak terelakkan? Untuk menghindari konflik kebetulan pengidentifikasi dan kata-kata khusus, kami menggunakan cara yang sederhana dan efektif, seperti yang dilakukan, misalnya, di Oberon. Bahasa HI mencadangkan semua pengidentifikasi dengan huruf besar tanpa angka dan dengan lebih dari satu karakter sebagai bahasa layanan . Jadi, contoh berikut adalah pengenal valid yang ditulis dengan tangan oleh pemrogram atau dihasilkan oleh sistem cerdas:



foo, Foo, f_001, F1, F, for


Contoh pengenal yang disediakan oleh bahasa:



FOO, FOR, HI, YES, EVERYRESTRICTIONMATTER


Demi keandalan kode, kami menggunakan pengetikan statis dengan kemampuan untuk secara otomatis menyimpulkan jenis dari deklarasi formulir:



LET x = 6  #  x   INT
VAR boolean = TRUE  #   boolean  BOOL


Kami membedakan konstanta dan variabel bukan untuk mengoptimalkan waktu eksekusi kode, tetapi agar pengembang memiliki pemahaman yang baik tentang tujuan objek yang dikontrolnya.



Bahasa untuk membangun sistem perangkat lunak yang sangat kompleks



Arsitektur bahasa universal apa pun harus menyediakan kemungkinan bijaksana untuk membangun program kompleks dari bagian otonom kecil, katakanlah, hingga 250 LOC dalam satu sumber, karena, maafkan kami, Pembaca yang budiman, hanya pemindai dan pengurai yang dapat dengan mudah bekerja dengan teks sumber dengan kerumitan apa pun, dan seseorang bahkan dapat mengalikan beberapa tiga digit bilangan bulat sulit tanpa kalkulator.



Untuk saat ini, kami akan mengesampingkan implementasi arsitektur sistem yang kompleks dalam bahasa Hi dan akan menganalisis masalah ini secara mendetail di masa mendatang saat mempresentasikan konsep pengorganisasian kelas - protokol, komunikasi di antara mereka dan metode untuk membangun hierarki mereka. Kami hanya mencatat bahwa arsitektur aplikasi kompleks akan dibangun dari fragmen kecil yang otonom, mudah dibaca, dan dapat dimodifikasi, dan kami mengambil inspirasi di sini bukan dari studi ilmu komputer, tetapi dari arsitektur interaksi sel dan organ organisme hidup. Tubuh manusia biasa terdiri dari sekitar 50 triliun sel yang dapat hidup yang berfungsi dengan sukses meskipun dalam kondisi lingkungan yang sulit, kehadiran banyak parasit dan kerusakan permanen pada jutaan komponen mikro. Pencipta sistem komputer,yang benar-benar berhenti berfungsi karena satu panggilan ke indeks array yang tidak ada, ada banyak hal yang harus dipelajari di sini.



Meskipun kami mulai dengan bahasa skrip yang nyaman untuk pemrograman teka-teki kecil yang cepat dan menyenangkan, kami harus memberikan keyakinan penuh kepada pengembang bahwa pada platform setelah mengembangkan komponen perangkat lunak sederhana tanpa menggunakan solusi pihak ketiga di masa depan, mereka dapat membangun sistem yang layak dengan kompleksitas tak terbatas.



Batasan



Dalam praktiknya, setiap kali kita menerapkan persyaratan apa pun untuk desain sistem, maka kita harus mengorbankan sesuatu atau tidak memperhatikan sesuatu. Bagi kami, dalam konstruksi bahasa Hi, itu tidak terlalu penting:



  • Kompatibilitas sintaks yang tepat dengan bahasa pemrograman lain
  • Kemampuan untuk menggunakan pustaka kode eksternal yang ada atau berintegrasi dengan sistem perangkat lunak lain
  • c n-
  • /
  • — ,


Sebagai kesimpulan, katakanlah tentang asal usul nama akrab bahasa pemrograman HI, Hi atau hi. Biarlah Bahasa Pemrograman H elius ' i nteraktif atau H uman I ntelligence Programming Language. Tidak seperti semua konstruksi dalam bahasa kami, ini adalah satu-satunya meta-identifier yang tidak memiliki semantik yang jelas.



Pada artikel berikutnya, kami akan menyajikan deskripsi Hi Basic Programming Language "pada satu" halaman dan kemudian menganalisis logika konstruksi sintaks, mengikuti persyaratan tesis yang disajikan di atas.



All Articles