Страницы

Поиск по вопросам

Показаны сообщения с ярлыком интерпретатор. Показать все сообщения
Показаны сообщения с ярлыком интерпретатор. Показать все сообщения

воскресенье, 29 марта 2020 г.

Чем отличается компилятор от интерпретатора?

#javascript #компилятор #интерпретатор


JavaScript к какому языку относится? интерпретируемый либо комплируемый?
    


Ответы

Ответ 1



Интерпретатор - программа которая выполняет исходный код по инструкциям(строчно). Компилятор - программа которая анализирует и переводит исходный код в машинный язык программирования и выполняет его.

Ответ 2



JavaScript относится к динамически транслируемым языкам (JIT - Just-In-Time). Т.е. он сначала запускается в интерпретируемом режиме, а потом компилируется в нативный код (т.е. код, исполняемый непосредственно процессором). Вообще разница между компилятором и интерпретатором довольно размыта, но в целом можно считать что основной задачей компилятора является трансляция программы в ассемблер или сразу исполняемый код целевого процессора. Задачей интерпретатора является трансляция в промежуточный код для исполнения виртуальной машиной. Динамические (jit) компиляторы являются некоторой смесью этих двух видов трансляции.

понедельник, 24 февраля 2020 г.

Может ли транслятор работать без интерпретатора или компилятора?

#компилятор #интерпретатор #транслятор


Может ли транслятор работать без интерпретатора или компилятора и почему?
    


Ответы

Ответ 1



Если придерживаться самых распространенных определений транслятора, интерпретатора и компилятора, то да. Транслятор - переводчик с какого-то языка на другой язык. Компилятор - переводчик на некий низкоуровневый язык, в форму подлежащую исполнению. Например в машинный код Интерпретатор - штука которая программу сразу исполняет. Например на некоторой виртуальной машине, а виртуальная машина уже на лету компилирует в машинный код. То есть штука, которая нашу программу переводит скажем с паскаля на javascript, это транслятор, но не компилятор. Если конечно наша машина не предназначена для исполнения сразу javascript. Вообще все эти три понятия на практике очень взаимосвязаны и переплетаются.

Ответ 2



Да, может работать. Транслятор - это техническое средство, выполняющее трансляцию программы. То есть переводит текст программы с одного языка на другой, не более. Компилятор - это тот же транслятор, только переводит код с языка высокого уровня на язык низкого уровня. Поскольку компилятор, это транслятор, то первая часть вопроса не имеет смысла. Интерпретатор исполняет код программы, для транслирования он не нужен.

среда, 5 февраля 2020 г.

Первая JVM для платформы Java SE

#java #jvm #интерпретатор #hotspot


Собственно говоря, сам вопрос кроется в залоговке данной темы. Знаю, что примерно
с 2002 года освной реализацией JVM для платформы Java SE является всем известный канонический
«HotSpot», изначально разработанный компанией «Longview Technologies», которая затем
была поглащена Sun Microsystems. На тот момент времени, вышеуказанная JVM создавалась
для версии 1.3 платформы Java SE. 

А что было раньше? Какая именно JVM использовалась в самых ранних версиях? Официальной
датой релиза самого языка принято считать 23-е мая 1995-го года. Какая же JVM была
наиболее популярна в 1995-1996 годах и вплоть до появления «HotSpot»? Пытался найти
данную информацию в глобальной сети, но ничего не получилось. Также, если позволите,
хотелось бы узнать, на каком языке программирования написано большинство JVM и есть
ли какая-нибудь JVM, которая была написана на чистой Java'е (также интересует ЯП на
котором была написана первая JVM). Благодарю за ответ!
    


Ответы

Ответ 1



Сохранившиеся оригинальные сановские версии JDK/JRE/JVM можно скачать здесь - это версия 1.1, более ранние версии увы не сохранились... HotSpot пошел с версии JDK 1.2, до этого они просто назывались Sun JVM, потом когда Sun начал направо-налево лицензировать разные инкарнации JVM появилась необходимость отделить ее от остальных JVM. Наиболее известная альтернативная инкарнация JVM была JRockit, которую вовсю понужал Bea Systems на своем сервере WebLogic - она вышла по-моему 1998 году - как то так и была настолько хороша, что было модно говорить, что Sun JVM скоро умрет :) Я еще помню версии JVM 0.8/0.9, но уже в 2004 году я их не мог найти Почти все JVM пишутся на смеси C/Java

