Я пытаюсь понять, как эти языки работают под капотом.К сожалению, я читаю только очень поверхностные вещи.Я суммирую то, что я уже знаю, я был бы очень рад, если бы вы могли исправить меня, и, прежде всего, помогите мне улучшить мои маленькие кусочки полусознания.
C ++:
Компилятор C ++ предварительно обрабатывает все исходные файлы.Это означает, что он на самом деле вставляет строки в те места, где макросы изначально.После этого он создает файл .obj для каждого исходного файла, содержащий независимый от машины байт-код.Затем компоновщик связывает все внешние файлы .obj из библиотек с пользовательскими файлами .obj и объединяет их в .exe.
Java:
Java-код компилируется в независимый от компьютера "bytecode ", который находится в файлах .class, которые, в свою очередь, могут находиться в файлах .JAR, которые запускаются на JRE.Виртуальная машина просто выполняет очистку от мусора.Код Java компилируется точно в срок, как C #, но с оптимизацией горячей точки, разработанной SUN.
C #:
Практически так же, как Java?Исходный код C # компилируется в код CIL (Common Intermediate Language), который все еще доступен для чтения человеком.Этот код будет выполняться CLR Just-in-Time.Эта компиляция превращает методы в машинно-специфический код, когда они впервые вызываются.
Я на самом деле интересуюсь почти каждым языком ... но Java и C # почти одинаковы, и мне всегда было интересно, как дифференцировать,А С ++ - это, так сказать, «классика».Отец обоих без какой-либо виртуальной машины.Спасибо за помощь!
edit: Я знаю, что это обширная тема, но я действительно не мог найти никаких твердых знаний.Если у вас есть ссылки или книги, объясняющие подобные вещи, я с удовольствием пойду на работу.Я попытался прочитать спецификации / технические документы SUN для виртуальной машины Java, но сейчас все это слишком глубоко для меня.