Est. 1990 Advanced

J

A high-level array programming language descended from APL, using ASCII characters instead of special symbols to express powerful array operations concisely.

Created by Kenneth E. Iverson and Roger Hui at Jsoftware

Paradigm Array-Oriented, Functional, Tacit (point-free)
Typing Dynamic, Strong
First Appeared 1990
Latest Version J904 (2022)

J is a high-level, general-purpose programming language that descended directly from APL (A Programming Language). Created by Kenneth Iverson and Roger Hui, J preserves APL’s powerful array programming paradigm while replacing the special character set with ASCII characters, making it accessible on any standard keyboard.

History & Origins

The story of J begins with Kenneth Iverson’s desire to improve upon his earlier creation, APL. While APL was revolutionary, its reliance on special characters created practical problems: specialized keyboards, display limitations, and portability issues across systems.

The Birth of J

One summer weekend in 1989, Arthur Whitney visited Kenneth Iverson at Kiln Farm in Ontario, Canada. In a single afternoon, Whitney produced a one-page interpreter prototype on an AT&T 3B1 computer. Roger Hui then took this seed and, on Sunday, August 27, 1989, wrote the first line of code that would become J’s implementation.

By August 1990, J was publicly released. Iverson and Hui, along with Eric Iverson (Ken’s son), founded Iverson Software Inc. in February 1990 to develop and distribute the language.

ASCII Revolution

J’s most significant departure from APL was its use of ASCII characters. Where APL used (rho) for reshape, J uses $. Where APL used for reverse, J uses |.. This made J:

  • Usable on any standard keyboard
  • Portable across all computing systems
  • Embeddable in plain text files and emails
  • Easier to discuss in technical documentation

Why J is Unique

Vocabulary: Verbs, Adverbs, Conjunctions

J uses grammatical terminology to describe its parts of speech:

  • Nouns: Data (numbers, arrays, strings)
  • Verbs: Functions that act on nouns (+, -, % for division, # for count)
  • Adverbs: Modifiers that take a verb and return a new verb (/ for reduce, ~ for reflex)
  • Conjunctions: Combine two words to make a new word (. for various compositions)

This terminology reflects J’s philosophical approach: programs are sentences in a mathematical language.

Tacit Programming

J excels at tacit (point-free) programming, where you define functions without explicitly naming their arguments:

1
2
3
4
   sum =: +/          NB. sum is "plus reduce"
   mean =: sum % #    NB. mean is sum divided by count
   mean 1 2 3 4 5
3

The mean function never mentions its argument—it’s defined purely in terms of other operations.

Array-Oriented Operations

Like APL, operations in J naturally apply to entire arrays:

1
2
3
4
5
   2 * 1 2 3 4 5
2 4 6 8 10

   1 2 3 + 10 20 30
11 22 33

No loops needed—the operations simply work on all elements.

Right-to-Left Evaluation

J evaluates expressions from right to left with no operator precedence:

1
2
   2 * 3 + 4
14

This reads as “2 times (3 plus 4)” = 14, not “(2 times 3) plus 4” = 10.

J’s Relationship to APL

J is often called “APL without the funny symbols,” but this undersells its innovations:

APLJMeaning
$Reshape
i.Index generator
|.Reverse
/:Grade up (sort indices)
∘./Table (outer product)

J also introduced concepts not present in original APL:

  • Gerunds: First-class verb collections
  • Forks and Hooks: Composition patterns for tacit definitions
  • Explicit definitions: Clear syntax for complex function definitions

Modern J

Active Development

J is actively maintained by Jsoftware Inc. The J904 release (2022) demonstrates continued development with:

  • Cross-platform support (Windows, macOS, Linux, Raspberry Pi)
  • Integrated development environments
  • Web-based interfaces
  • Modern package management

Open Source

In March 2011, the J source code was released under the GNU General Public License, ensuring its future as open-source software.

Available Implementations

ImplementationPlatformNotes
J (Jsoftware)AllOfficial reference implementation
JHSBrowserJ HTTP Server for web interface
JQtAllQt-based desktop IDE

The J Community

J has a dedicated community of practitioners, many in quantitative finance and data science. Resources include:

Getting Started

J programs are typically stored in .ijs files. The typical workflow:

1
2
3
4
5
# Run a J script
jconsole script.ijs

# Start interactive session
jconsole

Continue to the Hello World tutorial to write your first J program.

Timeline

1989
Arthur Whitney creates one-page interpreter prototype; Roger Hui writes first implementation code on August 27
1990
J publicly released as APL successor by Kenneth Iverson and Roger Hui; Iverson Software Inc. founded
1991
J Dictionary published, defining the language's vocabulary of verbs, adverbs, and conjunctions
1993
J becomes freeware for non-commercial use
2000
Company renamed to Jsoftware Inc. to focus on J language
2007
J 6.01 released with significant performance improvements
2011
J source code released under GPL license in March
2022
J904 released with modern features and continued development

Notable Uses & Legacy

Quantitative Finance

Used for financial modeling, derivatives pricing, and algorithmic trading due to its concise expression of complex mathematical operations.

Data Analysis

Array-oriented design makes J excellent for data manipulation, statistical analysis, and exploratory data analysis.

Research & Education

Used in academic settings to teach array programming concepts and computational thinking.

Rapid Prototyping

J's expressiveness allows quick development of algorithms and data transformations, often in a fraction of the code of other languages.

Code Golf

J's extreme conciseness makes it popular for programming puzzles and code golf competitions.

Language Influence

Influenced By

APL FL FP

Influenced

K Q NumPy MATLAB

Running Today

Run examples using the official Docker image:

docker pull nesachirou/jlang:latest

Example usage:

docker run --rm -v $(pwd):/app -w /app --entrypoint /usr/bin/ijconsole-9.03 nesachirou/jlang hello.ijs

Topics Covered

Last updated: