7 ms·
K Programming Language
- Jenk 5y agoMaybe 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 5y agoThe 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 5y agoYou’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.
- civilized 5y agoAnd 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.
- IshKebab 5y agoHmm 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.
- rak1507 5y agoMany people can read it easily. Developing things in a repl is common in many languages, it doesn't mean the code is unreadable.
- Nekorosu 5y agoIt’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.pdf https://www.eecg.utoronto.ca/~jzhu/csc326/readings/iverson.p...
- beagle3 5y agoYea 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.
- invalidOrTaken 5y agoComment from a year ago(https://news.ycombinator.com/item?id=22562344 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 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 5y agoIt’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 5y agoJ runs on Android. To see J in action, you can check out TangentStorm's channel on Twitch
- CraigJPerry 5y agoBQN has an online repl https://mlochbaum.github.io/BQN/ https://mlochbaum.github.io/BQN/
- dotnwat 5y agoWhat does "k4 is proprietary" mean? Does that mean one way run into problems building an open-source implementation of the language itself?
- maximus-decimus 5y agoIt'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.
- opencl 5y agoThere are some a few public docs. https://estradajke.github.io/k9-simples/ https://estradajke.github.io/k9-simples/ https://code.kx.com/q/learn/ https://code.kx.com/q/learn/
- quag 5y agoK 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.
- enduku 5y agoSimilar 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
- gaze 5y agoK 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.
- mlochbaum 5y agoThere'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 https://codeberg.org/ngn/k [1] https://aplwiki.com/wiki/List_of_open-source_array_languages https://aplwiki.com/wiki/List_of_open-source_array_languages [2] https://k.miraheze.org/wiki/Main_Page https://k.miraheze.org/wiki/Main_Page
- Bostonian 5y agoDo Octave and R qualify as array languages? You could say that Python is not because Numpy is not part of the language.
- stingraycharles 5y agoI’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 5y agoSounds 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).
- imachine1980_ 5y agodumb question but where is the source ? what is the license?where i can install the program(linux/ubuntu)?
- marcelnita 5y agoK is proprietary and licensed by Kx Systems. Reading further on it I gather it isn't cheap.
- smabie 5y agoIt 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 5y agoI 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 5y agoThey 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 £1k/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.
- huyage 5y agoClicking on examples gives me 403.
- AzzieElbab 5y agoConsider your self lucky
- AzzieElbab 5y agoK and Q have to die along with MUMPS and maybe some other sadistic experiments in pl development I may not be familiar with
- rak1507 5y agoWhy?
- rscho 5y agoYou could at least elaborate so we could tell you why you're wrong :-D
- dang 5y ago"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 https://news.ycombinator.com/newsguidelines.html