LINUX.ORG.RU

Попросили поучавствовать в проведении лекции для PHP программеров, рассказывающей о C++. Ещё в зале будут не шарящие в программировании вообще.


0

0

Есть фирма, делающая большой продукт. Часть на PHP (интерфейсы с пользователем и т.п.), часть на C++ (обработка данных, всякие демоны). Я в последней части. Есть пара человек, не знакомых с программированием вообще (дизайнеры, верстальщики).

Было решено устроить несколько интерактивных лекций, который бы дали той паре человек представление о программировании вообще, наверное на PHP, и потом дали бы PHP-программистам представление о C++ - не научить их С++, а показать, что в нём такого есть, что нас не устроил PHP для построения в памяти много-гигабайтных структур данных и для написания всех наших демонов.

Поэтому, напишите, о каких ключевых отличиях между PHP с С++ нужно сказать.

Важно: лекция не будет абстрактной, мы не будем начинать со структур данных, классов и т.п. Мы будем всё привязывать к реальному миру. Мы будем говорить о том, как простой текстовый файл с программой может что-то делать полезное. Как он видит входные данные, как выдаёт. Будет сначала очень много базовых вещей. А разницу между C++ и PHP никто не будет объяснять сложно. Скорее всего очень образно, на метафорах и т.п.

Сразу несколько моментов:

1. PHP имеет уборщик мусора, и это большой неконтролируемый программистом штук, который может задержать выолнение программы в каком-то месте, когда ему вздумалось поработать. Мы не будем говорить о том, что его можно как-то отключить и оптимизировать, т.к. это уже сисадминские задачи, а не задачи PHP-программиста. C++ хорош тем, что в нём такой штуки нет и мы сами продумываем управление памятью.

2. Нельзя говорить о том, что PHP - интерпретирумый или байт-кодовый, т.к. возможна компиляция PHP хоть в CGI-бинарь. Но конечно то, что обычно PHP выполняется интерпретатором, а C++ порождаёт хрень, которая работает прямо в железе - это надо будет сказать.


ВАЖНО: просьба ко всем в этом топике не писать очень высокоуровневых объяснений, теорий и т.п. Всё желательно на примерах, сохраняя связь с реальным миром, пользуясь образами из не-программистской жизни.

Спасибо.

НЕ ХОЛИВАРИТЬ просить не могу, т.к. желающие всё равно холиварнут свой холиварчик.

Ответ на: комментарий от true_admin

>хочешь сказать php5 с php.net не интерпретатор?

Язык PHP5 - компилирующий в байткод.
Виртуальная машина PHP5 - интерпретирующая полученный байткод.

Какой компонент имелся в виду в фразе «обычно PHP выполняется интерпретатором»? Что-то мне подсказывает, что подразумевалась интерпретация именно PHP-кода...

KRoN73 ★★★★★
()
Ответ на: комментарий от Karapuz

Там же JIT нету. Да и JIT далеко не всегда панацея.

...

Хотя пощупать новый Quercus, который компилит PHP сразу в байткод JVM было бы интересно, но, жаль, он несвободный и закрытый в новой версии.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Там же JIT нету.


Ну, если jit нету, тогда vm интерпретирует байткод php, как-то так. JVM же тоже интерпретировала байткод жабы до версии 1.2 и пыла пинаема за черепашью скорость

Karapuz ★★★★★
()
Ответ на: комментарий от Karapuz

>Ну, если jit нету, тогда vm интерпретирует байткод php

Я выше писал: «Виртуальная машина PHP5 - интерпретирующая полученный байткод».

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

по-моему, ты придираешься. Байт-код это всего лишь промежуточное представление кода. В любом случае этот код не может выполняться напрямую процом и он интерпретируется.

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

>по-моему, ты придираешься

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

Байт-код это всего лишь промежуточное представление кода


Машинный код x86 и x86_64 - всего лишь промежуточное представление кода. Он не исполняется процом напрямую, а интерпретируется им, преобразуясь во время исполнения в микрокоды. Можно ли из этого сделать вывод, что GCC - интерпретатор?

У терминов «интерпретатор» и «компилятор» есть строгие определения. И давайте пользоваться ими. Если же ситуация спорная или знаний не хватает - всегда можно воспользоваться групповым термином «транслятор».

KRoN73 ★★★★★
()
Ответ на: комментарий от true_admin

> по-моему, ты придираешься. Байт-код это всего лишь промежуточное представление кода. В любом случае этот код не может выполняться напрямую процом и он интерпретируется.

Байт-код может и компилироваться. Те же Just-In-Time или Ahead-Of-Time.

dave ★★★★★
()
Ответ на: комментарий от true_admin

>В любом случае этот код не может выполняться напрямую процом

Кстати, в этом утверждении тоже ошибка. Байткод, не понимаемый одним процессором, прекрасно может исполняться другим специализированным процессором. Например - JVM. И, наоборот, машинный код, родной для, скажем, 8080-го процессора, может интерпретироваться, например, в эмуляторе на x86.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Да зря ты придираешься. Когда говорят, что PHP интерпретатор, то именно это и имеют в виду - это интерпретатор очень динамического языка. Не важно, что это байткод - это все равно динамический язык, которому никакой JIT не поможет.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.