На самом деле, никто не мешает написать myprintf напрямую через write. Это будет прекрасно работать. Можно даже обойтись без glibc совсем. Но glibc предлагает решение среднее по больнице, которое подходит в 98% случаев. И да, оно зачастую избыточно, но работает как часы…
Тут есть два момента. Во первых puts работает с буфферизацией, то есть прежде чем выдать что-то во внешний мир, он сбрасывает данные в буффер, копит их там, а потом уже выдаёт все разом. Это делается для минимизации количества системных вызовов в частности и операций в пространстве ядра — драйверах вообще.
Но это пол беды. Логика работы с буфером находится в динамической библиотеке, доступ к которой пользовательская программа имеет через таблицу указателей на функции.
Вот и получается, что мы сначала делаем jump в динамическую либу, потом кидаем данные в буффер… И, только если левая пятка сподобится, вызываем write…
Насколько такая цепочка оправдана… Вопрос открытый.
Это пока не релиз, но пощупать можно.
Работает standalone (ничего дополнительно ставить не надо). Протестировано (Ну, типо падает не сразу) на десятке.
Есть довольно стойкое всеобщее заблуждение про высшее образование.
Для получения практических навыков есть среднее специальное. А высшее образование — это про теорию, кругозор, охват, но ни разу не про практические навыки… Ну нет у ВУЗа времени нагружать студентов практикой.
А без практики программиста быть не может… Так что проблема не с ВУЗом. ВУЗ и не должен был учить программированию дальше хеллоуворлда.
Итак, вот первое интересное свойство рациональной арифметики — деление и умножение имеют одинаковые затраты, поэтому в отличие от обычного рендеринга с плавающей запятой, в котором деления обычно избегают, откладывают или скрывают под задержками медленных запросов получения текстур, в рациональной арифметике этих операций бояться не нужно.
Но это пол беды. Логика работы с буфером находится в динамической библиотеке, доступ к которой пользовательская программа имеет через таблицу указателей на функции.
Вот и получается, что мы сначала делаем jump в динамическую либу, потом кидаем данные в буффер… И, только если левая пятка сподобится, вызываем write…
Насколько такая цепочка оправдана… Вопрос открытый.
Их надо только облагородить, выбрать окончательный вариант апи и внести в документацию…
См. пример robot.py
github.com/mirmik/zencad/releases/tag/wintest
Это пока не релиз, но пощупать можно.
Работает standalone (ничего дополнительно ставить не надо). Протестировано (Ну, типо падает не сразу) на десятке.
Качать zip, запускать ZenCad.exe
(Пока x64 только)
С семафорами сложнее, но концептуально для них тоже всё готово.
Here the chicken and the egg are switched.
Sorry for english. Hasn`t russian locale on that machine.
Для получения практических навыков есть среднее специальное. А высшее образование — это про теорию, кругозор, охват, но ни разу не про практические навыки… Ну нет у ВУЗа времени нагружать студентов практикой.
А без практики программиста быть не может… Так что проблема не с ВУЗом. ВУЗ и не должен был учить программированию дальше хеллоуворлда.
Дальше уже самостоятельная работа.
Ну библиотеки… Ну хорошо, 100 мегабайт исходных кодов и бинарников…