LINUX.ORG.RU

А что вы думаете по этому поводу?

 , , ,


1

3

https://github.com/nikitosios/Storage/tree/master/OOP/src

Тут есть реализация ООП на языке си. Да, немного костыльно. Мое мнение: я не использую ООП везде, где надо и не надо, поэтому такого ассортимента возможностей мне хватает. Да и большинству программ должно хватать (имхо, не бейте). Поэиому С++ - перегруженный бесполезный язык, ибо если у вас нормальная программа, то чистого Си будет достаточно, и работает на 5% быстрее, и компилируется быстрее. А если надо ООП, лямбды и прочие модные шняги, то С#, Java, Python к вашим услугам. Что вы думаете по поводу С++ и ООП в Си?



Последнее исправление: nikitosios20031 (всего исправлений: 1)

Ты больной какой-то. Язабан.

slaykovsky ★★★
()

ООП на Си - это Objective-C. А так, да, есть почти божественный Swift и... Python для прототипов. Для веба сойдут и ts с JavaScript'ом/кофескриптом.

menangen ★★★★★
()

Во-первых, где ты там ооп увидел. Во-вторых, не надо натягивать сову на глобус. Если нужно ооп - используй языки с ооп. А то получится страшный макромонстр вроде GObject.

ox55ff ★★★★★
()

Это твой бажный велосипед не нужен, школьник. А С++ промышленный язык программирования, на котором пишут жизненноважные части инфраструктуры сложных нагруженных систем. Этих реализаций ооп куча уже сделана, нет найдется ещё толпа умников с велосипедами, рассуждающие про яп. Идите уже работать, заводы стоят, все реализации ооп в древних языках пишут.

Weres ★★★
()

до-диез, жаба и пистон ненужны. как пожирающие ресурсы тормозные монстры и прямой путь к непонимаю базовых свойств систем и говнокоду.

С и С++ для разных задач. на том и на другом можно писать всё, что угодно. и никакой ООП в С не нужен. потому что это костыль.

Iron_Bug ★★★★★
()
Ответ на: комментарий от dzidzitop

5% взяты из тестов ручками. hello world скомпилировал через gcc и через g++, потом сравнил скорость исполнения. Нк и с программами посложнее так замерял, разница 5% примерно

nikitosios20031
() автор топика

Я думаю, что если тебе хватает возможностей C++, то его и надо использовать. При этом никто не заставляет использовать то, что ты не хочешь использовать. C++ точно будет лучше имитации ООП на C (или имитации шаблонов на макросах).

Legioner ★★★★★
()

Настолько толсто, что аж прям противно.

zamazan4ik ★★
()

ОП, вот когда ты напишешь чего-нибудь в 1000 раз большее твоего хеллоуворлда, тогда, может быть, и поймешь. А так уже надоело одни и те же элементарные вещи нубам объяснять.

asaw ★★★★★
()
Последнее исправление: asaw (всего исправлений: 1)

Что вы думаете по поводу С++ и ООП в Си?

Я думаю, что ты пытаешься украсть то, что украдено до тебя. Бери GObject. https://en.wikipedia.org/wiki/GObject

Zubok ★★★★★
()

5% это смех, а ооп это подход, вроде make_human() human_say() kill_human() etc, остальное (new Human()->say) лишь синтаксический сахар. можно и на асме писать объектно-ориентированно, дело тут не в стрелочках и, кстати, развитое человечество давно именно так и пишет.

anonymous
()
Ответ на: комментарий от anonymous

5% это хэллоу ворлд, где я даже код не корректировал. В больших программах + с использованием всяких модных вещей, которые появились в С++, эта разница будет заметной

nikitosios20031
() автор топика
Ответ на: комментарий от nikitosios20031

yeah, sure. видал 3д игры на дельфи? прололжать? про О3 слыхал?

anonymous
()

Что вы думаете по поводу С++ и ООП в Си?

Много чего. Настолько часто приходится объяснять одно и тоже, что пришлось ну очень много слов написать, дабы хоть чуть-чуть развенчать мифы о преимуществах C на C++: http://eao197.blogspot.com/2016/11/progc-asfikons-c-vs-c-1.html

eao197 ★★★★★
()

Оба языка важны, оба языка нужны. C - устарел, но на нём до фига всего полезного написано, C++ - очень приятный, шустрый и лёгкый для освоения компилироваемый язык.

А, ещё - у тебя ну совсем некрутой OOP получился... Где инкапсуляция, где полиморфизм, где наследственность?

PHPFan
()

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

anonymous
()
Ответ на: комментарий от Iron_Bug

до-диез, жаба и пистон ненужны

никакой ООП в С не нужен. потому что это костыль

Таблетки прими уже.

mix_mix ★★★★★
()
Ответ на: комментарий от eao197

