LINUX.ORG.RU
ФорумTalks

C vs. C++

 ,


2

9

Чего такого умеют кресты, что не умеет Си?

Шаблоны - никто не пользует.

Перегрузка операторов - вообще дурь какая-то: не понятно чего ожидать от полюса или минуса.

Очевидный ответ - объекты , а так уж они нужны? Ну вот есть объект - библиотека работы с сокетами. Создал экземпляр, заполнил поля с адресом и портом, выполнил метод connect. Попользовался, освободил память. И чем оно лучше, чем если бы я запилил структуру и набор функций для работы с ней?

За скобки вынесем области применения, где преимущества объектного подхода очевидны: игры, ГУЙ и прочее. Поговорим об остальном.

Перемещено tailgunner из development

★★★★★

Видел без комментариев.

a1batross ★★★★★
()

Шаблоны - никто не пользует.

Пруфы?

Перегрузка операторов - вообще дурь какая-то: не понятно чего ожидать от полюса или минуса.

Примеры не-васяновских библиотек/приложений где это так?

Очевидный ответ - объекты , а так уж они нужны? Ну вот есть объект - библиотека работы с сокетами. Создал экземпляр, заполнил поля с адресом и портом, выполнил метод connect. Попользовался, освободил память. И чем оно лучше, чем если бы я запилил структуру и набор функций для работы с ней?

Объекты - хрен знает. RAII - нужно, как минимум до тех пор пока программы пишутся кожаными мешками.

Deleted
()

Наверное ты вообще в жизни не видел ни C, ни C++ кода и отвечать тебе не имеет смысла.

slovazap ★★★★★
()

Или переиграем.

Шаблоны - никто не пользует.

А что там C предлагает на замену? Угадать тип за void* или макросами сделать ещё один? Чем это лучше шаблонов?

Перегрузка операторов - вообще дурь какая-то: не понятно чего ожидать от полюса или минуса.

Определение функций - дурь какая-то: не понятно чего ожидать от функции add или sub.

int add(int a, int b) {
    return a / b;
}
int sub(int a, int b) {
    return a * b;
}

Deleted
()

Наследование, ссылки, перегрузка. Да, c++ нужен для игр и гуя, там это полезно:

class CHuman: CBaseNPC...
new MenuBuilder().AddItem(...).AddItem(...).Show
Vector3 a(0,0,1), b(0,1,0);
Vector3 c = a + b;

Ещё можно сделать всякие умные указатели, референсы, которые будут например кидать исключение если объект был удалён вместо UB или возвращать nullptr вместо указателя на мусор.
И разумеется лучше писать самому

Шаблоны - по минимуму. Разве что если нужен сериализатор или контейнер генеричный. И то с ними надо быть аккуратнее, но получится по коду компактнее чем в C, если не переборщить

Остальные фичи в c++ в общем-то не сильно юзабельны
Разве что исключения полезны при работе с сетью или чем-то таким. Я бы использовал c++ для gui и игрового кода. И разумеется не весь c++, а в основном выше перечисленные фичи

P.S видел с одним комментарием

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

Чего такого умеет си вообще? Переменные и функции? Привет, 60-е, светлое время.

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

Я хочу послушать разные стороны. Тут есть люди поумнее меня, повпитываю мудрости на халяву

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

Я, если вдруг не ясно, - вообще нуб. В институте учили плюсам, сам сейчас почитал K&R, вот на таком вот уровне. Под мегу пишу ещё мелочи всякие. Ну и то и дело могу чуть-чуть немножечко кода посмотреть. Ну вот мне, кроме как в учебниках, шаблоны не попадались. Понятно, что кто-то использует, но не так чтоб уж ощутимо часто

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

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

pihter ★★★★★
() автор топика

Отличная тема. Люблю такие. Пошел за попкорном.

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

Ну я нуб. Но методику прочёл. Это не выброс хохмы ради. Вы сейчас понапишете всякого про че я не в курсе, а я потом разберусь что к чему и буду чуть менее тёмным.

Классические книги дюже хороши. Но от жизни поотстали, я, по ним учась, про многое и не слышал

pihter ★★★★★
() автор топика

Сильная типизация С++ против слабой в C.

И чем оно лучше, чем если бы я запилил структуру и набор функций для работы с ней?

Для конкретного примера ничем, но вообще, что бы догнать C++, полиморфизм еще нужно запилить. Но тогда, возможно, проиграешь по скорости, ведь в компилятора C++ все равно больше информации. Да и полиморфизм на C будет выглядеть плохо.

vlad9486
()

И чем оно лучше, чем если бы я запилил структуру и набор функций для работы с ней?

Тем, что disconnect и деинициализация сокета выполнится перед завершением программы. RAII удобно, чо.

Поговорим об остальном.

Например?

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

Ну так воид - просто ссылка на память. Это хощь-нехошь - массив байт. Оно для тех случаев, когда не тип важен

Аргумент что за очевидными именами функций можно спрятать не то что подразумевается - шикарный. Беру свои слова про перегрузку взад.

pihter ★★★★★
() автор топика

2018

С vs. C++

Создай еще темы COBOL vs PL/1, perl vs tcl и.т.д.

Оба языка — адское легаси без вменяемой системы типов [1], на котором пишут, потому что надо поддерживать легаси, либо потому что люди ничего лучше не видели, либо потому что банальный религиозный фанатизм (это больше про С).

[1] https://www.youtube.com/watch?v=jJyKp2Hzee0

Freyr69 ★★★
()

К сожалению, гуй требует ООПщины, здесь без крестов не обойтись. А во всем остальном они нафиг не нужны!

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

А что предлагаешь взамен? Нет ни одного ЯП, который был бы кошерней сишечки...

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

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

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

К сожалению, гуй требует ООПщины

