Категории типизаций в языках программирования

w4nesz

Заблокирован

w4nesz

Заблокирован
Не в сети
30 Сен 2019
123
44
  • w4nesz

  • Языки программирования по типизации принято делить на два больших лагеря — типизированные и нетипизированные (бестиповые). К первому например относятся C, Python, Scala, PHP и Lua, а ко второму — язык ассемблера, Forth и Brainfuck.

    Так как «бестиповая типизация» по своей сути — проста как пробка, дальше она ни на какие другие виды не делится. А вот типизированные языки разделяются еще на несколько пересекающихся категорий:

    • Статическая / динамическая типизация. Статическая определяется тем, что конечные типы переменных и функций устанавливаются на этапе компиляции. Т.е. уже компилятор на 100% уверен, какой тип где находится. В динамической типизации все типы выясняются уже во время выполнения программы.

      Примеры:
      Статическая: C, Java, C#;
      Динамическая: Python, JavaScript, Ruby.

    • Сильная / слабая типизация (также иногда говорят строгая / нестрогая). Сильная типизация выделяется тем, что язык не позволяет смешивать в выражениях различные типы и не выполняет автоматические неявные преобразования, например нельзя вычесть из строки множество. Языки со слабой типизацией выполняют множество неявных преобразований автоматически, даже если может произойти потеря точности или преобразование неоднозначно.

      Примеры:
      Сильная: Java, Python, Haskell, Lisp;
      Слабая: C, JavaScript, Visual Basic, PHP.

    • Явная / неявная типизация. Явно-типизированные языки отличаются тем, что тип новых переменных / функций / их аргументов нужно задавать явно. Соответственно языки с неявной типизацией перекладывают эту задачу на компилятор / интерпретатор.

      Примеры:
      Явная: C++, D, C#
      Неявная: PHP, Lua, JavaScript
    Подробнее можно почитать тут:
     
    • Мне нравится
    Реакции: Lekss26