Mengapa unsigned integer tidak sesuai dengan CLS?
Saya mulai berpikir spesifikasi tipe hanya untuk kinerja dan bukan untuk kebenaran.
sumber
Mengapa unsigned integer tidak sesuai dengan CLS?
Saya mulai berpikir spesifikasi tipe hanya untuk kinerja dan bukan untuk kebenaran.
Tidak semua bahasa memiliki konsep unsigned int. Misalnya VB 6 tidak memiliki konsep unsigned int yang saya curigai mendorong keputusan desainer VB7 / 7.1 untuk tidak menerapkannya juga (sekarang diimplementasikan di VB8).
Kutipan:
http://msdn.microsoft.com/en-us/library/12a7a7h3.aspx
CLS dirancang agar cukup besar untuk menyertakan konstruksi bahasa yang biasanya dibutuhkan oleh pengembang, namun cukup kecil sehingga sebagian besar bahasa dapat mendukungnya. Selain itu, konstruksi bahasa apa pun yang tidak memungkinkan untuk memverifikasi dengan cepat keamanan jenis kode telah dikecualikan dari CLS sehingga semua bahasa yang sesuai dengan CLS dapat menghasilkan kode yang dapat diverifikasi jika mereka memilih untuk melakukannya.
Pembaruan: Saya bertanya-tanya tentang ini beberapa tahun yang lalu, dan sementara saya tidak dapat melihat mengapa UInt tidak akan menjadi jenis keamanan yang dapat diverifikasi, saya kira orang-orang CLS harus memiliki titik potong di suatu tempat tentang apa yang akan menjadi baseline minimum jumlah jenis nilai yang didukung. Juga ketika Anda memikirkan tentang jangka panjang di mana semakin banyak bahasa yang di-porting ke CLR mengapa memaksa mereka untuk mengimplementasikan unsigned int untuk mendapatkan kepatuhan CLS jika sama sekali tidak ada konsep?
Bagian dari masalah, saya curiga, berkisar pada fakta bahwa tipe integer unsigned di C diharuskan berperilaku sebagai anggota cincin aljabar abstrak daripada sebagai angka [artinya, misalnya, jika variabel integer 16-bit unsigned sama dengan nol , decrementing itu diperlukanuntuk menghasilkan 65.535, dan jika itu sama dengan 65.535 maka diperlukan peningkatan untuk menghasilkan nol.] Ada kalanya perilaku seperti itu sangat berguna, tetapi tipe numerik yang menunjukkan perilaku seperti itu mungkin bertentangan dengan semangat beberapa bahasa. Saya akan menduga bahwa keputusan untuk menghilangkan tipe unsigned mungkin mendahului keputusan untuk mendukung konteks numerik yang dicentang dan tidak dicentang. Secara pribadi, saya berharap ada tipe integer terpisah untuk bilangan unsigned dan cincin aljabar; menerapkan operator minus unary ke bilangan 32-bit unsigned harus menghasilkan hasil bertanda 64-bit [meniadakan apa pun selain nol akan menghasilkan bilangan negatif] tetapi menerapkan minus unary ke jenis cincin harus menghasilkan invers aditif di dalam cincin itu.
Bagaimanapun, alasan bilangan bulat unsigned tidak sesuai dengan CLS adalah karena Microsoft memutuskan bahwa bahasa tidak harus mendukung bilangan bulat tidak bertanda tangan agar dianggap "kompatibel dengan CLS".
sumber
Unsigned int tidak memberi Anda banyak manfaat di kehidupan nyata, namun memiliki lebih dari 1 jenis int membuat Anda sakit, jadi banyak bahasa hanya memiliki int yang hangus.
Kepatuhan CLS ditujukan untuk memungkinkan kelas dapat digunakan dari banyak bahasa…
Ingatlah bahwa tidak ada yang membuat Anda patuh pada CLS.
Anda masih bisa menggunakan unsigned int dalam sebuah metode, atau sebagai parms untuk metode privat , karena hanya API publik yang dibatasi oleh CLS.
sumber
Integer yang tidak bertanda tangan tidak sesuai dengan CLS karena tidak dapat dioperasikan antara bahasa tertentu.
sumber