00:00:00 formal upper bounds 00:00:07 not just for the sorting algorithm 00:00:12 but for the whole app 00:00:25 They do. It's 2^{word size} :P 00:00:34 hah. hah. 00:01:17 GregorR, seriously, pre-OSX had a good thing then, you could know for sure it would keep within limits 00:01:37 each app would have a minimum and maximum size set in the info box for the program file 00:01:48 the OS would give it something between those when the app was started 00:02:05 to change you would have to quit the app, open the info box and change the values, start the app again 00:02:16 OOM ahead of time 00:02:17 wow 00:02:25 that indeed does sound pretty stupid! 00:03:02 oklopol, talking about Mac OS 6-9 (and probably older ones, but never used them. and yes it is technically System 6, System 7, Mac OS 8, Mac OS 9...) 00:03:21 oklopol, it meant you never ran into swap trash 00:03:31 of course you had to reboot to change virtual memory size 00:03:36 which is even sillier 00:03:42 doesn't windows also force it? 00:03:45 for the page file 00:03:56 while linux can change any time you want 00:04:13 actually not sure about page file size in Windows 00:04:15 oklopol, tell me ^ 00:04:24 i don't know it 00:04:24 iirc you use it? 00:04:29 page file size that is 00:04:42 i also don't know whether you need to reboot to change the size of virtual memory 00:04:47 why would i :| 00:04:49 well pretty sure you need(ed) to restart in windows to change the size 00:04:58 why would i change it? 00:05:12 and Mac OS virtual memory == Windows pagefile, == *nix swap 00:05:40 if they chose it badly, i'll just buy a new computer. 00:05:45 ... 00:05:48 -_- 00:06:04 don't be stupid 00:06:43 if i need to look beneath the abstraction, the abstraction is bad. 00:07:35 i try to keep the abstractions i make and the abstractions i use separate 00:09:39 * AnMaster wonders if he should optionally support using hugepagetlb thing for allocation in cfunge 00:10:05 translation lookaside buffer? 00:10:10 if tlb cache currently has issues with overflowing it could help speed a bit 00:10:18 oklopol, yeah it allows you to get larger pages 00:10:28 than the standard 4096 byte ones 00:10:32 i know what it is 00:10:35 # ls /sys/kernel/mm/hugepages 00:10:35 hugepages-2048kB 00:10:38 oh 00:10:42 no that's not what a tlb is 00:10:48 oklopol, indeed not 00:11:13 /usr/src/linux/Documentation/vm/hugetlbpage.txt 00:11:17 oklopol, ^ 00:11:20 point is 00:11:26 a TLB is used to find a page 00:11:47 too many pages and the cache can't fit all pages used by app 00:12:00 oh hugepagetlb does that 00:12:09 right, misunderstood you 00:12:13 thus you could save some tiny amount of time by using fewer, but larger, pages 00:12:30 oklopol, I will use oprofile tomorrow to check tlb misses 00:12:30 yeah makes sense 00:12:33 iirc it can check for it 00:12:40 to see if it is worthwhile at all 00:13:17 ehird. Look above. Insane micro optimising ^ 00:13:18 ;P 00:13:54 anyway i don't really care for that kinda optimization 00:13:56 hmm 00:14:14 oklopol, well really what would be useful I guess is changing stack direction 00:14:19 currently it grows up 00:14:26 copying strings to it means reversing 00:14:39 that is what the current bottleneck is 00:14:56 however making it grow down introduces other issues 00:15:08 like growing it not being a simple realloc() 00:15:08 but not because it's micro-optimization, caching just doesn't fit my mental calculation model. maybe because the usual computation models don't have anything ilke it. 00:15:35 s/calculation/computation/ 00:16:05 oklopol, that is the difference between "theoretical model" and "model useful in real life" 00:16:43 oklopol, still I'd say making string copying not have to swap string direction... 00:16:46 would help a lot 00:16:46 meh, no asymptotical difference 00:16:53 really 00:16:59 about 4-8 times faster 00:17:03 depending on CPU 00:17:10 because you can copy in word size 00:17:16 also less cache misses 00:17:22 and 00:17:27 you could SIMD it 00:17:38 *yawn*, let the compiler worry about that 00:17:39 to get 128-bit copying on x86/amd64 00:17:51 oklopol, I will, but it can't do it atm 00:17:54 oh simd! 00:17:56 because stack grows up 00:17:59 now that's something i do like. 00:18:03 and strings need to be *REVERSED* 00:18:08 when pushed on stack 00:18:13 which means byte by byte copy 00:18:22 which sucks 00:18:28 *WHY* do they need to be reversed? 00:18:47 oklopol, because they are 0"gnirts" in cfunge and my stack implementation grows upwards 00:18:56 which is what I want to change 00:19:00 so it grows downwards 00:19:11 so I can just memcpy() or such 00:19:58 oklopol, that is why 00:20:03 any questions? 00:20:07 no not really 00:20:34 wait 00:20:36 that quote 00:20:42 was ehird... in #esoteric 00:20:46 2008-03-21/FreeNode-#esoteric.log.bz2:okt 31 23:20:13 ah yes -- quoting alice in wonderland. The post-ironic hippy way to be cool on the internet. 00:20:51 AnMaster: What is the big question about the meaning of life, the universe and everything? 00:21:01 oerjan, I don't know :P 00:21:13 well it was worth a shot 00:21:34 i can't smell people 00:21:54 nov 06 02:39:21 "We're all mad here. I am mad. You're mad." "How do you know that I am mad?" asked Alice. "You must be," said the Cat, "or you wouldn't have come here." 00:22:00 oklopol: maybe there aren't any nearby. you were a lizard, right? 00:22:15 okt 31 23:19:45 "We're all mad here. I am mad. You're mad." "How do you know that I am mad?" asked Alice. "You must be," said the Cat, "or you wouldn't have come here." 00:22:16 that too 00:22:27 oerjan, you were obsessed with that line? 00:22:34 okt 31 23:20:13 ah yes -- quoting alice in wonderland. The post-ironic hippy way to be cool on the internet. 00:22:39 oerjan: i mean i don't have the whole sense. of smelling people. 00:22:54 AnMaster: it fits #esoteric so well 00:23:02 quoting Terry Pratchett -> no, that's the post-hippy ironic way 00:23:17 post-hippy post-ironic way -> killing yourself 00:23:40 holy shit 00:23:42 2:23 00:23:43 :DD 00:23:49 oklopol, true 00:23:53 i have 00:23:57 too much stuff to do 00:24:08 should probably 00:24:09 liek 00:24:11 go. 00:24:23 I have stuff to do tomorrow morning. For values of morning in the range like 11:00 00:24:27 to 12:00 00:24:33 so yeah I better go to sleep 00:24:44 oklopol: your haiku misses the metric a bit 00:24:44 night 00:25:02 oerjan: i know 00:25:05 ^ fixed 00:26:01 okay 00:26:07 algebra time now, i think 00:26:08 -> 00:26:21 err 00:26:42 oerjan, what is the name for stuff like hexameter and pentameter and such 00:26:48 "versmått" in Swedish 00:26:51 but in English? 00:28:07 btw: Iambic pentameter > haiku 00:28:07 "meter" i think 00:28:41 http://en.wikipedia.org/wiki/Meter_(poetry) 00:28:55 Blank verse :) 00:33:43 night 00:35:44 indeed it is 01:57:50 Blank verse is better than rhyming, 01:57:55 For there's no need to worry of timing, 01:57:59 The problem you see, 01:58:02 With blank verse, to me, 01:58:17 Is that it's just an excuse for lazy people to write prose and call it poetry. 01:58:37 *sniff* so beautiful 02:04:28 -!- MizardX has quit (Read error: 104 (Connection reset by peer)). 02:06:27 -!- oklopol has quit ("( www.nnscript.com :: NoNameScript 4.2 :: www.regroup-esports.com )"). 02:17:44 A poem is 02:17:51 Just like prose, but 02:17:57 Separated by random 02:17:59 Newlines 02:21:15 Or sometimes // Double slashes // Just for conciseness. 02:22:07 That // Too. 03:05:06 -!- psygnisfive has joined. 05:19:07 -!- oerjan has quit ("leaving"). 05:30:46 -!- MizardX has joined. 07:51:48 -!- oklopol has joined. 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:10:13 -!- oklopol has quit (Read error: 54 (Connection reset by peer)). 08:10:29 -!- oklopol has joined. 08:36:08 -!- GreaseMonkey has quit ("Client Excited"). 09:12:17 -!- MigoMipo has joined. 09:27:46 -!- ais523 has joined. 10:10:00 -!- jix has joined. 10:32:17 http://news.bbc.co.uk/1/hi/uk_politics/7908498.stm haha 10:41:06 hi 10:41:11 hi 10:41:21 ais523, quite interesting speed test: dd if=/dev/zero of=/dev/null& pid=$! ; sleep 30; kill -USR1 $pid; sleep 1; kill $pid 10:41:37 on FreeBSD replace USR1 with INFO 10:41:52 why are you sending sigusr1 to dd? 10:42:00 ais523, because it dumps stats 10:42:02 like speed 10:42:15 20219142656 bytes (20 GB) copied, 30.0494 s, 673 MB/s too 10:42:21 also, you don't want that to run too much, your /dev will end up running out of zeros 10:42:24 err remove too 10:42:32 ais523, hah hah 10:45:47 ais523: Also, your bit bucket will fill up. 10:46:04 pikhq: most of the parts of this laptop are starting to break, anyway 10:46:08 I think the bit bucket is leaky 10:46:20 and the more zeros in there, the more pressure on the leaks and the faster they get out 10:47:22 no you are both wrong 10:47:38 2.6.23 and later recycles from /dev/null 10:47:58 all zeros are sent for using in /dev/zero 10:48:01 -!- ais523 has quit. 10:48:11 -!- ais523 has joined. 10:48:20 ais523, did you miss what I said? 10:48:27 yes 10:48:32 and the more zeros in there, the more pressure on the leaks and the faster they get out 10:48:32 no you are both wrong 10:48:32 2.6.23 and later recycles from /dev/null 10:48:32 all zeros are sent for using in /dev/zero 10:48:32 * ais523 has quit () 10:48:51 I was wondering when someone would think of recycling 10:49:19 ais523, other bits are used for other stuff, usually /dev/random and /dev/urandom 10:49:42 wouldn't that leave /dev/random spewing out more ones than zeros? 10:50:05 ais523, random gets 0 from the zero buffer when it needs it 10:50:08 duh 10:50:31 * AnMaster wonders what /dev/cpu_dma_latency is 10:50:45 that's the sort of thing I'd expect in /proc not /dev 10:50:56 /dev/network_latency exists too 10:51:04 # cat /dev/network_latency 10:51:04 cat: /dev/network_latency: Invalid argument 10:51:13 network_throughput as well 10:51:29 heh 10:51:32 ais523, and indeed 10:51:58 ais523: Obviously, it can toggle 0s to 1s. 10:52:26 pikhq, and the other way, it does that only if it runs out of the buffers 10:52:38 to avoid the overhead when possible 10:52:44 Well, of course. 11:07:37 -!- BeholdMyGlory has joined. 11:11:45 -!- ais523 has quit ("lunch"). 11:30:41 So can you do echo "really really much" > /dev/network_throughput when you want a faster connection? 11:39:26 And /dev/network_{latency,throughput} seems to be intended for processes who want to register/monitor QoS requirements. 11:41:48 That's a funny interface; you open /dev/network_throughput and write in what you want to get, then keep a file handle open as long as you want it to be active. I would have expected some ugly ioctl nastiness. 11:49:42 -!- KingOfKarlsruhe has joined. 11:51:49 fizzie, heh 11:51:53 yeah funny interface 11:56:32 strange, seems like time(NULL) takes a lot of the system time. Ah I guess the HRTI test calling y so often causes that... 12:04:47 -!- oerjan has joined. 12:05:06 oh right... that is callgrind's time().. 12:10:27 for (ssize_t i = len; i >= 0; i--) 12:10:27 stack->entries[top - (size_t)i] = str[i]; 12:10:38 gcc generates very suboptimal code for that, even at -O3 12:10:39 hm 12:10:54 fizzie, in jitfunge, which way does the stack grow? 12:11:07 or stacks 12:11:35 hrrm I just got an idea for fast asm on x86_64 for that stack push... 12:12:21 oh yes... abusing BSWAP I'm sure should be possible... 12:12:23 Up, I think. To higher addresses. I'm not completely sure how I did the stack-stackery, I think I just keep the topmost stack in the specially handled memory area, and copy things on stack-stack operations. 12:13:28 fizzie, well up is bad for string pushing on stack 12:13:31 I found 12:13:39 basically that is the main bottle neck in cfunge atm 12:13:56 since pushing strings mean reversing every byte to push a 0"gnirts" 12:14:09 mostly related to all those y in the HRTI test that mycology does 12:14:24 and huge env 12:14:34 Yes, well, my STRN implementation might not be very optimal anyway. 12:14:38 $ env | wc -c 12:14:38 5685 12:15:44 fizzie, well STRN isn't a bottle neck in mycology, and my STRN is "not too bad", and actually since it is defined to use strings it isn't well defined how values outside the range of char works in STRN 12:16:15 in cfunge it depends on which instruction, since some uses unsigned char*, and other ones just copies directly to/from funge space 12:16:47 should probably implement some sort of fungeCell* pushing thing... would be faster 12:17:17 (less checks for available stack space, since unlike you I don't mess with catching SEGV and poking registers to avoid checking for stack size) 12:19:09 There's no special reason why I couldn't have a downward-growing stack, except that theoretically it might be a bit more likely to find free pages after the stack than before it. But that's just a guess. And anyway I do that half-assed attempt to stick the stack out there in the wilderness if possible. 12:19:34 yeah.. down growing stacks means grow isn't a simple realloc() any more 12:19:47 for me 12:21:18 Actually, heh, I don't think current jitfunge even grows the stack at all. Haven't touched that code in a while, but all I'm seeing here are the underflow checks. 12:23:49 -!- ais523 has joined. 12:45:20 -!- MigoMipo has quit ("QuitIRCServerException: MigoMipo disconnected from IRC Server"). 13:05:02 -!- KingOfKarlsruhe has quit (Remote closed the connection). 13:11:43 ais523, hi 13:11:49 hi 13:14:15 ais523, is there any way to tell gcc that how a specific memory block is a aligned, I mean I have a pointer to an array of ints and want to tell gcc it is properly aligned for SSE access, since gcc decides to not try to vectorize the loop due to: "note: Unknown alignment for access: *array_25" 13:14:21 but I know it is properly aligned 13:14:27 -!- jix has quit (Read error: 113 (No route to host)). 13:14:42 there's an __attribute__ for it, I'm pretty sure 13:14:44 check the docs 13:15:47 ais523, that is for aligning variables yes, but there doesn't seem to be one to tell it how a malloc()ed block is aligned (and gcc can't possible trace this back to the malloc since the pointer has been stored in a struct for quite a while before and passed around) 13:16:21 couldn't you put the attribute in the right place in a pointer definition to constrain what it's pointing to, rather than what it is? 13:16:42 tried that. it seemed to align the pointer itself 13:23:19 There's that "aligned (x)" attribute for types; the example has "typedef int more_aligned_int __attribute__ ((aligned (8)));". Maybe you could (ab)use a similar typedef -- like do "typedef unsigned char sse_aligned_char __attribute__ ((aligned (42)));" and then keep a sse_aligned_char* type pointer. 13:23:31 (There's 42 because I don't really know how many bytes you want there.) 13:23:47 I don't think aligning to 42-byte boundaries would be particularly useful... 13:24:47 hm 13:25:12 I need to align 128-bits probably 13:25:23 lets try that with 64 bits 13:26:01 (8) 13:26:07 -!- impomatic has joined. 13:27:03 Also: 13:27:09 As another example, 13:27:15 char *__attribute__((aligned(8))) *f; 13:27:22 specifies the type "pointer to 8-byte-aligned pointer to `char'". 13:27:26 ais523: but but - clearly that must be the answer 13:27:33 actually that doesn't help. What I need is to tell it *base* is aligned 13:27:48 error: alignment of array elements is greater than element size 13:27:53 if I try fizzie's suggestion 13:28:17 Yes, well, you can try something like "char __attribute__((aligned(16))) *foo" too. 13:28:27 But I'm no GCCer. 13:28:43 eh 13:28:58 hm 13:29:19 Oh, maybe I should've read the rest of that paragraph. 13:29:44 "Note again that this does not work with most attributes; for example, the usage of `aligned' and `noreturn' attributes given above is not yet supported." immediately after that char *__.. example. 13:33:35 still doesn't help 13:33:51 fizzie, aligned would cause it to insert padding between each member in array 13:34:11 As far as the "attribute in typedef" is considered, certainly with a "typedef unsigned char auchar __attribute__ ((aligned (16)));" I can't do "auchar foo[10];" without that error, but a "char foo[10]; auchar* bar = (auchar*)foo;" works just fine. 13:34:15 not tell it that the first member is aligned on even 16 bytes 13:34:17 which it is 13:34:58 Not that I have any clue whether gcc would understand that access via that "bar" pointer there would be 16-byte-aligned. Or what auchar[1] would mean. Maybe there would be padding. 13:35:12 Er, I mean bar[1] there. 13:35:19 fizzie, it can do it for static variables 13:35:23 err 13:35:25 yeah 13:35:27 and stack ones 13:37:56 Yes, well, my interpretation of "typedef foo afoo __attribute__ ((aligned (x))); ... afoo* x = ...;" would be "afoo is a foo-type thing that is aligned at x-byte boundaries, so x is therefore a pointer to a foo-element aligned thusly", but I really can't know how GCC reads it. 13:38:11 icc seems to understand this with no hints btw... 13:41:03 GCC does have that vector-size attribute, too, for more explicit vectorizablitiesies. 13:42:27 The stuff at http://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html I mean. But I haven't really found any concrete examples about "here's how to tell the alignment of a memory block for auto-vectorization purposes". 13:54:40 o 13:54:57 oko 13:55:33 okleosynthesis 13:59:46 The basis of all matter. 14:00:26 (Musts away.) 14:00:27 ...no *your* matter 14:00:32 except the matter that doesn't matter 14:00:57 I was this close to adding "at least all interesting matter". 14:01:01 Well, no matter. 14:01:04 -!- oklopol has quit (Read error: 104 (Connection reset by peer)). 14:01:19 -!- oklopol has joined. 14:02:18 16:00… fizzie: Well, no matter. ||| 16:00… * Disconnected <<< for second there i perceived this as if fizzie had quit just after that message, and somehow it would've looked like i was disconnecting from my perspective. 14:02:26 it was weird 14:05:08 Are talk pages on the esolang wiki covered by the same license as the articles pages? 14:07:15 I think so 14:07:22 there's an agree-to-PD message below the edit box 14:07:26 and it's the only way to change them 14:07:46 -!- MizardX has quit (Read error: 104 (Connection reset by peer)). 14:09:57 Thanks :-) 14:10:12 I wanted to use something from the Underload talk page 14:11:36 which one? 14:11:44 if I wrote it, it's definitely PD, with my compliments 14:14:32 Thanks, but it's Keymaker's quine :-) 14:14:59 what did you want it for, by the way? 14:15:06 i think that's in the article too? 14:15:17 no, my quine's the one in the article 14:15:20 I thought I'd include it here with an explanation of how it works http://corewar.co.uk/assembly/underload.htm 14:19:00 GCC does have that vector-size attribute, too, for more explicit vectorizablitiesies. <-- doesn't do the same thing in this case 14:42:32 -!- dbc has quit (Read error: 110 (Connection timed out)). 14:50:23 -!- dbc has joined. 15:03:35 Just starting my implementation of Forth in Redcode. Still open to suggestions 15:07:26 -!- ehird has left (?). 15:07:28 -!- ehird has joined. 15:08:23 i was gone a day 15:08:25 did you miss me 15:08:31 good 15:08:37 * impomatic did :-) 15:08:51 see, clearly I'm the most important member of this channel. 15:09:15 ehird: I was gone a day too, so no 15:09:19 I didn't know you weren't there to miss 15:09:49 -!- upyr[emacs] has joined. 15:10:03 hi upyr[emacs] 15:10:05 you new? 15:10:14 wait, ehird was gone a day? *duck* 15:10:28 :< 15:12:49 ehird: yes :/ 15:13:03 why the :/? nervous about the goat sacrifice? 15:13:04 it'll be ok. 15:13:20 also, has nobody noticed the logs link is wrong? 15:13:37 :/ decouse i don't sleep 2 days 15:13:51 that could be an issue 15:13:52 fucking wiki locking up just as i'm saving :< 15:13:56 clog: are you sure you didn't mean oklopol? 15:19:56 http://blogs.msdn.com/michkap/archive/2005/09/17/469941.aspx 15:24:10 15:59:55 IMO all apps should have upper limits on how much they will allocate 15:24:10 16:00:00 formal upper bounds 15:24:10 16:00:07 not just for the sorting algorithm 15:24:11 16:00:12 but for the whole app 15:24:20 Alternative solution: don't write memory hogging apps. 15:24:28 Crazy, I know. 15:24:49 AnMaster's method looks like a way to make sure you don't write a memory hogging app 15:25:14 err, you can easily write a memory hogging app by doing that 15:25:18 it gains you approximately nothing. 15:25:36 it lets you know exactly how memory hogging it is 15:25:57 no, it doesn't, and to boot, even if it did it's a tedious, stupid way of finding that out 15:30:34 ubiquite (ubiquiting, ubiquited), v. To make a property more ubiquitous. 15:30:46 (also, ubiquties) 15:31:06 maybe it should be ubiquit 15:31:14 , ubiquiting, ubiquited, ubiquites 15:36:23 Yay, Forth interpreter is working! 15:36:35 well done 15:36:41 Thanks :-) 15:36:50 can it multiply? 15:37:15 Yes, it supports about 20 words 15:37:38 impomatic: does "SEE" work? 15:38:12 Hmmm... I don't know what SEE is, so probably not! 15:38:48 impomatic: prints to screen the forth source code of a defined word, or the disassembled machine code of a primitive 15:39:09 also, does IF, ELSE, THEN-style branch control work? 15:41:22 -!- MizardX has joined. 15:41:37 SEE doesn't work and probably won't ever. IF ELSE THEN not yet. BEGIN UNTIL is the only flow control so far. 15:41:37 It only 45 Redcode instructions! 15:41:58 how is BEGIN UNTIL implemented? 15:42:12 It's just, you can implement the language Forth conventionally, but it isn't really a forth unless you do it the "proper way" 15:42:17 threaded machine code that is 15:42:39 -!- jix has joined. 15:43:55 the following are implemented: u. space * = 1+ - + swap ?dup dup depth abs negate r> >r r@ begin drop until 15:44:06 It's threaded 15:45:13 ehird: redcode's all about threaded machine code 15:45:17 that, and crazy side effects 15:45:23 err, no. 15:45:32 i mean you have to compile forth to threaded machine code 15:45:42 also redcode isn't _threaded_ machine code 15:45:47 ehird: yes it is 15:45:47 that makes no sense, you can only compile to that 15:45:53 have you not seen the SPL instruction? 15:46:00 I don't recall it 15:46:15 ehird: well, you're missing the point if you miss the instruction that does machine-code threading 15:46:17 -!- MizardX- has joined. 15:46:34 SPL is one of the most important opcodes in redcode, it massively changes the way the language works 15:46:41 oh wait 15:47:03 "threading" means something different in forth, nothing to do with concurrency 15:47:10 -!- MizardX has quit (Connection reset by peer). 15:47:16 iirc 15:47:27 no duh 15:47:34 -!- MizardX- has changed nick to MizardX. 15:47:45 ais523: so no, you don't know what threaded means 15:47:54 oh, ok, one word with two meanings? 15:47:59 threading in Forth means the program is compiled to a long series of subroutine addresses 15:48:08 I'm tempted to say forth's meaning came first. 15:48:16 impomatic: exactly 15:48:26 2 2 + -> {&LITERAL,2,&LITERAL,2,&PLUS} 15:48:33 (where LITERAL looks one ahead in the ip) 15:49:47 Yes, that's exactly how it compiles :-) 15:50:02 i was explaining for ais523 15:51:51 what? ais523 didn't know what threading in forth was? ^_^ 15:51:57 no 15:52:03 oh ok 15:52:23 that's pretty interesting, it's sort-of like coercing an ordinary processor into being a bytecode interpreter 15:52:26 ais523, ever seen bashforth? string-threaded iirc 15:52:47 redcode doesn't have subroutines, so you'd need to implement a stack yourself to do it like that 15:52:58 mhm 15:53:22 colourforth! 15:53:48 any colour so long as it's red 15:54:58 ais523, was that a reference to black for t-ford? 15:55:14 yes 15:55:21 although it seems Mr. Ford never actually said that 15:55:22 right 15:55:40 oh? Another of the "Beam me up, Scotty" famous unsaid lines? 15:56:06 yes 15:56:21 [15:52:23] that's pretty interesting, it's sort-of like coercing an ordinary processor into being a bytecode interpreter 15:56:28 sort of but actually not. 15:56:33 in fact, not really sort of,. 15:56:37 ais523, so what is the origin of it then? 15:56:42 I'm not sure 15:56:50 probably you could look it up on snopes or somewhere 15:57:32 -!- MigoMipo has joined. 15:57:36 -!- KingOfKarlsruhe has joined. 15:59:29 'as Ford wrote in his autobiography, "Any customer can have a car painted any colour that he wants so long as it is black"' (WP) 15:59:37 heh 16:00:05 ok he never *said* it then? but rather wrote it? 16:00:33 or maybe it is a myth that it is a myth that he never said it! 16:01:18 father 16:01:23 I am your luk 16:01:23 e 16:01:47 http://en.wikiquote.org/wiki/Talk:Henry_Ford#Any_colo.28u.29r.2C_so_long_as_it_is_black 16:03:11 I love the way the u is parenthesised in that 16:06:38 colers <-- solved 16:06:48 naybohr <- see? 16:07:47 eye see 16:09:30 eehurd is sow smarte 16:09:33 Writing a mathematical function in Brainfuck is as easy to do as a CAT program in Unlambda :D 16:09:37 you mean really easy? 16:09:47 (2008-03-21, vintage quotes, move along_ 16:09:48 ) 16:11:07 anyone can write the former, not everyone can write the latter 16:11:26 I think the latter is easier 16:11:28 yes 16:11:30 definitely 16:11:57 the latter is easier but only if you know how 16:12:01 unlambda is an asymptotically much simpler language, so to speak, so once you know it, should be very easyt 16:12:02 also, which mathematial function? 16:12:03 *easy 16:12:17 ais523: any is the implication 16:12:34 presumably one you can write in some other language already 16:12:46 well yes 16:12:55 addition's easy enough in BF 16:13:56 * ehird thinks about implementing look_and_say(N) as O(1) 16:14:02 where N = iteration number 16:14:42 hmm 16:14:45 the first digit goes 16:14:51 1 1 2, then 1 1 3 forever 16:15:11 well it has exponential growth 16:15:13 the second goes (), 1, 1, 2, then 1 1 3 probably forever 16:15:22 the third digit goes 1 1 2 then 1 33 forever 16:15:39 the fourth goes 1 2 2 then 1 3 3 forever 16:15:43 hrm. 16:15:55 I'm pretty sure if you had a digits_in_look_and_say(N) you could do it 16:16:18 also where did you get those numbers there? 16:16:29 16:10:44 1 16:16:30 16:10:44 11 16:16:30 16:10:44 21 16:16:30 16:10:44 121116:10:44 111221 16:16:30 16:10:44 312211 16:16:30 16:10:46 13112221 16:16:32 etc 16:16:38 examining the digit at each position downwards 16:16:43 I think they're fairly trivial patterns 16:17:02 so number of digits in N + some modulo magic should do it 16:17:09 it splits into atoms, naturally, after that it's just substitution 16:17:21 I'm trying to do it non-recursively 16:17:22 O(1) 16:18:11 i bet i can make it like O(½) 16:18:16 16:18:13 after a number of iterations it split into Conway's elements. From there on it is a simple substitution 16:18:17 wut 16:18:33 you mean finding the m'th digit of the n'th iteration, O(1) in n? (but obviously cannot by O(1) in m) 16:18:45 *be 16:19:02 oerjan: no, element N of the LAS sequence in O(1) 16:19:06 i'm fairly certain it is possible 16:19:14 erm i have that page on my wp watchlist 16:19:28 wut 16:19:49 for look and say 16:19:52 and 16:19:53 ? 16:20:02 oerjan: let him dream. 16:20:11 i dream about unicorns. 16:20:13 wait, no I don't. 16:20:20 i dream about doing math. 16:20:45 first of all, nothing can be O(1) if it doesn't have constant size output and requires looking at only finite part of input 16:20:45 usually i'm solving a scrambled version of an exercise i was doing before going to sleep 16:21:13 and the bubble is popped. 16:21:48 at least in the usual turing machine sense of O() 16:21:55 -!- ShakespeareFan00 has joined. 16:22:16 i think ehird just means finding the nth element without solving the ones leading up to it first. 16:22:16 [16:20:45] first of all, nothing can be O(1) if it doesn't have constant size output and requires looking at only finite part of input 16:22:19 not the sense I meant 16:22:24 well 16:22:27 okay, I said it wrongly 16:22:32 ShakespeareFan00: Hi. 16:22:44 sometimes you need to say wrongly to be heard. 16:23:48 http://scratchpad.wikia.com/wiki/Sigsumeidsi - Anyone think this could be tweaked for programming? 16:24:05 Unfortunatly I lost the IRC logs of it's creation 16:24:13 you can make any parsable language into a programming language 16:24:26 doesn't mean it'll have interesting semantics 16:32:20 i wonder if you can implement thue in thue non-trivially 16:34:53 Sigsumeidsi notes are GFDL 16:35:02 feel free to do with it what you will 16:37:13 ShakespeareFan00: sorry, we can't. 16:37:15 our wiki is public domain. 16:37:54 Oh 16:37:55 :( 16:38:00 Never mind 16:38:24 A lot of Sigsumeidsi was my idea though... so I'll see if I've got the VERY early form of it 16:40:02 And I seem to be the sole contributor on the Wikia site 16:40:10 (I KNOW I had help with it though :( ) 16:51:38 * ehird writes constraint-based language. 16:54:19 ehrid: had you come across condit? 16:54:29 I don't recall. 16:55:16 http://esoteric.voxelperfect.net/wiki/Condit 16:55:35 seems pretty trivial 17:04:36 well, that page doesn't say anything about how you write conditions or actions 17:04:55 * AnMaster follows the link 17:06:31 looks to me like it follows the basic idea of pattern matching in awk or sed style, but matching conditions instead of input stream? 17:11:51 * ehird permutes infinite lists 17:12:17 * ehird wonders how to ubiquit permutations 17:30:14 -!- oerjan has quit ("permutation = reversible operation"). 17:32:57 * ehird takes on stupid task 17:37:09 -!- Hiato has joined. 17:49:18 wow, what a weird spam 17:49:28 Subject: ?spam? [Icfpc08] haemaatocrit postmarked stiffer basswood 17:49:29 Date: Thu, 26 Feb 2009 17:45:42 +0000 17:49:32 culling suubtilisers retranslated fiction 17:49:45 "suubtilisers" isn't even a word... 17:49:49 :DD 17:49:51 and haemaatocrit is somewhat suspicious 17:49:58 and that's all that the messsage is 17:50:01 apart from the mailing list footer 17:51:42 -!- ShakespeareFan00 has left (?). 18:00:00 ais523, I have seen spam looking like the commit mails sourceforge sends... same formatting 18:00:09 why? 18:00:24 ais523, no idea 18:00:47 however it would be closer to the type of mail I actually get 18:00:55 almost only mailing lists 18:01:09 -!- sebbu has quit ("@+"). 18:02:33 this makes it easy to find spam btw.... Almost all non-spam I get would match this regex (for subject line): ^(Re: )*\[[-a-zA-z]+\] 18:04:05 -!- Azstal has joined. 18:19:02 so, guys 18:19:16 do you think passing around 40 bits will be efficient. 18:19:28 -!- sebbu has joined. 18:21:20 ehird: on a 64-bit system, probably 18:21:31 32-bit. 18:21:37 on a 64 bit system, 72 bits. 18:22:05 (thinking about passing around struct{char tag; void *data;} to have tagged pointers without losing address space) 18:24:19 how many tag bits do you actually need? 18:25:28 ehird: the usual trick exploits the fact that all pointers are even 18:25:36 except that's bullshit 18:25:39 but that only gives you one tag bit 18:25:44 since ... pointers are not always even... 18:25:50 ehird: well, it depends on the processor and what you're allocating 18:25:55 Asztal: well, char is the smallest type C will give you 18:25:57 it's normally easy to /make/ all pointers even 18:26:39 ais523: and that halves the addressing space 18:26:40 unacceptable 18:27:09 are you allocating lots of one-byte objects on the heap? 18:28:22 no 18:28:27 but I don't want to put limits like that 18:28:53 wonder why % texi2html --nomenu --nonumber --split=section r5rs.txi is taking so long 18:34:15 ais523: I guess passing around anything bigger than a machine word is bad? 18:34:23 yes, if you're going for speed 18:34:35 it generally takes a length of time proportional to the number of machine words you're using 18:34:47 and substantially more if you don't have enough free registers to hold the whole thing 18:35:53 I guess only being able to address 9223372036854775808 bytes on a 64-bit machine is okay :-D 18:36:33 ais523: hm, so passing around `long`s is slow? 18:36:59 (more worrying is only being able to address 2147483647 bytes on a 32 bit machine, but I should not worry...) 18:37:03 no, well only on a 16-bit architecture 18:37:15 also, is this an OS-independent application? 18:37:17 who uses 32 bit machines and runs program allocating >2gb anyway... 18:37:21 ais523: Yes, hopefully. 18:37:35 oh, so longs fit in a machine word? 18:37:35 a useful trick to know is that all the main OSes around at the moment reserve half of the available memory addresses for their own use 18:37:41 ehird: on 32-bit and 64-bit, yes 18:37:47 because long = 32 and 64 respectively 18:37:53 on 16-bit, a long is two machine words 18:38:03 and on 8-bit, it's 4, but you don't get many 8-bit machines around nowadays 18:38:04 wait, on 32 bit and 64 int = long right? 18:38:07 in C 18:38:16 almost 18:38:22 int is normally 32 on a 64-bit system 18:38:27 because so many programs assume int = 32 18:38:29 oh right 18:38:32 int /ought/ to be 64, though 18:38:37 hmm 18:38:42 apparently, even long's 32-bit on 64-bit Windows 18:38:46 how can you assure memory is aligned? 18:38:51 malloc() doesn't let you ... use mmap? 18:38:53 ehird: compiler flags 18:38:58 ew 18:38:59 and malloc always returns aligned memory 18:39:10 -always- returns even? 18:39:13 C guaranteed? 18:39:28 it guarantees that you can dereference any standard data type through a malloc-returned pointer 18:39:36 err, duh 18:39:40 well, that's obvious 18:39:48 but I suppose on some processors that doesn't guarantee aligned 18:39:53 even though it does on processors like x86 18:40:03 I didn't know all pointers are even on x86. Queer. 18:40:09 the processors would either need to manage unaligned accesses, or else have a char larger than 8-bit 18:40:19 in order for that to screw up 18:40:27 and both are unlikely nowadays, although not impossible I suppose 18:40:51 ais523: This is all well and nice but I need more than 1-bit of tagging. 18:40:55 ehird: all pointers to ints, yes, pointers to chars can be odd for obvious reasons but not if they were obtained from malloc 18:41:13 ehird: I was reading up on how OCaml did it last night 18:41:22 it tagged integers vs. things more complicated than integers 18:41:28 Yes that is common. 18:41:34 and the more complicated things were stored as pointers to a tag plus data 18:41:41 Well, I guess I could do 18:41:44 tag = fixnum? 18:41:45 and 18:41:47 so the pointers, which were lightweight, could be moved around whilst the tags stayed constant in memory 18:41:47 then 18:41:56 '() could be 0 18:42:05 #t could be 2 18:42:07 #f could be 4 18:42:17 (since those addresses are hardly likely to be allocated) 18:42:52 ais523: my eventual plan is to make this compile down to efficient machine code, becoming a compiler 18:42:58 but first I'm going to do an interp 18:43:00 (Scheme) 18:43:33 a useful trick to know is that all the main OSes around at the moment reserve half of the available memory addresses for their own use <--- you can free up another bit if you find out /which/ half 18:43:48 what about using the range of [0..256] for #\a constants? 18:43:48 and note that half of all addresses != half of memory, generally speaking 18:44:04 ais523: finding out which half is presumably not very easy to do in code... 18:44:15 one slight problem is that windows XP can be made to reserve only 1GB for itself ;) 18:44:38 Asztal: well, it'd be (map(4+ . <<1, (0...256))) 18:44:39 that is 18:44:54 er I said that wrong 18:44:54 but 18:45:00 #\NUL would be 6 18:45:29 #\(255, I forget what char it is) would be 514 18:45:56 Asztal: except 18:45:58 I'm doing unicode 18:45:58 :-) 18:46:08 you could even have 16-bit exact integers, if you didn't mind wasting a bit more ... oh 18:47:25 really {char tag; void *data} would be perfect, if only it were efficient 18:55:55 * ehird recurs 4294967295 times. 18:57:41 -!- kar8nga has joined. 19:35:13 "When was the last time you saw a 1600-line C program with only 25 assignment statements?" 19:35:18 I should write one. 19:36:08 I've written C programs with no statements at all... 19:36:19 :D 19:37:22 apart from flow control, you can do anything you like in declarations 19:38:15 that's cheating 19:41:15 surely there was at least one statement 19:44:14 -!- grrlfawkes has joined. 19:44:26 -!- grrlfawkes has left (?). 19:45:19 Can't or Dust? 19:45:42 Deewiant: nope 19:45:51 ais523: what did main() look like? 19:46:01 Deewiant: a function call, IIRC 19:46:18 int main(void) {int x = (f(), exit(0));} was the general gist of it 19:46:23 wait 19:46:30 int main(void) {int x = (f(), exit(0), 0);} 19:46:33 to get the data type right 19:47:15 aren't variable declarations like that also statements? 19:47:24 nope, they're declarations 19:47:25 * ehird thinks about a compiler language 19:47:26 err 19:47:29 you can mix them with other declarations 19:47:32 a compiler language that does formal semantics, that is 19:47:34 but not inside statements, except in C9 19:47:36 *c99 19:47:36 and yet does efficient machine code 19:47:38 hrm 19:47:50 it'll have to be _imperative_ formal semantics :P 19:56:10 ehird: hoare logic? :P 19:58:18 http://pastie.org/401316.txt?key=dqcm5fjjhuynhxrvj9nwq 19:58:24 example of what I imagine it to be like 20:02:36 http://pastie.org/401324.txt?key=axr1a9azdlzsjawzet8w compiler output from that, with some tweaks to , due to my original errors 20:02:58 should be relatively trivial to make into asm 20:06:03 -!- olsner has joined. 20:11:25 guys 20:11:30 go into #haskell, immediately 20:11:33 and listen to this yohan kid 20:11:45 why 20:11:47 what is he saying 20:11:47 dont say anything 20:11:48 just listen 20:11:54 tell me 20:12:01 oh. 20:12:07 he .. 20:12:16 he thinks copy(a,b) { a=b; } should be valid haskell 20:12:25 and that you need to be able to "copy stuff" in order to be TC 20:12:35 he's trolling 20:12:35 psygnisfive: just read the logs 20:12:36 he's a troll 20:12:42 and people know he's trolling 20:12:45 so no harm 20:14:18 Im writing my master thesis about why imperative programming languages are fast 20:14:35 he could just be a dumb coder 20:14:38 ehird: you are boring :( 20:14:40 unlikely 20:14:44 i mean, he's getting a masters 20:15:02 psygnisfive: he's doing a masters with haskell at chalmers 20:15:11 he's also a far better troll than ehird 20:15:20 I'm not a literal troll. 20:15:26 I troll people by getting them to think I'm a troll and being annoying. 20:15:35 This annoys lament more than a real troll as you see. 20:16:18 [shortly after 'atm? ass to mouth'] 20:16:19 ASM? Ass to mouth? 20:19:39 -!- Hiato has quit ("Leaving."). 20:20:31 [20:19:19] jkup: python, is that like an include file? 20:20:34 :D 20:26:08 -!- ehird has quit ("Caught sigterm, terminating..."). 20:26:23 ! 20:43:17 :'( 20:46:36 -!- k2 has joined. 20:46:55 -!- kar8nga has quit (Nick collision from services.). 20:46:58 -!- k2 has changed nick to kar8nga. 21:05:45 -!- kar8nga has quit (Read error: 145 (Connection timed out)). 21:33:08 -!- ehird has joined. 21:49:58 -!- jix has quit (Read error: 113 (No route to host)). 21:51:28 i == true swap [] if 21:51:30 ^ code I wrote 21:51:34 who wannsa figure out how it works 21:51:42 given 21:51:43 i : 'R ('R -- 'S) -- 'S 21:51:43 == : 'R 'a 'b -- 'R bool 21:51:43 true : 'R -- 'R bool 21:51:43 swap : 'R 'a 'b -- 'R 'b 'a 21:51:43 [] : 'R -- 'R 21:51:45 if : 'R bool ('R -- 'T) ('R -- 'T) -- 'T 21:51:47 i wrote it ages ago 21:51:49 so I don't know how it works :D 21:52:01 err, [] would technicaly be 'R -- 'R ('S -- 'S) 22:01:40 -!- MigoMipo has quit ("QuitIRCServerException: MigoMipo disconnected from IRC Server"). 22:02:52 -!- KingOfKarlsruhe has quit (Remote closed the connection). 22:04:11 -!- BeholdMyGlory has quit (Remote closed the connection). 22:06:39 looks to me like [] evaluates, and code is just pushed on stack 22:06:49 but i guess if would need to be special. 22:07:51 err... "i == true swap []" => "i true ==" on stack, i guess the if wouldn't actually make any sense, as you're not doing anything. 22:07:56 so forget i said anything. 22:08:34 -!- impomatic has quit (Read error: 104 (Connection reset by peer)). 22:16:10 oklopol: no 22:16:13 i is 'call' 22:16:23 and [] is the empty quotation 22:39:48 -!- olsner has quit ("Leaving"). 22:48:53 [ehird:~] % port installed|grep xorg-|awk '{print $1}'|xargs sudo port uninstall 22:48:55 Unix is fun. 22:50:43 grah 22:51:02 -!- ehird has set topic: Don't use rafb.net for pasting because they delete pastes. Think of the log-readers. Logs: http://tunes.org/~nef/logs/esoteric/. 22:51:17 hulk smash 22:52:57 -!- asdasd has joined. 22:53:02 -!- Dewi has joined. 22:53:04 fuuuuuuuuuuuck Your have been using Linkinus for more than 15 days. If you like Linkinus, please purchase it for unrestricted use! 22:54:32 wtf, it's shareware? 22:55:17 Seeing how it says so on the site, I find myself unsurprised :P 23:04:50 -!- ehird has left (?). 23:04:53 -!- ehird has joined. 23:05:08 how many people alive? when I disconnect, please say something in the interim. 23:05:17 disconnected... NOW 23:05:20 I'm alive, just not saying anything 23:06:26 ok, thanks ais523, can you PART/JOIN in 10 seconds? :) 23:06:34 -!- ais523 has left (?). 23:06:35 -!- ais523 has joined. 23:06:47 not sure if that was 10 seconds 23:07:58 damn, miau doesn't datestamp joins. does parts, though 23:08:27 ais523 -- final thing, how about a NOTICE to this channel? 23:08:32 ok 23:08:33 when 23:08:34 ? 23:09:43 Thanks ais523 23:11:35 ais523 can you say something in 10 seconds? thanks 23:12:07 adjsljdlasjd 23:12:10 agh 23:12:11 too late 23:12:19 try again please? 23:12:37 no, I'm going home 23:12:39 sorry about that 23:12:41 -!- ais523 has quit. 23:13:04 heh nice timing 23:15:15 AnMaster: you alive? 23:16:00 ehird, BRAAAAINS! 23:16:29 ehird, night 23:16:46 grah. 23:20:13 comex: ping 23:26:50 it's not annoying 23:27:08 I go for a compromise: 23:27:10 It's buttoing 23:27:34 -!- Dewi has quit ("bbs"). 23:27:37 stop toeing my butt! 23:27:40 no 23:27:42 it's so delicious 23:27:46 :-| 23:28:28 i guess someone should put a notice in my notice now. 23:28:38 hi xzibit 23:28:59 [unexpected log event :(] 23:29:24 nice touch 23:29:30 /notice #esoteric 23:29:31 oh fuck 23:29:32 :-D 23:30:39 /nickserv password ohshitwhoops 23:31:43 -!- asdasd has quit (Remote closed the connection). 23:32:31 GregorR: are you a magic cowboy 23:33:21 well that's pretty okay ;=) 23:33:31 pretty okay indeed 23:33:36 ;============================================================8D) 23:36:12 umm 23:36:15 my brain is tickling 23:36:24 a magical butt on a tree 23:36:24 feels weird. 23:36:28 8===PEEEEEEEEEEEEEEEEEEEEEEEEEEEENIS===D 23:36:38 weenis