- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
https://habr.com/ru/company/vk/blog/527420/
ВКонтакте снова выкладывает KPHP
....
Сгенерировать С++ из PHP — этого мало. Собственно говоря, это самое простое.
Во-первых, в PHP мы используем кучу функций стандартной библиотеки: header(),
mb_strlen(), curl_init(), array_merge(). Их тысячи — и все должны быть
реализованы внутри KPHP с учётом типизации и работать так же, как в PHP.
Реализация всего PHP stdlib (а также KPHP-дополнений), всех PHP-типов с
операциями и допущениями — это называется runtime, вон там квадратик сверху.
Во-вторых, PHP-сайт — это веб-сервер. Следовательно, и в KPHP должна быть вся
серверная часть, чтобы можно было в том же nginx подменить PHP-шный upstream
на KPHP-шный — и всё продолжало работать так же. KPHP поднимает свой веб-сервер,
оркестрирует процессы, заполняет суперглобалы и переинициализирует состояние,
как и PHP… Это тоже хардкорная часть — называется server, квадратик снизу.
И только имея результирующий код C++, написанные runtime и server, всё это можно
объединить и отдать на откуп плюсовым компиляторам. Мы используем g++ — там в
диаграмме есть квадратик g++. Но не совсем так: у vk.com настолько огромная
кодовая база, что этот компилятор не справляется, и поэтому мы применяем патченный
distcc для параллельной компиляции на множестве агентов. В итоге всё линкуется в
один огромный бинарник (это весь vk.com), он раскидывается на кучу бэкендов и
синхронно перезапускается. Каждая копия запускает мастер-процесс, который порождает
группу однопоточных воркеров. Вот они на самом деле и исполняют исходный PHP-код.
Многие технические проблемы остаются за кадром — их не опишешь в статье на Хабре.
Чего стоит один только сбор трейсов при ошибках: ведь в С++ не получить
человекочитаемый стек, а хочется разработчику вообще его на PHP-код намаппить.
Гигантское количество внутренних нюансов, множество подпорок и легаси — но в итоге
продукт хорошо работает и развивается.
PHP и C++... два говна нашли друг друга
Надеюсь, это говно не понадобится человечеству в 2100 году. Тут еще операция xor, какая оптимизация )))
Это же надо было так обосраться )))
https://ideone.com/Imj6zB
ухх бля, вот сразу видно, чувствуется рука вконтактовского олимпиадника
никогда не берите на работу олимпиадников и пыхеров
Кстати, надо бы Ротоёбу присоветовать ВК в качестве работы: он примерно в таком же стиле пишет, правда на пхп, но там и пхп такой же ведь
впрочем бекенд на сишке я писал ещё в 2004
и че т больше не хочу повторять этот опыт
Не, ну что это за пиздец?
Причм мне нравится, как ловко смешана весьма "высокоуровневая" крестушня типа std::string и
*p++ = (char)(0xc0 + (num >> 6));
*p++ = (char)(0x80 + (num & 63));
Настоящий олимпиадник инлайнит функции сам, не доверяя это конпелятору.
За каким хуем это вообще строка, если там джва допустимых значения. А ещё этот код вызывается на каждую энтитю, заебись для пирфоманса.
UTF8
utf8
UTF-8
utf-8
Utf-8
и так далее
Проще на восьмерку проверить.
Если судить из документации соотв. функции в "PHP", для UTF-8 кодировки корректно только "UTF-8" в качестве параметра
А вот у "cp1251" есть псевдонимы "Windows-1251", "win-1251", "1251". Т.е. достаточно просто проверять четвертый символ на восьмерку
Ну видимо их аналог пхп-шной функции html_entity_decode https://www.php.net/manual/ru/function.html-entity-decode.php поддерживает только "UTF-8" и "CP1251". Большего им не надо.
обиделись что в прошлый раз никто не заметил?
> KPHP берёт PHP-код и превращает его в С++
ребят, тайпскрипт не так работает
Почему никто? Я заметил. На говнокод даже отправлял куски кода оттуда
Судя по статье, 99% существующего кода там тупо не взлетит т.к. все динамические фишки не поддерживаются. Не заюзать привычные экстеншены для СУБД, не запустить привычные фреймворки и ORM'ы.
Т.е. нельзя взять и портировать свои PHP'шные наработки на K-PHP. Код нужно снуля разрабатывать специально под эту платформу.
З.Ы. Хотя код Ротоёба, наверное, взлетит. Если поддержку mysql самостоятельно привернуть.
mysql_real_escape_string()
Заебись наверное отлаживать ситуации, когда в обычном пхп всё работает а на кпхп крашится.