Jawa setelah letusan gunung berapi

Beberapa majikan yang sarkastik meminta saya untuk memperbaiki Jawa, dan meskipun saya bukan presiden Indonesia, saya cepat-cepat pergi tanpa sengaja menjadi bingung selama setengah hari. Saya ingin seperti itu. Prinsip umum adalah penyederhanaan maksimum tanpa kehilangan kontrol logis. Untuk ini, jelas, perlu tidak hanya untuk menambahkan ke bahasa apa yang tidak ada, tetapi juga untuk menghapus dari bahasa banyak dari apa yang ada di sana, melanjutkan tradisi C - yang baik.


  1. Kemampuan untuk mengembalikan lebih dari satu hasil dari suatu fungsi.
  2. Nilai default bidang primitif harus dinyatakan secara eksplisit. Hapus pengubah "statis" dari bahasa, sebagai statis - contoh default, dapat diakses dengan referensi ke null yang diketik. Sebut semuanya "instance default." Kemungkinan pengubah "abstrak" untuk bidang, yang akan berarti ketidakmampuan untuk membuat turunan kelas, dan kebutuhan untuk menentukan nilai default bidang ini di turunan kelas.
  3. Untuk bidang "dilindungi", "default" dan "publik", setter dan getter menghasilkan otomatis oleh kompiler, tanpa pembuatan otomatis jenis yang terlihat, tetapi dengan kemungkinan kelebihannya, hapus "privat" dari bahasa, karena "kolom" itu sendiri semuanya akan "pribadi" tanpa kemampuan yang berlebihan. Tambahkan "lokal" - tentang ini di paragraf 8.
  4. Pembuatan antarmuka publik secara otomatis dari semua bidang "publik" di kelas, serta jenis baru yang dilindungi, dll. antarmuka dari bidang yang sesuai dengan pengubah. Jenis kelas dibandingkan dengan kode hash, yang akan dihasilkan oleh nama bidang, nama argumen, jenis dan nilai kembali, karena probabilitas semua ini bertepatan diabaikan dan dapat dideteksi pada waktu kompilasi dengan peringatan.

    Dengan demikian, "antarmuka" seperti itu tidak lagi diperlukan, hanya "kelas", "abstrak" hanyalah instruksi yang melarang pembuatan instance. Untuk multiple inheritance, lihat paragraf 5 berikutnya.
  5. Menambahkan aturan gabungan untuk "extends". Tetapkan secara eksplisit leluhur untuk semua bidang yang saling bertentangan, yang tidak dapat dibedakan dari metode, lebih lanjut tentang itu dalam klausa 8. Sebagai hasilnya, objek akan mewarisi kode dan mengimplementasikan semua tipe induk. Jenis yang tidak sepenuhnya terpelihara sebagai hasil penggabungan menghilang begitu saja dari leluhur formal, meninggalkan kode, tetapi membuat kesalahan kompilasi ketika mencoba menyalahgunakan objek.
  6. Tipe dinamis. Templat berada dalam C, dan bukan templat berbasis Java. Mengetik tidak akan menderita karena ini, karena tipe dinamis tidak dapat langsung digunakan dalam sampel, tetapi dapat digunakan dalam semua kasus ketika tipe dasar atau refleksi atau template digunakan, di mana juga tidak sulit untuk mengatur perencanaan ulang dengan memperluas tipe instance langsung ke runtime, pembatasan dilarang.
  7. Sub-metode seperti dalam Pascal.
  8. Semua metode adalah contoh default lengkap dari kelas dalam dan tidak dapat dibedakan dari bidang. Untuk ini, konstruktor kelas akan mengembalikan nilai. Konstruktor kelas akan menjadi tubuh dari metode default yang akan dibuat pada waktu kompilasi, sesuai dengan klausa 2 "contoh default". Tidak ada referensi metode khusus yang diperlukan lagi, seperti di Jawa 8. Referensi metode akan berarti referensi objek.

    Pemanggilan metode dan pembuatan objek sementara hanya untuk memanggil metode internal menjadi identik, semua ini dapat dioptimalkan oleh kompiler sebagai pemanggilan metode sederhana. Di sisi lain, membuat "metode" dengan operator "baru", untuk manipulasi selanjutnya dengan referensi padanya, berarti membuat instance baru dari "kelas". Menetapkan referensi ke fungsi ke bidang secara langsung melalui nama metode tanpa tanda kurung, nilai fungsi dengan tanda kurung dan argumen di dalamnya. Bidang dengan pengubah "lokal" tidak disimpan di antara panggilan metode.

    Semua metode yang sama dengan set argumen yang berbeda harus dikelompokkan ke dalam subclass, sehingga akan menyenangkan untuk mengotori kelas luar. Bidang default subkelas ini menjadi, masing-masing, tidak sepenuhnya statis, tetapi relatif statis terhadap kelas luar. Kecuali ketika kelas luar itu sendiri adalah instance default.
  9. Alih-alih "mencoba" - "menangkap" ada juga metode, "melempar" mengidentifikasi jenis yang diperbolehkan dari metode panggilan, "melempar" membuat goto pada metode handler, memotong callstack, dan metode handler itu sendiri tidak berbeda, kembali dari mereka dilakukan dengan cara biasa, tetapi , Kebetulan di salah satu metode panggilan sebelumnya. Oleh karena itu, seorang pawang dipanggil pada level hierarki terdekat, seperti halnya dengan try-catch. Dengan demikian, untuk melompati kode tertentu mengikuti metode tertentu dalam kasus pengecualian, Anda harus memasukkan kode ini, dengan metode tertentu ini di awal, ke kelas submethod di mana untuk membebani penangan yang diperlukan. Pendekatan ini secara signifikan akan mempersingkat metode proyek nyata di Jawa yang lama.

    "Akhirnya" untuk menambah bobot pada metode di akhir, sehingga tanpa tanda kurung tambahan.
  10. Operator baru untuk runtime mengenkripsi semua jenis primitif dan array bidang primitif dan String dan mengompresnya dalam memori untuk pengambilan berikutnya dengan kunci akses, dalam jumlah besar untuk seluruh instance kelas. Untuk langsung ingin membongkar-gunakan-bungkus dalam satu metode, daripada menggaruk-garuk kepalaku "bagaimana melakukannya dengan lebih baik."
  11. Array perlu kontrol perbatasan hanya selama perekaman, dan saya akan memberikan kesempatan untuk membaca langsung dari memori tanpa mengendalikan batas-batas array. Dengan demikian, mengingat keberadaan System.arraycopy, batas array akan dipantau tanpa mengorbankan kinerja. Karena, sebagian besar perhitungan tambahan paling sering dilakukan selama perekaman, dan, dibandingkan dengan mereka, perekaman itu sendiri tidak memakan banyak waktu.
  12. Memberikan alternatif dasar tambahan untuk sinkronisasi oleh pemblokir adalah metode paling sederhana di kelas Thread yang mengirim pesan khusus ke Thread lain, dan metode yang melaluinya Anda dapat menerima pesan khusus dari Thread lain. Selain itu, dalam metode "run" dari objek Runnable, yang diteruskan ke Thread, perlu memanggil metode yang menginterupsi thread secara eksplisit, dan tanpa kesalahan kompilasi. Juga, tambahkan metode yang memecat acara Runnable khusus dari utas lain, menerima dan mengirim pesan setiap kali setelah interupsi ini. Semua ini pada dasarnya tidak mengubah apa pun, tetapi itu akan menyederhanakan pengembangan yang berorientasi benang pada 90% kasus. Terutama dalam kasus-kasus di mana perkembangannya tergesa-gesa, dan ini adalah sebagian besar kasus nyata.
  13. Bahkan, grafik semua objek dalam memori selalu hanya memiliki tipe primitif, array, atau null, atau tautan ke sesuatu yang asli pada semua verteksnya. Alat dasar yang dapat menyimpan seluruh grafik ini dalam bentuk teks apa pun akan sangat berguna. Array besar primitif dapat disimpan secara terpisah, array kecil dapat menyandi inline. Ditambah versi mesin virtual dan - mari kita pergi, struktur seperti itu dapat dipulihkan dalam memori.
  14. Alat yang berguna untuk mencari objek dalam grafik objek sesuai dengan kriteria yang ditentukan, dengan mempertimbangkan pengubah akses akun, dengan jenis SQL sederhana. Tugas ini sangat disederhanakan menggunakan paragraf 1 ... 9. Alat semacam itu tidak hanya dapat menyederhanakan hierarki objek, tetapi juga mengatur berbagai tes dan kontrol nilai yang diizinkan dan mencoba mengejar ketinggalan dengan Prolog.

Source: https://habr.com/ru/post/id439210/


All Articles