I don’t really understand the huge variety of languages in these things. Chromium is mostly C/C++, okay. And I suppose they need some JS around for internal UI stuff. I suppose it makes sense to have some Python in there too for build automation or something. But why do they need Python and Ruby and Perl and PHP? And Lisp and Go and Scheme and R and Powershell and Sed and so on? I have to wonder if there are good reasons for all that, or if these projects need some language synchronization.
But why do they need Python and Ruby and Perl and PHP?
An attempt at an explanation:
PythonMost integration test running infrastructure inherited from WebKit was written in and continues to be written in Python. You can see this lineage comparing Chromium and WebKit’s source trees:
All Python files: https://cs.chromium.org/search/?q=lang:%5Epython$&p=2&sq=package:chromium&type=cs
RubyOne thing we used Ruby for was for a tiny utility for formatting patch files. We just replaced it (CL). There are some other random files.
All Ruby files: https://cs.chromium.org/search/?q=lang:%5Eruby$&sq=package:chromium&type=cs
PerlChromium actually vendors in a copy of the Perl language.
All Perl files: https://cs.chromium.org/search/?q=lang:%5Eperl$&sq=package:chromium&type=cs
PHPMany manual tests are written in PHP since (for better or worse) it’s easy.
All PHP files: https://cs.chromium.org/search/?q=lang:%5EPHP$&sq=package:chromium&type=cs
Other languagesor if these projects need some language synchronization
Contributions welcome! :)
(but seriously, if you are interested, I’m at jeffcarp@chromium.org for any questions)
To try to answer the question more directly: code gets written in many languages and it takes SWE hours to rewrite it in a different language. If you’re choosing between investigating a P1 bug and rewriting something that already works in a different language, time usually gets spent on the P1 bug.
(source: I work on the Chrome infrastructure team)
Oo good catch, thx - updated my reply. I can find some Emacs Lisp in the codebase but I can’t find any Common Lisp 🤔.
On Scheme code in V8: V8 implements a fast floating point formatting algorithm which is relatiely recent (2010, IIRC) hence likely to be faster than system printf. As I understand, Scheme code is directly from the paper.
Interesting, thanks for finding all of that! Looks like Chromium has a lot more third-party libs and testing infrastructure than I thought.
I may just take a look at some of the open-source infrastructure there, though I doubt I’ll have the time or energy to try and make contributions.
This is incredible! I really, really like this. It’s extremely well implemented, very clean, pleasant to use, and runs amazingly well. The zoom and translate functionality is so smooth and re-rendering is done without losing all of the old content. 10/10
This looks really nice! Having that top-level support for Webpack will be excellent; it should it much easier to integrate WebAssembly code into larger applications. Thanks for your work on this.
I’ve been using Paperwork as a sort of note-management tool for a while now. I like its setup; it’s basically just a rich text editor with a web editor that saves notes to a database.
The nice thing about it is that I have access to all of my notes on any computer, since it’s hosted on a server. You give up the nice text-based, local aspect of some of the other solutions here, but I’ve found that it meets my needs well.
I’ll use it to sort of flesh out plans for things I’m about to work on, sort of as a staging area for thoughts. I don’t really use it for recording stuff that I’ve finished, preferring overly verbose commit messages for that, there’s no reason you can’t do that as well.
I’m working on a Noise Function Composition Application using Rust and WebAssembly. It’s built on top of the noise-rs, and the ideas is for it to provide a nice web-based GUI to build complex and dynamic noise functions.
The hope is to use it along with a small simulation library that I’m working on to build cool visualizations and generative art kinds of stuff.
One of my absolute favourite tools, but one that is in desperate need of
Well, the first part’s done already; somebody in a Rust Discord server I hang out in posted it: https://github.com/ethanhs/cce