C# - from indians by indians
От: mapnik США http://www.hooli.xyz/
Дата: 22.05.15 09:15
Оценка: -5 :))) :))
Господа, я не уверен было уже или нет. Думаю что да, прошу прощения за возможное повторение.
Читаю подобные темы и неудержимо тянет на гомерический хохот
http://rsdn.ru/forum/dotnet/6006483.flat.1
Автор: Sinix
Дата: 07.04.15

http://rsdn.ru/forum/dotnet/6053731.flat.1
Автор: Sinix
Дата: 20.05.15


"С# такая няшечка, в нем столько красивых рюшечек...". Все это в целом мило, но что насчет реально нужных фич, которые имеют действительно сильные проверенные временем ОО-языки?
Простейший пример оператор const в С++ в применении к функциям (Constant Member Functions).

Пример на С#:

public sealed class World
{
    ...
    private hkpWorld physicsWorld;
    ...
    
    public World()
    {
        //initialize world's physics and geometry with default values
        setupWorld(defaultGravity, defaultSize, defaultBorderBehaviour);
    }

    ...
    public hkpWorld getWorld()
    {
        //Yellow!!!
        //I'm Rajesh, I got Phd in India and now I'm going to fix one bug!
        
        hkpWorldCinfo worldInfo = new...;
        //let's change gravity from 9.8f to 10 because...
        worldInfo.m_gravity = 10;
        physicsWorld = new hkpWorld(worldInfo);
        ...
        //Hello, I'm mapnik and I see this code
        //FUUUUUUCK!!!
        return physicsWorld;
    }
    ...
}


И пример на С++, не допускающий подобного:

class World {
public:
    World(){
        //initialize world's physics and geometry with default values
        setupWorld(defaultGravity, defaultSize, defaultBorderBehaviour);
    }
    ~World();

    //No Radjesh you can't :)))            
    hkpWorld*    getWorld() const { return physicsWorld; };
    ...

private:
    ...
    hkpWorld *        physicsWorld;
    ...
};


Очень правильный механизм "защиты от дурака".

Discuss, господа, discuss
Отредактировано 22.05.2015 9:16 a_g_99 . Предыдущая версия .
Re: C# - from indians by indians
От: GarryIV  
Дата: 22.05.15 09:18
Оценка: -7
Здравствуйте, mapnik, Вы писали:

M>Простейший пример оператор const в С++ в применении к функциям (Constant Member Functions).


безотносительно фич шарпа const в С++ есть кривой костыль
WBR, Igor Evgrafov
Re: C# - from indians by indians
От: kvasya  
Дата: 22.05.15 09:20
Оценка:
Здравствуйте, mapnik, Вы писали:

M>Пример на С#:


