LINUX.ORG.RU

Ушат помоев в сторону крестолюбов

 , , ,


15

14

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

Последние 7 лет я пишу сугубо на C, и только под Linux (да, да -std=gnu99 и accept4, dup3, __attribute__((cleanup(dtor))) и прочие приятности, позволяющие сделать волосы шелковистее на 15.5%) и не понимаю, для чего вообще нужен C++? То, что на сишке делается красиво и элегантно, в крестах напоминает соитие парализованных дцпшников (к сожалению, утерял картинку, но именно этот образ всплывает в голове, когда вижу очередную порцию крестолапши).

Давайте посмотрим на типичного C++ разработчика: он использует STL, boost, многие любят Qt (не только для GUI), якобы чтобы «писать кроссплатформенный код». В итоге болезный не знает током ни WinAPI, ни POSIX — ничерта. Он абсолютно не разбирается, как работает целевая система, для которой пишет код! Крестокодер просто не осознает, какой лютый ужас кроется за его любимыми iostream-ами, какое лютое говно лежит в boost::filesystem::path, насколько убого-низкоуровневым является boost::asio в 2016 году.

Только крестораб может эпично обосраться и просадить производительность, забыв передавать по ссылке параметры для «горячих» функций (то есть, просто забыв написать «&» в нужном месте).

Также эти убогие завистливо смотрят на type inference в языках, проектировавшихся не как «C на стероидах», и в ответ начинают лепить template и auto не к месту, от чего код адово пухнет и даже IDE перестает его понимать.

Серьезно, просто прекратите писать на этом языке. В следующий раз, начиная новый проект, выберите java (щютка)/go/swift/rust/c. Прекратите насиловать труп и отравлять зловонием все вокруг!

Перемещено true_admin из talks

Он абсолютно не разбирается, как работает целевая система, для которой пишет код!

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

morse ★★★★★ ()

Ты, наверное, хороший программист.

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

Да что там, к чему лишняя скромность — лучший!

Stahl ★★☆ ()

C - отвратительное уродливое поделие конца 60-х годов, а С++ - работа над ошибками, хоть как-то приводящее этот ужас в приличный вид. Естественно что на 2016 год не актуально ни то, ни другое, все используют .NET или Java.

inchallah ()

auto не к месту

от чего код адово пухнет

Лол.

E ★★★ ()

В следующий раз, начиная новый проект, выберите ... go

Спасибо, что высказали своё мнение, оно очень важно для нас!

Softwayer ★★ ()

забыв передавать по ссылке параметры

пишу сугубо на C

Конечно, сишники не забывают передавать параметры по ссылке — ведь в си нету ссылок, лол.

fluorite ★★★★★ ()

C не хватает одного: модулей, хотя бы как в Python. Чтобы не

#include <stdio.h>
...
    printf("%d\n", a + b);
...
а один из двух вариантов:
from "stdio.h" import printf;
import "stdio.h" as io;
...
    printf("%d\n", a + b);
    io.printf("%d\n", a + b);
...

Deleted ()

Серьезно, просто прекратите писать на этом языке. В следующий раз, начиная новый проект, выберите java (щютка)/go/swift/rust/c. Прекратите насиловать труп и отравлять зловонием все вокруг!

Пукнул тролль с браузера, написанного на C++.

EXL ★★★★★ ()

В следующий раз, начиная новый проект, выберите java (щютка)/go/swift/rust/c.

В следующий раз, начиная писать пост, одумайтесь и просто не делайте это.

xaizek ★★★★★ ()

В итоге болезный не знает током ни WinAPI

его какбэ и не надо знать. 1993-й год был 23 года назад, сейчас это api deprecated.

lenin386 ★★★ ()

Крестокодер просто не осознает, какой лютый ужас кроется за его любимыми iostream-ами, какое лютое говно лежит в boost::filesystem::path, насколько убого-низкоуровневым является boost::asio в 2016 году.

После милой дискуссии между тобой и mashina о «пуллинге» это звучит забавно.

tailgunner ★★★★★ ()

ТС, вот давай простой пример. Вот ты пишешь на своём любимом Цэ 99 с гну некую софтину и по ходу дела возникает необходимость (API/протокол вынуждает тебя этим заниматься) сделать динамическую хэш-таблицу, ассоциирующую строки с большими структурами. Как ты это изобразишь?

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

