Re[2]: За что я не люблю С++
От: criosray  
Дата: 01.06.09 11:31
Оценка: +1 -2
Здравствуйте, 0xC0000005, Вы писали:

(бред г-на с хацкерским ником вырезан цензурой)

C>Вот это да, 4 года работаю с жабой в "огромных" (компания лидер в индустрии, не буду называть) индустриальных масштабах, и всегда видел интерфейс как "заплатку" на дырень моно-наследования. А дело было вот как, и это можно увидеть по эволюции, разработчики Явы сказали — нам не нужно множественное наследование, потому-что есть такие кучеряшки, которые могут при помощи паяльной лампы картошку варить, но при этом дерево иерархий превращялось в список, что делало из полиморфизма обрубок.


Дотнет и джава прекрасно обходятся без недоразумения под названием "множественное наследование". boost и stl по структуре и удобству смотряться очень и очень бедно на фоне .NET Framework.

Множественное наследование такой же моветон, как и goto.

(остальной бред г-на с хацкерским ником вырезан цензурой)

C>А много ли явошарпы знают удобных, простых и "интуитивно" понятных способов расширить функционал языка? Вот у меня требование к либе, я хочу регить callbackи вот таким способом:

C>alarmNotifier = GUIHandler::onAlarm + CoreRoutine::onAlarm
C>и что? у вас есть "костыль"? или всё чего нету нам не надо? Ха, это мертвецки неправильно, и обычно такое отмирает как несовершенное.
То, что есть у Вас еще бОльший костыль.

obj.Alarm += OnAlarm;
obj.Alarm += (arg1, arg2) => { /* обработчик здесь */ };

Что до расширяемых .NET языков — смотрите Nemerle и Boo.

C>А как просто вам при вызове логгера указать текущее имя файла, исходника я имею ввиду,ай как вы ругали макросы, это так, это сяк, а как вы напишете:

C>logger::log(__filename__, __line__, "log text")


catch(Exception e) {
   Log.Error(e); // через рефлексию будет собрана информация об исключении, потоке, методе, сборке, стеке вызовов(!!!)
   throw;
}



И Вы осмеливались утверждать, что Вы что-то знаете об управляемых языках? Да уж по части логеров управляемые языки рвут неуправляемые (в т.к. С++), как тузик — грелку. Вам только мечтать об удобстве отладки и логирования, предоставляемых средствами управляемых сред.

C>Ага, а теперь скажите мне, у меня огромный обьект, но я хочу сериализовать только, замете слово ТОЛЬКО хидеры во всей иерархий, вот так я это использовал:

C>dataStream << Modifiers::HeadersOnly << hugeObject;

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

    [JsonObject(MemberSerialization.OptIn)]
    public class LoginResult
    {
        private ResultErrors errors = new ResultErrors();

        [JsonProperty("success")]
        public bool Success { get; set; }

        [JsonProperty("errors")]
        public ResultErrors Errors
        {
            get { return errors; } 
        }
    }



C>Слабо? или вы можете кичиться только готовыми фичами, но поверте мне, до 50% времени у больших команий использующих НЕуправляемые языки уходит на обход невозможности что-то сделать самому.

Исправил.

И давайте честно, с примерами — сделайте мне на Яве универсальный алгоритм, да, который берёт генерик класс и делает с ним что-то своё, что есть общее для генерика. И не говорите мне что этот обрубок шаблонного метода вообще можно считать генерик, напишите-ка

Вы сначала заставьте это компиллироваться под С++

C>public <T> void f()

C>{
C> T t = new T();
C> t.f();
C>}

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

Что это за чушь?

C>Знаете что было придумано дабы обойти всё это? был сделан препроцессор для Явы, да, препроцессор, вернулись к яблони таки.

Какой еще препроцессор? Опишите задачу, чтоли. Посмотрим в чем у Вас ошибка дизайна.

C>Вот скажите мне серьёзно, хоть один реальный пример в рамках одного приложения(про распределённые системы отдельный разговор), когда на этапе компиляции тип обьекта не известен, а если он известен, то зачем его узнавать? Потеряли — плохой дизайн и кучерявые руки!!! + обрезанность языка.

COM


C>

C>void func1 ( A& a );

C>void func2 ( A a );

C>В чем разница между этими описаниями (кроме того, что возможно программист просто пропустил символ '&') ?

C>а в чём разница между func1(a) и func1(a.clone()), в том что в первом варианте кодер забыл вызвать клон
C>А как передать строку в Яве, чтобы она была output parameter? Вот смеху то, надо создавать холдеры, и почему в яве

Ну давайте вспомним строки — самое больное место С++, чтоб забить последний гвоздь в гроб этого языка.

C>
C>void f(String s)
C>{
C>    s = "I'm dummy";
C>}
C>


C>переданный параметр не поменяется? и Вообще ни один параметр не поменяется? ах сколько говна было сьедено на этом миллионами программистами и тестерами. И вы говорите о том что управляемые языки там просты?

Миллионами индусокодеров?

Опять же, в С# есть out параметры.

А уж если кидаться какашками, то давайте вспомним в С/С++ классическую ошибку:
if (a = 1) { ... }

об которую спотыкаются даже опытные программисты. Что заставляет многих применять костыль:

if (1 == a) { ... }

А уже про миллионы проблем, связанных с десятками реализаций строк и работы со строками в С++ на Вашем месте я б скромно умолчал.


C>TO BE CONTINUED!!!

Не позорьтесь так больше.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.