Здравствуйте, 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!!!
Не позорьтесь так больше.