Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
но последние подвижки плюс то что должно в скором времени выйти (например модули) может поставить С++ примерно на уровень C#/Java
UInt16 two = 2;
UInt16 foo = two + 2;
Все что я хотел сказать это то что по степени комфорта общего программирования, не вдаваясь в сложные кейсы, С++ может дойти почти до уровня C#/Java.
Вы же, надеюсь, не будете утверждать, что аналог темплэйтов — это дженерики, правда? ;)Буду. В большинстве случаев, то, что есть в темплейтах, но не удобно сделать в дженериках, это костыли С++ ввиду отсутствия метаданных.
Мутная типизация числовых типов.Нахрена в методах использовать что-то меньше int? И ничего мутного нет, вся арифметика проводится только в int, и это даже отчасти хорошо. А в ваших short x + 2 вы наверняка забыли checked, да?
Он не может брать размеры переменных, только размеры типов.Marshal.SizeOf
с массивами он работает неправильноВы не понимаете, что возвращает Marshal.SizeOf. Почитайте документацию.
Деструкторы. О-о, да, одно из самых слабых мест C#.Это сильная сторона C#, потому что это фича из низкоуровнего мира в высокоуровневом языке.
Потому что, когда у вас есть несколько функций 50-100 строк, которые вызывают одна другую, и в какой-то из них, вы точно знаете, есть ошибка — вам приходится тщательно проследить за каждой переменной, что бы понять, что с ними происходит.Разделите на классы и методы. Привет, ООП.
компилятор даже предупреждения не вставит, если он забудет использовать подобного рода конструкциюПредупреждение входит в базовый пакет Code Analysis.
Буду. В большинстве случаев, то, что есть в темплейтах, но не удобно сделать в дженериках, это костыли С++ ввиду отсутствия метаданных.
Нахрена в методах использовать что-то меньше int? И ничего мутного нет, вся арифметика проводится только в int, и это даже отчасти хорошо.
Вы не понимаете, что возвращает Marshal.SizeOf. Почитайте документацию.
Разделите на классы и методы. Привет, ООП.
Предупреждение входит в базовый пакет Code Analysis.
Извините, но вы бред пишете. Не пишите больше, пожалуйста.
Напишите-ка мне на C# функцию, принимающую объект любого класса, и вызывающую функцию foo() из этого класса.Да пожалуйста.
void M(dynamic o) { o.foo(); }
А вообще используйте интерфейсы.у меня есть протокол передачи данных по каналам связи, и каждое поле там определенного размераТекст не читай @ сразу отвечай. От ваших вычислений в short-ах у меня ютуб и тормозит :)
название метода соответствует тому, что все идет правильноИменно. Прочитайте всё-таки. Там абсолютно явно написано Marshal.
Я использую IDE Mono, и редактор Емакс.ССЗБ
Да пожалуйста.void M(dynamic o) { o.foo(); }
Я использую IDE Mono, и редактор Емакс.ССЗБ
дженерики это костыль который был привнесён в java что бы добавить немного метапрограммированияНу а это полная чушь. Дженерики, тем более в Java, не относятся к метапрограммированию.
Как пример, структура алгоритма может зависеть от свойств некоторого числа N. Конечно это не ряд фибоначи, это может быть что-то более сложное, вроде разложения на примитивные корни по модулю m.Вы вычисляете сложные алгоритмы, зависящие от разложения чисел, используя компилятор? Я считаю, вам надо пересмотреть подход к проетированию вашей программы, и вынести этот алгоритм в отдельную библиотеку. И после этого уже можно заниматься инлайнингом результатов.
И это никак не связано с отсутствием рефлексии, даже если бы она была, это не помогло бы исключать ненужные ветви выполнения кода без условных переходов и vtable.
Нет, цель метапрограммирования — создавать программы которые создают программы. С таким успехом можно и javascript называть языком с метапрограммированием. Там тоже интерпретатор присматривается во время синтаксического анализа к коду, что бы для числовых массивов использовались оптимизированную реализацию. Но это не метапрограммирование, абсолютно.Определение некорректное. Кроме того, вы хотите сказать, JS — язык без метапрограммирования?
Ну эта тема много раз поднималась на стековерфлоу, так что просто приведу ссылки:Вопрос по ссылке: «можно ли в C#/Java выполнять код на этапе компиляции?» С ответами не поспоришь, нельзя. Однако именно в этих языках появился АОП, например.
дженерики это костыль который был привнесён в java что бы добавить немного метапрограммированияНу нет же. Дженерики в джаву были введены для упрощения статического анализа, а следовательно избежания многих популярных ошибок, а также избежание вездесущих кастов.
дженерики являются элементом обобщенного программирования т.н. generic programming. А generic programming это одно из путей развития идеи метапрограммирования.Это разные понятия. Обобщенное программирование — это подход к написанию программ, а дженерики — это фича языка. Они зачастую используются вместе, но вы также можете выбрать что-то одно. Более того, вы же не считаете использование opaque pointer в С/С++ метапрограммированием, верно?
сам James Gosling автор Java указывал что generics это «kind of like templates»Нет, он говорит, что реализация типового полиморфизма в джаве похожа на типовой полиморфизм шаблонов. В этом плане они действительно похожи.
HTTP запросы обрабатывать на языке с такой строгой типизацией мне кажется неудобнымGo statically typed.
Анонс Rust 1.0