попросил 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
Санкт-Петербург, Санкт-Петербург и область, Россия
попросил chat gpt проиллюстрировать, то что хочу донести.
хваленый C мартышка и банан
худший C++ мартышка и банан
вся статья - смесь какой-то глупой ненависти, гордыни и софистики. берем причины кривых рук, а ответственность кладем на ООП
Так а почему это минус ООП-то даже при наличии класса «мартышка и банан»? Потому что в ООП-языках нет фичи с исключением полей? Ее нет, потому что это очевидный костыль, созданный решать проблемы неправильной иерархии наследования. Ну убрали вы из структуры ненужные поля, но функции-то продолжают ожидать эти поля. Какой выход? Копипастить функции, написанные для «мартышки и банана», и удалять оттуда поля мартышки? Этот костыль не решает проблемы, созданные кривым архитектором, неважно, ООП это или ФП. Однако, если сравнивать корректную иерархию и для ООП, и для ФП, очевидно, ООП выигрывает благодаря своему интуитивному структурированию кода, который жизненно необходим в больших проектах.
В аргументе про мартышку и банан почему вы решили, что проблема в ООП, а не в руках архитектора, который сделал класс «мартышка и банан»? В этом аргументе вы ведь еще и оперируете к авторитету какому-то, ужас.
А теперь представьте два класса: «мартышка» и абстрактный «фрукт». От фрукта уже наследуем и банан, и что душе угодно, а мартышку даже изменять не надо, потому что она держит абстрактный фрукт. Можно ли такого добиться в условном C? Можно, но будет ли это также красиво, как в C++?
Интересно, в какую сторону будет развиваться LLM-архитектура. Было бы круто, если бы LLM будущего обучились не как огромные хранилища знаний, а лишь самому «когнитивному процессу», а сами знания модель бы получала уже на этапе инференса с использованием RAG-систем. Чисто интуитивно как будто такая модель могла бы конкурировать по бенчмаркам с топовыми моделями, но была бы гораздо меньше по размеру за счет того, что веса не хранят «знания», а лишь извлекают образы из знаний на входе. Существует ли что-то подобное?
Недооцениваете вы Пифагора, мне кажется. Пифагора, который описывал математически описывал струну и говорил, что подобно можно описать всё что угодно. Думаю, покажи Пифагору, что сегодня мы математически описываем не то что тексты или изображения, а само знание и образы, лежащие в основе текстов и изображений с помощью глубокого обучения, он ничуть бы не удивился.