Search
Write a publication
Pull to refresh
0
0

Пользователь

Send message

попросил chat gpt проиллюстрировать, то что хочу донести.

хваленый C мартышка и банан
#include <stdio.h>
#include <stdlib.h>

/* Абстрактный фрукт */
typedef struct Fruit {
    void (*eat)(struct Fruit *);  // указатель на функцию "есть"
} Fruit;

/* Вызов метода eat */
void fruit_eat(Fruit *f) {
    if (f && f->eat)
        f->eat(f);
}

/* Определение класса Banana (банан) как наследника Fruit */
typedef struct Banana {
    Fruit base;           // базовая структура Fruit
    const char *color;    // дополнительные данные для банана
} Banana;

/* Реализация метода eat для банана */
void banana_eat(Fruit *f) {
    Banana *banana = (Banana *)f;
    printf("Едим банан цвета %s\n", banana->color);
}

/* Функция для создания банана */
Banana *create_banana(const char *color) {
    Banana *banana = malloc(sizeof(Banana));
    if (!banana) return NULL;
    banana->base.eat = banana_eat;
    banana->color = color;
    return banana;
}

/* Класс Monkey (мартышка), который держит указатель на абстрактный Fruit */
typedef struct Monkey {
    Fruit *fruit;
} Monkey;

/* Метод, инициирующий процесс поедания фрукта */
void monkey_eat_fruit(Monkey *monkey) {
    if (monkey && monkey->fruit)
        fruit_eat(monkey->fruit);
}

int main() {
    Monkey monkey;
    Banana *banana = create_banana("жёлтый");
    monkey.fruit = (Fruit *)banana;  // мартышка работает с абстрактным фруктом

    monkey_eat_fruit(&monkey);

    free(banana);
    return 0;
}

худший C++ мартышка и банан
#include <iostream>
#include <memory>

using namespace std;

/* Абстрактный класс Fruit */
class Fruit {
public:
    virtual void eat() = 0;  // чисто виртуальная функция
    virtual ~Fruit() {}
};

/* Класс Banana, наследник Fruit */
class Banana : public Fruit {
public:
    void eat() override {
        cout << "Едим банан." << endl;
    }
};

/* Класс Monkey, который содержит указатель на абстрактный класс Fruit */
class Monkey {
    unique_ptr<Fruit> fruit;
public:
    Monkey(unique_ptr<Fruit> f) : fruit(move(f)) {}
    void eatFruit() {
        if (fruit)
            fruit->eat();
    }
};

int main() {
    unique_ptr<Fruit> banana(new Banana());
    Monkey monkey(move(banana)); // мартышка получает абстрактный фрукт, без необходимости изменять свой код
    monkey.eatFruit();
    return 0;
}

вся статья - смесь какой-то глупой ненависти, гордыни и софистики. берем причины кривых рук, а ответственность кладем на ООП

Так а почему это минус ООП-то даже при наличии класса «мартышка и банан»? Потому что в ООП-языках нет фичи с исключением полей? Ее нет, потому что это очевидный костыль, созданный решать проблемы неправильной иерархии наследования. Ну убрали вы из структуры ненужные поля, но функции-то продолжают ожидать эти поля. Какой выход? Копипастить функции, написанные для «мартышки и банана», и удалять оттуда поля мартышки? Этот костыль не решает проблемы, созданные кривым архитектором, неважно, ООП это или ФП. Однако, если сравнивать корректную иерархию и для ООП, и для ФП, очевидно, ООП выигрывает благодаря своему интуитивному структурированию кода, который жизненно необходим в больших проектах.

В аргументе про мартышку и банан почему вы решили, что проблема в ООП, а не в руках архитектора, который сделал класс «мартышка и банан»? В этом аргументе вы ведь еще и оперируете к авторитету какому-то, ужас.

А теперь представьте два класса: «мартышка» и абстрактный «фрукт». От фрукта уже наследуем и банан, и что душе угодно, а мартышку даже изменять не надо, потому что она держит абстрактный фрукт. Можно ли такого добиться в условном C? Можно, но будет ли это также красиво, как в C++?

Интересно, в какую сторону будет развиваться LLM-архитектура. Было бы круто, если бы LLM будущего обучились не как огромные хранилища знаний, а лишь самому «когнитивному процессу», а сами знания модель бы получала уже на этапе инференса с использованием RAG-систем. Чисто интуитивно как будто такая модель могла бы конкурировать по бенчмаркам с топовыми моделями, но была бы гораздо меньше по размеру за счет того, что веса не хранят «знания», а лишь извлекают образы из знаний на входе. Существует ли что-то подобное?

Недооцениваете вы Пифагора, мне кажется. Пифагора, который описывал математически описывал струну и говорил, что подобно можно описать всё что угодно. Думаю, покажи Пифагору, что сегодня мы математически описываем не то что тексты или изображения, а само знание и образы, лежащие в основе текстов и изображений с помощью глубокого обучения, он ничуть бы не удивился.

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity