Метафора про компиляцию :)

Главная Форумы Разработка игр Метафора про компиляцию :)

Просмотр 5 веток ответов
  • Автор
    Сообщения
    • #2522

      Привет, ребята!

      Я вот недавно объяснял приятелю, что называется «на пальцах» что такое «компиляция», статическая типизация и анализ типов, может кому-то мое объяснение пригодится.

      Грубо говоря программа,- это как конвейер по сборке автомобилей. На вход в конвейер подаем «сырье» (данные, ввод пользователя), а на выходе получаем «тачку» (результат рассчетов, отрисованную картинку, игру и тп).

      Так вот компиляция,- это считай проектирование и расстановка функциональных единиц в этом конвейере.
      А контроль типов и статическая типизация в отличие от динамической позволяют на этапе проектирования (компиляции) конвейера понять что где-то закралась ошибка. В отличие от динамической типизации когда специалисты по электрике придут и обнаружат, что их заставляют работать над сборкой двигателей.

    • #2524

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

      В системе со статической компиляцией — это будет сделано на этапе компиляции (проектирования конвейера).
      В системе с динамической типизацией — это будет сделано во время выполнения (когда рабочие в начале рабочего дня или после обеда придут на рабочее место и возопят: Че за!?)

    • #2542
      Ermitash
      Участник

      Как раз проверим правильно ли я понимаю. Компиляция- это перевод всего нашего написанного кода в машинный язык, то есть 0 и 1. По поводу типизации, при статической у нас ошибка на этапе компиляции отлавливается, а при динамической при работе уже.
      Пример:
      class A
      {
      public:
      int a;
      int*b;

      A()
      {
      a=*b;
      }
      }

      int main()
      {
      A static;
      A* dynamic = new A();
      return 0;
      }

      До динамика по сути не должно дойти, при компиляции выдаст ошибку на static. Однако, если закомментить static, то прога откомпилится и тогда произойдет ошибка при выполнении программы.

    • #2545

      Из твоего сниппета не оч. понятно где должна быть ошибка :)
      На сколько я помню, например, в C# 4.0 есть dynamic, который примерно так работает:

      int a = 10;
      dynamic b = «string»;
      dynamic c = b + a;
      // во время компиляции ошибки быть не должно, а в runtime — упадет.
      Код примерный, я не оч. помню как это работает в C# 4. Тоесть в динамической типизации — ошибка диагностируется при попытке выполнить операцию над объектом типа.

    • #2555
      Ermitash
      Участник

      Ды я в C++ его создал. Пока c# не пользуюсь на уровне dynamic

    • #2581

      В С++? Не оч. понял — динамической типизации в плюсах нет, на сколько мне известно) А твой код вроде должен компилироваться…

Просмотр 5 веток ответов
  • Для ответа в этой теме необходимо авторизоваться.
Понравилась статья? Поделиться с друзьями:
Пишет статьи о разработке игр. Не инди, — работает рендеринг-программистом в крупной ААА студии в Санкт-Петербурге. Большой поклонник игр Naughty Dog.