Flamboyan


Dmbarbour / wikilon

Dengan demikian, sebuah program yang disingkat beberapa argumen, seperti a, bukan kesalahan - itu hanya tidak menulis ulang lebih lanjut. Selain primitif ini, Awelon memiliki dukungan khusus untuk penyematan data yang efisien - bilangan asli, teks, dan binari. Selanjutnya, programmer dapat menentukan grafik kata asiklik yang diarahkan dalam kamus. Secara keseluruhan, Awelon memiliki tampilan dan nuansa bahasa pemrograman yang berorientasi pada tumpukan. Akselerator adalah bagian penting dari anotasi yang meminta suatu fungsi digantikan oleh padanan bawaan. Namun, untuk penggunaan praktis, Awelon lebih lanjut mendukung Anotasi yang ditunjukkan oleh kata-kata kurung seperti. Akselerator memungkinkan penerjemah atau kompiler untuk memperluas Awelon dengan kinerja primitif. Unicode ditolak baik untuk URL dan karena mudah untuk memiliki penyandian berbeda yang secara visual serupa, yang menghambat debugging. Secara sintaksis, kata-kata Awelon dimaksudkan untuk menjadi ramah URL, berbeda secara visual, dapat disortir, dan mudah dipartisi ke dalam paket dan direktori yang disesuaikan dengan awalan. Namun, layak untuk meningkatkan Penyuntingan Projectional untuk mendukung CJK atau presentasi ikonografi kata dan operator. Namun, evaluasi biasanya menulis ulang kata-kata dengan malas, melestarikan simbol dan struktur yang bermakna manusia, dan menghindari ekspansi eksponensial. Dengan demikian, kita dapat secara transparan memperluas program Awelon menjadi aliran primitif yang terbatas. Karena definisi harus asiklik, loop diekspresikan melalui kombinator fixpoint.Lingkungan pengembangan mungkin mengeluh kepada programmer jika kata ini menghitung nilai yang tidak dikenali sebagai dokumentasi. Dalam beberapa hal, kamus Awelon memberikan kata-kata denotasi sementara lingkungan pengembangan memberikan kata-kata konotasi mereka. Demikian pula, kita dapat mensimulasikan paket definisi privat dengan peringatan ketika kata foo-local- * digunakan di luar foo- *. Sebagai contoh, lingkungan pengembangan terintegrasi mungkin berasumsi bahwa foo-meta-doc harus mendefinisikan dokumentasi untuk. Selain itu: Tergantung pada konteksnya, mungkin lebih nyaman untuk menganggap kata-kata sebagai pengompres aliran program, kata-kata sebagai tautan hypertext dalam sistem file yang cerdas, dan kata-kata sebagai fungsi atau komponen perangkat lunak. Tidak seperti PL konvensional, Awelon mendorong penyematan data - forum, almanak, basis data, teks lengkap buku, dll. Namun, dalam batasan ini, anotasi diberikan semantik informal ad-hoc oleh runtime atau compiler. Artinya, menambahkan atau menghapus anotasi tidak boleh memengaruhi perilaku program yang dapat diamati yang benar. Misalnya, tidak akan mengevaluasi lebih lanjut dan dengan demikian menyebabkan perhitungan gagal dengan cepat. Untuk mendukung berbagai tujuan proyek Awelon, Awelon menentukan representasi kamus standar dengan properti yang nyaman untuk impor / ekspor, versi, berbagi, penskalaan, dll. Kamus awelon dapat secara layak skala ke banyak gigabyte atau terabyte, mendukung representasi terdistribusi, dan mungkin berintegrasi dengan rantai blok. Keterbacaan juga merupakan tujuan, untuk menyederhanakan debugging atau inferensi implementasi.Dalam kasus kamus 'langsung', dimungkinkan untuk melakukan streaming pembaruan melalui jaringan dan kadang-kadang pos pemeriksaan via / secureHash. Pembaruan untuk node tree dalam dilindungi di dekat root, mendukung pembaruan ringan dan set kerja implisit. Juga, kita dapat memeriksa node kamus atau streaming melalui alat pemrosesan ASCII konvensional. Desain ini memberi kami pohon radix gabungan log terstruktur yang persisten di atas penyimpanan yang ditujukan untuk konten. Saat menyinkronkan, kita dapat mengunduh secara bertahap perbedaan dalam kamus node. Dukungan untuk objek besar biner nyaman untuk mengimpor sumber daya data eksternal - data gambar dan suara, basis data CVS, dan sebagainya - dengan tetap mempertahankan versi dan snapshot yang tepat. Penggunaan hash aman memberi kita banyak properti bagus: tidak berubah, asiklik, cacheable, aman, independen penyedia, otorisasi diri, autentikasi, berbagi struktur, penamaan otomatis, ukuran seragam. Dalam beberapa konteks, seperti menyinkronkan dengan kamus jarak jauh, kami mungkin mengunduh hash yang tidak diketahui dengan malas. Secara sosial, ini juga mengalihkan kontrol dari penyedia paket ke pengguna kamus, yang dapat dengan bebas memperluas atau menyesuaikan kode dan membaginya dengan komunitas yang mereka pilih. Sebagai gantinya, saya mendorong pengembang untuk menyukai model distribusi kamus holistik, mengambil inspirasi dari wiki komunitas atau permintaan tarik github. Banyak keuntungan teknis yang dikaitkan dengan paket - berbagi, kompilasi tambahan, hanya mengunduh apa yang kita butuhkan, dll. Distribusi holistik dapat menyederhanakan masalah yang terkait dengan manajemen konfigurasi versi paket dan neraka ketergantungan.Misalnya, entri satu baris / nama paket-secureHash dapat menginstal atau memperbarui versi tertentu untuk seluruh paket. Untuk sistem dinamis, pengembang dapat mengatur bot untuk menyinkronkan paket dari sumber tepercaya. Namun, sistem Awelon dapat mewakili distribusi perangkat lunak berbasis paket dengan menyelaraskan paket dengan awalan kata. Ini mungkin cocok dalam kasus di mana paket melibatkan lisensi atau langganan khusus. Namespaces dapat didukung melalui pengeditan projectional untuk mengurangi verbositas dari nama hirarkis. Namun, untuk kinerja dan proyeksi, kita umumnya akan menghindari penulisan ulang sebuah kata kecuali jika secara heuristik menghasilkan kemajuan yang bermanfaat. Heuristik ini mungkin bergantung pada runtime, dan dipandu oleh anotasi - Anotasi Arity sangat berguna dalam peran ini. Sebaliknya, kami akan mengembangkan beberapa kombinator loop yang sangat berguna sebagai bagian dari kamus kami, mirip dengan untuk atau sementara loop bahasa imperatif, kemudian gunakan itu untuk mengimplementasikan loop spesifik sesuai kebutuhan. Juga, kita bisa mengejar gaya pemrograman berorientasi koleksi, membangun beberapa jenis koleksi umum. Dalam hal itu, referensi penghitungan pengumpulan sampah adalah cocok secara alami dengan operasi penyalinan dan penurunan Awelon yang eksplisit dan struktur nilai asiklik. Implementasi Awelon dapat menggunakan penghitungan referensi atau model lain untuk memulihkan sumber daya memori. Dalam praktiknya, salinan yang dalam dari nilai-nilai besar tidak efisien, jadi kami akan menyukai salinan referensi yang dangkal. Secara teori, kita bisa sangat menyalin nilai dan memulihkan memori saat dijatuhkan.Sebagai contoh, mungkin menyatakan bahwa kita harus memoize fungsi bersama dengan dua argumen berikutnya. Tentu saja, memoisasi tidak memaksakan overhead yang signifikan, terutama dalam konteks argumen paralel atau malas. Runtime akan menemukan atau membuat tabel memoisasi khusus untuk fungsi tersebut. Namun, untuk kesalahan tanpa pemulihan, kami mungkin menggunakan anotasi, yang bertindak sebagai kata yang tidak ditentukan secara eksplisit dan tidak menulis ulang lebih jauh. Ini memungkinkan kesalahan untuk ditangani oleh klien fungsi, bukan menghentikan perhitungan. Galat yang diharapkan seharusnya dimodelkan sebagai nilai balik eksplisit, biasanya melalui tipe penjumlahan. Untuk mendukung tipe data yang buram, kami juga membatasi di mana sealer digunakan, mis. membatasi penggunaan untuk volume foo- * kamus. Ini akan menahan akses tidak disengaja ke data, dan memberikan pengalaman debugging yang lebih baik dengan melampirkan tag simbolik ke nilai. Menegakkan batasan ini adalah trival, dan itu akan secara efektif memberi kita tipe data paket-pribadi. Tipe data buram dapat berfungsi sebagai pendekatan kelas kedua dari tipe data abstrak. Dalam bahasa konvensional, kita mungkin menggunakan sintaks tingkat API yang berbeda untuk parameter statis vs parameter runtime - sehingga invokasi seperti foo => dapat dikomputasi secara statis atau hanya bergantung pada parameter yang ditandai secara statis statis di dalam pemanggil. Ini jauh lebih mudah untuk diperiksa daripada mengetik informasi, dan jauh lebih lemah daripada pemrograman multi-tahap penuh.Dalam contoh ini, saya membangun satu pandangan di atas yang lain, tetapi kami juga memiliki representasi yang dapat dipahami tanpa melihat. Misalnya, jika editor proyek kami tidak memiliki dukungan untuk rasional, pengguna masih akan melihat representasi. Lebih lanjut, jika dirancang dengan cermat, tampilan data kami adalah bentuk normal d, dan ekstensi sintaksis ad-hoc lainnya. Biasanya, proyeksi harus dirancang dalam koordinasi dengan definisi dan Akselerator untuk memastikan proyeksi yang sama dapat digunakan kembali setelah menulis ulang evaluasi. Ini mendukung pemahaman dan kontrol pengguna, memungkinkan pengguna untuk melacak data yang ditampilkan ke sumbernya atau memperluas pemrosesan dengan perhitungan lebih lanjut. Proyeksi yang konsisten untuk input, output, dan perhitungan menengah berkontribusi pada visi Awelon untuk antarmuka pengguna. Widget pemilih warna untuk nilai warna, widget pemilih tanggal untuk nilai tanggal. Di luar proyeksi tekstual, proyeksi grafis layak - formulir dengan slider, kotak centang, dan tombol. Kami dapat memproyeksikan lebih dari beberapa definisi kamus, mungkin memodelkan spreadsheet atau lembar kerja. Dengan mengembangkan beberapa proyeksi khusus, kami dapat secara efektif menyediakan antarmuka pengguna aplikasi. Ekspresi operasi dan awalan operasi dapat menjadi nyaman sejauh mereka mengurangi bersarang secara eksplisit dan berkontribusi pada pengambilan keputusan, keterbacaan, dan keakraban. Mereka mungkin layak dikejar dalam proyeksi tekstual canggih atas kode Awelon.
Apa yang biasanya kita inginkan adalah lebih dekat dengan meninggalkan x pada tumpukan di lokasi yang dapat diprediksi kemudian memastikan setiap cabang tahu di mana menemukannya. Sayangnya, proyeksi ini tidak optimal untuk perilaku kondisional karena akan menyalin x ke setiap jalur sebagai penutup. Untuk mengatasi ini, kita perlu mengintegrasikan ekspresi kondisional yang umum dengan proyeksi variabel lokal. Alternatifnya adalah untuk mengkhususkan analisis tipe untuk model Permintaan di mana permintaan menyertakan label metode statis seperti "draw-to-canvas" sebagai elemen teratas pada stack . Namun, dalam konteks keamanan tipe statis, kami biasanya menginginkan respons bergantung pada permintaan. Tetapi tipe dependen lebih canggih daripada yang saya inginkan dalam banyak kasus. Ini pada dasarnya mendukung sistem tipe tergantung 'ringan' di mana kita hanya bergantung pada informasi statis. Kita dapat lebih lanjut memperkenalkan Urutan Perintah untuk memodelkan objek bersama, dan objek yang dapat berinteraksi dengan jaringan atau perangkat eksternal lainnya. Antara penutupan fixpoint, tipe dependen ringan, proyeksi, dan akselerator, Awelon dapat mendukung sebagian besar pola berorientasi objek. Yang lebih penting, dengan menggunakan objek buram alih-alih representasi konkret seperti trie atau daftar asosiasi, kita dapat dengan tepat mengontrol properti mana dari catatan atau varian dapat diamati. Dengan tingkat akselerasi yang memadai, dan beberapa proyeksi sederhana, kami dapat memperlakukan catatan dan varian sebagai fitur bawaan Awelon.Di Awelon, array dapat dimodelkan sebagai representasi daftar dipercepat, atau sebagai objek dipercepat mirip dengan catatan. Namun, jika sebuah array hanya memiliki satu referensi memori, kita dapat menyelamatkan diri kita dari beberapa masalah dan alih-alih bermutasi di tempat. Secara naif, mengedit array di beberapa offset melibatkan menyalin array dengan mengedit di tempat. Kita bisa mempercepat fungsi untuk mengakses atau mengedit array di beberapa offset. Pengembang dapat secara eksplisit memodelkan struktur data yang persisten ketika mereka menginginkannya, untuk berinteraksi lebih baik dengan penyimpanan, memoisasi, paralelisme, dan kemalasan. Tapi saya percaya kita harus membuat array sederhana, dan mencegah array besar. Untuk mengatasi ini, layak untuk mendukung tabel ephemeron sebagai objek yang dipercepat dengan sifat keamanan tipe khusus. Tabel Ephemeron akan menjadi objek nilai yang menerima permintaan untuk mengalokasikan, membaca, menulis, dan membandingkan 'variabel' buram. Selanjutnya, kita harus membatasi referensi variabel untuk digunakan dengan tabel di mana mereka dialokasikan. Ini agak mirip dengan pengetikan substruktural atau keunikan, tapi saya tidak yakin bagaimana memformalkannya. Untuk dengan setia mengabstraksikan urutan kosong, akan lebih mudah jika pengembalian adalah elemen identitas, seperti pengembalian; Y dan Y; return memiliki perilaku yang dapat diamati sama dengan Y. Secara umum, kami mengasumsikan bahwa setiap perintah X mungkin juga merupakan urutan perintah X1; X2. Untuk perilaku terminal, kami mungkin mengembalikan nilai atau menghasilkan perintah.Untuk menyederhanakan pengecekan tipe statis, kita dapat menggunakan label metode statis seperti "read" vs "fork", mirip dengan bagaimana kita mengusulkan untuk mengetik objek. Urutan perintah harus memiliki model perintah yang sesuai yang menggambarkan perintah dalam hal parameter, jenis hasil yang diharapkan, dan konsekuensi yang diinginkan. Kelemahan pola kelas satu adalah bahwa kita tidak akan memiliki banyak dukungan kompiler untuk mengoptimalkan pencocokan pola, di luar apa yang kita dapat dicapai dengan evaluasi parsial dan optimalisasi fungsi konvensional. Tantangannya adalah untuk mengembangkan proyeksi yang nyaman dan efisien untuk bekerja dengan daftar dan catatan, menangani varian, dan dukungan untuk penjaga pola dan pola aktif. Suatu perhitungan secara implisit akan gagal jika ia menulis ke variabel yang ditugaskan, memasukkan datalock saat dibaca, atau jika suatu subkomputasi bercabang gagal. Variabel penugasan tunggal dan garpu mendukung konkurensi deterministik, memungkinkan kami menunda membaca hingga informasi tersedia. Operator amb memodelkan pilihan non-deterministik, dan menyediakan ruang pencarian kami. Menulis saluran bersama akan melibatkan amb untuk memilih antara menulis vs membaca variabel ekor, beralih ke depan setelah membaca. Misalnya, kita dapat memodelkan saluran sebagai daftar tertaut dengan variabel yang tidak ditugaskan di posisi ekor. Saluran yang dihasilkan akan memodelkan semua kemungkinan input permutasi, termasuk yang interaktif di antara utas.Sebagai contoh, kita dapat memperkenalkan biaya: Nat -> CC v perintah untuk memfokuskan pencarian pada solusi berbiaya rendah, atau asosiasi: v a -> Label -> CC v untuk mendukung label bebas permutasi dan metadata yang dapat diperluas saat menghitung variabel. Kinerja akan mendapat manfaat dari pola desain dan ekstensi model perintah yang memandu pencarian atau dengan cepat menghilangkan pencarian yang tidak relevan. Ini penting untuk berbagai domain masalah - pembelajaran mesin, pengenalan gambar, pemrosesan grafik, simulasi fisika, komputasi ilmiah, dan sebagainya. Komputasi Kinerja Tinggi memerlukan mengambil keuntungan dari GPGPU dan sumber daya komputasi awan. Meskipun ini dapat menghambat beberapa kasus penggunaan, itu mengurangi overhead pengaturan dan memastikan perhitungan dapat diulang, disimpan di cache, dapat dibagi, dan dapat diverifikasi. Ini membatasi kita pada komputasi yang berfungsi murni - deterministik, terbatas, dan independen dari konfigurasi fisik. Sebagai contoh, kita dapat mendorong dua biner yang mewakili matriks titik mengambang, meminta prosesor untuk menggandakannya, kemudian meminta hasilnya sebagai biner lain. Untuk menggunakan perangkat keras GPGPU dari Awelon, kita dapat memodelkan prosesor jarak jauh abstrak yang dikhususkan untuk binari terstruktur. Dengan mendaftarkan kode sebelumnya, kita mendapat manfaat dalam dua cara: kita dapat memanggil kode berkali-kali tanpa mengulangi upaya beban, dan implementasi percepatan kita dari prosesor dapat mengkompilasi dan menyimpan kode untuk perangkat keras fisik. Namun, satu pertimbangan yang sangat penting adalah kemampuan kita untuk mendaftarkan beberapa kode dengan prosesor jarak jauh, sehingga kita dapat memohonnya nanti.Idealnya, kami ingin jenis pesan yang berbeda per port, untuk secara statis melarang membaca dan menulis port kabel, dan mungkin beberapa variasi pada tipe sesi untuk memastikan interaksi tidak akan macet. Seperti model perintah dan tipe antarmuka objek, ini dapat mengambil manfaat dari anotasi khusus dan deskriptor tipe. Tantangan signifikan bagi KPN adalah mengembangkan analisis keselamatan statis yang memadai. Dibandingkan dengan penguncian dan sinyal, ini memberikan cara yang kuat untuk menunggu kondisi yang sewenang-wenang, dan membuatnya relatif mudah untuk menjaga konsistensi sistem. Misalnya, bot pemrosesan aliran mungkin secara sukarela membatalkan jika antrian input kosong atau antrian output penuh. Proses koordinasi tersirat: Pengulangan deterministik atas transaksi hanya-baca atau gagal jelas tidak produktif. Dengan demikian, kita dapat meningkatkan efisiensi sistem dengan menunggu perubahan di antara variabel yang diamati. Dengan penggunaan read-fork yang berulang, kita dapat membentuk pohon dengan loop baca-tulis di dedaunan, perluas bot tunggal menjadi beberapa bot komponen. Ini dimaksudkan untuk digunakan dalam pola read-fork, di mana operasi dapat diulangi hingga variabel yang diamati oleh transaksi induk berubah. Catatan: Jika garpu digunakan dari transaksi baca-tulis, saya mengusulkan untuk membatalkan transaksi dan memperingatkan programmer. Operasi garpu menentukan operasi 'satu kali' untuk mencoba dalam urutan yang tidak ditentukan setelah komit. Penggunaan assoc mudah digunakan untuk deklarasi variabel dari transaksi read-fork.Dalam kasus umum, kita dapat memodifikasi definisi bot saat runtime, yang mendukung pemrograman langsung, penyebaran berkelanjutan, dan administrasi sistem. Ini memastikan bahwa serangkaian perilaku aktif dalam sistem Awelon mudah ditemukan, dikelola, dan diperluas. Respons ditulis kembali ke lingkungan - lokasi biasanya akan ditentukan dalam permintaan. Efek, seperti akses jaringan, dicapai melalui manipulasi variabel lingkungan tertentu. Lingkungan yang khas mungkin mendukung akses jaringan, sistem file atau database pseudo, layanan waktu untuk menunda operasi sederhana, refleksi atas kamus, registri bersama sehingga bot dapat publikasikan 'layanan' untuk bot lain, dan sebagainya. Keadaan apa pun yang harus selamat dari transaksi harus ditulis ke lingkungan ini. Subset variabel dapat didukung oleh toko yang tahan lama, mis. variabel sistem file semu atau database kami, mirip dengan file yang dipetakan memori. Ada manfaat kinerja yang signifikan ketika kita menunda serialisasi - yaitu kita menjaga representasi yang dipercepat, paralelisme, linieritas. Untuk kasus-kasus tersebut, kami dapat mendukung permintaan sinkronisasi eksplisit untuk memastikan penulisan dilakukan. Lebih lanjut, lingkungan fana dapat dengan aman 'diatur ulang' setelah memasuki kondisi buruk.Beberapa layanan ini akan ditujukan untuk bot lain, tetapi kami juga akan mendaftarkan layanan yang akan berinteraksi dengan pengguna untuk mendapatkan proyeksi lingkungan. Ini mendukung integrasi yang ketat antara variabel proyeksi dan yang dibuat bot, antarmuka aktif dengan notifikasi, dan model keamanan sederhana sejauh administrator membatasi bot dan bot membatasi pengguna yang lebih rendah. Selanjutnya, bahkan sebelum melakukan, setiap kali kita melakukan pengeditan kita harus dapat untuk secara reaktif mengamati perubahan di setiap jendela lain yang bergantung pada variabel yang dimodifikasi. Artinya, pengguna harus dapat melakukan pembaruan di banyak jendela kemudian 'komit' semuanya. Pengguna akan dapat berinteraksi dengan beberapa proyeksi, mis. di beberapa widget atau jendela. Ini mendukung ekstensi antarmuka pengguna yang ringan dan kuat dengan tampilan alternatif, pengontrol, makro, dll. Ini juga menyederhanakan debugging - antarmuka debugger pada dasarnya hanyalah ekstensi UI lainnya. Tentu saja, akan ada banyak perancah dan bootstrap diperlukan sebelum kita mencapai tingkat di mana kita dapat mendefinisikan semua antarmuka melalui bot melalui basis kode Awleon. Sementara itu, kita harus mengembangkan lingkungan pengembangan khusus ad-hoc, yang sebagian besar fokus pada proyeksi di atas kamus. (source)