- 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++... два говна нашли друг друга
j123123 11.11.2020 22:11 # +2
Надеюсь, это говно не понадобится человечеству в 2100 году. Тут еще операция xor, какая оптимизация )))
Kypumca_rpuJlb 11.11.2020 23:18 # 0
Это же надо было так обосраться )))
defecate-plusplus 11.11.2020 23:20 # 0
Kypumca_rpuJlb 11.11.2020 23:21 # 0
defecate-plusplus 11.11.2020 23:23 # 0
https://ideone.com/Imj6zB
guest6 11.11.2020 23:32 # 0
j123123 11.11.2020 22:14 # +1
ухх бля, вот сразу видно, чувствуется рука вконтактовского олимпиадника
rotoeb 12.11.2020 13:02 # 0
MAPTbIwKA 11.11.2020 22:16 # +4
никогда не берите на работу олимпиадников и пыхеров
Кстати, надо бы Ротоёбу присоветовать ВК в качестве работы: он примерно в таком же стиле пишет, правда на пхп, но там и пхп такой же ведь
defecate-plusplus 11.11.2020 23:30 # 0
MAPTbIwKA 11.11.2020 23:31 # 0
defecate-plusplus 11.11.2020 23:36 # 0
впрочем бекенд на сишке я писал ещё в 2004
и че т больше не хочу повторять этот опыт
guest6 11.11.2020 23:39 # 0
defecate-plusplus 11.11.2020 23:45 # 0
j123123 11.11.2020 23:31 # 0
j123123 11.11.2020 23:27 # +1
Не, ну что это за пиздец?
MAPTbIwKA 11.11.2020 23:33 # 0
Причм мне нравится, как ловко смешана весьма "высокоуровневая" крестушня типа std::string и
*p++ = (char)(0xc0 + (num >> 6));
*p++ = (char)(0x80 + (num & 63));
bormand 11.11.2020 23:34 # +1
Настоящий олимпиадник инлайнит функции сам, не доверяя это конпелятору.
bormand 11.11.2020 23:36 # 0
За каким хуем это вообще строка, если там джва допустимых значения. А ещё этот код вызывается на каждую энтитю, заебись для пирфоманса.
bormand 11.11.2020 23:44 # 0
guest6 11.11.2020 23:48 # 0
UTF8
utf8
UTF-8
utf-8
Utf-8
и так далее
Проще на восьмерку проверить.
bormand 11.11.2020 23:51 # +3
guest6 11.11.2020 23:54 # +2
bormand 11.11.2020 23:54 # 0
Kypumca_rpuJlb 11.11.2020 23:56 # 0
j123123 12.11.2020 00:03 # 0
Если судить из документации соотв. функции в "PHP", для UTF-8 кодировки корректно только "UTF-8" в качестве параметра
А вот у "cp1251" есть псевдонимы "Windows-1251", "win-1251", "1251". Т.е. достаточно просто проверять четвертый символ на восьмерку
guest6 12.11.2020 00:05 # 0
j123123 12.11.2020 00:09 # 0
bormand 12.11.2020 00:05 # 0
bormand 12.11.2020 00:10 # 0
j123123 11.11.2020 23:45 # 0
Ну видимо их аналог пхп-шной функции html_entity_decode https://www.php.net/manual/ru/function.html-entity-decode.php поддерживает только "UTF-8" и "CP1251". Большего им не надо.
bormand 11.11.2020 23:49 # 0
j123123 11.11.2020 23:50 # +1
bormand 11.11.2020 23:52 # 0
Kypumca_rpuJlb 11.11.2020 23:52 # 0
Fike 11.11.2020 23:39 # +1
обиделись что в прошлый раз никто не заметил?
> KPHP берёт PHP-код и превращает его в С++
ребят, тайпскрипт не так работает
j123123 12.11.2020 09:34 # 0
Почему никто? Я заметил. На говнокод даже отправлял куски кода оттуда
Fike 12.11.2020 11:10 # 0
bormand 12.11.2020 11:32 # 0
Судя по статье, 99% существующего кода там тупо не взлетит т.к. все динамические фишки не поддерживаются. Не заюзать привычные экстеншены для СУБД, не запустить привычные фреймворки и ORM'ы.
Т.е. нельзя взять и портировать свои PHP'шные наработки на K-PHP. Код нужно снуля разрабатывать специально под эту платформу.
З.Ы. Хотя код Ротоёба, наверное, взлетит. Если поддержку mysql самостоятельно привернуть.
j123123 12.11.2020 12:22 # 0
mysql_real_escape_string()
bormand 12.11.2020 00:07 # +2
Заебись наверное отлаживать ситуации, когда в обычном пхп всё работает а на кпхп крашится.
guest6 12.11.2020 00:12 # 0
defecate-plusplus 12.11.2020 00:13 # +1
TOPT 12.11.2020 02:29 # 0
Fike 12.11.2020 02:33 # 0
w-495 25.08.2021 18:34 # 0