напоминает соитие парализованных дцпшников (к сожалению, утерял картинку

Оригинал найти не смог, но вот кое-что похожее https://f1.mylove.ru/l_41gDOCWDlhLTYyP.jpg

drull ★☆☆☆ ()

Последние 7 лет я пишу сугубо на C
Прекратите насиловать труп и отравлять зловонием все вокруг!

Мде. Чья бы корова мычала.

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

сделать динамическую хэш-таблицу

https://troydhanson.github.io/uthash/userguide.html При этом строки со структурами буду укладывать в один блок памяти, полностью избегу копирования, а если жизнь потребует, еще и память могу по-особому выделять. Шах и мат!

kawaii_neko ★★★ ()
Ответ на: комментарий от Deleted
from "stdio.h" import printf;
import "stdio.h" as io;

Да, но тут еще встает раком вопрос линковки... Вот по этому модулей еще нет в стандарте С++14. Надеемся и ждём.

KennyMinigun ★★★★★ ()

Маладец, уже советовали взять с полки пирожок?

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

Я именно про Си, без сохранения прямой совместимости с C++. То есть реализация C++ namespace'ов только со стороны использующего библиотеку, а не пишущего. То есть имя namespace'а по хорошему должен определять пользователь, ибо конфликты будут в первую очередь на его стороне, а не на стороне библиотеки.

Deleted ()
Последнее исправление: merhalak (всего исправлений: 1)
Ответ на: комментарий от kawaii_neko

https://troydhanson.github.io/uthash/userguide.html При этом строки со структурами буду укладывать в один блок памяти, полностью избегу копирования, а если жизнь потребует, еще и память могу по-особому выделять. Шах и мат!

Давай ты мне не сказки будешь рассказывать, а просто приведешь работающий аналог на C.

#include <iostream>
#include <string>
#include <unordered_map>
#include <utility>

struct S
{
    int i;
    std::string s;
};

int main()
{
    std::unordered_map<std::string, S> m;
    
    m.emplace(std::make_pair<std::string, S>("one", {1, "cat"}));
    m.emplace(std::make_pair<std::string, S>("two", {2, "dogs"}));
    m.emplace(std::make_pair<std::string, S>("three", {3, "cows"}));
    
    for (auto& p : m) {
        std::cout << p.first << " (" << p.second.i << ") " << p.second.s<< std::endl;
    }
}
http://cpp.sh/36tg

DELIRIUM может присоединиться.

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

WinAPI

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

Только крестораб может эпично обосраться

Только пользователь языка без RAII может эпично обосраться, забыв написать free, release, close (и т.п.) для ресурса в одной из веток if-then-else и потом, когда код уже в продакшне, в панике искать баги, которые появляются только в определенную фазу луны и логи и трэйсы ему нифига не помогают.

invy ★★★★★ ()
Последнее исправление: invy (всего исправлений: 1)
Ответ на: комментарий от Manhunt

Мде. Чья бы корова мычала.

linux kernel — C, bash — C, zsh — C, Xorg — C, openssh - C, gcc — C (да, до сих пор на 90% состоит из сишного кода, который компилируется плюсовым компилятором, на крестах там только go-шная часть да libstdc++/libjava, а мотивация перехода была «более строгая проверка типов»), vim — C, emacs — C. Словом, на сишке очень много софта, который активно развивается.

На крестах более-менее полезными можно назвать clang, firefox и webkit. При этом плюсовое API у шланга такое, что мама дорогая. Впрочем, как и все крестовое — ведь плюсокодеры сосредотачиваются на решении задачи, а не о написании поддерживаемого кода.

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

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

А native приложения как пишут?

Только пользователь языка без RAII может эпично обосраться, забыв написать free, release, close (и т.п.)

__attribute__((cleanup())), но это нужно крайне редко, потому что чем меньше скрытых действий, тем легче код в понимании и поддержке.

И уж для памяти RAII самое убогое решение — десятки лет как существуют значительно более продвинутые техники, позволяющие избежать утечек и фрагментации памяти, при этом значительно превосходящие RAII-поделки по скорости. Но я же говорю: типичный крестофаг считает shared_ptr венцом творения — о чем с таким говорить?

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

На крестах более-менее полезными можно назвать clang, firefox и webkit.

А теперь попробуй удалить libstdc++ со своей рабочей станции, и послушай, что тебе на это скажет пакетный менеджер :D

Словом, на сишке очень много софта, который активно развивается.

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

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

Native приложения пишутся без win32. Там используется native api, оттуда и название, ЛОЛ. К win32 там доступа нет и быть не может. Облажался ты, хипстерок. https://technet.microsoft.com/ru-ru/sysinternals/bb897447.aspx

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

В итоге болезный не знает током ни WinAPI, ни POSIX — ничерта.

Крестокодер просто не осознает, какой лютый ужас кроется за его любимыми iostream-ами, какое лютое говно лежит в boost::filesystem::path, насколько убого-низкоуровневым является boost::asio в 2016 году.

Твои влажные фантазии о том, что кто-то это не знает.

----------

Вопрос: почему любой спец. софт (автокады, фотошопы и т.п., тысячи их) написан на С++, и даже если их разработчиков попросили бы написать снова с нуля - они опять бы выбрали плюсы? Даже если новых разрабов набрать. При этом детсадовские фантазии на тему того, что ты один умный, а все дебилы оставь при себе.

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

А что на замену? В смысле, что не deprecated? posix под винду вроде так и не завезли.

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

Давай ты мне не сказки будешь рассказывать, а просто приведешь работающий аналог на C.

Не устаю проигрывать с крестокачества:

$ valgrind ./a.out 
==10722== Memcheck, a memory error detector
==10722== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==10722== Using Valgrind-3.10.1 and LibVEX; rerun with -h for copyright info
==10722== Command: ./a.out
==10722== 
three (3) cows
two (2) dogs
one (1) cat
==10722== 
==10722== HEAP SUMMARY:
==10722==     in use at exit: 72,704 bytes in 1 blocks
==10722==   total heap usage: 11 allocs, 10 frees, 73,084 bytes allocated
==10722== 
==10722== LEAK SUMMARY:
==10722==    definitely lost: 0 bytes in 0 blocks
==10722==    indirectly lost: 0 bytes in 0 blocks
==10722==      possibly lost: 0 bytes in 0 blocks
==10722==    still reachable: 72,704 bytes in 1 blocks   ///// nice RAII guys
==10722==         suppressed: 0 bytes in 0 blocks
==10722== Rerun with --leak-check=full to see details of leaked memory
==10722== 
==10722== For counts of detected and suppressed errors, rerun with: -v
==10722== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

На ровном месте 10 аллокаций памяти. Просто шикарно, я считаю!

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

Native приложения пишутся без win32

То есть, CreateProcessEx и OpenFileEx теперь легаси?

Там используется native api, оттуда и название

Ты уж извини, я не шибко в курсе программирования под Windows, но судя по https://en.wikipedia.org/wiki/Native_API из нас двоих жиденько обкакунькался как раз ты.

хипстерок

Вот даже обидно стало. Как будто я тебе предложил десктоп апликейшн на атоме написать.

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

Talk is cheap. Show me the code.

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

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

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

Давай ты мне не сказки будешь рассказывать, а просто приведешь работающий аналог на C.

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

Так у тебя то сколько аллокаций? У тебя вообще никаких аллокаций нет и не будет просто потому, что тебе будет тупо ЛЕНЬ писать код для работы с хэш-таблицами, ты сделаешь тупой массив с фиксированными строками и будешь делать по нему полный перебор всякий раз, когда тебе понадобится искать по ключу. При этом твой код всё равно будет в десять раз больше, и там будут ошибки (в отличие от приведенного варианта на C++ - твой примитивный камент про RAII показывает, что ты ничего не понимаешь не только в C++, но и в том, что может выдавать valgrind).

asaw ★★★★★ ()

Ты в трайбализм не впадай, будь выше этого.

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

Ну, ссылку ты нашёл. Теперь потрудись прочитать её. Native приложения стартуют до win32, нельзя там дотянуться до win32., она ещё не стартовала.Ты ругался на то, что плюсовики не понимают, как все работает. Я смотрю ты прям ас.

lenin386 ★★★ ()
Последнее исправление: lenin386 (всего исправлений: 1)
Ответ на: комментарий от kawaii_neko

__attribute__((cleanup()))

Это гнушное нестандартное и не портируемое расширение.

invy ★★★★★ ()

Прродолжайте наблюдение, мы с вами обязательно свяжемся.

Верной дорогой идёшь, расширяй аудиторию, свяжись с автором, твой вклад будет неоценим.

pon4ik ★★★★★ ()
Последнее исправление: pon4ik (всего исправлений: 1)
Ответ на: комментарий от lenin386

Native приложения стартуют до win32

Ты доколебался до столба. Всем, кроме тебя, понятно, что речь шла о native Win32 application, а не о native NT API application. Да и тебе это понятно, но ты решил порисоваться знанием редких терминов.

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

Нормально всё будет при использвании hcreate hsearch. Код понятнее и короче твоего, только конечно максимальное количество элементов надо знать и большие структуры надо хранить отдельно. Я бы написал, но мне лень и я в кровати.

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

В рамках безумия:

#include "Cello.h"

struct S {
    int i;
    var s;
};
var S = Cello(S);

int main(int argc, char** argv) {
    var m = new(Table, String, S);

    set(m, $S("one"), $(S, 1, $S("cat")));
    set(m, $S("two"), $(S, 2, $S("dogs")));
    set(m, $S("three"), $(S, 3, $S("cows")));

    foreach (key in m) {
        struct S* value = get(m, key);
        println("%s(%i)%s", key, $I(value->i), value->s);
    }
}
PolarFox ★★★★★ ()
Ответ на: комментарий от lenin386

Тебе лень - я об этом и написал. А лень потому, что «код понятнее и короче твоего» - просто сказки 1001 ночи.

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

Native win32 app - это термин, который придумал Баллмер чтобы как можно более гнусно обозвать приложения не для его облака. я думал, такие слова знают только хипстерки, но не важно. Важно то, что в этих native win32 app, само win32 почти и не используется. Ты хоть представлешь, как выглядит приложение, написанное на чистом win32 ? Там же фонт либо console, либо прибитый гвоздями. Средства локализации как класс отсутствуют.

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