J (language)
J is a terse, array-oriented programming language created as a successor to APL, expressing the same array-programming concepts using standard ASCII characters instead of APL's special symbol set.
Definition
J is a terse, array-oriented programming language created as a successor to APL, expressing the same array-programming concepts using standard ASCII characters instead of APL's special symbol set.
Overview
J was created by Kenneth E. Iverson — the original designer of APL — together with Roger Hui, and first released in 1990, as a redesign of APL's array-oriented programming model that would work with standard ASCII keyboards and character encodings instead of requiring APL's special glyphs and dedicated keyboard layout, which had long been a practical barrier to APL's adoption and portability. J preserves and, in several respects, extends APL's core ideas: operations act on whole arrays at once (rank-polymorphic functions that automatically apply across nested array structures at a specified 'rank'), and complex algorithms are expressed through dense combinations of built-in functions ('verbs'), operators that modify or combine functions ('adverbs' and 'conjunctions'), and data. J places particularly strong emphasis on 'tacit' (point-free) programming, where functions are defined by composing other functions directly — without ever naming the arguments they operate on — building on ideas present in APL but pushed further as a defining stylistic feature of J. This tacit style, combined with J's rank-based automatic array-broadcasting, lets experienced J programmers express sophisticated numerical and combinatorial algorithms in extremely short expressions, continuing APL's tradition of extreme conciseness while remaining typeable on an ordinary keyboard. J is free and open source, maintained by Jsoftware (a company co-founded by Iverson), and it has a devoted community centered around numerical computing, mathematical exploration, financial analysis, and recreational/competitive terse-code programming (it is a popular choice in code-golf communities for exactly the same reasons APL is). Like APL, J has not achieved mainstream industrial adoption, but it remains actively used and developed, valued by its community for offering array-oriented, notation-like expressiveness without APL's special character-set requirement, and it continues to influence discussions of array programming alongside its sibling languages K and Q.
Key Features
- Array-oriented programming using standard ASCII characters instead of APL's special symbols
- Rank-polymorphic functions ('verbs') that automatically apply across nested array structures
- Strong emphasis on tacit (point-free) programming, composing functions without naming arguments
- Adverbs and conjunctions for modifying and combining functions in dense expressions
- Free and open-source implementation maintained by Jsoftware
- Extremely concise notation continuing APL's tradition, popular in code-golf communities
- Direct successor to APL, created by APL's original designer Kenneth E. Iverson with Roger Hui