Комментарии 33
JavaScript на высоте и по данным GitHub. В 2018 году этот язык стал первым не только по количеству контрибьюторов, но и по числу новых репозиториев на GitHub
Да все просто с питоном — на западе его учат в качестве первого ЯП в школах и университетах.
spectrum.ieee.org/static/interactive-the-top-programming-languages-2018
Дельфи оказался на 31-м месте.
P.S. Можно в этом рейтинге и посмотреть данные по разным классификаторам.
В Тайпскрипте нет сильной типизации, как и в Джаваскрипте.
Тем не менее, это не сильная а слабая типизация, поскольку типы необъязательны.
Сильная типизация — это когда каждая переменная имеет свой тип во время выполнения, и попытка записать туда значение другого типа (без приведения типов) вызовет ошибку.
В Джаваскрипте типизация динамическая, тип переменной определяется типом текущего записанного туда значения.
Тайпскрипт добавляет в джаваскрипт аннотации типов, которые, тем не менее, не могут изменить динамическую природу языка. Там можно кастовать все в any
и записывать что угодно во что угодно, даже включив все флаги компилятора.
Пишу это, потому что это важно понимать тем, кто изучает тайпскрипт, и хочет понять мотивацию, например, его системы типов.
Сильная типизация — это когда каждая переменная имеет свой тип во время выполнения, и попытка записать туда значение другого типа (без приведения типов) вызовет ошибку.Ну это же совсем не так. По вашему определению сильной типизации нет даже у С++, т.к на этапе выполнения там даже не возможно отделить код от данных, не то что понять где какие типы.
сильная типизация, если проверка типов не выключена в конфигурации компилятора.
Конфигурация компилятора тут не причем, сильная типизация у TS, только в том случае если разработчик явно определил типы в коде.
const a: number = 1;
const b: string = '1';
const c = 1;
const d = '1';
// неявное преобразование типов - слабая типизация.
console.log(c == d);
// неявное преобразование невозможно - сильная типизация
console.log(a == b);
Т.е. для сильной типизации необходимо чтобы некое условие выполнялся(причем в коде), для слабой нет, следовательно у TS в первую очередь слабая типизация.
Ок, это был неудачный пример, вот посмотрите на это:
function f(a, b) {
return a == b;
}
console.log(f(1, '1'));
«Да, мы можем выключить проверку типов в tsc. И мы может вообще не указывать типы, указав после каждой переменной any. Следовательно, в TypeScript слабая типизация»
Нет, мы можем не указывать типы, и на это не требуется усилия.
Вы приписываете мне выдуманные фразы, и спорите с этим, не хорошо.
Напомню, речь идёт лишь о такой возможности, и о том что физически легче получить слабую типизацию, чем сильную.
Вы не согласны с этим?
Мне интересно, вы вообще используете TypeScript на практике?
Дело в том, что в вашем примере на оба сравнения компилятор указал как на ошибку. =)
Дело в том, что это хабр, и псевдокод вполне уместен.
Спасибо за указывание на ошибку, кстати.
Для написания корретного TS кода вы должны (must) явно руками указать
либо «пофиг на тип»: any, либо должны (must) указать компилятору явно руками allowJS: true
Выше описанный пример компилируется в стандартной конфигурации, следовательно, разработчик не должен указать типы, и это будет корректный TS код.
--
Кроме того, тот же пример компилируется даже с allowJS: false
, по крайней мере в версии компилятора 3.2.4.
--
Либо у вас TS из параллельной вселенной, либо я что то не понимаю.
Приведите пожалуйста пример конфигурации, в котором типы обязательны (чтобы нужно было хотя бы any
написать, но явно).
Тут есть небольшая путаница в терминологии:
- Статическая типизация — типы проверяются при компиляции.
- Динамическая типизация — типы проверяются во время выполнения.
Тут уже менее четкое разделение:
- Сильная типизация — тип значения переменной определен, и во время выполнения программы не изменяется
- Слабая типизация — одно и то же значение может интерпретироваться как разные типы
Тайпскрипт добавляет опциональную статическую типизацию — она действует только во время компиляции. Но во время выполнения тайпскрипта уже не существует, и типизация динамическая и слабая, как в джаваскрипте.
Тайпскрипт привносил бы сильную типизацию только в том гипотетическом случае, если бы он генерировал код проверок типов во время выполнения (чего он не делает).
Разницу между а) исходным текстом и б) результатом компиляции уловили?
Спасибо, вы мне просто как глаза открыли.
Для компилируемых языков типа TS проверка переменных на соотвествие типов производиться только на этапе компиляции.
Но нет гарантии, что типы, выведенные при компиляции, будут такими же и во время выполнения. Поэтому в тайпскрипте (как, кстати, и в С++) — типизация слабая (но статическая). А, например, в C# (без неуправляемого кода) — типизация сильная.
Напомню, что изначальная дискуссия была по вопросу, есть ли в тайпскрипте сильная типизация.
На этом дискуссию завершаю, ваш хамский тон и отношение к собеседникам, как к дуракам, мне неприятно.
К чему готовиться в 2019 году: тренды в программировании