K made a lot more sense to me after I realised it is three things: a library of functions, operators, and a set of types. The only way to access the function library is through the operators/type overloading. Different versions of K (or related languages) then choose different libraries of functions, or different operators. Code is essential a very dense encoding of function calls into a fixed library.
Similar to the library of functions, accessible through a collection of operators us the Q'Nial language. It doesn't always get the visibility it's cousins (J and K) enjoy
K is cool but really, really expensive. Kevin Lawler's Kona seems nice. Shakti (next K version) could be good but I can't figure out a damn thing about it.
And then there's J, which, man. Hard to learn, but cool.
There's now ngn/k[0] for a free implementation of K6. The author prefers K6 to Shakti, which is K9. And there are a number of other open-source K dialects and array languages as well[1]. For learning about K, the recently-created K wiki[2] is a great resource.
Is there any summary of what's changed between K versions, or their lineage, for someone who's not "K-fluent" but a tiny bit familiar with array languages? What changed between K6, 7, and 9?
Since Kx is the proprietor of the main toolchain I assume such any such description would be more of an oral history rather than a technical document with a changelog, but I'm curious either way!
Theres also a version of K2, plus a PDF K2 reference manual and many example programs on nsl.com that are still available.
Back in 2002, I remember reading an article on kuro5hin where the author wrote: "I have heard rumors that there would be interest in opening up the language if there would be enough community response around it."
People commenting on today's web like to make fun of the idea that anything about computing was "better" in the past (and they like to crticise C too), but just look at how portable this code was designed to be. Moreover, it is as old as the web itself and it still compiles today.
What is the longevity of something written in Javascript.
A number of orgs have perpetual site licenses, or so I've been told. It can solve many problems elegantly and with minimal code and development time. But it requires a core group of people who do almost nothing else.
It’s been a while now since I first met on theoretical level array languages. I like the symbolic representation of Dyalog and APL in spite of its input problem. Is there a language of those well sure for mobile development or llvm and web compilation?
Also missing some comprehensive guide on its philosophy and way of thought to solve problems? I remember there were some videos on YouTube solving the advent Of code and comparing to Haskell. These were awesome in order to get into the APLer mindset.
>A story, since in retrospect I think it's worth telling.
Some years ago I was at the SF Clojure meetup. Arthur Whitney's daughter worked at the sponsoring company, and he agreed to come tell us about K.
>In retrospect, I don't think we gave him the welcome he deserved. No one was rude or anything, but it seemed there was a disconnect: Arthur was keen to show off how fast K (and Kdb) was, over zillions and zillions of rows.
>But the thing that the Clojurists were all searching for (that got them into Clojure in the first place) was expressivity. Is Clojure fast? I don't know, generally the problems I face come down to avoiding balls of mud rather than performance bottlenecks. And I think that was true of most there.
>So Arthur got something of an underwhelming reception. I remember someone asking "Does K have the ability to self-modify, a la Lisp macros?" When Arthur said no, you could see most people in the room just sort of mentally shrug and move on.
>And this was too bad. Because recently I've been playing around with J (another APL descendant) and been very impressed by some expressivity/readability benefits. Some small things that have very big effects on the codebase you actually end up with.
>The first thing is the avoidance of abstraction. To use a Twitterism:
>Broke: Just write your code and don't divide it into functions, creating one long main method
>Woke: Divide your code up, naming parts that get reused
>Bespoke: If your code is made up of really really short things, it ends up being shorter than the names you would use, so you can just write the thing rather than your name for it. An analogy would be: there is no human-comprehensible way to communicate the idea of "picosecond" in less time than an actual picosecond.
>The other thing I didn't expect was the benefit of multiple dispatch being baked into e v e r y t h i n g. In Clojure I might write (map + a b) to add each index together; in J I could just write a+b.
>This is neat stuff! Best practices for keeping complexity down in APL's tend to be the opposite of what they are in other languages. Aaron Hsu gave a talk about this: https://www.youtube.com/watch?v=v7Mt0GYHU9A
>It's too bad! Arthur came to tell us about speed---there's a reason it's used on giant datasets in finance, where performance translates directly into cash---but I wish we'd had the presence of mind to ask more about experience of writing K.
>So, Arthur, if you're reading this: Sorry everyone seemed kinda bored in SF a few years ago when you kindly came to present. We missed out!
The licenses aren’t cheap but are worth it for the right problems. Definitely worth adding that the relatively few people skilled in k/q are very much in demand and paid accordingly.
It costs an arm and a leg. I think Kx systems fucked up in making the language proprietary and closed source and charging for licenses. The smarter long-term play would have been to charge for support/special features/etc ala julia computing or lightbeam.
It's written by a private company with no public docs and no public implementation. Hell, it's not even directly sold, since it's just used as the backend for Q.
I have heard of people getting into legal problems for making a Q clone but not for k3/k6 implementations, so I don't know where they draw the line there.
Consider mathematical notation. That digit 2 could mean “power of 2” if it’s small and upper right of an object; “index 2” if small and bottom right. “Multiply by 2” if regular sized and to the left - very confusing! Indeed, it is very confusing if you are not versed in the accepted syntax of math expressions.
But if you are used to it, there’s no confusion - it’s just a very concise and useful way to express various concepts.
The argument is that your entire program fits on one screen. It may be hard to read (without practice) but you can stare at the whole thing all at once. I don't know if I buy the argument but it's an interesting one.
You’re not wrong. While writing K you sit in the repl and work out each piece as you go and make sure it gives the result you expect and then build up.
And the result of this trial-and-error programming process is, supposedly, a program that is protected from bugs because... it is short and you can see it on your screen all at once.
K made a lot more sense to me after I realised it is three things: a library of functions, operators, and a set of types. The only way to access the function library is through the operators/type overloading. Different versions of K (or related languages) then choose different libraries of functions, or different operators. Code is essential a very dense encoding of function calls into a fixed library.
Similar to the library of functions, accessible through a collection of operators us the Q'Nial language. It doesn't always get the visibility it's cousins (J and K) enjoy
K is cool but really, really expensive. Kevin Lawler's Kona seems nice. Shakti (next K version) could be good but I can't figure out a damn thing about it.
And then there's J, which, man. Hard to learn, but cool.
There's now ngn/k[0] for a free implementation of K6. The author prefers K6 to Shakti, which is K9. And there are a number of other open-source K dialects and array languages as well[1]. For learning about K, the recently-created K wiki[2] is a great resource.
[0] https://codeberg.org/ngn/k
[1] https://aplwiki.com/wiki/List_of_open-source_array_languages
[2] https://k.miraheze.org/wiki/Main_Page
OT, but for months already, Googling for "ngn/k" also displays a totally non-sensical calculator result, with no apparent way to report, like:
1 Nigerian naira / Boltzmann constant = 1.75931815 × 10^20 m^-2 kg^-1 s^2 K U.S. dollars
Is there any summary of what's changed between K versions, or their lineage, for someone who's not "K-fluent" but a tiny bit familiar with array languages? What changed between K6, 7, and 9?
Since Kx is the proprietor of the main toolchain I assume such any such description would be more of an oral history rather than a technical document with a changelog, but I'm curious either way!
EDIT: There is a wiki page for this but it hasn't been filled out (yet) unfortunately. Sad trombone. https://k.miraheze.org/wiki/History
1 reply →
Theres also a version of K2, plus a PDF K2 reference manual and many example programs on nsl.com that are still available.
Back in 2002, I remember reading an article on kuro5hin where the author wrote: "I have heard rumors that there would be interest in opening up the language if there would be enough community response around it."
https://web.archive.org/web/20050621080857/http://www.kuro5h...
The source code for J7 is still available and it still compiles with only a few small edits:
https://web.archive.org/web/20161024144956/http://www.math.u...
People commenting on today's web like to make fun of the idea that anything about computing was "better" in the past (and they like to crticise C too), but just look at how portable this code was designed to be. Moreover, it is as old as the web itself and it still compiles today.
What is the longevity of something written in Javascript.
2 replies →
Do Octave and R qualify as array languages? You could say that Python is not because Numpy is not part of the language.
8 replies →
what was the point of the OP in this thread? I went to that page, but I can't make sense of what the page is all about!?!
https://kparc.com/
affero? dang.
> really, really expensive
Can't find any pricing info on their website. How expensive is "expensive"?
Probably like a Bloomberg Terminal subscription, 25K a year or so
A number of orgs have perpetual site licenses, or so I've been told. It can solve many problems elegantly and with minimal code and development time. But it requires a core group of people who do almost nothing else.
What is the largest open-source community for a K-like language?
If you consider J K-like, then J. Otherwise, ngn K or Kona
ngn/k is the most active in development. You can meet the developer and people who use ngn/k in the chatrooms listed here: https://k.miraheze.org/wiki/Online_Communities
It’s been a while now since I first met on theoretical level array languages. I like the symbolic representation of Dyalog and APL in spite of its input problem. Is there a language of those well sure for mobile development or llvm and web compilation?
Also missing some comprehensive guide on its philosophy and way of thought to solve problems? I remember there were some videos on YouTube solving the advent Of code and comparing to Haskell. These were awesome in order to get into the APLer mindset.
BQN has an online repl
https://mlochbaum.github.io/BQN/
J runs on Android. To see J in action, you can check out TangentStorm's channel on Twitch
Comment from a year ago(https://news.ycombinator.com/item?id=22562344):
>A story, since in retrospect I think it's worth telling. Some years ago I was at the SF Clojure meetup. Arthur Whitney's daughter worked at the sponsoring company, and he agreed to come tell us about K.
>In retrospect, I don't think we gave him the welcome he deserved. No one was rude or anything, but it seemed there was a disconnect: Arthur was keen to show off how fast K (and Kdb) was, over zillions and zillions of rows.
>But the thing that the Clojurists were all searching for (that got them into Clojure in the first place) was expressivity. Is Clojure fast? I don't know, generally the problems I face come down to avoiding balls of mud rather than performance bottlenecks. And I think that was true of most there.
>So Arthur got something of an underwhelming reception. I remember someone asking "Does K have the ability to self-modify, a la Lisp macros?" When Arthur said no, you could see most people in the room just sort of mentally shrug and move on.
>And this was too bad. Because recently I've been playing around with J (another APL descendant) and been very impressed by some expressivity/readability benefits. Some small things that have very big effects on the codebase you actually end up with.
>The first thing is the avoidance of abstraction. To use a Twitterism:
>Broke: Just write your code and don't divide it into functions, creating one long main method
>Woke: Divide your code up, naming parts that get reused
>Bespoke: If your code is made up of really really short things, it ends up being shorter than the names you would use, so you can just write the thing rather than your name for it. An analogy would be: there is no human-comprehensible way to communicate the idea of "picosecond" in less time than an actual picosecond.
>The other thing I didn't expect was the benefit of multiple dispatch being baked into e v e r y t h i n g. In Clojure I might write (map + a b) to add each index together; in J I could just write a+b.
>This is neat stuff! Best practices for keeping complexity down in APL's tend to be the opposite of what they are in other languages. Aaron Hsu gave a talk about this: https://www.youtube.com/watch?v=v7Mt0GYHU9A
>It's too bad! Arthur came to tell us about speed---there's a reason it's used on giant datasets in finance, where performance translates directly into cash---but I wish we'd had the presence of mind to ask more about experience of writing K.
>So, Arthur, if you're reading this: Sorry everyone seemed kinda bored in SF a few years ago when you kindly came to present. We missed out!
dumb question but where is the source ? what is the license?where i can install the program(linux/ubuntu)?
commercial ks are not open source
ngn/k is foss and can be installed on linux https://codeberg.org/ngn/k
It’s proprietary but free for personal use and worth trying out (the download is absurdly small!)
Download + licenses are at https://kx.com/developers/download-licenses/
The Q for Mortals book (free online) is a good place to start, as is https://code.kx.com/q/learn/tour/
The licenses aren’t cheap but are worth it for the right problems. Definitely worth adding that the relatively few people skilled in k/q are very much in demand and paid accordingly.
K is proprietary and licensed by Kx Systems. Reading further on it I gather it isn't cheap.
It costs an arm and a leg. I think Kx systems fucked up in making the language proprietary and closed source and charging for licenses. The smarter long-term play would have been to charge for support/special features/etc ala julia computing or lightbeam.
3 replies →
What does "k4 is proprietary" mean? Does that mean one way run into problems building an open-source implementation of the language itself?
It's written by a private company with no public docs and no public implementation. Hell, it's not even directly sold, since it's just used as the backend for Q.
I have heard of people getting into legal problems for making a Q clone but not for k3/k6 implementations, so I don't know where they draw the line there.
There are some a few public docs.
https://estradajke.github.io/k9-simples/
https://code.kx.com/q/learn/
Maybe it's because I'm tired. Maybe it's because I'm half reading this article while my 2yo is bathing/playing in the bath
But that looks like a really error prone syntax.. error prone like writing Brainfuck I mean.
Yea and no.
Consider mathematical notation. That digit 2 could mean “power of 2” if it’s small and upper right of an object; “index 2” if small and bottom right. “Multiply by 2” if regular sized and to the left - very confusing! Indeed, it is very confusing if you are not versed in the accepted syntax of math expressions.
But if you are used to it, there’s no confusion - it’s just a very concise and useful way to express various concepts.
K is similar.
The argument is that your entire program fits on one screen. It may be hard to read (without practice) but you can stare at the whole thing all at once. I don't know if I buy the argument but it's an interesting one.
It’s just a first impression. This is a very effective tool. Ofc it requires some effort to use (as well as mathematical notation). Required reading https://www.eecg.utoronto.ca/~jzhu/csc326/readings/iverson.p...
You’re not wrong. While writing K you sit in the repl and work out each piece as you go and make sure it gives the result you expect and then build up.
Hmm yeah if you have to go to those lengths to write it then I seriously doubt anyone else could read it. Not easily anyway.
Seems a lot like regexes - terse and powerful but essentially write-only.
1 reply →
And the result of this trial-and-error programming process is, supposedly, a program that is protected from bugs because... it is short and you can see it on your screen all at once.
Not sure I buy it.
Clicking on examples gives me 403.
Consider your self lucky
K and Q have to die along with MUMPS and maybe some other sadistic experiments in pl development I may not be familiar with
3 replies →