diff --git a/PHP.htm b/PHP.htm index 4c92535..0ab4187 100644 --- a/PHP.htm +++ b/PHP.htm @@ -18,112 +18,148 @@

PHP

-

В твиттере опять Сохацкому не дают работать и отвлекают на графоманство. - С помощью шантажа капиталом меня принудили написать статью для нашей - Энциклопедии Языков Программирования. А именно, статью про язык программирования PHP, - на котором написано всё зло человечества Facebook, и еще парочка популярных - сайтов типа Wikipedia и продуктов типа Drupal.

- -

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

- -

С другой стороны писать про PHP в кратком стиле нелепо (указав лишь BNF нотацию, - семантику, историческую справку и тактико-технические характеристики) — - этот язык заслуживает истории про ранний веб, и те быстрозацементированные - уникальные пути развития которые определелили веб 2020. Современный веб 2020 - это как Коронавирус — инфекция которая случайным образом сражает - даже самых храбрых и запечатывает в забвении. Нужно понимать, что PHP был создан - во времена когда в вебе господствовал Netscape, про который вы можете найти - фильмы на Нэшинал Географик. В те времена JavaScript представлял собой - маленький скриптовый движек, созданный, чтобы анимировать падающие снежики - на Новый Год на веб страницах (тогда это было модно) и называлась эта - технология DHTML.

- -

В этом месте хотелось бы отпустить мысли и объяснить за что же мы ненавидим капитализм, - бабло, и технологии, которые под их давление замораживаются и приобретают - инерцию предельной скорости движения. Три всадника этого апокалипсиса — - это Netscape, JavaScript и PHP. Хотя эти вещи в какой-то мере совершенно дополняют друг друга - и напоминают мне сейчас сегоднешнемиу что-то типа фулстека архаичных систем скорее нежели - современные средства разработки. Если скажем сейчас стояла бы задача написать новый стандарт - на все начиная от виртуальной машины, синтаксиса и языка — я думаю все бы согласились - на что-то посвещее и покультурнее. Сейчас эти вещи выглядят для образованных людей так же, - как для нас сейчас выглядит ALGOL и PL/1, языки еще более архаичные и не менее легендарные.

- -

Концепция веба простая как чистая лямбда: в контекстно-независимой среде шаблонизатор выплевывает - новую страницу на каждый запрос и умирает. Дальше специализированый клиент (браузер) - исполняет джаваскрипт, чтобы запрашивать новые страницы, перерисовывая части страницы без - ее перезагрузки (да да, DHTML, или то, что сейчас называют SPA был доступен еще во времена Netscape). - В этой связке идеально все: контекстнонезависимый шаблонизатор PHP (который можно сделать - контекстнозависимым подключив базку), специализированый клиент, виртуальная машина для - скриптования страничек. Любой архитектор который собрался бы рефакторить современный веб - оставил бы эту тройку. Да и все попытки переписать веб так или иначе сводятся к этим компонентам.

- -

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

- -

Каждая из компонент (как и вирусы) естественным образом пыталась себя заменить. - Так JavaScript хотел себя заменить Dart - самой злой корпорацией на планете, хотя рядом всегда был и есть Lua, который тоже вполне подошел бы - на роль JIT-интерпретатора. Вот OpenResty для NGNIX уже выглядит как лучше стек чем LAMP! - В нем как минимум на одну компоненту все улучшено, снижена латенси за счет JIT-рантайма - прямо в веб-сервере, вообщем настоящая вещь (только стектрейсы слабоватые).

- -

Другой пример хорошей замены, это замена PHP на XSLT транформации. Тоже консистентный и совершенно другой - подход к рендеру клиентом контента. В этом подходе даные между клиентом бегают исключительно - типизированные XSD, сами запросы совершаются по SOAP, XSLT кешируются в - браузере (да да, браузер такое умеет) и рендерят саму страницу на клиенте. В итоге - получается чисты XML-RPC бек, все стандартизировано и управляемо. Я видел некоторые - части ПриватБанк построенные на этой технология в 2011 году, жалко что тема с XSLT в браузере - не стала повсеместно популярной, во много этом из-за синхронной природы транформаций (нужен полный датасет), - но думаю можно было бы в стандарт протянуть какой-то стриминг или даже Пи-калкулус при желании. - Не было сильной руки рынка кормящейся с нужного продукта.