Ответ 2



JVM HotSpot впервые стала использоваться в Java 1.2 в 1999-м. Судя по всему, у предыдущей виртуальной машины Sun просто не было названия. JVM по имени JVM. Подозреваю, что имя потребовалось тогда, когда Microsoft сделал свою виртуальную машину, с нарушениями JLS и JIT-компилятором. Большинство JVM написаны на C. На Java написана GraalVM.

воскресенье, 2 февраля 2020 г.

Чем глобально отличается текстовый редактор от IDE?

#веб_программирование #ide #sass #notepad++ #интерпретатор


Не пойму в чем глобальное различие IDE и текстового редактора? Согласно википедии
IDE включает в себя текстовый редактор, компилятор или интерпретатор, средства автоматизации
сборки, отладчик. 

Но насколько я понимаю, в интернет-технологиях IDE совсем не нужен, ведь автоматизация
сборки - это что-то типа include, sass, Emmet (что также легко устанавливается и в
качестве плагина для текстового редактора, Хотя как-то пробовал IDE-шку, там по-умолчанию
не было ни sass, ни Emmet), отладчик - это табличка, которая появляется, когда ошибка
в синтаксисе языка (по-моему по-умолчанию в текстовых редакторах встроен), интерпретатор
думаю тут вообще лишний, т.к. самый лучший интерпретатор для интернет-технологий -
это браузер? Или вообще все не так? Или может для интернет-технологий он лишний, но
для обычных десктопных программ очень даже нужен? 
    


Ответы

Ответ 1



В текстовых редакторах нет понятия "проект". Что даёт это понятие: Радикальное ускорение поиска по коду, с помощью индексации текста проекта - это очень важно для больших проектов. На практике это секунда любого поиска по 100Мб текста . Восприятие IDE проекта, как единого целого. В частности самая популярная фича - в коде написано что-то вроде $obj->doSomething() (PHP) ctrl+click на doSomething перебросит вас к телу этого метода doSomething, или к информации о функции, если она встроенная. Возможность выбрать настройки для всего проекта, например кодировку. Подсветка ошибок между несколькими файлами исходников, например вы создаёте метод в классе , аргументы которого отличаются по типу от аргументов класса-предка. В целом подсветка богаче - например скроллбар в PHPStorm может очень много сказать о большом файле с кодом: там отображены ошибки, варнинги, коментарии, TODO, фейлы навигации, git-изменения от HEAD; это очень помогает обозревать код. Богатый автокомплит - начинаете набирать название метода/ф-ии/класса/css-класса, и тут вам точно подсказывают, как-будто за вас знают, что вы хотите сделать. Это очень удобно, и заодно немного обозревает структуру класса у которого вызывается метод. В общем примеров ещё много можно привести - у всех них ноги растут из того, что проект для IDE единое целое, и он его "видит". У текстовых редакторов нет понятия проект - это ключевое различие. Но даже без этого в IDE есть много специфичных полезных фич, например окно "Structure" описывающее структуру класса, открытого в текущей вкладке, например плагин для работы с Git из коробки. Не говоря уже о том, что качественную подсветку синтаксиса делают только специфичные редакторы вроде Notepad++, которые хоть и удобнее использовать как блокнот - но уже граничат с IDE по функциональности. Главная цель IDE - красивенько уместить в вашей голове проект, даже если он большой. Тогда как редактор, даже навороченный - это прежде всего утилита(помошник), подходящая для небольших изменений. Я например в Notepad++ делаю заметки, смотрю лог ошибок(нотпад сам подтягивает изменения в файле - удобно), открываю исходники, обособленные от моего основного проекта, а также копипащу в новые вкладки куски кода - как памятку. В IDE же веду основную работу по проекту.

Ответ 2



