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.
Well, it was more to recognize that there is no inherently better programming languages in theory, they all do the same stuff. And some languages are “better” at some stuff just due to the libraries available and nothing to do with the language itself. But yea I do think Rust is an objectively better language than C++.
Rust is great, but anybody developing something should have the ability to choose whatever programming language they prefer. If you want it made with rust, make it yourself.
Not everyone with the knowledge to identify this mistake is in a position to personally correct it. Do you have the time and resources to personally build a browser from scratch? No? Why do you assume a random commenter does?
It doesn’t change the fact that Rust is similarly performant and much safer and will thus be faster to develop and less bug-prone. It’s not a difficult assessment to make. If you want to explain why they’re wrong you can talk about the issue on its merits, but you didn’t choose to, presumably because you can’t.
Their choice of programming language isn’t a ‘mistake’. It isn’t something that is ‘corrected’. It’s a development choice, nothing more. That’s the point. And if some ‘random commenter’ doesn’t like that choice, that’s their problem to fix - not the developers who are actually making the project.
You said they “should have the ability to choose whatever programming language they prefer”. I have good news for you.
You have correctly identified that the developers are responsible for their own decisions. They are, you will be very relieved to hear, quite free to make as many poor decisions as they will. Nobody is going to force them to stop.
Other people are more than capable of identifying that those decisions are mistakes. Now, that could be argued with, you could explain how it’s not a mistake.
But you haven’t. You just said they should be allowed to do it, but nobody was arguing that they needed to be stopped, just that it was a bad decision.
Edit: this person didn’t actually say that first quote, but the line of argument proceeded from there, and they did nothing to distance themselves from that point.
I just don’t think it’s fair to tell somebody with over 20 years of experience with C++ that their decision to use C++ in their next project is a ‘fail’.
Learning a new language will probably not be faster than using one you’re already deeply familiar with.
I’m not sure why you’re asking me about the merits of C++ over rust, that wasn’t my point. I was simply advocating for personal choice.
Also, my first sentence was literally praising rust, but I guess I didn’t deepthroat it enough for you to notice? Presumably because you’ve taken the thought of somebody advocating for anything other than rust as a personal attack.
If were just a personal project that they’re building entirely on their own then sure, go nuts and do whatever you want. But they’re trying to gain adoption, asking for contribution, and wanting to replace other browsers. At that point it’s no longer just a personal choice if you’re asking the community to invest their time and money into it with you
It originally started as just a fun side project.
But even if it hadn’t, are you suggesting we should no longer start big/community projects in C++?
Picking an unsafe language has the added benefit of distancing yourself from the toxic rust-or-die crowd, who can’t seem to mind their own damn business.
On February 8, 2021, the formation of the Rust Foundation was announced by its five founding companies (AWS, Huawei, Google, Microsoft, and Mozilla).[36][37] In a blog post published on April 6, 2021, Google announced support for Rust within the Android Open Source Project as an alternative to C/C++.[38]
Four out of five founding companies are evil to the bone, with only Mozilla being somewhat reputable. That does not give me much confidence, sadly.
On November 22, 2021, the Moderation Team, which was responsible for enforcing community standards and the Code of Conduct, announced their resignation “in protest of the Core Team placing themselves unaccountable to anyone but themselves[39]”
How am I not surprised?
In May 2022, the Rust Core Team, other lead programmers, and certain members of the Rust Foundation board implemented governance reforms in response to the incident.[40]
At least that. However, I don’t care enough for the time being to spend my morning on reading what exactly they implemented.
The Rust Foundation very deliberately does not control the development of Rust. There has been issues with the moderation team in the past but I think they’re actually resolved today. And let me just assure you that Rust is not the only language project with problems and the fact that they have been talked about and discussed in the open and resolved is a sign of maturity and trust, not a bad thing.
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.
Appreciate you taking the time to reply in such detail! Some good insights thank you
C++ is a very old, extremely complex language. There are arguably objectively better modern alternatives, such as Rust.
I agree that Rust is the way to go, but calling something “arguably” & “objectively” in the same breath is a bit of a paradox innit?
Well, it was more to recognize that there is no inherently better programming languages in theory, they all do the same stuff. And some languages are “better” at some stuff just due to the libraries available and nothing to do with the language itself. But yea I do think Rust is an objectively better language than C++.
Rust is great, but anybody developing something should have the ability to choose whatever programming language they prefer. If you want it made with rust, make it yourself.
Not everyone with the knowledge to identify this mistake is in a position to personally correct it. Do you have the time and resources to personally build a browser from scratch? No? Why do you assume a random commenter does?
It doesn’t change the fact that Rust is similarly performant and much safer and will thus be faster to develop and less bug-prone. It’s not a difficult assessment to make. If you want to explain why they’re wrong you can talk about the issue on its merits, but you didn’t choose to, presumably because you can’t.
Their choice of programming language isn’t a ‘mistake’. It isn’t something that is ‘corrected’. It’s a development choice, nothing more. That’s the point. And if some ‘random commenter’ doesn’t like that choice, that’s their problem to fix - not the developers who are actually making the project.
You said they “should have the ability to choose whatever programming language they prefer”. I have good news for you.
You have correctly identified that the developers are responsible for their own decisions. They are, you will be very relieved to hear, quite free to make as many poor decisions as they will. Nobody is going to force them to stop.
Other people are more than capable of identifying that those decisions are mistakes. Now, that could be argued with, you could explain how it’s not a mistake.
But you haven’t. You just said they should be allowed to do it, but nobody was arguing that they needed to be stopped, just that it was a bad decision.
Edit: this person didn’t actually say that first quote, but the line of argument proceeded from there, and they did nothing to distance themselves from that point.
I just don’t think it’s fair to tell somebody with over 20 years of experience with C++ that their decision to use C++ in their next project is a ‘fail’.
Learning a new language will probably not be faster than using one you’re already deeply familiar with.
I’m not sure why you’re asking me about the merits of C++ over rust, that wasn’t my point. I was simply advocating for personal choice.
Also, my first sentence was literally praising rust, but I guess I didn’t deepthroat it enough for you to notice? Presumably because you’ve taken the thought of somebody advocating for anything other than rust as a personal attack.
Criticism doesn’t take away personal choice though. I don’t know why that’s hard for people to grasp.
Of course, but it still makes sense to think carefully about the advantages of disadvantages of the tools you use when starting any project.
deleted by creator
I am not the one who said “epic fail”.
Sorry, replied in the wrong comment level apparently.
If were just a personal project that they’re building entirely on their own then sure, go nuts and do whatever you want. But they’re trying to gain adoption, asking for contribution, and wanting to replace other browsers. At that point it’s no longer just a personal choice if you’re asking the community to invest their time and money into it with you
It originally started as just a fun side project.
But even if it hadn’t, are you suggesting we should no longer start big/community projects in C++?
Picking an unsafe language has the added benefit of distancing yourself from the toxic rust-or-die crowd, who can’t seem to mind their own damn business.
Taken from the wikipedia page on rust:
Four out of five founding companies are evil to the bone, with only Mozilla being somewhat reputable. That does not give me much confidence, sadly.
How am I not surprised?
At least that. However, I don’t care enough for the time being to spend my morning on reading what exactly they implemented.
The Rust Foundation very deliberately does not control the development of Rust. There has been issues with the moderation team in the past but I think they’re actually resolved today. And let me just assure you that Rust is not the only language project with problems and the fact that they have been talked about and discussed in the open and resolved is a sign of maturity and trust, not a bad thing.
I suppose there are problems in many teams, yes - the majority of humanity is just not mature enough to treat each other professionally :/
Still - 4 out of the 5 founding companies being pure evil does not fill me with confidence :/
The language existed long before the foundation. The foundation is purely there to support the language.