<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Программирование объектов на Си в стиле Go</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/10517.html</link>
    <description>Как вам такая демонстрация идеи программиования объектов на Си в стиле Go?&lt;br&gt;&lt;br&gt;Тут поддерживается скрытие приватных полей и композиция методов.&lt;br&gt;&lt;br&gt;goc.h&lt;br&gt;&#091;code&#093;#ifndef GOC_H&lt;br&gt;#define GOC_H&lt;br&gt;&lt;br&gt;#define fn(obj, fn, ...) (obj).fn(&amp;(obj), ##__VA_ARGS__)&lt;br&gt;&lt;br&gt;#endif&#091;/code&#093;&lt;br&gt;&lt;br&gt;woman.h&lt;br&gt;&#091;code&#093;#ifndef WOMAN_H&lt;br&gt;#define WOMAN_H&lt;br&gt;&lt;br&gt;#include &quot;goc.h&quot;&lt;br&gt;&lt;br&gt;struct woman;&lt;br&gt;&lt;br&gt;typedef struct w &#123;&lt;br&gt;    struct woman *w;&lt;br&gt;    void (* hug)(struct w *self);&lt;br&gt;    void (* kiss)(struct w *self);&lt;br&gt;&#125; woman;&lt;br&gt;&lt;br&gt;woman new_woman(char *);&lt;br&gt;void free_woman(woman *);&lt;br&gt;&lt;br&gt;#endif&#091;/code&#093;&lt;br&gt;&lt;br&gt;woman.c&lt;br&gt;&#091;code&#093;#include &amp;lt;stdbool.h&amp;gt;&lt;br&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br&gt;&lt;br&gt;#include &quot;woman.h&quot;&lt;br&gt;&lt;br&gt;struct woman &#123;&lt;br&gt;    char *name;&lt;br&gt;    bool hugged;&lt;br&gt;    bool kissed;&lt;br&gt;&#125;;&lt;br&gt;&lt;br&gt;void hug(woman *self) &#123;&lt;br&gt;    if (self-&amp;gt;w == NULL) &#123;&lt;br&gt;        printf(&quot;No woman allocated!&#092;n&quot;);&lt;br&gt;        return;&lt;br&gt;    &#125;&lt;br&gt;&lt;br&gt;    printf(&quot;You&apos;re hugging &#037;s&#092;n&quot;, self-&amp;gt;w-&amp;gt;name);&lt;br&gt;&lt;br&gt;    if (self-&amp;gt;w-&amp;gt;hugged) &#123;&lt;br&gt;        printf(&quot;&#037;s say: It hurts, get off me!&#092;n&quot;, self-&amp;gt;w-&amp;gt;name);&lt;br&gt;        return;&lt;br&gt;    &#125;&lt;br&gt; </description>

<item>
    <title>Программирование объектов на Си в стиле Go (Аноним)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/10517.html#14</link>
    <pubDate>Tue, 13 Jan 2026 17:15:34 GMT</pubDate>
    <description>&amp;gt; Как раз целые программы на Си раньше писали. &lt;br&gt;&lt;br&gt;Но ведь это было очень давно ... Тогда не было современных крутых инструментов.&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;gt; от ООП, что немного прибавляет популярности и чистому Си.&lt;br&gt;&lt;br&gt;Вы считаете что популярность Си растёт? Рейтинги популярности говорят что нет.&lt;br&gt;На Си сейчас приложения пишут только любители программирования, а корпоративные разработки на других языках: C++, Go, Rust, Java и т.д.&lt;br&gt;Эти языки обеспечивают бо&amp;#769;льшую продуктивность, как сейчас говорят.&lt;br&gt;</description>
</item>

<item>
    <title>Программирование объектов на Си в стиле Go (pavel_simple.)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/10517.html#13</link>
    <pubDate>Tue, 13 Jan 2026 13:55:34 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt; You&apos;re kissing Miranda &lt;br&gt;&amp;gt; Miranda say: How dare you?&lt;br&gt;&amp;gt; You&apos;re hugging Miranda &lt;br&gt;&amp;gt; Miranda say: Get off me, butch!&lt;br&gt;&amp;gt; You&apos;re kissing Miranda &lt;br&gt;&amp;gt; Miranda is calling the police!&lt;br&gt;&amp;gt; The dreaming workflow: &lt;br&gt;&amp;gt; No woman allocated!&lt;br&gt;&amp;gt; No woman allocated!&lt;br&gt;&amp;gt; No woman allocated!&#091;/code&#093; &lt;br&gt;&lt;br&gt;https://github.com/hirrolot/interface99&lt;br&gt;</description>
</item>

<item>
    <title>Программирование объектов на Си в стиле Go (zionist)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/10517.html#10</link>
    <pubDate>Mon, 05 Jan 2026 19:14:49 GMT</pubDate>
    <description>&amp;gt;&amp;gt; все языки, оперирующие объектами так делают, например C++ &lt;br&gt;&amp;gt; Именно в C++, дефолтным является вариант &quot;вызвать уже известную функцию&quot;, без вычисления &lt;br&gt;&amp;gt; ее адреса в рантайме, даже если со стороны выглядит как вызов &lt;br&gt;&amp;gt; функции-в-структе (dog-&amp;gt;bark()).&lt;br&gt;&lt;br&gt;Я имел в виду виртуальные функции.&lt;br&gt;</description>
</item>

