Could Herb Sutter’s call to action for C++ safety be acheived soon?

Recently, Herb Sutter wrote an excellent article on C++ safety. He discussed numerous ideas, but I’ll provide a summary of his perspective on what can be done in the medium term to enhance C++ safety.

In C++, by default enforce …(A) Solution for new/updated code (can require code changes — no link/binary changes)(B) Solution for existing code (requires recompile only — no manual code changes, no link/binary changes)
Type safetyBan all inherently unsafe casts and conversionsMake unsafe casts and conversions with a safe alternative do the safe thing
Bounds safetyBan pointer arithmetic Ban unchecked iterator arithmeticCheck in-bounds for all allowed iterator arithmetic Check in-bounds for all subscript operations
Initialization safetyRequire all variables to be initialized (either at declaration, or before first use)
Lifetime safetyStatically diagnose many common pointer/iterator lifetime error casesCheck not-null for all pointer dereferences
Less undefined behaviorStatically diagnose known UB/bug cases, to error on actual bugs in existing code with just a recompile and zero false positives:
Ban mathematically invalid comparison chains
(add additional cases from UB Annex review)
Automatically fix known UB/bug cases, to make current bugs in existing code be actually correct with just a recompile and zero false positives:
Define mathematically valid comparison chains
Default return *this; for C assignment operators that return C&
(add additional cases from UB Annex review)

But what are the current possibilities for achieving this goal?

Continue reading “Could Herb Sutter’s call to action for C++ safety be acheived soon?”

Try to understand the motivations behind the new C++ features to use them better when needed.

In the world of software development, languages evolve over time to improve efficiency, usability, and performance. C++ is not an exception. Understanding why a feature is added can significantly enhance how developers use it, leading to better, more maintainable code.

For C++ developers who have not yet mastered the new C++ features, it’s recommended to understand at least one key motivation behind each feature. This way, when a specific need arises, the developer can identify which feature might be useful and then delve deeper into learning how to implement it.

Here are the motivations behind some new C++ features:

Continue reading “Try to understand the motivations behind the new C++ features to use them better when needed.”

Back 60 years ago marked the rise of the ancestor of C/C++, thanks to Martin Richards.

Do you know with which programming language this code is written:

// Hello world demo
get "streams.d"
external
[
Ws
]

let Main() be
[
Ws("Hello World!*N")
]

It’s the BCPL programming language . BCPL (Basic Combined Programming Language) is a foundational language in the history of programming languages. Developed by Martin Richards in 1966, BCPL’s simplicity, typeless nature, and portability were key features that influenced the design of many subsequent languages, including B and C. Its impact is particularly notable in the development of system software and compilers, making it a critical step in the evolution of programming languages.

Continue reading “Back 60 years ago marked the rise of the ancestor of C/C++, thanks to Martin Richards.”

C++26 is coming, but what are the major features that have been added to C++ since C++11?

Modern C++ has seen a series of significant updates starting from C++11, each bringing new features and enhancements that aim to make the language more efficient, readable, and maintainable. Here’s a brief overview of the major features introduced in each version since C++11, along with a comment on their usage:

C++11

C++11 marked a significant evolution in the C++ language, introducing several powerful features that modernized and simplified C++ programming. Here are some of the most impactful features, along with examples to illustrate their usage:

Continue reading “C++26 is coming, but what are the major features that have been added to C++ since C++11?”

To developers who heavily rely on AI for generating C++ code. Be careful.

AI-driven code generation has become an increasingly important aspect of software development, leveraging advanced models to write, optimize, and understand code. However, AI is not intended to replace developers but rather to aid them in their tasks. Ultimately, it is up to humans to determine how to utilize AI suggestions. Let’s consider this query we posed to GPT-4o:

give me a c++ functon to add 2 big integers

Here’s the answer:

Continue reading “To developers who heavily rely on AI for generating C++ code. Be careful.”

Why should you consider using the C++ POCO library?

The POCO C++ Libraries (POCO stands for “Portable Components”) is a collection of open-source C++ class libraries that simplify and accelerate the development of network-centric, portable applications in C++. These libraries provide a wealth of features, ranging from HTTP and HTTPS clients and servers, to XML parsing, to data encryption, to threading support, and much more.

We’ve relied on the POCO library for over 15 years to verify whether CppDepend accurately evaluates well-implemented projects. Therefore, this assessment is not drawn from a fleeting encounter with the library but from a thorough analysis of its many versions over the past 15 years.

Continue reading “Why should you consider using the C++ POCO library?”

Even the White House wants you to abandon C and C++, It’s time to focus on C++ safety and join the Bjarne initiative.

The C and C++ languages are no longer favored by the highest American authorities. Indeed, the White House wishes for developers to use memory-safe languages. In this report published on Monday, the Office of the National Cyber Director (ONCD) of the White House invites developers to reduce the risk of cyberattacks by using languages without memory vulnerabilities. IT companies “can prevent the introduction of multiple vulnerabilities into the digital ecosystem by adopting secure languages,” the presidency said in a statement. It refers to those that are protected against buffer overflow, out-of-bounds reads, and memory leaks.

Continue reading “Even the White House wants you to abandon C and C++, It’s time to focus on C++ safety and join the Bjarne initiative.”

CppDepend 2024.1 has been released! And, it’s available for free for personal use.

CppDepend 2024.1 has just been released and it’s completely free for personal use!

Our development team at CppDepend has been diligently working to incorporate incredible features, further enhancing CppDepend’s capabilities as a tool for understanding, reviewing, and improving your code base.

Check out the new features included in this significant release, version 2024.1:

Continue reading “CppDepend 2024.1 has been released! And, it’s available for free for personal use.”

The Must-Have Solution for C, C++, and Java Developers

CppDepend for C/C++ and JArchitect for Java are powerful software tools that offer a wide range of features to help C, C++, and Java developers create high-quality code.

Don’t wait – take advantage of these valuable tools and start improving your code base today!

Continue reading “The Must-Have Solution for C, C++, and Java Developers”