Her şey donanımdan geliyor.
Bayt, çoğu donanımdaki adreslenebilir en küçük bellek birimidir.
Az önce bahsettiğiniz her tür, birkaç bayttan oluşur.
Bir bayt 8 bittir. Bununla 8 boolean ifade edebilirsin ama tek seferde sadece bir tane arayamazsın. 1 adresiniz, 8 adresinin tümünü ele alıyorsunuz.
Eskiden bu kadar basitti ama sonra 8 bitlik bir otobüsten 16, 32 ve şimdi 64 bitlik bir otobüse geçtik.
Bu, bayt düzeyinde hala adresleme yapabiliyor olsak da, komşu baytlarını almadan artık tek bir baytı bellekten alamayacağımız anlamına gelir.
Bu donanımla karşı karşıya olan dil tasarımcıları, donanıma uyan tipleri seçmemize izin veren türleri seçmemize izin vermeyi seçti.
Böyle bir detayın, özellikle herhangi bir donanımda çalışmayı amaçlayan bir dilde soyutlanabileceğini ve kaldırılabileceğini iddia edebilirsiniz. Bunun gizli performans endişeleri olacaktır, ancak haklı olabilirsiniz. Sadece bu şekilde olmadı.
Java aslında bunu yapmaya çalışır. Baytlar otomatik olarak Ints'e yükseltilir. İçinde herhangi bir ciddi biraz vites değiştirme işi yapmaya çalıştığınızda sizi deli edecek bir gerçek.
Peki neden iyi çalışmadı?
Java'nın büyük satış noktası, bilinen iyi bir C algoritmasıyla oturabileceğiniz, Java'ya yazabileceğiniz ve küçük ayarlarla işe yarayabileceği şekilde geri dönüyor. Ve C donanıma çok yakın.
Bu gidiş ve soyutlama büyüklüğünü ayrılmaz türlerden uzak tutmak birlikte çalışmadı.
Böylece alabilirlerdi. Sadece vermediler.
Belki de programcı birisinin belirli bir boyuttan daha büyük bir sayı kullanabilmesini istemez ve bu da onu sınırlandırmasına izin verir.
Bu geçerli bir düşünce. Bunu yapmanın yöntemleri var. Kelepçe fonksiyonu biri için. Bir dil, türlerine keyfi sınırlar getirecek kadar ileri gidebilir. Ve bu sınırlar derleme zamanında bilindiğinde, bu sayıların nasıl saklandığına dair optimizasyonlara izin verir.
Java sadece o dil değil.