+++
title = "Why financial firms use several programming languages"
description = "Why trading, pricing and operations use different languages—and how memory, latency and numerical workloads shape the choice."
date = 2026-09-11
draft = false
[taxonomies]
topics = ["systems-low-latency-languages", "enterprise-languages-runtimes", "scientific-statistical-languages", "pricing-numerical-optimization"]
kinds = ["explainer"]
[extra]
tier = "public"
schema_type = "Article"
article_class = "explainer"
related_concepts = ["runtime", "foreign-function interface", "garbage collection", "numerical library"]
sources = ["https://www.quantlib.org/", "https://numpy.org/doc/stable/user/whatisnumpy.html", "https://docs.python.org/3/library/decimal.html", "https://www.janestreet.com/technology/"]
source_details = [{ title = "QuantLib: a free/open-source library for quantitative finance", publisher = "QuantLib Project", url = "https://www.quantlib.org/", checked = "2026-09-09" }, { title = "What is NumPy?", publisher = "NumPy Project", url = "https://numpy.org/doc/stable/user/whatisnumpy.html", checked = "2026-09-09" }, { title = "decimal — Decimal fixed-point and floating-point arithmetic", publisher = "Python Software Foundation", url = "https://docs.python.org/3/library/decimal.html", checked = "2026-09-09" }, { title = "Technology at Jane Street", publisher = "Jane Street", url = "https://www.janestreet.com/technology/", checked = "2026-09-09" }]
faq = [{ question = "Does using Python make a pricing system slow?", answer = "No. Total time depends on the executed components and their boundaries, including any native numerical code." }, { question = "Does a firm have to use C++ for trading?", answer = "No. Trading systems can use other language ecosystems when their implementations meet the required behavior and workload constraints." }]
evidence_as_of = "2026-09-09"
related_articles = ["financial-database-roles", "notebook-to-model-service", "trading-latency-clock-error"]
category_slug = "software-models"
category_name = "Software & models"
+++

A financial software stack is the set of languages, runtimes and libraries used to implement a firm’s financial workflows. The operating constraints belong to individual components: a pricing calculation, an order gateway and a client interface do different work.

## Languages, runtimes and numerical libraries

A programming language defines how a program is expressed. Its runtime supplies execution services, including memory management where the implementation uses managed execution. A library supplies reusable operations. The language visible to an analyst therefore does not identify every component that executes the analyst’s request.

QuantLib has a C++ core and exposes language bindings. A calculation requested from another language can cross that boundary into the library. NumPy supplies array operations for scientific computing, while decimal arithmetic serves equality-sensitive accounting calculations. Bulk numerical computation and exact business arithmetic impose different requirements on representation and conversion.

An institution can consequently combine a research interface, a numerical kernel and an operational service without assigning the same language to all three. Jane Street’s use of OCaml across financial software is a concrete institutional example of another language ecosystem. It establishes a deployment choice within that firm, not a ranking of languages across the industry.

## A valuation request across component boundaries

A valuation request begins with inputs such as positions, curves and contractual conventions. The research or service layer prepares those inputs, passes them to a calculation component and returns the result. Each boundary can add serialization, copying, allocation or synchronization work.

Take a request that spends 2 milliseconds preparing data, 6 milliseconds calculating and 2 milliseconds returning the result. Total elapsed time is 10 milliseconds. Halving the calculation time reduces the total to 7 milliseconds. The unchanged preparation and return stages prevent the whole request from becoming twice as fast.

Moving a calculation between languages can change more than its execution time. Units, missing-value representation, numeric precision and error handling form part of the interface. Two components that exchange a valid array still need to agree on what its values mean.

## Comparing financial software components

A useful comparison fixes the calculation, input population, correctness conditions and operating workload. Throughput, typical latency and latency during bursts are separate results. Memory behavior matters at the point where allocation or collection affects the measured path.

What varies across financial stacks is the allocation of responsibilities among components. A firm-level language label does not establish the response time of an order, the accuracy of a valuation or the maintainability of an application.

## Questions about runtime

### Does using Python make a pricing system slow?

No. Total time depends on the executed components and their boundaries, including any native numerical code.

### Does a firm have to use C++ for trading?

No. Trading systems can use other language ecosystems when their implementations meet the required behavior and workload constraints.
