00:00:00 lucidalise: Exactly! 00:00:14 hahaha. youtube fungot is my new favorite. 00:00:15 CakeProphet: of course. seriously, read description :) haha, this movie or hitman? ( watching smoz tuck his tail) this song 00:00:45 fungot: This is not a movie? 00:00:46 zzo38: hey guys! check out second from disaster on discovery channel, minus the french are surrender monkeys, nuff said. 00:01:01 calamari: okay. so custom asm? 00:01:13 CakeProphet: okay 00:01:31 !haskell main = loop 1; loop n = do putStr (' ':show n); hFlush stdout; 00:01:40 ^style -1 00:01:41 Not found. 00:01:46 our asm will essentially need to be a simple register machine with some hardware operations I think? 00:01:53 !haskell import System.IO; main = loop 1; loop n = do putStr (' ':show n); hFlush stdout; 00:01:56 1 00:02:04 Do you like GNU long options? Or not 00:02:16 wth. oh. 00:02:22 !haskell import System.IO; main = loop 1; loop n = do putStr (' ':show n); hFlush stdout; loop (n+1) 00:02:28 CakeProphet: sounds good to me 00:02:45 siduxgor: ok so even explicitly flushing doesn't help... 00:02:51 oerjan: yeah I was about to say. not recursive. 00:03:20 -!- relet has quit (Quit: Leaving.). 00:03:57 -!- augur has quit (Remote host closed the connection). 00:04:03 -!- augur has joined. 00:04:44 calamari: a plan 9 approach would result in a small instruction set. Simply delegate hardware to a filesystem, and then support filesystem operations? 00:04:56 or is that getting too complicated already? 00:05:05 I don't think we need to worry about that yet 00:05:16 but maybe I am misunderstanding 00:05:22 what are you even doing 00:05:27 lucidalise: pipe dream 00:05:37 sounds like a very un-pipey pipe dream. 00:05:43 the ever vaporware esoteric os 00:05:50 ah yes. ESO. 00:06:09 calamari: Well since our asm is going to run standalone it does need native support for hardware, right? How do other virtual asms do this? 00:06:23 Um ... ports. 00:06:32 Mapped memory. 00:06:40 ports sounds like a good idea 00:06:50 Does Plain TeX have any blackboard bold? (Even if so, I don't plan to use blackboard bold for !! operator) 00:06:51 Mapped memory is best if you're on 64-bit. 00:06:55 Try doing VGA with ports. 00:06:58 zzo38: No. 00:07:02 zzo38: You need AMSLaTeX for that. 00:07:03 calamari: this is new to me. I don't know much about OS design, obviously. :) 00:07:42 is it similar to the idea of ports in Erlang? 00:07:48 No. 00:07:57 You just have read byte from port, put byte to port operations. 00:07:58 lucidalise: won't have to worry about it.. sticking with text mode I am sure 00:08:06 in Erlang a port is an abstract "thing" you can read to and write from 00:08:15 calamari: Some pipe dream. 00:08:20 a "port driver" implements the hardware access. 00:08:32 -!- MigoMipo has quit (Read error: Connection reset by peer). 00:08:54 Also should I make it treat {} as a single operator or not (even if so, you can override it by adding a space { } if you want it separate) 00:08:57 lucidalise: ESO is the duke nukem forever of the esoteric world :) 00:09:06 zzo38: Keep it seperate. 00:09:18 {} is usually pointless in C as opposed to ;. 00:09:35 Maybe set a control structure followed by ; differently. 00:09:37 I use {} for function stubs. 00:09:40 Bold the ; and adjust the spacing, say. 00:09:44 CakeProphet: Well, true. 00:09:47 But no need to set it differently. 00:10:04 I don't know what the problem at hand is. So I have nothing else to comment. :) 00:10:12 Typesetting C. 00:10:19 ...ha. 00:10:26 "Ha"; you mock Knuth. 00:10:28 WEB is his work. 00:10:31 Well, it was Pascal then. 00:10:40 But now it is C, and Knuth uses CWEB, which iirc he co-authored. 00:10:40 WEB? 00:10:45 is that kind of like G.E.B? :P 00:10:46 It invented literate programming. 00:10:51 You fail forever. 00:10:52 I sometimes write like while(f(x)) {} instead of ; because it is less confusing if I write {} after a control structure instead of ; 00:11:07 lucidalise: hey. We all can't know everything about everything. :P 00:11:19 some of us can pretend to though. 00:11:20 CakeProphet: Mocking Knuth, then ignorance of one of his projects -- unforgivable! 00:11:25 You shall perish. 00:11:40 WEB was with Pascal, now CWEB is like WEB but C, and now Enhanced CWEB, which is my own, adds some features such as line-numbers and meta-macros. 00:11:52 neat. 00:12:07 -!- siduxgor has quit (Quit: Page closed). 00:13:06 calamari: I think you'll probably need to design the VM then. :P 00:13:20 the asm, that is. 00:13:46 if the assembler can be written in any language. I'd love to write it in Haskell using the Parsec library. 00:13:57 CakeProphet: sounds good 00:13:59 Surely you need machine code? 00:14:24 We need more machine code! 00:14:29 well, "the asm" is the machine code. Our vocabulary needs an adjustment I suppose. 00:14:42 yes, that was my bad wording before 00:14:48 the assembler takes "the assembly code" and makes the virtual machine code. 00:15:00 so right now we're working on the machine code. 00:15:03 Enhanced CWEB prints ++ and -- as up and down arrows. Assignment = is printed as a left arrow. == is printed as a single equal sign and != as a not-equal sign. Compound assignment operators such as += or |= is printed as the operator with a left arrow above the operator. 00:15:21 CakeProphet: what I 00:15:32 calamari: /can/ the assembler be in any language? Shouldn't we have one for the OS itself at some point? 00:15:41 Line numbers are printed in small numbers on the right side of the page, with a dot on the left side and a dot on the right side. 00:15:41 CakeProphet: what I'm thinking about is the translation of something like interrupts into a queue 00:16:06 zzo38: making a C obfuscator? 00:16:21 calamari: hmmm, aren't ports also a kind of queue? 00:16:23 Zuu: No. 00:16:25 CakeProphet: yep, it's a good point 00:16:33 CakeProphet: that was in reference to the asm 00:16:35 calamari: so you could unify that. Interrupt = port 00:16:57 hm 00:17:28 calamari: okay here's what we should do. The assembler should be written in an esolang that we eventually intend to compile into our assembly. 00:17:34 CakeProphet: rewriting the assembler and compiler to run under the actual system is so far in the future we shouldn't even worry about it right now 00:17:55 calamari: ah. yeah that's true. I can make a Haskell assembler and then the ESO assembler can be written in an esolang. 00:18:14 I'll just need a spec of the language. 00:18:22 I mean if the worst happens we could code it in bfbasic lol 00:18:41 everything useful should be done in befunge. like fungot. :) 00:18:41 CakeProphet: omg i busted a gut laughing when this accident happened in 1988 and there was more than a few of us will focus on what you say is shame 00:19:01 but my guess is that it wouldn't be terribly difficult to write the assembler in almost any esolang 00:19:16 maybe. I'm not a master of esolang programming. 00:19:39 programming anything in brainfuck looks like... black magic to me 00:19:40 I've written an asm for bf.. it was lame tho 00:19:53 bootstrapped it I mean 00:20:06 let's not use that asm ;) 00:20:11 I suppose the assembly language will take a simple command format right? like most assembler. 00:20:16 instr arg1 arg2 arg3... 00:20:20 yep 00:20:24 newline terminated? 00:20:29 yep 00:20:35 commas or space? 00:20:49 traditionally both 00:20:57 hmmm, okay. 00:21:13 for example MOV AX,1234 00:21:14 then I can actually go ahead and write an assembler, and then fill in the instructions later. 00:21:33 I'll just need to figure out the format of an argument. but the instruction part will be simple. 00:21:57 I've recently written an assembler using flex/yacc 00:22:06 is it a pain or simple? 00:22:09 but I know you want to use haskell so that's fine 00:22:51 wasn't that big a deal but it took some time 00:23:02 although that was mostly due to my divorce hehe 00:23:09 I've just finally got to a point where Haskell is easy to think in, so I prefer to use it when I can. I suppose which language we use for this "cross-assembler" doesn't matter. 00:23:44 anything that we intend to run on the OS itself needs to be an esolang though. for maximum esotericity. 00:24:06 hmmm. we VM design would be best for most esolangs anyways? 00:24:08 *what 00:24:50 for example, would befunge run better on a register or a stack machine? Or does it even matter? 00:24:56 I'll get dissapointed if it wont be good for my esolang :P 00:25:39 CakeProphet: a stack can be easily implemented via pointers 00:25:58 yeah, I suppose it doesn't matter. I've always preferred register machines to stack anyway. Dunno why. 00:26:38 should our assembler be type safe? :P 00:26:49 CakeProphet: there are no types to worry about 00:26:58 surely a port is different from a register. 00:27:26 or is it all implemented with pointers? 00:27:32 and words and such? 00:27:39 well I'm not sure we have decided on ports yet 00:28:28 ...it seems like this best abstraction for an IO device. I'm not sure how interrupts would work with it though. It seems you'd want to specify interrupt handlers, otherwise you'd end up polling for the interrupt, which is counter-intuitive. :P 00:28:45 -!- pikhq has joined. 00:28:56 yeah that's kinda the problem 00:29:09 for example in bf you do a , and magically get input (eventually) 00:29:21 Hooray, the power's back. 00:30:00 calamari: well it blocks. The port can just have a block on read operation. 00:30:11 er, block-until-read 00:30:46 I think OK for stack+register mode, where you have both, as well as special registers for top of stack value, second of stack value, and having multiple stacks (two stacks should be enough, but you can also have a way to select other register for stack) 00:31:02 Maybe you can even have a register to select which other register is treated as instruction pointer 00:31:25 Or have two separate modes one for reading the instruction and one for advancing the instruction 00:31:36 I'd say two stacks at the most 00:31:39 and special registers for each 00:32:17 Yes, two stacks is enough for machine-codes, I think. 00:32:25 I think supporting both stacks and registers is a good idea as many esolangs use stacks heavily. 00:32:49 okay so we can have a 32-bit stack pointer register 00:33:11 CakeProphet: Yes. And some can use some registers as well 00:33:25 yeah... 00:33:26 but I'm not sure why it would have to be cordoned off that way 00:33:44 and I like the port idea, unless there's a better way to handle hardware. And interrupts are still an open question. 00:33:46 Some esolangs have one "accumulator" register 00:33:57 since any other register that you could dereference could also serve 00:34:09 calamari: makes it easy for esolangs to be ported to our machine code if it supports both rather than requiring stacks to be done with registers. 00:34:47 I guess? 00:35:25 I believe ports is how BEAM handles hardware. ports with port drivers. 00:35:42 well for example 8088 has a PUSH instruction, which basically changes a stack pointer value and writes the value (or the reverse, can't recall atm) 00:36:10 so what you're saying is with the right instruction set there is no need to have an abstraction of a stack? 00:36:18 correct 00:36:22 then that's fine. 00:36:58 so, to elaborate on the idea of ports. I'd say you basically have an instruction that creates a new port, and stores its address in a supplied register. 00:37:20 and then you have read/write/block-until-read operations that operate on the ports address/handle. 00:38:01 and the create-port instruction could have some means of specifying the "port driver" (to use the Erlang analogy), which is the native code that speaks to the hardware. 00:38:10 I don't know what that would be though. 00:38:14 usually the ports are prenumbered 00:38:28 ah, so they can't be dynamically allocated? 00:38:32 although I suppose we don't have to do it that way 00:38:32 in most systems? 00:39:11 well with a VM there's no real reason to have a fixed set of locations for everything 00:39:22 Parrot, for example, allows you to dynamically allocate new registers. 00:39:31 real ports are actually a pain to work with 00:39:53 all sorts of timing issues and crap.. since you're talking directly to hardware 00:40:07 but we can remove that via abstraction right? 00:40:31 http://www.kernel.org/doc/man-pages/online/pages/man3/fopencookie.3.html 00:40:34 huh. 00:40:38 at least for the VM. maybe not for the hardware code. 00:40:48 CakeProphet: just memory map stuff 00:40:50 a lot easier. 00:40:55 use 64-bit addr space 00:41:14 memory mapping is new to me as well, actually. 00:41:20 * CakeProphet is a low-level noob. 00:44:40 almost got it I thik 00:44:55 CakeProphet: simple 00:45:04 some part of memory address space, rather rh 00:45:04 Parrot has a mechanism where you essentially assign newly created registers to variables. 00:45:09 than actually going to ram 00:45:14 gets its requests for writes and reads sent to some hardware 00:45:16 which responds accordingy 00:45:19 *accordingly 00:45:37 e.g. you could have mem location 0 is 1 if there is an unread byte, 0 otherwise 00:45:48 then mem location 1 is the byte in the buffer, reading it sets mem location 0 to 0 00:45:56 so you loop until *0 == 1, then you read *1 and handle it 00:46:10 AAAGH GAAAAH FUCKING CONGRESS 00:46:12 lucidalise: yep 00:46:23 pikhq: you have coreutils competition 00:46:24 lucidalise: sounds like implementing hardware support in brainfuck. :) 00:46:24 but wat 00:46:50 lucidalise: Oh, back in 2005 Santorum was wanting to limit what the National Weather Service could report. 00:47:11 Because they were "unfairly competing" with the private sector weather reporting services. 00:47:41 xD 00:47:50 Someone would want to ruin the single least controversial and unambiguously good service of the US government. 00:47:55 pikhq: i am so glad how well the assimilation of santorum's name into ... something new ... is going 00:48:16 So, it passed, I guess? 00:48:43 So because EVERYTHING FUCKING SUCKS I gotta write my own kernel. 00:48:54 lucidalise: No. Still pissed. 00:49:03 Just the freaking idea pisses me off. 00:49:15 lucidalise: please do! 00:49:39 calamari: It's going to be Plan 9 turned up to 11: which is one of my more conservative designs. 00:49:52 calamari: so how's the design coming? 00:49:59 aliseOS, of course, has basically infinite uniqueness and practicality: but it will, at least, be undeniably perfect. 00:50:03 Some day. 00:50:12 lucidalise: You should attain more time. 00:50:22 Don't they have that down at the corner store? 00:50:54 CakeProphet: well since I'll be implementing the real vm on x86, that means interrupts and interrupt handlers 00:51:13 pikhq: I seem to be staggering up to the discharge. Wrong words: They are pushing me, staggering and disoriented, to the discharge; but of course not a complete discharge, they'd feel as if they'd done me a disservice, that would weigh on their minds forever ... no, they're making sure I'm "well looked after": 00:51:23 calamari: ah. nothing fancy and abstract? Ah well. 00:51:27 CakeProphet: but we can certainly make it easier than that for the internals 00:51:50 lucidalise: So, you will be leaving the unit and they will be observing you on a semiregular basis? 00:51:58 one of the things a VM should do is make compiling to it fairly simple. Especially for esolangs. :) 00:52:09 CakeProphet: exactly 00:52:16 Improvement at least. 00:52:17 So the plan, it seems, is this: I am discharged, to the local high school, to be edumacated in the Queen's Standard Curriculum for Mindless Drones by the part of it for people who have "missed a lot of school", which makes me expect stupid people, but who knows. (Apparently not.) 00:52:34 I have, at least, seen there; it seems not so abhorrent. Pointless, certainly, but not abhorrent. 00:52:37 pikhq: Heh, no 00:52:39 *no. 00:52:56 argh this is where my os class being so long ago is killing me 00:53:09 They won't let me get away from day-in, day-out standardised education ... not for anything other than avoiding nuclear holocaust. 00:53:23 I really don't want to have to do busy waiting 00:53:25 lucidalise: Improvement, though. 00:53:43 At least you're out of the unit and in education for mundane folk. 00:53:50 But apparently some concessions can be made, such as starting the day later and whatnot; so perhaps I can cope -- limp -- until I turn 16 and the behemoth that is the education authority slinks away to prey on some other innocent kid, hopefully one more naive so they won't know what hits them. 00:54:08 OHRAIT. European education. 00:54:10 But I will get the afternoons and nights at home, so that is a thing; a god thing. 00:54:12 *good 00:54:12 Public education ends at 16. 00:54:22 pikhq: Not any more -- it's 18 for all the young'uns now. 00:54:46 They have more and more mindless and increasingly even more hopeless edumacation awaiting them, poor fuckers! 00:54:50 lucidalise: Oh, so now it's akin to the US system in that it's available until you're 18 but mandatory until you're 16? 00:55:05 pikhq: It's available until ... whenever you end up leaving university :P 00:55:06 CakeProphet: the x86 reserves a part of low memory for pointers to interrupt handlers.. perhaps we could simply clone that idea? 00:55:10 Or, well, college, if you can't get into uni. 00:55:18 pikhq: But no, now it's mandatory until 18. 00:55:20 GAAAH 00:55:24 Fucking Europe. 00:55:24 CakeProphet: would certainly make the implementation easy :) 00:55:27 But not for me! 00:55:28 H ha ha! 00:55:30 pikhq: This is a UK thing 00:55:39 I get out at 16. Anyway. Here is our system. 00:55:44 *You guys have public post-secondary education.* 00:56:00 So do you guys. 00:56:02 First school - after nursery. You know, regular shit. 00:56:14 Middle school - I forget the exact age you start. 8 to 10 or something. 00:56:16 Until like 13. 00:56:32 No, we have private post-secondary education and government-subsidised effectively private post-secondary education. 00:56:42 High school - 14 to 16. Sixth form college - 16 to 18. Often high schools have a sixth form integrated, you know, if you can't make it into a good one. 00:56:54 University - 18 to bearded and banana-eating. 00:57:08 calamari: would it increase the difficulty of compiler writing? 00:57:22 pikhq: Hey, people here get bankrupt over student loans. 00:57:24 It ain't easy. 00:57:42 lucidalise: Here it's impossible to get bankrupt over student loans. 00:57:48 CakeProphet: that's what I'm trying to figure out.. how do you map BF "," without busy waiting? 00:57:51 I think our inter-mediate assembly language should have some kind of simple way to specify a hardware IO device. 00:57:53 ... BECAUSE THATS EXEMPT FROM BANKRUPTCY 00:57:57 pikhq: Well, not bankrupt perhaps. 00:58:00 But in deep shit. 00:58:09 It ain't free here. 00:58:13 lucidalise: Cost per year on average? 00:58:21 In order to write a MBR code I had to know exactly the format in which the interrupt vectors are stored, so now I know. 00:58:25 pikhq: Oxford is like £11,000 or something for tuition. 00:58:32 Per term or something. 00:58:35 It ain't free. 00:58:51 Youch. That is pretty pricy. 00:58:56 Perhaps relatively cheap compared to the US: but my friend at Oxford is going to have some fun debt to spent the rest of his life paying off. 00:59:12 pikhq: Well, Oxford /is/ one of the top, say, four educational institutions in the world. 00:59:17 lucidalise: No, that's the upper end of tuition in the US. 00:59:23 CakeProphet: I just remembered that a lot of this work has already been done for us 00:59:31 CakeProphet: let me see if I can find it 00:59:34 lucidalise: What does that include, though? 00:59:34 pikhq: I may be wrong. Google it. 00:59:59 * pikhq looketh 01:00:27 pikhq: Little. Accommodation. 01:01:00 * pikhq cannot find a listed cost 01:01:06 Try Wikipedia? 01:01:08 Ah, there. 01:01:41 How much? 01:02:02 * pikhq does a spit take 01:02:30 For in-EU, £3,290. 01:03:01 That's per-year. 01:03:02 ($4,953 USD) 01:05:19 For comparison, a year at a community college (Pikes Peak Community College's tuition is being used for reference) for an area resident is $3,798 a year. 01:06:12 I thought it was ... more. 01:06:17 Oxford is ... cheap ... 01:06:41 (a community college, BTW, is post-secondary education, usually administered by a county or city government, that offers "adult learning" and associates' degrees.) 01:06:49 pikhq: Now add exams, accommodation, books... 01:07:06 lucidalise: And you're talking pricy vs. pricy. 01:07:20 CakeProphet: http://jonripley.com/easel/ 01:07:26 Until you realise that you can plausibly pay $40,000 on tuition in the US. 01:07:27 True ... and you do get Oxford, vs, say, some decent university. 01:07:37 (MIT, Harvard and the like.) 01:07:57 (I'd say MIT or Harvard are about the same caliber as Oxford. Agree?) 01:07:59 calamari: well then let's use that. :) 01:07:59 -!- Gregor has joined. 01:08:23 pikhq: MIT, no. 01:08:43 MIT have reduced their CS curriculum to Robots-in-Python. So, engineering is their only remaining discipline in which they excel. 01:08:50 Harvard, okay, agreed, they're on the same level as Oxford. 01:08:59 What're we talking about? 01:09:16 Gregor: Universities; specifically in comparison to Oxford w/ its $4,953/year tuition. 01:09:20 Gregor: Alise claimed that university in the UK was freaking expensive. 01:09:27 Ah 01:09:30 pikhq: Still, would you rather say "I went to Harvard" or "I went to fucking OXFORD". 01:09:39 Not being paid to go to school must be weird :P 01:09:49 Gregor: Darned grad student. 01:10:11 I was aaaaalmost full-ride scholarshipped (THIS IS A WORD) all the way through undergrad. 01:10:20 YOU PUNK 01:10:29 * Gregor <3 Gregor 01:10:52 pikhq: tbh, though, mit has a better system than the uk 01:10:55 lucidalise: Oh yeah. Almost all the help there exists for fees in the US consists of private entities handing money at people they feel are qualified. 01:10:59 MIT: "Okay, here is money to pay your tuition." 01:11:17 UK: "Here is a loan to pay everything. You don't need to pay it back until you start earning money. Ha ha ha ha ha ha ha ha ha ha ha ha HA ha ha ha ..." 01:11:30 Actually, almost all of my money right now is from the gov't. 01:11:40 Either the university itself (when TA'ing) or the NSF. 01:11:56 lucidalise: That's the standard US system except for one thing: *there isn't generally enough money to cover the costs*. 01:12:02 Gregor: Yeah, but you're a grad student. 01:12:21 pikhq: Okay, new idea. 01:12:22 I would make an awesome thumbs-up smiley, but I don't know how. So imagine one here: 01:12:29 We set up the #esoteric Institution for Higher Learning. 01:12:37 lucidalise: Oh, also. The loans increase in payout, and the tuition increases in response. 01:12:39 EIHL 01:12:43 Based in, fucked if I know, Helsinki or Ontario or somewhere. 01:12:44 Or is it #IHL? 01:13:00 Making the damned loans into a way for the government to bleed money at universities. 01:13:19 Oh, wait. Loans. 01:13:19 Gregor: Wat 01:13:21 *Wat. 01:13:34 Sorry, for the *students* to bleed money at universities. 01:13:38 Gregor: Oh I see. 01:14:06 Gregor: Esoni for short, perhaps. (Esoteric-uni) 01:14:21 Motto: Someone translate "[evil cackle]" into Latin. 01:15:34 悪笑 suffice? 01:15:59 (valid CJK.) 01:16:05 Latin! 01:16:20 AKUS WARAUS 01:16:28 There, Latinized. 01:16:28 :P 01:16:47 Anyway, we could have a Computer Science class taught by ais523, a Systems Administration class taught by pikhq, a Programming Language Design taught by Gregor and I (I am not egotistical, dammit), and... 01:16:52 CakeProphet: you know.. it looks like he spent a lot of time on this, but it's really a mess. maybe we should assume a language with more powerful i/o than bf 01:16:57 And free Ph.D.s for everyone. 01:17:16 lucidalise: Beautiful thing is, anyone can offer a degree. 01:17:28 calamari: PESOIX, the only thing worse than PSOX. 01:17:38 It was so bad that PSOX actually improved the state of the art. 01:17:40 Without accredation it's just a piece of paper, but still. 01:18:02 pikhq: Accreditation is fucking easy: see, Maharashi University of Management. 01:18:04 lucidalise: do you have a url for PSOX? 01:18:06 It's a university ... and a cult! 01:18:08 * pikhq gives everyone a Ph.D. in Doctorism. 01:18:10 calamari: No, but you don't want one. 01:18:11 calamari: this seems like a good idea. 01:18:22 pikhq: Alas I even know someone intelligent who goes there /sigh 01:18:26 CakeProphet: what does? 01:18:28 Well, not know, but nomic-know. Agora-know. 01:18:35 lucidalise: Accredited by whom? 01:18:46 pikhq: Whoever does that in the US. 01:18:55 Consciousness-based education? Accredit'd 01:18:56 Several such entities. 01:18:59 That's private. 01:19:09 We love our capitalism. 01:19:18 Oh, wait. 01:19:27 calamari: assuming a language with more powerful i/o than bf. 01:19:29 Run by the Transcendental Meditation cult famous for claiming its adherents can even, once advanced enough, fly. 01:19:31 It's accredited by one of the government ones. 01:19:34 And being supported by David Lynch. 01:19:39 Fucking fuckfuck. 01:19:50 Oh, and the Beatles spent time with the leader at some point. 01:19:51 How's Canada? 01:19:57 While they were busy being stupid. 01:20:11 lucidalise: Y'mean, not smoking pot? 01:20:12 Sexy Sadie? Yeah, that's about the leader of the cult. 01:20:20 (their music got better with pot) 01:20:34 Lennon originally wanted to title the song "Maharishi",[1] but the Beatles changed the title to "Sexy Sadie" at George Harrison's request. Lennon was disillusioned after Maharishi Mahesh Yogi had allegedly made a sexual advance at one of the female members attending the course Maharishi was teaching at his ashram. 01:20:38 http://esolangs.org/wiki/PSOX 01:21:04 -!- cheater99 has quit (Ping timeout: 248 seconds). 01:22:32 Oh yeah, and Transcendental Meditation of course is a form of "meditation" that involves repeating a meaningless, unique-to-you (not actually unique to you) mantra given to you by your amazing guru. 01:22:43 This achieves perfect conscious existence^W^W^Wfuck all. 01:23:20 CakeProphet: which esolangs does that leave us? 01:23:48 calamari: well, I mean. We should be able to support all of them, ideally. But befunge I think is a good choice because it has good IO support 01:24:16 which variant? 01:25:05 I'm only seeing int and char i/o 01:25:37 -!- Wamanuz3 has quit (Ping timeout: 264 seconds). 01:26:46 -!- BeholdMyGlory has quit (Remote host closed the connection). 01:26:47 -!- FireFly has quit (Quit: swatted to death). 01:27:39 lucidalise: To be perfectly fair, the *were* experimenting with, uh, just about everything they could. 01:27:47 It was the 60s. 01:28:12 -!- Quadrescence has joined. 01:28:14 Also: nobody gives a shit about their personal beliefs, cause the music was pretty good. :P 01:28:51 Context jump: Maharishi University of Management seems like a freaking retarded school. 01:30:36 And yet, they offer CS degrees. 01:30:44 * pikhq wonders how good that program is. 01:30:54 * pikhq wonders if people who can fly can comment well. 01:34:10 -!- zzo38 has quit (Remote host closed the connection). 01:35:09 pikhq: Pavitra is the Agora player who goes there. Studies math, says google. >_> 01:35:24 lucidalise: ... 01:35:26 So maybe I Internet-stalked the guy's relation to the uni after the initial shock! So what >_> 01:35:30 <_< 01:35:48 Hey, he's one -- well, was one -- of the smartest Agora players; I was wondering how on earth one such as him could end up in such a place. 01:38:53 So, anyway, good night. 01:39:04 -!- lucidalise has quit (Quit: Page closed). 01:39:05 Gxis 01:39:38 So yeah ... EIHL ... maybe not :P 01:40:19 calamari: befunge98 I think? 01:40:22 whatever fungot is coded in 01:40:23 CakeProphet: cruise mode holds it no one is my favorite. :d haha. if it is 01:40:32 allows network/file io I'm fairly sure. 01:40:38 Gregor: Clearly we should just genetically engineer humanity to make everyone inherently desire learning. 01:57:32 -!- poiuy_qwert has joined. 02:21:28 calamari: http://hpaste.org/fastcgi/hpaste.fcgi/view?id=27329#a27329 02:21:34 this a stub for the assembler 02:22:16 each instruction parser will go at the end of the file in the case statement. addOutput "string" accumulates a string to the machine code output 02:25:04 where are you handling labels? 02:26:06 nowhere at the moment. I don't know the format of our assembly, so I don't have them yet. :) 02:26:19 but this is the basic instruction translator 02:26:48 I know next to nothing about assembly languages. 02:27:03 how are labels going to be used? 02:27:22 because I have an idea of how to implement them 02:29:06 they are converted to code offsets 02:29:31 actually, think about labels in C 02:30:24 -!- aschueler has quit (Ping timeout: 248 seconds). 02:30:29 with goto... and conditional gotos 02:30:30 so you make a label with a label declaration 02:30:44 and then goto instructions. How do these get translated to machine code? 02:31:09 so basically 02:31:17 I need to construct a table from label strings to.... what? 02:31:21 -!- coppro has joined. 02:31:34 depends on the instruction.. can be absolute addresses or relative.. abosulte is not good tho.. relative is better for relocation 02:32:13 okay sorry, let me explain better 02:32:32 ...yes 02:32:36 we need ircfs 02:32:49 ircfs works by scanning a network's nicks for bots of known software, and then seeing if it's possible to store data on them e.g. factoids on supybot 02:32:55 then, it stores data on those bots 02:33:38 so lets say you write the label MYLABEL: and that happens to be at offset 0x1234 ... then later you are at offset 0x2345 and issue JMP MYLABEL... so absolute would store that like opcode 34 12 02:34:04 wait what? 02:34:23 relative would store it as 1234-2345 (plus or minus a few) 02:34:53 coppro: sounds like a cool idea 02:35:14 calamari: and how does that give 34 12? 02:35:28 coppro: 1234 hex is 34 12 02:35:33 oh ok 02:35:45 yeah, relative jumps are awesome 02:35:49 (see MMIX) 02:35:52 calamari is some kind of little-endian bigot! 02:35:59 I think we should avoid absolute addressing tho 02:36:18 Gregor: :P 02:36:40 Actually I figured out why (and that) little-endian is better, so I no longer care :P 02:37:28 the mainframes I work on are big endian 02:37:46 MOAR LIEK LAME-ENDIAN 02:38:15 System Z 0wnz y3w 02:38:42 zLinux (or is it Z/Linux? LinuxZ? Something) OWNZ 02:38:45 actually got to see a z10 the other day.. the hot air blowing out and noise is intense 02:39:01 -!- CakeProphet has quit (Ping timeout: 245 seconds). 02:39:45 -!- CakeProphet has joined. 02:40:34 ...disconnected 02:40:37 fill me in. 02:40:39 * Sgeo wonders if he should design a PSOX2 02:41:08 I still don't fully understand. Do I just need to save information about where I found the label then? And then substitute back in when the label is referred to (converted to relative)? 02:41:51 CakeProphet: basically, yes 02:42:03 jumps can be forward or back 02:42:13 so depending on how you do it, you might need two passes 02:42:30 well I'll need a pass to find labels and preprocess 02:42:37 and then a pass to translate instructions 02:42:59 how would you do it in one? 02:43:53 CakeProphet: this being haskell, you want to use Tying The Knot 02:44:51 -!- coppro has quit (Read error: Operation timed out). 02:45:06 http://www.haskell.org/haskellwiki/Tying_the_Knot 02:45:07 cool 02:45:09 i.e. you pass the map of labels into the parser, which uses it to translate the instructions; then the parser constructs the map of labels and returns it as part of its result. 02:45:37 and because of laziness this actually works :D 02:45:47 so I just... don't worry about it and do it all at once? 02:45:51 are you sure? 02:46:24 _assuming_ the position of the labels is not affected by their values 02:46:57 oerjan: yeah not gonna do that :) 02:47:00 the position of the label is its value... if I understood that correctly. 02:47:27 yeah 02:47:33 CakeProphet: what he means is that sometimes depending on the range of the jump you might have a 2 or 3 byte instruction and you don't know in advance 02:47:42 yeah like that 02:48:03 oh wait... 02:48:10 if that were the case it would break down 02:48:12 so that is simple to solve.. don't make the instructions that way :) 02:48:22 so the offset is a byte offset? So I need to accumulate the offset value for each machine code byte? 02:48:35 and since we control the machine code, don't worry about it :) 02:49:09 basically I've got a structure called AsmState, which is the state I'm carrying around in my parser 02:49:25 CakeProphet: you would want to have the current position yeah 02:49:27 http://www.wimp.com/cloudchamber/ This is so much more awesome than anything else ever. 02:49:35 AsmState = AsmState { output :: String, labels :: Map String ???, offset :: Word8} 02:49:49 er... maybe Word32 instead 02:50:23 so to write output code you do addOutput "string" 02:50:26 Gregor: nice 02:50:56 so I guess in addOutput I can just accumulate the offset per character? 02:51:22 and when I encounter a label I add a new Map entry with the current offset? 02:53:03 * calamari sticks some Thorium in Gregor's pocket 02:53:46 CakeProphet: note you probably want to keep the labels you are building and the labels you are using as different fields 02:55:03 not sure I understand... 02:55:07 at least if you use Map, which is strict in the keys 02:55:09 I really don't know how Tying the Knot works. :P 02:55:13 aaah 02:55:18 "Is that thorium in your pocket, or are you just happy to see me" 02:55:19 I could import Map.Lazy right? 02:55:36 CakeProphet: i don't really know much about that one 02:55:50 oerjan: it's all lazy, as the name suggests. 02:55:54 same interface 02:56:05 at least I assume so. 02:57:40 CakeProphet: i think not passing both values makes it harder to handle missing label errors in a controlled way 02:58:36 hm you'd get an infinite recursion then, i think 02:59:04 might not have to worry about missing labels since the assembler code will probably be compiler generated 02:59:11 okay so.... 02:59:23 I need two maps? One contains already found labels and one contains? 03:00:06 if you have m = Map.insert key val m and then lookup anything _other_ than key, you get an infinite recursion 03:00:26 but if you use two maps you can get an actual lookup failure instead 03:01:25 one map contains the labels that the parser has found already. the other contains all the labels including the ones it hasn't found yet, and is passed into the initial parser :D 03:01:51 *initial parser state 03:02:23 the parser builds the first but uses the second for actual lookups 03:03:35 oerjan: ...I don't understand how I construct that second map for the parser before-the-fact. 03:03:59 calamari, CakeProphet, would a redesigned PSOX be helpful? 03:04:08 this works fine as long as the lookups are never used for conditional branching in the parser or for building the first map 03:04:10 No NULs, and tested with multiple languages 03:04:15 Sgeo: dunno, calamari will have to answer that. 03:04:31 Sgeo: I haven't looked at PSOX enough to know 03:04:43 oerjan: I mean. How do I make the second map? What do I pass in? 03:04:46 CakeProphet: it is simply the first map from the final state of the parser, passed back into the initial state 03:04:59 -!- coppro has joined. 03:05:09 oerjan: ...oh my. okay, that makes sense. But I'm still not sure how... 03:05:13 like, how do I get that value? 03:05:21 that's the actual "tying" part of the knot :D 03:05:23 First idea: The first character that the language sends to PSOX 03:05:56 Sgeo: I don't know if PSOX worries about a non-PSOX environment, but that wouldn't be needed 03:06:06 NUL if NULs etc. are the easiest, 1 if numeric I/O is available, C if ... 03:06:07 hm? 03:06:13 * Sgeo is now talking about PSOX2 03:06:32 oerjan: okay so when I first run the parser I have to give it an initial state value. What should that be for the second map? 03:06:46 in Haskell code 03:06:48 an expression 03:06:50 Sgeo: url for PSOX2? 03:06:51 let me see 03:06:53 Better yet, a series of tests 03:07:01 calamari, #esoteric 03:07:02 Right now 03:07:07 oh, lol okay 03:07:37 -!- Mathnerd314 has quit (Ping timeout: 264 seconds). 03:07:47 I didn't realize was PSOX was, glad you kept going with PESOIX 03:07:53 what 03:08:16 The program outputs 0. The program outputs the largest number it can, or 0 if it can output theoretically any number 03:08:23 Then maybe some more tests 03:08:28 calamari, alise hates PSOX 03:08:35 I didn't realize he hated PESOIX more >.> 03:09:00 -!- Mathnerd314 has joined. 03:09:03 CakeProphet: hm does Parsec have a MonadFix instance? that would make it easier i think 03:09:25 Sgeo: really PESOIX and PSOX seem to be overkill 03:10:00 Sgeo: at least if we are going wit hthe interrupt vector table idea 03:12:44 oerjan: don't think so 03:12:54 EsoAsm rev 2: http://hpaste.org/fastcgi/hpaste.fcgi/view?id=27329#a27330 03:15:19 Sgeo: how did you handle blocking btw? 03:15:52 calamari, as in? 03:16:24 Sgeo: actually nm, I guess the underlying OS handled it for you 03:19:34 the state accessor function is awesome 03:19:46 o <- get offset 03:19:47 :) 03:19:57 getOffset = get offset 03:21:26 oerjan: you'll have to help me understand this Tying the knot thing because it looks like magic. 03:21:42 -!- oerjan has quit (Remote host closed the connection). 03:21:47 ha. 03:21:53 -!- oerjan has joined. 03:22:43 oerjan: you'll have to help me understand this Tying the knot thing because it looks like magic. 03:22:46 (resend) 03:23:03 CakeProphet: i cannot get to the logs so i don't know what i missed 03:23:04 It is magic. 03:23:05 could you show a simple example. I'm not following the wiki on the doubly linked list thing. 03:23:15 EsoAsm rev 2: http://hpaste.org/fastcgi/hpaste.fcgi/view?id=27329#a27330 03:23:16 Or perhaps sufficiently advanced technology. 03:23:17 oerjan: miss that? 03:23:27 no 03:23:50 my trouble here is remembering the actual Parsec functions :D 03:23:56 You missed a ha 03:23:58 I can probably help with that. 03:24:17 !haskell :t Text.Parsec.runParser 03:24:46 yeah sure don't be helpful EgoBot 03:24:56 !haskell Text.Parsec.runParser 03:24:59 'K I won't 03:25:06 *EsoAsm Text.ParserCombinators.Parsec> :t runParser 03:25:06 runParser :: GenParser tok st a -> st -> SourceName -> [tok] -> Either ParseError a 03:25:38 barring an actual MonadFix, that function seems like the best place to do the knot tying, i think 03:25:46 !haskell putStrLn "Hello world" 03:25:48 Hello world 03:26:04 oerjan: BUT HOW. 03:26:15 like... how do I magically have a reference to a value that is built later? 03:26:31 Wait, circular references are possible in Haskell? 03:26:43 With KNOTS. 03:26:45 And ... TYING. 03:26:52 ... 03:27:18 Sgeo: and yes. I believe so. 03:27:20 CakeProphet: Dude, circular references are done *all the time* in Haskell. 03:27:28 pikhq: yes, but I don't understand this particular one. 03:27:32 pikhq, I was the one asking the question 03:27:35 if someone could, I don't know, explain? 03:27:42 x = 1 : x -- Glee! 03:27:48 O 03:27:49 Oh 03:28:42 oerjan: where could I get the st to plug into that function? 03:29:13 or part of the state rather, the second label map 03:29:36 ok assume your parser returns not just the result, but also the state 03:29:46 this is what it currently does, so alright. 03:30:37 asmFile = ... >> getState 03:31:03 tiedParser p st name toks = pRes where pRes = runParser (p) st{labels2 = l1}; Right (_, ASMState {labels1 = l1}) = pRes 03:32:05 is there a function name that goes in front of that Right? 03:32:12 no 03:32:22 ah. pattern binding, got it. 03:32:31 the pRes should be a Right if the parsing succeeds 03:32:45 ...that's magical. 03:32:59 I get it now. it's just some tricky referencing 03:33:47 hmmm, what would be good names for these label maps? 03:33:52 buildMap, labelMap? 03:34:00 it is of course vital that no attempt is made to strictly evaluate that l1 until the parser actually _has_ returned a Right 03:34:25 hmmm 03:34:30 isn't State strict? 03:34:48 i also missed some arguments on runParser, but you can fix that :D 03:35:33 it won't matter if ASMState isn't strict in labels2 03:36:09 -!- cheater99 has joined. 03:37:00 hmmm, okay. 03:37:53 hello 03:38:10 hi 03:39:47 oerjan: i wanted to say something to you but forgot what. 03:40:00 *MWAHAHAHA* 03:40:01 you mentioned something to me then disappeared for a week. damn you. 03:40:09 I HATE YOU 03:40:11 ok, bbl 03:40:12 O_o 03:40:23 i've been here about every day :D 03:40:24 j/k, i love you. 03:40:30 under a different nick perhaps 03:40:30 oerjan: what happens when pRes is Left? 03:40:40 no definitely this one 03:40:43 Actually, what is so unplayable about death walz? Some poorly aligned notes is all it takes to make it nonsense? 03:40:44 not true 03:40:46 you weren't here 03:40:47 >:D 03:40:57 i know because my autocomplete hasn't worked. 03:41:01 CakeProphet: then l1 should not be used, i hope 03:41:07 cheater99: i'm not here _all_ day 03:41:19 AHA 03:41:21 SO U LIED 03:41:31 cheater99: i said _every_ 03:41:32 i've been here about every day :D 03:41:47 those are not the same thing 03:41:51 oerjan: don't you need to pattern match for Left somewhere? 03:41:55 yes, if you were here every day, that would mean for each day, you were here that day. 03:42:07 not half a day 03:42:09 not five minutes! 03:42:11 CakeProphet: no, the match is lazy and is only evaluated if l1 is 03:42:12 but a day! 03:42:20 * cheater99 feels duped :~( 03:43:02 like is generally the case for where and let 03:43:11 *only checked 03:43:23 *if l1 is evaluated 03:43:32 -!- augur has quit (Remote host closed the connection). 03:44:20 oh my god it compiles. 03:44:26 you are manipulating the facts, oerjan! 03:44:30 rewriting history! 03:45:04 cheater99: i am pretty sure i've been here for at least some hours nearly every day in recent memory 03:45:18 ok fine :( 03:45:26 but you weren't here when i needed u 03:45:31 :'( 03:45:40 sheesh 03:46:14 so did it have anything to do with math? 03:46:26 i'm not sure anymore :| 03:47:01 i think maybe computability or something. 03:47:10 ok that too 03:47:20 complexity, turing machines, P=NP? 03:47:31 complexity 03:47:44 * oerjan has started slowly going through rjlipton's blog archive 03:47:55 i mentioned your nick with it 03:47:58 when you weren't here :D 03:48:08 any particular day? 03:48:13 bout 2-3 days ago 03:48:24 just search for cheater99> oerjan: 03:49:13 oerjan: but functions in python aren't first-order objects 03:49:17 yes 03:49:26 we were talking about normalization 03:49:47 yes and what does that even _mean_ in the context of python, to start with 03:49:50 and you said that normalization does not happen in any lambda calculus that is touring complete 03:50:16 but given that the functions in python aren't first-order, you can't do a lot of tricks that break normalization in lambda calculus 03:50:22 well i'm not sure i said _exactly_ that, but something close 03:50:28 yeah something like that 03:50:32 * cheater99 waves his hands a little 03:50:59 ah but every infinite computation (which python must have) is essentially a break of normalization 03:51:14 why 03:51:25 because normalization in LC at least is the same as saying every evaluation strategy must terminate 03:51:32 (for strong) 03:51:38 ok 03:51:43 but most programs terminate 03:51:49 and you can easily factor out the non-terminating parts 03:51:52 and actually running a program is definitely an evaluation strategy 03:52:00 EsoAsm rev 3: http://hpaste.org/fastcgi/hpaste.fcgi/view?id=27329#a27331 03:52:02 SO, the bits that interest us are actually going to terminate 03:52:11 hence, they can be strongly normalized, no? 03:52:36 "easily factor out", have you _ever_ heard of the halting problem? :D 03:53:08 most practical programs can be written in such a way that the nonterminating bits are confined to bits of the code 03:53:11 e.g. the totality monad 03:53:20 oerjan: i don't know what you're talking about right now 03:53:25 oerjan: i don't write my apps to never terminate 03:53:29 oerjan: they always terminate 03:53:36 ah, I forgot to add some functions 03:53:41 interpreters are an exception 03:53:45 oerjan: what ais523 said 03:54:11 cheater99: well then you are writing them to be at least weakly normalizing by design 03:54:15 (in other words: the halting problem in unsolvable in general, but often solvable in any individual case, including many of the useful ones) 03:55:01 oerjan: in general, you only write non-terminating problems in the Wankers 101 class 03:55:06 irl, you don't 03:55:09 oerjan: so when I add labels I should refer to buildMap, and when I refer to labels I should use labelMap 03:55:35 cheater99: the halting problem says essentially that if you have a program that you don't know whether is terminating, then you cannot always decide 03:55:48 read what i just said 03:56:05 cheater99: yeah yeah 03:56:17 CakeProphet: yeah 03:56:20 (yeah) 03:56:24 haha... the State monad is great. 03:56:26 yeah yeah. 03:56:32 it's almost like programming in imperitive langs. 03:56:43 but better. 03:57:09 I wonder how much memory this parser will end up consuming 03:57:15 better? 03:57:20 CakeProphet: you are essentially getting two passes automatically just from the dataflow 03:57:21 well, safer. 03:57:25 How is using a state monad to do imperative work bett---okay 03:57:30 safer is fair 03:58:25 Quadrescence: it lets you go functional-style and just use the imperative bits when they become relevant 03:58:40 if you really want to mix imperative and functional a lot, though, ML is probably neater than Haskell 03:59:29 I don't think (S)ML is much better for doing imperative stuff. I mean, yeah, it's impure (or can be), but bla bloo bla it's not pretty 03:59:33 olololol boilerplate code. 03:59:39 that is the only downside of using State so far. 03:59:50 the only ML I know is OCaml 03:59:53 all the get/put convenience functions 03:59:58 ais523: Poor you :( 04:00:13 Quadrescence: I'm aware of the existence of SML 04:00:19 and really, the differences between the MLs aren't major 04:00:24 ais523: SML is just smaller and "neater" 04:00:27 compared to the difference between, say, OCaml and Java 04:00:46 Yeah, the differences aren't huge. Mostly minor things, like bits of syntax and some little rules 04:00:48 CakeProphet: the Parsec State may not be quite the same as the State monad, unless they've fixed it up recently. Does it have a MonadState instance? 04:01:22 no it does not. 04:01:34 getState, putState, updateState 04:01:39 I don't know why there isn't an instance. 04:02:05 because that would give you get, put and modify. although that's essentially the same as those anyhow 04:02:12 oh and gets 04:02:27 (applies a function automatically) 04:02:43 as far as I can tell they're exactly the same 04:03:04 GenParser and friends are have a State transformer 04:03:06 of some kind 04:12:40 behold! a knot-tying parser that can now add labels and access their offsets in a pseudo-magic fashion 04:12:44 http://hpaste.org/fastcgi/hpaste.fcgi/view?id=27329#a27332 04:12:51 the only thing missing is... instruction parsers. :) 04:14:56 of course I haven't tested it at all. But compiling with no type errors is a fairly good guarantee. 04:15:05 and I don't really know how I /could/ test it atm with no instruction set. 04:15:36 -!- Sgeo_ has joined. 04:17:21 -!- Sgeo has quit (Ping timeout: 245 seconds). 04:17:38 you could do subleq, maybe? 04:17:40 Someone should write music that has impossible stuff, but when you strip out the meaningless stuff, it's a rickroll 04:18:12 define impossible stuff 04:18:37 oerjan: dunno what subleq is... 04:18:58 CakeProphet: single-instruction TC machine code 04:19:01 -!- coppro has quit (Remote host closed the connection). 04:19:58 subtract and branch if less than or equal 04:20:14 -!- coppro has joined. 04:20:33 so just one instruction and labels should be enough to test a barebones assembler 04:20:49 calamari: you still there? 04:20:56 CakeProphet: just got back 04:21:21 see link above for the latest update to the assembler (well, not the latest, I spotted a bug in the parser combinators) 04:21:55 CakeProphet: I'm not really equipped to run haskell right now, so please hold onto it :) 04:22:26 I think I'm going to need to call it a night unfortunately.. although the asm is nearly worked out 04:22:30 calamari: well, it doesn't really work yet. It's just a skeleton still 04:22:44 I need an actual instruction set to interpret. Which I'll do later because I've been working on this for a while now. 04:22:59 freefall :D 04:23:12 oerjan: ? 04:23:20 (webcomic) 04:23:55 that bot is not really helping his case.... 04:25:02 at the moment is fairly general purpose. You could plug in the parsers for any kind of instruction set at this point. 04:25:11 * CakeProphet will probably re-use this code for other crazy VM designs. 04:27:50 -!- calamari has quit (Quit: Leaving). 04:27:57 oerjan: due to the introduction of this knot-tying thing... I know cannot guess the evaluation order of my program at all. 04:28:03 *now 04:29:51 *MWAHAHAHA* 04:31:56 oerjan: I could use this same strategy for macros yes? 04:32:57 er how so? 04:36:32 -!- GreaseMonkey has joined. 04:41:09 -!- SevenInchBread has joined. 04:43:31 -!- CakeProphet has quit (Ping timeout: 276 seconds). 04:46:54 -!- coppro has quit (Remote host closed the connection). 04:47:39 -!- coppro has joined. 04:51:30 oerjan: scan for macro definitions, add them to a build map, knot-tie a map that represents the finished macro map, and access that 04:51:35 -!- SevenInchBread has changed nick to CakeProphet. 04:59:31 CakeProphet: ok there could be trouble then if macros are allowed to do macro definitions 04:59:32 -!- Mathnerd314 has quit (Ping timeout: 265 seconds). 05:00:21 -!- Mathnerd314 has joined. 05:00:31 or alternatively if macros can _hide_ macro definitions, such as #if in C 05:00:36 *CPP 05:00:55 I don't actually know if we're going to implement a preprocessor 05:01:12 we could just use CPP 05:01:23 um that's not my point 05:02:25 the point is that in order for knot-tying of macro definitions to work, you cannot allow the content of macro definitions to affect how macro definitions are parsed 05:02:58 The worst thing about the CPP is there is no way for macros to produce further macros. 05:03:01 IMO. 05:03:29 ... That was a non sequitur that made sense when I typed it somehow. 05:03:31 My apologies. 05:03:31 * Gregor <3 m4c 05:03:44 (m4c is the imaginary language of C with M4 instead of CPP) 05:03:58 I'm not sure whether to vomit or applaud. 05:04:17 Vomit once you see my m4c "header" that gives OO to C :P 05:04:26 m4 was invented as a general-purpose preprocessor that's more powerful than CPP, after all 05:05:00 CakeProphet: i understand this is a relevant problem in scheme, which says behavior is undefined if definitions can affect what is a definition 05:05:10 m4 gives us autotools :( 05:05:22 coppro: No, *Stallman* gave us autotools. 05:05:34 pikhq: I know; I was joking 05:05:35 And autotools gives us portable software. 05:05:46 but haskell knot-tying is more breakable than scheme macros, i suspect, at least without additional cleverness 05:06:00 Gregor: autotools is not worth the effort it takes to get working 05:06:10 False. 05:07:44 oerjan: so #if would create such a situation? 05:08:10 if so, we could just leave it out. Macros would be immensly useful in an assembler... #if only somewhat (I think?) 05:08:10 xkcd XD 05:08:35 -!- kwertii has quit (Quit: bye). 05:08:46 CakeProphet: however this is all moot if macros can only be used after they're defined. 05:10:12 oerjan: so basically the code that builds the macro map can't access it or it will loop? 05:10:20 yep 05:11:08 -!- coppro has quit (Remote host closed the connection). 05:11:53 -!- coppro has joined. 05:21:23 -!- Oranjer has left (?). 05:28:22 -!- GreaseMonkey has quit (Ping timeout: 276 seconds). 05:29:56 -!- Gregor has quit (Remote host closed the connection). 05:30:27 -!- GreaseMonkey has joined. 05:34:37 -!- Mathnerd314 has quit (Ping timeout: 264 seconds). 05:35:27 -!- MizardX has quit (Read error: Connection reset by peer). 05:35:37 -!- MizardX has joined. 05:35:54 -!- Gregor has joined. 05:43:01 oerjan: ha. People on #haskell are tryin to convince me that using state is a bad idea. :) 05:43:28 parsec state in particular? 05:43:36 using state in what sense? 05:44:00 Parsec state should be avoided if possible; it may not be 05:45:08 technically a writer monad might be even better for building label maps, i think. but parsec doesn't come with that. 05:45:41 and you still need state for the current offset 05:47:11 or maybe not, i vaguely recall Maps may not have efficient union 05:48:27 it might be considered cleaner to use parsec to build a data representation without doing the actual label lookups inside it 05:48:35 they're suggested I carry around a monolithic data structure throughout the Parsec parser as return values 05:48:40 and build them together 05:50:10 :( 05:51:04 CakeProphet: in any case, it should be impossible to have state anyways 05:51:13 so not quite sure how you'd do anything else 05:51:56 CakeProphet, isn't that.. what State and/or ST do? 05:52:00 Well, ST not so literally 05:52:19 State doesn't really give you state 05:52:24 it just automates the passing-around of state 05:52:38 yes that's what MonadState in general does 05:52:47 and Parsec parsers implement a state monad. 05:54:43 more or less 05:54:58 Parsec's a tad more confusing 06:01:06 -!- MizardX has quit (Ping timeout: 260 seconds). 06:03:38 coppro: how so? 06:06:46 CakeProphet: backtracking 06:07:25 ah... does it not reset state upon backtrack? 06:07:58 or it does and that's why it's more confusing? 06:08:33 well, it (like all of Haskell), doesn't really have a state to start with 06:08:46 blah blah blah. :P 06:08:55 if you're going to pretend it has state, then yes, it resets that state 06:08:59 but it doesn't have state 06:09:06 I get what you're saying 06:09:13 semantically it makes no difference. 06:09:18 how you word it. 06:09:21 what is state? 06:09:48 What *is* State? 06:09:52 semantically it makes a lot of difference 06:09:53 Does it have Buddha nature? 06:09:57 not having C-style state doesn't mean you don't use state. Haskell uses plenty of state. 06:10:09 no, Haskell doesn't use state 06:10:29 * pikhq beats coppro with STM 06:10:33 Erm. 06:10:35 ah, so then the internal configuration of any kind of hardware that implements a Haskell program is just sitting still, right? motionless. no state. 06:10:39 Not that. 06:10:51 StateT, wasn't it? That's the strict state one. 06:10:55 no 06:10:57 State.Strict 06:10:59 is strict state 06:11:03 StateT is the state transformer 06:11:14 Rightrightright. 06:11:38 CakeProphet: Arguably, one does not execute a Haskell program, but rather executes the program described by the Haskell program. 06:11:53 ...rofl 06:11:54 ah 06:11:55 right. 06:11:59 This, I presume, is what coprro is referring to. 06:12:02 okay. then I guess Haskell /doesn't/ have state. 06:12:02 yeah 06:12:22 hence why IO is a monad 06:13:30 conceptually I think it has the equivalent of state. via recursive functions and various monads. 06:13:41 values however, do not change, no. 06:13:42 certainly; it's TC 06:14:09 so I still say the distinction makes no difference. :P 06:14:35 sorry... -ahem- 06:14:48 I have been defending my design choices for the past hour 06:14:59 so I must debate everything, naturally. 06:15:26 if I was implementing a complex parser in Parsec, I'd make an AST data structure through the monad 06:15:40 pikhq, that's a very concise and clear way of describing it 06:15:40 certainly. 06:16:00 main is ultimately a description of what to do 06:16:12 Sgeo_: I liked ais523's description of Haskell simply returning a giant input->output mapping table 06:16:34 a giant-and-possibly-infnite table? 06:17:04 yeah 06:18:35 A perfectly valid if abstract way of viewing the semantics of the IO monad. 06:19:00 the program one is closer to the truth 06:19:20 you know 06:19:28 Fairly close to how it actually is implemented. 06:19:30 every program should model execution as salmon swimming upstream 06:19:41 Mmm, HOMESPRING. 06:19:42 isn't that what a program truly is? 06:20:05 UNIVERSE OF BEAR HATCHERY OBLIVION 06:23:09 -!- ineiros has quit (Ping timeout: 265 seconds). 06:23:50 -!- ineiros has joined. 06:24:25 -!- lifthrasiir has quit (Ping timeout: 264 seconds). 06:24:31 -!- lifthrasiir has joined. 06:31:45 -!- CakeProphet has quit (Ping timeout: 240 seconds). 06:31:56 -!- CakeProphet has joined. 06:36:48 -!- CakeProphet has quit (Ping timeout: 248 seconds). 06:38:39 -!- CakeProphet has joined. 06:41:17 -!- mycroftiv has quit (Ping timeout: 260 seconds). 06:42:51 -!- mycroftiv has joined. 06:43:15 -!- Gracenotes has quit (*.net *.split). 06:48:13 -!- coppro has quit (Remote host closed the connection). 06:51:59 -!- coppro has joined. 07:10:13 -!- cheater99 has quit (Ping timeout: 276 seconds). 07:22:49 ARGH 07:23:03 All that stands between me and finishing the laundry is four full, finished, but un-emptied driers. 07:23:12 advanced regret generating hell 07:23:13 At what point do you just take their clothes and throw them all over the room? 07:23:18 Fifteen minutes? Twenty? Thirty? 07:24:20 * oerjan is not getting it 07:24:24 it's not a joke 07:24:40 well i'm _still_ not getting it 07:25:24 oh. 07:25:38 -!- cheater99 has joined. 07:25:43 * oerjan is not accustomed to the idea of doing laundry in public places 07:26:07 Yes, isn't that unseemly? Laundry is a dish best served behind closed doors, like the saying goes. 07:26:57 hm actually there was that during my half year in the US 07:27:09 fizzie: not everyone has a personal laundry machine 07:27:37 Reserving a washing-machine/drier-thing for a period of time and then not emptying it was a growth industry at the student apartments at the university, too. 07:28:36 Usually people just put unemptied-after-half-an-hour-or-so stuff in piles on top of the machines/tables rather than uniformly distributing them all over the room, though. 07:29:23 how boringly uncathartic 07:29:51 Well, I think sometimes they left angry notes, too. 07:30:54 *-h+h, possibly 07:31:33 (Also there were some cases of inexplicable underwear disappearments that I heard of. But that might be related to something completely different than retribution for exceeding reservation-times.) 07:32:17 I'm having trouble figuring out whether you want to remove the h from "think" or "they". 07:32:30 dammit the spelling was right the first time 07:32:50 You could plausibly claim that -h+h is a no-op. 07:33:19 it just looked wrong, and my browser chose _just_ this time to lock up (well with some help by something trashing my laptop) 07:34:18 (that was for uncathartic, btw) 07:34:55 -!- CakeProphet has quit (Ping timeout: 276 seconds). 07:36:15 The cold, cathartic wastelands of North. 07:37:26 yes, poor t-rex 07:40:13 So here's the thing. 07:40:39 Either way, if I'm taking these clothes out of the drier, then I'm pawing around in some uknown woman's underthings. 07:41:01 Which I hear unknown women don't usually appreciate? 07:41:16 So I decided to just wait her out :P 07:42:16 -!- Zuu has quit (Ping timeout: 276 seconds). 07:43:17 why, use a shovel 07:43:23 A ten-foot pole. 07:43:56 oerjan: What an extremely weird thing to say :P 07:44:01 fizzie: What an extremely gay thing to say :P 07:45:38 But it's *the* implement for not touching things! 07:46:49 driers & damsels 07:48:54 -!- CakeProphet has joined. 07:49:02 -!- Zuu has joined. 07:49:02 -!- Zuu has quit (Changing host). 07:49:02 -!- Zuu has joined. 07:50:25 Hmmmm 07:50:27 Lesse 07:50:39 Tomorrow is my first opportunity to wear my brand new, awesomely bright and shiny solid-color pink tie. 07:50:49 SO, should I wear it with a pink shirt, which is obviously appropriate, 07:50:55 or should I wear it with, say, a maroon shirt? 07:51:15 Decisions, decisions. 07:51:17 Didn't you have some sort of system(tm) for color-matching? 07:51:27 Both of these match wonderfully. 07:51:32 Which is the problem :P 07:51:57 I can match in the "these are the same color" sense. 07:51:57 Or in the "these go together sense" 07:51:57 Also I could wear a green shirt and match in the "these don't match" sense 07:52:21 I'm tempted to say "maroon" just because it's a funny word. Maroon, maroon, maroon, maroon. Marooned on Mars. 07:52:40 I do have some pretty spectacular maroon shirts. 07:54:03 Vengeance on Venus 07:54:51 Possibly, but that's not an episode of the Commander Keen series. 07:55:35 i didn't even know it _was_ a name of a story before i said it. although i of course suspected it. 07:56:00 "1. "Marooned on Mars" (first released as shareware on December 14, 1990) 07:56:00 While Commander Keen is exploring Mars, the Vorticon steal four vital components of his ship and hide them in Martian cities, each guarded by a Vorticon soldier. In this episode, Keen acquires his trademark pogo stick and meets a variety of Martian aliens and robots." 07:56:00 Your Anal Sex on Uranus 07:56:42 Juffo-Wupp on Jupiter 07:57:09 Androids from Andromeda! 07:57:10 Tits of Titan 07:57:18 The Mercurian Meritocracy. 07:58:50 -!- CakeProphet has quit (Ping timeout: 265 seconds). 07:58:52 -!- coppro has quit (Ping timeout: 260 seconds). 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:03:49 -!- tombom has joined. 08:03:49 -!- tombom has quit (Changing host). 08:03:49 -!- tombom has joined. 08:12:33 -!- oerjan has quit (Quit: leaving). 08:24:40 -!- MigoMipo has joined. 08:31:43 http://www.youtube.com/watch?v=vh2pc72CNek&feature=related 08:45:01 -!- Gracenotes has joined. 08:48:22 -!- choochter has joined. 09:02:46 -!- Gracenotes has quit (Changing host). 09:02:46 -!- Gracenotes has joined. 09:48:24 -!- CakeProphet has joined. 09:50:34 -!- AnMaster has joined. 10:11:24 -!- Wamanuz3 has joined. 10:31:09 -!- Gregor has quit (Ping timeout: 252 seconds). 10:50:10 How can someone know what a closure is and not know what first-class functions are? 10:50:56 I don't know but I know someone who used to be the same. 10:51:08 then I showed them Haskell. :) 10:51:26 but said person has always only halfway grasped everything they learn. 10:53:57 Runnable run = new Runnable() { public void run() { do_something() }; 10:53:57 GuiView.post(run); 10:54:06 GuiView.post(() => { do_something();}); 10:54:06 Or probably GuiView.post(do_something); would work in this case 10:55:52 -!- GreaseMonkey has quit (Quit: I'm using NO SCRIPT WHATSOEVER - Download it at file:///dev/null). 10:59:20 "it's definetly not as expressive" 10:59:30 "but damn it's easy to use" 11:01:48 Hm, do C's function pointers count as C having first-class functions? 11:02:03 hmmm... 11:02:08 No 11:02:18 not quite. it's not the full meaning of first-class 11:02:20 It doesn't have e.g. function literals 11:02:48 certainly it has some elements of first-class functions. You can reference the function as a value. But yeah, no closures or anything like that. 11:03:01 or anonymous functions. 11:06:24 Necressiting hacks like exporting pointers to static functions... 11:09:08 ...at least C /has/ function pointers 11:09:12 I suppose. 11:09:33 Java requires the most awkward construction ever with anonymous types. 11:09:46 CakeProphet, which is what this person is defending 11:10:11 Which is _still_ better than LSL. 11:10:22 eh. IMO delegate types are a better solution to that kind of problem. 11:10:33 ala C# 11:10:52 What I would like in Java is method pointers (with ability to combine them with instance). 11:11:04 (both precombine and combine on call). 11:11:24 delegate int Callback (string data); 11:11:34 Callback f; 11:12:05 void setCallback(Callback g) { f = g;} 11:13:19 Ilari: Java 1.7 has that, IIRC 11:13:21 they're typesafe, and much less cumersome to work with. 11:13:30 Class#method, instance#method 11:13:49 with the same kind of type safety mechanism? 11:14:01 I guess it has to... 11:14:15 I can't imagine what kind of reprecussions non-safe method pointers would have. 11:14:19 to Java. 11:14:40 actually I can: unexpected runtime errors. 11:17:02 ofc, it's just sugar 11:18:59 I think the obstacle C-style languages having good type systems is the syntax 11:19:09 it is interleaved in with the program code. 11:19:49 so complex, Haskell-style types quickly become tedious and hard to read. 11:20:00 * CakeProphet has seen generics overdone in C# and Java both. 11:20:44 at least C# /has/ decent parameterized types. 11:20:53 Tuple even. miraculous. 11:21:30 When did C# get Tuples? 11:21:45 I've seen more than one Java library which contains a custom generic "Pair" class. 11:22:31 I don't recall the library it is in 11:22:37 but they have a set of Tuple generics 11:22:41 as well as Action and Func 11:22:52 Action being a void-return function 11:23:24 so Action and Func kind of serve as "anonymous delegates" 11:23:37 Func> 11:23:54 Int -> Int -> (Int,Int) 11:24:29 er... substitute the C# Int with Integer. That's the correct boxed int type. 11:26:32 Wait, this person knows Erlang. How do they not understand what I'm trying to express? 11:26:52 "pointers are process ids" 11:26:53 erm 11:27:11 Do they know anything other than Erlang? :-P 11:28:04 C++, Java 11:28:30 Perl 11:29:31 If they know C++ that statement about pointers is somewhat unexpected 11:30:45 They were referring specifically to Erlang 11:31:36 perhaps they've just gone along this whole time 11:31:45 not really knowing anything, but getting along 11:31:57 like many programming professionals? 11:33:15 * CakeProphet invented this statistic out of his head, btw. It's far too early for me to still be awake. 11:36:02 As we all are well aware, 89 % of all statistics are made up on the spot. 11:37:10 isn't it something more like pi%? 11:37:30 I don't really know, so I just made it up (gasp). 11:42:25 What esolangs might have trouble outputting newlines as required by a spec? 11:43:19 Underload has trouble outputting characters you can't input, so if you can't input a newline... usually you can, though. 11:44:20 I think the first question that PSOX 2.0 will ask is if it wants to use PSOX 2.1 options 11:44:28 Well, third question 11:44:42 First being "What is false?" and second "What is true?" 11:46:30 Thue's conventions for outputting newlines are a bit vague, but I guess usually it's made possible. 11:47:24 I should choose a core set of languages that PSOX2 is known to work well with 11:47:53 Hm. Maybe the more "special needs" languages 11:49:30 Then there's those that don't really have output. 11:50:04 I don't care about those 11:50:23 -!- FireFly has joined. 11:51:49 Taxi will be a core language. Because I say so. 11:55:15 What languages can't easily output numbers and/or characters? 12:01:39 -!- FireFly has quit (Ping timeout: 252 seconds). 12:08:57 Are there languages that can't output, say, more than N characters to a line? 12:09:44 theoretically, yes. :) 12:10:04 er... theoretically no. Because languages have no semantics. But screw theoretics. 12:11:09 Underload doesn't take input? 12:11:13 Then it can't be supported 12:11:34 Actually, screw that. 12:11:41 I'm making Underload a core PSOX2 language. 12:12:25 force it to take input! That's the spirit. 12:12:43 No, Underload+PSOX will just have limited capabilities 12:13:17 It won't be able to say, react to events in an IRC chatroom, but it can still join one, say something, and leave. 12:18:50 -!- hiato has joined. 12:19:40 -!- BeholdMyGlory has joined. 12:20:21 Evil idea: PSOX2 has a domain for turing-completeness. A language like Underload can actually output stuff that the PSOX interpreter will execute, and that code can do I/O 12:23:41 -!- augur has joined. 12:26:01 It's a language embedded directly in PSOX2 12:26:04 PSOX2-EZ 12:26:06 -!- wareya has quit (Read error: Connection reset by peer). 12:27:03 -!- wareya has joined. 12:27:30 You know what, I'll go ahead and make HQ9+ a core language. 12:27:33 (j/k) 12:27:46 * Sgeo_ wonders how that could be made to work, though 12:38:40 * Sgeo_ decides to call the embedded language PSOX.EZ, and a version not running in PSOX PSOZ.EZ-lite 12:38:45 erm 12:38:49 PSOX.EZ-lite 12:38:53 Although PSOZ is a cool name 12:40:35 hm, while learning haskell I noticed that the opposite of the term "break even" must be "span odd" ;) 12:40:37 * AnMaster runs 12:42:54 ez.somefunc 1 "hello"2 12:43:05 -!- hiato_ has joined. 12:43:26 -!- hiato_ has quit (Client Quit). 12:43:26 Sgeo_, explain that syntax? 12:43:40 as in, what does the 2 at the end do 12:43:51 AnMaster, it's another argument to ez.somefunc 12:44:01 The string is terminated by the second " 12:44:11 Sgeo_, so what about the trailing 2? 12:44:18 -!- hiato has quit (Ping timeout: 248 seconds). 12:44:26 AnMaster, that's another argument. The function accepts 3 arguments for some reason 12:44:49 Although I think I'll try something else 12:44:57 Sgeo_, oh so how do you separate the arguments 12:44:58 Hm 12:45:05 AnMaster, depends on the type of argument 12:45:06 I mean, it looked like it was separated by space there 12:45:10 Sgeo_, urgh 12:45:25 Numbers are terminated by space, strings by " 12:45:28 So: 12:45:35 ez.somefunc 1 hello"2 12:45:50 Or strings could be terminated by space I guess 12:45:57 ez.somefunc 1 hello\ world 2 12:46:01 yeargh 12:46:19 Sgeo_, this was supposed to be embedded in PSOX? 12:46:27 You have to realize, I'm trying to make it so it resembles what would be output by a PSOX2 program 12:46:41 AnMaster, why not? 12:46:43 hm 12:47:01 PSOX2 programs choose how they terminate numbers, how strings are delt with, etc 12:47:06 Sgeo_, what do you mean "resembles what would be output by a PSOX2 program"? 12:47:17 oh I see 12:47:48 Making PSOX.EZ-lite (Which isn't embedded in PSOX) helps me consider what options need to be available 12:47:55 Sgeo_, so about 4/5 of bf hello world for PSOX will be spent at setting up various PSOX settings? 12:48:03 or will it be passed from the outside? 12:48:08 AnMaster, the former 12:48:32 Sgeo_, how can you set up the settings from inside before you set up the protocol :P 12:48:53 sounds like a catch22 to me 12:48:59 AnMaster, I'm assuming that the program is capable of outputting one character for true and one for false 12:49:22 So the first thing the program does is output what it will use to represent false, then what it will use to represent true 12:49:23 Sgeo_, what about languages that can only output whole lines? 12:49:48 AnMaster, the PSOX interpreter will be able to see the first and second characters of lines 12:50:03 Sgeo_, okay what about intercal-72. iirc it can't do text IO. You are stuck with I II III IV V VI and so on 12:50:05 IIRC 12:50:32 Hm 12:50:41 hm or maybe it could 12:50:42 Well, I could be false and V could be true 12:50:42 not sure 12:50:55 oh wait I'm right 12:50:58 But from there, where could it go? 12:50:59 "Hello world cannot be implemented in INTERCAL-72 since the language lacks a facility for text output. Only "butchered" Roman numerals can be printed.[2]" 12:51:29 C-INTERCAL can do byte IO, so can CLC (though a completely different method) 12:51:52 So that's 4 major sections: Output of Numbers, Output of Strings, Input of Numbers, Input of Strings 12:52:02 C- and CLC- each have compatibility modes to use the other's IO rules, though 12:52:09 Some of which may be optional, including both Input sections 12:52:12 ais523, right 12:52:33 Sgeo_, you must support intercal-72 ;P 12:52:49 ais523, what does wikipedia mean with '"butchered" Roman numerals' I wonder? 12:52:50 AnMaster, I'm trying to figure out the best way to do that 12:52:52 ais523, clock face? 12:53:02 AnMaster: no, they're extended to go beyond the normal range 12:53:05 using lowercase as well as overlines 12:53:27 I don't see how the PSOX2 interpreter should be expected to natively understand Roman Numerals 12:53:41 Without special casing everything for just one language's benefit 12:53:47 Although that would be kind of interesting 12:53:54 ais523, you mean like after IVXM it turns into something else? 12:54:02 yes 12:54:13 wait, aren't there three between X and M? 12:54:17 50,100,500? 12:54:20 IVXLCDM 12:54:23 ah 12:54:34 ais523, after M what then? 12:54:47 Are there languages besides INTERCAL-72 that would want Roman Numeral output? 12:54:54 the same letters with bars over, then the same letters in lowercase 12:54:59 so 5000 is \V 12:55:03 Sgeo_, C-INTERCAL and CLC-INTERCAL 12:55:07 well, that should be a line over rather than a backslash before 12:55:31 Sgeo_: my advice is, recognise /patterns/ 12:55:33 Sgeo_, well, you can do byte IO but you would have to write the printf("%d", ...) equiv yourself 12:55:45 ais523, did you see my haskell pun above? 12:55:48 if the input says something 3 times and something else twice, that can be meaningful to psox 12:56:08 ais523, hm...? 12:56:24 Oh, I think I see 12:56:34 Sgeo_, eh? I don't 12:56:37 basically, you take input as binary, but what the individual bits are represented as is determined by looking at your input 12:56:37 So, for starters, True and False wouldn't be limited to one character? 12:56:48 yep 12:57:01 But that question was based on a misunderstanding 12:57:37 Question: Please put False once, and True twice: 12:57:40 IVV 12:57:52 I'm not sure if that's the sort of thing you meant 12:59:10 Taken to some sort of extreme, would this allow HQ9+ support? 12:59:49 ais523, so did you see it? :/ 13:02:09 Now, how would I go about asking questions about Strings? Would I ask, say, "Use numbers to represent characters, or use characters directly?" 13:02:52 you could have a flag to set whether strings were being taken literally, or in binary 13:03:29 literally, or numbers for each character, or binary? 13:04:15 BTW, the very first question is whether or not to use PSOX 2.1 features 13:04:45 This way, if PSOX 2.1 comes out, the opening.. stuff can mostly be changed 13:06:17 Actually, I might not need "Enter as binary" for strings, since I could have an option for numbers entered as binary 13:07:33 How do I separate the result from asking What is False and What is True from the rest of the questions' answers? 13:07:38 Sgeo_, you want bool before asking for numbers 13:07:42 or version 13:08:37 Yes, and I don't see how to separate bool from version and numbers 13:08:54 I mean, I can't really ask for separator, can I? 13:09:05 Unless I make the assumption that separator is one character 13:09:22 Even then, I'm not sure if I can do that 13:11:01 -!- Mathnerd314 has joined. 13:11:20 * Sgeo_ vaguely wonders how alise will react to all this 13:11:55 ais523, doesn't INTERCAL-72 do one number per line? 13:12:02 AnMaster: one number per two lines 13:12:07 oh fun 13:12:08 beause it needs an extra line to draw the overbars 13:12:35 Sgeo_, remember that when deciding to support intercal-72 ;P 13:12:41 it will be a PITA :D 13:12:47 So Newline is not good to be assumed to be separator 13:12:57 don't assume anything separator 13:13:02 just look at the sequence of bytes for repeats 13:13:07 don't assume anything at all 13:13:14 AnMaster, impossible. 13:13:38 Sgeo_, you could have a separate definition file containing the required stuff 13:13:53 like: 13:13:54 ais523, but it's possible that what a program wants to use for True repeats in a way that looks like separation between True and False 13:14:03 (define parser standard-byte) 13:14:07 or: 13:14:14 (define parser (lambda ...)) 13:14:27 Sgeo_: yes, I was wondering about that; presumably it's an unsolvable problem in general 13:14:29 Sgeo_, no way you can get more flexible than that 13:14:55 but you could require, say, three trues, two falses, two trues, that needs a pretty perverse string to be recognised incorrectly 13:15:20 Sgeo_, of course the equivalent can be done for languages like erlang, haskell and so on. Not sure about python 13:15:26 lisp is probably _the_ easiest one 13:16:47 well, shell wouldn't be too complicated either. Just messy. 13:16:47 AnMaster, I don't want to do that. I want all the information to be contained in the program 13:17:01 Sgeo_, then what ais523 suggested seems like a good idea 13:18:36 Sgeo_, idea: do what ais523 said to set up the basics. Then provide a way for the program to feed you a new parser function over this protocol, in case they want to switch to something less cumbersome (for them) but which can't be expressed the normal way. 13:19:34 Hmm.. 13:19:34 -!- Zuu has quit (Read error: Connection reset by peer). 13:19:46 Does the parser need to be TC? 13:20:32 * Sgeo_ wonders what role, if any, PSOX.EZ could play 13:21:16 it probably /should/ be TC, so esolangs which aren't TC could use PSOX to add TCness 13:21:18 just like it adds OS calls 13:21:19 If it's possible, but annoying, given the defaults, to use PSOX, then it would be possible for the new parser to just be fed to a regular function 13:21:32 ais523, that's the point of PSOX.EZ 13:21:33 ais523, through using the parser? Genius! 13:22:13 Sgeo_, it is much more esoteric if you do it through using a custom parser function 13:22:54 PSOX.HARD 13:23:56 hm? 13:24:19 Seriously, I'd have no clue how that would work out 13:25:23 ais523, hm what is the best way to refer to a haskell function? As in make it clear when talking about it on irc that you mean a function. Like you would say "strlen()" or such when wanting to make clear you mean a C function, or length/1 to make it clear in the context of Erlang code. 13:25:34 I can't see any obvious such way for haskell 13:26:16 putStrLn :: String -> IO () 13:26:25 -!- FireFly has joined. 13:26:35 Actually, I think there is a convention 13:26:38 Not sure what it is 13:26:44 AnMaster: In what kind of situation would you need to disambiguate? 13:27:59 Deewiant, well odd 13:28:02 might be one 13:28:26 ?? 13:28:30 Deewiant, even even could be good to disambig in some situations 13:28:30 -!- MizardX has joined. 13:28:37 like that one 13:28:37 Oh, those functions 13:28:45 Hmm 13:28:56 Deewiant, you see, you got all confused by it :P 13:29:08 AnMaster++... oh wait 13:29:11 Because I asked about a situation and got a function back :-P 13:29:14 Sgeo_, ? 13:29:29 Deewiant, hm 13:29:38 AnMaster, tried to increment, but this is Haskell 13:29:42 Sgeo_, right 13:30:04 Well, one that always works is "the foo function" where you can even quote it (`foo`) if you want 13:30:09 hm you can't define postfix functions/operators in haskell right? 13:30:11 But I guess you wanted something shorter... dunno 13:30:25 Not really, no 13:30:31 hm 13:31:05 Deewiant, oh btw, I guess from now on, not breaking even should be called spanning odd 13:31:11 ;) 13:31:38 s/not// 13:36:42 Maybe I don't _want_ all TCness to be in the parser 13:36:51 I mean, that's kind of insane 13:36:54 -!- Zuu has joined. 13:37:56 Ideally, PSOX.EZ-lite with an appropriate header should be fully turing-complete and I/O capable 13:38:28 If literally read into the PSOX2 intepreter 13:41:30 ais523, would regex be sufficient for parsing most languages? 13:41:39 Sgeo_: far from it 13:41:45 blargh 13:41:46 the vast majority of languages can't be parsed with a regex, in fact 13:41:56 erm, the output, I meant 13:41:57 even ones like Python with a deliberately simple syntax 13:42:22 As a custom parser providable by the program for PSOX2 13:42:32 Although PSOX.EZ might be better 13:43:58 ais523, can regex be parsed with regex? 13:44:11 no, it allows nested parens 13:44:30 ais523, could a regex with non-nesting parens self-parse? 13:44:50 again no, unless it was incredibly simple 13:44:56 ais523, why not? 13:45:20 * Sgeo_ needs to determine how PSOX2 should handle varargs 13:45:26 AnMaster: think about backslashes, and escaping them 13:45:39 I want a PSOX.EZ function that can call PSOX functions 13:45:46 ais523: that is perfectly recognizable by a regular expression 13:45:46 ais523, hm okay 13:46:10 Zuu: yes, but not one without parens that's the same length as what it's recognising 13:46:11 ais523, could PCRE self-parse? After all it allows recursive matching of nested parens 13:46:19 possibly 13:46:26 that is PCRE without cheating by escaping to "native" code 13:46:46 Sgeo_, why varargs? 13:46:56 Sgeo_, just take a list of arguments instead 13:47:03 I think so 13:47:04 Sgeo_, like io:format/2 in erlang 13:47:09 it is analogous to printf 13:47:24 Well, then I need to figure out how to represent a list 13:47:27 io:format("format string", [list,of,parameters,for,format,string]). 13:47:48 I was thinking of asking for a function ender, but a list separator and terminator might be better 13:48:19 hm 13:49:03 Asking for separators is troublesome. Should I ask for a string, and whether or not it's to be taken literally? Can I provide the option for the terminator to depend on the.. wait, n/m 13:49:22 numbers and strings have their own terminators 13:49:38 But I still need to terminate the list somehow 13:55:39 ais523, how does INTERCAL-72 output 0? 13:56:21 an overline with nothing beneath it 13:56:27 ah interesting 14:00:49 * Sgeo_ decides that there will be no PSOX.EZ-lite. Just PSOX-lite. 14:01:00 No reason not to include other PSOX functions in the language 14:02:19 -!- Mathnerd314 has quit (Ping timeout: 276 seconds). 14:04:46 > zipWith 14:04:46 zipWith zipWith zipWith3 zipWith3 zipWith4 zipWith5 zipWith6 zipWith7 14:04:57 hm that seems somewhat annoying 14:05:53 ais523, why do haskell not have some zipWithN that takes a list of lists and a function that takes a list of values? 14:06:15 and why are there two "zipWith" listed there? 14:11:52 Is this a decent model for PSOX.EZ: The program calls an ez.edit function, that edits the function on a certain slot 14:12:13 Then it calls other .ez functions that add to the editied function's code 14:12:20 Then calls, say, ez.done or something 14:13:13 Sgeo_: you're reaching almost zzo38 levels of lack of context there... 14:14:00 Well, by slot, I'm thinking an array of stored .. ezfunctions 14:32:10 -!- BeholdMyGlory has quit (Remote host closed the connection). 14:37:43 ais523, for numbers processing, if the program says it wants to define its own digits, and PSOX asks for it to do True say, 16 times for base 16, then False, then for each digit, True for each character in the digit, then False, then the digit, is that reasonable? 14:38:11 binary > unary for that sort of thing 14:38:46 Hm, good point 14:39:04 hm how does one find docs on a function in Prelude or Data.List or whatever? Anything like erl -man for haskell? 14:39:05 Although.. how many digits will be in the binary? 14:39:08 ais523, ^ 14:39:23 AnMaster: there's a search engine for that sort of thing on haskell.org 14:39:25 called Hoogle IIRC 14:39:30 ais523, offline docs I meant 14:39:38 ais523, ^ 14:39:49 Sgeo_: there are ways to code it 14:39:56 look up binary-coded-ternary, and base fibonacci 14:40:11 ais523, I'm far from always online when I'm practising programming. Atm I'm outside with laptop connected over 3G to bouncer at home 14:40:27 local docs would be preferred due to cost and such 14:42:34 ais523, the only information on the former that I see is some.. optical thing? 14:42:48 -!- ais523 has left (?). 14:43:14 :( 14:43:18 I think I irritated him 14:47:44 Sgeo_, Yeah probably you rather than me. Since you asked em a lot more questions than what I did 14:52:05 AnMaster: zipWithN is ([a] -> [b]) -> [[a]] -> [[b]], which is not as useful since lists' elements have to have the same type 14:53:02 Deewiant, oh right. 14:53:28 As for offline docs, I have a bookmark to ~/.cabal/share/doc/index.html (if that doesn't exist there's /usr/share/doc/ghc but that won't have user-installed stuff if you ever install such) 14:53:57 Deewiant, hm. It seems when looking at stuff that "tail recursion except it uses cons" is fairly popular in haskell code. From this I presume haskell somehow optimises this into tail recursion? 14:54:00 is that right? 14:54:07 No 14:54:11 hm 14:54:19 Lists are lazy data structures 14:54:31 (a : b) doesn't have to evaluate a or b 14:54:32 I remember reading that tail recursion + cons is possible to optimise though 14:54:40 And if you request a, it isn't necessary to evaluate b 14:55:03 Deewiant, yes but if you want to evaluate the whole thing you will end up evaluating it all anyway 14:55:20 Deewiant, so there the laziness won't help 14:55:20 Yes, you will, but often the list doesn't need to be created 14:55:25 huh 14:55:34 http://www.haskell.org/haskellwiki/Short_cut_fusion 14:55:59 http://www.cse.unsw.edu.au/~dons/papers/stream-fusion.pdf 14:56:28 Deewiant, for example: show (map (\x -> x*x) [1..100000000]) 14:56:42 not sure if map is tail recursive or not 14:56:47 Can be done in O(1) space 14:57:04 Deewiant, yes it can, but does ghc/ghci do that? 14:57:15 Yes 14:58:04 hm... You could in theory optimise a lot of bloated C++ into very efficient code. But no compiler is smart enough for it. 14:58:56 Deewiant, couldn't lazy evaluation cause problems sometimes. Like with that "Fibonacci that is smart and count upwards instead of downwards"? 14:59:28 Don't know what you're talking about re. Fibonacci, but yes, lazy evaluation is not a panacea 14:59:48 http://paczesiowa.blogspot.com/2010/03/generalized-zipwithn.html defines a general zipWithN 14:59:55 (It's nontrivial) 15:01:03 Deewiant, well you know the usual "dumb" fib implementation (base cases left out for brevity)? fib n = fib (n-1) + fib (n-2) ? 15:01:06 -!- CakeProphet has quit (Ping timeout: 245 seconds). 15:01:24 Yes, I know Fibonacci 15:01:35 Deewiant, then there is the variant implementation that starts from the base cases and counts upwards to n 15:01:59 which is O(n) instead of O(n^2) iirc. At least for other languages than haskell 15:02:46 I don't remember the exact form of it 15:02:49 * AnMaster tries to find it 15:03:35 Isn't there way to calculate fibbonacci series in time (if integer operations are assumed to be O(1)) of O(log n)? 15:06:22 meh can't find it 15:06:39 -!- ineiros has quit (Ping timeout: 240 seconds). 15:07:05 basically it counts upwards and remember the values of n-1 and n-2 (memoising basically) 15:07:58 Ilari, hm I think there is 15:09:03 -!- CakeProphet has joined. 15:09:41 oh btw is there a way in haskell do make a function like: f :: [Int] | [Char] -> ... 15:10:19 that is, one that can take a finite number of alternative different types. Probably handling them by two different pattern matches 15:10:57 this is something that would be trivial in erlang. But of course since it is dynamically typed that is quite a different situation 15:11:04 data SomeType = I [Int] | C [Char] 15:11:06 ? 15:11:09 hm 15:11:11 f :: Either [Int] [Char] -> ... 15:11:15 Or that 15:11:17 Sgeo_, well, somewhat bulky but could work 15:11:24 But yeah, basically like that 15:11:29 Deewiant, ah, I haven't learned about Either yet. Interesting 15:12:07 Deewiant, could you have Either (a,b) (a,b,c) (a,b,c,d) and so on? 15:12:20 No 15:12:25 data Either a b = Left a | Right b 15:12:30 hm 15:13:24 Of course you can nest Eithers but you soon get to the point where it's a better idea to just write a custom data type :-P 15:13:56 That is another troubling thing. How do you declare an "infinite" type. Like Integer. Lets say I want a type that contains all powers of two. 1,2,4,8,16 and so on 15:14:16 There's a simplish identity "fib(2n) = f(n+1)^2 - fib(n-1)^2", that sounds like it should make it possible to get fib(n) in O(log n) time since you can basically divide n by two with that. 15:14:37 AnMaster: That's dependent typing, which Haskell doesn't have. 15:14:52 Deewiant, oh. So how is the type Integer declared? 15:15:14 data Integer = S# Int# | J# Int# ByteArray# 15:15:32 Deewiant, or what about this: A non-empty-list of non-empty lists. Even erlang's "optional" type system can represent that 15:15:53 type NonEmpty a = (a,[a]) 15:15:56 Deewiant, that looks like it is abusing internal stuff 15:16:01 Deewiant, that looks like a tuple 15:16:03 not a list 15:16:10 Lists can be empty. 15:16:23 -!- CakeProphet has quit (Read error: Operation timed out). 15:16:56 Deewiant, yes but I want to specialise the list type to a type only containing non-empty ones. I can't see any good reason why it would be impossible. :/ 15:17:03 Again, that's dependent typing. 15:17:07 ah 15:17:40 You can't change the fact that list is declared as [a] = [] | a:[a] (or it would be, if it weren't built-in syntax) 15:17:52 hm 15:19:03 also the syntax for "these two parameters are the same" seems to require guards in haskell, in erlang you just do foo(A,A), which would only match if the second A matches the first A 15:19:28 sure, can be done with guards, but somewhat more verbose syntax 15:19:29 Yes, Miranda had that too, but Haskell doesn't for some reason. 15:19:38 It rarely matters in practice. 15:20:53 hm 15:22:37 Deewiant, are there any simple rules of thumb for exactly when haskell's lazyness will cause issues? I mean, with something like lisp or erlang the rule goes like "use tail recursion if you will be working on non-trivial sized lists". For haskell the rules seems a lot more complex... 15:23:24 Be lazy if it makes sense to observe only part of the output 15:23:40 hm 15:24:04 -!- CakeProphet has joined. 15:24:06 Deewiant, for a general library function like those in Data.List it could be very hard to know. 15:24:23 How so 15:25:28 Deewiant, well consider map. The user could decide to require it all or just up until some point. And if it isn't lazy you can't map over infinite lists. 15:25:50 There are cases where it makes sense, so map should be lazy. 15:25:58 hm 15:26:15 The compiler can strictify stuff where necessary, but not lazify. 15:26:17 Deewiant, is tail recursion with an accumulator lazy? I presume it isn't 15:26:29 accumulator list I meant 15:27:25 The accumulator is lazy. 15:27:35 in erlang you often append at the start of the accumulator in your tail recursive function, then have a lists:reverse call in your base case. (Which is implemented in the virtual machine itself, thus is more efficient) 15:28:05 but I can't see how that would be possible to make lazy. Or rather, possible to make lazy without having an extremely smart compiler 15:28:22 so would that be lazy or not? 15:28:32 reverse isn't lazy, because it has to traverse the whole list before giving any output. 15:29:00 The parameter isn't evaluated until it gets to the reverse. 15:29:08 (And until the reverse is evaluated.) 15:30:06 Deewiant, does ghc optimise ++ in a recursive function? After all the compiler could see you kept appending to the end, and updating in place would not be visible anywhere before returning, thus generating code that appended to the end in place and kept a pointer to the current end all the time 15:30:24 it is quite feasible to do this, question is if ghc does it 15:30:32 I don't know. 15:30:39 Probably not. 15:31:09 pity, that would make trivial implementations of many list functions a lot faster. 15:33:29 -!- BeholdMyGlory has joined. 15:39:53 AnMaster: generally speaking, GHC does optimizations of that kind. But I don't know if it's smart enough to /always/ do it 15:40:04 hm 15:40:19 this question is probably better answered by some of the pricks on #haskell. :) 15:40:36 -ahem- I mean very nice people. 15:42:36 heh 15:43:04 sigh... reasoning about strict code is a lot easier than lazy code 15:47:53 PSOX2 types: bools, literals, numbers, strings, lists 15:48:03 Sgeo_, literals being? 15:48:13 AnMaster, say the program is in HQ9+ 15:48:19 mhm? 15:48:35 And some function, maybe parser related, wants to know "Ok, how do you specify XYZ" 15:48:52 HH? 15:49:07 It would be annoying to use strings for that because presumably, for strings, you're already set up to use binary for each character 15:49:31 Sgeo_, eh? How will you represent strings for INTERCAL-72 then? 15:49:52 Sgeo_, for input it needs to take spelled out numbers in English 15:49:53 iirc 15:49:59 like ONE FOUR NINER 15:50:02 for 149 15:50:24 Sgeo_, and output is roman numerals only 15:50:34 so it isn't even symmetric 15:50:37 So instead, .. oh, let me answer that question 15:50:48 Input options and output options can be specified separately 15:50:52 good 15:51:11 I currently don't know what the input options will look like 15:51:15 right 15:52:06 Anyway, literals could be used for things like separators. Separate domain from function 15:52:47 So that, say, HQ9+ can say that a separator is h9h instead of having to spell out all the characters 15:53:43 uhu 15:57:52 * Sgeo_ wonders how safe it would be to use q 15:59:05 Sgeo_, what did q do? 15:59:09 oh quine 15:59:10 right 15:59:20 depends on how soon you detect a repeating pattern 15:59:44 it would need to be multi-line for INTERCAL-72 I think 16:00:23 Nothing wrong with multi-line 16:01:53 * Sgeo_ ponders adding symbol to the list of types 16:02:03 There would be a function that takes a literal and stores it somewhere 16:02:22 Then, a function that accepts a symbol would just wait for the .. thingy 16:02:26 Whatever the literal was 16:02:49 -!- cpressey has joined. 16:03:40 Was the type system one of PSOX's big problems? 16:03:49 Because PSOX2's type system is ever expanding :/ 16:08:13 -!- Mathnerd314 has joined. 16:10:48 Sgeo_: The Brainfuck-side code should be reasonably simple. 16:12:03 I think it would be 16:15:06 Although this is not going to be BF-specific 16:15:15 I guess I shouldn't lose sight of BF though 16:15:36 Sgeo_: No, but what can be done easily in Brainfuck can be done easily in a very large number of esolangs. 16:15:55 * ☠ :Erroneous Nickname 16:15:55 :( 16:15:58 I thought PSOX's flaw was that it was too BF-specific? 16:15:58 Hence, one can reasonably consider it a "lowest common denominator" of capability. 16:16:29 I think HQ9+ is my lowest common denominator 16:16:33 PSOX's flaw was that it was too darned hard to use outside of Brainfuck, and slightly less hard in Brainfuck. 16:16:51 * Sgeo_ blinks 16:17:09 How was it hard to use in BF? 16:17:20 ... The bignums! The bignums! 16:18:15 Those were mostly optional 16:18:30 so does any of this fit into calamari's OS idea? 16:20:01 -!- ais523 has joined. 16:21:24 wb ais523 16:24:29 hello ais523 16:24:41 hi 16:25:16 -!- sebbu has quit (Ping timeout: 260 seconds). 16:32:39 -!- relet has joined. 16:36:10 -!- sebbu has joined. 16:48:15 hello ais523 16:48:26 hi 16:50:02 when was windows 2000 released? IIRC the support for it finally ends tomorrow 16:50:24 2000. 16:50:34 right, you can never know with microsoft 16:50:43 XP was 2001. 16:50:50 wasn't windows 95 released in 96 or such? 16:50:52 Yes, really, it was obsoleted a year later. 16:50:59 No, just very late 95. 16:51:03 right 16:51:10 Some of the OSRs were in 96. 16:51:15 OSR? 16:51:39 Don't recall the expansion, but these were versions of 95 with added features for OEM usage. 16:51:45 ah 16:51:56 Featuring stuff like USB support and built-in IE. 16:53:25 wasn't that windows 95 SE and such? Second Edition or something 16:53:31 or was it 98 that had those? 16:53:36 98 had SE. 16:53:39 95 had the OSRs. 16:53:42 right 16:53:57 They're analogous, but 98 SE was actually sold to the general market. 16:54:01 ah 16:54:16 Anyways: from 95 to 2001, there was effectively a Windows release every year. 16:54:31 And then... Nothing until Vista. 16:55:32 pikhq, you don't count the service packs? 16:55:42 XP SP1/2 16:55:48 was there ever a third one? 16:55:50 Mmm, okay, we can count the service packs. 16:55:51 not for xp 64-bit iirc 16:55:53 Yes, there was. 16:56:02 64-bit skipped a service pack. 16:56:07 indeed 16:56:15 pikhq, did it skip at the start or the end? 16:56:18 ... Oh wait. No, that's not it at all. 16:56:28 pikhq, eh? 16:56:35 XP 64-bit was actually a marketed-as-XP version of Server 2003. 16:56:42 hah 16:57:03 pikhq, it *feels* like XP 32-bit. I used both. 16:57:15 Yes, Server 2003 didn't diverge massively. 16:57:18 it has the security center and all that iirc 16:57:44 Yeah. 16:58:06 It probably had the XP version of various UI widgets rather than the Server one. 16:58:09 pikhq, only difference is that it is sluggish after logging in on it virtualbox for about 20 seconds instead of about 2 minutes for 32-bit xp 16:58:12 no idea why 16:59:03 both had guest additions and such installed. Only difference I can remember is that the 32-bit one was home and Swedish and the 64-bit one was pro and English 17:01:02 -!- aschueler has joined. 17:07:30 -!- jberryman has joined. 17:12:47 In addition to "Windows XP x64 edition" for amd64, there was also that "Windows XP 64-bit edition" for Itanium, which apparently existed in two versions (2002 and 2003), the former of which was based on the XP codebase, while the latter was Server 2003 -like. 17:13:55 I think MSDNAA or some other relatively similar Microsoft offering (perhaps a predecessor) included the "64-bit edition", and it was a clever ruse since it wasn't the x64 edition but instead the Itanium one, making it pretty useless for most folks. 17:16:08 -!- Gregor has joined. 17:23:34 hm the value encoding for hdparm -S is definitely esoteric 17:24:19 for example: "255 is interpreted as 21 minutes plus 15 seconds" (and there is much more strange things like that for other values 17:24:45 fizzie, I got the x86_64 one from MSDNAA 17:29:10 -!- oerjan has joined. 17:37:24 AnMaster: Mhm. Well, this was quite a while ago, and it might not have been MSDNAA exactly. 17:37:24 Scanner encountered IMPOSSIBLE TOKEN today! 17:38:13 cpressey, context? 17:38:31 AnMaster: No thank you. I'm full. 17:38:47 cpressey, so you gone completely insane then? XD 17:38:56 ais523, why do haskell not have some zipWithN that takes a list of lists and a function that takes a list of values? 17:39:07 oerjan, I think I already got a full answer to it 17:39:09 you can easily do it with a bit of transpose 17:39:11 ok 17:39:19 oerjan, thought not that bit 17:39:49 * Sgeo_ Futuramas 17:39:53 hm does haskell have any printf equiv? 17:40:01 AnMaster, yes 17:40:12 how? The type could vary? 17:40:15 types* 17:40:27 It's some type that does weird things, I think 17:40:31 ah 17:40:36 forall r. (PrintfType r) => String -> r 17:40:50 huh 17:40:54 !haskell Text.Printf.printf "%s: %d" "Like this" (42::Int) 17:40:57 Like this: 42 17:41:00 AnMaster, also, how could you not have noticed that we're all insane? 17:41:40 AnMaster: the ::Int is necessary here to make sure it gets the right type. I think. 17:41:48 the main reason format strings are more useful than manually concatenating strings IMO is that it makes i18n easier. Try translating strings like " of " out of context, could be different words in different phrases. 17:42:25 oerjan, hm. 17:42:40 oerjan, does it validate the format string at compile time? 17:42:46 No. 17:42:47 AnMaster: it's a very clever type hack with type classes 17:42:48 ah 17:42:52 I see 17:43:03 would be cool if the type depended on the format string somehow 17:43:10 Again, dependent types. :-P 17:43:11 AnMaster: The "21 minutes plus 15 seconds" isn't completely bonkers; it's just that in general it gives the time using units of 5 seconds (252*5 s = 21 min, 255*5 s = 21 min, 15 s), except that some values (241..251, 253 and 254) have special other meanings. 17:43:22 Deewiant, right. Whatever that is exactly, haskell should add it 17:43:36 AnMaster: however the interpretation of the format string depends on the actual types passed 17:43:42 fizzie, hah 17:43:42 fizzie, you're an Esotericer. You are unable to determine bonkers from non-bonkers >.> 17:43:43 AnMaster: I think that would be highly nontrivial 17:43:51 Cherish your special other meanings. 17:43:52 AnMaster: Ask alise about it, she knows. 17:43:58 so that it is still type safe 17:44:09 Esoterice is the best rice ever. 17:44:45 oerjan, so you mean it ignores %d if it has a string, and instead puts a string there? 17:44:56 um 17:45:11 Going to watch some Futurama now 17:45:12 !haskell Text.Printf.printf "%d" "test" 17:45:14 *** Exception: Printf.printf: bad argument 17:45:14 AnMaster: He means that if you say %d and give a float it'll error. 17:45:21 well that makes more sense 17:45:39 Runtime errors are not type-s.. well, not statically-type-safe? 17:45:42 !haskell Text.printf.printf "%s %s" "one" 17:45:55 Fine, don't channelify. 17:45:56 Wouldn't that be a function? 17:45:57 Sgeo_: indeed, but it's memory safe 17:46:02 Deewiant, it went to dcc? 17:46:16 Aye 17:46:21 !haskell Text.printf.printf "%s %s" "one" 17:46:24 Deewiant, large runtime error? 17:46:26 I guess the type error is too long 17:46:35 what? Type error? 17:46:42 oh runtime one? 17:46:44 Parse error 17:46:53 huh 17:47:01 !haskell Text.printf.printf "%s %s" "one" 17:47:07 hm 17:47:08 !haskell Text.printf.printf "%s %s" "one" :: String 17:47:12 ah dcc won't work here 17:47:13 !haskell Text.printf.printf "%s %s" "one" 17:47:19 !haskell Text.printf.printf "%s %s" "one" :: String 17:47:22 Er, that shouldn't be an error. 17:47:25 it will end up on wrong client, not the one I'm on atm 17:47:30 Er, of course it should be. 17:47:33 _Printf_ 17:47:35 I can't type and everybody else is copy-pasting. 17:47:38 !haskell Text.Printf.printf "%s %s" "one" :: String 17:47:39 *** Exception: Printf.printf: argument list ended prematurely 17:47:52 Deewiant: I did notice the lowercasing, I just wanted to see the error. :p 17:47:55 !haskell Text.Printf.printf "%s" "one" "two" :: String 17:47:56 *** Exception: Printf.printf: formatting string ended prematurely 17:48:00 fizzie: :-P 17:48:02 (Also I have no idea whether it's case-sensitive or not.) 17:48:15 Haskell is. 17:48:19 Seems to. 17:48:22 Anways, back to Futurama for me! 17:48:48 !haskell Text.Printf.printf "%s %s" "one" "two" 17:48:50 one two 17:49:08 (Sorry, I just needed closure on that.) 17:49:21 :-) 17:49:37 Sgeo_: Y'know, I always did like that s... ALL GLORY TO HYPNOTOAD 17:50:03 fizzie: haskell is very case sensitive, in fact lower and upper case identifiers are completely different namespaces (variables vs. constructors/types) 17:50:38 Yes, it's very, very sensitive about case. Touchy, even. 17:51:02 Once it completely stormed out on me when I accidentally used a lower-case 'g'. 17:51:20 !haskell Text.Printf.printf "%s %s" "one" "two" :: String -- printf doubles as sprintf too 17:51:22 "one two" 17:52:23 cpressey, yes it does have impressively large errors 17:52:30 Haha 17:52:31 http://paczesiowa.blogspot.com/2010/07/two-dimensional-analog-literals-in.html 17:54:50 A bold attempt at lexical abuse, indeed. 17:55:46 "-- ghc for 4x4 rectangle needs 500 mb of memory (I don't have a machine capable of checking 5x5) --" 17:55:53 An entirely practical thing. 17:55:59 Only the first solution. 17:56:07 Yes, I noticed. It still caught the eye. 17:57:22 -!- Mathnerd314 has quit (Ping timeout: 260 seconds). 18:02:28 -!- Mathnerd314 has joined. 18:03:23 Deewiant, for example: show (map (\x -> x*x) [1..100000000]) 18:03:59 while ghc optimizes such things, it's based on special rules for builtin list functions like map iiuc 18:04:18 so it doesn't apply to functions you build directly using cons and tail recursion 18:04:33 unless you also add such a rule pragma for it 18:05:28 http://haskell.org/ghc/docs/6.12.2/html/users_guide/rewrite-rules.html 18:06:44 Ah, Haskell, the PL/I of functional languages. 18:06:53 oerjan, hm. Seems messy it can't detect it itself. I saw some paper discussing how to do it automatically for cons + tail recursion for scheme iirc 18:07:02 cpressey, what do you mean by that? 18:07:03 oerjan: It does execute that in O(1) even if you define your own map and enumFromTo. 18:07:26 Deewiant: well, that is laziness i guess. 18:07:32 I do love that you can write rewrite rules. 18:08:57 also the list [0,2..] ... how is it represented internally? Some kind of special end-marker instead of [] ? 18:09:24 oops, bbl food is ready 18:09:31 Over the weekend I wrote a Commodore 64 music interrupt routine -- not everything I want yet, but the basics are there (multiple voices, patterns, zero-duration events that make arbitrary changes to the SID registers...) 18:09:38 AnMaster: enumFromThen 0 2 18:09:49 !haskell take 10 $ enumFromThen 0 2 18:09:51 [0,2,4,6,8,10,12,14,16,18] 18:11:10 enumFromThen is also one of the "good producers" in the url i linked above, so it may very well be optimized away (for builtin types) 18:11:21 well Int and Char, it says 18:14:51 -!- Gregor-P has joined. 18:16:24 oh btw is there a way in haskell do make a function like: f :: [Int] | [Char] -> ... 18:16:53 you can also make a class method for it 18:17:27 Typeclass, yeah. 18:17:42 class MyF a where { f :: [a] -> ... }; instance MyF Int where ...; instance MyF Char where ... 18:18:25 oerjan, hah 18:19:04 enumFromThen is also a class method btw 18:19:12 !haskell :t enumFromThen 18:19:13 enumFromThen :: (Enum a) => a -> a -> [a] 18:19:24 Mmm, Enum. 18:19:45 I haven't got to typeclasses yet in this book. I think it is next chapter 18:19:53 What book? 18:20:02 cpressey: How coincidental; I instead wrote an Impulse Tracker module player stub (x86-32 Linux, /dev/dsp audio, <2kB of code) for a friend who needed one; it also doesn't do all the strange .it format stuff, but it does the basics: sample playback with linear interpolation, portamento/pitch-slide/vibrato/volume-slide/speed-control effects, panning, things like that. 18:21:06 real world haskell. Of those free online resources that others recommended in this channel it was the only one I found were all of comprehensible, non-silly, not extremely boring 18:21:23 I think it was ehird who recommended that one 18:21:41 It's the best 18:22:01 There's a simplish identity "fib(2n) = f(n+1)^2 - fib(n-1)^2", that sounds like it should make it possible to get fib(n) in O(log n) time since you can basically divide n by two with that. 18:22:11 Deewiant, well I noticed some typos. Like mixing up which filename it used for a file one paragraph above or such 18:22:46 that probably breaks down with odd numbers. there's a more complicated version that gives you both fib(2n) and fib(2n+1) though 18:23:20 you know, scheme seems to have (help 'foo), python have similar online help. Erlang at least have easily accessible man pages for each module. But haskell seems to require me to open a web browser to get reference docs 18:23:22 that is annoying 18:23:26 AnMaster: Submit errata if it's not already been submitted 18:23:26 based on multiplying matrices [fib(n) fib(n+1); 0 fib(n)] or something like that 18:23:32 oerjan: But note that if you get fib(2n) easily, you can also get fib(2n+2) (since it's just fib(2(n+1))), and then from fib(2n) and fib(2n+2) you get fib(2n+1) with just one subtraction. 18:23:39 Deewiant, it was mentioned in a comment on that paragraph 18:23:48 fizzie: oh hm 18:24:27 maybe it works then. anyway see you. 18:24:30 -!- oerjan has quit (Quit: leaving). 18:24:47 (Then you again have the three consecutive fibs, and could proceed with duplications as long as it's necessary.) 18:26:03 1. fib, story, tale, tarradiddle, taradiddle -- (a trivial lie; "he told a fib about eating his spinach"; "how can I stop my child from telling stories?") -- heh, tarradiddle. 18:26:33 :info foldl' saying "foldl' :: (a -> b -> a) -> a -> [b] -> a" is far less helpful than something containing some sort of parameter names 18:26:54 this takes longer to read if you need to check order of the parameters in the lambda 18:27:05 "hm which one is a, *eyes jump around in the line*" 18:33:44 If it gave you parameter names you'd get "foldl' f z xs" 18:35:04 Deewiant, argh... mathematicians ;) 18:35:44 My Haskell tends to look like that too, since it's obvious from the type what they mean ;-P 18:36:21 Deewiant, I would like docs like: foldl' (\acc element -> acc') acc0 [list] -> final_acc 18:36:23 or something like that 18:37:30 Deewiant, of course I found figure it out from the type. But that meant having to read more of it, to see which one was a and which one was b 18:39:03 Deewiant, and sometimes it might not be so clear. Something like isSuffixOf :: (Eq a) => [a] -> [a] -> Bool 18:39:17 a `isSuffixOf` b 18:40:04 Deewiant, yes but you know what ` is here? A dead key. And I use it as that when writing occasionally, so turning it off isn't an option really. Which means that is slower to type 18:40:14 and yes that one I remember, there are harder to remember cases however 18:40:30 I know it's a dead key on the scandinavian layout 18:40:40 btw how does something like: fromIntegral :: (Integral a, Num b) => a -> b work? 18:40:47 black magic? 18:40:54 And I recommend spending a key or getting a keyboard with more keys so you can have a non-dead version of ` :-P 18:41:07 Deewiant, second is not an option on a laptop 18:41:10 which is what I'm on atm 18:41:23 fromIntegral = fromInteger . toInteger 18:41:28 uh 18:41:48 okay then, how does fromInteger work? 18:42:10 class (Eq a, Show a) => Num a where ... fromInteger :: Num a => Integer -> a 18:42:26 class? Oh type classes hm 18:42:45 I guess that explains the seemingly magic breach of the type system 18:43:07 Nothing is breached because of the (Integral a, Num b) constraint 18:43:17 You can't do fromIntegral "foo" :: (Int,Int) :-P 18:43:49 hm 18:44:33 what about ord then (Data.Char) 18:44:49 ord :: Char -> Int 18:44:53 What about it 18:45:36 it isn't a Num or Integral according to :info 18:45:41 Char that is 18:45:51 True, and? 18:45:53 lookup table or what? 18:46:02 Probably a low-level cast 18:46:04 ah 18:46:17 Or exploiting Char 18:46:25 data Char = C# Char# 18:46:30 Deewiant, so black magic at last. The lack of "this only works because it is special cased in runtime" stuff made me suspicious 18:46:35 ;) 18:46:39 It doesn't have to be black magic 18:46:44 It's just more performant that way 18:46:47 hm 18:46:58 E.g. your lookup table would work fine 18:47:05 !haskell fromInteger 'c' 18:47:06 Deewiant, for unicode? 18:47:11 Hm how much space 18:47:19 Like said, it's not performant :-P 18:47:34 AnMaster: But also, ord = fromEnum. 18:47:37 well, what is the size of Char? 18:47:42 Deewiant, huh 18:47:53 fromEnum :: (Enum a) => a -> Int 18:47:55 !haskell (minBound,maxBound) :: (Char,Char) 18:47:56 ('\NUL','\1114111') 18:47:57 okay that looks like cheating 18:48:00 Deewiant, heh 18:48:13 !haskell join (***) fromEnum (minBound,maxBound) :: (Char,Char) 18:48:16 !haskell join (***) fromEnum ((minBound,maxBound) :: (Char,Char)) 18:48:23 Meh, it doesn't import things. 18:48:28 hm 18:48:32 !haskell Control.Monad.join (Control.Arrow.***) fromEnum ((minBound,maxBound) :: (Char,Char)) 18:48:35 *** ? 18:48:51 That should have worked :-/ 18:49:00 !haskell "foo" `isSuffixOf` "anyfoo" 18:49:25 !haskell print $ Control.Monad.join (Control.Arrow.***) fromEnum ((minBound,maxBound) :: (Char,Char)) 18:49:27 All I get from EgoBot are strange-looking PM's. 18:49:33 Deewiant, Enum? is that like data Foo = A | B | C ? 18:49:48 AnMaster: Read up on type classes before asking more of these questions :-P 18:49:53 !haskell "Hello, world!" 18:49:55 "Hello, world!" 18:50:19 Deewiant, ah right. I'm just at the stage where I start spotting various logic flaws in what I have learnt so far ;P 18:50:55 !haskell (fromEnum (minBound :: Char), fromEnum (maxBound :: Char)) 18:50:57 (0,1114111) 18:51:31 !haskell List.isSuffixOf 18:51:45 !haskell "foo" `Data.List.isSuffixOf` "anyfoo" 18:51:47 True 18:52:00 Data, of course. 18:52:12 !haskell "foo" `List.isSuffixOf` "anyfoo" 18:52:13 True 18:54:55 !haskell List.IsSuffixOf "foo" "anyfoo" 18:55:02 s/I/i/ 18:55:14 !haskell List.isSuffixOf "foo" "anyfoo" 18:55:16 True 18:55:30 EgoBot's error messaging leaves a lot to be desired. 18:55:43 Yep 18:57:10 huh, why can't lambdas have multiple "entry points" like normal functions 18:57:25 even erlang manages that 18:57:46 Because pattern matching directly in definitions is just syntax sugar for case 18:58:18 Deewiant, same goes for erlang if you ask the compiler to dump the stage just before it generates beam asm 18:58:23 Deewiant, so that is not a good reason 18:58:56 Well, er... because if you need that and case is too cumbersome, your lambda is so complicated that it should be a function anyway? :-P 18:59:49 Deewiant, well it just needed two cases. Hm does all top level functions in a haskell source file become visible outside? 19:00:19 Unless you specify what is visible, yes 19:00:26 ah you can do that, nice 19:00:41 useful in the case of a helper function being used by more than one top level function 19:02:20 Functions that are not to be exported must be written in invisible ink. 19:02:56 :P 19:03:21 cpressey, but I used all my invisible ink when coding in whitespace. I guess I need to buy more 19:03:28 -!- jberryman has quit (Ping timeout: 276 seconds). 19:07:21 -!- kar8nga has joined. 19:07:25 -!- myndzi\ has joined. 19:07:40 why no 1-tupple? Sure it is pretty useless but it still seems strange to just have a hole in the valid range. 19:08:13 Tuples are written (e1, ..., ek), and may be of arbitrary length k>=2. 19:08:28 The unit expression () has type () (see Section 4.1.2). It is the only member of that type apart from _|_, and can be thought of as the "nullary tuple" 19:08:47 -!- choochter has quit (Ping timeout: 265 seconds). 19:09:32 Deewiant, That doesn't really answer my question though. It just confirms thagt there is no 1-tuple. 19:09:40 It doesn't explain why 19:09:44 It says that () isn't really a tuple. 19:09:46 hm 19:09:51 () isn't a tuple to me 19:10:00 The trivial type is written as () and has kind *. 19:10:00 And 1-tuples ARE pretty useless. 19:10:04 The tuple types are written as (,), (,,), and so on. Their kinds are *->*->*, *->*->*->*, and so on. 19:10:06 that makes more sense 19:10:12 -!- myndzi has quit (Ping timeout: 240 seconds). 19:10:34 If you prefer, just do type Void = () and forget about ()'s existence ;-P 19:10:36 1-tuple, a.k.a. "single". 19:10:52 Deewiant, kind? 19:10:59 I guess I haven't got to that yet 19:11:02 I've never seen a mathematician concern themselves with a 1-tuple. 19:11:03 Yep. 19:11:12 Deewiant, type classes again? 19:11:34 Nope. 19:12:35 mhm 19:16:15 AnMaster: a kind has to do with type parameters 19:16:23 [a] has kind * -> * 19:16:30 No, [a] is a type. 19:16:42 ....right/ 19:16:43 ? 19:16:46 It has type *. 19:16:51 [] has kind * -> *. 19:16:54 er, well. bleh 19:16:55 okay. 19:17:19 s/\Vtype */kind */ 19:17:21 I thought he was learning Haskell not math. :P 19:17:37 the distinction is trivial to make. 19:17:44 In Haskell, [a] has kind * and [] has kind * -> *. 19:18:01 [] has kind * -> *. <-- why is that then? 19:18:09 Just read the book. :-P 19:21:16 wait, does the lambdas to foldl and foldr have the acc/value parameters in different orders? 19:21:30 Deewiant, is that correct? 19:21:33 Yes. No, I don't know why. 19:21:36 ah 19:21:48 Deewiant, it explains this strange bug I have been hitting for a while now 19:24:10 Occurs check: cannot construct the infinite type: a = [a] 19:24:16 now I'm confronted with that instead 19:24:30 Stupid occurs check. 19:24:34 I want infinite types. 19:24:40 No, you don't. :-P 19:24:54 They would have been very useful in that interpreter I was writing! 19:25:01 I want to know what I did wrong instead 19:25:30 or rather, what sort of thing could cause it hm 19:25:38 http://www.mail-archive.com/haskell-cafe@haskell.org/msg18345.html says why infinite types are a bad idea 19:26:03 In the first argument of `foldr', namely `step' 19:26:04 hm 19:26:15 AnMaster: (x:x) will cause that error, for example. (For any x.) 19:26:24 where step val acc | f val = acc : val 19:26:24 | otherwise = [] 19:26:26 like that? 19:26:27 Well, not quite any x. 19:26:31 it looks fine to me 19:27:49 foldr :: (a -> b -> b) -> b -> [a] -> b 19:27:59 So, step should have type a -> b -> b 19:28:01 did I confuse the order of val and acc hm 19:28:43 So assign 'val' the type 'a' and 'acc' the type 'b' 19:28:51 Deewiant: Thanks for the link. I think though, that's not really an argument against infinite types... that's an argument for not relying on a type checker which blithely allows them. If I could annotate the type with "infinite" or something, to indicate that I know what I'm getting into... 19:29:02 'acc : val' has the type of val 19:29:07 Ah, but I wasn't aware of "newtype" before. 19:29:38 AnMaster: So, in short, yes. 19:30:02 Deewiant, but it seems like first param must be element from list 19:30:07 since a matches the type a there 19:30:21 Yes 19:30:39 But your 'step' function has type [a] -> a -> [a] 19:30:45 This does not match a -> b -> b 19:30:51 Since you cannot unify b with both a and [a] 19:30:52 and I'm building a list of [a] since I'm trying to implement takeWhile with foldr. It is one of the exercises mentioned in the book. 19:30:59 Deewiant, ah hm 19:31:07 val : acc 19:31:08 that is it 19:31:13 Right :-) 19:31:30 Deewiant, it reported the error on the wrong line 19:31:32 annoying 19:31:43 If you had put a type annotation on step it probably would have reported it there 19:31:54 Deewiant, can you do that inside a where? 19:31:56 Yes. 19:32:01 huh, how? 19:32:14 Same way as at top-level. 19:32:28 where step :: ... 19:32:34 Yep 19:32:35 step ... = 19:32:37 and so ? 19:32:39 huh 19:36:13 Oh, so newtype is basically a type alias? This reminds me of Pascal! 19:36:24 type is basically a type alias. ;-) 19:38:04 Er, right. A newtype is a, what word would work better - "synonym"? It has the same structure but has a distinct identity. 19:38:36 so you need explicit conversion functions? 19:38:45 I think I'm confused. 19:40:15 Actually, I can't see yet how newtype differs from data. 19:40:58 http://www.haskell.org/haskellwiki/Newtype 19:41:24 Yeah, I read that, it wasn't very enlightening to me. 19:41:56 newtypes have no overhead on top of what they wrap 19:42:14 With data, you have the constructor 19:43:03 OK. That's more subtle than I was expecting. 19:43:44 is !haskell ghc or ghci? 19:43:46 Even if the data is strict in its parameter, _|_ and Data _|_ are distinct, but _|_ and NewType _|_ are identical. 19:43:54 `ls 19:44:03 bin \ cube2.base64 \ cube2.jpg \ hack_gregor \ hello.txt \ help.txt \ huh \ netcat-0.7.1 \ netcat-0.7.1.tar.gz \ out.txt \ paste \ poetry.txt \ quotes \ qw.pl \ share \ test.sh \ tmpdir.18581 \ wunderbar_emporium 19:44:04 ghci is ghc --interactive ;-) 19:44:13 Deewiant, well you know what I meant though :P 19:44:38 It's most likely GHC because you can import and define main and whatnot. 19:44:58 ah 19:45:06 s/GHC/ghc/ 19:46:37 the partially applied function thing seems fairly limited in that it is restricted to argument order 19:46:46 or? 19:47:11 -!- Gracenotes has quit (Ping timeout: 240 seconds). 19:47:36 for something like isSuffixOf partially applying either the first or the second parameter would both be useful, in different situations 19:49:00 (\ x y -> isSuffixOf y x) "foo" 19:49:09 flip isSuffixOf 19:49:17 I'm sure there's ways to do that in "pointless" style -- yes, exactly 19:49:24 !haskell ("foo" `isSuffixOf`) "foobar" 19:49:34 !haskell ("foo" `List.isSuffixOf`) "foobar" 19:49:35 False 19:49:47 !haskell (`List.isSuffixOf` "foobar") "bar" 19:49:48 True 19:52:15 ah 19:52:29 Deewiant, well, more than two parameters might be more of an issue :P 19:52:47 Just write lambdas 19:53:26 Deewiant, sure, but why do partial application at all then. Just syntax sugar? 19:54:15 Sort of, but also how all application works :-P 19:54:24 hm 19:54:40 Deewiant, does ghc optimise that in the generated code? 19:54:51 so it ends up like a function taking multiple parameters again 19:54:54 Yes, or things would be unbearably slow 19:55:00 right 19:57:35 "As-patterns have a more practical use than simple readability: they can help us to share data instead of copying it. In our definition of noAsPattern, when we match (x:xs), we construct a new copy of it in the body of our function." 19:57:36 um 19:57:49 seriously? ghc doesn't optimise that? 19:58:11 for context, the code was: noAsPattern (x:xs) = (x:xs) : noAsPattern xs 19:58:19 Dunno 19:58:20 if ghc doesn't optimise that.... wtf 19:58:53 ah a comment points out that is only true for ghc without -O or such 19:59:11 I think it's bad practice to write something which is both less clear and suboptimal anyway :-P 19:59:30 Deewiant, well the comment also compares: 19:59:34 foo (x:ys@(y:zs)) = ... foo ys ... 19:59:35 vs. 19:59:36 foo (x:y:zs) = ... foo (y:zs) ... 19:59:51 Deewiant, I have to agree that the latter seems easier to read 20:00:22 foo (x : ys@(y:zs)) is best IMO 20:00:31 Deewiant, I find that harder to read 20:06:15 Deewiant, hm... does . only work on functions with one parameter? 20:06:27 All functions have only one parameter 20:14:12 -!- Gracenotes has joined. 20:18:15 -!- coppro has joined. 20:31:41 Deewiant, well lets say an uncurried function then 20:32:10 All functions have only one parameter 20:32:23 If the parameter is of type (a,b,c,d) it's still one parameter. 20:32:30 hm 20:33:26 :type foldl . head 20:33:26 foldl . head :: [a -> b -> a] -> a -> [b] -> a 20:33:34 that looks strange 20:33:58 \fs -> foldl (head fs) 20:34:26 aha 20:34:46 somewhat confusing still 20:40:18 Deewiant: Latest news on the Descent 1 rendering front: I've manually crafted a "fireball" (it doesn't really look like realistic fire, but on the other hand neither does the game sprite) that the enemies could shoot, and it makes for a reasonably nice (if unrealistic and not at all fire-like; but again, it's not like it should be fire) splash effect if I use Blender's fluid-simulator to model how it could hit an enemy bot, but it takes quite a while to set sim 20:40:18 ulation domains and initial velocities and such properly (esp. since the movement should match pretty closely frame-by-frame what happens in the demo), and writing a script to set everything like that up based on the demo file sounds like far too much effort. I'm beginning to feel I'm wasting my time here (what, really?!). 20:41:34 (I dunno, really?!) 20:49:40 -!- augur has quit (Remote host closed the connection). 20:49:51 -!- augur has joined. 20:50:00 -!- augur has quit (Remote host closed the connection). 20:50:05 -!- augur has joined. 20:50:30 Deewiant, hm seq can only be implemented inside the runtime I suspect. Or would there be a way in pure haskell? 20:52:06 No, it's a primitive 20:52:27 Deewiant, primitive meaning something implemented in the compiler itself? 20:52:48 Meaning not definable in Haskell 20:52:58 ah 20:53:28 Deewiant, like a special form in lisp? 20:53:38 Yep 20:55:45 -!- hiato has joined. 20:56:04 -!- sebbu has quit (Ping timeout: 265 seconds). 21:00:54 -!- aschueler has quit (Ping timeout: 265 seconds). 21:09:48 Meaning, those things all languages have 21:14:29 -!- Mathnerd314 has quit (Ping timeout: 265 seconds). 21:16:09 -!- MigoMipo has quit (Remote host closed the connection). 21:16:39 -!- MigoMipo has joined. 21:20:14 -!- Mathnerd314_ has joined. 21:20:33 -!- Mathnerd314_ has changed nick to Mathnerd314. 21:30:56 -!- CakeProphet has quit (Ping timeout: 258 seconds). 21:32:02 -!- CakeProphet has joined. 21:42:36 -!- coppro has quit (Remote host closed the connection). 21:42:49 cpressey, hm trying to think of such in C. I guess for, while and other keywords would count as those there 21:42:59 possibly the stuff in stdarg.h too 21:43:34 + 21:43:37 though actually I seem to remember a pure C implementation of that. What a mess 21:43:49 % 21:43:56 sizeof 21:44:10 cpressey, + can be implemented as a increment for finite types 21:44:12 in theory 21:44:36 % could be implemented without that too. Just very inefficient 21:44:41 sizeof would be harder 21:44:57 of course the syntax doesn't allow you to name a function + or % 21:45:05 but the same feature could be implemented 21:45:11 Difference is that those are actually keywords; seq isn't 21:45:22 You could of course implement seq in Haskell too, just write a Haskell interpreter in Haskell 21:45:54 That is, of course, not the same thing :-) 21:45:58 You can get a sort-of sizeof with a pointer-arithmetics-based macro, but it's messy and probably not quite identical. 21:46:23 ah I seem to remember the gnu extension alignof can be done with pointer arithmetic 21:46:43 fizzie, you would need to know the last member + the size of it I think 21:46:56 Dear Chrome: Please stop ignoring me. Love, Sgeo 21:47:43 hm is it possible to make a language entirely without special forms? 21:47:47 -!- kar8nga has quit (Remote host closed the connection). 21:47:52 hm probably not 21:47:58 except the null language 21:48:08 Not if you want strings to have meanings 21:48:30 The language (0|1)* has no special forms, as such 21:48:34 cpressey, do natural languages have special forms I wonder... 21:48:42 cpressey, hm good point 21:49:32 If you restrict yourself to sensible platforms and implementations, you can get the size of a type by taking "((type*)0)+1" and dumping that back to an integer; and conversely for declared variable "x" by simply (char*)(&x+1)-(char*)&x, but getting sizeof() of an arbitrary expression is going to be problematic. 21:50:24 fizzie, ooh fun 21:50:26 -!- p_q has joined. 21:50:52 so sizeof is not a special form except possibly for "macros evaluate more than once" 21:50:59 which there is a gnu extension to avoid 21:52:12 Well, really, to get your macro implementation to do sizeof(1UL) properly is not exactly trivial. Possibly if you have the typeof() GNU extension, but that's a bit... cheatingy. 21:52:27 Then someone would just ask you to implement typeof() as a macro, and where would you be then? 21:52:37 -!- poiuy_qwert has quit (Ping timeout: 265 seconds). 21:52:46 fizzie, reducing one problem to another 21:52:48 :P 21:53:07 mathematicians do it all the time. So it must be okay 21:53:39 I think that's if you can solve what the problem was reduced to 21:54:11 Sgeo_, nah it is used to prove that solving something else would solve that problem as well 21:54:26 or for finding if some logic function is universal 21:54:27 or whatever 21:54:29 Just reduce two problems to each other and let the compiler figure it out 21:54:46 Deewiant, you could have typeof as a special form but not sizeof 21:54:51 I don't see the issue with that 21:55:12 if 21:55:20 then 21:55:21 else 21:55:28 goto 21:55:29 Deewiant, just reduce your special forms to the minimal possible set 21:55:36 Deewiant, then? C doesn't use that 21:55:47 abort() 21:55:53 } 21:55:54 cpressey, not a special form 21:56:05 ? 21:56:17 cpressey, I implemented abort() in C on an embedded platform. It calls _exit() 21:56:34 and _exit() is implemented in terms of abort() 21:56:40 #define sizeof(x) ({ typeof (x) _xxx; (size_t)((char *)(&x+1) - (char *)&x); }) /* disclaimer: untested, uses GNU extensions, breaks if _xxx has been #defined something strange, pointless anyway */ 21:56:44 cpressey, incorrect. _exit there calls the OS task manager 21:57:02 Oh no! cpressey is incorrect! 21:57:21 cpressey, besides abort() on systems that have stuff like core dumps couldn't have _exit() implemented in terms of abort() 21:57:51 cpressey, and there you could make abort() just do *0; or such (assuming that page was never mapped, like on linux) 21:58:20 fizzie, :D 21:58:49 break 21:58:49 abort() on a hosted (non-freestanding) C system -- well, C99 anyway -- is defined in terms of raise(SIGABRT), though. 21:58:52 cpressey, agreed 21:59:02 fizzie, right 21:59:07 You agree with "break"? How? 21:59:31 cpressey, that it is a special form, well or syntax. Is "let" a special form in haskell? I guess it is. 21:59:57 You can implement break with goto, if I'm not mistaken 22:00:05 cpressey, oh good point 22:00:17 cpressey, requires you to add a label at the end though 22:00:20 You need to put some labels in, though; you can't just #define ... 22:00:23 Right, what he said. 22:00:32 I wonder if that matters or not. 22:00:47 depends on how exactly you define special form 22:00:49 You can't #define anything at all in Haskell. 22:01:08 AnMaster: The semantics of let can be duplicated with lambdas. 22:01:14 Deewiant, hm okay 22:01:22 You could possibly do a set of macros for all break'able contexts that'd wrap the thing and a (user-supplied) label, and then require the break-macro to be provided with the label. 22:01:26 cpressey, you could define a function, or not 22:01:29 You'd get multi-level breaks for free, even. 22:01:46 fizzie, hah 22:03:01 Could do the same for "continue", of course. 22:03:20 fizzie, wouldn't that mess up the counter with continue; in for loops? 22:03:55 In fact, the C99 spec (6.8.6.2) defines "continue" in terms of a goto statement. 22:03:57 you would need an extra line simulating that part of the for or while loop continue that is in the loop header 22:04:03 huh 22:04:15 fizzie, I can't see how that works in for loops 22:04:49 On a scale from one to ten, that's awesome. 22:04:57 fizzie, oh wait 22:04:57 http://zem.fi/~fis/cont.png 22:04:58 to the end 22:04:59 I get it 22:05:01 that works 22:05:16 took a while to load it and find the section 22:05:27 You could have just waited for the .png. 22:05:44 fizzie, I didn't know it was forthcoming 22:06:22 Gregor-P, 9.5i 22:06:24 They didn't do the same for "break", but of course there's the switch mess to consider. 22:07:03 fizzie, oh yes but that works there too as jumping to a label after the switch 22:07:08 switch block* 22:08:53 Sure, but it might look messy. Three columns is already a bit much. 22:09:17 -!- pikhq has quit (Read error: Connection reset by peer). 22:09:38 fizzie, why side by side, I see no reason for that 22:10:09 -!- cheater99 has quit (Ping timeout: 240 seconds). 22:11:23 Note that continue shall appear "in *or as* a loop body", so instead of the usual "for (;;);" infiniloop you could confusingly write "for (;;) continue;" instead. 22:13:33 Makes one wonder how many loops there are with only a "break" or a "continue" as the body. 22:16:47 -!- p_q has quit (Ping timeout: 265 seconds). 22:17:26 -!- p_q has joined. 22:18:42 whi 22:18:46 Erm 22:18:56 while (1) break; 22:19:35 Gregor-P, do { break } while(0); 22:19:38 even more confusing 22:19:53 idea: 22:19:58 Add this to a system header: 22:19:59 for (int temp = x(); do_something(temp); /* nice way to limit the scope of 'temp' */) break; 22:20:07 #define break do { break } while(0) 22:20:11 err 22:20:13 add the ; 22:20:16 of course 22:20:20 now people will be all confused 22:20:24 why break is a no-op 22:20:25 fizzie: Not C89 though 22:20:41 Gregor-P, who cares about that 22:20:45 I'm all C99 22:20:55 AnMaster: ... you could also #define break 0 22:21:16 Gregor-P, gcc would warn about value that wasn't used iirc 22:21:21 Gregor-P: Yes, well, it *is* 2010 or something. Haven't you noticed all the flying cars outside? 22:21:40 AnMaster: #define break 22:21:48 Gregor-P, that works 22:21:58 fizzie: You can have your future! 22:22:16 #define while if 22:22:37 #define int signed char 22:22:51 Or "#define break ;" and then wait for some unsuspecting guy to start putting "break" after all his lines because it seems to work. 22:22:54 -!- cheater99 has joined. 22:22:55 #define void long long 22:25:22 They should add a generic "long long long ... long" bignum-ish type next; where each "long" would double the size. Why be afraid of being ridiculous? 22:25:34 #define int signed char <-- but but... int is supposed to be 16 bit!? 22:25:37 -!- GreaseMonkey has joined. 22:25:41 -!- hiato has quit (Quit: underflow). 22:26:17 AnMaster: Perhaps Gregor-P has big chars. 22:26:30 Gregor-P, oh some DSP then no doubt 22:26:34 err 22:26:35 fizzie, ^ 22:26:44 though there it tends to be 32-bit 22:27:17 Oh, there are many 16-bit DSPs in the less-high-end range. 22:27:28 ah 22:27:31 good point 22:27:47 And many 24-bit ones too, though I don't know what their C implementations do. 22:28:09 Certainly you can fake 8-bit chars on architecture like that too. 22:28:24 well true 22:30:36 lawl 22:32:54 Gregor-P: What about it, how big are your... chars? 22:35:00 that sounded like innuendo. I blame the ... 22:35:04 :P 22:46:20 fizzie: My chars are as big as they come ... and UNsigned. 22:46:53 Alternate: 22:47:13 fizzie: 8 bits, uncut ... I mean unsigned 22:47:40 -!- pikhq has joined. 22:50:16 -!- oerjan has joined. 22:53:23 -!- aliseiphone has joined. 22:53:31 Hi. 22:53:33 -!- aliseiphone has quit (Client Quit). 22:54:27 famous first and last words. 22:54:51 -!- aliseiphone has joined. 22:54:54 And hi again. 22:55:00 rehi 22:55:31 ais523! Nice to see you at this time. Maintain that sleep schedule. 22:55:55 aliseiphone: I've been awake for /well/ over 24 hours, being on call because there's a paper submission deadline coming up 22:56:10 and I don't know what my supervisor's up to 22:56:41 Well, dammit, just make sure you're awake between 11 and midnight or so. 22:57:06 You could just sleep with your phone set to super-loud. 23:02:05 Hi aliseiphone 23:02:09 I'm working on PSOX2 23:02:49 huh, why can't lambdas have multiple "entry points" like normal functions <-- a way to achieve that has been proposed in various forms, but never agreed on. 23:03:00 aliseiphone: I don't have a mobile phone... 23:03:04 we're contacting via email 23:03:06 and svn 23:03:17 oerjan: Eh? 23:03:29 aliseiphone: haskell question 23:03:36 Oh. No. AnMaster is learning Haskell. 23:03:41 ais523: write a svn commit hook that starts playing your least favourite mp3 at maximum volume 23:03:46 case of ... with nothing between case and of is one way i've seen suggested 23:03:48 You will not see me for a while. 23:03:54 What cpressey said. 23:04:06 oerjan: Please STOP HIM. 23:04:11 also, to go to sleep, I'd have to walk home 23:04:15 which is not where my internet connection is 23:04:16 It is our ONLY hope. 23:04:18 * cpressey is entertained! 23:04:28 aliseiphone: I /parted the channel earlier because both AnMaster and Sgeo were asking insane questions at once 23:04:40 ais523, sorry 23:04:48 *inane 23:04:50 aliseiphone: he said he thought the book (real world haskell) he's reading was your suggestion, so it's all your own fault ;D 23:04:51 insane questions are OK 23:04:55 -!- augur has quit (Remote host closed the connection). 23:05:07 -!- augur has joined. 23:05:12 ais523: What have you done with my CHEESE??? 23:05:16 ais523: At least Sgeo is harmlessly utterly and completely reliant on our opinions for every minor detail in his life. 23:05:36 AnMaster, on the other hand, is liquid pain. 23:05:53 Eh, I think my questions were a bit painful 23:06:01 In my defense, the Googles did nothing 23:06:22 oerjan: I suggested a LYAH/RWH cocktail like I always do. He proceeded to dismiss LYAH because it had silly cartoon pictures. 23:06:37 ah. 23:06:59 aliseiphone, oh, btw, thank you for suggesting Dirk Gently's Holistic Detective Agencyt 23:07:01 *Agency 23:07:05 And AnMaster is a SERIOUS, MANLY ENGINEER with CHEST HAIRS. 23:07:27 Sgeo_: You're welcome. ...BUT TO WHAT? 23:07:59 aliseiphone! 23:07:59 ...read? Were you thinking I thought you suggested it as a paperweight? 23:08:05 ON A MONDAY?! 23:08:18 welcome to accidentally cause humanity to have never existed. possibly. 23:09:46 aliseiphone, unrelated, but I have learned first-hand how Java destroys brains 23:10:48 Sgeo_: C# does too. 23:11:02 C# is just a slightly more insane version of Java 23:11:05 aliseiphone, I'd argue that it doesn't, and even if it does, it's not as bas 23:11:06 augur: Keyword iPhone. 23:11:07 *bad 23:11:13 (Java's main insanity is being too /excessively/ sane for its own good) 23:11:19 ais523: With some useful stuff. Like closures. 23:11:24 aliseiphone: yep 23:11:32 C# is a very kitchen-sinky sort of language 23:11:39 it reminds me vaguely of MAGENTA 23:11:43 ais523: Also, *Java 7. They're not versioning 1.x now. 23:11:43 aliseiphone: ah yes, true 23:11:46 of course, many of those features are useful, probably all of them 23:11:58 Sgeo_: Guess why you think C# doesn't destroy minds? 23:12:01 but, they still lead to a jankily large language when they're all combined 23:12:43 Because it's taking nibbles already. You're overengineering even more from what I've seen. 23:12:43 If you prefer, just do type Void = () and forget about ()'s existence ;-P 23:13:02 except Void usually means something else in haskell (the type with _no_ non-bottom members) 23:13:22 Sheesh. Some people need slapping with unadorned C and being told to do something without making a sprawling framework for doing so first. 23:13:25 aliseiphone, what exactly have you seen? 23:13:34 type Unit = () 23:13:51 Sgeo_: How do you expect me to answer that question? 23:14:12 oerjan: I think a type like that should exist in other langs too 23:14:17 to mean "this function never terminates normally" 23:14:20 aliseiphone, if I had any public projects since PSOX, those projects would be the answer. But I don't. So what have you seen? 23:14:23 oerjan: I take it AnMaster has been picking at irrelevant details of Haskell? 23:14:26 you could actually enforce nonreturning in the type system 23:14:34 by making a type that was impossible to construct an instance of 23:14:42 Sgeo_: You pastebin. You talk. 23:15:03 aliseiphone: well yeah. but then we all do, in principle. we are geeks after all. 23:15:06 And AnMaster is a SERIOUS, MANLY ENGINEER with CHEST HAIRS. <-- uh... Thanks? 23:15:16 AnMaster: An insultb 23:15:20 *insult. 23:15:23 I think this project is underengineered 23:15:26 aliseiphone, I can't see how it is one. Meh 23:15:31 I should have had parts be in Lua from the getgo 23:15:41 oerjan: AnMaster has a wonderfully irritating way of doing so, however. 23:15:48 AnMaster: Part of the problem. 23:16:13 aliseiphone, perhaps you don't like chest hairs? I do have them. Not my fault. Genetics and so on. 23:16:33 Perhaps you should stop talking now. 23:16:33 aliseiphone: he _did_ seem in the logs to ask a lot of questions only because he tried to understand function types but hadn't got to typeclasses yet 23:16:49 oerjan: *slow clap* 23:16:51 And yes, parts being in Lua would have been very useful. The ability to change ..gameplay code, nto sure if that's the right term.. while it's running would have been immensely useful 23:17:30 aliseiphone, anyways, worst part about PSOX: BF-centrism, or type issues, or something else 23:17:31 ? 23:17:38 oerjan: dammit I learned from freaking YAHT and I kept writing shit until it worked. kids these days. 23:17:48 Sgeo_: Sheer pointlessness. 23:17:55 ... 23:18:00 why are you in this channel? 23:18:08 And your inability to engineer without under- or over-ing it? 23:18:13 * oerjan cannot actually recall how he learned haskell. except that at some time he read most of the haskell report. 23:18:30 Sgeo_: I only enjoy /interesting/ pointless things. 23:18:39 Or are you a fan of Ook!? 23:18:47 Is writing an HQ9+ IRC bot interersting enough? 23:18:49 I think I'm with aliseiphone on the PSOX issue: it's not as cool as something that just pipes a bunch of different esoprograms together, and they just use each other's capabilities as they see fit. 23:18:51 And LOLCode? 23:18:57 Sgeo_: No. 23:18:59 aliseiphone: hey Ook! is interesting. once. 23:19:11 Ook! is a snicker. Once. 23:19:13 oerjan: no. not even once. :P 23:19:33 Ook! is useful for getting people to realise that syntax really is irrelevant 23:19:38 lots of people get fixated on it for some reason 23:19:39 aliseiphone: it's interesting as the first and only time you try doing that kind of obfuscation. 23:19:47 then you can move on. 23:19:54 ais523: I think that might have the opposite effect. 23:19:56 cpressey, idea for PSOX2: Multiple programs in different esolangs running 23:20:22 So, you know that ancient laptop 23:20:28 I upgraded? 23:20:36 Sgeo_: Yes, exactly, but then you don't really need to define a protocol, do you? 23:20:39 Over the weekend. 23:20:54 cpressey, why wouldn't I need to? 23:21:22 The teacher has /vetoed the nurses/ and made sure I can have it (without Internet). For homework. 23:21:43 why no 1-tupple? Sure it is pretty useless but it still seems strange to just have a hole in the valid range. 23:22:19 I just need a 3G stick and I've been /handed a working, Internet-connected computer/ that I *don't even need to hide*. 23:22:21 but a 1-tuple is just a single value, it barely even adds bottoms 23:22:33 oerjan: fail 23:22:45 -!- tombom has quit (Quit: Leaving). 23:22:45 aliseiphone: ooh, impressive 23:22:49 a 1-tuple only makes sense if there is something you can do to tuples in general. but haskell doesn't support that, all sizes are mutually incompatible. although there _are_ some typeclass abuses, they are not in the standard. 23:22:50 and rather fortunate 23:23:03 you may want to hide the 3G stick, though, in case they catch on 23:23:12 ais523: Of course. 23:23:20 Sgeo_: Because if you write both the client and the server, you don't need to follow a protocol. I mean, you *can*, if you want one or the other to be interchangeable, but in a world where everyone wants to roll their own... 23:23:32 ais523: And getting used to 463mhz and 64mib of ram will suck. 23:23:45 Why would I be writing the client? 23:23:55 ais523: I'll put Puppy Linux or something onto a partition. 23:24:02 Sure, I'll write some test clients, but mostly other people will be writing clients 23:24:07 Hopefully 23:24:23 But still, dammit, I can type! Code! For this short portion of night... 23:24:40 aliseiphone: Explain what I mean to Sgeo_. 23:24:59 AnMaster: hm does actually ping you? i keep just copying and pasting from the logs for convenience but it may not be optimal 23:25:01 No, nm, you don't have a real keyboard, that's unfair or me. 23:25:11 Sgeo_: He's telling you to make esolang programs talk to each other. 23:25:39 If you need a GUI, have a Zetaplex program to display it based on data provided to it by BF. 23:26:02 Essentially, drop PSOX and make an orgy of two-way esoteric pipes. 23:26:11 cpressey: Done. I love carpal tunnel. 23:27:07 Hm, that would be interesting 23:27:14 Consider a utility that just ties the stdin and stdout of several processes together into some common channels. One of those processes could be a Befunge-98 interpreter which supports one of those graphics fingerprints, and it's running a program which accepts commands of some sort on its stdin and draws graphics. One other of those processes could be an Unlambda interpreter which is running a program which produces ou 23:27:19 Thank you aliseiphone. 23:27:37 "which produces ou" 23:27:42 wait, does the lambdas to foldl and foldr have the acc/value parameters in different orders? 23:27:45 You got cut off. 23:27:52 tput which consists of those commands. End result: Unlambda drawing graphics. 23:28:13 cpressey: I wuv turtle graphics. 23:28:26 LOGO is a sweet language. 23:28:40 Now, the utility itself could have some esoteric control language. However, I wonder if that would be going too far. I think it might be nice to have one, but it should be simple. 23:28:41 oerjan, yes that still confuses me 23:28:50 aliseiphone: It is, it is. 23:28:52 AnMaster: it's quite logical when you realize foldl f x [a,b,c] = ((x `f` a) `f` b) `f` c and foldr f x [a,b,c] = a `f` (b `f` (c `f` x)) 23:28:52 oerjan, and yes it pings me 23:29:09 Well, if it's a simple chain.. wait, two-way communication would be useful, wouldn't it 23:29:21 oerjan, Hm I guess that does makes kind of sense 23:29:35 Sgeo_: All you need to write is a useful two-pipe unix utility. 23:29:50 * Sgeo_ doesn't want it to be UNIX-only 23:29:54 But there may be no choice 23:30:10 Only because you use Win "Shitty" dows. 23:30:17 pretty sure you can do stuff like that in windows too, it's just a lot weirder 23:30:37 (usually) 23:30:46 olsner, I would have loved to know that during the original PSOX's implementation 23:30:57 My inability to figure it out resulted in a major spec change 23:31:28 Just abstract the properties of pipes that you want and write different backends if you want to support different underlying OSes. 23:31:45 ais523: Any tips for enduring ultra-low-powered computers? 23:32:04 try to use more efficient programs 23:32:24 cpressey, so a bus for esolangs. Nice idea. 23:32:26 it's surprising how wasteful many programs are nowadays 23:32:40 ais523: Like a non-Windows OS. :-) 23:32:44 well, yes 23:32:51 aliseiphone, DOS 23:32:54 :P 23:32:56 I find Windows almost unusuable nowadays just because of how slow it is 23:32:58 ais523: But I'm a web junkie. 23:33:08 there are efficient web browsers 23:33:25 really, the speed of your computer shouldn't matter for surfing, the speed of your connection matters more 23:33:31 ais523, javascript 23:33:33 slows things down 23:33:37 ais523: Supporting all the crap you need (I know you don't) nowadays? 23:33:38 I bet aliseiphone consider that important 23:34:25 ais523: I mean... 64 MiB of RAM. Firefox never uses less than 100! 23:34:27 Sgeo_: dunno about PSOX, but this looks like the thing you'd want on windows: http://msdn.microsoft.com/en-us/library/ms682499(VS.85).aspx 23:34:31 it's important to be able to run JS, but having it off by default generally makes websites less annoying 23:34:45 you could try using w3m, I suppose 23:34:54 ais523: No. 23:35:01 it can even handle images, it shows them as links which download and open the image in a new window 23:35:07 I just explode in a frenzy of love every time I read the word LPVOID. 23:35:18 ais523: Anyway, rendering at 463 MHz?! 23:35:21 but there are plenty of other low-resource browsers 23:35:22 opera runs on many things with less than 64MB ram 23:35:30 Er, right. A newtype is a, what word would work better - "synonym"? It has the same structure but has a distinct identity. 23:35:36 and rendering is rarely a bottleneck IIRC 23:35:38 and with cpu:s slower than 450MHz 23:35:39 olsner, great, so how does the parent know when the child's requesting something on stdin? 23:35:46 btw, w3m can show images online on framebuffer 23:35:51 (Chrome has the fastest renderer of all the common browsers IIRC, not that most people tend to care) 23:35:53 bad wording, since "type" defined names are officially _called_ type synonyms in haskell 23:36:00 oerjan: Oh, do confuse me more. 23:36:00 Sgeo_: you can't "request" something on standard input, you can only block or poll 23:36:11 olsner, I think you can on UNIX 23:36:16 Maybe I'm misremembering 23:36:34 Sgeo_: you are. 23:36:36 aliseiphone, opera mini runs on my phone. Not sure about RAM but it has 32 MB flash built in 23:36:37 cpressey: a newtype is sometimes called a "wrapper" 23:36:42 incidentally, I installed a bunch of browsers for cross-browser testing 23:36:42 RAM I guess around the same range or less 23:36:47 oerjan: It still does remind me of what you need to do in Pascal to make a linked list record. 23:36:50 I had to uninstall Opera almost immediately because it was too anyoing 23:36:52 *annoying 23:37:02 whereas I can tolerate Chromium, although I dislike it 23:37:02 AnMaster: mini should support down to 2MB of ram though :P 23:37:02 I found another turing complete game 23:37:13 but this one cheats because it has wires 23:37:20 DAMMIT RETARDS PHONES ARE NOT X86 LAPTOPS WITH MULTITASKING OPERATING SYSTEMS AND OPERA MINI ISN'T EVEN A REAL BROWSER 23:37:28 Stop failing :| 23:37:32 Sgeo_: you can't "request" something on standard input, you can only block or poll <-- you could select() for ability to write without blocking on *nix 23:37:42 *SYSTEMS RUNNING 23:37:46 AnMaster: that's what I meant with poll though 23:37:49 AnMaster, I.. think that's what I meant 23:38:01 aliseiphone, true. opera mini is J2ME 23:38:19 AnMaster: Opera Mini DOESNT RENDER. 23:38:23 true 23:38:26 their servers do it 23:38:29 The page is rendered on OPERA SERVERS. 23:38:33 aliseiphone, I know this 23:38:35 *DOESN'T 23:38:35 well I was referring to the proper opera, mobile or desktop, or maybe one of the custom versions for devices 23:38:44 Your advice is worse than useless. 23:38:46 why are you shouting about this 23:38:54 aliseiphone, what is the issue with opera servers rendering it 23:38:55 jaw drops 23:39:00 AnMaster, bandwidth? 23:39:05 -!- MigoMipo has quit (Read error: Connection reset by peer). 23:39:14 olsner: Opera on a 463 MHz Pentium II Celeron with 64 MiB of RAM? 23:39:15 Sgeo_, it works fine on EDGE. Even faster on 3G 23:39:27 is the DS web browser opera mini or opera mobile? 23:39:30 AnMaster: What is WRONG? For a desktop browser? 23:39:46 aliseiphone, I was just saying it was lightweight 23:39:47 ais523: it would be "one of the custom versions" 23:40:00 yes, but I mean which codebase is it vaguely based on? 23:40:07 Are you fucking retarded? It reformats pages. Compresses images. Won't serve to things that run on things other than mobiles. 23:40:09 it's not a mini thing though, it actually renders stuff 23:40:29 is !haskell ghc or ghci? 23:40:39 AnMaster: both, it tries ghci first 23:40:51 I had to uninstall Opera almost immediately because it was too anyoing <-- yes desktop version is way more annoying than the mini version for phones 23:40:53 My toaster toasts bread with barely any power. Why does your universal constructor take so long to make toasted bread? 23:41:05 !haskell :type True 23:41:07 True :: Bool 23:41:09 indeed! 23:41:18 toasters use quite a lot of power... 23:41:18 * Sgeo_ compresses aliseiphone 23:41:23 AnMaster: this has the disadvantage of EgoBot giving _really_ crappy error messages for stuff that you intended to be sent to ghci 23:41:35 ais523: not nearly as much as a UC 23:41:47 !haskell :t fmap fmap fmap 23:41:48 fmap fmap fmap :: (Functor ((->) (a -> b)), Functor f1, Functor f) => 23:41:58 wareya, what game? 23:42:02 Aww, c'mon. 23:42:10 AnMaster: since it then tries the ghc (well, full module compilation) instead and ends up reporting _that_ completely irrelevent error message 23:42:45 Gregor-P: in fact it would have been nice to have a separate command for _just_ trying with ghci 23:43:05 ais523: I wish I had my iPhone set up to function as a modem. Free unlimited Internet! 23:43:16 3G sticks cost so much per GB. 23:43:17 oerjan, ah right 23:43:21 !haskell :t \s.\m.\x.m(s x) 23:43:26 *irrelevant 23:43:29 wait, wrong syntax 23:43:35 !haskell :t \s m x->m(s x) 23:43:38 \s m x->m(s x) :: (t -> t1) -> (t1 -> t2) -> t -> t2 23:43:38 It does occur to me that having turing-complete input-capable HQ9+ and .. some other languages would pretty much be Ook!ish 23:43:46 aliseiphone, why can't your iphone do that? 23:43:51 oerjan: Meh meh meh your awesome bots are never awesome enough bleh bleh bleh I want more features blar 23:43:59 aliseiphone, can't you do that easily on jailbroken ones anyway? 23:44:13 it violates the phone contract IIRC 23:44:23 My Android can do that :P 23:44:25 as in, not Apple's contract, but AT&T's or O2's 23:44:25 AnMaster: Because the networks don't allow it. My phone is not jailbroken at 23:44:31 *atm. 23:44:57 Hell, the new EVO does that out of the box. 23:44:58 ais523: Hell, I don't care. Certainly not Apple's fault though. 23:45:14 if they find out, you might lose your mobile access 23:45:24 Gregor-P: Hell, the iPhone PREDATED ALL THOSE. 23:45:35 aliseiphone, I checked several networks in Sweden. All allow tethering without extra cost but warns it won't work with iphone. 23:45:40 XD 23:45:41 Gregor-P: PRECISELY 23:45:42 ais523: It'll look just like my usual traffic... 23:45:49 I suppose so 23:45:50 PESOIX predated PSOX 23:45:53 18:41 < Sgeo_> wareya, what game? 23:45:55 minecraft 23:46:00 if you start accessing repositories over it, though, they might get suspicious 23:46:01 oerjan: So long as we're on the same page. 23:46:13 that would look out-of-place, who accesses linux repos on an iPhone? 23:46:14 Gregor-P, EVO? 23:46:20 ais523: Yeah. They have gnomes. 23:46:24 To SEARCH. 23:46:27 ais523, I tried to access an SVN repo on my N1 23:46:28 oh and I tethered today using my old nokia 23:46:29 Didn't go so well 23:46:31 over bluetooth 23:46:33 no issues there 23:46:36 ais523: Its just http. 23:46:44 works fine in ubuntu if you install blueman 23:46:46 I look at code often on this. 23:46:48 aliseiphone: I know, it's the destination that's suspicious 23:47:11 if I was asked to try to figure out which phones were being used illegally for tethering 23:47:13 ais523: Dude, deep packet inspection isn't even that clever. 23:47:17 I'd check to see if they were accessing Windows Update 23:47:32 which would be a big giveaway 23:47:32 Do you realise how many iPhone users there are? 23:47:39 ais523, fun 23:47:45 ais523, what about windows mobile? 23:47:49 aliseiphone: I'm not sure how that's relevant 23:48:00 AnMaster: presumably the update URL is at least slightly different 23:48:04 hm 23:48:11 ais523: monitoring arbitrary deluged of packets is very hard 23:48:16 lawl @ Windows Mobile 23:48:21 *deluged 23:48:31 *deluges 23:48:47 hmm, I wonder to what extent mobile internet uses http? 23:48:56 U 23:48:57 is it just straight uninterpreted tcp packets that contain the http 23:49:02 *Um. 23:49:06 ais523: Yes. 23:49:11 or is there some sort of mobile internet protocol used between the phone and the control towers? 23:49:14 I'm using a native IRC client. 23:49:33 This shit is just TCP over IP over wave. 23:49:33 aliseiphone, and nothing else =P 23:50:26 Sgeo_: I'm wearing a top hat and? (This is Jeopardy!, right?£ 23:50:33 *right?) 23:50:47 I was referring to lack of multitasking on pre-iOS4 23:51:14 Hey, soothes the ADHD. Can't knock it. 23:51:45 hmm, are there any sensible multitasking algos other than cooperative and competitive? 23:52:03 ais523: Capitalist! 23:52:16 programs pay for timeslices? 23:52:27 *cooperative and preemptive 23:52:29 Processes buy up bits of system time with credits they get by... Doing work for the system? 23:52:33 you can tell I've been up for around 30 hours 23:52:47 Letting other processes run? 23:53:05 ais523, competative? 23:53:16 % spelling 23:53:21 ais523: Postemptive, of course. 23:53:22 AnMaster, see ais523's correctio.. oh 23:53:26 oh right 23:53:37 Oh, n/m the oh 23:53:48 come to think of it, wouldn't "modulo spelling" remove all the spelling from the word, leaving only the mistakes? 23:53:55 I thought you were commenting on ais523's spelling, until I saw what you wrote 23:53:58 ais523, I would totally love competitive multitasking 23:54:05 erm, what ais523 wrote 23:54:12 It's called preemptive. 23:54:27 ais523: Argumentative multitasking. 23:54:30 ais523, okay modulo mistakes then 23:54:44 nah, preëmptive has an OS doing the preëmpting 23:54:55 ais523: Processes debate who deserves to run for a timeslice. The winner gets it. 23:54:57 competitive multitasking would be along the lines of CoreWars 23:55:00 cpressey, that it is a special form, well or syntax. Is "let" a special form in haskell? I guess it is. 23:55:07 aliseiphone, that would take several timeslices! 23:55:09 -!- Mathnerd314 has quit (Ping timeout: 240 seconds). 23:55:14 just debating 23:55:33 AnMaster: very special actually, it's one of the four haskell 98 keywords that introduce indentation blocks (let, do, where, of) 23:55:45 oerjan, hm 23:55:50 there are a few more in extensions (mdo comes to mind) 23:55:55 Special Needs multitasking: processes that do their work slowly get extra time. 23:55:55 oerjan: haskell 2010 too 23:56:02 I was reading the spec of that pretty recently 23:56:11 * oerjan hasn't read it yet 23:56:19 * ais523 hasn't finished it yet 23:56:31 OTOH, I don't know haskell 98 well enough to spot any differences 23:57:06 ais523: oh dear, I just realised that aliseOS is very like Feather 23:57:16 aliseiphone: almost all good ideas are very like Feather 23:57:51 In fact, the only good idea which is not very like Feather is one called "Feather" 23:57:58 it's impossible to explain what it is, is almost impossible to define precisely, hurts your mind when you think about it, and will probably never be implemented. 23:58:22 cpressey: no, feather is a bad idea 23:58:44 aliseiphone: that's one of the best summaries of Feather I've ever seen 23:59:16 ais523, please please put up everything about it on a wiki page if you decide to never implement it 23:59:21 ais523: And it doesn't even mention a single language feature! 23:59:21 that way someone else could give it a go 23:59:38 AnMaster: ais523 would never do yhat to innocent minds 23:59:41 *that 23:59:42 AnMaster: deliberately driving people insane is illegal in the uK 23:59:44 *UK 23:59:52 ais523, put a warning at the top then? 23:59:55 perhaps