Вот, вроде, язык C — это самое компактное и логичное что может быть. Явно не хватает там классов для ООП, вроде логично что сделали C с классами. Но и без того уже писали да и продолжают писать на C в ООП-стиле, когда добавили классы — то как бы появился синтаксический сахар ну и плюс этот ваш RAII. ОК, все логично.
Далее. Вроде бы так же логично чтобы не писать однотипные алгоритмы для разных типов — добавить компил-таймовые шаблоны. Вроде ОК, логично.
Но вот когда на этих шаблонах и SFINAE начали какую-то сложную логику выстраивать — это уже, имхо, Wrong Way. Как-то все получается неудобоваримо, переусложненно и похоже на изврат, как будто нашли какой-то хак, позволяющий делать то что изначально не задумано.
Если уж так хочется компил-тайма — то почему бы не сделать его полноценным? Пусть не давать доступ к системным функциям, т.е. не давать возможности создавать файлы — но дать возможность статических переменных внутри функции, дать возможность простого и стандартизированного доступа к списку членов структуры/класса. Чтобы прекратить этот изврат в конце концов.
Здравствуйте, Shmj, Вы писали:
S>Вот, вроде, язык C — это самое компактное и логичное что может быть. Явно не хватает там классов для ООП, вроде логично что сделали C с классами. Но и без того уже писали да и продолжают писать на C в ООП-стиле, когда добавили классы — то как бы появился синтаксический сахар ну и плюс этот ваш RAII. ОК, все логично.
К гомам слово логично не применимо. Оно применимо к единичным сапиенсам (1 сапиенс на 100000 гомов).
Сапиенсы сделали С. Подумали и добавили классы и ООП. Подумали и добавили шаблоны.
Дальше набежали гомы и засрали всё это своим безумием. Но, прими это как объективную реальность — у гомов по-другому быть не может.
Здравствуйте, Vzhyk2, Вы писали:
V>набежали гомы и засрали всё это своим безумием.
Все так, но сапиенсы после классов и шаблонов так и не родили ничего радикального нового, что можно было бы без извращений применять в любом классе задач. Из универсального родили в основном мелочи вроде constexpr/consteval, всякие лямбды/сопрограммы довольно специфичны к задачам, а почти все остальное без извращений не работает.
ЕМ>Все так, но сапиенсы после классов и шаблонов так и не родили ничего радикального нового, что можно было бы без извращений применять в любом классе задач.
"Девушка, вы вышли бы замуж заради кала?..."
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Все так, но сапиенсы после классов и шаблонов
Так они и классы с шаблонами не рожали. Классы взяли из Simula, шаблоны из Ada и, емнип, ML. Исключения и перегрузку операторов тоже откуда-то стянули, вроде бы из Ada.
Здравствуйте, so5team, Вы писали:
S>Так они и классы с шаблонами не рожали. Классы взяли из Simula, шаблоны из Ada и, емнип, ML. Исключения и перегрузку операторов тоже откуда-то стянули, вроде бы из Ada.
Ну да, все эти идеи так или иначе высказывались и применялись достаточно давно. Речь о том, что какие-то из них оформили применительно к конкретному языку.
Здравствуйте, Shmj, Вы писали:
S>Если уж так хочется компил-тайма — то почему бы не сделать его полноценным? Пусть не давать доступ к системным функциям, т.е. не давать возможности создавать файлы — но дать возможность статических переменных внутри функции, дать возможность простого и стандартизированного доступа к списку членов структуры/класса. Чтобы прекратить этот изврат в конце концов.
Я думаю, дело не в полноценности-неполноценности. Эта-то проблема давно решается с помощью древней, как UNIX System 7, парадигмы автоматической генерации кода во время сборки с помощью специально написанных для этой цели программ или скриптов.
Проблема C++ в том, что там два языка в одном, построенных на очень разных парадигмах. Сам по себе C++ — имперический язык, в стили Си. А вот система евонных темплейтов — ленивый, функциональный, строгий язык. Тьюринг-полный, с организацией циклов с помощью рекурсии и с хранением значений с помощью typedef. Такой покалеченный Haskell. И люто неудобный.
Здравствуйте, Pzz, Вы писали:
Pzz>Такой покалеченный Haskell. И люто неудобный.
Говорят, что одевать брюки через голову люто неудобно. Виноваты ли в этом брюки?
А вообще забавно наблюдать, как о проблемах языка рассуждают персонажи, разбирающиеся в предмете разговора как свинья в апельсинах. Типа в каждый является экспертом в политике, футболе, медицине и C++.
Здравствуйте, so5team, Вы писали:
S>А вообще забавно наблюдать, как о проблемах языка рассуждают персонажи, разбирающиеся в предмете разговора как свинья в апельсинах. Типа в каждый является экспертом в политике, футболе, медицине и C++.
Покажи мне эксперта в С++ и я шутя завалю его на собеседовании.
Современный С++ — это уродство, особенно классно в нем смотрятся UB, которым уже лет по 30 и никто не исправляет.
Здравствуйте, Vzhyk2, Вы писали:
S>>А вообще забавно наблюдать, как о проблемах языка рассуждают персонажи, разбирающиеся в предмете разговора как свинья в апельсинах. Типа в каждый является экспертом в политике, футболе, медицине и C++. V>Покажи мне эксперта в С++ и я шутя завалю его на собеседовании.
Э... Это значит, что теперь любой дятел, который C++ в глаза не видел, может всерьез рассуждать о C++?
V>Современный С++ — это уродство, особенно классно в нем смотрятся UB, которым уже лет по 30 и никто не исправляет.
Уродство, уродство, узбагойтесь уже, это даже не оспаривается. Парадокс в том, что пользоваться современным C++ удобнее, чем тем, который был 25 лет назад.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Все так, но сапиенсы после классов и шаблонов так и не родили ничего радикального нового, что можно было бы без извращений применять в любом классе задач. Из универсального родили в основном мелочи вроде constexpr/consteval, всякие лямбды/сопрограммы довольно специфичны к задачам, а почти все остальное без извращений не работает.
Вот лямбды, на мой взгляд — самое удобное. Теперь пишу на С с лямбдами.
Полиморфизм — почти сразу ушел в топку.
Какое-то время изгалялся с шаблонами для передачи контекста. Но тоже надоел весь этот оверхед.
А лямбды — где не супер-критично время исполнения (а оно в большинстве мест некритично), позволяют всякие удобства с коллбэками.
Например, вместо извратов с итераторами, можно вызывать коллбэк для всех элементов контейнера.
А с вложенными коллбэками можно еще более интересные штуки делать.
Пользователю совершенно не надо париться внутренней структурой Database, он просто вызывает коллбэки в любом порядке для всех записей.
Понятно, что тоже самое можно организовать стандартными средствами С, объявляя кучу глобальных функций — но это неудобно и некрасиво.
Лямбды удобны именно возможностью вставки кода в параметры.
Здравствуйте, so5team, Вы писали:
S>А вообще забавно наблюдать, как о проблемах языка рассуждают персонажи, разбирающиеся в предмете разговора как свинья в апельсинах. Типа в каждый является экспертом в политике, футболе, медицине и C++.
Мне примерно 7 мес. работы с C++, не считая былых разовых проектов в молодости — хватило чтобы просечь эту фишку.
Обычно на усвоение нового ЯП — типа после C# на Java или на Dart — уходит месяца 2. C С++ даже 7 месяцев мало и именно по причине т.н. компил-таймовой логики. Остальное не особо отличается от привычных мне языков, на которых пишу без малого 20 лет, ничем другим не занимаюсь.
Здравствуйте, so5team, Вы писали:
V>>Покажи мне эксперта в С++ и я шутя завалю его на собеседовании. S>Э... Это значит, что теперь любой дятел, который C++ в глаза не видел, может всерьез рассуждать о C++?
Попробуйте без перехода на личности. Вполне возможно что ваш уровень хуже чем тех, кого вы считаете дятлами.
Здравствуйте, graniar, Вы писали:
G>Вот лямбды, на мой взгляд — самое удобное. Теперь пишу на С с лямбдами. G>Полиморфизм — почти сразу ушел в топку. G>Какое-то время изгалялся с шаблонами для передачи контекста. Но тоже надоел весь этот оверхед.
Тут дело вот в чем. Если вы выбираете C++, то вам нужно не только писать но и читать. В том числе логику на основе SFINAE.
Здравствуйте, Shmj, Вы писали:
S>Тут дело вот в чем. Если вы выбираете C++, то вам нужно не только писать но и читать. В том числе логику на основе SFINAE.
Чукча не читатель. Чукча — писатель.
Мне даже гуглить пришлось, что за SFINAE такое Хотя в нулевых знал стандарт вдоль и поперек.
Да и никогда я не был командным игроком, старался выбить себе зону ответственности и взаимодействовать с чужим кодом только посредством задокументированного интерфейса.
И вообще, живой только потому, что не попадался сопровождавшим мой код.
Первого Января 1998 года Bjarne Stroustrup давал интервью журналу 'Computer'. Вообще-то редакторы предполагали, что он расскажет о семи годах объектно-ориентированного программирования с применением языка, который он и разработал.
К окончанию беседы выяснилось, что интервьюер извлек больше информации, чем предполагал, и, естественно, редакторы решили урезать содержание 'для пользы индустрии', но, как обычно получается в таких случаях, произошла утечка информации.
Вот полный и нередактированный протокол интервью — это не похоже на обычные запланированные вопросы/ответы.
Вам наверняка покажется это интересным.
Интервьюер — далее И., Stroustrup — далее C..
И. Прошло несколько лет с тех пор, как Вы изменили мир разработки программного обеспечения. Что Вы теперь чувствуете, оглядываясь назад?
C. Вообще-то я думал об этих днях как раз перед тем как Вы приехали. Помните — все писали свои версии 'C', и проблема была в том, что все это делали чертовски замечательно. Университеты тоже чертовски замечательно преподавали этот язык. Это привело к понижению компетенции. Под 'компетенцией' в данном случае я подразумеваю феноменальность. Вот что породило проблему.
И. Проблему?
C. Да, проблему. Помните когда все писали на Cobol?
И. Конечно, я тоже это делал.
C. Ну вот, в начале эти ребята были как боги. Им платили кучу денег и относились как к королям.
И. Да уж, вот это были времена...
С. Именно. Ну и что же случилось? IBM прямо заболела этим и вложила миллионы в подготовку программистов, пока их не стало до ужаса много.
И. Вот так и я вылетел из этой сферы. Втечение года зарплата упала настолько, что даже журналистом можно было зарабатывать больше...
С. Точно. То же самое случилось и с программистами, писавшими на 'C'.
И. Понятно, ну и что же Вы все-таки хотите этим всем сказать?
C. Однажды я сидел у себя в оффисе, и мне пришла в голову небольшая идейка, как хоть немного восстановить баланс. Я подумал: интересно, что произойдет, если будет язык программирования такой запутанный и такой сложный для изучения, что никто бы уже не сможет заполнить рынок толпой программистов, пишуших на этом нем? У меня уже были тогда кое-какие мысли по этому поводу. Вот, знаете наверно, X10 и X windows. Это тогда была такая графическая система, которая работала на Sun 3/60. У нее были все ингредиенты, которые мне были нужны — комплексный синтаксис, сложные для понимания мрачные функции, псевдо объектно-ориентированная структура. Даже сейчас никто не пишет напрямую под X-windows. Motif — единственный путь, если вы хотите сохранить рассудок.
И. Шутите?
C. Ничуть. Есть еще одна проблема. Unix был написан на 'C' — это значило то, что любой программист, пишущий на 'C', мог очень легко стать системным программистом. Помните сколько обычно зарабатывали большинство системных программистов?
И. Да, я же ведь тоже этим занимался.
С. Так вот, этот новый язык должен был отделять себя от Unix путем скрывания всех системных вызовов, которые так здорово связывают 'C' и Unix. Тогда ребята, знающие только DOS, тоже смогли бы прилично зарабатывать.
И. Не верится в то, что Вы это сказали...
С. Это уже происходит достаточно долго, но вроде сейчас большинство людей уже уяснили для себя, что C++ — это пустая трата времени, но должен сказать, что осознание этого происходило дольше чем я ожидал.
И. Ну расскажите поточнее, как же Вы все-таки сделали это?
C. Это была просто шутка, я никогда не думал, что люди воспримут эту книгу всерьез. Любой человек, даже с половиной мозга, может понять что объектно-ориентированное программирование интуитивно, нелогично и неэффективно.
И. Что?
С. И относительно 'повторно-используемого кода' — Вы когда-нибудь слышали, чтобы хоть одна компания 'повторно-использовала' что-либо?
И. Ну, вообще-то не слышал, но...
С. Вот так-то. Некоторые, кстати, пытались. Была такая компания из Орегона — Mentor Graphics, в которой просто заболели тем, что пытались переписать все что можно на C++ в '90 или '91 году. Я на самом деле им сочувствовал, но думаю, что люди по крайней мере, научились чему-то на их ошибках.
И. Очевидно у них ничего не вышло?
С. Вообще ничего. Но было бы сложно объяснить держателям акций компании ущерб в 30 миллионов долларов и вот, надо отдать им должное , они все-таки заставили это работать в итоге.
И. Так все-таки у них получилось? Это доказывает что 'объектное-ориентирование' работает.
C. Почти. Запускаемый файл получился такой огромный, что загружался 5 минут на рабочей станции HP со 128Mb оперативной памяти. Я думал, что это станет камнем преткновения, но это никого особенно не заботило. Sun и HP были очень рады продавать до ненормальности мощные ящики с огромными ресурсами для выполнения на них тривиальных программ. Знаете, когда мы в AT&T; откомпилировали нашим первым компилятором C++ программку 'Hello World', я не мог поверить своим глазам: запускаемый файл получился размером 2.1Mb.
И. Да уж... Но компиляторы с тех пор прошли долгий путь.
C. Вы так думаете? Попробуйте тот же пример 'Hello World' с последней версией g++ — вы получите примерно пол-мегабайта. А кроме этого есть еще множество примеров со всего мира. У British Telecom чуть было не возникли большие проблемы, но к своему счастью они вовремя догадались свернуть проект и начать все заново. И им больше повезло, чем Australian Telecom. А теперь я слышал, что Siemens cоздает какого-то динозавра и все больше и больше волнуется по поводу размера того, что у них получается. Не правда ли забавно смотреть на это всеобщее заблуждение?
И. Да, но C++ -то, в общем, вполне нормальный язык.
С. Вы в это так верите? Попробовали ли вы когда-нибудь сесть и поработать над проектом на C++ ? Во первых, я расставил достаточно ловушек, чтобы просто так работали только тривиальные проекты. Под конец проекта получается что одни и те же операторы в разных модулях означают совершенно разные вещи. А теперь попробуйте соединить все эти модули в единое целое, особенно если у вас их штук 100. Боже, я иногда не могу удержаться от смеха, когда слышу о проблемах разных компаний, которые не могут сделать так, чтобы их модули общались между собой.
И. Я должен сказать, что совершенно сбит с толку всем что Вы сказали. Вы сказали что сделали это для того, чтоб повысилась оплата труда программистов. Но это же бессмыслица.
С. Не совсем так. У каждого есть его выбор. Я не предполагал, что все это так выйдет из-под контроля. Но все-равно, практически все у меня получилось. C++ cейчас уже умирает, а труд програмистов продолжает нормально оплачиваться — особенно тех, кто имеет дело со всей этой чепухой — вы же понимаете, что невозможно использовать эффективно большой программный модуль на C++ , если не вы сами его написали.
И. Как это?
С. Не понятно что-ли? Помните typedef ?
И. Конечно.
С. А теперь вспомните сколько времени приходится копаться в заголовках для того, например, чтобы просто найти, что какое-нибудь там 'RoofRaised' — число с двойной точностью. Представьте теперь сколько времени уйдет на нахождение всех определений типов в большом проекте.
И. Значит, Вы утверждаете, что Вам все, что Вы хотели удалось...
C. Ну, вспомните сколько занимает реализация проекта среднего размера на 'C'. Это около 6 месяцев. Не достаточно долго чтобы парень с женой и детьми мог заработать себе на нормальное существование. Попробуйте тот же проект реализовать на C++ , и что получится? Вам понадобится 1-2 года. Не правда ли, это замечательно? Кроме этого: в университетах уже так давно не преподают 'C', что теперь стало мало людей программирующих на 'C', особенно таких, которые знают все о программировании под Unix. Как вы думаете : сколько парней смогут сообразить что делать с 'malloc' , после того как втечение многих лет они пользовались 'new' и никогда не заботились о проверке кода возврата? Большинство программистов на C++ вообще не выбрасывают этот код возврата. Что произошло со старой доброй '-1' ? По крайней мере было сразу понятно, что у тебя где-то ошибка без всяких там 'throw', 'try' и 'catch'...
И. И все же, наследование экономит кучу времени?
С. Нет, я же говорил... Замечали, в чем разница между стадиями планирования проектов на 'C' и C++ ? Для проекта на C++ эта стадия в три раза дольше. Время уходит на то, чтоб убедиться что все что надо наследуется, а все что не надо — нет. И все-равно без ошибок не обходится. Кто слышал когда-нибудь об утечке памяти в программе на 'C' ? Теперь нахождение этих утечек — целый труд. Большинство компаний сдаются, так и выпускают продукт, зная что утечка памяти существует.
И. Но есть различные программные инструменты...
С. Большинство из которых написаны на C++.
И. Если мы опубликуем все это, то Вас просто могут линчевать, понимаете ?
C. Сомневаюсь. Как я сказал C++ уже уходит в прошлое. Ни одна компания без предварительного тестирования теперь не начнет проект на C++, а если будет тестирование, то они поймут, что это путь к неудаче. Если не поймут — то так им и надо. Знаете, я пытался убедить Dennis'a Ritchie переписать Unix на C++.
И. О Боже. И что же он сказал?
C. К счастью у него присутствует хорошее чувство юмора. Я думаю и он, и Brian понимали что я тогда делал. Он ответил, что может мне помочь написать версию DOS на C++, если я захочу.
И. Ну и как? Вы захотели?
С. Я написал DOS на C++. Могу дать вам demo. Она у меня работает на Sparc 20 в другой комнате. Просто летает на четырех процессорах и занимает всего то 70 мегабайт на диске.
И. На что же это похоже на PC ?
С. Вы, очевидно, шутите. Видели же вы Windows'95 ? Я о них думаю как о своем величайшем успехе.
И. Знаете, эта идея насчет Unix++ заставила меня задуматься. Ведь где-то может сидеть парень, которому придет в голову сделать это...
С. Но не после того, как он прочитает это интервью.
И. Я сожалею, но врядли мы сможем опубликовать даже часть этого интервью.
С. Но это же история века. Я просто хотел чтоб мои приятели-программисты помнили меня за то, что я для них сделал. Знаете как сейчас оплачивается программирование на C++ ?
И. Последнее, что я слышал — настоящие профессионалы зарабатывают $70-80 в час.
С. Понимаете теперь? И я уверен, что он заслуживает этих денег. Отслеживание всех этих ловушек, которые я встроил в C++ — не легкая работа. И, как я говорил раньше, каждый программист на C++ чувствует себя связанным тем обстоятельством что он должен использовать каждый элемент языка в каждом проекте. Вообще это и меня часто раздражает, даже тогда, когда это служит моим целям. Но сейчас, когда прошло столько времени, мне уже начинает нравиться этот язык...
И. Имеете ввиду, что раньше Вам C++ не нравился?
С. Ненавидел его. Он даже выглядит неуклюже, вы не согласны? Но когда стали там выходить разные книги... вот, тогда-то я и увидел полную картину.
И. Погодите, а как насчет ссылок? Вы подтверждаете что улучшили указатели 'C' ?
С. Хмм. Я и сам не знаю. Вообще я думал, что да. Потом я как-то говорил с парнем, который писал на C++ с самого начала. Он говорил, что не мог запомнить были ли ссылки на его переменные или нет, поэтому он всегда использовал указатели.
И. Обычно на этой стадии я говорю 'большое спасибо за интервью', но сейчас это как-то не к месту.
С. Пообещайте мне, что опубликуете это.
И. Я извещу Вас, но мне кажется, что я знаю, что скажет мой редактор по этому поводу.
С. А все-равно, кто этому поверит? Кстати, не могли бы вы мне прислать копию этой записи?
И. Это я могу.
Примечание переводчика :
Я не программирую на C++. Я не являюсь знатоком русской словестности. Посему прошу извинения за возможные ошибки в переводе.
специальный перевод для Hacknet Review выполнил Mike Bluesman, март 1998
Здравствуйте, graniar, Вы писали:
G>Мне даже гуглить пришлось, что за SFINAE такое Хотя в нулевых знал стандарт вдоль и поперек. G>И вообще, живой только потому, что не попадался сопровождавшим мой код.
Если вы не знаете про SFINAE — то есть надежда что ваш код в разы более чист и легок в сопровождении, чем средний код по больнице.
Здравствуйте, Shmj, Вы писали:
S>В последнее время думаю что не так с C++
С ним всё так. Он невостребован. Если хочешь наслаждаться ломанием мозга об 10 этажные шаблоны, порчу памяти неизвестно откуда, борьбу с циклическими ссылками и конкурировать с 10 опытными зубрами за 1 позицию с миской риса- вперёд.
Здравствуйте, Pzz, Вы писали:
Pzz>Я думаю, дело не в полноценности-неполноценности. Эта-то проблема давно решается с помощью древней, как UNIX System 7, парадигмы автоматической генерации кода во время сборки с помощью специально написанных для этой цели программ или скриптов.
Не совсем согласен. Я тоже богатею думкой на досуге и про этот нюанс думал. И даже порывался несколько раз создать тему и описать свои мысли, но пока себя сдерживаю.
Я согласен с тем, что считаю создание второго языка для метапрограммирования ошибкой. Которую делают многие языки. С++, Scheme, Rust из тех, которые я знаю. Хотя Scheme и Rust хотя бы спроектировали этот язык намеренно, а не случайно...
Но не согласен с тем, что это лучше делать отдельной программой. Метапрограммирование лучше бы делать на том же языке, как часть проекта (или библиотеки). Просто запускать обычный код во время компиляции. Чем это лучше тупо отдельной программы? А вот чем:
1. Компилятор имеет доступ к AST, т.е. может дать мета-функции на вход уже распарсенное AST. Это удобно и это быстро.
2. Мета-функция может на выходе конструировать опять же AST, а не текст программы в виде строки. Это удобно и это быстро.
3. IDE может запускать мета-функцию в фоновом режиме и использовать её результаты для семантической подсветки и прочего вспомогательного функционала.
Всё, что нужно от самого языка это предоставить удобные средства работы с полиморфными деревьями. В первую очередь это типы данных из тех, что называют алгебраическими, во вторую очередь это паттерн-матчинг. Но это всё в современных языках идёт "по умолчанию", как правило.
А минус вижу только один, это та самая IDE. Ничего не мешает в мета-функции, к примеру, подключаться к БД, вытаскивать её схему, генерировать классы на основе таблиц и возвращать их в виде AST. Как такое поддерживать в IDE, я не представляю. Нужно очень хорошо продумывать, как реализовывать кеширование в ожидаемом для юзера виде, видимо. Ну или кастрировать эти мета-функции, запрещая им подключаться к БД, ограничивая время их выполнения, но это, конечно, совсем не так интересно...
Немного в тему пример это D. Там есть две фичи: во-первых compile-time функции (тут ничего интересного, по сути аналогично C++), но эти функции могут возвращать строки. А также там есть конструкция, позволяющая эту compile-time строку включить в программу. И вот как раз это позволяет делать то, что я описал, правда без AST. К примеру моей ненаписанной дипломной работой была интеграция лиспа в D, когда можно было бы писать код на лиспе, перемежая его с кодом на D, вызывая друг друга и это всё в одном файле, в одной программе, без извращений с синтаксисом (код на лиспе в компайл-тайме транслировался бы в эквивалентный код на D). В целом там всё было реализуемо.
Здравствуйте, Shmj, Вы писали:
S>Здравствуйте, so5team, Вы писали:
S>>А вообще забавно наблюдать, как о проблемах языка рассуждают персонажи, разбирающиеся в предмете разговора как свинья в апельсинах. Типа в каждый является экспертом в политике, футболе, медицине и C++.
S>Мне примерно 7 мес. работы с C++
Т.е. еще года полтора до уровня среднего мидла. Самое время писать предложения о том, как нам реорганизовать рабкрин. Ага.
Здравствуйте, Shmj, Вы писали:
S>Попробуйте без перехода на личности.
Опыт показал, что когда вы здесь начинаете рассуждать о C++, то единственный конструктивный подход -- это попросить вас перестать выплескивать на публику дерьмо из вашей головы.
Вы и так засираете RSDN своей тупизной по широчайшему спектру вопросов. Хотя бы C++ оставьте в покое.
S>Вполне возможно что ваш уровень хуже чем тех, кого вы считаете дятлами.
Моего уровня, очевидно, не хватает для того, чтобы выносить на публику рассуждения о том, как можно улучшить С++. И знаете что? Я этого и не делаю.
Чего от всей души желаю и вам, и Pzz, и Евгению Музыченко, и vsb, и пр. заслуженным ыкспертам с десятилетиями "типа опыта" "типа в C++" за плечами.
Здравствуйте, so5team, Вы писали:
S>>Мне примерно 7 мес. работы с C++ S>Т.е. еще года полтора до уровня среднего мидла. Самое время писать предложения о том, как нам реорганизовать рабкрин. Ага.
У всех по разному. Я почти 20 лет пишу код, причем языки были разные. Нельзя всех под одну гребенку.
Многие десятилетиями пишут, но не залазят в дебри (ака сложные конструкции на SFINAE) принципиально.
Я тоже решил что от каждого языка или технологии — нужно брать главное и не завязываться на дебри. Причина — будет проще адаптировать проект под другую технологию, если такая потребность возникнет. Был опыт что контора завязалась на MS SQL — а там много много всякого хитровымудренного MS придумала, чего и близко нет в других СУБД. И все эти фишки не так уж важны, можно и без них — просто сахар. Но вот при попытке слезть на другую СУБД — этот сахар превращается в липучку, которая прямо не отпускает и удерживает.
Здравствуйте, so5team, Вы писали:
S>Опыт показал, что когда вы здесь начинаете рассуждать о C++, то единственный конструктивный подход -- это попросить вас перестать выплескивать на публику дерьмо из вашей головы.
Так то когда было? Начинал вопросы задавать я еще не имея опыта особого. Посмотрите сколько времени прошло то...
Здравствуйте, so5team, Вы писали:
S>1. Недостаточно. S>2. Без толку. S>3. Дурака учить только портить.
Попробуйте проанализировать свое сердце и понять что вас заставляет высказывать эти эмоции? Мне от вас ничего не нужно.
Если мы будем друг-другу завидовать, унижать и подавлять — возможно временно это принесет эгоистическую пользу на личном уровне, но как единое целое, как человечество — мы потеряем и многое потеряем. Меняйте сердцевину (перестраивайте лимбическую систему).
S>По сути: хотите улучшить C++ -- сделайте это. Напишите пропозал в комитет, займитесь его продвижением. А лужи газифицировать на RSDN перестаньте.
Наоборот — сначала нужно обкашлять на локальном уровне.
Здравствуйте, Shmj, Вы писали:
S>Попробуйте проанализировать свое сердце и понять что вас заставляет высказывать эти эмоции?
Не говорите другим людям что им делать, они не скажут вам куда пойти.
S>Мне от вас ничего не нужно.
Мне от вас нужно, а именно: хватит засирать RSDN своей тупизной. Заведите блог или TG-канал и изливайте там любой понос из своей башки в любых формах и количествах. А здесь таки место общего пользования и стараться обходить темы так, чтобы не вляпаться в ваше дерьмо, мне лично не нравится.
Подобные просьбы вам высказывались не однократно. Вы их старательно игнорируете. Поэтому остается в очередной раз переходить на личности и говорить вам: держите свое дерьмо в себе.
S>Наоборот — сначала нужно обкашлять на локальном уровне.
Здравствуйте, so5team, Вы писали:
S>Не говорите другим людям что им делать, они не скажут вам куда пойти.
Однако же ты начал в публичной сфере указывать и давать оценки, не имея объективных данных.
S>Подобные просьбы вам высказывались не однократно. Вы их старательно игнорируете. Поэтому остается в очередной раз переходить на личности и говорить вам: держите свое дерьмо в себе.
Это КСВ, на минуточку. Именно для таких тем данный форум и создан.
S>>Наоборот — сначала нужно обкашлять на локальном уровне. S>Какой же вы дебил, прастихоспади.
Ну ты уже показал всем свой уровень развития, начав беспричинно оскорблять собеседника. Думаешь я буду отвечать тебе бранью или оскорблениями? Опускаться до твоего уровня?
Здравствуйте, Shmj, Вы писали:
S>Однако же ты начал в публичной сфере указывать и давать оценки, не имея объективных данных.
Объективные данные об уровне владения C++ у вас, Pzz и Евгения Музыченко здесь (на RSDN-е, особенно в профильных форумах) накоплены в товарных количествах.
S>>Подобные просьбы вам высказывались не однократно. Вы их старательно игнорируете. Поэтому остается в очередной раз переходить на личности и говорить вам: держите свое дерьмо в себе.
S>Это КСВ, на минуточку. Именно для таких тем данный форум и создан.
Очередная демонстрация вашей тупизны.
S>>>Наоборот — сначала нужно обкашлять на локальном уровне. S>>Какой же вы дебил, прастихоспади.
S>Ну ты уже показал всем свой уровень развития, начав беспричинно оскорблять собеседника. Думаешь я буду отвечать тебе бранью или оскорблениями? Опускаться до твоего уровня?
Будет достаточно если вы перестанете публиковать новые топики со своими бредовыми и бесплотными фантазиями.
Здравствуйте, so5team, Вы писали:
S>Уродство, уродство, узбагойтесь уже, это даже не оспаривается. Парадокс в том, что пользоваться современным C++ удобнее, чем тем, который был 25 лет назад.
Нет, не удобнее. Лично я уже лет как 10 вернулся к стилю С с классами и игнорю почти все нововведения. Код получается быстрым, безбажным и понятным.
Здравствуйте, Vzhyk2, Вы писали:
S>>Уродство, уродство, узбагойтесь уже, это даже не оспаривается. Парадокс в том, что пользоваться современным C++ удобнее, чем тем, который был 25 лет назад. V>Нет, не удобнее. Лично я уже лет как 10 вернулся к стилю С с классами и игнорю почти все нововведения. Код получается быстрым, безбажным и понятным.
Значит вам это предметная область позволяет.
У меня же опыт за последние лет 12-13 такой, что когда приходится возвращаться на стандарт-два назад, то это вызывает боль и неудобства. Например, при возврате с C++11 на C++98 не хватает лямбд и variadic templates, при возврате с C++14 на C++11 не хватает обобщенных лямбд, при возврате с C++17 на C++11 не хватает if constexpr и structured binding, при возврате с C++20 на C++17 не хватает концептов, spaceship operator и designated intitializers...
Что до понятности, то регулярно приходится встречать код на Си с классами от разработчиков с десятками лет "типа опыта" за плечами, разобраться в котором может разве что сам автор. И то не факт.
Здравствуйте, so5team, Вы писали:
S>Значит вам это предметная область позволяет.
Да. Это может быть значимо в вопросе применения фич С++.
Про области, где новейшие фичи С++ я ничего не знаю, но это не говорит о том, что их нет.
S>Что до понятности, то регулярно приходится встречать код на Си с классами от разработчиков с десятками лет "типа опыта" за плечами, разобраться в котором может разве что сам автор. И то не факт.
Постарайся без "аргументов блондинки". Тошнит уже от алогичности 99% постов на кывте.
И да, моё видение применения фич С++: Применять новые фичи С++ только тогда, когда код с применением их становится сильно лаконичнее и понятнее и не замедляет его выполнение.
Здравствуйте, Vzhyk2, Вы писали:
S>>Что до понятности, то регулярно приходится встречать код на Си с классами от разработчиков с десятками лет "типа опыта" за плечами, разобраться в котором может разве что сам автор. И то не факт. V>Постарайся без "аргументов блондинки".
Если вы дадите себе труд объяснить что вам не понятно в этой фразе, я постараюсь объяснить.
Так-то это был намек на то, что понятность кода зависит от способности человека связно излагать свои мысли (ну и о наличии этих самых мыслей). Когда такая способность есть, то понятно получается хоть в изложении на русском, хоть на Си с классами, хоть на modern C++.
Когда ее нет, тогда в Си с классами появляются развесистые иерархии наследования, а в modern C++ шаблон на шаблоне.
V>И да, моё видение применения фич С++: Применять новые фичи С++ только тогда, когда код с применением их становится сильно лаконичнее и понятнее и не замедляет его выполнение.
Именно это происходит, например, с variadic templates.
Но оценить это можно будет в обобщенном коде. Если же в прикладной задаче мест для обобщенного кода нет, то этого и не видно будет.
Именно это происходит, например, с концептами.
И здесь тоже самое касательно обобщенного кода.
Именно это происходит, например, с if constexpr. Хотя if constexpr может применяться не только в обобщенном программировании, но и для написания кросс-платформенного кода.
Именно это происходит, например, с operator spaceship. Тут вообще безотносительно обобщенного кода.
И т.д., и т.п.
Фичи -- это всего лишь фичи. Проблема (одна из множества) C++ в том, что эти фичи набраны абы как, а зачастую в режиме "ну есть же кривой способ, так и незачем добавлять нормальный". Но фичи не виноваты в том, что их начинают применять бездумно, не имея ни опыта, ни здравого смысла.
Здравствуйте, so5team, Вы писали:
S>Если вы дадите себе труд объяснить что вам не понятно в этой фразе, я постараюсь объяснить.
Почитай на той же вике, что такое "аргумент блондинки".
Здравствуйте, Vzhyk2, Вы писали:
S>>Если вы дадите себе труд объяснить что вам не понятно в этой фразе, я постараюсь объяснить. V>Почитай на той же вике, что такое "аргумент блондинки".
Здравствуйте, Shmj, Вы писали:
S>Тут дело вот в чем. Если вы выбираете C++, то вам нужно не только писать но и читать. В том числе логику на основе SFINAE.
Логика на основе SFINAE потеряла актуальность с приходом концептов. А технику с использованием sizeof для селекции типов, пример которой ты где-то тут приводил, перестали активно использовать ещё во времена C++03, ибо, как правило, находилось более привлекательное решение. Так что, ты пытаешься делать далеко идущие выводы на основании устаревших и неполных знаний.
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, rg45, Вы писали:
S>>Тут дело вот в чем. Если вы выбираете C++, то вам нужно не только писать но и читать. В том числе логику на основе SFINAE.
R>Логика на основе SFINAE потеряла актуальность с приходом концептов. А технику с использованием sizeof для селекции типов, пример которой ты где-то тут приводил, перестали активно использовать ещё во времена C++03, ибо, как правило, находилось более привлекательное решение. Так что, ты пытаешься делать далеко идущие выводы на основании устаревших и неполных знаний.
Причем тут это? Старый код а так же старые привычки никуда не делись. Если вам встретится такой код — придется уметь его читать — будешь же говорить — я ничерта тут не понимаю, т.к. так уже никто не пишет.
Здравствуйте, Shmj, Вы писали:
S>Причем тут это? Старый код а так же старые привычки никуда не делись. Если вам встретится такой код — придется уметь его читать — будешь же говорить — я ничерта тут не понимаю, т.к. так уже никто не пишет.
Подожди, так мы что здесь обсуждаем — проблемы С++, или чьи-то вредные привычки?
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, rg45, Вы писали:
S>>Причем тут это? Старый код а так же старые привычки никуда не делись. Если вам встретится такой код — придется уметь его читать — будешь же говорить — я ничерта тут не понимаю, т.к. так уже никто не пишет.
R>Подожди, так мы что здесь обсуждаем — проблемы С++, или чьи-то вредные привычки?
Код, который требуется доработать — вполне может включать части, написанные n лет назад с требованием поддержки старых версий C++ без концептов. И если ты позиционируешься как C++-девелопер — никак не отвертишься — это нужно знать и понимать.
Здравствуйте, Shmj, Вы писали:
S>Код, который требуется доработать — вполне может включать части, написанные n лет назад с требованием поддержки старых версий C++ без концептов. И если ты позиционируешься как C++-девелопер — никак не отвертишься — это нужно знать и понимать.
И как это согласуется с заголовком темы?
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, Shmj, Вы писали:
S>Концепты решили лишь часть проблем, по прежнему на компил-тайме пытаются и пытаются делать разные изрвраты.
Почему пытаются? Успешно делают.
И с точки зрения механики языка оно может и изврат (субъективно), но работает и приносит пользу.
Твои стенания о том, что это сложно, но это тоже субъективно — мне не сложно, а тебе лучше не связываться с C++. Подстраиваться под низкий уровень никто не будет.
Здравствуйте, rg45, Вы писали:
S>>Концепты решили лишь часть проблем, по прежнему на компил-тайме пытаются и пытаются делать разные изрвраты. R>Это твоё личное мнение, или это уже точно?
Я же дал ссылку.
Что мешает добавить в компил-тайм хотя бы те же статик-переменные внутри функции?
Здравствуйте, andrey.desman, Вы писали:
AD>Твои стенания о том, что это сложно, но это тоже субъективно — мне не сложно, а тебе лучше не связываться с C++. Подстраиваться под низкий уровень никто не будет.
Сейчас уже не субъективно. Раз его не может решить GPT — то это объективно сложно.
Это ранее мы могли спорить субъективно ли, вдруг автор имел другое в виду — а сейчас можем проверить на 100% однозначно и точно.
Здравствуйте, Shmj, Вы писали:
S>>>Концепты решили лишь часть проблем, по прежнему на компил-тайме пытаются и пытаются делать разные изрвраты. R>>Это твоё личное мнение, или это уже точно?
S>Я же дал ссылку.
Ссылку на моё собственное сообщение? Зачем? Вопрос же в обосновании твоего эпитета "изврат".
S>Что мешает добавить в компил-тайм хотя бы те же статик-переменные внутри функции?
Не уверен, что понял твою проблему.
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, Shmj, Вы писали:
S>Сейчас уже не субъективно. Раз его не может решить GPT — то это объективно сложно.
Почему мерилом ты выбрал "gpt", а не Мейерса, например? Потому что тебе так захотелось — это и есть субъективщина.
S>Это ранее мы могли спорить субъективно ли, вдруг автор имел другое в виду — а сейчас можем проверить на 100% однозначно и точно.
По этому форуму мы можем проверить, и уже не раз убедились, но не то, что тебе кажется.
Слушай, таких решалок и решал проблем С++ было дохрена. И не только через полностью новые ЯП. Вот помню, была какая-то инициатива, то ли Саттера, то ли ещё кого -"переизобретаем С++ без UB", как-то так. Проблема всех этих инициатив в том, что уже есть куча кодовой базы и спецы, которые наступили на множество граблей и знают, как их обходить. А для новых языков этого нет, и никто не хочет рисковать с новоделом. В случае экспериментальных проектов даже до разработки чего-то более сложного, чем "здравствуй, мир", строк так на 10К дело не доходит. Т.е. это максимум на дипломную и пару-тройку статей тянет.
В какой заднице ты находишь этот говнокод? Это Chat GPT тебе выдаёт эти "шедевры"?
По своему скудоумию данное решение может соперничать, разве что, с тупой постановкой задачи — продетектить наличие члена с именем find, безотносительно того, функция ли это, данное или тип.
Но даже в такой тупой постановке, даже на C++03, эта задача могла быть решена более компактно и элегантно. На С++11 — ещё более компактно и элегантно. На С++20 это решение в три строчки:
И даже эти три строчки, повторюсь, пришлось писать исключительно как дань тупизне постановки задачи. На самом деле, как мне кажется, автора интересовало, всё-таки наличие функции-члена find (шаблонной или нешаблонной). И в этом случае решение могло бы выглядеть как нельзя более естественно и лаконично:
А если вспомнить, что С++ позволяет непосредственно использовать констрейнты, без определения концептов, то, возможно, вообще ничего писать не пришлось бы. Тут уже чисто предпочтения программиста — насколько он хочет, чтоб код выглядел самодокументированным.
А вот так могло бы выглядть это же решение на С++03: http://coliru.stacked-crooked.com/a/dcdb0473b3c69a03. Не настолько элегантно и лаконично, как на С++20, конечно, но по-любому лучше, чем та порнота, которую ты притащил.
А теперь подумай и скажи, действительно ли это проблема С++? Может, дело, все-таки, в твоем бедном уровне владения С++, которое не позволяет тебе распознать откровенный говнокод? Глядя на какой-нибудь код, ты не понимаешь, что данную задачу можно решать разными способобами, что этих способов может быть несколько, что у каждого из этих способов есть свои плюсы и свои минусы. Но при этом ты назойливо поднимаешь и поднимаешь одну и ту же тему, предлагая что-то улучшать.
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, rg45, Вы писали:
R>Ссылку на моё собственное сообщение? Зачем? Вопрос же в обосновании твоего эпитета "изврат".
Тогда сам мне скажи — считаешь ли что твой (как и любой другой, по сути) код счетчика в компил-тайм — не изврат. Просто скажи и я поверю тебе на слово.
Здравствуйте, so5team, Вы писали:
S>У меня же опыт за последние лет 12-13 такой, что когда приходится возвращаться на стандарт-два назад, то это вызывает боль и неудобства. Например, при возврате с C++11 на C++98 не хватает лямбд и variadic templates, при возврате с C++14 на C++11 не хватает обобщенных лямбд, при возврате с C++17 на C++11 не хватает if constexpr и structured binding, при возврате с C++20 на C++17 не хватает концептов, spaceship operator и designated intitializers...
the only way to do good, efficient, and system-level and
portable C++ ends up to limit yourself to all the things that are
basically available in C. And limiting your project to C means that people
don't screw that up, and also means that you get a lot of programmers that
do actually understand low-level issues and don't screw things up with any
idiotic "object model" crap.
So I'm sorry, but for something like git, where efficiency was a primary
objective, the "advantages" of C++ is just a huge mistake. The fact that
we also piss off people who cannot see that is just a big additional
advantage.
If you want a VCS that is written in C++, go play with Monotone. Really.
They use a "real database". They use "nice object-oriented libraries".
They use "nice C++ abstractions". And quite frankly, as a result of all
these design decisions that sound so appealing to some CS people, the end
result is a horrible and unmaintainable mess.
Здравствуйте, Shmj, Вы писали:
S>Сейчас уже не субъективно. Раз его не может решить GPT — то это объективно сложно.
Попробуй допустить, что твой критерий верный: "Если Чат не может, значит сложно. Если сложно, значит плохо."
Представь, что станет с индустрией, которая будет жить по такому правилу, перестанет делать более сложные вещи. Ведь сам Чат не сможет больше развиваться, он дошёл до текущего уровня средней руки программиста только на том, что учился в том числе и на коде лучших.
Знаешь, что мы получим? Медленную стагнацию и деградацию. Как по мне, тот же С++ времён 2003 стандарта и расцвета книг Александреску был намного сложнее, чем сейчас. То, что Александреску делал своими многоуровневыми шаблонами, сейчас стало проще. Управление памятью в С++ стало проще. И многое другое. А всё почему? Потому что такие люди, как Александреску показывали своими сложными вещами, в какую сторону надо развивать (и упрощать!) язык.
Поэтому самый верный путь — развивайся! Не можешь развиваться в рамках С++ — переходи на другой язык и другие задачи, сейчас мир программирования так широк и глубок, что тебя ничто не ограничиает. Поэтому вместо ограничения других выбирай расширение себя. Это самый правильный путь.
Здравствуйте, Nuzhny, Вы писали:
N>Поэтому самый верный путь — развивайся! Не можешь развиваться в рамках С++ — переходи на другой язык и другие задачи, сейчас мир программирования так широк и глубок, что тебя ничто не ограничиает. Поэтому вместо ограничения других выбирай расширение себя. Это самый правильный путь.
Я не против сложных вещей. Но я против усложнения на пустом месте — где можно сделать просто — нельзя усложнять.
Счетчик вызовов должен занимать одну строчку, иначе с языком что-то не то.
Здравствуйте, Shmj, Вы писали:
S>Счетчик вызовов должен занимать одну строчку, иначе с языком что-то не то.
Счётчик вызовов и можно сделать просто и в одну строчку, но не compile time. Но кому нужен изврат, на который язык не расчитывался, те и делают его через изврат (например, как Александреску в своё время). Если решение оказывается востребованным, то допиливают язык. А ты как видишь решение такой проблемы?
Какой язык, по-твоему, хорош? Попробуй на нём сделать задачу, для которой его не проектировали, посмотри на результат. Язык от этого стал прохим?
Здравствуйте, so5team, Вы писали:
S>И какое из описанных там искажений позволило увидеть вам в моих словах "чрезмерное обобщение"?
Что до понятности, то регулярно приходится встречать код на Си с классами от разработчиков с десятками лет "типа опыта" за плечами, разобраться в котором может разве что сам автор. И то не факт.
Здравствуйте, Vzhyk2, Вы писали:
S>>И какое из описанных там искажений позволило увидеть вам в моих словах "чрезмерное обобщение"? V>Что до понятности, то регулярно приходится встречать код на Си с классами от разработчиков с десятками лет "типа опыта" за плечами, разобраться в котором может разве что сам автор. И то не факт.
Сперва вы не поняли то, что я вам написал (как раз ту самую цитату, которую вы в очередной раз повторили). Речь там шла о том, что в жизни есть примеры, когда сознательное ограничение в выразительных средствах не приводит к повышению понятности кода.
ХЗ где вы увидели там обобщение.
Потом вы не поняли вопрос. А вопрос состоял в том, какое именно искажение позволило увидеть "чрезмерное обобшение" там, где его не было в принципе.
В общем, читать научитесь прежде чем разбрасываться словами об алогичности комментариев на RSDN-е.
Здравствуйте, Shmj, Вы писали:
R>>Ссылку на моё собственное сообщение? Зачем? Вопрос же в обосновании твоего эпитета "изврат". S>Тогда сам мне скажи — считаешь ли что твой (как и любой другой, по сути) код счетчика в компил-тайм — не изврат. Просто скажи и я поверю тебе на слово.
Конкретно тот код основывается на так называемых loop holes, по сути баге/недосмотру в стандарте, позволяющему хранить и модифицировать состояние компилятора. Х.з., смогут ли они провернуть фарш назад и пофиксить это, потому как на этих лупхолах уже наковыряли всяких "фишек", хоть и не массово.
Да, считаю лупхолы извратом, и конкретно этот счетчик тоже. Как и любое другое состояние компилятора в момент компиляции, включая твои статические переменные в constexpr-функциях. Всё же компайл-тайм в плюсах функциональный и чистый (pure), и лучше бы он таким и оставался.
Здравствуйте, Shmj, Вы писали:
S>Тогда сам мне скажи — считаешь ли что твой (как и любой другой, по сути) код счетчика в компил-тайм — не изврат. Просто скажи и я поверю тебе на слово.
Ты в доктора Стравинского решил со мной поиграть?
Я не могу считать или не считать что-либо извратом, поскольку я не знаю, каким образом ты определяешь этот термин. Я ж не доктор Стравинский, и влазить в мозги не умею
Если для тебя изврат — это всё, чего нельзя добыть в готовом виде в Chat GPT, то вряд ли мы с тобой до чего-то договоримся.
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, Shmj, Вы писали:
S>Счетчик вызовов должен занимать одну строчку, иначе с языком что-то не то.
Что-то не распарсил. Что за счётчитк вызовов? И что именно должно занимать одну строчку? Если какой-то абстрактный "счетчик" помогает в решении каких-то задач, при этом он прост в использовании, то кого волнует, сколько строчек занимает реализация этого счётчика?
(в чём я не уверен), то следует понимать, что число строк в этой реализации существенно избыточно. И сделано это намеренно — для того, чтобы лучше был понятен принцип действия этого счётчика (хотя, всё это без толку, как я вижу). Минимизированная реализация выглядит существенно более компактной:
Ну, и в чём трагедия, иметь эти 20 строк кода в отдельном файле, в который даже заглядывать не обязательно? Ведь использование этого счётчика выглядит проще некуда: compile_time::tick<class X> — всё!. В чём твоя проблема — только в том, что Chat GPT не предоставил тебе разжёванного решения на блюдечке?
Да специфика С++ такова, что работать на нём с выключенными мозгами не получается, как правило. Если тебе это не подходит, ну, возможно, тебе следует поискать для себя более "приятные" языки.
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, rg45, Вы писали:
R>Здравствуйте, Shmj, Вы писали:
R>Ну, и в чём трагедия, иметь эти 20 строк кода в отдельном файле, в который даже заглядывать не обязательно? Ведь использование этого счётчика выглядит проще некуда: compile_time::tick<class X> — всё!. В чём твоя проблема — только в том, что Chat GPT не предоставил тебе разжёванного решения на блюдечке?
Проблема как обычно. Это работает только на C++20 и возможно выше если ничего не сломается.
Лучше бы сделали плагины на скриптовом языке для расширения функционала, а не это вот всё. То есть вместо гнобления макросов, следовало бы их развивать.
Здравствуйте, kov_serg, Вы писали:
_>Проблема как обычно. Это работает только на C++20 и возможно выше если ничего не сломается. _>Лучше бы сделали плагины на скриптовом языке для расширения функционала, а не это вот всё.
Ну так это уже не проблемы языка, как такового, а проблемы обратной совместимости с тем, каким язык был когда-то. Это немножко не одно и то же.
_>То есть вместо гнобления макросов, следовало бы их развивать.
Так макросы гнобят не из вредности характера, а потому что для этого есть веские причины.
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, kov_serg, Вы писали:
_>Проблема как обычно. Это работает только на C++20 и возможно выше если ничего не сломается.
А кстати, в моей имплементации компайл-тайм счётчика использование концептов ни разу не является ключевым. Эту же идею можно реализовать и на C++11, как минимум. У меня уже этих компайл-тайм счетчиков — как на гуталиновой фабрике, начиная с С++03. И не хватало мне лишь только финта с энтропией, который был доступен, уже начиная с С++11 (не знаю, можно ли найти равноценную замену этому на С++03).
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, Vzhyk2, Вы писали:
V>Здравствуйте, so5team, Вы писали:
S>>Ссылкой не поделитесь? V>"Чрезмерное обобщение — безосновательный перенос характеристик частных или даже единичных случаев на их обширные совокупности. Существует множество видов этого когнитивного искажения" обычно вот это называют "аргументом блондинки".
"Аргумент блондинки" — это "сейчас запла́чу".
А описанное это anecdotal evidence.
Здравствуйте, rg45, Вы писали:
R>А кстати, в моей имплементации компайл-тайм счётчика использование концептов ни разу не является ключевым. Эту же идею можно реализовать и на C++11, как минимум. У меня уже этих компайл-тайм счетчиков — как на гуталиновой фабрике, начиная с С++03. И не хватало мне лишь только финта с энтропией, который был доступен, уже начиная с С++11 (не знаю, можно ли найти равноценную замену этому на С++03).
— вот как раз я и имел в виду, что без использования препроцессора.
P.S. Только я обнаружил уже дофига мест, где "нечестная" имплементация работает, а "честная" не хочет. С совершенно невнятными объяснениями причин. Компилер как-будто сам удивляется, что у него есть состояние
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, Артём, Вы писали:
S>>И почему его мнение должно кого-то волновать? Тем более в конце 2024-го года?
Аё>Потому, что GIT давно стал стандартом, а написанные на плюсах VCS отправились на помойку истории.
Да, да, да. Это именно потому, что они были написаны на плюсах, а не потому, что GitHub был написан на Ruby-On-Rails, ага.
Кстати, а ведь Mercurial и Fossil не были написаны на плюсах, с ними-то что не так?
Но даже если поверить в то, что Линус тогда не назвиздел и секрет успеха Git именно в том, что в его разработке не применялся C++. Какова актуальность его слов, если я разрабатываю не DVCS и не в 2004-ом, а в 2024-ом?
Здравствуйте, Shmj, Вы писали:
S>В последнее время думаю что не так с C++
А в C++ есть дженерики? По уму можно изначально пользовать дженерики, а когда отладились перевели на шаблоны.
Или условную компиляцию для Debug дженерики для Release шаблоны.
Зато в отладчике интеллисенсе и прочие плюшки статической компиляции
Например в C++/CLI можно использовать и дженерики и шаблоны Generics and Templates (C++/CLI)
Смысл использовать перегрузку операторов как метод интерфейса
public interface IAddition<T> where T : IAddition<T>
{
static abstract T operator +(T left, T right);
}
public class Person : IAddition<Person>
{
public int Age { get; set; }
public static Person operator +(Person left, Person right)
{
return new Person { Age = left.Age + right.Age };
}
}
Now, with our new IAddition<T> interface, you can implement a generic Add method like you see it in the code snippet below. Note the generic type constraint that uses the new IAddition<T> interface.
public class Additions
{
public static T Add<T>(T x, T y) where T : IAddition<T>
{
return x + y;
}
}
This means now that you can use that generic Add method with Person objects. You can see this in the code snippet below.
var thomas = new Person { Age = 26 };
var julia = new Person { Age = 24 };
Person personResult = Additions.Add<Person>(thomas, julia);
var age = personResult.Age; // age is 50;
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Shmj, Вы писали:
S>В последнее время думаю что не так с C++
S>Вот, вроде, язык C — это самое компактное и логичное что может быть.
Ну может компактно но логичным там всё сложно назвать.
Книжка по простому компактному C — 425 страниц. https://www.amazon.com/Modern-Third-Covers-C23-standard/dp/1633437779
Здравствуйте, Артём, Вы писали:
S>>И почему его мнение должно кого-то волновать? Тем более в конце 2024-го года?
Аё>Потому, что GIT давно стал стандартом,
Это ничего не говорит о языке, на котором он написан. Вообще, по слухам, GIT унутре та ещё помойка.
У меня, кстати, есть подозрение, что популярность гита образовалась из-за того, что глав пингвин вёл на нем разработку линупса, и хочешь не хочешь, а приходилось использовать.
Аё>а написанные на плюсах VCS отправились на помойку истории.
Здравствуйте, andrey.desman, Вы писали:
AD>Конкретно тот код основывается на так называемых loop holes, по сути баге/недосмотру в стандарте, позволяющему хранить и модифицировать состояние компилятора.
Ну, даже в Си на макросах нечто похожее можно состряпать.
Т.е. идея переопределения символов времени компиляции не нова, просто появилась "более типизированная" реализация.
В функциональных языках с генерализацией (типа Хаскеля) подобные трюки тоже возможны и активно используются.
Причём, как на основе вычислений типов, так и на основе вычислений термов в процессе бета-редукции.
Здравствуйте, Shmj, Вы писали:
S>Я не против сложных вещей. Но я против усложнения на пустом месте — где можно сделать просто — нельзя усложнять.
Да не сложно это всё.
На других языках вычисления над типами порой более заковыристы (те же ML-подобные языки), но за это языки считают мощными.
А ты тут демонстрируешь забавную попытку инверсии устоявшихся в острасли оценочных критериев. ))
S>Счетчик вызовов должен занимать одну строчку, иначе с языком что-то не то.
Дык, он и занимает при использовании минимум символов.
Неплохо типизирован, достаточно универсален.
И даже исходный код в разы меньше реализации какого-нить вшивого смарт-поинтера, типа unique_ptr.
В общем, твоё оценочное мнение донельзя кривое.
И это даже если не вспоминать о том, что строить логические построения, опираясь на оценочные мнения — стрёмная тактика.
========
Что язык позволяет производить вычисления над типами — это неплохо.
Еще и концепты подвезли, а там еще дофига есть куда копать и копать, в т.ч. нарабатывать новые практики решения типовых задач.
Т.е., в плане вычислений над типами/ограничениями языку С++ еще есть куда расти и, надеюсь, он будет еще расти.
Здравствуйте, Muxa, Вы писали:
M>Конкурировать с сотней js/ts/java-макак из Бангалора?
Ты и так конкурируешь с сотней C++-макак из Бангалора- только за 1 миску риса, вместо 100.
M>Зубры хотя бы старые и умирают, выходят на пенсию или на повышение.
Это в целом неверное утверждение. Менеджер и "солюшен архитект" часто даже и не касались C++- они прокачивают другие скиллы.
Здравствуйте, vdimas, Вы писали:
V>В функциональных языках с генерализацией (типа Хаскеля)
Откуда вы такие находитесь? Я имею в виду- хаскелисты и прочая подобное ФП. На работе совсем нечем заняться что учите хаскель, или на хаскеле кто-то педалит индустриальный код?
Здравствуйте, Артём, Вы писали:
Аё>Откуда вы такие находитесь? Я имею в виду- хаскелисты и прочая подобное ФП. На работе совсем нечем заняться что учите хаскель, или на хаскеле кто-то педалит индустриальный код?
Ну, ты уже допедалился до TS.
Куда дальше падать? VB? ))
M>>Конкурировать с сотней js/ts/java-макак из Бангалора? Аё>Ты и так конкурируешь с сотней C++-макак из Бангалора- только за 1 миску риса, вместо 100.
Не конкурирую. При приеме на работу я продаю умения в предметной области, а не знания с++, которые у меня на троечку с плюсом.
M>>Зубры хотя бы старые и умирают, выходят на пенсию или на повышение. Аё>Это в целом неверное утверждение.
В каком месте это утверждение неверное?
Зубры не стареют, не умирают, не выходят на пенсию или не идут на повышение?
Здравствуйте, so5team, Вы писали:
S>Надо полагать, что в твоей системе ценностей "менеджер" и "солюшн архитект" -- это вершины, к которым должен стремится любой программист.
Это переходная стадия эволюции от программиста наверх по карьерной лестнице. Для кого-то это потолок, а для кого-то и рядовой программист- потолок.
Здравствуйте, Muxa, Вы писали:
M>Не конкурирую. При приеме на работу я продаю умения в предметной области, а не знания с++, которые у меня на троечку с плюсом.
У js/ts/java не может быть предметной области?
Небось сидишь в какой-нибудь "нии" на госконтракте? Признавайся.
M>>>Зубры хотя бы старые и умирают, выходят на пенсию или на повышение. Аё>>Это в целом неверное утверждение.
M>В каком месте это утверждение неверное?
Хотя бы в том, что зубры плюсники живут долго, и это хорошо.
Здравствуйте, Артём, Вы писали:
S>>Надо полагать, что в твоей системе ценностей "менеджер" и "солюшн архитект" -- это вершины, к которым должен стремится любой программист. Аё>Это переходная стадия эволюции от программиста наверх по карьерной лестнице.
Не-а. Вроде бы ты уже не молод, за 40 поди, а таких вещей еще не начал понимать.
Хотя, тут есть еще вопрос: способен ли ты понять хоть что-то, что не укладывается в твою систему ценностей.
Аё>Для кого-то это потолок
Это не потолок, это совсем другой род занятий. И как многим не дано научиться нормально программировать, так многим и не дано стать нормальными менеджерами. Причем далеко не все программисты вообще стремятся в эту область.
M>>Не конкурирую. При приеме на работу я продаю умения в предметной области, а не знания с++, которые у меня на троечку с плюсом. Аё>У js/ts/java не может быть предметной области?
Ну я и говорю, конкуренция с сотней макак из Бангалора.
Аё>Небось сидишь в какой-нибудь "нии" на госконтракте? Признавайся.
Раньше занимался вычислениями на ускорителях, в данный момент компиляторостроением.
Не НИИ, не госконтракты.
M>>>>Зубры хотя бы старые и умирают, выходят на пенсию или на повышение. Аё>>>Это в целом неверное утверждение. M>>В каком месте это утверждение неверное? Аё>Хотя бы в том, что зубры плюсники живут долго, и это хорошо.
Живут все плюс-минус одинаково, но у С++ зубров срок службы подходит к концу в отличие от js/ts/java макак.
M>Ну я и говорю, конкуренция с сотней макак из Бангалора.
Я говорю, что и у плюсников есть конкуренция с бангалором. В принципе, бывший СНГ- это тоже такой бангалор, просто повыше качество работников.
Аё>>Небось сидишь в какой-нибудь "нии" на госконтракте? Признавайся. M>Раньше занимался вычислениями на ускорителях, в данный момент компиляторостроением. M>Не НИИ, не госконтракты.
Поздравляю, но это очень узкая ниша. Тяжело сменить компанию например (ну сколько компиляторостроительных компаний на весь мир).
M>Живут все плюс-минус одинаково, но у С++ зубров срок службы подходит к концу в отличие от js/ts/java макак.
Ты молодёжь назывешь макаками что-ли?
Здравствуйте, so5team, Вы писали:
S>Хотя, тут есть еще вопрос: способен ли ты понять хоть что-то, что не укладывается в твою систему ценностей.
Я был в плюсах и я видел твой код. Ты не звезда, так скажем, но очень считаешь себя выше других просто по факту религии C++.
S>Это не потолок, это совсем другой род занятий.
Род занятий: мастурбатор на язык программирования.
Аё>>>Небось сидишь в какой-нибудь "нии" на госконтракте? Признавайся. M>>Раньше занимался вычислениями на ускорителях, в данный момент компиляторостроением. M>>Не НИИ, не госконтракты. Аё>Поздравляю, но это очень узкая ниша. Тяжело сменить компанию например (ну сколько компиляторостроительных компаний на весь мир).
Сколько всего хз, я поработал в трех.
M>>Живут все плюс-минус одинаково, но у С++ зубров срок службы подходит к концу в отличие от js/ts/java макак. Аё>Ты молодёжь назывешь макаками что-ли?
Программистов в сферах с низким порогом входа.
А молодежь там или старички — без разницы.
Здравствуйте, Артём, Вы писали:
S>>Хотя, тут есть еще вопрос: способен ли ты понять хоть что-то, что не укладывается в твою систему ценностей. Аё>Я был в плюсах и я видел твой код.
Да тут весь форум видел твою якобы критику.
Аё>Ты не звезда, так скажем, но очень считаешь себя выше других просто по факту религии C++.
И тут бы пруфов где бы я что-то подобное утверждал или высказывал хоть отдаленно напоминающие "считаешь себя выше других".
Только вот где форумный балабол Тёмчик, а где пруфы.
Здравствуйте, Артём, Вы писали:
S>>Хотя, тут есть еще вопрос: способен ли ты понять хоть что-то, что не укладывается в твою систему ценностей. Аё>Я был в плюсах и я видел твой код. Ты не звезда, так скажем, но очень считаешь себя выше других просто по факту религии C++.
Кто-то его ещё и слушал на конференции и видел лично. Можно сказать, что ты не прав в оценке.
P.S. Вообще, сам факт выступления на международной конференции намекает, что перед тобой хороший специалист.
Здравствуйте, Артём, Вы писали:
Аё>Это переходная стадия эволюции от программиста наверх по карьерной лестнице. Для кого-то это потолок, а для кого-то и рядовой программист- потолок.
Ты глуп. Я тебе могу привести контрпример. Я много лет совмещал (пытался) функции и руководителя, и разработчика. И так меня это за@бало, что в итоге я решил сменить место работы. И, устраиваясь на новую работу (13 лет назад), я сразу выдвинул условие, что я НЕ хочу быть менеджером. Мне ответили: "Да не вопрос. Этих менеджеров — как говна возле каждого столба. А вот нормальных программистов попробуй поискать".
Так что, это твой потолок — хотеть стать начальником.
--
Справедливость выше закона. А человечность выше справедливости.
— вот как раз я и имел в виду, что без использования препроцессора.
Странно, что использование препроцессора, в котором требуемый функционал реализован непосредственно, хоть и примитивно, у Вас ассоциируется с "нечестностью", а с "честностью" — как раз использование противоестественных трюков.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Странно, что использование препроцессора, в котором требуемый функционал реализован непосредственно, хоть и примитивно, у Вас ассоциируется с "нечестностью", а с "честностью" — как раз использование противоестественных трюков.
Ты имеешь в виду __COUNTER__? Так в том-то и нюанс, что он не обеспечивает предъявляемых требований. Мне нужно иметь одновременно несколько активных счётчиков, каждый из которых обеспечивает непрерывную zero-based последовательность. Поэтому __COUNTER__ я использовал только в качестве генератора "энтропии".
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, rg45, Вы писали:
R>Мне нужно иметь одновременно несколько активных счётчиков
Я понял, но "честность" — один из последних эпитетов, который я применил бы к подобной реализации (пусть даже и своей собственной). Это ж чистое извращение, издевательство над языком, совершенное по причине его глубокого убожества в сфере подобных задач.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Я понял, но "честность" — один из последних эпитетов, который я применил бы к подобной реализации (пусть даже и своей собственной). Это ж чистое извращение, издевательство над языком, совершенное по причине его глубокого убожества в сфере подобных задач.
Ну всё, поехали газовать. Наступили на любимую педаль.
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Я понял, но "честность" — один из последних эпитетов, который я применил бы к подобной реализации (пусть даже и своей собственной).
Я занимаюсь нечестными делами, но делаю я их честно!
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, rg45, Вы писали:
R>"Я занимаюсь нечестными делами, но делаю я их честно!"
Когда мне приходится делать подобное, я обычно стараюсь как-то обозначить, что сам не в восторге от применяемых методов и средств, но на безрыбье другого не остается. Это помогает отличить "делаю с радостью и гордостью" от "делаю от безысходности, с сожалением".
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Когда мне приходится делать подобное, я обычно стараюсь как-то обозначить, что сам не в восторге от применяемых методов и средств, но на безрыбье другого не остается. Это помогает отличить "делаю с радостью и гордостью" от "делаю от безысходности, с сожалением".
Ну хорош уже пух тут на себя накидывать.
А то я себя чувствую, как-будто меня разбирают на совете дружины за то, что я на физкультуре за девочками подглядывал.
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, rg45, Вы писали:
R>хорош уже пух тут на себя накидывать.
Нуачо, когда приходится приматывать проволокой вместо винтов или сварки, ощущение примерно то же.
R>как-будто меня разбирают на совете дружины за то, что я на физкультуре за девочками подглядывал.
Вот стремление подглядывать за девочками, со всеми сопутствующими стремлениями, как раз совершенно естественно, и лишь больная, извращенная культура искусственно придает ему черты порока.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Вот стремление подглядывать за девочками, со всеми сопутствующими стремлениями, как раз совершенно естественно, и лишь больная, извращенная культура искусственно придает ему черты порока.
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, Nuzhny, Вы писали:
N>Кто-то его ещё и слушал на конференции и видел лично. Можно сказать, что ты не прав в оценке.
Я не видел лично и не видел результатов (продуктов), но категорические посты этого персонажа прямотговорят, насколько он религиозно упрямый, скажем так.
N>P.S. Вообще, сам факт выступления на международной конференции намекает, что перед тобой хороший специалист.
Я не утверждал, что eao плохой специалист- только что религиозный. Факт невыступления на конференциях тоже не намекает, что плохой специалист.
Офтоп- когда я видел докладчика на митапе C++ с форточкой и VC- подумал "как всё запущено".
Аё>>С ним всё так. Он невостребован.
M>Судя по зарплатам, вполне востребован: M>https://www.reddit.com/r/dataisbeautiful/s/FVPIDTh6wa
В твоей ссылке, программист bash больше, чем C++ а самый бохатый программист clojure.
Здравствуйте, Артём, Вы писали:
Аё>Офтоп- когда я видел докладчика на митапе C++ с форточкой и VC- подумал "как всё запущено".
А это вообще прекрасно. И что там должно было бы быть вместо? macOS с XCode или Ubuntu с CLion? Что считается модным и молодежным у непричастных к C++?
Здравствуйте, so5team, Вы писали:
S>А это вообще прекрасно. И что там должно было бы быть вместо? macOS с XCode или Ubuntu с CLion? Что считается модным и молодежным у непричастных к C++?
Докладчик ниасилил юникс. Its that simple.
Mac или любой дистр линукса был бы более к месту. Ибо C++ — это кросс платформа прежде всего.
PS Твоё воинственное невежество (незнание других инструментов разработки и других платформ) не делает тебя более "причастным" чем те, кто знает больше тебя.
Аё>>>С ним всё так. Он невостребован.
M>>Судя по зарплатам, вполне востребован: M>>https://www.reddit.com/r/dataisbeautiful/s/FVPIDTh6wa Аё>В твоей ссылке, программист bash больше, чем C++ а самый бохатый программист clojure.
А как должно быть?
Аё>По моим пенатам Аё>C++ developer 2 weeks 140k+ 1 job Аё>Java developer 2 weeks 180k+ 6 jobs
Facepalm
Ты пытаешься сделать какие-то выводы из 1 вакансии?
По моей ссылке их 30-40 тысяч.
Здравствуйте, Артём, Вы писали:
S>>А это вообще прекрасно. И что там должно было бы быть вместо? macOS с XCode или Ubuntu с CLion? Что считается модным и молодежным у непричастных к C++?
Аё>Докладчик ниасилил юникс.
Из чего это следует? Пруфы, Тёмчик, где пруфы?
Я вот пользуюсь Linux-ами на ноутбуках года с 2002-го и понимаю боль Pauel
. Чем заниматься допиливанием Linux-а своими руками проще взять Windows и не париться проблемами с драйверами.
Аё>Mac или любой дистр линукса был бы более к месту. Ибо C++ — это кросс платформа прежде всего.
Если речь про кроссплатформу, то без разницы где набирать код, все равно будет несколько разных сборочных и тестовых окружений.
Аё>PS Твоё воинственное невежество (незнание других инструментов разработки и других платформ)
Пруфы, Тёмчик, где пруфы?
Если говорить про невежество и непричастность, то ты в курсе, например, что в последние годы VC++ один из лидеров по внедрению фич из новых стандартов в компилятор и стандартную библиотеку?
Здравствуйте, Muxa, Вы писали:
Аё>>В твоей ссылке, программист bash больше, чем C++ а самый бохатый программист clojure. M>А как должно быть?
Ну, "программист на bash" это что вообще? Это к вопросу о ценности такой статистики.
Аё>>По моим пенатам Аё>>C++ developer 2 weeks 140k+ 1 job Аё>>Java developer 2 weeks 180k+ 6 jobs M>Facepalm M>Ты пытаешься сделать какие-то выводы из 1 вакансии?
Я наверное, непонятно как-то выразился? Пойнт в том, что это и еть всего одна вакансия, на крупнейший рынок труда в Австралии, и та — в Гугл.
M>По моей ссылке их 30-40 тысяч.
Чего, вакансий? На весь мир, включая Индию и Китай?
Аё>>>В твоей ссылке, программист bash больше, чем C++ а самый бохатый программист clojure. M>>А как должно быть? Аё>Ну, "программист на bash" это что вообще? Это к вопросу о ценности такой статистики.
Там в коментах есть автор, задай ему этот вопрос. Может нужен программист, админ, девопс и на дуде дудец.
Обычная ситуация в мелких конторах и стартапах.
M>>Ты пытаешься сделать какие-то выводы из 1 вакансии? Аё>Я наверное, непонятно как-то выразился? Пойнт в том, что это и еть всего одна вакансия, на крупнейший рынок труда в Австралии, и та — в Гугл.
Это больше говорит о рынке Австралии (6 вакансий Java на всю страну), а не о потребности в программистах вообще.
M>>По моей ссылке их 30-40 тысяч. Аё>Чего, вакансий? На весь мир, включая Индию и Китай?
Только США
Здравствуйте, Muxa, Вы писали:
M>Обычная ситуация в мелких конторах и стартапах.
Про баш мимо короче.
M>Это больше говорит о рынке Австралии (6 вакансий Java на всю страну)
На Сидней. И фактически 0 на C++.
M>Только США
Ок. Я загуглил- монстр какой-то экстремально криво ищет C++ в кучу собирает вмнх подряд и руби и всех. Но indeed показывает, что поюсников даже больше ищут в США, чем жавистов.
Я не в США, тут такая позиция "C++ сеньёр" это HFT или игры. А приезжающих с опытом C++ — каждый год тысячи.
Update. Тут рассмотрели первые страницы из "20 тыс вакансий". Они группируются на категории:
— железки
— легаси
— трейдеры
— игры
В железках обычно мало денег, и специфическое занятие.
Легаси — сразу в топку. Нафиг нафиг obsolete калом мамонта знаниями забивать голову
Трейдеры- они и в Австралии трейдеры. Много денег, высокий порог, специфическое.
Игры- плохо с job security и как правило, меньше денег. Зато интересно.