Цитата:
Сообщение от Kиpa
Мой вопрос относится к вещам очевидным и фундаментальным, но я все никак не могу этого понять - ведь все как будто по умолчанию это знают, и даже не написано об этом нигде.
|
Начните изучать программирование - сразу всё поймёте. Ваши вопросы демонстрируют незнание основ информатики, а ведь "уметь программировать" и "знать пару языков программирования" - это очень разные вещи.
Если говорить про грань между языками программирования, то она проходит там же, где грань между Пушкиным и Пелевиным. Вроде, буквы одни и те же, но вот результат - разный.
Как минимум, у разных языков программирования разный синтаксис (что это такое - должны учить в школе на уроках русского языка). Кроме того, есть понятие
парадигмы программирования: сейчас самые известные и часто используемые яызки объектно-ориентированные, но это не значит, что других не существует.
Дальнейший вопрос показывает, что Вы и не пытались запустить программу на C, написанную в блокноте.
Попробуйте переименовать txt-файл в exe, и ясно увидите, что никакое волшебство тех в программу не превратит
Ах, Вы написали "скрипт" - но это в корне неверно, ведь скрипт - это (обычно) то, что выполняется неким
интерпретатором, а C и Паскаль всё-таки
компилируемые языки.
Итак, Вы написали в блокноте программу на C++. Как уже говорилось, простое переименование в экзешник ее не запустит - как раз потому, что в системе нет никаких предустановленных языков программирования (впрочем, в современных оперционках - есть, но пока речь о базовых принципах). Компьютер сам по себе работает только с программами, написаными только на одном языке - в
машинных кодах (т.н. native-код). Чтобы превратить программу из текста в этот код, и существуют компиляторы. Вы берете компилятор C++ или Паскаля, даете ему на вход программу на соответствующем языке - и на выходе получаете тот самый экзешник с native-кодом. Естественно, компилятор C++ кода на Паскале не поймёт, как и наоборот - в этом этапе и заключается волшебный момент перехода от текстового файла с одинаковыми символами к программе на определенном языке программирования.
Надеюсь, понятно, что говорить о том, что программы на разных языках запускаются через один exe - не верно. Хотя в современном мире всё не так просто. Помимо компилируемых в native-код, существуют ещё интерпретируемые языки программирования, в частности - как раз для написания скриптов (впрочем, грань между "скриптом" и "полноценной программой" размыта. В этом случае - да, в системе должен быть установлена программа под названием "интерпретатор", которая и будет выполнять код "на лету", без компиляции. Так работает, например, JavaScript, исполняемый (обычно) браузерами. Это не значит, что интерпретируемый язык нельзя скомпилировать в exe, но обычно полученный таким образом код будет содержать ссылку на интерпретатор и без его установки всё равно запуститься не сможет.
Впрочем, и компилируемые программы сейчас зависят от тонн библиотек, без которых они работать не смогут. Вот так всё сложно.
Наконец, есть и промежуточный класс - языки, которые компилируются не в native-код, а в
байт-код. Самые известные - Java все языки платформы .NET. В таком случае обычно говорят не о конкретных языках, а именно о платформе, поскольку языки компилируются в некий более простой - но всё равно не машинный - код, который при исполнении интерпретируется. Преимущества и недостатки всех подходов предлагаю гуглить или смотреть википедию.
Вопрос "зачем нужны все языки" похож на вопрос "зачем нужны разные операционные системы", да и вообще "зачем нужно разное что-то там". Разные языки предназначены для разных целей, на одних удобнее и эффективнее выполнять одни задачи, на других - другие. Плюс никто не отменял эволюции, языки эволюционируют от простых "приятностей" над машинным кодом (ассемблер) до мощнейших платформ, которые делают за программиста 99% рутинной работы.
Цитата:
Почему не объединить все те языки, которые используются, в один общий, через который уже будут при необходимости обрабатываться необходимые данные?
|
Именно это и называет байт-код, когда, скажем, несколько языков, поддерживаемых платформой .NET, компилируются в
CIL, который уже исполняется в рамках того самого .NET Framework, который нужно установить для исполнения .NET-приложений.
Надеюсь, общая схема понятна, дальше - гугл.