Как один из примеров - это понимание структуры ООП. Сейчас я изучаю PHP и пользуюсь netbeans. IDE автоматом подставляет разные значение и подтягивает различные методы из другим файлов, как пример методы из абстрактных классов. При имплементации появляется значок предупреждения о необходимости перегрузки методов. Используя IDE удобно передвигатся по коду, особенно в этом помогут всплывающие подсказки, когда по одному клику перебросит на другой файл с тем же абстрактным классом. IDE понимает и анализирует код на ходу, что дает возможность исправить ошибки, не запуская браузер. Конечно, на маленьких проектах в несколько сот строчек кода хватит возможностей текстового редактора. В других случаях IDE будет незаменима, особенно при написании ООП кода

пятница, 24 января 2020 г.

Алгоритм упрощения математического выражения с переменными

#алгоритм #математика #дерево #интерпретатор


Здравствуйте! Задача - по возможности упростить математическое выражение. Упростить
- значит привести к более короткому виду. Выражение хранится в обратной польской записи,
или в виде дерева. Например, выражение x*2-(x+x) хранится в виде дерева - 

     (-)
     / \
   (*)  (+)
  /  \  / \
(x) (2)(x)(x)


или в ОПЗ - x2*xx+-
Подскажите, какие есть для этого алгоритмы. 
    


Ответы

Ответ 1



Можно попробовать воспользоваться готовым решением wolframalpha API, если это годится для вашей задачи.

Компилятор и интерпретатор. В чем разница?

#компилятор #интерпретатор


Да, да. Это очередной вопрос о разнице между компилятором и интерпретатором ЯП.
Только ответы, которые обычно даются меня не удовлетворяют.

Обычно говорят, компилятор переводит код на каком либо ЯП в исполняемый и уже при
выполнении код сразу выполняется непосредственно процессором. В случае интерпретатора,
в процессе выполнения программы специальная программа интерпретатор считывает исходный
код программы построчно и выполняет его. Шаг за шагом. При этом говорится, что мол
компиляторы не так-то просто еще написать.

Собственно вопрос вот в чем. Если в итоге программа выполняется, то какая в сущности
разница выполняется сразу машинный код, или сначала интерпретатор что-то делает с исходным
кодом, а уже потом выполняет его - в итоге-то процессор выполняет такие же инструкции
машинные. Какая тогда разница? Явно же не в том, что компилятор сохраняет машинный
код в файл заранее, а интерпрететор нет)
Ну допустим я понимаю, что при интерпретации программы с if-ами какая-то часть никогда
может быть и не выполнена, а следовательно не переведена в машинный код. Но, опять
же, наверное не в этом проблема, что сложно перевести все if-ы в машинный код заранее,
то есть скомпилировать код.

Короче, в чем еще отличия и сложности реализации компилятора в отличии от интерпретатора?
    


Ответы

Ответ 1



Отличий два: Интерпретатор не занимается генерацией машинного кода. Вместо этого он вызывает для каждой интерпретируемой команды специальную функцию (являющуюся частью кода интерпретатора), которая и делают всю работу. Компилятор же (как обычный, так и JIT) сначала генерирует машинный код, который затем скармливается процессору для непосредственного исполнения. Компилятор делает всю работу единожды (при сборке программы), а интерпретатор — каждый раз при чтении очередной инструкции. То есть при компилировании накладные расходы выполнения меньше, а следовательно, выше скорость работы конечного кода. Теперь касательно сложности реализации компилятора. Интерпретатор просто берёт и выполняет очередное выражение программы; а как выполнит — тут же забывает про него (разумеется, предварительно сохранив результат). Компилятор же вынужден мыслить более глобально: тут и оптимизации, и межмодульный импорт/экспорт сущностей (ведь программа может состоять из множества файлов исходных кодов). В придачу, компилятор должен придерживаться определённых соглашений и стандартов для взаимодействия с другими инструментами (компоновщиком, к примеру); интерпретатор же является «вещью в себе», делающей всю работу самостоятельно.

Ответ 2



