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

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

В этой теме 5 ответов, 2 участника, последнее обновление  coremission 7 мес. назад.

  • Автор
    Сообщения
  • #2522

    coremission
    Хранитель

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

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

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

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

  • #2524

    coremission
    Хранитель

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

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

  • #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

    coremission
    Хранитель

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

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

  • #2555

    Ermitash
    Участник

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

  • #2581

    coremission
    Хранитель

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

Для ответа в этой теме необходимо авторизоваться.