Pull to refresh

Comments 33

JavaScript на высоте и по данным GitHub. В 2018 году этот язык стал первым не только по количеству контрибьюторов, но и по числу новых репозиториев на GitHub

Кто бы мог подумать

image

Реальность такова, что typescript уже должен стать дефакто. Не понимаю почему этого ещё не произошло. Энтерпрайз в любом случае за c#. Питон… Питон должен резко взлететь, так как его пропагандируют как скриптовый язык для набирающей популярность различной аналитики, ботов и нейросетей. То есть, как ЯП для приложений он не будет популярен. Все остальное — поровну и по различным причинам, но не в серьез. То есть, если какая-то крутая компания имеет 98% кода на c# и потом говорит что что-то написала на go от скуки, то к сожалению, найдутся такие, которые трактуют это как — весь мир спешит перейти на go. И масла в огонь как всегда подольют школы, которые только и рады что у них появятся новые клиенты, которым они будут хелпы пересказывать.
Какой то у вас энтерпрайз прогресивный — С#… У нас только телеком на нём едет. Остальные на Java.

Да все просто с питоном — на западе его учат в качестве первого ЯП в школах и университетах.

У нас его тоже активно пропагандируют в качестве первого. Утром сегодня обозрел книжные полки с компьютерной литературой в «Буквоеде» — в любой книжке по программированию для начинающих — питон.
Тогда почему у нас учат, Pascal, а ни Паскаля, ни Дельфи на графике нет и подавно?
UFO just landed and posted this here
У нас тоже паскаль во всех универах преподавали.

В Тайпскрипте нет сильной типизации, как и в Джаваскрипте.

UFO just landed and posted this here

Тем не менее, это не сильная а слабая типизация, поскольку типы необъязательны.

UFO just landed and posted this here

Сильная типизация — это когда каждая переменная имеет свой тип во время выполнения, и попытка записать туда значение другого типа (без приведения типов) вызовет ошибку.


В Джаваскрипте типизация динамическая, тип переменной определяется типом текущего записанного туда значения.


Тайпскрипт добавляет в джаваскрипт аннотации типов, которые, тем не менее, не могут изменить динамическую природу языка. Там можно кастовать все в any и записывать что угодно во что угодно, даже включив все флаги компилятора.


Пишу это, потому что это важно понимать тем, кто изучает тайпскрипт, и хочет понять мотивацию, например, его системы типов.

Сильная типизация — это когда каждая переменная имеет свой тип во время выполнения, и попытка записать туда значение другого типа (без приведения типов) вызовет ошибку.
Ну это же совсем не так. По вашему определению сильной типизации нет даже у С++, т.к на этапе выполнения там даже не возможно отделить код от данных, не то что понять где какие типы.
UFO just landed and posted this here
сильная типизация, если проверка типов не выключена в конфигурации компилятора.

Конфигурация компилятора тут не причем, сильная типизация у TS, только в том случае если разработчик явно определил типы в коде.


const a: number = 1;
const b: string = '1';

const c = 1;
const d = '1';

// неявное преобразование типов - слабая типизация.
console.log(c == d);
// неявное преобразование невозможно - сильная типизация
console.log(a == b);



Т.е. для сильной типизации необходимо чтобы некое условие выполнялся(причем в коде), для слабой нет, следовательно у TS в первую очередь слабая типизация.

UFO just landed and posted this here

Ок, это был неудачный пример, вот посмотрите на это:


function f(a, b) {
  return a == b;
}

console.log(f(1, '1'));

«Да, мы можем выключить проверку типов в tsc. И мы может вообще не указывать типы, указав после каждой переменной any. Следовательно, в TypeScript слабая типизация»

Нет, мы можем не указывать типы, и на это не требуется усилия.


Вы приписываете мне выдуманные фразы, и спорите с этим, не хорошо.




Напомню, речь идёт лишь о такой возможности, и о том что физически легче получить слабую типизацию, чем сильную.
Вы не согласны с этим?


Мне интересно, вы вообще используете TypeScript на практике?
Дело в том, что в вашем примере на оба сравнения компилятор указал как на ошибку. =)

Дело в том, что это хабр, и псевдокод вполне уместен.
Спасибо за указывание на ошибку, кстати.

UFO just landed and posted this here
Для написания корретного TS кода вы должны (must) явно руками указать
либо «пофиг на тип»: any, либо должны (must) указать компилятору явно руками allowJS: true

Выше описанный пример компилируется в стандартной конфигурации, следовательно, разработчик не должен указать типы, и это будет корректный TS код.


--


Кроме того, тот же пример компилируется даже с allowJS: false, по крайней мере в версии компилятора 3.2.4.


--


Либо у вас TS из параллельной вселенной, либо я что то не понимаю.


Приведите пожалуйста пример конфигурации, в котором типы обязательны (чтобы нужно было хотя бы any написать, но явно).

UFO just landed and posted this here

Тут есть небольшая путаница в терминологии:


  • Статическая типизация — типы проверяются при компиляции.
  • Динамическая типизация — типы проверяются во время выполнения.

Тут уже менее четкое разделение:


  • Сильная типизация — тип значения переменной определен, и во время выполнения программы не изменяется
  • Слабая типизация — одно и то же значение может интерпретироваться как разные типы

Тайпскрипт добавляет опциональную статическую типизацию — она действует только во время компиляции. Но во время выполнения тайпскрипта уже не существует, и типизация динамическая и слабая, как в джаваскрипте.


Тайпскрипт привносил бы сильную типизацию только в том гипотетическом случае, если бы он генерировал код проверок типов во время выполнения (чего он не делает).

UFO just landed and posted this here
Разницу между а) исходным текстом и б) результатом компиляции уловили?

Спасибо, вы мне просто как глаза открыли.


Для компилируемых языков типа TS проверка переменных на соотвествие типов производиться только на этапе компиляции.

Но нет гарантии, что типы, выведенные при компиляции, будут такими же и во время выполнения. Поэтому в тайпскрипте (как, кстати, и в С++) — типизация слабая (но статическая). А, например, в C# (без неуправляемого кода) — типизация сильная.


Напомню, что изначальная дискуссия была по вопросу, есть ли в тайпскрипте сильная типизация.


На этом дискуссию завершаю, ваш хамский тон и отношение к собеседникам, как к дуракам, мне неприятно.

UFO just landed and posted this here
UFO just landed and posted this here
Реклама Go на фоне приведенных данных выглядит неуместно.
UFO just landed and posted this here
Даже на 1с тысяч 50 программистов и «программистов» наберется, а ведь это чисто локальный игрок, причем не сказать что у нас много населения, и 1с не единственный игрок. 325000 на весь мир это действительно очень мало, учитывая что общее количество исчисляется, вроде как, десятками миллионов.
Sign up to leave a comment.