"компилятором и интерпретатором" - не совсем корректный вопрос. Вещи абсолютно разные. Компилятор - преобразует исходный код в исполняемый (машинный, который будет исполняться процессором или какой-нибудь промежуточный, который будет исполняться виртуальной исполняющей средой). Интерпретатор же исполняем исходный код. Видите разницу ? Компилятор преобразует(компилирует), а интерпретатор исполняет(интерпретирует). Возможно вы хотели иначе поставить вопрос: в чем отличие компилируемых яп от интерпретируемых. Разница очевидна: вторые можно исполнять как есть и для это не нужно дополнительных инструментов. Ну в общем попробую подытожить: в конечном счете да, в конечном счете мы имеем изменение состояния процессора, реального физического процессора и к этому сводится исполнение любой программы. Но различия ведь есть: 1) компилируемые языки требуют специальных инструментов (компиляторов), конечный продукт частично защищен и сложно получить исходный код, конечный продукт более компактен , так как состоит из бинарных инструкций, а не из человеко понятных - слов. Конечный продукт исполняется быстрее - ибо он описан инструкция, которые напрямую поддерживаются целевой платформой. 2) интерпретируемый язык исполняется как есть - не требует доп. инструментов для доведения до финального состояния, не защищен - любой может украсть и изменить.... Я понимаю, что написал очевидные вещи. Я просто не понимаю что вы вообще кроме этого хотите услышать. Если про сложность, то компилятор и интерпретатор могут быть одинаково сложны в написании. Если язык сложный, то в любом случае его будет сложно разбирать на лексемы, не важно для какой цели для исполнения или компиляции. Ну лишь тот момент, что перед комплятором всегда будет стоять задача приведения инструкций к какой-то канонической, придуманной не вами форме

четверг, 2 января 2020 г.

Нагрузка PHP-интерпретатора

#php #производительность #интерпретатор


Несколько вопросов к людям, хорошо понимающим работу интерпретатора PHP.


Сказывается ли на скорости выполнения скрипта количество открывающих дескрипторов?
Т.е. в файле смесь из HTML разметки и PHP кода, при этом скажется ли существенно на
производительности, если мы будем открывать и закрывать  на каждой строке?

Этот:
 0 ) {
    echo 'yes';
}
else {
    echo 'no';
}
?>

или

 0 ) { ?>
    


    



Есть ли разница, по скорости выполнения интерпретатором, классического синтаксиса
и альтернативного? 

Т.е. между таким:
 0 ) {
    echo 'yes';
}
else {
    echo 'no';
}
?>

и таким:
 0 ):
    echo 'yes';
else:
    echo 'no';
endif;
?>

вариантами.

Какой из вариантов вывода переменной и результатов функции использует меньше ресурсов,
если вообще есть разница?


Этот:



или этот:


    


Ответы

Ответ 1



