Need advice about which tool to choose?Ask the StackShare community!
Ada vs C++: What are the differences?
Introduction
Ada and C++ are both programming languages that are widely used for various applications. While they have some similarities, there are also key differences between the two languages in terms of syntax, features, and intended usage. This Markdown code provides a brief comparison highlighting the main differences between Ada and C++.
Syntax: Ada has a more strict and verbose syntax compared to C++. Ada requires explicitly defining types, and it enforces strict adherence to coding standards. On the other hand, C++ has a more flexible and concise syntax, allowing for more freedom in coding style and conventions.
Memory Management: Ada provides built-in memory management through its garbage collector, which automatically deallocates unused memory. In C++, memory management is typically done manually using operators such as
new
anddelete
, which gives developers more control but also introduces the risk of memory leaks and dangling pointers.Concurrency: Ada has built-in support for tasking and concurrency, making it suitable for developing real-time and embedded systems. It provides constructs for creating and synchronizing tasks, ensuring safe concurrent execution. In contrast, C++ does not have built-in support for concurrency, although it can be achieved using third-party libraries or language extensions.
Exception Handling: Ada has a strong focus on reliability and includes built-in exception handling mechanisms. It allows developers to define their own exception types and specify exception handling procedures. C++ also supports exception handling using
try
,catch
, andthrow
statements, but it does not enforce the strict error handling approach of Ada.Safety and Security: Ada puts a strong emphasis on safety-critical applications and includes language features to ensure program correctness. It enforces strong type checking, bounds checking, and runtime error management. C++, while providing similar features, does not have the same level of built-in safety measures, making it more prone to runtime errors and vulnerabilities.
Standardization: Ada is a standardized language, with the ISO/IEC 8652 standard specifying its syntax and semantics. This ensures a high level of language consistency across different implementations. In contrast, while there are standards and specifications for C++, the language itself allows more flexibility and variations in implementation, leading to potential compatibility issues.
In summary, Ada and C++ differ in syntax strictness, memory management approach, concurrency support, exception handling mechanisms, safety features, and standardization level. These differences make them suitable for different types of applications and development environments.
As a personal research project I wanted to add post-quantum crypto KEM (key encapsulation) algorithms and new symmetric crypto session algorithms to openssh. I found the openssh code and its channel/context management extremely complex.
Concurrently, I was learning Go. It occurred to me that Go's excellent standard library, including crypto libraries, plus its much safer memory model and string/buffer handling would be better suited to a secure remote shell solution. So I started from scratch, writing a clean-room Go-based solution, without regard for ssh compatibility. Interactive and token-based login, secure copy and tunnels.
Of course, it needs a proper security audit for side channel attacks, protocol vulnerabilities and so on -- but I was impressed by how much simpler a client-server application with crypto and complex terminal handling was in Go.
$ sloc openssh-portable Languages Files Code Comment Blank Total CodeLns Total 502 112982 14327 15705 143014 100.0% C 389 105938 13349 14416 133703 93.5% Shell 92 6118 937 1129 8184 5.7% Make 16 468 37 131 636 0.4% AWK 1 363 0 7 370 0.3% C++ 3 79 4 18 101 0.1% Conf 1 16 0 4 20 0.0% $ sloc xs Languages Files Code Comment Blank Total CodeLns Total 34 3658 1231 655 5544 100.0% Go 19 3230 1199 507 4936 89.0% Markdown 2 181 0 76 257 4.6% Make 7 148 4 50 202 3.6% YAML 1 39 0 5 44 0.8% Text 1 30 0 7 37 0.7% Modula 1 16 0 2 18 0.3% Shell 3 14 28 8 50 0.9%
Pros of Ada
Pros of C++
- Performance202
- Control over memory allocation106
- Cross-platform97
- Fast96
- Object oriented84
- Industry standard57
- Smart pointers47
- Templates37
- Gui toolkits16
- Raii16
- Generic programming13
- Control13
- Flexibility13
- Metaprogramming11
- Hardcore9
- Simple5
- Full-fledged containers/collections API5
- Many large libraries5
- Performant multi-paradigm language4
- Large number of Libraries4
- Way too complicated3
- Close to Reality1
- Plenty of useful features1
Sign up to add or upvote prosMake informed product decisions
Cons of Ada
Cons of C++
- Slow compilation8
- Unsafe8
- Over-complicated6
- Fragile ABI6
- No standard/mainstream dependency management5
- Templates mess with compilation units4
- Too low level for most tasks3
- Compile time features are a mess1
- Template metaprogramming is insane1
- Segfaults1
- Unreal engine1