Я знаком с этими возможностями .NET и это одна из особенностей, за что мне нравится .NET, но увы данный функционал в зависимости от специфики может вообще не быть востребованным.
А зачем мне генерация кода в рантайме? Если мне понадобится скриптовый язык, да это будет не просто, но я его добавлю и все. И если язык C++ является компилируемым, то зачем мне им генерировать код? Я никогда слепо не защищал какие-либо вещи и если есть инструмент лучше подходящий для определенной задачи, то я воспользуюсь им, а генерить код в рантайме на С++ я не собираюсь.
.NET я не обижаю, опыта мало, но .NET мне нравится, просто специфика компаний, в которой довелось поработать не позволяет в полной мере использовать .NET
По сути метапрограммирование делится на 2 категории:
* времени компиляции — этим и славится С++
* времени выполнения — времени исполнения, ваши варианты
Да, в связи с отсутствием родной полноценной поддержки рефлексии, в С++ о метапрограммировании времени выполнения можно даже не говорить. А с другой стороны у C# туго с метапрограммированием времени компиляции. У каждого своя сильная сторона.
«частичную мощь RTTI, без использования оного» — текст был таким, я лично RTTI не использую, но некоторую гибкость можно получить не используя RTTI. Я к примеру активно использую списки типов, свойства типов, специализации шаблонов, compile-time условия и т.д.
Какими большими возможностями обладает C#? Приведите пример.
> Да, я пока пишу… Забываю про задачу как таковую.
А не проще было бы сначала продумать интерфейс, а потом программировать? Почему же незнание/неиспользование методологий разработки сваливаете на язык программирования.
> Так, члены должны объявляться с префиксом 'm_', чтобы не было.
Вас кто-то заставляет с плеткой это делать? Это не стандарт, язык этого не требует, я лично префиксы не использую, для подсказок есть IntelliSence, да и VisualAssist.
> С членами классов работать через set/get методы.
И что в этом такого, во многих языках нет свойств. А если уж хочется, то реализуются они не очень сложно, сам юзал, но вернулся на к set/get методам.
> Никаких goto. Лучше do { break; } while(0); От этого суть глобально меняется.
Я бы поспорил, goto нифига визуально не хороша, а break/continue проще отследить визуально. Я сам против goto, сколько программирую, всегда обходился без него.
> Параметры макросов в скобках. А вообще макросы нельзя употреблять! Это же нарушает типизацию.
Ну не хотите, не используйте, временами макросы дают некоторое удобство.
> Никаких указателей, даже если очень хочеться. Только умные, с 4-мя шаблонными параметрами.
Опять же вам решать, если работать с памятью нормально не умеете, живите с умными указателями. Я использую все, опять же в зависимости от места применения и не страдаю от этого.
> Никаких глобальных переменных. Низя!
А зачем? На кой это надо? Если сильно хочется есть Singleton. Да и найдите в других языках высокого уровня глобальные переменные.
> Не должно быть больше 4 вложенных конструкций. А если очень надо? — Разделяй на функции. Причем >протитип в хэдер, реализацию рядом с основной функцией.
Ну перейдите на другой язык программирования, используйте больше и запутайтесь сами в своем коде.
> Множественное наследование — плохо. Зато виртуальное наследование, спецификаторы
> доступа при наследовании, и какие они будут в наследуемом классе — надобно знать. Очень нужная?
> вещь… на собеседованиях
И вас кто-то заставляет это слушать? Отстаивайте свою точку зрения. Я использую множественное наследование и мой код от этого хуже не становится.
> reinterpret_cast, static_cast, const_cast. Почему нет private_to_public_in_case_exception_cast?
Вы еще забыли dynamic_cast ) Вообще на мой взгляд кастовать типы не очень хорошо, за const_cast сам оторву программерам руки, максимум, что позволю, так это mutable.
А вот временами без static_cast и dynamic_cast не обойтись. Хотя стараюсь проектировать, чтобы вообще не использовать виртуальность, приведение типов.
> Это мы получаем при поиске в map'е. Детям нельзя такое преподавать.
Думаю детям можно преподавать, кто захочет, тот поймет, если не захотел, значит и не надо. Да и в новом стандарте появились лямбды, хоть они и являются только функторами, все равно проще.
> А как вам такой пул потоков. Это при том, что задать нотификатор о завершении потока
И чем он плох, можно стратегиями задать поведение, что в этом плохого? Да и в чем сложность с нотификацией завершения потока? Вам не подходят условные переменные? А с другой стороны зачем поток должен кого-то уведомлять? Если уведомлять, то значит кто-то должен ждать, для этого нужен еще 1 поток, либо должен следить какой-то к примеру из основных, это нарушение концепций многопоточности. Так что уж решите, что вам надо.
И уж если вам многие возможности не пригодились, так не говорите это же про других. Ну не нравятся вам rvalue, не используйте новый стандарт. Не нравятся шаблоны, а тем более новые variadic, не используйте. Вообще судя по статье вам отлично подойдет BASIC.
Автор, ну прочитай ты Джефа Элджера, да Андрея Александреску. Зачем тут плакаться, не нравится С++ с его шаблонами, идите на Java или .NET. Там только обобщения, больше из них не выжать.
А если на то пошло, то шаблоны в С++ дают частичную мощь RTTI, без использования оного, что очень хорошо сказывается на производительности. Очень неслабые возможности метапрограммирования и т.д.
Софт глючный, согласен, у меня вроде бы все кнопки и работают, а когда на G19 пытаюсь покрутить громкость, с вероятностью в 50-80% вылетает (чем выше нагрузка на проц, тем выше шанс). Поставил 8й, пока стабильно все работает.
С другой стороны чисто для скриптов не вижу особого смысла (G15, особенно первая ревизия с голубой подсветкой, аж 18 доп клавиш), а вот для управления в Maya штука просто обалденная.
Хорошая разминка для мозга, в принципе все элементарно. Вот когда я решил написать свою библиотеку compile-time для работы со списками, векторами данных, для работы со строками во время компиляции, чуть мозг себе не сломал.
хм, а как ваще жить без рута, уже не предствляю :-) В первую очередь рут для титаниум бэкапа, во вторую очередь для сноса всего лишнего и освобождению памяти.
И вы считаете, что виноват гугл? Есть еще такая поговорка «7 раз отмерь, один раз отрежь». Так что надо просто было лишний раз проверить правильность заполнения формы.
Не совсем, просто подогреватель я тогда включил самый слабый, с сильным бы точно сварились, а с терморегулятором уже сам собирал, когда подрос и пошел на радиокружок. Было это очень давно, с терморегулятором никогда в продаже не видели, сильно хотели, да и жили в маленьком городе.
.NET я не обижаю, опыта мало, но .NET мне нравится, просто специфика компаний, в которой довелось поработать не позволяет в полной мере использовать .NET
* времени компиляции — этим и славится С++
* времени выполнения — времени исполнения, ваши варианты
Да, в связи с отсутствием родной полноценной поддержки рефлексии, в С++ о метапрограммировании времени выполнения можно даже не говорить. А с другой стороны у C# туго с метапрограммированием времени компиляции. У каждого своя сильная сторона.
Какими большими возможностями обладает C#? Приведите пример.
А не проще было бы сначала продумать интерфейс, а потом программировать? Почему же незнание/неиспользование методологий разработки сваливаете на язык программирования.
> Так, члены должны объявляться с префиксом 'm_', чтобы не было.
Вас кто-то заставляет с плеткой это делать? Это не стандарт, язык этого не требует, я лично префиксы не использую, для подсказок есть IntelliSence, да и VisualAssist.
> С членами классов работать через set/get методы.
И что в этом такого, во многих языках нет свойств. А если уж хочется, то реализуются они не очень сложно, сам юзал, но вернулся на к set/get методам.
> Никаких goto. Лучше do { break; } while(0); От этого суть глобально меняется.
Я бы поспорил, goto нифига визуально не хороша, а break/continue проще отследить визуально. Я сам против goto, сколько программирую, всегда обходился без него.
> Параметры макросов в скобках. А вообще макросы нельзя употреблять! Это же нарушает типизацию.
Ну не хотите, не используйте, временами макросы дают некоторое удобство.
> Никаких указателей, даже если очень хочеться. Только умные, с 4-мя шаблонными параметрами.
Опять же вам решать, если работать с памятью нормально не умеете, живите с умными указателями. Я использую все, опять же в зависимости от места применения и не страдаю от этого.
> Никаких глобальных переменных. Низя!
А зачем? На кой это надо? Если сильно хочется есть Singleton. Да и найдите в других языках высокого уровня глобальные переменные.
> Не должно быть больше 4 вложенных конструкций. А если очень надо? — Разделяй на функции. Причем >протитип в хэдер, реализацию рядом с основной функцией.
Ну перейдите на другой язык программирования, используйте больше и запутайтесь сами в своем коде.
> Множественное наследование — плохо. Зато виртуальное наследование, спецификаторы
> доступа при наследовании, и какие они будут в наследуемом классе — надобно знать. Очень нужная?
> вещь… на собеседованиях
И вас кто-то заставляет это слушать? Отстаивайте свою точку зрения. Я использую множественное наследование и мой код от этого хуже не становится.
> reinterpret_cast, static_cast, const_cast. Почему нет private_to_public_in_case_exception_cast?
Вы еще забыли dynamic_cast ) Вообще на мой взгляд кастовать типы не очень хорошо, за const_cast сам оторву программерам руки, максимум, что позволю, так это mutable.
А вот временами без static_cast и dynamic_cast не обойтись. Хотя стараюсь проектировать, чтобы вообще не использовать виртуальность, приведение типов.
> Это мы получаем при поиске в map'е. Детям нельзя такое преподавать.
Думаю детям можно преподавать, кто захочет, тот поймет, если не захотел, значит и не надо. Да и в новом стандарте появились лямбды, хоть они и являются только функторами, все равно проще.
> А как вам такой пул потоков. Это при том, что задать нотификатор о завершении потока
И чем он плох, можно стратегиями задать поведение, что в этом плохого? Да и в чем сложность с нотификацией завершения потока? Вам не подходят условные переменные? А с другой стороны зачем поток должен кого-то уведомлять? Если уведомлять, то значит кто-то должен ждать, для этого нужен еще 1 поток, либо должен следить какой-то к примеру из основных, это нарушение концепций многопоточности. Так что уж решите, что вам надо.
И уж если вам многие возможности не пригодились, так не говорите это же про других. Ну не нравятся вам rvalue, не используйте новый стандарт. Не нравятся шаблоны, а тем более новые variadic, не используйте. Вообще судя по статье вам отлично подойдет BASIC.
А если на то пошло, то шаблоны в С++ дают частичную мощь RTTI, без использования оного, что очень хорошо сказывается на производительности. Очень неслабые возможности метапрограммирования и т.д.
С другой стороны чисто для скриптов не вижу особого смысла (G15, особенно первая ревизия с голубой подсветкой, аж 18 доп клавиш), а вот для управления в Maya штука просто обалденная.
Ну мониторить то одно, а вот еще бы контролировать эти параметры и покормить, и подогреть, да и многое другое.