0) { echo $e; } else echo $e; } echo '
'.(microtime(1)-$st); $st = microtime(1); for ($i = 0; $i < 1000000; $i++) { ?> 0) { ?> '.(microtime(1)-$st); echo '
'; $st = microtime(1); for ($i = 0; $i < 1000000; $i++) { ?> 0) { ?> '.(microtime(1)-$st); $st = microtime(1); for ($i = 0; $i < 1000000; $i++) { ?> 0) { ?> '.(microtime(1)-$st); echo '
'; ?> Результат: 0.08100700378418 2.4613921642303 ---- 3.0508909225464 2.4576618671417 Последние 2 менялись от "1.5/6" до "4/1", так что скорее одинаковые. А вот первая пара - говорящая) UPDATE, синтаксис 0) { echo $e; } else echo $e; } echo '
'.(microtime(1)-$st); $st = microtime(1); for ($i = 0; $i < 1000000; $i++) { if (1 > 0): echo $e; else: echo $e; endif; } echo '
'.(microtime(1)-$st); echo '
'; ?> 0.089139938354492 0.082063913345337

Ответ 2



По моему это "экономия на спичках" и вряд ли кто-нибудь даст точный и правильный ответ

понедельник, 23 декабря 2019 г.

Почему у некоторых ЯП много компиляторов? [закрыт]

#компилятор #интерпретатор


        
             
                
                    
                        
                            Закрыт. Данный вопрос необходимо конкретизировать. Ответы
на него в данный момент не принимаются.
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            Хотите улучшить этот вопрос? Переформулируйте вопрос,
чтобы он был сосредоточен только на одной проблеме, отредактировав его.
                        
                        Закрыт 3 года назад.
                                                                                
           
                
        
Почему у некоторых языков программирования несколько компиляторов и/или интерпретаторов?
В чем разница между языком и его реализацией? Всегда ли "один язык - одна реализация"
хорошо? Объясните, в чем смысл использования разных реализаций для разных задач?
    


Ответы

Ответ 1



Думаю потому-же, почему и много производителей машин. Или потому-что много, к примеру, стран. Появляется технология, каждый начинает затачивать "под себя". Кто-то добавляет что-то от себя. Какой-то компилятор оптимизирует участки памяти. Какой-то лучше собирает программу для работы на распределенных системах. Итог один - машинный-код. А множество компиляторов зависит скорее всего от "популярности" языка

пятница, 29 ноября 2019 г.

Разница между компилятором и интерпретатором

#компилятор #терминология #интерпретатор


Какая разница между компилятором и интерпретатором? Может ли язык программирования
иметь и компилятор и интерпретатор?
    


Ответы

Ответ 1



Чтобы опеределить разницу, давайте узнаем, что это такое: Компиля́тор — программа или техническое средство, выполняющее компиляцию. Компиля́ция — трансляция программы, составленной на исходном языке высокого уровня, в эквивалентную программу на низкоуровневом языке, близком машинному коду (абсолютный код, объектный модуль, иногда на язык ассемблера). Входной информацией для компилятора (исходный код) является описание алгоритма или программа на предметно-ориентированном языке, а на выходе компилятора — эквивалентное описание алгоритма на машинно-ориентированном языке (объектный код). Википедия Интерпрета́тор — программа (разновидность транслятора), выполняющая интерпретацию. Интерпрета́ция — пооператорный (покомандный, построчный) анализ, обработка и тут же выполнение исходной программы или запроса (в отличие от компиляции, при которой программа транслируется без её выполнения). Википедия Таким образом, можно заключить, что компилятор приобразует исходный код к близкому к машинному коду. Интерпретатор же, позволяет выполнять некоторое представление программы, налету преобразуя в машинный код. Если взять язык java, то он имеет, как компилятор, так и интерпретатор. Компилятор преобразует исходный код в байткод. А байткод в начальной стадии выполнения программы обрабатывается интерпретатором. Компилятор, это отдельная программа javac, интерпретатор же встроен в jvm. Помимо обычного компилятора, в jvm присутствует just-in-time компиляция. т.к. интерпретация довольно медленна, то горячие места в программе компилируются в машинный код jit компилятором, тем самым ускоряя выполнение.

Ответ 2



1) Разница в том, что компилятор преобразует код алгоритмического языка в исполняемый (байт-код либо нативный) код (в пределе - в машинные коды), в то время как интерпретатор самостоятельно распознаёт и выполняет построчно инструкции программного кода. 2) Да, может. Даже древние turbo/quick basic - и те могли. Причём Borland Turbo BASIC был "в одном флаконе", в то время как Microsoft Quick Basic использовал, как и все современные, внешний компилятор. UPD: Наверное, можно ещё сформулировать так: интерпретатор для выполнения программы обязан располагать исходным кодом программы (в исходном либо формализованном виде) на алгоритмическом языке, в то время как компиляция создаёт исполняемый модуль, который не содержит текста программы на алгоритмическом языке. Также, если при компиляции не добавляется отладочная информация, невозможно полное восстановление исходного кода.

Ответ 3



интерпретатор выполняет программу, трансляторы в т.ч. компиляторы преобразуют без выполнения

четверг, 2 мая 2019 г.

Может ли транслятор работать без интерпретатора или компилятора?

Может ли транслятор работать без интерпретатора или компилятора и почему?


Ответ

Если придерживаться самых распространенных определений транслятора, интерпретатора и компилятора, то да.
Транслятор - переводчик с какого-то языка на другой язык. Компилятор - переводчик на некий низкоуровневый язык, в форму подлежащую исполнению. Например в машинный код Интерпретатор - штука которая программу сразу исполняет. Например на некоторой виртуальной машине, а виртуальная машина уже на лету компилирует в машинный код.
То есть штука, которая нашу программу переводит скажем с паскаля на javascript, это транслятор, но не компилятор. Если конечно наша машина не предназначена для исполнения сразу javascript.
Вообще все эти три понятия на практике очень взаимосвязаны и переплетаются.

