The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Обзор проблем в коде на C/C++, вызванных неопределённым поведением компилятора

07.07.2017 10:43

Джон Регир (John Regehr), профессор университета штата Юта, участвующий в разработке Clang и занимающийся исследованиями в области неопределённого поведения программ, подготовил полезный для разработчиков обзор ситуаций, при которых поведение программы становится неопределенным и приводит к получению проблем с использованием памяти и указателями при сборке разными компиляторами. В статье не только описаны возникающие проблемы, но и предложены способы для их выявления, а также оценена эффективность применения для обнаружения неопределённого поведения типовых отладочных инструментов, таких как Address Sanitizer (ASAN), UndefinedBehaviorSanitizer (UBSan), MemorySanitizer (MSan), ThreadSanitizer (aka TSan) и Valgrind.

  1. Главная ссылка к новости (https://blog.regehr.org/archiv...)
  2. OpenNews: Дэниэл Бернштейн выступил с инициативой создания Си-компилятора для защищённого ПО
  3. OpenNews: Оптимизация кода компилятором может привести к появлению проблем безопасности в приложениях
  4. OpenNews: В DNS-сервере BIND устранен серьёзный сбой, возникший из-за изменений в оптимизаторе GCC
  5. OpenNews: Разработчики Mozilla столкнулись с проблемой производительности в GCC 4.5
  6. OpenNews: Линус Торвальдс выступил с резкой критикой GCC 4.9.0
Лицензия: CC-BY
Тип: английский / Практикум
Короткая ссылка: https://opennet.ru/46820-undefinedbehavior
Ключевые слова: undefinedbehavior, debug, memory, gcc, clang
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (161) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, A.Stahl (ok), 11:12, 07/07/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +31 +/
    Во-первых -- 3 галлона пива господину Регеру за очень краткие и ёмкие кусочки кода.
    Во-вторых г-н Регер показал, что UB это обычно результат наркоманского кода.
    Арифметика указателей? Ок, все мы её в той или иной мере используем, но нужно знать и меру.
    Самое важное правило (все новички о нём знают[сами для себя и выводят], а вот люди с опытом часто забывают) -- код должен быть простым и понятным. В 21 веке компиляторы лучше оптимизируют под платформу чем человек. Поэтому нужно писать простой и понятный код. Эффективный код -- удел компилятора. Да, некоторые моменты (обход прямоугольной матрицы и т.п.) до сих пор актуальны, но это не усложняет код и вполне вписывается в концепцию здравого смысла.
     
     
  • 2.2, Zoolander (?), 11:38, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Как думаете, почему профессионалы подвержены болезни усложнения кода? У них крыша едет? Или они думают, что все могут в памяти держать?
     
     
  • 3.3, Iaaa (ok), 11:45, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Тоже вижу слишком часто неоправданное усложнение. Может "не солидно", "что я как джун какой-то писать буду"?

    Ну а вообще, "Real Programmers don't comment their code. If it was hard to write, it should be hard to understand." (c)

     
  • 3.4, A.Stahl (ok), 12:04, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +16 +/
    Многие профессионалы сталкиваются с ситуацией, когда они сами пишут и проектируют.
    Соответственно они это делают как им удобно.
    Вот, например, я -- терпеть не могу шаблоны. STL использую, но сам не пишу. Это такой мой "бзик". Также я не уловил прелесть смартпоинтеров. У меня и с обычными указателями никаких проблем нет. Нахрена мне умные?
    А вот теперь представь, что я  -- тимлимд (а я на плюсах ~10 лет пишу, так что опыт имеется и на такую должность вполне могу упасть). И как себя будет чувствовать молодёжь, которая ни асма ни Си не нюхала? Я со своими требованиями буду для них "придурок, усложняющий код, когда можно написать auto". И они будут правы. И я буду прав. Вот так.
    Это разница в поколениях и мировоззрениях. Классическая проблема отцов-сыновей.
     
     
  • 4.7, Crazy Alex (ok), 12:15, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +3 +/
    А exception safety, move semantics, вот это всё - тоже игноришь? Их без умных указателей не особо реализуешь... То есть можно конечно, но возни же куча.
     
     
  • 5.11, A.Stahl (ok), 12:50, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +9 +/
    Исключения не люблю, а вот move semantics почти не нужно если у тебя всё хорошо с обычными указателями. Если писать в Ява-стиле, то да -- эта штука реально спасает. Сишнику это не очень критично. У сишника не часто бывают нюансы когда ты "передаёшь эстафету" и умираешь:) Да и сишник всегда может передать указатель и забыть/забить.
    Но да, иногда эта штука крута и прикольна. Но ничего такого.
     
     
  • 6.17, Crazy Alex (ok), 13:57, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Создать объект и отдать его контейнеру - это редкая операция? А если нет - то либо умные указатели, либо move semantics, либо с ровного места теряем в производительности на копированиях объектов.
     
     
  • 7.21, A.Stahl (ok), 15:04, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Я обычно передаю указатель. Редко бывает, когда объект нужен много кому и непонятно кто должен его удалять.
     
     
  • 8.26, Crazy Alex (ok), 15:36, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    А у меня - как-то через раз Лежит себе вектор указателей на объекты, чему-то од... текст свёрнут, показать
     
     
  • 9.29, Аноним (-), 15:58, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Код является простым когда простой инспекцией удается выловить границы жизни объ... текст свёрнут, показать
     
     
  • 10.31, A.Stahl (ok), 16:15, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Красиво казал Меня там минусуют, но они не совсем понимают суть Я не против но... текст свёрнут, показать
     
     
  • 11.54, Crazy Alex (ok), 21:58, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Фишка в том, что очевидный для сишников и очевидный для плюсовиков - вещи ра... текст свёрнут, показать
     
     
  • 12.60, Аноним (-), 22:33, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это лишь ваше представление которое основано, к сожалению, на незнании или малоо... большой текст свёрнут, показать
     
     
  • 13.69, Crazy Alex (ok), 01:40, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ох как забавно Подход узнаем как должно работать и реализуем сразу велосипед... большой текст свёрнут, показать
     
     
  • 14.74, Аноним (-), 04:17, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Очень забавно потому что вот это - вменяемый разработчик вообще на любом языке ... большой текст свёрнут, показать
     
  • 12.80, pripolz (?), 11:34, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    броо А вообще я редкостный хейтер всего кроме Си хотя писал на 100 языках... текст свёрнут, показать
     
     
  • 13.100, Vkni (ok), 17:51, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    А вы и так не знаете, не переживайте Даже пишущий на ассемблере не знает, как о... текст свёрнут, показать
     
     
  • 14.124, Аноним (-), 01:44, 09/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Это и не нужно, во-первых Во-вторых речь не о машинном исполнении была Ложное ... большой текст свёрнут, показать
     
     
  • 15.127, Vkni (ok), 02:08, 09/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Ну да, на каком-то уровне приходится останавливаться Ну можно остановиться на а... большой текст свёрнут, показать
     
     
  • 16.129, Аноним (-), 02:46, 09/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Зачем вообще вы снова асм тянете, я не пойму Вот люди пишут на java и не парятс... большой текст свёрнут, показать
     
     
  • 17.130, Vkni (ok), 02:56, 09/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Ветка такая См несколько комментов выше ... текст свёрнут, показать
     
     
  • 18.133, Аноним (-), 05:48, 09/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    В 12 54 Crazy Alex написал свое ОГРАНИЧЕННОЕ понимание программирования в Си... текст свёрнут, показать
     
     
  • 19.135, Vkni (ok), 07:29, 09/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Я писал недавно зарегистрировавшемуся товарищу на букву p ... текст свёрнут, показать
     
     
  • 20.140, Аноним (-), 16:14, 09/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Точно, сообщение 12 80 от пользователя pripolz Но это не меняет ситуацию с пост... текст свёрнут, показать
     
  • 11.61, Аноним (-), 22:41, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Я не кравиво сказал, а рассказал как оно обстоит в реальном программировании У ... текст свёрнут, показать
     
  • 10.52, Crazy Alex (ok), 21:45, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Умные указатели сложность, в общем, не особо прибавляют, если дать себе труд раз... текст свёрнут, показать
     
     
  • 11.59, не программист (?), 22:23, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Я хорошо знаю и умею использовать умные указатели и для меня это уже пройденный ... текст свёрнут, показать
     
     
  • 12.68, Crazy Alex (ok), 01:31, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Единственная Ситуация, когда от них больше вреда, чем пользы - это когда в про... текст свёрнут, показать
     
     
  • 13.71, Аноним (-), 03:55, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Вы вообще программировали что-нибудь серьезное Когда вы будете думать о том как... большой текст свёрнут, показать
     
  • 6.58, Аноним (-), 22:19, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А как же Вы обрабатываете ошибки? Я Плюсы знаю неплохо, но пишу на чистом Си. Простые задачи выношу в Питон. На обработку ошибок в Си, выставления errno и т.п. уходит иногда до половины кода (с учётом библиотеки под эти дела). Мне всегда было интересно, как у серьёзных проектов на плюсах дела с обработкой ошибок обстоят. try... намного увеличивают количество кода и уменьшают читабельность. Я уже не говорю, что я не смогу вызвать конструктор стекового объекта внутри try..., т.к. ограничу объект его областью видимости. Но в то же время программа должна корректно обрабатывать ошибки и реагировать на них. Так как Вы обходитесь без исключений то?
     
     
  • 7.81, pripolz (?), 11:52, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    я всю обработку ошибок кладу в макрос, в котором и печать в лог номера строки ко... большой текст свёрнут, показать
     
     
  • 8.119, Аноним (-), 22:47, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Ну, у Вас по сути примерно такая же обработка ошибок, как и у нас А про плюсови... текст свёрнут, показать
     
  • 8.121, Vkni (ok), 23:54, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Их должно быть несколько, если выделяются сразу несколько ресурсов И не перепут... текст свёрнут, показать
     
     
  • 9.126, pripolz (?), 02:08, 09/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    инициализация нулями спасёт мир for int i 0 i 5 i if f i ... текст свёрнут, показать
     
     
  • 10.128, Vkni (ok), 02:14, 09/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Это костыль под конкретный случай Взять какую-нибудь другую структуру и опа ... текст свёрнут, показать
     
  • 10.131, pripolz (?), 03:29, 09/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    упс, не по теме написал Сори ... текст свёрнут, показать
     
  • 9.136, Аноним (-), 09:15, 09/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    У нас на метки с освобождением ресурсов и восстановлением уходит до половины тел... текст свёрнут, показать
     
  • 5.13, yet another anonymous (?), 12:56, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > exception safety, move semantics, ...  Их без умных указателей не особо реализуешь...

    Бред.

     
     
  • 6.18, Crazy Alex (ok), 14:00, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Говорю же - можно, но морока. Придётся самому отслеживать все случаи, когда надо прибить указатель - а ради чего?

    Что характерно - это ж не я придумал, можете любого плюсового гуру поглядеть - здесь разногласий нет с того самого 11-го года.

     
     
  • 7.22, yet another anonymous (?), 15:05, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    move не имеет к *_ptr отношения. *_ptr подразумевают move. (при достаточно полной реализации). Поэтому "для реализации move-семантики нужны умные указатели" --- набор слов, не складывающийся в осмысленную фразу.

    Если фраза подразумевала
    "при релизации move-семантики объекта обязательно нужны умные указатели", то тоже бред выходит: это зависит от объекта.

    > А exception safety, move semantics, вот это всё - тоже игноришь? Их без умных указателей не особо реализуешь...

     
     
  • 8.23, Crazy Alex (ok), 15:31, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Нет Подразумевалось умные указатели радикально упрощают реализацию move-семант... текст свёрнут, показать
     
     
  • 9.35, yet another anonymous (?), 17:18, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Т е второй вариант Мне нравится такой подход неявно подразумевается вполне оп... текст свёрнут, показать
     
     
  • 10.53, Crazy Alex (ok), 21:51, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Оно везде так Называется best practices Использование ничего-то отличающегос... текст свёрнут, показать
     
  • 4.25, kai3341 (ok), 15:35, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Или ещё вариант: на этапе проектирования закладывается больше гибкости и универсальности.
    Если она вся не используется, код переусложнён. Тогда говорят "Фу, оверинжениринг".
    А вот если её становится недостаточно, начинается адище.
     
  • 4.34, anonymous (??), 17:13, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • –3 +/
    > И они будут правы.

    Они будут правы.

    > И я буду прав.

    А вот вы не будете. Будете старым пердуном, который не успевает за ритмом развития инструмента, но прикрывается словами о простоте и 10 годах опыта.

     
     
  • 5.82, pripolz (?), 12:30, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    >> И они будут правы.
    > Они будут правы.
    >> И я буду прав.
    > А вот вы не будете. Будете старым пердуном, который не успевает за
    > ритмом развития инструмента, но прикрывается словами о простоте и 10 годах
    > опыта.

    Почитайте книгу "Современный и эффективный С++". Там автор докажет вам, что auto - тот ещё фрукт. В конце он приходит к выводу, что инициализируя auto "хорошо бы добавить статик каст". Т.е. уже начинается борьба ради ауто.

    Так что, всё как раз наоборот. Они не будут правы (просто не знают проблем), а он прав будет, потому что знает, а не не знает.

     
     
  • 6.97, anonymous (??), 17:32, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > В конце он приходит к выводу, что
    > инициализируя auto "хорошо бы добавить статик каст".

    Правда? Может вы что-то не так вычитали? А если так, то замените auto на что-то конкретное вот в таком случае, например:


    auto local_fn = [&](auto & a) {...};


    Ну или static_cast вставьте где-нибудь, где вам больше нравится.

    А еще попробуйте обойтись без auto внутри шаблонов, что-то вроде:


    template<typename A, typename B> auto f(A a, B b) {
      auto tmp = a + b;
      ...
      return tmp + 1;
    }

    > Так что, всё как раз наоборот. Они не будут правы (просто не
    > знают проблем), а он прав будет, потому что знает, а не
    > не знает.

    Он как раз не знает. И не использует то, чего не знает и боится.

     
  • 6.99, Vkni (ok), 17:46, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Почитайте книгу "Современный и эффективный С++". Там автор докажет вам, что auto
    > - тот ещё фрукт.

    Можно ссылку?

     
     
  • 7.105, pripolz (?), 19:29, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    >> Почитайте книгу "Современный и эффективный С++". Там автор докажет вам, что auto
    >> - тот ещё фрукт.
    > Можно ссылку?

    Там ниже в беседе кидали на магаз О-Райли. Effective Modern C++ Майерса.

     
     
  • 8.110, Vkni (ok), 19:57, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    А-аа, Майерс Просто modern C - это в разные времена совершенно разное ... текст свёрнут, показать
     
  • 3.5, Crazy Alex (ok), 12:08, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    1) Профессионалы часто пишут что-то большое, и долго. Со временем качество кода в проекте неизбежно падает, и приходится колдовать. Нет, рефакторинг возможен (точнее, окупается) не всегда.

    2) Профессионалы часто правда могут спокойно переварить довольно сложный код, а не только "думают", что могут. И как сложный его не воспринимают. Это вполне развиваемый навык, просто времени много уходит.

     
     
  • 4.66, Алконим (?), 01:23, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Если будет падать качество кода, то упадёт и скорость разработки, и проект упрётся в стену. У професионалов, качество кода к концу проекта растёт а не падает, скорость разработки растёт, возможности растут. Это сложно, это нужно знать и уметь процесы и методики, это геморойно и не связано с програмированием вообще, но оно того стоит когда нужно выиграть клиента. Клиенты сейчас умные пошли — заказывают проект сразу в двух конторах (часть там, часть там), а потом избавляются от неудачника через несколько месяцев и передают их часть третей конторе, и т.д. Так что про «неизбежно падает» рассказывай нашим конкурентам а не нам.
     
     
  • 5.76, Вареник (?), 08:08, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Любой проект постепенно обрастает заплатками и требует специальных мер от команды, чтобы не превратиться в "лапшу".
     
  • 5.77, Вареник (?), 08:13, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Написать модуль по спеку - не совсем жизненный цикл проекта.

    Тот же проект потом еще кучу контракторов/сотрудников переживет, сотни патчей и часто - несколько хозяев (т.е. тех самых "заказчиков"). И вот тогда уже можно говорить о качестве кода - когда проект сменил трех владельцев, десятки не связанных между собой сотрудников и в нем все еще можно разобраться и принципы модульности, архитектуры остались соблюдены.

     
  • 5.79, Аноним (-), 11:22, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Полностью поддерживаю. В нашей команде качество кода растёт со временем. Во-первых, программисты становятся более опытными и учатся друг у друга, а во-вторых, приходится делать рефакторинг старого кода при добавлении новых функций. Рефакторинг иногда бывает длительным, но себя полностью окупает, т.к. дальнейшая разработка и внедрение новых функций будет идти на порядок быстрее.
     
  • 3.9, Аноним (-), 12:30, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Желание того что-бы их код работал так как они решили, а не как вздумается компилятору ( сегдня быстрее, завтра медленнее)
     
  • 3.117, anonymous (??), 22:26, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >Как думаете, почему профессионалы подвержены болезни усложнения кода?

    я за 15 лет вокруг как раз вижу что становясь профессионалами люди начинают упрощать код

     
  • 2.14, Аноним (-), 13:15, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > В 21 веке компиляторы лучше оптимизируют под платформу чем человек.

    Скажи это новым появляющимся языкам программирования или таким языкам как C#, у которого компилятор в принципе не имеет право заниматься тщательной оптимизацией.

     
     
  • 3.30, Анончик (?), 16:04, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> В 21 веке компиляторы лучше оптимизируют под платформу чем человек.
    > Скажи это новым появляющимся языкам программирования или таким языкам как C#, у
    > которого компилятор в принципе не имеет право заниматься тщательной оптимизацией.

    Ну, в этом есть и один плюс - C# либы/екзешники из-за этого очень легко восстановить до нормального кода вплоть до комментариев.

     
     
  • 4.36, Аноним (-), 17:29, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > C# либы/екзешники из-за этого очень легко восстановить до нормального кода вплоть до комментариев.

    Я про JIT говорил. Первоначальная компиляция в CIL (как и у Java в их промежуточный байт код) происходит вообще без оптимизаций, отсюда да, можно всё восстановить.

    А вот с JIT'ом у C# (ладно-ладно, не C#, а CLR) есть некоторые проблемы вплоть до того, что если в цикле for у тебя стоит return, а не break с последующим return, то разность скорости выполнения этого цикла for достигает чуть ли не 2 раз (возможно, я утрирую, не помню точных цифер, но общий смысл такой).

     
  • 4.37, _ (??), 17:54, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • –5 +/
    У нормальных людей есть исходники с комментами, дока, и мэйл лист с аффтарами.
    Но вантузятники должны страдать! (С)
     
     
  • 5.57, Анончик (?), 22:13, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > У нормальных людей есть исходники с комментами, дока, и мэйл лист с
    > аффтарами.
    > Но вантузятники должны страдать! (С)

    RE занимаются не только вантузятники и не только на вантузе.

     
  • 2.24, Ivan_83 (ok), 15:32, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Это не отменяет 100500 вариантов написания popcnt, для начала, которые хер компелятор распознает чтобы заменить на popcnt, да и сам popcnt не везде есть.
    И получается что лучше один раз хорошо написать этот низкоуровневый кусок руками чтобы он гарантированно работал везде быстро.

    Есть ещё 100500 разных вумных ручных оптимизаций базовых математических операций, которые нужны для работы с длинными числами.
    Это всё никакой компелятор тебе не оптимизирует.

    Но да, там где можно написать понятно и упростить лучше так и делать, с этим трудно спорить.

     
  • 2.33, Comdiv (ok), 16:53, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Во-вторых г-н Регер показал, что UB это обычно результат наркоманского кода.

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

     

     ....большая нить свёрнута, показать (63)

  • 1.6, Crazy Alex (ok), 12:13, 07/07/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ещё один с "С/С++"? То, о чём он говорит, ловится любым приличным современным линтотулзом для плюсов, потому что сейчас на плюсах так писать вообще не принято.
     
     
  • 2.10, RazrFalcon (ok), 12:34, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Каким образом линтер ловит выход за пределы массива и use after free?
     
     
  • 3.19, Crazy Alex (ok), 14:29, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Очень просто - ругается на попытки использовать сишные массивы и голые сишные указатели. В плюсах это bad practices, и давно.
     
     
  • 4.145, Анонимный Алкоголик (??), 10:20, 10/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Очень просто - ругается на попытки использовать сишные массивы и голые сишные
    > указатели. В плюсах это bad practices, и давно.

    Ну то есть никак не находит выход за пределы массива. Что показывает практическую негодность этого вашего "линтера".

     
  • 2.15, A.Stahl (ok), 13:26, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >потому что сейчас на плюсах так писать вообще не принято.

    Ну это ты загнул.

     
     
  • 3.20, Crazy Alex (ok), 14:36, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Не загибал:
    https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#R
    https://isocpp.org/wiki/faq/containers
     
  • 3.28, Ordu (ok), 15:46, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Нет, это не он загнул Просто кто-то отстал от развития практик применения C л... большой текст свёрнут, показать
     
     
  • 4.38, A.Stahl (ok), 18:02, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >boost

    Это отдельная тема. Специфическая тема. Не моя тема.

     
     
  • 5.41, Ordu (ok), 18:42, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +4 +/
    При чём здесь моя или не моя Из наблюдений за копошением вокруг разных язык... большой текст свёрнут, показать
     
     
  • 6.43, yet another anonymous (?), 19:09, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Хмм... Что-то в вашей позиции есть интересное. По крайней мере, даже Страуструпу понадобился пинок в виде ребят из университета Ватерлоо и Степанова.
     
     
  • 7.45, A.Stahl (ok), 19:58, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Пинок инженера инженеру это всегда хорошо.
    Хотя я и не рад смотря куда развиваются плюсы.
     
     
  • 8.62, Аноним (-), 22:59, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Плюсы с самого начала были не до конца продуманным костылем Почитайте труды кри... текст свёрнут, показать
     
     
  • 9.85, pripolz (?), 14:01, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Можно поподробнее Авторство, ссылочку С удовольствием бы почитал, интересуюсь ... текст свёрнут, показать
     
     
  • 10.94, Аноним (-), 17:08, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    К сожалению я не могу дать вам ссылок, т к не нашел и не сохранил Я это читал ... текст свёрнут, показать
     
  • 10.98, Vkni (ok), 17:43, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Unix Haters Handbook, страница 203 и далее Но надо понимать, что сейчас ЦэПэПэ ... текст свёрнут, показать
     
  • 6.87, pripolz (?), 14:06, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    gt оверквотинг удален Рекоммендую к прочтению код какого-нибудь авторитетного ... большой текст свёрнут, показать
     
     
  • 7.88, Ordu (ok), 14:29, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    gt оверквотинг удален Да-да, я знаю Всё можно написать на ассемблере Но заче... большой текст свёрнут, показать
     
     
  • 8.90, pripolz (?), 14:43, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Чтобы кода было меньше, а технологий больше Вообще все любители высокоуровневых... текст свёрнут, показать
     
     
  • 9.91, Ordu (ok), 15:32, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    На ассемблере будет меньше кода Ха Ты попробуй писать на ассемблере Или на C ... большой текст свёрнут, показать
     
     
  • 10.92, pripolz (?), 16:02, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    именно так На си будет меньше кода Ты себя-то называешь умным человеком Речь ... текст свёрнут, показать
     
     
  • 11.101, Vkni (ok), 17:53, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Только если не использовать ООП и шаблоны там, где это не надо Ручная эмуляция ... текст свёрнут, показать
     
     
  • 12.103, pripolz (?), 18:38, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    1 Фишки Glib не пересекаются с фишками компилятора С вообще начнём с этого ... большой текст свёрнут, показать
     
     
  • 13.111, Vkni (ok), 20:07, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Тем не менее, их эмуляции классов можно было бы сделать на С проще Вместо пре... большой текст свёрнут, показать
     
  • 12.116, Аноним (-), 22:24, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Практика показывает что ненадо чуть менее чем везде ... текст свёрнут, показать
     
  • 11.107, Ordu (ok), 19:49, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ты специально учился где-то демагогии или самоучкой Очень похоже на второе спе... текст свёрнут, показать
     
  • 7.102, Vkni (ok), 17:55, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Рекоммендую к прочтению код какого-нибудь авторитетного проекта с 10 летним возрастом.
    > openssl например, или ffmpeg. Вы там найдёте всё: ООП, шаблоны, фабричные
    > функции, и многое другое.

    Если держать себя в руках, то на ООП на С++ получится лучше, т.к. не надо вручную возиться с vptr/vtable. Другое дело, что от обилия возможностей у многих в руках начинает свербить.

     
     
  • 8.104, pripolz (?), 19:21, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    1 то, что ты называешь возможностями я называю ограничениями 2 Пример очень п... большой текст свёрнут, показать
     
     
  • 9.112, Vkni (ok), 20:09, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Вот конкретно здесь мы его неоднократно поднимали с CrazyАлексом, arisu и д р С... текст свёрнут, показать
     
  • 4.39, _ (??), 18:16, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Опыи фортрана, лиспа, кобола и кучи других - выкинули?
    Ну в таком ключе С++ тоже выкинут.


    И кстати, то как ты это описал - это не профессия, это - религия.

     
     
  • 5.42, Ordu (ok), 18:54, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Я не совсем понял к чему это Но опыт фортрана, лиспа, кобола и кучи других непр... большой текст свёрнут, показать
     
     
  • 6.44, yet another anonymous (?), 19:13, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > ... Но опыт фортрана, лиспа, кобола
    > и кучи других неприменим непосредственно в C++. Этот опыт надо переосмыслить,
    > надо попробовать его привнести в C++ и так, и эдак, надо
    > почистить этот опыт от того, что не нужно в C++. А
    > после этого опыт фортрана, лиспа, кобола и кучи других станет опытом
    > C++.

    Да, Степанов свои идеи сначала на Lisp'е реализовывал. C++ как мультипарадигменный язык подошёл лучше.

     
  • 4.47, Аноним (-), 20:22, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Литература, обобщающая опыт всех тех тысяч (или десятков/сотен
    > тысяч) программистов, которые писали на C++,

    Можно пару-тройку ссылок на литературу (хотя хватит и имен/названий, отсутсвие перевода не помеха) "как писать на современных плюсах"?
    А то ведь графоманов-любителей много, без опыта нарвешься на какой нибудь "шыдевр", от которого у тех, кто в теме, волосы на *опе дыбом становятся.

     
     
  • 5.50, Crazy Alex (ok), 21:31, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Из того, что я видел - лучше всего именно гайд под редакцией Страуструпа/Саттера на https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md. В C++ Faq также есть и рекомендуемые книги причём разные варианты с учётом бэкграунда. Ну и Мейерс, "Effective Modern C++".
     
     
  • 6.55, Аноним (-), 22:00, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Благодарю. Будем посмотреть.
     
  • 5.56, Ordu (ok), 22:09, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Можно пару-тройку ссылок на литературу (хотя хватит и имен/названий, отсутсвие перевода
    > не помеха) "как писать на современных плюсах"?
    > А то ведь графоманов-любителей много, без опыта нарвешься на какой нибудь "шыдевр",
    > от которого у тех, кто в теме, волосы на *опе дыбом
    > становятся.

    Мейерс. http://shop.oreilly.com/product/0636920033707.do

     
  • 5.65, Аноним (-), 23:19, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Очень рекомендую к просмотру, т.к. без нормальной критики вы не поймете язык полностью: https://flyx.org/2014/04/24/cpp_sucks/


     
     
  • 6.67, Crazy Alex (ok), 01:24, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Как бы наоборот. Для того, кто не поварился в плюсах с пол-года хотя бы этот текст - бессмысленный набор слов. А вот потом можно и поглядеть. Правда, тогда будет понятно, что это всё либо чушь, либо мелочные придирки - а так не интересно.
     
  • 6.72, Vkni (ok), 03:58, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Очень рекомендую к просмотру, т.к. без нормальной критики вы не поймете язык
    > полностью: https://flyx.org/2014/04/24/cpp_sucks/

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

     
     
  • 7.75, Аноним (-), 04:21, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Согласен и поэтому автор предусмотрительно написал

    > Disclaimer: This list is not and will never be complete (but I may update it if I'm bored). It also contains strong language.

     
  • 4.73, Vkni (ok), 04:02, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Нет, это не он загнул. Просто кто-то отстал от развития практик применения
    > C++ лет на десять.

    Лучшая практика применения современного C++ - это "можешь на нём не писать - не пиши".

    > под предлогами вида "мне синтаксис не нравится"?

    Синтаксис - это, вообще-то, первое, что видно в программе. Ну зачем же сразу в дерьмо читателя макать со всеми std::...? И это, надо сказать, подход boost'a.

     
     
  • 5.83, Ordu (ok), 12:33, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    >> под предлогами вида "мне синтаксис не нравится"?
    > Синтаксис - это, вообще-то, первое, что видно в программе.

    И чё с того? Ты в курсе что предпочтения в эргономике тренируются? Они не просто приобретённые, они приобретаемые. Разговоры про на вкус и цвет разные фломастеры -- это разговоры неудачников. Научиться видеть C++ код как красивый не сложнее, чем научиться им пользоваться. Даже если этот код видится тебе уродливым. Отказываться от инструмента потому, что тебе не нравится его внешний вид -- это очень странно. Можно отказываться потому, что инструмент не подходит для круга решаемых задач. Могут быть другие разумные причины. Но отказываться исходя сугубо из личных предпочтений, не связанных с тем, насколько этот инструмент полезный -- это очень странно.

     
     
  • 6.93, Vkni (ok), 16:43, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Научиться видеть C++ код как красивый не сложнее, чем научиться им пользоваться.

    Зачем нужно видеть красоту в примерах из boost'а, где в глазах просто рябит от символов <, >, ::, {} и адового кол-ва подчёркиваний?

    > Отказываться от инструмента потому, что тебе не нравится его внешний вид -- это очень странно.

    Отказываются не по этому, а потому, что язык безумно переусложнён. И поэтому не так хорошо предсказуем, как более простые.

     
     
  • 7.108, Ordu (ok), 19:54, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >> Научиться видеть C++ код как красивый не сложнее, чем научиться им пользоваться.
    > Зачем нужно видеть красоту в примерах из boost'а, где в глазах просто
    > рябит от символов <, >, ::, {} и адового кол-ва подчёркиваний?

    Для того, чтобы использовать C++ максимально эффективно.

    >> Отказываться от инструмента потому, что тебе не нравится его внешний вид -- это очень странно.
    > Отказываются не по этому, а потому, что язык безумно переусложнён. И поэтому
    > не так хорошо предсказуем, как более простые.

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

     
     
  • 8.113, Vkni (ok), 20:16, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Кто это вам сказал Это потому, что вы не хотите видеть другие причины С другой... текст свёрнут, показать
     
     
  • 9.114, Ordu (ok), 20:58, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Опыт десятков и сотен тысяч программистов, которые писали на C в различных сти... большой текст свёрнут, показать
     
     
  • 10.115, Vkni (ok), 21:57, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Я совершенно не уверен в том, что статистика наведена правильно Вообще, руковод... большой текст свёрнут, показать
     
     
  • 11.120, Ordu (ok), 23:43, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Да, это заговор ZOG Они подтасовывают данные, пишут лжеруководства и вообще вво... большой текст свёрнут, показать
     
     
  • 12.122, Vkni (ok), 00:09, 09/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Это не заговор Просто некоторые люди варятся в одном и том же добре уже довольн... большой текст свёрнут, показать
     
     
  • 13.123, Ordu (ok), 01:14, 09/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А Ну да Наконец-то всем на радость Мы теперь нашли слова такие Те что лучше о... большой текст свёрнут, показать
     
     
  • 14.125, Vkni (ok), 01:57, 09/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Конечно, import uses open значительно лучше Они ведь подразумевают развитую сис... текст свёрнут, показать
     
     
  • 15.138, Ordu (ok), 14:04, 09/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Видимо, опыт опыту рознь ... текст свёрнут, показать
     
     
  • 16.141, Vkni (ok), 16:22, 09/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Разумеется - я и другие языки знаю ... текст свёрнут, показать
     
  • 15.148, yet another anonymous (?), 11:35, 10/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Превед, GOLD ... текст свёрнут, показать
     
     
  • 16.162, Vkni (ok), 07:45, 12/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    С этой точки зрения разницы между ld и ld gold нет Одна, в целом, фигня ... текст свёрнут, показать
     
  • 4.84, pripolz (?), 12:50, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    >[оверквотинг удален]
    > код, по сравнению с кодом всяких хипстеров, которые городят темплит на
    > темплите. Но, когда я вижу такого рода людей сегодня, вообще не
    > знаю, что думать. Сейчас же есть литература, которая объясняет, что в
    > C++ есть, как это следует использовать, и почему именно так, а
    > не как-нибудь иначе. Литература, обобщающая опыт всех тех тысяч (или десятков/сотен
    > тысяч) программистов, которые писали на C++, которые читали чужой код, которые
    > занимались рефакторингом кода, поддержкой его, которые много думали о том как
    > лучше писать, которые экспериментировали с C++ с момента его появления. И
    > вот так брать и выкидывать этот опыт в окно с формулировкой
    > "мне синтаксис не нравится"... Вон из профессии, ничтожество.

    Ещё через 5 лет стиль ещё сильнее "отточится" на +200 страниц к стандарту. И выйдет ещё литература, объясняющая новые костыли проблемами старых.

    Сейчас я тебе кое-что покажу:
    Вот класс - это изначально структура данных + набор методов с ней. В с++ структура и методы принудительно жёстко связаны. А если я захочу написать один метод для 3х классов? А если я захочу подгрузить метод из динамически загруженной либы, которую пользователь выбрал где-то? Это уже проблема архитектуры языка. Приятного времяпрепровождения в профессии.

     
     
  • 5.86, Ordu (ok), 14:05, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Ещё через 5 лет стиль ещё сильнее "отточится" на +200 страниц к стандарту. И выйдет ещё литература, объясняющая новые костыли проблемами старых.

    Да. Программирование не стоит на месте, развивается. Методов всё больше. Какой кошмар.

    > Сейчас я тебе кое-что покажу:
    > Вот класс - это изначально структура данных + набор методов с ней.
    > В с++ структура и методы принудительно жёстко связаны. А если я
    > захочу написать один метод для 3х классов?

    Если ты захочешь, то это значит что ты неудачник. Либо тебе досталась уродская задача, либо ты выбрал не тот подход к её решению. Если у тебя есть три аргумента, каждый из которых является дочерним от класса A, и таких дочерних классов у A три штуки -- B, C, D, то тебе придётся писать 3^3 реализаций методов -- (B, B, B), (B, B, C) (C, D, B), (C, C, D), и так далее. 27 долбаных функций. Если ты добавишь к A ещё один дочерний класс, то количество методов скакнёт до 64. Поверь мне, ты повесишся раньше, чем допишешь эту программу. Причём вне зависимости от выбранного языка: этот заморочный диспатч можно сделать хоть на ассемблере, проблем-то? Но вот степенная зависимость количества реализаций методов от количества типов -- это убийственно.

     
     
  • 6.89, pripolz (?), 14:32, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Да. Программирование не стоит на месте, развивается. Методов всё больше. Какой кошмар.

    программирование стоит на месте. Хорошие программы, взрывающие мозг - это bash, qemu, openvpn. Там поставлена интересная абстрактная задача. Сегодня "революцией" называют docker. Это просто смешно.

    > Если ты захочешь, то это значит что ты неудачник. Либо тебе досталась
    > уродская задача, либо ты выбрал не тот подход к её решению.

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


    > Если у тебя есть три аргумента, каждый из которых является дочерним
    > от класса A, и таких дочерних классов у A три штуки
    > -- B, C, D, то тебе придётся писать 3^3 реализаций методов
    > -- (B, B, B), (B, B, C) (C, D, B), (C,
    > C, D), и так далее. 27 долбаных функций. Если ты добавишь
    > к A ещё один дочерний класс, то количество методов скакнёт до
    > 64.

    Намёк не понят. Хочешь наследование - положи структуру в структуру.


     
     
  • 7.96, Vkni (ok), 17:20, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > программирование стоит на месте.

    Очень, очень костная штука. Хиндли-милнер, несчастный, был открыт за 20 (двадцать) лет до возникновения шаблонов в С++.

     
  • 7.106, Ordu (ok), 19:32, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Если тебе так кажется, то разуй глаза и посмотри по сторонам Даже алгоритмы сор... большой текст свёрнут, показать
     
     
  • 8.109, Vkni (ok), 19:57, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Ага Потому, что формулы разные По крайней мере для евклидовой метрики ... текст свёрнут, показать
     
  • 8.132, pripolz (?), 04:53, 09/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Именно так, совершенно непонятно При чём тут принудительная связь между данными... текст свёрнут, показать
     
     
  • 9.134, Vkni (ok), 05:55, 09/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    В C это можно сделать разными методами и использовать ООП совершенно не обязат... текст свёрнут, показать
     
     
  • 10.137, pripolz (?), 11:11, 09/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    а в рантайме такой темплейт подхватит заранее неизвестный тип фигуры ... текст свёрнут, показать
     
     
  • 11.142, Vkni (ok), 16:39, 09/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Нет, конечно Но основная проблема тут не в языке, а в предметной области - у ва... текст свёрнут, показать
     
  • 9.139, Ordu (ok), 14:50, 09/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ты путаешь каноны ООП с канонами C Современный C не любит наследование и с ... большой текст свёрнут, показать
     
     
  • 10.143, Аноним (-), 18:26, 09/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Очередная порция словесного поноса ... текст свёрнут, показать
     
  • 10.144, pripolz (?), 23:33, 09/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Исключительно забавное заявление Во первых потому, что ООП - это шаблон проект... текст свёрнут, показать
     
     
  • 11.150, Vkni (ok), 14:59, 10/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Окститесь, 20 лет прошло с тех пор ... текст свёрнут, показать
     
     
  • 12.151, pripolz (?), 18:24, 10/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    То есть, современный С не просто не любит наследование, а ДАВНО не любит насле... текст свёрнут, показать
     
     
  • 13.152, yet another anonymous (?), 20:06, 10/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ещё более забавно См Elements of Programming by A Stepanov ... текст свёрнут, показать
     
  • 13.153, Vkni (ok), 03:05, 11/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Хуже - ОЧЕНЬ ДАВНО не любит наследование Если бы не Степанов с STL, а дальше Ал... текст свёрнут, показать
     
     
  • 14.154, pripolz (?), 12:14, 11/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    А шаблоны, несмотря на ряд косяков синтаксис, отсутствие раздельной компиляции ... большой текст свёрнут, показать
     
     
  • 15.155, Vkni (ok), 12:21, 11/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Во-первых, нет Он понятен только до определённого момента - пара ступеней вложе... текст свёрнут, показать
     
     
  • 16.156, pripolz (?), 13:30, 11/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Ни разу в жизни не сталкивался Вообще шаблоны - большая редкость Применение ша... текст свёрнут, показать
     
     
  • 17.157, anonymous (??), 14:01, 11/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    В каком чудном мире вы живете PS Это же вы где-то в этой теме сказали, что про... текст свёрнут, показать
     
     
  • 18.158, pripolz (?), 14:25, 11/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Было преувеличение Если по порядку, то Dark Basic, Visual Basic 98 VB6 , Free ... текст свёрнут, показать
     
     
  • 19.161, Vkni (ok), 02:25, 12/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Ну почти всё закрыто Не хватает JavaScript а, языков семейства ML и Пролога ... текст свёрнут, показать
     
  • 19.163, anonymous yet another (?), 08:29, 12/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Дневник молодого поэта Всю ночь писал стихи о любви Закрыл тему ... текст свёрнут, показать
     
  • 14.160, anonymous yet another (?), 23:06, 11/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    А вот это уже мешки синтаксического сахара Так и до диабета недалеко ... текст свёрнут, показать
     
  • 9.149, Анонимный Алкоголик (??), 11:48, 10/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Вы не поняли Речь была о том, что в языке вам не хватает средства выразить неки... текст свёрнут, показать
     
  • 5.118, Vkni (ok), 22:28, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Вот класс - это изначально структура данных + набор методов с ней.
    > В с++ структура и методы принудительно жёстко связаны. А если я
    > захочу написать один метод для 3х классов?

    Haskell, классы типов и т.д.

    instance Show Double where
        show d = ...

    Проблема в том, что даже с ними хочется большей гибкости. Например, определить два разных вариантов печати числа.

     
  • 5.147, Анонимный Алкоголик (??), 11:12, 10/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > А если я захочу написать один метод для 3х классов?

    :-) Когда захотите, изложите как полагается. Выдающееся может получиться желание.
    Потому что пока это выглядит довольно бессмысленно. "один метод для 3х классов". Поэтому вряд ли вы сможете таки захотеть...

     
  • 4.146, Анонимный Алкоголик (??), 10:39, 10/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    >Вон из профессии, ничтожество.

    Совершенно верно. Вон. Наплодилось вас, проталкивателей "стилей"...
    Норовящих пояснить о плохой практике массивов... :-)

     

     ....большая нить свёрнута, показать (82)

  • 1.16, Игорь (??), 13:56, 07/07/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Полезно, спасибо!
     
  • 1.27, manster (ok), 15:45, 07/07/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    И все таки почему например chromium начинает притормаживать, захлебываться и с трудом возвращать память при открытии ~+10 вкладок.
     
     
  • 2.40, _ (??), 18:18, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Потому что по сложности современный браузеры вплотную приблизились к операционным системам (С)  ?
     
     
  • 3.46, Аноним (-), 20:21, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Абсолютная чушь. Вдумайся в значение слова "браузер" (что означает обозреватель) и ты поймешь что даже до офисного редактора браузер не подошел. В офисном редакторе кроме проигрывания медиа можно например редактировать БД.
     
     
  • 4.48, anomymous (?), 21:17, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Ойййй. Для начала хотелось бы посмотреть на полноценную динамику в "офисном редакторе". С возможностью загрузки кусков текста и перехода к другим документам. А там подумаем.
     
     
  • 5.63, Аноним (-), 23:02, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Вы кроме WordPad что-нибудь встречали?
     
  • 4.49, Соня (??), 21:24, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Тем не менее вся эта webня выглядит ужасающе сложно. Даже потрясающе сложно для просмоторщика документов со скриптами. Я бы не смог реализовать весь "стандарт"
     
     
  • 5.64, Аноним (-), 23:06, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Это для вас лично. Скрипты - это вообще огромный туnой костыль. В целом там ничего сложного, просто объем.
    Примерно сложного: аллокатор памяти в операционной системе.
     
     
  • 6.78, angra (ok), 09:01, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Тебя совсем не смущает, что аллокаторы памяти были созданы для многих десятков ОС и справляются с этой задачей студенты одиночки, а вот полноценных браузерных движков меньше десятка за всё время получилось?
     
     
  • 7.95, Аноним (-), 17:13, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Столь дилетантская попытка сравнения позорна для технического ресурса. Вы дейтвительно думаете что браузерный движок это сложно? - Это очень объемно, но не сложно.
     
     
  • 8.159, Соня (??), 19:19, 11/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Много всего что по отдельности не сложно, но со странным поведением и так далее,... текст свёрнут, показать
     
  • 2.51, Crazy Alex (ok), 21:36, 07/07/2017 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Потому что современные "браузеры" - безумная попытка сделать рантайм для GUI-приложений из того, что для этого не предназначено в принципе, причём с десятком одновременно реализованных моделей лайаута и логикой на динамическом языке. Кадавр получился - мама не горюй. То, что это вообще как-то ворочается - чудо само по себе.
     
     
  • 3.70, manster (ok), 03:04, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Нет, с пару тройкой вкладок все относительно хорошо :)

    Проблемы начинаются когда некоторые сайты пытаются искать flash-player для прокрутки рекламы, которого давно нет (отключал явным образом из chromium, до этого тормоза были еще больше) ...

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2020 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру