00:00:00 --- log: started forth/14.11.13 02:21:34 --- log: started forth/14.11.13 02:21:34 --- join: clog (~nef@bespin.org) joined #forth 02:21:34 --- topic: 'Forth Programming | logged by clog at http://bit.ly/91toWN | isforth.com | forthfreak.net | http://forthworks.com/standards/DPANS/ | www.greenarraychips.com' 02:21:34 --- topic: set by I440r!~mark4@cpe-192-136-220-10.tx.res.rr.com on [Thu Jan 02 15:51:09 2014] 02:21:34 --- names: list (clog proteusguy nighty-_ karswell ErhardtMundt samrat jab +bluekelp yiyus nox crc klltkr TodPunk quuxman DGASAU fantazo Azel joneshf bbloom_ MrMobius beretta protist backer Anarch DocPlatypus rixard nighty^ ggherdov` Adeon aksatac KipIngram bjorkintosh Quozl` carc irsol enthos cataska C-Keen ricky_ricardo nisstyre Zag diginet nottwo_ malyn_ yunfan danfinch tangentstorm rprimus_ newcup malyn dzho krainboltgreene koisoke djinni ttmrichter) 02:21:52 --- quit: DGASAU (Ping timeout: 245 seconds) 02:25:07 --- join: DGASAU (~user@p50993595.dip0.t-ipconnect.de) joined #forth 02:37:07 --- quit: proteusguy (Ping timeout: 258 seconds) 02:55:14 --- join: proteusguy (~proteusgu@ppp-110-168-229-96.revip5.asianet.co.th) joined #forth 03:23:33 --- quit: DGASAU (Remote host closed the connection) 03:25:16 --- join: DGASAU (~user@p50993595.dip0.t-ipconnect.de) joined #forth 04:00:41 --- quit: Azel (Ping timeout: 255 seconds) 04:21:39 --- quit: samrat (Quit: Computer has gone to sleep.) 04:31:16 --- join: Zarutian (~zarutian@168-110-22-46.fiber.hringdu.is) joined #forth 04:47:38 --- join: xyh (~xieyuheng@2001:250:3002:5550:6ea1:cc0f:bcb2:b187) joined #forth 04:51:57 --- quit: xyh (Remote host closed the connection) 05:00:51 --- join: true-grue (~grue@95-27-254-45.broadband.corbina.ru) joined #forth 05:54:54 --- join: samrat (~samrat@123.236.183.195) joined #forth 05:55:13 --- quit: DGASAU (Ping timeout: 245 seconds) 06:01:44 --- join: DGASAU (~user@p50993595.dip0.t-ipconnect.de) joined #forth 06:42:03 --- join: vanila (~user@unaffiliated/vanila) joined #forth 06:53:43 --- quit: DGASAU (Remote host closed the connection) 06:55:44 --- join: DGASAU (~user@p50993595.dip0.t-ipconnect.de) joined #forth 07:11:44 --- quit: Zarutian (Quit: Zarutian) 07:28:27 --- quit: vanila (Quit: Leaving) 07:42:19 --- quit: DGASAU (Ping timeout: 245 seconds) 07:47:43 --- join: DGASAU (~user@p50993595.dip0.t-ipconnect.de) joined #forth 08:14:48 --- join: vanila (~user@unaffiliated/vanila) joined #forth 08:16:13 hi 08:16:30 how to implement FIND? 08:16:47 depends how you implement your dictionary... 08:16:54 try typing 'see find' in a forth. 08:19:07 --- join: Zarutian (~zarutian@168-110-22-46.fiber.hringdu.is) joined #forth 08:19:39 https://bpaste.net/show/18bf9c8d0d39 08:19:47 that's how dictionaries are done 08:20:01 jonesforth implements FIND in assembly but I wanted to do it in forth 08:21:54 well, do you understand the basic idea of navigating a linked list? 08:22:03 yeah 08:22:40 I'll use @ I guess 08:22:46 to go to the next link 08:23:31 yeah.. probably [ dup @ ] because you'll want to traverse the list 08:23:47 does jonesforth have a 'words' implementation? 08:24:41 yeah it does! 08:25:06 cool. that's probably pretty similar, then. 08:27:35 I want to implement FIND in forth rather than assembly: Do you think that's a good idea? I'm worried it could make it harder for myself 08:28:03 it's a perfectly reasonable idea 08:28:11 thanks :D 08:28:12 there's no reason find needs to be in assembly. 08:28:40 that's part of what's cool about forth... it doesn't matter how you implement any particular word, as long as the semantics are what you expect. 08:28:56 There are reasons why it should. 08:29:35 Though they are no more relevant than the toy language itself. 08:29:53 Always the cynic DGASAU 08:36:28 I cant run jonesforth 08:36:34 but i want to practice with linked lists 08:36:43 I wonder what forth i should use to practice? 08:37:28 gforth? yourforth? doesn't really matter. i like retroforth but it strays pretty far from the standard if that's important to you. 08:38:00 Both, pForth and FICL implement dictionary with SLLs. 08:41:40 $ ./kernel.com 08:41:40 ok 08:41:40 2 3 + ; 08:41:40 2 3 + ; Segmentation fault (core dumped) 08:41:42 isforth 08:42:14 isforth? 08:42:35 vanila: so? 08:43:18 the ; is hurting you. 08:44:11 dont use ; in immediate mode. 08:44:41 There's no "immediate" mode. 08:44:56 is 4th good 08:45:04 No. 08:45:30 some people find it helpful to /ignore DGASAU ... :) 08:45:46 hahaha 08:46:43 DGASAU: if you're anti-Forth why are you here? 08:46:51 I never really understood that 08:47:13 He certainly knows plenty about several Forth systems 08:47:17 He's a devil's advocate bot, prolly. 08:47:25 DocPlatypus: That's no wonder with your brains. :) 08:47:32 hey generates chat. 08:47:41 *he* generates chat. 08:48:16 star star star *** ok 08:48:21 I got isforth working :) 08:48:25 hooray 08:48:46 vanila: only use ";" after a ":" ... until you know what your are doing... 08:48:54 ^ 08:49:03 huzzah! 08:49:52 DGASAU: you didn't answer my question 08:49:54 DGASAU: if you're anti-Forth why are you here? 08:50:22 thanks 08:50:28 I dont think i ahve it set up right 08:50:37 vanila: you can also type ./extend, and then ./isforth 08:50:38 ObSheesh: Sheesh. 08:51:26 : stars 0 do star loop ; do ? 08:51:30 i dont have do 08:51:34 DocPlatypus: I answered it several times, since you haven't understood the answer, there's little chance that you'll do ever. 08:51:50 ok! 08:51:51 ill try 08:52:49 I mean... I never see proprietary software proponents in #fsf. I don't even see anti-P2P people in #transmission. 08:53:07 it doesn't let me quit :( 08:53:13 vanila: "bye" 08:53:17 ^ 08:53:21 thnak you :) 08:53:34 but I think vanila, beretta, jab, tangentstorm, and the others here know the answer. and I'm asking on their behalf as much as mine. 08:53:52 come to think of it I don't think you've ever given me a straight answer any time I've asked you 08:54:01 at least I sure as hell don't remember getting one 08:54:05 bot 08:54:09 nor i.. :) 08:55:09 I mean... I once heard of a golfer crashing a Star Trek convention and yelling "Fuck Spock!" 08:55:17 but that's because he had a really bad game 08:55:41 hahaha 08:55:58 --- join: joneshf-laptop (~joneshf@98.208.35.89) joined #forth 08:56:03 haha 08:56:14 was about to say sorry if I offended someone but apparently I didn't 08:56:39 actually, if you were offended by a swear word, news flash: real life is not rated G 08:57:42 so if I work inside isforth for a while, how could I save my words out? 08:57:58 sorry for many beginner questions, just starting.. 08:58:13 no sweat vanila. 08:58:16 generally what I do in GNU Forth (gforth) is write in a .fs file and then load that in 08:58:39 gforth also saves everything to a history file 08:58:44 I'm not sure what exactly isforth does 08:58:58 I no not of isforth 08:58:58 alright :) 09:01:04 is there reason use picked isforth? gforth is kinda standard for linux. 09:01:41 /topic 09:02:27 oh... never actually read the topic! 09:03:07 that's funny. I just went to freenode and joined #forth... figuring there had to be some channel for forth. 09:06:30 most programs g are bad 09:06:32 --- join: xyh (~xieyuheng@2001:250:3002:5550:6ea1:cc0f:bcb2:b187) joined #forth 09:06:52 maybe gforth is really good, but that's why I tried isforth first 09:07:01 (e.g. gprolog) 09:07:31 another one you can try is revaforth 09:10:59 * tangentstorm wonders why we still don't have a forth eval bot. 09:11:19 tangentstorm, who has implemented that wrapper? 09:11:19 * DGASAU laughs. 09:11:33 tangentstorm: good idea! 09:11:37 I really would love to see some webkit or somethign similiar. 09:12:08 there was a forth irc client posted to http://reddit.com/r/forth a while back 09:12:32 http://www.reddit.com/tb/2j5etx 09:13:14 it's a few years old, but apparently it was made by someone in this channel... (or maybe on another irc network?) 09:13:26 I wasn't in here for months and nothing has changed, still a grumpy DGASAU in here making fun of forth. I mean he is right in some of his points. But making the whole idea of a concatenative language down isn't in my opinion good. 09:14:20 It's been a couple years since I've been here 09:15:04 https://bpaste.net/show/e5f5cf30eb3c I wriote my first forth program :) 09:15:42 vanila, we are proud of you ;-) 09:16:34 vanila: very cool 09:18:51 fantazo: "concatenative" languages have more subtle drawbacks, those are a lot harder to explain to local luddites. 09:20:28 For start, most (if not all) "concatenative" languages implement lambda abstraction or closure capturing in such a way that defies concatenative properties. 09:20:51 example 09:22:45 http://docs.factorcode.org/content/article-syntax-quots.html 09:23:22 --- quit: fantazo (Ping timeout: 240 seconds) 09:23:37 DGASAU: this is a good or bad example? 09:23:47 I think Factor's quotes are awesome. 09:24:20 It is a syntax for anonymous function. 09:24:29 That they are "awesome" is known since Lisp. 09:25:09 I find Forth easier to use than Lisp 09:25:17 After you identify that constructs like these break "concatenativeness", 09:26:25 you see that "concatenative" languages are nothing more than quirky implementation of something reminiscent of classical FPL. 09:26:52 If you find Forth easier than Lisp, you haven't written any complex program. 09:27:03 I have written complex programs 09:27:25 though, your idea of "complex" is probably arbitrary enough that automatically it must not be complex enough if I'm saying what I am 09:29:05 to be concatenative is to optimize syntax for function composition, while lisp's syntax is optimized for function application. no "which is better then which" here. 09:29:17 ^ 09:37:01 --- join: fantazo (~fantazo@089144210205.atnat0019.highway.a1.net) joined #forth 09:51:29 --- quit: xyh (Remote host closed the connection) 09:54:11 --- join: impomatic (~chatzilla@235.198.208.46.dyn.plus.net) joined #forth 09:54:11 --- join: impomatic_ (~digital_w@235.198.208.46.dyn.plus.net) joined #forth 10:02:08 --- join: john_metcalf (~john_metc@235.198.208.46.dyn.plus.net) joined #forth 10:03:27 corewars probably sucks :-] 10:06:01 it most definitely suck. 10:06:36 silly imps,bombers,paper analogies. 10:06:40 the concept of corewars is interesting, I never got to play it 10:07:22 I made a program to genetically evolve corewar warriors from randomness. 10:07:33 it was a fun experiment. 10:28:53 * john_metcalf plays core war. We've just held a tournament :-) 10:31:30 --- join: DKordic (~user@109-92-205-94.dynamic.isp.telekom.rs) joined #forth 10:41:18 --- quit: jab (Ping timeout: 255 seconds) 10:43:23 --- join: jab (~grue@54027CF7.dsl.pool.telekom.hu) joined #forth 11:01:35 There's a #corewars channel on Freenode. Or there are games like Crobots where you write a program in C to control a simulated robot which battles someone else's bot. 11:01:42 "Concatenative" languages don't optimise syntax for function composition. 11:01:50 I wish someone would write a Forth version :-) 11:20:07 DGASAU, what criteria should meet a language with a syntax optimized for function composition? factor certainly can do that and I don't see why that shouldn't be optimized. 11:20:50 DGASAU, if you insist on lisp languages then you have a very narrow view on "optimized syntax". 11:23:13 fantazo, lisp is excellent with syntax 11:24:45 Function composition should be expressed as close to canonical way as possible. 11:25:19 All languages of ML family pass this criterium. 11:38:52 canon is subjective 11:42:51 No, it isn't. 11:43:25 You've got all the notation developed not by single person. 11:43:50 Not even by clearly defined community. 11:44:48 Well, I meant. There is no canonical way to do it, there are dozens of ways to do it. You're thinking in a very narrow-minded fashion. 11:45:35 No, there is canonical way to do it. 11:45:43 Variations are quite small. 11:45:45 So, I haven't been here in a long time. And I've only been here the past few days, so I haven't heard your reasons for staying in this channel if you loath forth/concatenative languages so much. May I ask why? 11:46:32 Devil's advocate? Forced to use it at your job? Bad experience when you were younger? 11:46:55 No. 11:49:34 None of the above? 11:57:47 probably because the language is just bad and everybody needs to be advised against it ;-) 11:58:12 those who have come here have already decided to use Forth 11:58:25 I mean, it's no "help" to them to tell them to use something else or say Forth sucks 11:58:36 (ah I see why my general interest in languages was partly rocketed into the ground) 12:00:11 to be fair at one time they accused me of being "anti-design" in EFnet #webdesign 12:00:47 I'm not anti-design, I'm anti-stupidity. it's possible to have good design that's not held together with five layers of duck tape, Javascript, and Flash that breaks completely on non-supporting browsers 12:03:09 at one time I may well have been anti-Forth too 12:03:23 but the language does have many strengths 12:04:43 --- quit: bbloom_ (Quit: Textual IRC Client: www.textualapp.com) 12:06:02 --- join: Mat3 (~Mat3@ip5b414c9f.dynamic.kabel-deutschland.de) joined #forth 12:06:58 DocPlatypus, you just haven't jumped on the ux design bandwagon yet ;-) 12:07:35 there is good design... and then there is junk like making the text flyshit-sized to be "cool" 12:08:04 I had my font size cranked up a little so I could read the text, not so some deeziner could ratchet it right back down to 8px again 12:15:59 So, the problem is actually in descaled fonts rather than in Javascript. 12:23:52 I thought about reducing stack shuffling to bare minimum and a simple way to exploit local access. My solution is implementing a small circular stack with only one operator for direct access: 'pick' which copy the n'th stack item to TOS whereby pick 0 = dup 12:26:07 does someone here know about a Forth version which implement such a stack organisation ? 12:27:55 If you have directly addressable shallow circular stack, you can have register file of the same size at the same expense in VM implementation. 12:31:30 yes, that's the idea 12:31:51 works quite nice by the way 12:32:57 tha backend uses a set of real registers 12:34:41 What is the reason to implement extra indirection level that implements stack-based VM on top of it? 12:38:26 interesting 12:39:24 mats: I think J1 makes pick a primitive 12:39:25 a stack representation is implicit serial in nature which can be seen as some kind of left-sided SSA representation. This way most SSA related optimizations are applicable by the frontend without expensive register sheduling. Beside that, the code format can be compact which is important for cache usage 12:41:07 beretta: Hmm, I must take a look at the J1 paper again, thanks 12:42:00 If you're going to use your "pick" frequently, you may forget about code density. 12:42:35 hmmm. maybe it's not j1 12:43:14 a little huffman encoding and code density goes away. 12:43:16 "op1 pick op2 pick opcode" is the same as "opcode op1, op2", only with fetches implemented as separate operations. 12:43:45 DGASAU: no, there are 16 instructions which are combined to an 8-bit opcode. Pick is one instruction with an immediate 4-bit operand 12:44:26 so: op1 pick <- one opcode 12:44:34 works for me. 12:44:42 Yes, that's what I mean. 12:44:53 You get 3 instructions instead of one. 12:45:22 opcodes are dispatched, not single instruction ! 12:45:27 and "4 pick" is resonable enocded in my MLs 12:45:37 in *most* MLs, that is 12:45:45 "op1 pick" - 1 opcode, 12:45:51 "op2 pick" - 1 opcode, 12:45:56 "opcode" - 1 opcode. 12:46:00 Total: 3 opcodes. 12:46:07 "opcode op1, op2" - 1 opcode. 12:46:13 Total: 1 opcode. 12:46:18 See? 12:46:49 yes, but up to 16 instructions are bundled to a dynamic super-instruction 12:47:51 the whole dispatch is really virtual done before interpretation (see, as written before frontend -> backend code translation) 12:49:15 dispatch != execution 12:49:22 oh well... 12:49:24 If you start from stack-based VM, then the first optimisation is 1-operand accumulator VM. 12:49:47 The second is getting from 1-operatnd accumulator machine to 2-operand machine. 12:50:08 Thus you get to modern CPU like ARM. 12:50:26 you propose nonsense, that's only one possible strategy 12:50:37 --- quit: nighty-_ (Quit: Disappears in a puff of smoke) 12:51:14 as written cache usage is important (even for modern Intel CPU's) 12:52:00 --- quit: impomatic_ (Ping timeout: 244 seconds) 12:52:30 You don't improve that by implementing accumulator machine. 12:52:31 and addressing registers relate to higher coding effort 12:55:42 DGASAU: It's not an accumulator design. In fact what I try to explain before has really nothing to do with an accumulator/store design. It's an environment for AOT compilation of basic blocks by transforming a stack based ISA 12:57:21 Do you mean "IR" instead of "ISA"? 12:57:32 yes 12:57:49 just read it as immediate represenation 12:57:57 intermediate 12:58:03 thanks 12:58:15 Alright, that makes more sense. 12:58:44 First question is, why do you want to use that inefficient IR? 12:59:02 * beretta slaps his head 13:00:02 You have better IRs (ANF, SSA). 13:02:43 --- quit: fantazo (Ping timeout: 240 seconds) 13:02:59 it's far from inefficient, Code depth is high, as written stack based code formats *are* already in some kind of (uncommon) SSA form + porting to different CPU architectures is easy 13:04:47 If you consider stack-based IR as a kind of SSA, then you have a lot of copying and moving operations there. 13:07:58 E.g. after you have performed optimisations on your IR, 13:08:02 *argh* no, I've written before a stack based code format allows static bundling of whole instructions sequences whereby this is not possible with a register based design because of the higher encoding demand for register fields 13:08:23 with canonical SSA you may reach more optimal code that isn't your special SSA. 13:09:35 If you use SSA as IR, you can combine IR code and perform further optimisation on it. 13:11:10 probably. However, the resulting code is already quite good so I do not see a reason for this 13:12:44 A canonical? SSA based IR as you suggested is LLVM, which code quality is somewhat debatable in relation to the needed compilation time 13:13:16 it's also a quite large code base 13:15:28 --- join: fantazo (~fantazo@089144211109.atnat0020.highway.a1.net) joined #forth 13:15:49 if I see the need for runtime-intense and resource intensive code generation, than I'm free to use it as alternative and profitable from the large community around this project ;) 13:17:38 anyhow. For classic imperative languages such as C I think it's great 13:18:41 ciao 13:18:59 --- part: Mat3 left #forth 13:38:29 --- quit: samrat (Quit: Computer has gone to sleep.) 13:38:35 --- quit: DGASAU (Ping timeout: 245 seconds) 13:42:36 --- join: DGASAU (~user@p50993595.dip0.t-ipconnect.de) joined #forth 13:42:54 --- quit: vanila (Quit: Leaving) 13:43:17 --- quit: true-grue (Read error: Connection reset by peer) 14:41:23 who says actually that the canonical form of writing a formular is the only allowed and best way to write it syntactical? 14:41:50 this doesn't represent what programming languages were historical. 14:43:13 I see in that regard only opinions and opinions + I-know-more-than-you-so-I-am-right-bullshit 15:14:21 If you look at how early programming languages developed, 15:14:35 you notice that they repeated the story of mathematical notation. 15:15:25 From "o-matic" languages and COBOL that tried to be closer to natural language (English) 15:15:40 they converted to algebraic notation wherever they could. 15:19:44 --- join: Azel (~Thunderbi@ANice-653-1-594-196.w86-193.abo.wanadoo.fr) joined #forth 15:48:18 --- quit: fantazo (Quit: Verlassend) 15:52:54 --- join: ehaliewicz (~user@204.11.226.50.static.etheric.net) joined #forth 16:37:22 * Zarutian isnt a fan of algebraic notation. 16:37:52 --- quit: protist (Ping timeout: 264 seconds) 17:21:39 --- quit: ehaliewicz (Remote host closed the connection) 17:21:53 --- join: ehaliewicz (~user@204.11.226.50.static.etheric.net) joined #forth 17:29:52 --- quit: ehaliewicz (Remote host closed the connection) 17:30:08 --- join: ehaliewicz (~user@204.11.226.50.static.etheric.net) joined #forth 17:47:49 --- quit: Zarutian (Quit: Zarutian) 19:00:15 --- quit: ehaliewicz (Ping timeout: 272 seconds) 19:11:41 --- join: PoppaVic (~pops@unaffiliated/poppavic) joined #forth 19:22:33 --- quit: impomatic (Read error: Connection reset by peer) 19:25:50 --- part: PoppaVic left #forth 19:44:56 --- join: samrat (~samrat@123.236.183.195) joined #forth 20:49:42 --- quit: samrat (Quit: Computer has gone to sleep.) 21:10:55 --- quit: DKordic (Quit: ERC Version 5.3 (IRC client for Emacs)) 21:39:00 --- join: samrat (~samrat@61.12.96.226) joined #forth 21:48:37 --- join: protist (~javery@14.224.69.111.dynamic.snap.net.nz) joined #forth 21:50:31 --- join: bbloom (~bbloom@cpe-68-175-72-82.nyc.res.rr.com) joined #forth 22:16:21 the problem with algebraic notation is constructs like 2*3+4*5+6/7 22:18:02 the answer can be either 26.857142... (26+6/7) or 8 or something else depending on how it's parsed 22:18:17 postfix notation lets you specify: 22:18:31 2 3 * 4 + 5 * 6 + 7 / 22:18:34 or 22:18:50 DGASAU, just catching up on your conversation. What is ANF intermediate representation? I know SSA of course. 22:18:57 2 3 4 + * 5 6 + * 7 / 22:19:01 or whatever you actually mean 22:22:04 Do you suppose scientific calculators use RPN because it was easier to implement or because it was non-ambiguous? I think it suggests RPN is certainly the best way to calculate such things but not sure about reading/reasoning it. 22:24:32 * tangentstorm is not convinced it's the 'best' way... 22:25:21 2 3 4 + * 5 6 + * 7 / can mean lots of things depending on how it's parsed, too. :) 22:25:32 not really 22:25:35 rpn is just a particular convention about how to parse things. 22:25:47 sure it can. 22:26:43 how so? how do you get any answer besides 22? 22:26:59 tangentstorm, if you're assuming stack based implementation I don't see any other possible result. 22:27:01 2 3 4 + * \ add 3 and 4, multiply result by 2 22:27:02 how about 22:27:05 2 3 4 + * 5 6 7 + * 7 8 9 22:27:14 the answer is 3 4 5 according to my interpreter. 22:27:37 5 6 + * \ add 5 and 6, multiply previous result by sum 22:27:44 is the "answer" is top of stack then your last example is 9. :) 22:27:46 7 / \ divide intermediate result by 7 22:29:35 you're saying that if you assume a particular scheme for interpreting input, the answer is unambiguous. 22:29:36 DGASAU, (found my answer - A-normal form) 22:30:27 this is true of pretty much any language though. 22:30:40 it just happens to have a simple ruleset. 22:31:09 the interpretation of 2 3 4 + * 5 6 7 + * 7 8 9 that gives 3 4 5 is just as simple. 22:31:30 Well that's like saying you can implement an OO construct in C but C++ just happens to have a simpler syntax. If code is primarily written to be understood by humans than this is a high consideration. 22:52:39 I think code is primarily written to accomplish an end. 22:52:52 The fact that it's easier to accomplish this end if humans can read it is a side detail. 22:53:43 It is possible to go waaaaaaaaaaaaaaaaaaaaaaaaaaaay too far into "human readable" territory to the point that it interferes with the code's primary purpose (which is, recall, getting shit done). 23:00:05 ttmrichter: code needs to be human readable to be maintainable 23:00:20 But "human readable" is a scale. 23:00:43 And code that slants too much toward "human readable" has its own problems, even problems that interfere with maintenance. 23:02:16 also 'human readable' is a fluid concept. 23:04:18 okay... let me rephrase that 23:04:29 in order for me to maintain code, I have to be able to figure out what it does 23:04:58 and I am guessing other programmers would as well 23:05:55 Right. 23:06:04 Which is a tension between "human readable" and "trained humans". 23:06:28 And what some humans consider "unreadable" is really translated into "I haven't learned it". 23:07:07 For example, when it was all the rage in Rubyist circles to look at Erlang, they boldly announced that Erlang's syntax was "unreadable". 23:07:39 But actual Erlang users? They didn't think that. And indeed people like me, who know both languages, think Erlang code is MORE "readable". 23:09:54 * tangentstorm has learned to read j and perl and even FORTH! 23:10:11 Yeah, J is not one I can read. Nor is it one I want to read. 23:10:16 * tangentstorm also remembers how unreadable python was when he first saw it. 23:10:37 Which is funny because Pythonistas are always talking about how readable it is. :D 23:11:35 i wound up using it as my main language for many years, and my previous main language was perl... it's all just a matter of perspective. 23:11:48 I used Python for ages too. 23:11:52 you just have to train your eyes to see it. 23:11:56 From 1.something to about 2.3. 23:12:14 forth and j are both very 'horizontal' languages... 23:13:15 My thing with J is that it leans far too far over to the "not human readable" side of things. When I have J's *fans* tell me that it's usually just easier to rewrite code than it is to figure out what it's doing, this is anathema to me. 23:13:57 (If this is not an accurate description of J, then J's fans need to work on their PR...) 23:16:08 well i think that's a sideeffect of the way it's written. 23:17:03 i tend to write j at the prompt, and then if i want to keep it, go back and clean it up. 23:17:16 but not everybody does the 'clean it up step' 23:59:59 --- log: ended forth/14.11.13