- -

Но были и плохие примеры подражания. Другие языки сразу скопировали успешность PHP. - Так в Java мире появились JSP, а в Microsoft мире ASP, в Python это DTL и т.д. и т.п. - сотни их и все берут свою родословную от Netscape/JavaScript/PHP. JavaScript был - и остается основным рантаймом веба без видимой возможности быть замененым в - ближайшее время. Разве что успел инфицировать серверные бекенды: на языке придуманом - для снежинок в компании Joyent предложили писать серверные сетевые приложения.

- -

Итак давайте начинать классифицировать экстримы в подходе к рендерингу - контента: 1) на клиенте (XSLT), pure data-on-wire; 2) на сервере (PHP), html-over-http. - Опять существуют тысячи фреймворков которые реализуют эти два подхода, причем на языках - которые существовали и до PHP, например Perl или Python. Вообще в те времена это называлось CGI. - Любая программа помещенная в контекст вебсервера становилась шаблонизатором, - например написанная на Pascal, тогда веб не был привязан к языку. Одновременно - с PHP возник не менее легендарный и более консистентный язык программирования Ruby - с развитой системой макросов, так необходимых в веб-программировании, синтаксис - которого перекочевал на другие виртуальные машины и платформы. Кстати о них.

- -

В свете быстрорастущей кодобазы Facebook как любоая корпорация была вынуждена - обезопасить свои инвестиции и написать свою виртуальную машину и свой язык с - выводом типов (и юнит типом который понижает сразу до нетипизированной лямбды). - Facebook успешно крутится на HipHop VM, которая сделана уже более технологично, - чем оригинальный PHP. Язык тоже залифтился и усреднился до общего - знаменателя всех ООП-языков с дженериками.

- -

Особенность строительства PHP-систем заключается в вынесении in-mamory кешей - в специальное хранилище (например Redis или Erlang) для хранения сессионных данных - (как и базы данных) минимизировав контекст рендеринга контейнеров и оптимизировав - выделение памяти в интерпретаторе. Другой подход заключается в объединении - вычислительной памяти с контекстом веб-сервера и строительстве долгоиграющих - аппликейшин контейнеров в гомогенной языковой среде с высокой локальностью - данных (сокращения трафика, стоимости) вплоть до объединения с шиной и системой хранения данных. - Именно вторая (более монилитная версия) вытесняет старый подход - быстрого умирания целого процесса после рендера страницы. Другие проблемы PHP - заключаются в невозможности построения принципиального идиоматического долгоиграющего - WebSocket-сервера (без чего современный веб немыслим) на PHP не изменив коренным образом пайплайн. - Да были попытки типа phpDaemon и FastCGI, но это уже не настоящий PHP и работает хуже конкурентов.

- -

БНФ-нотация языка

- -

Привожу БНФ-нотацию приблизительно той версии языка, на которой я писал на первой своей работе.

+

В твіттері Сохацькому не дають працювати і знову відтягують на графоманство. + За допомогою капіталістичного шантажу мене змусили написати статтю для + нашої Енциклопедії мов програмування. А саме стаття про мову програмування PHP, + на якій написане все зло людства --- Фейсбук, і навіть пара популярних сайтів + типу Вікіпедії та продуктів типу Вордпрес і Ларавель.

+ +

Я рідко даю розширені ретроспективи мовам, тому що вважаю це журналістикою, + вона може бути хорошою чи поганою, але вона не замінить самого письма. + Тому мені абсолютно байдуже, яку спадщину має ця мова, на скількох + пристроях вона працює, скільки грошей, реклами, котів чи порно ці + мови обробляють за наносекунди. Для мене це другорядні речі, + тому що модулі написані на найкрасивіших мовах програмування, + і вони взагалі ніде не використовуються. Так, що все це + починаючи з якогось момента дуже відносно.

