sxp 4 years ago

The code won't compile on modern C compilers due to some antiquated syntax. https://github.com/tangentstorm/j-incunabulum has a translation that should work on modern compilers.

The original code is worth investigating if you're into CS archeology. J is as interesting of a language as Lisp and I was amazed by the tiny implementation. However, the original code is buggy and will crash on slightly malformed input.

simonebrunozzi 4 years ago

For the ones that don't know, incunabulum is a book printed before 1501 [0].

I find the story behind incunabula really fascinating. Also, for what it's worth, incunabulum / incunabula sounds quite odd in Italian (it resembles some dirty words), and the few times it got mentioned here and there, most people don't know what it means and assume the worst.

[0]: https://en.wikipedia.org/wiki/Incunable

vadiml 4 years ago

I did some APL coding like 40 years ago.... I did like it at the time, but this family of languages provokes WRITE ONLY coding style.... While you actively working on some code, it's ok... but when you come back to a code written couple of month ago or written by someone else you're pulling you hair out trying to understand it

  • rscho 4 years ago

    I do statistical computing, and I very much disagree. My single-page J is much easier to read 6 mo later than my 500 loc R script.

nivertech 4 years ago

anyone tried to compile it?

I'm getting this when trying to run it:

  $ cc main.c
  ... lots of warnings ...

  $ ./a.out 
  1
  
  1 
  2*2
  Segmentation fault (core dumped)
  • ghancock 4 years ago

    It doesn’t have *. What it has is listed in the declaration starting with “C vt[]”. Those are the names of verbs and the following lines give the function pointers for their monadic and dyadic uses.

    It worked fine for me when I was careful to stay within what it actually supported, bearing in mind it’s a fast and rough implementation not something for production use.

  • ksherlock 4 years ago

    It will run but it requires 32-bit pointers and 32-bit integers. And error handling is limited.

queuebert 4 years ago

Why do these array programmers write C like this? It's an abomination.

  • avmich 4 years ago

    They prefer to write in their language. And to do that, produce primitives, written in C, first, and then use those primitives according to their language, not C. So from C programmer standpoint it's awful C, from J programmer standpoint it's a good middle ground between wanting to write J and the underlying language possibilities.

  • razetime 4 years ago

    Some array programmers inspired by Arthur Whitney write code like this. I wouldn't call it an abomination per se, it's a specific style meant for a specific person. They find that way of writing C to be nice. It's somewhat popular among people who implement K-like array languages.

    A usual result of using array languages is a want to have that same terseness in other languages. Array languages usually deviate from the style and aesthetic of general programming languages. It may be jarring to look at, but as with anything, a little experience with using them can go a long way with understanding why many people work with something so "unreadable".

  • klyrs 4 years ago

    I think it's beautiful. You might prefer to read 20 pages of code. And, me too. But this is a puzzle, and it intrigues me, so I read a good quarter of this. If it was 20 pages long, I probably wouldn't have gotten that far