V bahasa pemrograman sumber terbuka

Diterjemahkan masuk dalam kategori open compiler untuk bahasa V. V adalah bahasa kompilasi mesin yang diketik secara statis yang berfokus pada pembuatan pengembangan yang lebih mudah dipelihara dan sangat cepat untuk dikompilasi. Kode kompiler, perpustakaan, dan alat terkait terbuka di bawah lisensi MIT.

Sintaks V sangat mirip dengan Go, meminjam beberapa konstruksi dari Oberon, Rust, dan Swift. Bahasanya disederhanakan semaksimal mungkin dan, menurut pengembangnya, 30 menit belajar sudah cukup untuk mempelajari dasar-dasarnya dokumentasi. Pada saat yang sama, bahasa tersebut tetap cukup kuat dan dapat digunakan untuk melakukan tugas yang sama seperti saat menggunakan bahasa pemrograman lain (misalnya, perpustakaan tersedia untuk grafik 2D/3D, membuat GUI, dan aplikasi web).

Penciptaan bahasa baru didorong oleh keinginan untuk mencapai kombinasi kesederhanaan sintaksis bahasa Go, kecepatan kompilasi, kemudahan paralelisasi operasi, portabilitas dan pemeliharaan kode dengan kinerja C/C++, keamanan Rust dan pembuatan kode mesin pada tahap kompilasi Zig. Saya juga ingin mendapatkan kompiler yang ringkas dan cepat yang dapat bekerja tanpa ketergantungan eksternal, menghilangkan cakupan global (variabel global) dan memberikan kemampuan untuk memuat ulang kode secara "panas".

Dibandingkan dengan C++, bahasa baru ini jauh lebih sederhana, memberikan kecepatan kompilasi yang lebih cepat (hingga 400 kali), mempraktekkan teknik pemrograman yang aman, bebas dari masalah dengan perilaku tidak terdefinisi, dan menyediakan alat bawaan untuk memparalelkan operasi. Dibandingkan dengan Python, V lebih cepat, sederhana, lebih aman, dan lebih mudah dipelihara. Dibandingkan dengan Go, V tidak memiliki variabel global, tidak ada null, semua nilai variabel harus selalu ditentukan, semua objek tidak dapat diubah secara default, hanya satu jenis penugasan yang didukung (β€œa := 0”), yang jauh lebih kompak runtime dan ukuran file executable yang dihasilkan, adanya portabilitas langsung dari C, tidak adanya pengumpul sampah, serialisasi yang lebih cepat, kemampuan untuk menginterpolasi string (β€œprintln('$foo: $bar.baz')”).

fn utama() {
bidang := ['permainan', 'web', 'alat', 'sains', 'sistem', 'GUI', 'seluler'] a := 10
jika benar {
menjadi := 20
}
untuk luas di daerah {
println('Halo, pengembang $area!')
}
}