понедельник, 8 апреля 2019 г.

Первая JVM для платформы Java SE

Собственно говоря, сам вопрос кроется в залоговке данной темы. Знаю, что примерно с 2002 года освной реализацией JVM для платформы Java SE является всем известный канонический «HotSpot», изначально разработанный компанией «Longview Technologies», которая затем была поглащена Sun Microsystems. На тот момент времени, вышеуказанная JVM создавалась для версии 1.3 платформы Java SE.
А что было раньше? Какая именно JVM использовалась в самых ранних версиях? Официальной датой релиза самого языка принято считать 23-е мая 1995-го года. Какая же JVM была наиболее популярна в 1995-1996 годах и вплоть до появления «HotSpot»? Пытался найти данную информацию в глобальной сети, но ничего не получилось. Также, если позволите, хотелось бы узнать, на каком языке программирования написано большинство JVM и есть ли какая-нибудь JVM, которая была написана на чистой Java'е (также интересует ЯП на котором была написана первая JVM). Благодарю за ответ!


Ответ

Сохранившиеся оригинальные сановские версии JDK/JRE/JVM можно скачать здесь - это версия 1.1, более ранние версии увы не сохранились...
HotSpot пошел с версии JDK 1.2, до этого они просто назывались Sun JVM, потом когда Sun начал направо-налево лицензировать разные инкарнации JVM появилась необходимость отделить ее от остальных JVM.
Наиболее известная альтернативная инкарнация JVM была JRockit, которую вовсю понужал Bea Systems на своем сервере WebLogic - она вышла по-моему 1998 году - как то так и была настолько хороша, что было модно говорить, что Sun JVM скоро умрет :)
Я еще помню версии JVM 0.8/0.9, но уже в 2004 году я их не мог найти
Почти все JVM пишутся на смеси C/Java

понедельник, 18 марта 2019 г.

Компилятор и интерпретатор. В чем разница?

Да, да. Это очередной вопрос о разнице между компилятором и интерпретатором ЯП. Только ответы, которые обычно даются меня не удовлетворяют.
Обычно говорят, компилятор переводит код на каком либо ЯП в исполняемый и уже при выполнении код сразу выполняется непосредственно процессором. В случае интерпретатора, в процессе выполнения программы специальная программа интерпретатор считывает исходный код программы построчно и выполняет его. Шаг за шагом. При этом говорится, что мол компиляторы не так-то просто еще написать.
Собственно вопрос вот в чем. Если в итоге программа выполняется, то какая в сущности разница выполняется сразу машинный код, или сначала интерпретатор что-то делает с исходным кодом, а уже потом выполняет его - в итоге-то процессор выполняет такие же инструкции машинные. Какая тогда разница? Явно же не в том, что компилятор сохраняет машинный код в файл заранее, а интерпрететор нет) Ну допустим я понимаю, что при интерпретации программы с if-ами какая-то часть никогда может быть и не выполнена, а следовательно не переведена в машинный код. Но, опять же, наверное не в этом проблема, что сложно перевести все if-ы в машинный код заранее, то есть скомпилировать код.
Короче, в чем еще отличия и сложности реализации компилятора в отличии от интерпретатора?


Ответ

Отличий два:
Интерпретатор не занимается генерацией машинного кода. Вместо этого он вызывает для каждой интерпретируемой команды специальную функцию (являющуюся частью кода интерпретатора), которая и делают всю работу.
Компилятор же (как обычный, так и JIT) сначала генерирует машинный код, который затем скармливается процессору для непосредственного исполнения. Компилятор делает всю работу единожды (при сборке программы), а интерпретатор — каждый раз при чтении очередной инструкции. То есть при компилировании накладные расходы выполнения меньше, а следовательно, выше скорость работы конечного кода.
Теперь касательно сложности реализации компилятора. Интерпретатор просто берёт и выполняет очередное выражение программы; а как выполнит — тут же забывает про него (разумеется, предварительно сохранив результат). Компилятор же вынужден мыслить более глобально: тут и оптимизации, и межмодульный импорт/экспорт сущностей (ведь программа может состоять из множества файлов исходных кодов). В придачу, компилятор должен придерживаться определённых соглашений и стандартов для взаимодействия с другими инструментами (компоновщиком, к примеру); интерпретатор же является «вещью в себе», делающей всю работу самостоятельно.

