LINUX.ORG.RU

Опубликованы C++ Core Guidelines

 ,


10

8

Бьерн Страуструп и Герб Саттер опубликовали в открытом доступе объемный документ, содержащий основные принципы разработки на современном С++. Авторы надеются, что следование данным принципам позволит разработчикам эффективно использовать язык и писать безопасный и поддерживаемый код.

C++ Core Guidelines: https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md/

Ответ на: комментарий от SystemD-hater

твой демон не сумеет в прерывания, например, равно как и таблицы станиц... так что мимо

anonymous
()
Ответ на: комментарий от ozkriff

они серьезно решили ржавчину косплеить

Пока компилятор не будет контролировать используемое подмножество фич - толка не будет.

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

из недавних OSv, козлик ты наш

Ничего не имею против Си++, но OSv - это не ядро, а ядрышко :)

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Пока компилятор не будет контролировать используемое подмножество фич - толка не будет.

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

ozkriff
()

За две недели инструкция по «мертвому» C++ успела набрать больше звезд чем перспективный Rust за пару лет.

anonymous
()
Ответ на: комментарий от ozkriff

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

Так пока нет этого анализатора нет возможности сказать, что он из себя представляет. Может что-то на базе clang-а и тогда включение его в clang будет делом времени. А может это вообще будет частью Clang Static Analyzer.

eao197 ★★★★★
()
Ответ на: комментарий от anonymous

За две недели инструкция по «мертвому» C++ успела набрать больше звезд чем перспективный Rust за пару лет.

Разве? 6,232 против 13,498 у ржавчины.

«мертвому»

Чертовы зомби

ozkriff
()
Ответ на: комментарий от eao197

Да, думаю много кому интересно этот их анализатор пощупать поскорее.

ozkriff
()
Ответ на: комментарий от tailgunner

Не, плюсам точно не капец.

Лопнут же, нельзя бесконечно вбирать в себя языки)

А вот Rust - может быть.

Да, интересно, как это на мнении людей о ржавчине скажется. Если плюсы научатся части вещей из ржавчины, то ржавчина вроде как и меньше нужна становится. А с другой стороны главные плюсоводы признают правильность и перспективность подхода ржавчины.

ozkriff
()
Ответ на: комментарий от ozkriff

Лопнут же, нельзя бесконечно вбирать в себя языки)

Нельзя каждые 10 лет изобретать новый язык. А вот эволюционировать можно и нужно.

asaw ★★★★★
()
Ответ на: комментарий от ozkriff

А с другой стороны главные плюсоводы признают правильность и перспективность подхода ржавчины.

Это где?

eao197 ★★★★★
()
Ответ на: комментарий от asaw

Лопнут же, нельзя бесконечно вбирать в себя языки)

Нельзя каждые 10 лет изобретать новый язык.

«Within C++, there is a much smaller and cleaner language, struggling to get out» (ц) Страуструп

А вот эволюционировать можно и нужно.

Только в результате приходится объяснять, как писать программы, не используя 80% возможностей языка.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Только в результате приходится объяснять, как писать программы, не используя 80% возможностей языка.

Да ничего не надо будет особо объяснять. Думаю, это просто интегрируют в инструментарий. Лично я уже лет 5 назад думал, что очень хорошо было бы иметь некие «профили» компиляции в компиляторе. Хочешь писать школьное приложение - выбираешь самый безопасный профиль. Нужна интеграция с сями и возможность проделывать разные низкоуровневые финты - выбираешь «полный» профиль, который открывает тебе всё.

asaw ★★★★★
()
Ответ на: комментарий от asaw

Нельзя каждые 10 лет изобретать новый язык

А каждые 15 можно? Или какая должна быть периодичность? )

Да и что это вообще значит? Языки-то каждый день новые делают. Нельзя надеяться, что чаще этого периода в индустрии буду значительные подвижки популярности основных языков?

А вот эволюционировать можно и нужно.

Тут должен быть стандартный комментарий про необходимость время от времени ломать обратную совместимость и бла бла бла, но лениво.

ozkriff
()
Ответ на: комментарий от eao197

А с другой стороны главные плюсоводы признают правильность и перспективность подхода ржавчины.

Это где?

Тем что сделали что-то очень напоминающее попытку впихнуть ржавчину в рамки обратной совместимости с плюсами.

ozkriff
()
Ответ на: комментарий от asaw

Только в результате приходится объяснять, как писать программы, не используя 80% возможностей языка.

