Selepas menulis artikel pertama di bagaimana membuat sistem operasi anda sendiriSeseorang memberitahu saya jika saya boleh membuat artikel cara membuat bahasa pengaturcaraan. Pada mulanya saya tidak memberi banyak perhatian, tetapi sekarang dan melalui cara lain saya telah belajar lebih banyak mengenai penciptaan bahasa pengaturcaraan. Oleh itu, mari kita lakukan bahasa pengaturcaraan asas, mudah disematkan dalam program lain dan berfungsi dengan mesin maya yang juga akan kami reka. Hari ini kita harus membuat mesin maya yang paling asas.
Anda mungkin tertanya-tanya: «Mesin maya? Tetapi bukankah itu sangat sulit dan apakah itu juga memperlambat program? " Sebaliknya, mesin maya sederhana sangat mudah dan agak pantas. Saya telah memilih Rust sebagai bahasa untuk mesin maya. Tetapi apa itu Rust?
Rust memasang di Linux Dengan cara yang mudah. Walau bagaimanapun, tidak ada bungkusan rasmi. Pengguna dari Ubuntu anda boleh menambah kedua-duanya PPA: ppa: hansjorg / karat y ppa: cmrx64 / kargo, pengguna Arch boleh digunakan AUR (kargo-git adalah pakej yang memasang semuanya). Selebihnya boleh menggunakan:
curl -s https://static.rust-lang.org/rustup.sh | sudo sh
Bagaimana mesin maya berfungsi?
Sekiranya anda tahu bagaimana dunia assembler berfungsi sama persis dengan stack atau stack. Sekiranya tidak, saya akan menerangkannya kepada anda. Mari bayangkan kod berikut:
cetak 2 + 3
Komputer tidak memahami apa maksud 2 + 3, dan juga tidak tahu pesanan apa yang harus diikuti. Komputer berfungsi dengan bateri atau timbunan di mana data terkumpul dan diekstrak secara berterusan. Kod itu di mesin maya kami akan kelihatan seperti ini:
PUSH 2 PUSH 3 TAMBAH CETAK
Pada asasnya kita meletakkan 2 di timbunan di atas, 3 juga. ADD akan menarik (iaitu mengeluarkannya dari timbunan dan mendapatkan nilainya) 2 item terakhir pada timbunan dan menambahkan hasilnya ke bahagian atas timbunan. PRINT akan mengambil item terakhir di tumpukan dan menggunakannya untuk memaparkannya kepada kami. Sekarang mari kita buat Rust.
Kita mesti terlebih dahulu menentukan bahasa untuk Bykod, kita boleh menggunakan yang sudah ada seperti yang ada Java o el CLR .NET / Mono, tetapi kami akan membuat yang lebih asas.
https://gist.github.com/a01de8904fd39a442c20
Kami menggunakan notasi heksadesimal untuk setiap arahan. Pada tahap tinggi kita telah meletakkan # [menurunkan (FromPrimitive)], adalah keanehan dari Rust dan ini akan menolong kita untuk dapat membandingkan penghitungan dengan bait secara langsung.
Sekarang kita mesti membuat fungsi yang melaksanakan setiap arahan tersebut. Untuk ini, kita mesti membaca bait dan membandingkannya dengan arahan yang kita ada dalam penghitungan. Sekiranya anda menjumpai apa-apa yang ada, anda mesti melaksanakan tindakan anda.
https://gist.github.com/8950ce212a2de2f397f9
Kami melakukannya untuk membaca setiap bait secara individu dan melaksanakannya:
https://gist.github.com/12e24a1f0dd65e4cd65d
Seperti yang anda lihat, kita membezakan jika kita diberi arahan PUSH (perintah INTEGER kita) sebelumnya, bait seterusnya akan dibawa sepenuhnya ke timbunan. Di sana kami menggunakan dua fungsi yang belum saya ajarkan kepada anda, diri.pop () y self.push (), yang jelas bertugas mengendalikan timbunan.
https://gist.github.com/54147f853a8a2b8c01d9
Mereka tidak terlalu rumit, tetapi fungsi pop memiliki mekanisme pengesanan ralat. Sebenarnya, di Rust, jika kita membuang mekanisme tersebut, itu akan memberi kita kesalahan penyusunan. Sekarang kita hanya perlu memanggil program perin (mesin maya kami) dan laksanakan kod bytec.
https://gist.github.com/99b1ab461318b3a644d0
Bytecode itu boleh dibaca dari fail, tetapi di sini untuk kesederhanaan saya telah menyimpannya dalam pemboleh ubah. Sekiranya kita melaksanakannya, ia akan memberikan hasil yang diharapkan:
Perin v0.1 Perin VM melaksanakan FlopFlip bytecode Memulakan instance PerinVM PerinVM v0.1.0 Nilai integer 5
Semua kod boleh didapati di GitHub di bawah Lesen Apache 2.0: https://github.com/AdrianArroyoCalle/perin. Untuk menyusunnya mesti ada Cargo dipasang dan letakkan:
caj bina && ./target/main
Pada bab seterusnya kita akan melihat lebih banyak mengenai bahasa pengaturcaraan kita.
Rasa ingin tahu yang menarik, walaupun pada hakikatnya tidak begitu berguna, tidak ada salahnya untuk mengetahui.
Hebatnya anda mengiklankan Rust, ini adalah bahasa yang menjanjikan banyak, bukan hanya lebih selamat daripada c ++, tetapi (buat masa ini) lebih jelas dalam sintaksisnya.
Untuk foto, saya tidak akan mempertimbangkan java evolusi XD.
Dan dari fortran, saya tidak pernah menggunakannya, tetapi saya belum pernah mendengar banyak perkara baik mengenainya ...
Saya begitu, dan ia sangat berguna dalam bidang kejuruteraan walaupun Python mendapat tempat.
Fortran mungkin merupakan bahasa hebat lain bersama dengan C. Bahkan hari ini dalam soalan yang sangat kritikal akan menjadi satu atau yang lain.
Dan boleh diperdebatkan bahawa Fortran adalah sebagai 'evolusi' C, ketika mungkin seharusnya sebaliknya, kerana C lebih baru, lebih moden dan dengan lebih banyak kemungkinan; walaupun satu tidak terlepas dari yang lain sedikit pun.
Walaupun kedudukan akhir semuanya boleh diperdebatkan dari beberapa sudut pandangan.
+1 ke Java
Mari lihat jika saya suka ini, saya memberikan sesuatu kepada pengaturcaraan tetapi asas untuk melihat apakah saya lebih faham.
Apakah tujuan sebenarnya untuk membuat bahasa pengaturcaraan yang baru? Nampaknya saya secara peribadi bahawa ia adalah tipu daya untuk menyembunyikan kod sumber.
Kawan apa yang berlaku dengan penerusan "sistem operasi anda sendiri"? Jangan tinggalkan di sana, teruskan.
Sebenarnya, anda adalah master dan kedua lagu ini telah menarik perhatian saya, tetapi saya tidak mahu lagu itu berhenti di tengah jalan.
Saya tahu bahawa banyak dari kita berfikir sama dan kita sedang menunggu kesinambungan dan kesimpulan dari topik-topik yang sangat menarik ini.
Sangat menarik, terima kasih banyak. 🙂
Saya tidak menganggap java sebagai bahasa pengaturcaraan, sebaliknya jurubahasa perintah, kerana ia tidak dapat disusun
[Bahasa pengaturcaraan adalah bahasa formal yang dirancang untuk mengekspresikan proses yang dapat dilakukan oleh mesin seperti komputer.]
Atas sebab ini, Java adalah bahasa pengaturcaraan. Malah bahasa Bash (bahasa shell linux) adalah bahasa pengaturcaraan dengan sendirinya.
Terdapat dua jenis bahasa:
- Disusun
- Mentafsir
- Campuran (Mesin maya, perpustakaan asli disusun dan kod fungsinya ditafsirkan)
Penafsir sangat berguna ketika menggunakan pelbagai platform dan tidak mempunyai prestasi yang buruk untuk itu. Java, VB.NET, C ++ .NET, F #, C # adalah semua bahasa campuran. Bahasa bash, bat, PHP, Javascript, dan banyak lagi bahasa yang ditafsirkan.
Sekiranya anda tidak menganggap Java sebagai bahasa kerana ia ditafsirkan (yang bukan), anda tidak boleh mempertimbangkan banyak bahasa lain yang digunakan untuk membuat program. Lebih-lebih lagi, dengan ketentuan tiga ini, anda tidak boleh menganggap bahawa ada bahasa pengaturcaraan kecuali bahasa mesin itu sendiri.
Dan mengapa tidak? Bahkan bahasa mesin tidak boleh dianggap sebagai bahasa kerana ia sebenarnya hanya sekumpulan perintah yang "ditafsirkan" oleh pemproses.
Kerana berkesan, SEMUA bahasa tidak lebih dari sekumpulan perintah yang ditafsirkan oleh pemproses.
Anda mungkin menyukai bahasa lebih kurang (Java, dalam hal ini), nampaknya lebih kurang berguna dan hebat tetapi untuk mengatakan bahawa itu bukan bahasa pengaturcaraan kerana tidak disusun ... ia bertentangan dengan semua definisi bahasa pengaturcaraan.
Hope Saya harap saya tidak kelihatan terlalu kasar
tidak tenang anda hanya menghancurkan hidup kita
hahahahaha, perdoooon. itu bukan niat saya xD
java adalah bahasa pengaturcaraan. kerana anda dapat mengembangkan aplikasi dan ketika anda menyusun anda membuat .jar yang ditafsirkan oleh JVM. Kemudian menurut logik python anda tidak ditafsirkan tetapi ia disusun untuk pelbagai yang boleh dilaksanakan ...
Maklumat yang sangat baik
maklumat yang baik tetapi saya mempunyai keraguan, adalah mungkin untuk membuat bahasa pengaturcaraan baru dari awal tanpa perlu bergantung pada analogi atau perisian lain. Saya bercakap dengan cara yang sama seperti bahasa lain yang dibuat seperti Java atau HTML.
Saya sangat menghargai pertolongan anda mengenai soalan ini.