+ +

З іншого боку, смішно писати про PHP коротко (із зазначенням лише + нотації BNF, семантики, історичної довідки та тактико-технічних + характеристик) — ця мова заслуговує на історію раннього вебу + та швидко закріплені унікальні шляхи розвитку. що визначило web 2020. + Сучасна мережа 2020 — це як Коронавірус — інфекція, яка випадково + вбиває навіть найсміливіших і запечатує їх у забуття. Потрібно + розуміти, що PHP створювався в той час, коли Netscape домінував + у мережі, про що ви можете знайти фільми в Нешинал Джеографік. + У той час JavaScript був невеликим механізмом скриптів, створеним + для анімації падаючих новорічних сніговиків на веб-сторінках (тоді це було модно), + і ця технологія називалася DHTML.

+ +

Тут я хотів би відпустити думки і пояснити, чому ми ненавидимо капіталізм, + гроші і технології, які під їхнім тиском застигають і набувають інерції + граничної швидкості руху. Трьома вершниками цього апокаліпсису + є Netscape, JavaScript і PHP. Хоча ці речі певною мірою повністю + доповнюють одна одну і нагадують мені зараз щось на кшталт повного + стосу архаїчних систем, а не сучасних засобів розробки. Якщо ми + скажемо зараз, завдання полягатиме в тому, щоб написати новий + стандарт для всього, починаючи з віртуальної машини, синтаксису + та мови — я думаю, кожен погодиться на щось більш освічене та культурне. + Тепер ці речі виглядають для освічених людей так само, + як ALGOL і PL/1 виглядають для нас зараз, мови навіть + більш архаїчні та не менш легендарні.

+ +

Концепція веб-сайту проста, як чиста лямбда: у контекстно-незалежному + середовищі шаблон видає нову сторінку за кожним запитом і вмирає. + Крім того, спеціалізований клієнт (браузер) виконує JavaScript + для запиту нових сторінок, перемальовуючи частини сторінки без + перезавантаження (так, DHTML або те, що зараз називається SPA, + було доступне навіть за часів Netscape). У зв'язку з цим все ідеально: + контекстно-незалежний шаблон PHP (який можна зробити контекстно-залежним, + підключивши базу), спеціалізований клієнт, віртуальна машина для написання + сторінок. Будь-який архітектор, який збирався рефакторити сучасну мережу, + залишив би цю трійку. Та й усі спроби переписати веб так чи інакше + зводяться до цих компонентів.

+ +

Однак розвиток мов і середовища виконання зайшов далеко, і багатьох + проблем існуючої мережі можна було б уникнути, маючи хоча б найменшу + можливість щось змінити, але змінити нічого неможливо, можна лише + спробувати почекати. На жаль, сучасна мережа інфікована цією трійкою.

+ +

Кожен із компонентів (як віруси) природно намагався замінити сам себе. + Так JavaScript хотів замінити Dart найзліснішою корпорацією на планеті, + хоча поруч завжди була Lua, яка також чудово підходила на роль + JIT-інтерпретатора. Тут OpenResty для NGNIX вже виглядає кращим + стеком, ніж LAMP! У ньому хоча б по одному компоненту все покращено, + латентність зменшена за рахунок JIT-запуску прямо в веб-сервері, + загалом справжнє (тільки слабкі стеки).

+ +

Іншим прикладом хорошої заміни є заміна PHP перетворенням XSLT. + Також послідовний і абсолютно інший підхід до відтворення + клієнтського вмісту. У цьому підході дані між клієнтом запускаються + виключно на типі XSD, самі запити виконуються через SOAP, XSLT + кешується в браузері (так, браузер може це робити), а сама + сторінка відображається на клієнті. Результатом є чистий + бекенд XML-RPC, усе стандартизоване та кероване. Я бачив + деякі частини ПриватБанку, побудовані на цій технології + в 2011 році, шкода, що тема з XSLT в браузері не стала + загальнопопулярною, багато в чому через синхронність + перетворень (потрібен повний набір даних), але я думаю, + що можна було б розширити деякі стандартні потоки або + навіть Pi-числення, якщо це потрібно. Не було сильної руки ринку, + яка харчувалася необхідним продуктом.

