Agentic Workflow | DevOps & Platform Engineering | Observability

Quali linguaggi di programmazione sono più token-efficient?

Martin Alderson ha scritto Which programming languages are most token-efficient?, un esperimento per capire quanti token servono a scrivere la stessa cosa in linguaggi diversi.

La premessa è semplice: “One of the biggest constraints LLMs have is on context length”, e quindi “a more token efficient language should allow longer sessions and require fewer resources”. Se il context è la risorsa scarsa, la verbosità del linguaggio diventa un costo operativo.

Come ha fatto

Ha preso RosettaCode — oltre 1.000 task implementati in quasi 1.000 linguaggi — e ha usato Claude Code per analizzare un mirror GitHub del dataset. Ha scelto 19 linguaggi popolari, tenendo solo i task che avevano un’implementazione in tutti e 19, e ha contato i token con il tokenizer Xenova/gpt-4 da Hugging Face.

I numeri

  • Clojure: 109 token di media, il più efficiente del gruppo
  • Haskell: ~110
  • F#: ~111
  • JavaScript: 128
  • C: 283, il peggiore

Tra il migliore e il peggiore ci sono 2,6x. In un update ha aggiunto il linguaggio J, che si piazza a 70 token di media — quasi la metà di Clojure. APL sta a 110.

Due pattern:

  • i linguaggi dinamici battono quelli tipizzati staticamente, semplicemente perché non devi scrivere le dichiarazioni di tipo;
  • i funzionali con type inference forte (Haskell, F#) tengono il passo dei dinamici pur restando tipizzati. Questa è la parte che sorprende.

TypeScript è rimasto fuori: su RosettaCode non c’erano abbastanza esempi.

Il disclaimer, che conta

Alderson è esplicito: “There are many, many potential limits and biases involved in this dataset and approach! It’s meant as a interesting look at somewhat like-for-like solutions to some programming tasks, not a scientific study.”

E ha ragione. RosettaCode è crowdsourced, i task sono esercizi da manuale, il tokenizer è un port della community. Nessuno dovrebbe migrare a Clojure per risparmiare context.

Cosa mi porto a casa

Il numero in sé non mi serve. Mi interessa la direzione: se il context è la risorsa che si esaurisce per prima durante una sessione con un agent, allora la densità del codice smette di essere una questione di gusto e diventa un parametro operativo. La stessa cosa vale per tutto il resto che finisce nel context — file di configurazione, log, output dei tool.

La conclusione di Alderson è che la token efficiency “starts becoming a factor in language selection in the future”. Per un progetto nuovo, forse. Per il codice che ho già in produzione, la leva vera è un’altra: decidere cosa non far entrare nel context.