дабы хоть чуть-чуть развенчать мифы о преимуществах C на C++ ... Грубо говоря, если вам нужно на приусадебном участке выкопать яму, то вам достаточно будет простой лопаты. Если вам потребуется не яма, а траншея в несколько десятков метров длиной и пару метров глубиной, то обычной лопаты будет уже недостаточно. Тут желательно подогнать трактор-экскаватор.

Только C++ это не экскаватор а две лопаты - нах две лопаты если одной достаточно.

anonymous
()
Ответ на: комментарий от nikitosios20031

да, именно hello world. Именно тот исходник, на котором тестировал.

zamazan4ik ★★
()

valgrind [1] считает, что в этом маленьком примере есть выход за границу массива в newHuman и утечка памяти в killHuman.

[1]:

$ gcc human.c main.c -o a -ggdb3
$ valgrind --leak-check=full ./a

==18204== Command: ./a
==18204== 
==18204== Conditional jump or move depends on uninitialised value(s)
==18204==    at 0x4A0B118: strlen (vg_replace_strmem.c:454)
==18204==    by 0x3419248DC3: vfprintf (vfprintf.c:1637)
==18204==    by 0x341924F2E0: printf (printf.c:33)
==18204==    by 0x40068A: newHuman (human.c:19)
==18204==    by 0x40074B: main (main.c:7)
==18204== 
Вася родился!
...
==18204== 8 bytes in 1 blocks are definitely lost in loss record 1 of 1
==18204==    at 0x4A07EFF: malloc (vg_replace_malloc.c:299)
==18204==    by 0x4006B9: killHuman (human.c:25)
==18204==    by 0x400795: main (main.c:10)

sf ★★★
()
Ответ на: комментарий от anonymous

следуя вашей логике дотнеты и явы тогда - 100500 пластмассовых совочков, и ребёнок разберётся как этим пользоваться, и даже можно что-то копать/присыпать, но дюже неэффективно.

Вот уж где ЧСВ несоразмерное. Человеки изучившие яркие игрушки пытаются доказать, что это и есть верх эффективности, только бы мозг не напрягать.

nickleiten ★★★
()
Ответ на: комментарий от nikitosios20031

стоило пойти дальше и показать в чём разница в сгенеренных компиляторами бинарниках

dzidzitop ★★
()
Ответ на: комментарий от zamazan4ik

restrict в C++ нет, но можно обернуть макросом специфические для компилятора расширения. тот же g++ позволяет использовать restrict

dzidzitop ★★
()
Ответ на: комментарий от anonymous

Только C++ это не экскаватор а две лопаты - нах две лопаты если одной достаточно.

Матчасть подучите.

eao197 ★★★★★
()
Ответ на: комментарий от nikitosios20031

5% это не hello, world. это разница в загрузке бинарников на программе из одной строки.

dzidzitop ★★
()

Я думаю, что anonimous-а пора банить.

С# и Java довольно медленные и слишком высокоуровневые языки и писать на них те же игровые движки - страшное извращение (в том же Unity весь важный код написан на C и C++, а Minecraft, написанный полностью на Java, во много раз тормознее чем его клоны, написанные на нормальных для игр языках). А в игровых движках ООП очень нужен. Python-у место вообще только в скриптописательстве, плагинопписательстве, вебе и прототипировании ИМХО.

peregrine ★★★★★
()

Особенно понравилось, что время жизни человека равно времени жизни «объекта».

cdshines ★★★★★
()
Ответ на: комментарий от anonymous

Вместо экскаватора можно задействовать взвод стройбата с лопатами

anonymous
()
Ответ на: комментарий от Weres

Это твой бажный велосипед не нужен, школьник. А С++ промышленный язык программирования, на котором пишут жизненноважные части инфраструктуры сложных нагруженных систем. Этих реализаций ооп куча уже сделана, нет найдется ещё толпа умников с велосипедами, рассуждающие про яп. Идите уже работать, заводы стоят, все реализации ооп в древних языках пишут.

вау, прям каноничное сообщение

anonymous
()
Ответ на: комментарий от zamazan4ik

Его уже нет, ибо это была простая программа и я удалил его после теста. Там было что-то вроде:

#include <stdio.h>

int main (void) {

long int x = 0;

for (int i = 0; i < 4000000000; ++i)

for (int it = 0; it < 10000; ++it) ++x;

printf(«hello\n»);

return 0;

}

Скомпилировалось без ошибок и компилятором gcc, и g++, потом тестировал по три раза скорость работы программ командой time. Каждый раз стабильно 5% разницы

nikitosios20031
() автор топика
Ответ на: комментарий от RuCode

Я делал. Немного костыльно, хотя... Сейчас дополню ту программу полиморфизмом и наследованием, потом кину сюда ссыль

nikitosios20031
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.