+ +

Але були й погані приклади наслідування. Інші мови негайно скопіювали успіх PHP. + Так JSP з’явився у світі Java, ASP у світі Microsoft, DTL у світі Python тощо. + тощо сотні з них, і всі беруть свій початок від Netscape/JavaScript/PHP. + JavaScript був і залишається основним веб-браузером без видимої можливості + бути заміненим у найближчому майбутньому. Хіба що йому вдалося заразити + серверні бекенди: на придуманій для сніжинок мові компанія Joyent + запропонувала писати серверні мережеві додатки.

+ +

Тож давайте почнемо класифікувати екстремуми підходу до відтворення + вмісту: 1) на клієнті (XSLT), чисті дані по дроту? 2) на сервері (PHP), + html-over-http. Знову ж таки, існують тисячі фреймворків, які реалізують + ці два підходи, і в мовах, які існували до PHP, таких як Perl або Python. + Насправді в ті часи це називалося CGI. Будь-яка програма, розміщена в + контексті веб-сервера, ставала шаблоном, наприклад, написана на Pascal, + тоді веб не був прив’язаний до мови. Одночасно з PHP з'явилася не менш + легендарна і більш послідовна мова програмування Ruby з розвиненою + системою макросів, так необхідних у веб-програмуванні, синтаксис + яких був перенесений на інші віртуальні машини та платформи. + До речі про них.

+ +

У світі кодової бази Facebook, яка швидко розвивається, + будь-яка корпорація була змушена захистити свої інвестиції + та написати власну віртуальну машину та власну мову з + визначенням типу (і тип одиниці, який негайно знижується + до нетипової лямбда). Facebook успішно працює на HipHop VM, + яка створена більш технологічно, ніж оригінальний PHP. Мова + також була вдосконалена та усереднена до спільного знаменника + всіх ООП-мов із дженериками. Нажаль це не втримало HVVM від End of Life.

+ +

Особливістю побудови PHP-систем є перенесення кеш-пам'яті + в спеціальне сховище (наприклад, Redis або Erlang) для + зберігання даних сесії (а також баз даних) для мінімізації + контексту рендерингу контейнерів і оптимізації розподілу + пам'яті в інтерпретаторі. Інший підхід полягає в об'єднанні + обчислювальної пам’яті з контекстом веб-сервера та створенні + довготривалих контейнерів додатків в однорідному мовному + середовищі з високою локальністю даних (зниження трафіку, + вартість) аж до інтеграції з шиною та системою зберігання + даних. Це друга (більш монолітна версія), яка замінює + старий підхід швидкого припинення всього процесу після + відтворення сторінки. Інші проблеми проблеми на пайплані + на PHP не зміг коренним розміром пайплану. Були спроби + типу phpDaemon і FastCGI, але це вже не справжній PHP і працює гірше конкурентів.

+ +

Єдиний вихід для PHP-бізнесу — це просто запускати проекти, + поки є ринок, підтримуючи людей, які працюють виключно в + Інтернеті: веб-магазини, саморобні ERP-системи, системи + керування контентом. Це як COBOL, стільки написано, що + працюватиме ще 50 років. Чи варто новому програмісту + починати вивчати PHP? Хіба що з археологічної точки + зору, оскільки мова не складна, і вам потрібно зрозуміти + її нішу, щоб вважатися професіоналом у веб-програмуванні. + Якщо вже є якийсь проект на PHP, наприклад, написана + власна система управління підприємством, то є сенс + оновити його до HHVM, а там напевно до вас прийдуть + і запропонують переписати його в щось. Прислухайтеся + до них, це окупиться, але не викидайте і версію PHP.

+ +

БНФ-нотаці

+ +

Наводжу БНФ-нотацію приблизно тої версії мови, + на якій я писав на першій своїй роботі.

PHP_SOURCE_TEXT = { inner_statement | halt_compiler_statement };