M>
M>public sealed class World
M>{
M>    ...
M>    private readonly hkpWorld physicsWorld;
M>    ...
    
M>    public World()
M>    {
M>        //initialize world's physics and geometry with default values
M>        setupWorld(defaultGravity, defaultSize, defaultBorderBehaviour);
M>                
M>        hkpWorldCinfo worldInfo = new...;
M>        worldInfo.m_gravity = 9.8;
M>        physicsWorld = new hkpWorld(worldInfo);
M>    }

M>


Но я фанат C++
Отредактировано 22.05.2015 9:21 kvasya . Предыдущая версия .
Re[2]: C# - from indians by indians
От: mapnik США http://www.hooli.xyz/
Дата: 22.05.15 09:29
Оценка:
Здравствуйте, kvasya, Вы писали:

M>>Пример на С#:


Нет потому что physicsWorld не инициализируется в конструкторе по определенным причинам.
Re[2]: C# - from indians by indians
От: mapnik США http://www.hooli.xyz/
Дата: 22.05.15 09:30
Оценка:
Здравствуйте, GarryIV, Вы писали:

GIV>безотносительно фич шарпа const в С++ есть кривой костыль


Некоторые проблемы есть, но преимущества перевешивают недостатки при грамотном использовании
Re: C# - from indians by indians
От: hi_octane Беларусь  
Дата: 22.05.15 09:35
Оценка:
Это вы, как говорится, ещё в ракете не смотрели С небольшой помощью рефлексии можно менять readonly, вызывать приватные методы и творить другие чудеса.

В первой версии C# на это не было времени, в следующих в общем тоже, сейчас стандартный подход к этой проблеме — аттрибут [Pure], и последующая проверка контрактами + подсказки решарпера.
Но фичи нехватает, это да. В Nemerle у меня для этого был макрос и подсветка всех изменяемых переменных и полей болдом.

P.S. Вроде как в тайне приближаются immutable типы, но может и не приближаются.
Re: C# - from indians by indians
От: DreamMaker  
Дата: 22.05.15 09:43
Оценка: +4 -5
Здравствуйте, mapnik, Вы писали:

M>Господа, я не уверен было уже или нет. Думаю что да, прошу прощения за возможное повторение.

M>Читаю подобные темы и неудержимо тянет на гомерический хохот

ну, смех без причины...

С++ — один сплошной чудовищный маразм. С# не идеален, идеального в этом мире ничего нет, но НАМНОГО лучше.

и да, у меня ~18 лет на С++ и 4 на шарпе. и таких как я немало. а вот чтобы человек с шарпа перешел на плюсы и радовался — что-то о таком не слышал.
In P=NP we trust.
Re: C# - from indians by indians
От: Sinix  
Дата: 22.05.15 09:48
Оценка: +4 -1
Здравствуйте, mapnik, Вы писали:


M>"С# такая няшечка, в нем столько красивых рюшечек...". Все это в целом мило, но что насчет реально нужных фич, которые имеют действительно сильные проверенные временем ОО-языки?


Всё расписано до нас
Автор: Sinix
Дата: 21.05.15
:

Если серьзно, то начиная с шестого шарпа очевидно поменялся подход к отбору фич.
Классика "дизайним очередной big thing и вылизываем всё, что с ним связано" никуда не делась.
Но помимо неё в язык по мере возможности добавляется мелочёвка, которая почти не влияет на public API и которая не особенно нужна в энтерпрайзе (серьёзно, если в коде такой баррдак, что даже приватные методы использовать небезопасно, ну сделай ты рефакторинг!).

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


Immutable входит в список big-thing-кандидатов на следующий релиз.

Если хочется аж пипец как — пишем свой [ImmutableAttribute] + проверку в FxCop или реврайтим ч/з постшарп. Дел на два дня вместе с изучением. Я что-то такое писал лет восемь назад, выкинуто за ненадобностью.
Потому что в реальной жизни Раджеш просто выпилит const/извратится с const_cast (или как там его?).

M>Discuss, господа, discuss

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

UPD и да, в любом более-менее пристойном месте попытка закомитить код, который нарушает даже соглашения по именованию, приведёт к выпилу кода, Раджеша и люлям для нанявшего и тимлида. Ибо нефиг.
Отредактировано 22.05.2015 9:56 Sinix . Предыдущая версия .
Re[2]: C# - from indians by indians
От: mapnik США http://www.hooli.xyz/
Дата: 22.05.15 10:02
Оценка: -3 :)
Здравствуйте, Sinix, Вы писали:

S>Если хочется аж пипец как — пишем свой [ImmutableAttribute] + проверку в FxCop или реврайтим ч/з постшарп. Дел на два дня вместе с изучением. Я что-то такое писал лет восемь назад, выкинуто за ненадобностью.

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

S>Потому что в реальной жизни Раджеш просто выпилит const/извратится с const_cast (или как там его?).

