Як і в багатьох аспектах дизайну мови, мова йде про компроміс елегантності щодо продуктивності (не кажучи вже про деякий історичний вплив з попередніх мов).
Альтернативи
Звичайно, можна (і досить просто) скласти мову програмування, яка має лише один тип натуральних чисел nat
. Практично всі мови програмування, що використовуються для академічного вивчення (наприклад, PCF, System F), мають цей тип єдиного числа, який є більш елегантним рішенням, як ви думали. Але мовний дизайн на практиці не лише в елегантності; ми також повинні враховувати ефективність (ступінь, в якій розглядається продуктивність, залежить від передбачуваного застосування мови). Спектакль містить як часові, так і просторові обмеження.
Космічні обмеження
Дозволяючи програмісту вибирати кількість байтів наперед, це може заощадити місце в обмеженій пам'яті програмах. Якщо всі ваші числа будуть менше 256, то ви можете використовувати в 8 разів більше byte
s, ніж long
або використовувати збережений сховище для складніших об'єктів. Стандартний розробник програм Java не повинен турбуватися про ці обмеження, але вони все-таки придумуються.
Ефективність
Навіть якщо ми ігноруємо простір, ми все ще обмежені процесором, який має лише інструкції, що працюють на фіксованій кількості байтів (8 байт на 64-бітній архітектурі). Це означає, що навіть надання єдиного 8-байтового long
типу зробило б реалізацію мови значно простішою, ніж наявність необмеженого типу натурального числа, маючи можливість відображати арифметичні операції безпосередньо в одній базовій інструкції процесора. Якщо ви дозволите програмісту використовувати довільно великі числа, то одна арифметична операція повинна бути відображена на послідовність складних інструкцій машини, що уповільнить програму. Це пункт (1), який ви виховували.
Типи з плаваючою комою
Поки що обговорення стосувалося лише цілих чисел. Типи з плаваючою комою - складний звір, з надзвичайно тонкою семантикою та крайовими корпусами. Таким чином, навіть якщо ми могли б легко замінити int
, long
, short
і byte
за допомогою одного nat
типу, то не ясно , що тип чисел з плаваючою точкою , навіть є . Очевидно, вони не є реальними числами, оскільки реальні числа не можуть існувати в мові програмування. Вони теж не зовсім раціональні числа (хоча, за бажанням, створити раціональний тип прямолінійно). В основному, IEEE вирішив вирішити якоюсь мірою приблизні реальні цифри, і всі мови (і програмісти) були з ними до цього часу.
Нарешті:
Можливо, програміст не хотів би, щоб хтось міг використовувати більшу кількість, ніж певний розмір, і це дозволяє їм обмежити це.
Це не вагома причина. По-перше, я не можу придумати жодної ситуації, в якій типи могли б природним чином кодувати числові межі, не кажучи вже про астрономічно низькі шанси, що межі, які програміст хоче застосувати, точно відповідали б розмірам будь-якого з примітивних типів.