Да ничего не надо будет особо объяснять

Почитай хедпост.

Думаю, это просто интегрируют в инструментарий.

Может быть когда-нибудь.

tailgunner ★★★★★
()
Ответ на: комментарий от ozkriff

А каждые 15 можно? Или какая должна быть периодичность? )

Не должно быть периодичности. Если изобретать, то изобретать нужно что-то действительно принципиально новое. А то, что можно использовать для улучшения имеющегося, нужно для этого и использовать.

Тут должен быть стандартный комментарий про необходимость время от времени ломать обратную совместимость и бла бла бла, но лениво.

Ну так ломают, да.

asaw ★★★★★
()
Ответ на: комментарий от asaw

Ты Страуструпа послушай.

«Smaller, cleaner language».

Ну и что?

Результат эволюции в понимании Си++.

Это всегда так будет

В Си, Java, Python такого нет.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

В Си, Java, Python такого нет.

Есть, но в меньшей степени.

anonymous
()
Ответ на: комментарий от tailgunner

В Си, Java, Python такого нет.

В Си точно есть, в джаве тоже (хотя, последнее время стало популярным считать, что джава кончилась), про питон не знаю - не слежу, но если версии выходят, то это значит, что эволюция идет. Как остановится - язык можно считать мертвым.

asaw ★★★★★
()
Ответ на: комментарий от ozkriff

Тем что сделали что-то очень напоминающее попытку впихнуть ржавчину в рамки обратной совместимости с плюсами.

Ничего не понял. Где главные плюсоводы признают правильность подхода Rust? И где сделали эту самую попытку: в плюсах или в Rust?

eao197 ★★★★★
()
Ответ на: комментарий от asaw

В Си, Java, Python такого нет.

В Си точно есть

Вау. Приведи пример.

но если версии выходят, то это значит, что эволюция идет

А не все языки эволюционируют до такой степени, что из них пытается вылезти новый язык.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)

hpsutter> Seriously, before I did this design I deliberately didn't look at Rust (other than hearing the word «borrowing») or Cyclone or CCured or other efforts, because I wanted to maintain my fresh perspective of the problem

Гы, лошара.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Вау. Приведи пример.

Анонимные структуры, удаление gets() из стандартной библиотеки, динамические массивы можно туда же записать.

А не все языки эволюционируют до такой степени, что из них пытается вылезти новый язык.

Ну это только им в минус.

asaw ★★★★★
()
Последнее исправление: asaw (всего исправлений: 1)
Ответ на: комментарий от asaw

Анонимные структуры

динамические массивы можно туда же записать

И это - новый язык? double_facepalm.jpg

удаление gets() из стандартной библиотеки

Вообще не в тему.

tailgunner ★★★★★
()
Ответ на: комментарий от eao197

Где главные плюсоводы признают правильность подхода Rust?

https://github.com/isocpp/CppCoreGuidelines/blob/master/docs/Lifetimes I and ...

Они считают, что лайфтаймы полезны для тамнаписаночего. Rust уже реализовал лайфтаймы.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

И это - новый язык? double_facepalm.jpg

Ну вообще-то да, это тоже про «Smaller, cleaner language».

Вообще не в тему.

То есть по-твоему стандартная библиотека к языку не относится, так что ли?

asaw ★★★★★
()
Ответ на: комментарий от anonymous

На си можно писать код. Красиво, улыбаясь так писать и наслаждаться. Код будет работать быстро. На плюсах можно рисовать закарючки богу закорючек, делать 100500 конструкторов и копи и мув конструкторов, а еще 2-3 деструктора с исключениями, потом перечитать стауструпа глав так 20 чтобы вспомнить как оно там все должно быть и не забыть таблицу виртуальных функций составить. Когда все сделал, надо еще переопределить оператор скобочка. Это чтоб никто не догадался, что именно ты понимаешь, когда пишешь скобочку. Тоже самое лучше сделать с '=', желательно в каждом классе. Потом можно выдохнуть, посмотреть на часы и не уходит домой, потому что 5 утра.

unt1tled ★★★★
()
Ответ на: комментарий от tailgunner

А не все языки эволюционируют до такой степени, что из них пытается вылезти новый язык.

Например, вышеупомянутый Python в версии 3.5 - это уже новый язык по сравнению с первыми версиями. Плюс в Python поломали совместимость куда больше чем в С++. Но Гвидо не озвучил это, и вот для тебя Python уже контрпример стабильности для С++.