Раджеш не выпилит const (иначе выпилят его) и он не знает про const_cast. Раджеш справедливо боится трогать чужой без детальных инструкций по шагам. Но если что-то не запрещено, то он в принципе волен делать что ему в голову придет — это вполне логично и справедливо. C# поощряет такой подход на уровне дизайна. С++ наоборот может подсказать новичку, что "вот так менять гравитацию" нельзя на уровне синтаксиса.

S>Во-вторых, если уж припёрло, покрываешь сеттеры дебаг-ассертами и пусть твой Раджеш хоть через рефлексию ломится.

Пути есть но они сложные и тупые. Я хочу видеть элегантный дизайн языка из коробки для подобных вещей. C# подход подталкивает к написанию говнокода из коробки.
Re: C# - from indians by indians
От: agat50  
Дата: 22.05.15 10:12
Оценка:
Здравствуйте, mapnik, Вы писали:

Сделай свойство и проверку на null в set, проблем то.
Re: C# - from indians by indians
От: AlexRK  
Дата: 22.05.15 10:21
Оценка: +2 :)
Здравствуйте, mapnik, Вы писали:

M>И пример на С++, не допускающий подобного:


class World {
public:
    World(){
        //initialize world's physics and geometry with default values
        setupWorld(defaultGravity, defaultSize, defaultBorderBehaviour);
    }
    ~World();

    //No Radjesh you can't :)))            
    hkpWorld* getWorld() const
    {
        //Yellow!!!
        //I'm Rajesh, I got Phd in India and now I'm going to fix one bug!
        
        hkpWorldCinfo worldInfo = new...;
        //let's change gravity from 9.8f to 10 because...
        worldInfo.m_gravity = 10;
        auto myRajeshphysicsWorld = new hkpWorld(worldInfo);
        ...
        //Hello, I'm mapnik and I see this code
        //FUUUUUUCK!!!
        return myRajeshphysicsWorld;
    };
    ...

private:
    ...
    hkpWorld *        physicsWorld;
    ...
};


ы?
Re[2]: C# - from indians by indians
От: mapnik США http://www.hooli.xyz/
Дата: 22.05.15 10:34
Оценка: -3
Здравствуйте, AlexRK, Вы писали:

ARK>ы?


Ваш пример хороший потому как я старался привести простейший пример для понимания. В реальной жизни Раджеш не сможет создать с нуля physicsWorld, это сложный объект с множеством не очевидных мемберов и методов. Если что-то инициализировать некорректно, все сразу упадет.
Re[3]: C# - from indians by indians
От: AlexRK  
Дата: 22.05.15 10:40
Оценка: +5
Здравствуйте, mapnik, Вы писали:

M>Ваш пример хороший потому как я старался привести простейший пример для понимания. В реальной жизни Раджеш не сможет создать с нуля physicsWorld, это сложный объект с множеством не очевидных мемберов и методов. Если что-то инициализировать некорректно, все сразу упадет.


Ну в вашем C#-примере он ведь смог.
Re[4]: C# - from indians by indians
От: mapnik США http://www.hooli.xyz/
Дата: 22.05.15 10:42
Оценка: -2
Здравствуйте, AlexRK, Вы писали:

ARK>Ну в вашем C#-примере он ведь смог.


Но это же упрощение для вас в контексте дискуссии. В реальности он смог только изменить значение гравитации
Re[5]: C# - from indians by indians
От: AlexRK  
Дата: 22.05.15 10:46
Оценка: +4
Здравствуйте, mapnik, Вы писали:

ARK>>Ну в вашем C#-примере он ведь смог.


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


Но, получается, если создать новый мир он не смог, то он смог передать свое неверное значение гравитации в существующий экземпляр мира?
Тогда и в C++ он это сможет.
Re[3]: C# - from indians by indians
От: Sinix  
Дата: 22.05.15 10:51
Оценка: +2
Здравствуйте, mapnik, Вы писали:

M>Я не хочу бороться со средой, я хочу иметь такой дизайн языка который позволит мне расставлять rules, которые станут опорными точками для Раджешей.