вторник, 15 января 2019 г.

Нагрузка PHP-интерпретатора

Несколько вопросов к людям, хорошо понимающим работу интерпретатора PHP. Сказывается ли на скорости выполнения скрипта количество открывающих дескрипторов? Т.е. в файле смесь из HTML разметки и PHP кода, при этом скажется ли существенно на производительности, если мы будем открывать и закрывать на каждой строке? Этот: 0 ) { echo 'yes'; } else { echo 'no'; } ?> или 0 ) { ?> Есть ли разница, по скорости выполнения интерпретатором, классического синтаксиса и альтернативного? Т.е. между таким: 0 ) { echo 'yes'; } else { echo 'no'; } ?> и таким: 0 ): echo 'yes'; else: echo 'no'; endif; ?> вариантами. Какой из вариантов вывода переменной и результатов функции использует меньше ресурсов, если вообще есть разница? Этот: или этот:


Ответ

0) { echo $e; } else echo $e; } echo '
'.(microtime(1)-$st);
$st = microtime(1); for ($i = 0; $i < 1000000; $i++) { ?> 0) { ?> '.(microtime(1)-$st); echo '


'; $st = microtime(1); for ($i = 0; $i < 1000000; $i++) { ?> 0) { ?> '.(microtime(1)-$st);
$st = microtime(1); for ($i = 0; $i < 1000000; $i++) { ?> 0) { ?> '.(microtime(1)-$st); echo '
'; ?> Результат: 0.08100700378418 2.4613921642303 ---- 3.0508909225464 2.4576618671417 Последние 2 менялись от "1.5/6" до "4/1", так что скорее одинаковые. А вот первая пара - говорящая) UPDATE, синтаксис 0) { echo $e; } else echo $e; } echo '
'.(microtime(1)-$st);
$st = microtime(1); for ($i = 0; $i < 1000000; $i++) { if (1 > 0): echo $e; else: echo $e; endif; } echo '
'.(microtime(1)-$st); echo '
'; ?>
0.089139938354492 0.082063913345337

понедельник, 8 октября 2018 г.

Разница между компилятором и интерпретатором

Какая разница между компилятором и интерпретатором? Может ли язык программирования иметь и компилятор и интерпретатор?


Ответ

Чтобы опеределить разницу, давайте узнаем, что это такое:
Компиля́тор — программа или техническое средство, выполняющее компиляцию. Компиля́ция — трансляция программы, составленной на исходном языке высокого уровня, в эквивалентную программу на низкоуровневом языке, близком машинному коду (абсолютный код, объектный модуль, иногда на язык ассемблера). Входной информацией для компилятора (исходный код) является описание алгоритма или программа на предметно-ориентированном языке, а на выходе компилятора — эквивалентное описание алгоритма на машинно-ориентированном языке (объектный код). Википедия Интерпрета́тор — программа (разновидность транслятора), выполняющая интерпретацию. Интерпрета́ция — пооператорный (покомандный, построчный) анализ, обработка и тут же выполнение исходной программы или запроса (в отличие от компиляции, при которой программа транслируется без её выполнения). Википедия
Таким образом, можно заключить, что компилятор приобразует исходный код к близкому к машинному коду. Интерпретатор же, позволяет выполнять некоторое представление программы, налету преобразуя в машинный код.
Если взять язык java, то он имеет, как компилятор, так и интерпретатор. Компилятор преобразует исходный код в байткод. А байткод в начальной стадии выполнения программы обрабатывается интерпретатором.
Компилятор, это отдельная программа javac, интерпретатор же встроен в jvm. Помимо обычного компилятора, в jvm присутствует just-in-time компиляция. т.к. интерпретация довольно медленна, то горячие места в программе компилируются в машинный код jit компилятором, тем самым ускоряя выполнение.