Functional reactive programming. В том числе и на крестах, отличная парадигма для рисования гуев, на MVC мир клином не сошелся.

Freyr69 ★★★
()

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

C++ вызывет необратимые поражения головного мозга. Все C++ программисты проходят длительную реабилитацию, перед тем, как начинать писать на нормальных языках - Kotlin, Java, Ruby, Python, Julia и т.д.

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

Ну это такой себе плюс: система типов, которая вопиет, что она полное дно, или система типов, которая претендует на вменяемость, а не деле дырявый unsound ужас с кучей совершенно неявных дыр и косяков. Даже не уверен, что второе лучше.

Для сишки хоть frama-c есть, для крестов ничего подобного.

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

Чего такого умеет си вообще? Переменные и функции? Привет, 60-е, светлое время.

Ну так KISS. Практика показывает, что «переменных и функций» вполне достаточно. Чего нельзя написать на си, но можно на си++?

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

Я не писал о плюсах. Помогал топикстартеру найти различия.

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

Вы сейчас понапишете всякого про че я не в курсе, а я потом разберусь что к чему и буду чуть менее тёмным

Это так не работает.

Покопайся в разных языках; прочитай Design and evolution of C++; попробуй на си эмулировать крестовые фичи; поработай 10 лет на сложных проектах - после этого начнется понимание.

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

Практика показывает, что «переменных и функций» вполне достаточно

Особенно когда этой практики нет, ага.

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

Дальше не читал. Тоньше надо быть, тоньше

А есть вероятность, что я не толстый, а просто любопытный? Я не скрываю, что осознавал провокационность. Я хотел послушать обе стороны, послушать, намотать на ус. Глумиться в планах не было.

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

иди в гугол, там для любопытных целый мир вопрос-ответов уже за многие века сложили, даже с книГ оцифровали и загнали в гугол, наслаждайси

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

Поговорим об остальном.

Например?

Ну о других областях применения языка. Драйверы, например. Ну или задаци обработки информации, генерация ЧПУ-кода по 3d-модели, если угодно

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

Щас все уже ломанулись писать на языках с sound системами типов и учить теоркат.

Даже не уверен, что второе лучше

А те кто на этом пишут - уверены.

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

Все можно написать на почти чем угодно, это не аргумент. Типы данных позволяют писать правильные программы перекладывая значительную (ЗНАЧИТЕЛЬНУЮ) часть работы на компилятор. Есть такие штуки в математике - алгебры, так от, алгебра - это множество элементов и операции на них (говоря по простому). Если у тебя во всех программах алгебры и в ОС тоже, то о всей системе можно будет доказывать утверждения автоматически.

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

Щас все уже ломанулись писать на языках с sound системами типов и учить теоркат.

Для этого абсолютно не нужна теория категорий, только конструктивная логика.

А те кто на этом пишут - уверены.

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

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

Создай еще темы COBOL vs PL/1, perl vs tcl и.т.д.

Ну и Си и Перл еще нас с тобой переживут.

Оба языка — адское легаси без вменяемой системы типов

Это фича, имхо.

на котором пишут, потому что надо поддерживать легаси

безпорно

либо потому что люди ничего лучше не видели,

А что лучше? На си уже написано все. Литература есть и спросить есть у кого. Написать на Си что-угодно легче, чем на каком-нибудь расте или го или че там у вас. Ну это имхо, разумеется

либо потому что банальный религиозный фанатизм (это больше про С).

либо KISS?

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

К сожалению, гуй требует ООПщины, здесь без крестов не обойтись. А во всем остальном они нафиг не нужны!

Ну это смысл ОП-поста же.

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

впитывай мудрость по средством чтения того что мудрые люди написали в интернетах

освой гугл для чайников, вводи свой вопрос и читай все возможные ответы

А почему бы тут не спросить? Тут «живое» общение, ну и развлечемся заодно. Вон люди за попкорном пошли, пара человек подписалась уже. Не бугурти. Лучше по сабжу ценное мнение выскажи

к старости дойдет

хорошо бы. люди говорят, что я просто слаще морковки ниче не пробовал, поэтому морковку люблю. я бы поспорил

а вбросами занимается только школота

Это из научного интереса, никакой толстоты. люди, по твоему совету, погуглят и почитают эту тему. польза же

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

писать на нормальных языках - Kotlin, Java, Ruby, Python, Julia и т.д.

Единственный нормальный язык - это JavaScript

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

Для этого абсолютно не нужна теория категорий

Я про другое: разные хаскели мало кому интересны по понятным причинам. А из популярного - оно всё unsound.

Ну что с них взять

Есть и другие. Те, кто между ужасным и удовлетворительным выберет удовлетворительное.

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

ну и развлечемся заодно


я за бан

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

Оба языка — адское легаси без вменяемой системы типов [1], на котором пишут, потому что надо поддерживать легаси, либо потому что люди ничего лучше не видели, либо потому что банальный религиозный фанатизм (это больше про С).

Ок, какие ваши предложения?)

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

Вы сейчас понапишете всякого про че я не в курсе, а я потом разберусь что к чему и буду чуть менее тёмным

Это так не работает.

Но я ничего не теряю.

Покопайся в разных языках; прочитай Design and evolution of C++; попробуй на си эмулировать крестовые фичи; поработай 10 лет на сложных проектах - после этого начнется понимание.

Ну я потихоньку.

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

Практика показывает, что «переменных и функций» вполне достаточно

Особенно когда этой практики нет, ага.

Я не про свою практику, а про общемировую. Про то, что люди кой-чего на Си уже написали пруфы надо?

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

перед тем, как начинать писать на нормальных языках

Kotlin, Java, Ruby, Python, Julia

Эх, а ведь до этого места вполне даже тонко было.

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