Только code review + отсеивание на испытательном сроке. Иначе вы больше потратите, чем выиграете. Ну и начиная с рослина всякие проверки типа таких пишутся на раз-два.


M>Раджеш не выпилит const (иначе выпилят его) и он не знает про const_cast. Раджеш справедливо боится трогать чужой без детальных инструкций по шагам.

Не надо недооценивать стажёров

M>C# поощряет такой подход на уровне дизайна. С++ наоборот может подсказать новичку, что "вот так менять гравитацию" нельзя на уровне синтаксиса.

Геттер без сеттера + init-метод?


M>Пути есть но они сложные и тупые. Я хочу видеть элегантный дизайн языка из коробки для подобных вещей. C# подход подталкивает к написанию говнокода из коробки.

Не больше и не меньше, чем другие языки. Просто перед тем как писать API, надо изучить готовые рекомендации. Для шарпа design guidelines расписаны великолепно.
Re[4]: C# - from indians by indians
От: mapnik США http://www.hooli.xyz/
Дата: 22.05.15 11:50
Оценка: +1 -6 :)))
Здравствуйте, Sinix, Вы писали:

S>Только code review + отсеивание на испытательном сроке. Иначе вы больше потратите, чем выиграете.

Мы таким не занимаемся, у нас не luxoft и не infosys. 19 тим-лидов девочек с украины не держим которые умеют красивый текст в c# на клавиатурке набирать. мне важно что человек знает как инженер, а не как кодер.

S>Ну и начиная с рослина всякие проверки типа таких пишутся на раз-два.

Я хочу использовать дизайн языка а не ковырять очередное поделие от микрософта. Понимаете вы мне все время говорите — "а вот пара дней помучать задницу, и вы разродитесь решением". Меня такой подход не устраивает потому что для меня ЯП это не вещь в себе а инструмент для решения определенной задачи. И я не собираюсь вникать в эти индусские идеи чтобы исправить индусские баги. Это детский сад. Мне нужен approach на уровне дизайна языка, в C# его нет. Это касается не только конкретно этой фичи но и кучи других вещей. Напр. множественное наследование. В дизайне языка просто отсутствуют rules которые помогли бы формировать корректный код. Вместо это вас отправляют к каким-то паттернам, стайл копам и прочей чуши. Это просто бред

S>Не надо недооценивать стажёров

Вы просто не работали с индусами.

M>>C# поощряет такой подход на уровне дизайна. С++ наоборот может подсказать новичку, что "вот так менять гравитацию" нельзя на уровне синтаксиса.

S>Геттер без сеттера + init-метод?
Это слишком жесткая связка. Я не хочу ограничивать себя readonly методом. Очередная недороботка C# по дизайну. Очень грустно программировать на подобных языках
Re[5]: C# - from indians by indians
От: Sinix  
Дата: 22.05.15 12:05
Оценка: +3
Здравствуйте, mapnik, Вы писали:

S>>Только code review + отсеивание на испытательном сроке. Иначе вы больше потратите, чем выиграете.

M>Мы таким не занимаемся ... мне важно что человек знает как инженер, а не как кодер.
Ну так и пусть инженер занимается своим делом, а разработчик своим. Вы ж стоматолога не за красивые красные глаза выбираете?
Всё равно проблемы из-за неопытности вылезут, не сейчас, так потом. Дешевле поймать их сразу, чем лечить уже запущенное.


S>>Ну и начиная с рослина всякие проверки типа таких пишутся на раз-два.

M>Я хочу использовать дизайн языка а не ковырять очередное поделие от микрософта. Понимаете вы мне все время говорите — "а вот пара дней помучать задницу, и вы разродитесь решением".
Ваш кэп: вы ставите задачу "сделайте мне c#, который прощает ошибки от не изучавших c#". Спрос на такое маленький, придётся часть делать самостоятельно. Выбирайте любой другой инструмент, меняйте команду, найдите специалиста, который решал подобные проблемы. Форум вам тут как поможет?

