Sebanisu / jsource

J Language Source Code. Livestream links ⬇️

Home Page:https://www.youtube.com/playlist?list=PLVFrD1dmDdvfVhYLU_iKkV67X9XqCJLWe

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

J: From C to C++20

J is an array programming language created by Ken Iverson and Roger Hui (see image below).

This is a fork of jsoftware/jsource and we will be porting it to C++20.

Motivation

The motivation for this is to learn about how Ken Iverson / Roger Hui implemented the J language (and similarly APL as J is the successor to APL). The end goal is to learn as much as possible.

Try J

If you would like to try J without building from source, check out this site: http://tryj.freeddns.org/

Goals

  • Reduce complexity of build options
  • Compile with GCC 10+
  • Compile with Clang 11+
  • Remove all (most) of the macros
  • Clang-format the code base
  • Clang-tidy the code base
  • Set up CI (Buildkite)
  • Set up Code Coverage
  • Set up badges
  • Get both build / tests running in parallel
    • Parallel build (for free off of zhihaoy branch)
    • Parallel tests
  • Monitor compile & run time perf while refactoring

Non-Codebase Goals

  • Learn to not use mouse

Comparison of Languages

Calculating the first 10 odd numbers:

Language Code Runnable Link
J 1+2*i.10
APL ¯1+2×⍳10 TryAPL
R -1+2*seq(10)
Python [1 + 2 * i for i in range(10)] Godbolt
Haskell map (1+) $ map (2*) [0..9] OneCompiler
Haskell map ((+1) . (*2)) [0..9] OneCompiler
Haskell take 10 [1,3..] OneCompiler
C++ transform(iota(0, 10), [](auto e) { return e * 2 + 1; }) Godbolt
C# Enumerable.Range(0, 10).Select((int i) => { return i * 2 + 1; })
Java IntStream.range(0, 10).map(x -> x * 2 + 1).toArray();
Ruby (0..9).map { |i| i * 2 + 1 } Try It Online

Getting started & Building:

For building this repository, please see CONTRIBUTING.md.

Image of Ken Iverson and Roger Hui

image

About

J Language Source Code. Livestream links ⬇️

https://www.youtube.com/playlist?list=PLVFrD1dmDdvfVhYLU_iKkV67X9XqCJLWe

License:Other


Languages

Language:C 57.3%Language:J 41.2%Language:C++ 0.6%Language:CMake 0.4%Language:JavaScript 0.3%Language:CSS 0.1%Language:HTML 0.1%Language:Batchfile 0.0%