Другие языки программирования и технологии
Разница между языками программирования в работе компилятора?
Т. е. если у нас есть 2 одинаковых программы написанных на разных языках, скорость их работы будет зависеть только от того как и чем откомпилирована программа? И таким образом разница между языками лишь в том, как какой-либо из существующих компиляторов под конкретный язык переведет исходный код в машинный, ведь машинный код универсальный? И если это так, то в чем принципиальная разница конечного машинного кода, переведенного с разных языков в условиях одинаковой ОС.
Не стоит привязывать язык программирования (ЯП) к компилятору. Для одного ЯП может существовать множество компиляторов, каждый из которых может использовать собственные алгоритмы генерации машинного кода. И наоборот, один компилятор может компилировать несколько языков программирования используя один и тот же генератор машинного кода (например, СЛанг - часть проекта ЛЛВМ) . Более того, ничто не мешает написать интерпретатор или виртуальную машину для любого языка. И тогда фраза "Си - самый быстрый ЯП" окончательно теряет смысл (проект СИнт) :)
"ведь машинный код универсальный"
с чего ты это взял???
с чего ты это взял???
Разные компиляторы переведут в различный машинный код. Так как одно и то же может сделать разыми машинными кодами. Кроме того, у разных компиляторов разные возможности по оптимизации написанного даже на том же самом языке .
Всё зависит от того, как написана программа.
Быдлокодер не задумывается об оптимизации, а пишет по принципу "компилится - и фиг с ней".
Ну выделил дофига памяти, накидал бессмысленных циклов, отсортировал "пузырьком" - работает и ладно.
Естественно такой байт-код, полученный после компиляции, будет сильно отличаться от того, что напишет более компетентный программист.
Быдлокодер не задумывается об оптимизации, а пишет по принципу "компилится - и фиг с ней".
Ну выделил дофига памяти, накидал бессмысленных циклов, отсортировал "пузырьком" - работает и ладно.
Естественно такой байт-код, полученный после компиляции, будет сильно отличаться от того, что напишет более компетентный программист.
уровень
программа написанная на высоко-уровневых языках выполняется в десятки и сотни раз медленнее. Но высоко-уровневые языки проще, точнее проще писать индусский код.
программа написанная на высоко-уровневых языках выполняется в десятки и сотни раз медленнее. Но высоко-уровневые языки проще, точнее проще писать индусский код.
Могу точно сказать, что программа написанная на Си, что под Linux, что под Windows будет работать быстрее всех, а на задачах по математическим вычислениям или компрессии-декомпресии данных вообще далеко в отрыве. Машинный код при использовании разных компиляторов будет разный, причем даже для одного языка и тем более на разных платформах (Win,Mac,*nix,Linux). Насчет Java машины определенно могу сказать, что такую тормозную и глючную среду выполнения еще поискать надо, но ее смысл не в скорости поэтому она так полюбилась китайцам.
Как тут уже сказано, что любой код можно оптимизировать под определенный язык и либо выполнить его с меньшими ресурсами либо быстрее.
Как тут уже сказано, что любой код можно оптимизировать под определенный язык и либо выполнить его с меньшими ресурсами либо быстрее.
Принципиальная разница в исполняемых модулях, в основном, заключается в количестве проверок хода выполнения, предотвращающих аварийное зависание или неправильное использование ресурсов системы. Программы выполняются медленнее, зато система или пользователь может прервать выполнение в любое время. А при завершении по ошибке, система сможет дать вполне понятное объяснение прерывания выполнения программы.
Немного позанудствую.
«С++ будет быстрее чем "Ява", т. к. у СИ нету промежуточного звена: "Универсинализация языка".
При этом С++ может быть скомпилирован только например на Виндоус, а "Ява" может быть скомпилирован на всех ОС, т. к. его язык универсален для любых ОС. »
— "Универсинализация языка", на самом деле состоит в том, что для Джавы под большое количество ОС есть так называемая виртуальная машина Java (Java VM, JVM), которая является частью среды выполнения Java (JRE - Java Runtime Environment). Сначала запускается JVM (которая ест оперативную память и ресурсы процессора) , а потом уже в ней запускается скомпилированный из Java байт-код для этой виртуальной машины. Поэтому Джава работает медленнее.
С++ вполне себе работает на Линуксе. Да, надо будет переписать работу с графическим интерфейсом, или вообще всё, если изначально программа писалась под Windows, но C++ нормально компилируется на Linux/Unix тем же gcc.
А теперь по самому вопросу:
Помимо компилируемых языков, есть ещё большое количество интерпретируемых языков, программы написанные на которых выполняются без компиляции.
Как пример, это Javascript, PHP, Perl, Python. Они выполняются интерпретатором, который на лету обрабатывает их, и выполняет указанные инструкции. Из-за этого, программы написанные на интерпретируемых языках, работают медленнее, чем компилируемые.
«С++ будет быстрее чем "Ява", т. к. у СИ нету промежуточного звена: "Универсинализация языка".
При этом С++ может быть скомпилирован только например на Виндоус, а "Ява" может быть скомпилирован на всех ОС, т. к. его язык универсален для любых ОС. »
— "Универсинализация языка", на самом деле состоит в том, что для Джавы под большое количество ОС есть так называемая виртуальная машина Java (Java VM, JVM), которая является частью среды выполнения Java (JRE - Java Runtime Environment). Сначала запускается JVM (которая ест оперативную память и ресурсы процессора) , а потом уже в ней запускается скомпилированный из Java байт-код для этой виртуальной машины. Поэтому Джава работает медленнее.
С++ вполне себе работает на Линуксе. Да, надо будет переписать работу с графическим интерфейсом, или вообще всё, если изначально программа писалась под Windows, но C++ нормально компилируется на Linux/Unix тем же gcc.
А теперь по самому вопросу:
Помимо компилируемых языков, есть ещё большое количество интерпретируемых языков, программы написанные на которых выполняются без компиляции.
Как пример, это Javascript, PHP, Perl, Python. Они выполняются интерпретатором, который на лету обрабатывает их, и выполняет указанные инструкции. Из-за этого, программы написанные на интерпретируемых языках, работают медленнее, чем компилируемые.
Скорость программы зависит:
1.Оптимизации кода.
2.Принципа языка.
3.Скорости компиляции.
Если мы считаем что 2 программы оптимизированы на максимум и скорость компилятора и там и там одинакова, то всё зависит от самого языка.
Вкратце грубый пример:
С++ будет быстрее чем "Ява", т. к. у СИ нету промежуточного звена: "Универсинализация языка". При этом С++ может быть скомпилирован только например на Виндоус, а "Ява" может быть скомпилирован на всех ОС, т. к. его язык универсален для любых ОС.
1.Оптимизации кода.
2.Принципа языка.
3.Скорости компиляции.
Если мы считаем что 2 программы оптимизированы на максимум и скорость компилятора и там и там одинакова, то всё зависит от самого языка.
Вкратце грубый пример:
С++ будет быстрее чем "Ява", т. к. у СИ нету промежуточного звена: "Универсинализация языка". При этом С++ может быть скомпилирован только например на Виндоус, а "Ява" может быть скомпилирован на всех ОС, т. к. его язык универсален для любых ОС.
По сути компилятор преобразовывает код в файл exe. Его работа в этом. Скорость программы вместе с самой программой задает не компилятор а программист. А язык используется для хранения программы. и на нем она создается. В итоге выходит : нет...
Скоро работы зависит - от вашего кода. каждая операция - определенный набор машинных команд. одна и та же функция может быть описана несколькими эквивалентными способами. И в то же время в первом случае - может быть использовано 8 машинных команд, а во втором - 3 команды.
Нужно самому писать, чтобы код был оптимизированным)
Нужно самому писать, чтобы код был оптимизированным)
Похожие вопросы
- Выбор языка программирования для работы
- Какой самый лучший язык программирования, для создания программ? Желательно с компилятором чтоб не мучиться!
- Значит такой вопрос. Для чего нужен компилятор Free pascal. Не я понимаю что это язык программирования и...
- самый лучший язык программирования для создания отличных приложений и компилятор
- Почему нету единого языка программирования чей компилятор компилирует код на любой выбранный язык?
- Как выбрать язык программирования для изучения и будущей работы в хорошей компании?
- Какой язык программирования лучше всего изучать, чтобы потом устроиться на работу?
- А какие языки программирования изучали в 80х и на чём вы их изучали?
- Может ли язык программирования быть одновременно и интерпретатором, и компилятором?
- Хочу создать свой язык программирования и компилятор. Думаете это очень сложно?