[HN Gopher] K Programming Language ___________________________________________________________________ K Programming Language Author : ColinWright Score : 89 points Date : 2021-09-11 16:31 UTC (6 hours ago) (HTM) web link (kparc.com) (TXT) w3m dump (kparc.com) | Jenk wrote: | 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. | gaze wrote: | 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. | quag wrote: | 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. | Nekorosu wrote: | 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... | beagle3 wrote: | 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. | quag wrote: | 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. | gaze wrote: | 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. | huhtenberg wrote: | > really, really expensive | | Can't find any pricing info on their website. How expensive is | "expensive"? | threatofrain wrote: | What is the largest open-source community for a K-like | language? | rscho wrote: | If you consider J K-like, then J. Otherwise, ngn K or Kona | gbronner wrote: | 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. | mlochbaum wrote: | 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 | Bostonian wrote: | Do Octave and R qualify as array languages? You could say | that Python is not because Numpy is not part of the language. | mlochbaum wrote: | It's hard to say how exactly to draw the line, but "array | language" to an APLer usually means a language whose | primary influence is APL. So these scientific languages | that throw out most of the syntax are nearby but don't | quite belong. From a practical standpoint the APL Wiki is | centered on APL and exists to document the kind of niche | material Wikipedia wouldn't cover, which is why there's | nothing about these more mainstream languages currently. | stingraycharles wrote: | I'd argue that array languages are far, far more limited | than Python, to the point that the only thing you can | reasonably do with them is processing array data (but | they're really good at it!) | mlochbaum wrote: | Sounds like you're generalizing, based on... early APLs? | NumPy? You could translate any BASIC code to, say, Dyalog | APL easily without significant loss in fidelity. | Different languages take different approaches but most | modern ones (the ones that aren't just made to be | calculators like Ivy) support either a generic functional | or imperative style just fine. | | K is inspired by Lisp, although you can't adapt that | style directly because of the limited scoping rules: | variables are either local or global, so a function can't | see variables from containing functions. This means no | closures, which K implementers consider a feature (I | don't). | eiz wrote: | > This means no closures, which K implementers consider a | feature (I don't). | | having not touched K in about 15 years, when did this | change? in k3: K 3.2 2004-09-23 | Copyright (C) 1993-2004 Kx Systems LIN32 16CPU | 15985MB ubuntu 0 EVAL | f:{a:x+1;{a+x}} g:f 1 g {a+x} | g 2 4 a value error a | ^ parse error | mlochbaum wrote: | This comes as a surprise to me! I thought none of | Whitney's Ks had closures--although I did neglect to | mention that kuc and oK add them. Digging around and | asking on the K Matrix/Discord I found some posts that | suggest that the K3 form is very limited. My read of | these is that functions can refer to variables in the | immediately surrounding scope (only one level up), and | their values will be copied in when the function is | reached in the source code. So it would be equivalent to | adding extra arguments to g and passing the variable | values in that way. And it wouldn't allow the programmer | to create object-like things and couldn't create | reference loops requiring garbage collection. | | See https://news.ycombinator.com/item?id=22572778, as | well as https://chat.stackexchange.com/transcript/message | /53999576#5... with more discussion on following days. | smabie wrote: | No closures is one of the biggest pain points of k/q, | it's incredibly limiting and frustrating. Besides that | though, it's a wonderful language which allows you to | solve problems _very_ quickly with pretty good | performance, assuming the problem is naturally | vectorizable. | [deleted] | aseipp wrote: | 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 | invalidOrTaken wrote: | 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! | nudpiedo wrote: | 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. | rscho wrote: | J runs on Android. To see J in action, you can check out | TangentStorm's channel on Twitch | CraigJPerry wrote: | BQN has an online repl | | https://mlochbaum.github.io/BQN/ | dotnwat wrote: | What does "k4 is proprietary" mean? Does that mean one way run | into problems building an open-source implementation of the | language itself? | huyage wrote: | Clicking on examples gives me 403. | AzzieElbab wrote: | Consider your self lucky | AzzieElbab wrote: | K and Q have to die along with MUMPS and maybe some other | sadistic experiments in pl development I may not be familiar | with | rak1507 wrote: | Why? | rscho wrote: | You could at least elaborate so we could tell you why | you're wrong :-D | dang wrote: | " _Please don 't post shallow dismissals, especially of | other people's work. A good critical comment teaches us | something._" | | https://news.ycombinator.com/newsguidelines.html | imachine1980_ wrote: | dumb question but where is the source ? what is the license?where | i can install the program(linux/ubuntu)? | marcelnita wrote: | K is proprietary and licensed by Kx Systems. Reading further on | it I gather it isn't cheap. | smabie wrote: | 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. | andylynch wrote: | I don't the Arthur Whitney feels like he missed out. | | Looking quickly at the revs for Julia and Lightbeam, KX are | doing rather better. | hogFeast wrote: | They have a huge database product (kdb). The company that | owns Kx is a billion dollar company. | | It really isn't clear to me why they do what they do (not | just with regards to the language). They have a large | consulting business (q/kdb consultants can make PS1k/day | easily) so it doesn't make a difference. I believe some | parts of q/kdb are open-source but some parts are not. And | I think this really does hurt them because there isn't a | big eco-system around their products (for example, they | have had to hire people internally to build ML libraries | for q). | | It is very weird: they are at the eye of the storm for data | analytics, their product is fast, they are growing modestly | doing lots of business with banks and in other industries | that need streaming analytics particularly...but they are | still niche, and growing a lot slower than you would expect | (part of this is that management insists on being | profitable...people rip on SV companies for not making | money...well, Kx are the other side of this...they are | modestly profitable, but not really growing). | | EDIT: I should add, if you see the stuff that is open...a | lot of the code is a total shitshow. | rscho wrote: | Given the combined cost of K licenses in banks and other | large companies, I'd say they are really far from having | messed up. The main goal of the company is not to promote K | the language. | rak1507 wrote: | commercial ks are not open source | | ngn/k is foss and can be installed on linux | https://codeberg.org/ngn/k | andylynch wrote: | 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. ___________________________________________________________________ (page generated 2021-09-11 23:00 UTC)