With more than 25 combined years at Adobe, Sean Parent and his team work to expand the reach of Photoshop, all the while reinventing the professional creative software product that touches millions of customers across the world. You can thank his team for implementing innovative features and capabilities, such as evolving Photoshop from a desktop product to a multi-surface platform, implementing AI capabilities, and simplifying the product for new users. There always seems to be an infinite number of unique challenges to take on. And what’s the secret to making this happen? It’s all in the code. Learn how Sean and his team are using C++ to bring Photoshop to new heights in this Q&A.
How does Adobe apply C++ in its products today?
Adobe’s use of C++ is extensive. Our desktop and mobile products are written almost entirely in C++.
C++ powers our various imaging systems and codecs and is used for performance-critical components server-side and, with Web Assembly, is powering more of our browser experiences.
What are the benefits of using C++ compared to other languages?
The two primary benefits are reach and performance.
C++ runs everywhere – Mac, Windows, Linux, iOS, Android, and in browser. It gives you access to the hardware and OS on all platforms. It is well supported and standardized, with few discrepancies between implementations. C++ allows us to build high-performance libraries that can be used anywhere.
As energy costs increasingly drive the costs of computing and the limits of performance, the efficiency of C++ has drawn developers from all domains. C++ is at the forefront of computing and research.
What are some of the innovations that Adobe is doing with C++?
We are always looking at better ways to get more out of existing and new hardware. That means increasing use of concurrency and utilizing low-overhead constructs, like coroutines and continuations, and looking at new models for structuring systems to scale from one-to-many cores. We are experimenting with ways to unify our computational environment between CPU and GPU and better ways to bridge C++ between other languages and runtimes (Swift and Objective-C on iOS, Kotlin on Android, TypeScript in the browser, Java on the server, and so on). We have been developing a system for documenting C++ libraries, known as Hyde, and we collaborate with MIT and Google on the Halide language. Halide is a C++ DSL (Domain Specific Language) for image processing that can run on a CPU using SIMD instructions and GPUs. Much of the lower-level image processing code in Photoshop is now written in Halide. There is so much going on in the C++ domain – it is staggering.