Если проблема не настолько критичная, то тогда надеяться на "кто-то за меня поправит" тем более не стоит.


S>>Геттер без сеттера + init-метод?

M>Это слишком жесткая связка. Я не хочу ограничивать себя readonly методом. Очередная недороботка C# по дизайну. Очень грустно программировать на подобных языках
Ну так берите любой другой язык, в чём проблема-то?
Re[6]: C# - from indians by indians
От: mapnik США http://www.hooli.xyz/
Дата: 22.05.15 12:24
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Всё равно проблемы из-за неопытности вылезут, не сейчас, так потом. Дешевле поймать их сразу, чем лечить уже запущенное.

Вы я так полагаю мните себя этаким опытным суперпрофессионалом который не совершает ошибок и может решать выкинуть на улицу или нет "менее опытных" людей?
Я придерживаюсь абсолютно противоположного мнения относительно своего опыта и знаю. Я абсолютно уверен что код который я написал содержит много дерьма. Поэтому не сужу других людей. Но нельзя все время быть в дерьме, нужно совершенствоваться.
Поэтому мы используем статический анализ код и периодические разборы вне зависимости от опыта и должности. Но это еще не все. Сам дизайн языка важен, чтобы "новичок" мог опереться на какие-то rules и не наломать дров. C# не имеет такого выверенного дизайна, нацеленного на повышение качества кода. Это просто набор фич которые позволят вам писать говнокод быстро. И от релиза к релизу в шарпе ничего не меняется — количество удобных фич для разработки говнокода просто растет. Вот что я хочу до вас донести.

S>Ну так берите любой другой язык, в чём проблема-то?

Проблема в том, чтобы найти хоть кого-то знающего с++ или sql почти нереально. А C# выучить может любой индус, который не осилит даже python. Отсюда и ограничения.
Re[7]: C# - from indians by indians
От: Sinix  
Дата: 22.05.15 12:48
Оценка: +7 :)
Здравствуйте, mapnik, Вы писали:

S>>Всё равно проблемы из-за неопытности вылезут, не сейчас, так потом. Дешевле поймать их сразу, чем лечить уже запущенное.

M>Вы я так полагаю мните себя этаким опытным суперпрофессионалом который не совершает ошибок и может решать выкинуть на улицу или нет "менее опытных" людей?

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


M> Я абсолютно уверен что код который я написал содержит много дерьма. Поэтому не сужу других людей.

Порвало
Вы свой предыдущий пост прочитайте, который про Раджеша, "люксофт с 19 девочками", "поделие от микрософта", "я не собираюсь вникать в эти индусские идеи" и тд. Морализатор блин


M>Поэтому мы используем статический анализ код и периодические разборы вне зависимости от опыта и должности. Но это еще не все. Сам дизайн языка важен, чтобы "новичок" мог опереться на какие-то rules и не наломать дров. C# не имеет такого выверенного дизайна, нацеленного на повышение качества кода.

Вот с этого и надо было начинать. Потому что первый же ответ был про И утром, ото сна восстав, Читай усиленно устав чудо-книгу FDG, в которой основные ошибки и подходы к дизайну API разобраны от и до.

После изучения большинство вопросов будут в духе "и зачем нам эта фигня?", а не "почему шарп позволяет написать фигню?"


M>Это просто набор фич которые позволят вам писать говнокод быстро. И от релиза к релизу в шарпе ничего не меняется — количество удобных фич для разработки говнокода просто растет. Вот что я хочу до вас донести.

Разумеется. Потому что это мейнстрим-язык, причём чисто исторически — заточенный под энтерпрайз разработку. Т.е. некоторый входной барьер предполагается по умолчанию.


M>Проблема в том, чтобы найти хоть кого-то знающего с++ или sql почти нереально. А C# выучить может любой индус, который не осилит даже python. Отсюда и ограничения.

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