
Комментарии 8
Каждый раз, когда кажется, что PHP уже ничем не удивит - находится человек, который такой: смотрите, я тут ещё и окна рисую
Спасибо за статью
Каждый раз, когда кажется, что PHP уже ничем не удивит - находится человек, который такой: смотрите, я тут ещё и окна рисую
Ну окна на PHP не такой уж удивительный процесс, благо для этого есть всякие инструменты, которые чуть более production-ready, чем описанное в статье.
А так, всегда пожалуйста
А я бы ещё само ядро на чистом php сделал - syscall = websyscall - то есть upload files делает теперь само ядро :)
Ни строчки на C это лукавство. Весь бэкэнд на этом самом C, Биндинг вызовов функций сишных либ не делает этот код написанным на php
Вы не выкупаете мета-иронию.
Так-то и PHP написан на C.
Предлагаю тогда, для начала, определиться что значит "вызовов функций сишных либ не делает этот код написанным на php", есть же разные ситуации!
Допустим:
Если мы считаем, что если берём GLFW и вызываем из неё функции из экспорт секции, то получается мы "пишем код на Си", так как GLFW написан на Си, верно?
Если мы выкидываем GLFW и дёргаем функционал ОС, со всякими
RegisterClassW,PeekMessageWи проч., то тоже получается "пишем код на Си", т.к. эти функции написаны на Си, так?Если мы вызываем абсолютно любую функцию PHP, например,
var_dump(...), то мы так же "пишем код на Си", так как эта функция написана на Си, так?
Получается, что каждый PHP-разработчик — это пассивный Си-шник и никогда в жизни не писал код на PHP, т.к. цитата:
вызовов функций сишных либ не делает этот код написанным на php
Тогда такой вопрос:
Какие правила конвертации в "опыт на Си" это конвертируется? Ну, типа, "3 года PHP соответствует 1 году пассивного Си", или как?
Ну просто чтоб можно было смело писать в резюме: "5 лет пассивной Си-разработки. Так сказать кукодил".
Статья понравилась (мне всегда нравился PHP), но можно было короче:
OpenGL в PHP не привлекая внимания санитаров: Hello Window
1.
app/
├── app.php
└── glfw3.dll (или libglfw.3.dylib)
<?php
$glfw = FFI::cdef('', __DIR__ . '/glfw3.dll');
// Тут пишем код на СИ
$glfw = FFI::cdef(<<<'C'
typedef struct GLFWmonitor GLFWmonitor;
typedef struct GLFWwindow GLFWwindow;
int glfwInit(void);
GLFWwindow* glfwCreateWindow(int width, int height, const char* title, GLFWmonitor* monitor, GLFWwindow* share);
C, __DIR__ . '/glfw3.dll');
// Тут его вызываем
if (!$glfw->glfwInit()) {
exit(-1); // Можно добавить исключение "по вкусу"
}
if (!$glfw->glfwCreateWindow(...)) {
exit(-1); // Можно добавить исключение "по вкусу"
}
// Конец!Я почти приблизился к авторскому стилю :) https://github.com/SerafimArts/OpenGL-Tutorial/tree/01.hello-window
Только не забыть ещё объяснить зачем нужен ещё этот GLFW, почему средства ОС не подходят (сложнее), какие есть альтернативы. Какие варианты установки всего этого дела и что можно совершенно по-разному пользоваться всем этим, а не привязываться к одной единственной либе.
Плюс добавить код для создания окна, обработки событий, ещё не забыть всунуть пару приколюх о которых мало кто знает, вроде приёма с __halt_compiler() для совмещения исходников на разных языках.
Заодно описать за что отвечает та или иная строчка, чтобы было понятно (всё же это статья, а не просто кидаем код: "сами разбирайтесь")
Ну и сделать так, чтобы этот текст не был совсем престным и читать можно было.
Получаем... Ну да, примерно то что вы и описали. На пару строк больше разве что, согласен)
OpenGL в PHP не привлекая внимания санитаров: Hello Window