There are a lot of downsides of C++ compared to more modern languages that make it not a great choice if you’re starting a web browser from scratch
Complexity of the language leading to increased bugs and slower development
Manual memory management is error-prone and leads to issues like memory leaks or segmentation faults. Modern browsers need to handle large amounts of dynamic content, making memory management complicated
C++ lacks some of the built-in safety features of more modern languages, which has led to the majority of security vulnerabilities found in major browsers. It’s so bad that Mozilla invented an entirely new programming language just to deal with this
Compared to higher-level languages, C++ can be slower to develop in, which may impact the ability to quickly implement new web standards or features unless you have a massive team
While C++ is cross-platform, ensuring consistent behavior across different operating systems can be more challenging than with some other languages.
Newer languages often provide built-in support for concurrent programming, garbage collection, and other features useful for browser development, which C++ lacks.
So tl;dr: a browser but in C++ will take much longer to develop, have fewer features, more bugs, less concurrency and and more security vulnerabilities
Thanks for laying out your concerns. As a C++ developer who does not know the other languages you speak of (I assume Rust, Go), I can agree to some of your points, but also some of them I see differently:
C++ can be complex, because it has a lot of features and especially the newer standards have brought some syntax that is hard to understand or read at times. However, those elements are not frequently used, or if they are, the developer will get used to them quickly & they won’t make development slow.
As a matter of fact, most development time should be spent on thinking about algorithms, and thinking very well before implementing them - and until implementation, the language does not matter.
I do not think that language complexity leads to increased bugs per se. My biggest project is just short of 40k lines of code, and most of the bugs I produced were the classical “off by one” or missing range checks, bugs that you can just as well produce in other languages.
C++ no longer requires you to do manual memory management - that is what smart pointers are for, and RAII-programming.
I can’t make a qualified comment on that, due to lack of expertise - you might be right.
You’re somewhat repeating point 1) here with slow development. But you raise a good point: web standards have become insane in terms of quantity and interface sizes. Everyone and their dog wants to reinvent the wheel. That in itself requires a very large team to support I would say. As stated for point 1), I do not agree development in C++ has to be slower
True, as someone who just suffered from problems introduced on windows (cygwin POSIX message queues implementation got broken by Win10, and inotify does not work on Windows Subsystem for Linux) I can confirm that while the C++ standard library is not much of a problem, the moment you interface with the host OS, you leave the standard realm and it becomes “zombieland”. Also, for some reason, the realtime library implementation on MacOS is different, breaking some very simple time-based functions. So yeah, that’s annoying to circumvent, but can be done by creating platform specific wrapper libraries that create a uniform API. For other languages, it appears this is done by the compilers, which is probably better - meaning the I/O operations got taken into those language’s core features
I am highly doubtful of people relying on garbage collection - a programmer that doesn’t know exactly when his objects come into existence, and when they cease to exist is likely to make much bigger mistakes and produce very inefficient code. The aforementioned smart pointers in C++ solve this issue: object lifetime is the scope of the smart pointer declaration, and for shared pointers, object lifetime expires when the last process using it leaves the scope in which it is declared.
For concurrent programming, I do not know if you mean concurrency (threads) or multiple people working on the same project.
While multi-threading can be a bit “weird” at first, you have a lot of control over shared variables and memory barriers in C++ that might enable a team to produce a browser that is much faster, which I believe is a core requirement towards modern browsers
As for your tl;dr: definitely not “less concurrency”, that makes no sense. The other points may or may not be true, keeping in mind the answers I gave above.
The language choice was because Ladybird started as a component of SerenityOS, which is also written in C++. With this separation, they are free to gradually introduce other language(s) into the codebase, and maybe eventually replace C++ entirely, piece by piece.
In Hackernews thread about this, the head maintainer mentioned that they have been evaluating several languages already, so we’ll see what the future brings.
In the meantime, let’s try to be mature about it, what do you say?
The dev has 30 years of experience with c++ and a lot of it was on browsers.
He tried to incorporate rust with the help of “JT”, one of the original rust designers/devs and according to Andreas it didn’t work that well due to the web being too objet oriented or something like that. They both worked together (well, mostly “JT”) to create a new safe programming language called “yakt” that transpile to c++, but the project is currently pretty much dead because nobody is really working on it anymore.
The web being too object oriented for rust? Assuming that made sense, who wrote the dang language? If that’s true I’m even less confident they know what they’re doing then I was before.
Using my decades of experience in how programming and compilers works and the fact Mozilla has used it to great effect and how it is being used for parts of the Linux kernel… Yeah just a general statement it doesn’t make any sense.
Maybe they aren’t effective at designing software with the paradigms of the language or they don’t like it but the given explanation doesn’t track.
Reading all of that it sounds mostly like a dev who has spent 20 years doing things the C++ way wasn’t comfortable learning something new. Like basically they’ve been using horrible design patterns that Rust bans because they’re horrible, and instead of learning better approaches they just say Rust is bad
It could be. But then again, he did have the help of a Rust designer/core dev. I believe they even wrote the first iteration of the “Jakt” compiler in Rust before rewriting it in Jakt itself, so Andreas isn’t against using Rust.
Epic fail
Not sure if you are trying to be funny, but if not: enlighten us?
Sure :)
There are a lot of downsides of C++ compared to more modern languages that make it not a great choice if you’re starting a web browser from scratch
So tl;dr: a browser but in C++ will take much longer to develop, have fewer features, more bugs, less concurrency and and more security vulnerabilities
Thanks for laying out your concerns. As a C++ developer who does not know the other languages you speak of (I assume Rust, Go), I can agree to some of your points, but also some of them I see differently:
C++ can be complex, because it has a lot of features and especially the newer standards have brought some syntax that is hard to understand or read at times. However, those elements are not frequently used, or if they are, the developer will get used to them quickly & they won’t make development slow. As a matter of fact, most development time should be spent on thinking about algorithms, and thinking very well before implementing them - and until implementation, the language does not matter. I do not think that language complexity leads to increased bugs per se. My biggest project is just short of 40k lines of code, and most of the bugs I produced were the classical “off by one” or missing range checks, bugs that you can just as well produce in other languages.
C++ no longer requires you to do manual memory management - that is what smart pointers are for, and RAII-programming.
I can’t make a qualified comment on that, due to lack of expertise - you might be right.
You’re somewhat repeating point 1) here with slow development. But you raise a good point: web standards have become insane in terms of quantity and interface sizes. Everyone and their dog wants to reinvent the wheel. That in itself requires a very large team to support I would say. As stated for point 1), I do not agree development in C++ has to be slower
True, as someone who just suffered from problems introduced on windows (cygwin POSIX message queues implementation got broken by Win10, and inotify does not work on Windows Subsystem for Linux) I can confirm that while the C++ standard library is not much of a problem, the moment you interface with the host OS, you leave the standard realm and it becomes “zombieland”. Also, for some reason, the realtime library implementation on MacOS is different, breaking some very simple time-based functions. So yeah, that’s annoying to circumvent, but can be done by creating platform specific wrapper libraries that create a uniform API. For other languages, it appears this is done by the compilers, which is probably better - meaning the I/O operations got taken into those language’s core features
I am highly doubtful of people relying on garbage collection - a programmer that doesn’t know exactly when his objects come into existence, and when they cease to exist is likely to make much bigger mistakes and produce very inefficient code. The aforementioned smart pointers in C++ solve this issue: object lifetime is the scope of the smart pointer declaration, and for shared pointers, object lifetime expires when the last process using it leaves the scope in which it is declared. For concurrent programming, I do not know if you mean concurrency (threads) or multiple people working on the same project. While multi-threading can be a bit “weird” at first, you have a lot of control over shared variables and memory barriers in C++ that might enable a team to produce a browser that is much faster, which I believe is a core requirement towards modern browsers
As for your tl;dr: definitely not “less concurrency”, that makes no sense. The other points may or may not be true, keeping in mind the answers I gave above.
The language choice was because Ladybird started as a component of SerenityOS, which is also written in C++. With this separation, they are free to gradually introduce other language(s) into the codebase, and maybe eventually replace C++ entirely, piece by piece.
In Hackernews thread about this, the head maintainer mentioned that they have been evaluating several languages already, so we’ll see what the future brings.
In the meantime, let’s try to be mature about it, what do you say?
The dev has 30 years of experience with c++ and a lot of it was on browsers.
He tried to incorporate rust with the help of “JT”, one of the original rust designers/devs and according to Andreas it didn’t work that well due to the web being too objet oriented or something like that. They both worked together (well, mostly “JT”) to create a new safe programming language called “yakt” that transpile to c++, but the project is currently pretty much dead because nobody is really working on it anymore.
The web being too object oriented for rust? Assuming that made sense, who wrote the dang language? If that’s true I’m even less confident they know what they’re doing then I was before.
You’re doubting someone’s ability to create a web browser knowing that they specialize in browser development since the early 2000s?
If this isn’t enough to have confidence in them then nothing will.
Using my decades of experience in how programming and compilers works and the fact Mozilla has used it to great effect and how it is being used for parts of the Linux kernel… Yeah just a general statement it doesn’t make any sense.
Maybe they aren’t effective at designing software with the paradigms of the language or they don’t like it but the given explanation doesn’t track.
I am pretty sure it was about how it was difficult for them to do oop with rust, but I reckon it was long ago and my programming knowledge is minimal.
Found it:
https://rl.rootdo.com/r/rust/comments/yuxb8a/serenityos_author_rust_is_a_neat_language_but
I vaguely remember the talk about needing oop for the web being on discord and not twitter, so the twitter post is likely a reaction that.
Reading all of that it sounds mostly like a dev who has spent 20 years doing things the C++ way wasn’t comfortable learning something new. Like basically they’ve been using horrible design patterns that Rust bans because they’re horrible, and instead of learning better approaches they just say Rust is bad
It could be. But then again, he did have the help of a Rust designer/core dev. I believe they even wrote the first iteration of the “Jakt” compiler in Rust before rewriting it in Jakt itself, so Andreas isn’t against using Rust.