Untuk pertanyaan pertama Anda, "bagaimana Anda akan melakukannya" - jawaban singkat, saya tidak akan. Saya tidak punya cukup teori parser / kompiler untuk melakukan itu. Tapi saya sudah pemrograman selama 25 tahun, jadi saya punya beberapa ide dan pendapat untuk dibagikan.
Pertama, saya akan mencoba untuk datang dengan pendekatan OOP yang memungkinkan Anda membuat model yang benar-benar terhubung. Yang saya maksud dengan itu adalah, model adalah salah satu hal terpenting dalam hampir semua jenis proyek pemrograman - selalu banyak pekerjaan kasar dan refactoring terus menerus untuk memperbaikinya, dan saya menyalahkan itu karena kurangnya konektivitas nyata di Bahasa OO.
Izinkan saya untuk menunjukkan. Katakanlah kelas House memiliki properti Door.
var door = house.Door;
Anda sekarang memiliki variabel lokal dengan referensi ke instance Door.
Tetapi pertimbangkan apa yang baru saja terjadi: Anda baru saja merobek Pintu dari Rumah, dan sekarang Anda cukup senang melewati Pintu di sekitar, dan sisa kode Anda tidak mengetahui fakta bahwa Pintu ini sebenarnya melekat pada Rumah.
Bagi saya, ini pada dasarnya salah.
Dan ya, saya tahu, ini "mudah" diperbaiki berdasarkan kasus per kasus - dalam hal ini dengan mempertahankan referensi terbalik dari setiap Pintu ke Rumah yang saat ini dilampirkan. Ini tentu saja membuka model Anda untuk kesalahan, karena sekarang tugas Anda untuk secara akurat mempertahankan dua referensi terbalik, sehingga Anda membuat House.Lantai dan Door.Rumah properti pribadi, dan Anda menambahkan metode seperti House.AddDoor (), House.RemoveDoor ( ), Door.SetHouse () dll dan kabel semuanya, dan unit-test untuk memastikan itu benar-benar berfungsi.
Bukankah ini mulai terdengar seperti banyak pekerjaan untuk memodelkan hubungan langsung seperti itu? Banyak kode untuk dipelihara? Banyak kode untuk diperbaiki saat model berkembang?
Masalahnya adalah pointer. Setiap bahasa OO yang saya lihat, secara inheren menderita dari fakta bahwa referensi objek benar-benar sebuah pointer, karena itulah yang digunakan komputer.
Pointer bukan cara yang baik untuk memodelkan dunia nyata. Terlepas dari dunia apa yang Anda coba modelkan, hampir dijamin bahwa setiap hubungan di dunia itu akan menjadi hubungan dua arah. Pointer menunjuk pada satu arah saja.
Saya ingin melihat bahasa di mana model data dasar adalah grafik - di mana semua hubungan, secara default, memiliki dua ujung. Ini hampir pasti akan memberikan kecocokan yang lebih alami untuk memodelkan dunia nyata, yang merupakan satu-satunya hal yang kita perlukan untuk komputer. (itu dan video game.)
Saya tidak tahu seperti apa sintaksis untuk bahasa seperti itu, atau apakah itu bisa diungkapkan dengan teks. (Aku bertanya-tanya apakah bahasa seperti itu harus grafis, entah bagaimana ...)
Saya juga ingin melihat semua bentuk keadaan tidak sengaja dihilangkan.
Misalnya, dalam pengembangan web, kami menghabiskan banyak waktu untuk membentuk data dari basis data, menjadi model bisnis, menjadi model tampilan untuk presentasi ... kemudian sebagian dari data tersebut disajikan pada formulir, yang sebenarnya hanyalah transformasi lain. .. dan status kembali dari form-post, dan kemudian kami membentuk kembali data itu dan memproyeksikannya kembali ke model tampilan, misalnya pengikat model tampilan dan semacamnya ... kami kemudian memproyeksikan dari model tampilan kembali ke bisnis- model ... kami kemudian menggunakan pemetaan obyek-relasional (atau pekerjaan kasar) untuk mengubah data dari model-tampilan dan memproyeksikannya ke database relasional ...
Apakah ini mulai terdengar berlebihan? Pada titik selama semua kegilaan ini apakah kita benar-benar mencapai sesuatu yang bermanfaat? Dan maksud saya, sesuatu yang nyata - sesuatu yang dapat dipahami dan diperhatikan oleh pengguna akhir. Pada akhirnya, jam yang Anda habiskan benar-benar membangun sesuatu yang bahkan dapat dipahami pengguna, adalah satu-satunya jam yang dihabiskan dengan baik. Yang lainnya adalah efek samping.
Saya ingin bahasa yang sangat dinamis. Write / compile / run-cycle adalah pemborosan waktu yang membosankan. Idealnya, bahasa harus mencari tahu apa yang berubah, dan mengkompilasi / memuat secara transparan, di latar belakang, sesuai kebutuhan.
Idealnya, Anda bahkan tidak perlu menekan "run" - sesuatu harus terjadi di layar, saat Anda membuat perubahan, segera mencerminkan perubahan yang Anda buat. Masalah dengan write / compile / run-cycle, atau bahkan dalam hal ini lebih langsung write / run-cycle, adalah bahwa Anda terlalu terputus dari apa yang Anda lakukan - untuk merasa terhubung dengan pekerjaan kami, kami butuh umpan balik segera, hasil instan. Menunggu terlalu lama!
Sekali lagi, saya bahkan tidak tahu apakah ini dapat dilakukan dengan IDE tradisional, atau apakah ini akan membutuhkan jenis antarmuka yang sama sekali baru.
Anda harus dapat menggunakan campuran pengetikan yang lemah dan kuat, apa pun yang paling cocok untuk masalah yang sedang Anda kerjakan.
Keadaan secara umum harus menjadi sesuatu yang dikelola sepenuhnya oleh bahasa untuk Anda. Mengapa Anda harus mengandalkan database untuk kegigihan? Idealnya, saya ingin menentukan jangka hidup variabel apa pun dalam model: satu permintaan web, satu sesi, 24 jam, secara permanen.
Mengapa kita harus memilih antara seluruh rangkaian solusi penyimpanan untuk berbagai media dan masa pakai? - Belum lagi mengubah dan membentuk data agar sesuai dengan masing-masing media; cache browser, database, memori, disk, siapa yang peduli! Data adalah data. Di mana Anda menyimpan data Anda (dan untuk berapa lama) harus menjadi pilihan sederhana, bukan pertempuran melawan para Dewa!
Yah, semoga sukses dengan itu.