Fitur Proyek:

  • Kompiler ringkas dan cepat, yang bersama dengan perpustakaan standar membutuhkan sekitar 400 KB. Kecepatan kompilasi yang tinggi dicapai melalui pembuatan kode mesin dan modularitas secara langsung. Kecepatan kompilasinya kurang lebih 1.2 juta baris kode per detik pada satu inti CPU (perhatikan saat operasi V bisa menggunakan C, kemudian kecepatannya turun menjadi 100 ribu baris per detik). Perakitan mandiri kompiler, yang juga ditulis dalam bahasa V (ada juga versi referensi di Go), membutuhkan waktu sekitar 0.4 detik. Pada akhir tahun, pekerjaan optimasi tambahan diharapkan selesai, yang akan mengurangi waktu pembuatan compiler menjadi 0.15 detik. Dilihat dari pengujian yang dilakukan oleh pengembang, perakitan mandiri Go memerlukan ruang disk 512 MB dan berjalan dalam satu setengah menit, Rust membutuhkan 30 GB 45 menit, GCC - 8 GB dan 50 menit, Clang - 90 GB dan 25 menit,
    Swift - 70 GB dan 90 menit;

  • Program dikompilasi menjadi file yang dapat dieksekusi tanpa ketergantungan eksternal. Ukuran file yang dapat dieksekusi dari server http sederhana setelah perakitan hanya 65 KB;
  • Kinerja aplikasi yang dikompilasi berada pada tingkat rakitan program C;
  • Kemampuan untuk berinteraksi secara lancar dengan kode C, tanpa biaya tambahan. Fungsi dalam bahasa C dapat dipanggil dari kode dalam bahasa V, dan sebaliknya, kode dalam bahasa V dapat dipanggil dalam bahasa apa pun yang kompatibel dengan C;
  • Dukungan untuk menerjemahkan proyek C/C++ ke dalam representasi dalam bahasa V. Parser dari Clang digunakan untuk terjemahan. Belum semua fitur standar C didukung, namun kemampuan penerjemah saat ini sudah mencukupi terjemahan dalam bahasa game V DOOM. Penerjemah C++ masih dalam tahap awal pengembangan;
  • Dukungan serialisasi bawaan, tanpa terikat dengan runtime;
  • Meminimalkan operasi alokasi memori;
  • Memastikan keamanan: tidak ada NULL, variabel global, nilai tidak terdefinisi, dan definisi ulang variabel. Pemeriksaan buffer overrun bawaan. Dukungan untuk fungsi generik (Generik). Objek dan struktur yang tidak dapat diubah secara default;
  • Kemungkinan memuat ulang kode "panas" (mencerminkan perubahan kode dengan cepat tanpa kompilasi ulang);
  • Alat untuk memastikan multithreading. Sama seperti dalam bahasa Go, konstruksi seperti β€œrun foo()” digunakan untuk memulai thread eksekusi baru (mirip dengan β€œgo foo()”). Di masa depan, dukungan untuk goroutine dan penjadwal thread direncanakan;
  • Dukungan untuk sistem operasi Windows, macOS, Linux, *BSD. Direncanakan untuk menambah dukungan untuk Android dan iOS pada akhir tahun;
  • Manajemen memori pada waktu kompilasi (seperti di Rust), tanpa menggunakan pengumpul sampah;
  • Ketersediaan toolkit multi-platform untuk output grafis, menggunakan GDI+/Cocoa dan OpenGL untuk rendering (direncanakan dukungan untuk DirectX, Vulkan, dan Metal API). Ada alat untuk bekerja dengan objek 3D, animasi kerangka, dan kontrol kamera;
  • Ketersediaan perpustakaan untuk menghasilkan antarmuka grafis dengan elemen desain asli setiap OS. Windows menggunakan WinAPI/GDI+, macOS menggunakan Kakao, dan Linux menggunakan kumpulan widgetnya sendiri. Perpustakaan sudah digunakan dalam pengembangan Volt β€” klien untuk Slack, Skype, Gmail, Twitter dan Facebook;

    Rencananya adalah membuat aplikasi desain antarmuka mirip Delphi, menyediakan API deklaratif yang mirip dengan SwiftUI dan React Native, dan memberikan dukungan untuk membuat aplikasi seluler untuk iOS dan Android;

    V bahasa pemrograman sumber terbuka

  • Ketersediaan kerangka web bawaan, yang digunakan untuk membuat situs web, forum, dan blog untuk pengembang proyek. Prakompilasi templat HTML didukung, tanpa memprosesnya berdasarkan setiap permintaan;
  • Dukungan kompilasi silang. Untuk membuat file yang dapat dieksekusi untuk Windows, jalankan saja β€œv -os windows”, dan untuk Linux - β€œv -os linux” (dukungan kompilasi silang untuk macOS diharapkan nanti). Kompilasi silang juga berfungsi untuk aplikasi grafis;
  • Manajer ketergantungan bawaan, manajer paket, dan alat pembangunan. Untuk membangun program, cukup jalankan β€œv.”, tanpa menggunakan utilitas make atau eksternal. Untuk menginstal perpustakaan tambahan, jalankan saja, misalnya, β€œv get sqlite”;
  • Ketersediaan plugin untuk pengembangan bahasa V di editor VS Code ΠΈ semangat.

Pembangunan dirasakan komunitas dengan keraguan, karena kode yang dipublikasikan menunjukkan bahwa belum semua kemampuan yang dinyatakan telah diterapkan dan diperlukan banyak pekerjaan untuk mengimplementasikan semua rencana.
Selain itu, awalnya repositori itu punya ditempatkan kode rusak yang memiliki masalah dengan perakitan dan eksekusi. Diasumsikan bahwa penulis belum mencapai tahap di mana mereka mulai memperhatikan hukum Pareto, yang mana 20% usaha menghasilkan 80% hasil, dan 80% usaha sisanya hanya menghasilkan 20% hasil.

Sementara itu, pelacak bug Project V telah menghapus sekitar 10 postingan demonstrasi kode berkualitas rendah, misalnya, menunjukkan penggunaan sisipan C dan penggunaan fungsi di perpustakaan untuk menghapus direktori perintah rm melalui panggilan os.system("rm -rf $path"). Penulis proyek tersebutbahwa dia hanya menghapus pesan-pesan itu, diterbitkan troll (dengan perubahan yang menegaskan validitas kritik, tinggal Π² mengedit riwayat).

Sumber: opennet.ru

Tambah komentar