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++ порождаёт хрень, которая работает прямо в железе - это надо будет сказать.


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

Спасибо.

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

Q: афтар жжот, как можно работать программистом С++ и не знать, чем он отличается от PHP.
A: Можно легко. Если я умею есть ложкой, то не факт, что я успешно прочитаю лекцию на тему механики движений ложкой и т.п.

mriadus
() автор топика

Я что-то не понял.. Вы должны дать оправдание, почему стали писать на Си++, а не на ПХП? :)

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

> Вы должны дать оправдание, почему стали писать на Си++, а не на ПХП? :)

В каком-то смысле и это тоже)

mriadus
() автор топика

Лучше показывать сходства и отличия, сравнивая C++ и PHP с третьим языком. Лучше всего с Лиспом.

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

> Лучше показывать сходства и отличия, сравнивая C++ и PHP с третьим языком. Лучше всего с Лиспом.

По условиям задачи - только 2 языка. Никаких новых абстракций вводить нельзя, типа понятий из третьего языка.

mriadus
() автор топика

Реализуй простенький пример с большой кучей итераций и замерь время выполнения на пхп и с++.

lester_dev ★★★★★
()

Тонко :) ладно, nobody cares, поехали

C++ - компилируемый язык, PHP - интерпретируемый (скорость)
C++ - язык со строгой типизацией, в PHP типизации почти нет (надёжность)
C++ - средство разработки без квот памяти и времени, кроме пользовательских, в PHP и память и время квотируются в обязательном порядке
C++ сможет ответвиться в фон (форкнуться в бэкграунд), PHP - нет (демоны)
Ну и бонусные блекджеки со шлвозможности языка типа поддержки операторов (operator+, operator[], тысячи их), тысячи их
Я думаю, этого достаточно, чтобы появилась причина писать некоторые веб-приложения на C++.

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

C++ - компилируемый язык, PHP - интерпретируемый (скорость)

OK. Но знатоки PHP придерутся, скажут: при желании, можно скомпилить.

C++ - язык со строгой типизацией, в PHP типизации почти нет (надёжность)

OK, Оч. полезный пункт.

C++ - средство разработки без квот памяти и времени, кроме пользовательских, в PHP и память и время квотируются в обязательном порядке

OK.

mriadus
() автор топика
Ответ на: комментарий от mriadus

> В каком-то смысле и это тоже)

Ну тогда вам конец. Оправданий такому шагу нет и быть не может.

anonymous
()

> возможна компиляция PHP хоть в CGI-бинарь.

я что-то пропустил? раньше был только байткод

еще кажется Facebook щас написал прогу, компилирующую РНР в С или плюсы, и так повысил быстродействие своих сайтов емнип на 25%

в плюсах рефлексия и создание классов на лету хотя и возможны, но нифига не в стандарте, и писать аппликухи для работой с БД без этого ведет к другому подходу к задаче — надо иметь какой-нить скрипт, для генерации enum-ов из схемы базы данных

____________________________________________

если (внезапно) ты взялся обосновывать *свое* писание на с++ — тогда надо показывать готовый проект, РНР-сты будут тебя спрашивать «а как вот это делать», ты должен отвечать, где не сможешь ответить — придется дописывать... так что это не разовая работа.

в общем, меня весьма интересуют твои успехи (и неудачи)

у меня есть свое представление «как писать веб-аппликухи на с++», но на я его не проверял в такого рода беседах

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

* показывать готовый (игрушечный демонстрационный) проект

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

> а насчет facebook-а я вроде переврал — там вроде бы всего лишь заембедили интерпретатор байткода

По заявлению разработчиков использование HipHop позволяет уменьшить нагрузку на CPU примерно на 50%. Обратной стороной высокой производительности является принципиальное отсутствие поддержки некоторых PHP конструкций, таких как eval().

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

не путайте статическую типизацию со строгой типизацией - это разные вещи - http://en.wikipedia.org/wiki/Type_system#Static_typing

С++ - язык со статической типизацией, но не со строгой типизацией (неявные преобразования типов и т.д.)

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

>C++ - язык со строгой типизацией, в PHP типизации почти нет (надёжность)

Только вот С++ это не помогает. И с надежностью тут скорее наоборот =)

C++ сможет ответвиться в фон (форкнуться в бэкграунд), PHP - нет (демоны)

Мммм... по моему в пхп тоже можно =) http://bipinb.com/making-php-program-as-daemon.htm

Я думаю, этого достаточно, чтобы появилась причина писать некоторые веб-приложения на C++.

Веб на с++? Помилуйте...

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

> Разве PHP не для динамического html и только?

прикинь, нет. на нем можно писать полноценные приложения. ну например - http://gtk.php.net/

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

> OK. Но знатоки PHP придерутся, скажут: при желании, можно скомпилить.

но по скорости оно даже скомпиленное будет сильно сливать С++. особенно на ресурсоемких операциях.

isden ★★★★★
()

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

Кидай гранату и сваливай.

anonymous
()

Каким только --низмом не занимаются люди, только чтобы grails не учить

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

> C++ - средство разработки без квот памяти и времени, кроме пользовательских, в PHP и память и время квотируются в обязательном порядке

неправда. Сам тюнил ядро фряхи i386 чтобы скрипт с ulimit -d 3.5gb памяти мог откушать в течение нескольких часов.

true_admin ★★★★★
()

>Но конечно то, что обычно PHP выполняется интерпретатором

Вроде бы, PHP2 давно уже неактуален, не?

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

> C++ сможет ответвиться в фон (форкнуться в бэкграунд), PHP - нет (демоны)

PHP тоже может. И у меня даже был на нем написан NNTP-демон

PS. Правда больше я такой херней страдать не буду :)

Vit ★★★★★
()
Ответ на: комментарий от 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 ★★★★★
()

однако. вы просите примеров, связанных с реальной жизнью, однако ни словом не упоминаете о классах задач, которые приходится решать вашим [не]программистам в повседневной жизни. обработкой данных и пхп занимается, а написание «всяких демонов» - тот самый пресловутый сферический конь в вакууме. боюсь, толку от ваших лекций не будет никакого.

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

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

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

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

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

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


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

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

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

>> C++ — это локально

что значит «локально»?

и ненадежно

от кривых рук никакой язык не спасет


Ну, мемы-то ЛОРовские знать нужно! :) Если «PHP - это глобально и надёжно», то в этой системе координат: «C++ - это локально и ненадёжно» ;)

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

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

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

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

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

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

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

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

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