Обновить

Комментарии 8

Каждый раз, когда кажется, что PHP уже ничем не удивит - находится человек, который такой: смотрите, я тут ещё и окна рисую

Спасибо за статью

Каждый раз, когда кажется, что PHP уже ничем не удивит - находится человек, который такой: смотрите, я тут ещё и окна рисую

Ну окна на PHP не такой уж удивительный процесс, благо для этого есть всякие инструменты, которые чуть более production-ready, чем описанное в статье.

А так, всегда пожалуйста

А я бы ещё само ядро на чистом php сделал - syscall = websyscall - то есть upload files делает теперь само ядро :)

Ни строчки на C это лукавство. Весь бэкэнд на этом самом C, Биндинг вызовов функций сишных либ не делает этот код написанным на php

Вы не выкупаете мета-иронию.

Так-то и PHP написан на C.

Предлагаю тогда, для начала, определиться что значит "вызовов функций сишных либ не делает этот код написанным на php", есть же разные ситуации!

Допустим:

  1. Если мы считаем, что если берём GLFW и вызываем из неё функции из экспорт секции, то получается мы "пишем код на Си", так как GLFW написан на Си, верно?

  2. Если мы выкидываем GLFW и дёргаем функционал ОС, со всякими RegisterClassW, PeekMessageW и проч., то тоже получается "пишем код на Си", т.к. эти функции написаны на Си, так?

  3. Если мы вызываем абсолютно любую функцию 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() для совмещения исходников на разных языках.

Заодно описать за что отвечает та или иная строчка, чтобы было понятно (всё же это статья, а не просто кидаем код: "сами разбирайтесь")

Ну и сделать так, чтобы этот текст не был совсем престным и читать можно было.

Получаем... Ну да, примерно то что вы и описали. На пару строк больше разве что, согласен)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации