Оригінальний твіттер тут. :)
По-перше, я трохи розвеселений / шокований, що мій твіт так сприймається серйозно! Якби я знав, що це буде широко розповсюджений, я витратив би більше 30 секунд на його написання!
Тіаго Сільва правильно зазначає, що "статичні" та "динамічні" точніше описують перевірку типу , а не системи типів . Насправді сказати, що мова є статично чи динамічно введеною, не дуже точно. Швидше, мова має систему типів, і реалізація цієї мови може примусити систему типів використовувати статичну перевірку, або динамічну перевірку, або те і інше, або жодне (хоча це не буде дуже привабливою мовною реалізацією!).
Як це буває, існують певні типові системи (або особливості систем типів), які піддаються статичній перевірці, і є певні системи типів (або особливості систем типів), які більше піддаються динамічній перевірці. Наприклад, якщо ваша мова дозволяє вказувати в тексті програми, що певне значення завжди повинно бути масивом цілих чисел, тоді досить просто написати статичну перевірку для перевірки цього властивості. І навпаки, якщо у вашій мові є підтипи, і якщо це дозволяє скидання каналу, то перевірити обґрунтованість перерви вниз під час виконання досить просто, але це надзвичайно важко зробити під час компіляції.
Що я дійсно мав на увазі під своїм твіттом, це просто те, що переважна більшість мовних реалізацій виконують деяку кількість динамічної перевірки типу. Або, що рівно, переважна більшість мов мають деякі особливості, які важко (якщо не неможливо) статично перевірити. Одним із прикладів є придушення мов. Інші приклади включають арифметичне переповнення, перевірку меж масиву та перевірку нуля. Деякі з них можна статично перевірити за певних обставин, але за великим рахунком, вам важко буде знайти мовну реалізацію, яка не проводить перевірки під час виконання.
Це не погано. Це лише зауваження, що існує багато цікавих властивостей, які ми хотіли б застосувати до наших мов, і що ми не знаємо, як статично перевірити. І це нагадування, що відмінність типу "статичні типи" від "динамічні типи" не є настільки чіткими, як деякі люди вважають, що ви вірите. :)
Останнє зауваження: терміни "сильний" і "слабкий" насправді не використовуються в дослідницькій спільноті мови програмування, і вони насправді не мають послідовного значення. Взагалі, я виявив, що коли хтось каже, що мова має "сильне введення тексту", а якась інша мова має "слабке введення тексту", вони дійсно говорять, що їх улюблена мова (та, яка має "сильне введення тексту") заважає їм роблячи деяку помилку, що інша мова (та, яка має "слабкий набір тексту") не робить, або, навпаки, що їх улюблена мова (та, яка має "слабкий набір тексту") дозволяє їм робити якісь речі, що інша мова ( той із "сильним набором тексту") не робить.