anonymous
()
Ответ на: комментарий от asaw

И это - новый язык? double_facepalm.jpg

Ну вообще-то да, это тоже про «Smaller, cleaner language».

Это даже близко не тянет на новый язык.

То есть по-твоему стандартная библиотека к языку не относится, так что ли?

Стандартная библиотека не является частью языка. Более того - язык замечательно применяется без стандартной библиотеки.

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

Например, вышеупомянутый Python в версии 3.5 - это уже новый язык по сравнению с первыми версиями.

Здесь нужно было привести какой-нибудь пример.

Плюс в Python поломали совместимость куда больше чем в С++

Это ничего не значит.

Но Гвидо не озвучил это, и вот для тебя Python уже контрпример стабильности для С++

Я не подаю по вторникам.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Там слишком большой документ, чтобы быстро его просмотреть. Сходу обнаружилось вот что:

«Rust borrowing is part of a more general attempt to deeply enforce strong object ownership semantics pervasively, including with a number of built-in pointer types; instead, our design is a simpler feature focused on eliminating leaks and dangling only, while enabling similar pointer types (including the std:: smart pointers with little or no modification) to still be built as libraries. Also, Rust chooses to treat the creation of a dangling pointer as an error; this seems too restrictive, especially because reusing pointer/iterator local variables is common and easy to make safe, so we feel that for local variables it is sufficient to diagnose only attempts to read (including dereference, copy from, and compare) dangling pointers.»

Т.е. явное указание того, что в Rust-е перемудрили и что можно сделать проще, причем за счет библиотек, а не модификации языка.

eao197 ★★★★★
()
Ответ на: комментарий от tailgunner

Это даже близко не тянет на новый язык.

Ну это всего-лишь твоё оценочное суждение.

Стандартная библиотека не является частью языка. Более того - язык замечательно применяется без стандартной библиотеки.

Это тоже твоё оценочное суждение. Стандартная библиотека является частью стандарта языка.

asaw ★★★★★
()
Ответ на: комментарий от eao197

Т.е. явное указание того, что в Rust-е перемудрили

Ну, судя по вышеприведенной цитате, Саттер пока что мало знает о Rust, чтобы судить. Но в любом случае, подход «использование лайфтаймов» Саттер признал правильным, а это подход Rust (не только Rust, конечно).

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Здесь нужно было привести какой-нибудь пример.

Открываем changelog последней минорной версии:

New syntax features:

    PEP 492, coroutines with async and await syntax.
    PEP 465, a new matrix multiplication operator: a @ b.
    PEP 448, additional unpacking generalizations.

...

Ну или сразу смотри разницу между вторым и третьим, например.

Это ничего не значит.

Конечно. Ломка языка и добавление нового в него не имеют никакого отношения к теме.

Я не подаю по вторникам.

Да, по вторникам ты просто тупишь.

anonymous
()
Ответ на: комментарий от asaw

Ну это всего-лишь твоё оценочное суждение.

Конечно. И у Страуструпа тоже оценочное суждение. Только вот это суждение было озвучено только несколько лет назад. А это значит, что за первые 20 лет развития Си++ нового языка в нем не появилось - при том, что изменений было гораздо больше, чем за все годы развития Си.

Стандартная библиотека является частью стандарта языка.

«A conforming freestanding implementation shall accept any strictly conforming program in which the use of the features specified in the library clause (clause 7) is confined to the contents of the standard headers <float.h>, <iso646.h>,<limits.h>, <stdalign.h>, <stdarg.h>, <stdbool.h>, <stddef.h>, <stdint.h>, and <stdnoreturn.h>»

Так что нет.

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

Ломка языка и добавление нового в него не имеют никакого отношения к теме.

Начинаешь понимать.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Но в любом случае, подход «использование лайфтаймов» Саттер признал правильным

Цитату, плиз, а то ведь лайфтаймы используются в C++ с тех самых пор, как появилась идиома RAII, если не раньше.

eao197 ★★★★★
()
Ответ на: комментарий от eao197

Цитату, плиз, а то ведь лайфтаймы используются в C++ с тех самых пор, как появилась идиома RAII, если не раньше.

Я выше привел цитату Саттера со словами «I did design» - очевидно, он считает, что раньше лайфтаймов не было. А насчет RAII - если использовать термин lifetime так свободно, то lifetime-ы появились еще в Algol 68 или там BCPL.

tailgunner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.