<item>
    <title>Программирование объектов на Си в стиле Go (zionist)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/10517.html#9</link>
    <pubDate>Mon, 05 Jan 2026 19:14:32 GMT</pubDate>
    <description>&amp;gt; Всё верно. Просто язык С предназначен только лишь для написания эффективных процедур &lt;br&gt;&amp;gt; по обработке байтов, машинных слов и их последовательностей, а не для &lt;br&gt;&amp;gt; создания целых программ.&lt;br&gt;&lt;br&gt;Как раз целые программы на Си раньше писали. Например первый веб браузер NCSA Mosaic или почтовый сервер Sendmail. Поколение программистов сменилось, а с ним и популярность парадигм программирования, но в последнее время наметился отход от ООП, что немного прибавляет популярности и чистому Си.&lt;br&gt;</description>
</item>

<item>
    <title>Программирование объектов на Си в стиле Go (Аноним)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/10517.html#8</link>
    <pubDate>Mon, 05 Jan 2026 17:59:08 GMT</pubDate>
    <description>&amp;gt; все языки, оперирующие объектами так делают, например C++&lt;br&gt;&lt;br&gt;Именно в C++, дефолтным является вариант &quot;вызвать уже известную функцию&quot;, без вычисления ее адреса в рантайме, даже если со стороны выглядит как вызов функции-в-структе (dog-&amp;gt;bark()). Гуглить static dispatch vs. dynamic dispatch. В расте примерно то же самое. В таких языках компилятор решает проблему на уровне синтаксиса, не жертвуя скоростью в рантайме.&lt;br&gt;&lt;br&gt;&amp;gt; это же неудобно и менее читаемо&lt;br&gt;&lt;br&gt;Да. За удобством лучше сразу идти в другие языки, например в раст. Неудобный и нечитабельный вариант с префиксами -- это стандарт де-факто в примерно всех сишных библиотеках. Рантайм-скорость там просто ценят выше, чем удобство разработки.&lt;br&gt;</description>
</item>

<item>
    <title>Программирование объектов на Си в стиле Go (Аноним)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/10517.html#7</link>
    <pubDate>Mon, 05 Jan 2026 16:02:57 GMT</pubDate>
    <description>Всё верно. Просто язык С предназначен только лишь для написания эффективных процедур по обработке байтов, машинных слов и их последовательностей, а не для создания целых программ.&lt;br&gt;</description>
</item>

<item>
    <title>Программирование объектов на Си в стиле Go (zionist)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/10517.html#6</link>
    <pubDate>Mon, 05 Jan 2026 15:21:27 GMT</pubDate>
    <description>&amp;gt; Ты столкнулся с синтаксическим неудобством. Синтаксические проблемы должны решаться на уровне синтаксиса, а не на уровне рантайма.&lt;br&gt;&lt;br&gt;Да, после таких языков как Java и теперь Go писать чисто процедурно как-то неудобно. Хотя когда-то я начинал вообще с Паскаля, где программа по Вирту - это всего лишь алгоритмы и структуры данных.&lt;br&gt;&lt;br&gt;&amp;gt; &quot;Достать указатель на функцию, а затем ее вызвать&quot; -- это дороже, чем просто &quot;вызвать уже известную функцию&quot;.&lt;br&gt;&lt;br&gt;Практически все языки, оперирующие объектами так делают, например C++.&lt;br&gt;&lt;br&gt;&amp;gt; Подход с прикреплением функций к структу -- распространен. Есть сценарии, где такой подход разумен. Например, библиотека по парсингу XML может получать от тебя структ, который ты заполнишь функциями типа open_tag, data, close_tag и т. д., а библиотека далее будет твои функции вызывать в процессе парсинга XML. Но в твоем случае ничего такого нет. Единственное, что ты тут преследуешь -- это синтаксическое удобство. Не надо так. Применяй инструменты сообразно задачам.&lt;br&gt;&lt;br&gt;Ну да, мне выше уже посовет</description>
</item>

<item>
    <title>Программирование объектов на Си в стиле Go (Аноним)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/10517.html#5</link>
    <pubDate>Mon, 05 Jan 2026 14:29:45 GMT</pubDate>
    <description>&amp;gt; Основная мотивация прикрепить функцию к объекту - перенести её из глобального пространства имён в пространство имён конкретно&#091;го инстанса&#093;&lt;br&gt;&lt;br&gt;В глобальном пространстве имен ничего плохого нет. Ты столкнулся с синтаксическим неудобством. Синтаксические проблемы должны решаться на уровне синтаксиса, а не на уровне рантайма. &quot;Достать указатель на функцию, а затем ее вызвать&quot; -- это дороже, чем просто &quot;вызвать уже известную функцию&quot;.&lt;br&gt;&lt;br&gt;Подход с прикреплением функций к структу -- распространен. Есть сценарии, где такой подход разумен. Например, библиотека по парсингу XML может получать от тебя структ, который ты заполнишь функциями типа open_tag, data, close_tag и т. д., а библиотека далее будет твои функции вызывать в процессе парсинга XML. Но в твоем случае ничего такого нет. Единственное, что ты тут преследуешь -- это синтаксическое удобство. Не надо так. Применяй инструменты сообразно задачам.&lt;br&gt;</description>
</item>

<item>
    <title>Программирование объектов на Си в стиле Go (arvenia)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/10517.html#4</link>
    <pubDate>Mon, 05 Jan 2026 11:52:52 GMT</pubDate>
    <description>Идея понятна и макрос fn выглядит аккуратно, но цена &amp;#8212; лишняя сложность и риск поломать инварианты. Для C модульный подход всё же читается и сопровождается проще&amp;#128522;&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

</channel>
</rss>
