< 1283385709 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :Sorry, that was wrong, this is correct: \def\R{\redmanalayer\rlap\manasymcircle\textlayer\manasymred} < 1283385813 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Starting program: /home/ehird/jonesforth/jonesforth < 1283385814 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :During startup program terminated with signal SIGKILL, Killed. < 1283385814 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :But why? < 1283385829 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :alise: I don't know why? < 1283385842 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Hmm, seems the -Wl,-Ttext,0 < 1283385921 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :Yap will not render a page with unknown specials. < 1283386012 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :(Which is OK, since I will write a DVI driver for this purpose, so you won't need other ones.) < 1283386053 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :One problem I still have is how I should implement text that is stretched only horizontally, and not vertically, in TeX and DVI. < 1283386150 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :alise: "ZET:"? < 1283386163 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :cpressey: how long the red dot you just got will last < 1283386179 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :alise: But what does it *do*? < 1283386184 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :the red dot stops the electric fences (what everyone thinks they are; I however belong to the "lava that keeps its shape" school of thought) from killing you < 1283386192 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Ahhhhhh < 1283386362 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Well, Eightebed 1.0 has been released. http://catseye.tc/projects/eightebed/ < 1283386432 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Meaning, I get to think about something else for a while. < 1283386519 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Gregor: It occurs to me that you may care about the above announcement! < 1283386571 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :cpressey: But you DEFINED IT WRONG! < 1283386572 0 :GreaseMonkey!~gm@unaffiliated/greasemonkey JOIN :#esoteric < 1283386577 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Awww. < 1283386602 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :"There are no functions in Eightebed." XD < 1283386624 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :(I know, it's not a complexity problem.) < 1283386626 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :alise: Functions would change nothing... I explain that. < 1283386631 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :It's just amusing. < 1283386643 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :I suppose it is somewhat that. < 1283386653 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :consists only of the expression ifvalid x < 1283386655 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :you mean "valid" < 1283386661 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :WHOO BOY TIME FOR EIGHTEBED 1.1 < 1283386710 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Oh drat. I just found a tiny bug in the implementation too (in the -t option) so I will probably upload a bugfix. But, uh. Not today. < 1283386758 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :Bahahahahah @ "runtime support" < 1283386776 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :cpressey: Legal Issues is my favourite section < 1283386778 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :We implement this without a GC by stuffing most of a GC into the free function, thereby making it just as slow as a GC'd language with none of the advantages! < 1283386796 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Gregor: :D < 1283386817 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :And when are you allowed to free? Only in an if valid block? < 1283386819 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Aww, cpressey/Gregor is such a fun antagonistic relationship with obvious closeted underlying homosexuality. < 1283386824 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Uh, I said nothing. < 1283386832 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :You strange, strange people with your caring about "slow" and your "advantages". < 1283386879 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Gregor: You can only dereference in the "safe start" of an if valid block, i.e. before you make any assignments. You can free anytime, but if it's already free, nothing happens./ < 1283386901 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Could have made free follow the same rules as dereferencing. Didn't. < 1283386908 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :cpressey: And if you have an alias that's in an if-valid block? < 1283386944 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Gregor: I don't follow, but if I do, the answer is: you need another if valid. < 1283387004 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :var ptr to int a; var ptr to int b; ... a = b = malloc int; if valid a { free(b); /* exception thrown? What? */ } < 1283387029 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :The block is freed and both a and b are invalidated. < 1283387044 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :But you're in an "if valid a" block. < 1283387065 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Hm, good point. That could be a hole requiring redefinition of what a "safe start" is. < 1283387073 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Up to the first assignment *or free*. < 1283387129 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :So yes, although you have managed to fit my requirements, I am wildly underwhelmed :P < 1283387230 0 :Sgeo!~Sgeo@ool-18bf618a.dyn.optonline.net JOIN :#esoteric < 1283387249 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Gregor: "You win! But, whatever ;;(" < 1283387259 0 :olsner!unknown@unknown.invalid PRIVMSG #esoteric :overwhelmingly underwhelmed? < 1283387267 0 :olsner!unknown@unknown.invalid PRIVMSG #esoteric :or merely wildly? < 1283387285 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :alise: Just my inner homosexual tendencies towards cpressey preventing me from being too antagonistic, right? X-P < 1283387295 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Yes. < 1283387297 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Absolutely. < 1283387311 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :You don't want to seem like you care too much! :'( < 1283387369 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Of course. The next time a dispute like this comes up, it will instead be settled by match of Greco-Roman wrestling. < 1283387433 0 :tombom!unknown@unknown.invalid QUIT :Quit: Leaving < 1283387437 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Anyway. I realize how little it proves. But it was fun to do. < 1283387460 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :And, unfortunately I must be off now. Evening, all. < 1283387466 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Bye cpressey < 1283387469 0 :olsner!unknown@unknown.invalid PRIVMSG #esoteric :oh, were you discussing the memory-safe language again? < 1283387485 0 :cpressey!unknown@unknown.invalid QUIT :Quit: Leaving. < 1283387503 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :yes < 1283387504 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :he released it < 1283387508 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :although it's broken :P < 1283387510 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Stage 15! < 1283387529 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :What language? < 1283387539 0 :olsner!unknown@unknown.invalid PRIVMSG #esoteric :eightebed? < 1283387542 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :yes < 1283387575 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Really annoying thing about Factor: There are no tutorials for a lot of stuff. The object-oriented stuff seems awesome, but it may be inaccessible to many due to having to dig through reference stuff < 1283387579 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Someone should write a tutorial on it < 1283387608 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :the reference stuff has tutorials < 1283387615 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :it has no objects < 1283387630 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :alise, um, well, the class stuff < 1283387643 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo: seriously, go to the reference; go up the directory to the topic (it has breadcrumbs) < 1283387647 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :GENERIC: < 1283387648 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :there will be a link to documentation < 1283387648 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :M: < 1283387649 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :etc < 1283387652 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :those are tuples < 1283387682 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :I thought tuples were the things with slots < 1283387687 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :>>someslot someslot>> < 1283387688 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :etc < 1283387694 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric : < 1283387696 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :indeed they are < 1283387708 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :there are no classes < 1283387723 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :well < 1283387727 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :there are < 1283387730 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :but there's tuple and union classes < 1283387734 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :and tuples are what you are thinking of < 1283387739 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :and mixins < 1283387753 0 :olsner!unknown@unknown.invalid PRIVMSG #esoteric :heh," If complications persist, another, less contentious name (such as "Microsoft Windows 7") may need to be chosen for this language." < 1283388459 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :hrm? < 1283388512 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo: eightebed < 1283388603 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :alise, linky? Doesn't seem to be in wiki < 1283388610 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :And Google's useless < 1283388612 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :I am looking at the Kitsilano oscillator. It says it is sensitive to your hands? < 1283388617 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo: See very recent messagse. < 1283388632 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric : Wait, cpressey is the Cat's Eye guy? < 1283388635 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :zzo38: ? < 1283388658 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :alise, ty for not making me look through logs < 1283388680 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Um, n/m < 1283388689 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :YW < 1283388749 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :And I head straight for the esoteric programming category instead of seeing the news < 1283388795 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :alise: Yes that is what it says, but after adding one resistor it worked < 1283388805 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :http://catseye.tc/projects/kitsilano/kitsilano.html < 1283388824 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo: the discussion in the logs is quite important though < 1283388869 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :Now, how well will it work, if you put a speaker instead of LED, and make all capacitors and resistors vary? < 1283388920 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :There is a circuit at the top that only works with old-style headphones. Is it possible to make a circuit that only works with red LEDs? (And if you put a green LED it won't work?) < 1283389179 0 :Gregor-CP!~AndChat@65.183.185.80 JOIN :#esoteric < 1283389215 0 :Gregor-CP!unknown@unknown.invalid PRIVMSG #esoteric :I's got a fake Chinese iPad! < 1283389266 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Why would you spend any money on that? < 1283389275 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :ACTION decides that Gregor-CP is made out of money < 1283389304 0 :Gregor-CP!unknown@unknown.invalid PRIVMSG #esoteric :I got a pretty decent wage at MSR < 1283389329 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Multiple Sclerosis eRotica < 1283389378 0 :Gregor-CP!unknown@unknown.invalid PRIVMSG #esoteric :Plus, I bought this off a friend for half its already low price : < 1283389394 0 :Gregor-CP!unknown@unknown.invalid PRIVMSG #esoteric :*:P < 1283389397 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Make the next Microsoft Allegiance! < 1283389434 0 :Gregor-CP!unknown@unknown.invalid PRIVMSG #esoteric :It runs Android, albeit on a hilariously slow processor. < 1283389514 0 :olsner!unknown@unknown.invalid PRIVMSG #esoteric :however slow it is, I doubt it's hilarious... it's probably not even funny < 1283389516 0 :wareya_!unknown@unknown.invalid QUIT :Read error: Connection reset by peer < 1283389541 0 :wareya!~wareya@cpe-74-70-142-220.nycap.res.rr.com JOIN :#esoteric < 1283389578 0 :Gregor-CP!unknown@unknown.invalid PRIVMSG #esoteric :Makes me laugh :P < 1283389585 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :alise, um, that game < 1283389594 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo: IS HORRIBLE AAARGH IM ON STAGE 32 OISJFOIDFGSOFIG < 1283389608 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo: what about it < 1283389611 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :I'm stuck on the first part of level 1 < 1283389618 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :what < 1283389618 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :how < 1283389623 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Are you sure the construction version is the best place to start? < 1283389628 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :I want to avoid the fatal electric stuff < 1283389633 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :But can't jump high enough < 1283389652 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :The construction version sucks < 1283389655 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :http://dotaction.fizzlebot.com/ < 1283389658 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Play Dot Action 2 < 1283389661 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :(This mirror is much faster) < 1283389737 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Should I bother Google Translating? < 1283389741 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :nope < 1283389743 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :you don't need it < 1283389759 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Oh, what's the construction version? < 1283389761 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :This level is not it < 1283389780 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :http://dotaction.fizzlebot.com/ < 1283389781 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Play this < 1283389806 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :I am < 1283389817 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :But what was that contstruction version thing all about? < 1283389907 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :I think it lets you make your own levels < 1283389908 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :dunno < 1283389927 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :WTF is ZET? < 1283389938 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Oh wait, let me make a guess < 1283389956 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Guess is correct :D < 1283389979 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :And armed with that knowledge, I go to attempt the construction version again < 1283390003 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo: No < 1283390005 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :It only has one level < 1283390005 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :iirc < 1283390008 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Play the proper one < 1283390010 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :it's much better < 1283390129 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Stage 5 was fun < 1283390143 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :of which < 1283390158 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :i'm on 32 of da2 < 1283390206 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :I screwed myself over on stage 6 < 1283390213 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :(With multiple upside-down dots < 1283390268 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :me hmms < 1283390517 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :ACTION likes how sections of levels can be timed < 1283390600 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :I HATE LEVEL 32 SO MUCH < 1283390655 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :ACTION ran out of time grr < 1283390675 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :ON TO 33 YAY < 1283390842 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :ACTION growls at level 10 < 1283390847 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :I know exactly how to solve it < 1283390890 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :With 1 second left, I got it! < 1283390935 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :*1 TIME < 1283390938 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :TIME != second < 1283390982 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :ACTION can't figure out level 12 < 1283390983 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :erm, 11 < 1283390991 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :THe jump is just a LITTLE too big < 1283391003 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :35 time < 1283391010 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :n/m < 1283391170 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Stage 14 was fun < 1283391308 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :stage 16 requires some intellect < 1283391511 0 :Gregor-CP!unknown@unknown.invalid PRIVMSG #esoteric :Chinese iPad ripoff: still workin'! < 1283391615 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Gregor-CP: Awesome. < 1283391697 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Y'know, now that I actually have to drive regularly, I have developed *quite* an appreciation for classical radio stations. < 1283391711 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :ORLY? Do you have a not-terrible one? < 1283391733 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :I *think* it's not-terrible. It *certainly* sucks less than all other radio stations in the area! < 1283391736 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :The Portland one is great, the Purdue one is OK. Neither of them have any great ability to stick to themes, they just sort of wander aimlessly over all music. < 1283391771 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Classical music has themes? < 1283391773 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :>.> < 1283391779 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo: Very much so. < 1283391797 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :CBC sometimes plays classical music. They play other music too sometimes, and also news, and other things. < 1283391801 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :I also like classical music < 1283391801 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :ACTION disappears for fifteen minutes. < 1283391826 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Gregor: The one here (Colorado Springs) pretty much goes "Okay, we're just going to go with $theme for the next little bit." < 1283391885 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :FUCKING FUCKING FUCKING PIECE OF < 1283391905 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :And it's nice & non-profit. < 1283392182 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Gregor: Just FYI: I'm presuming it's a damned good thing I have yet to hear on there something I'm actually familiar with. :P < 1283392469 0 :augur!~augur@208-58-6-161.c3-0.slvr-ubr1.lnh-slvr.md.cable.rcn.com JOIN :#esoteric < 1283392474 0 :augur!unknown@unknown.invalid QUIT :Remote host closed the connection < 1283392493 0 :augur!~augur@208-58-6-161.c3-0.slvr-ubr1.lnh-slvr.md.cable.rcn.com JOIN :#esoteric < 1283392650 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :STAGE 38 IS PURE PAIN < 1283392746 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :I have one idea, that you could make processor instruction set with no direct jump command, only a indirect jump command where the value of a register is the address of the next address < 1283392773 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :zzo38: quite a few esolangs work like that < 1283392873 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :ais523: Yes, although what I mean is something like this: if 02AA is the destination address and 02 is the instruction and FF is the instruction pointer register: 02FF02AA < 1283392920 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :that's how an indirect jump is done on PICs (you assign to the program counter, which is memory-mapped), but it has a direct jump instruction too < 1283393029 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :;____; < 1283393463 0 :zzo38!unknown@unknown.invalid QUIT :Remote host closed the connection < 1283393852 0 :Gregor-CP!unknown@unknown.invalid QUIT :Remote host closed the connection < 1283394195 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :ACTION has troubles with stage 18 < 1283394367 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :42 is evil < 1283394664 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :42 is oidsjfodisjgoitjhnog < 1283394929 0 :Zuu!unknown@unknown.invalid QUIT :Read error: Connection reset by peer < 1283395079 0 :Gregor-CP!~AndChat@65.183.185.80 JOIN :#esoteric < 1283395166 0 :Zuu!zuu@0x55529f1b.adsl.cybercity.dk JOIN :#esoteric < 1283395167 0 :Zuu!unknown@unknown.invalid QUIT :Changing host < 1283395167 0 :Zuu!zuu@unaffiliated/zuu JOIN :#esoteric < 1283395578 0 :Zuu!unknown@unknown.invalid QUIT :Read error: Connection reset by peer < 1283395582 0 :ais523!unknown@unknown.invalid QUIT :Remote host closed the connection < 1283395921 0 :Zuu!zuu@0x55529f1b.adsl.cybercity.dk JOIN :#esoteric < 1283395921 0 :Zuu!unknown@unknown.invalid QUIT :Changing host < 1283395921 0 :Zuu!zuu@unaffiliated/zuu JOIN :#esoteric < 1283397391 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo: : postpone r> dup , >r ; < 1283397393 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :i think this is right < 1283397401 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :works in jonesforth at least < 1283397425 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :or not < 1283397433 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :no, it isn't, of course < 1283397441 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :eh, whatever :) < 1283398431 0 :cal153!unknown@unknown.invalid QUIT : < 1283398650 0 :Gregor-CP!unknown@unknown.invalid QUIT :Ping timeout: 265 seconds < 1283398694 0 :Gregor-CP!~AndChat@65.183.185.80 JOIN :#esoteric < 1283399149 0 :oerjan!~oerjan@129.241.210.68 JOIN :#esoteric < 1283399192 0 :augur!unknown@unknown.invalid QUIT :Remote host closed the connection < 1283399201 0 :augur!~augur@208-58-6-161.c3-0.slvr-ubr1.lnh-slvr.md.cable.rcn.com JOIN :#esoteric < 1283399723 0 :Zuu!unknown@unknown.invalid QUIT :Read error: Connection reset by peer < 1283399795 0 :Gregor-CP!unknown@unknown.invalid QUIT :Read error: No route to host < 1283399885 0 :GreaseMonkey!unknown@unknown.invalid QUIT :Remote host closed the connection < 1283399970 0 :Zuu!zuu@0x55529f1b.adsl.cybercity.dk JOIN :#esoteric < 1283399970 0 :Zuu!unknown@unknown.invalid QUIT :Changing host < 1283399970 0 :Zuu!zuu@unaffiliated/zuu JOIN :#esoteric < 1283400357 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :"A+B - in programming contests, classic problem, which is given so contestants can gain familiarity with online judging system being used. < 1283400358 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :A+B is one of few problems on contests, which traditionally lacks fabula." < 1283400360 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :whaaat < 1283400361 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :xD < 1283400368 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :i guess traditionally lacks score or whatever < 1283400396 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :I'd be quite worried if it were worth points. < 1283400473 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :ACTION growls at Math being under "Arts & Sciences" at his school < 1283400473 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo: this is an interesting look at forth philosophy, btw: http://www.jwdt.com/~paysan/httpd-en.html < 1283400476 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :if not utterly robust < 1283400484 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :mathematics is sort of a science < 1283400688 0 :Zuu!unknown@unknown.invalid QUIT :Read error: Connection reset by peer < 1283400700 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :alise: A New Kind of Science, if you will. < 1283400713 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :>_< < 1283400724 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :ACTION leaves to avoid lynching < 1283400727 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric ::P < 1283400736 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :ACTION doesn't get it < 1283400747 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo: Wolfram. < 1283400755 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Or: The Source of All Ego. < 1283400836 0 :GreaseMonkey!~gm@unaffiliated/greasemonkey JOIN :#esoteric < 1283401031 0 :Zuu!zuu@0x55529f1b.adsl.cybercity.dk JOIN :#esoteric < 1283401031 0 :Zuu!unknown@unknown.invalid QUIT :Changing host < 1283401031 0 :Zuu!zuu@unaffiliated/zuu JOIN :#esoteric < 1283401443 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :lol @ "The Source of All Ego" < 1283402932 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: cat compiler /does/ do type checking; evidence: http://lambda-the-ultimate.org/node/2319#comment-34783 < 1283402937 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :he mentions things producing type errors < 1283402938 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :circa 2007 < 1283403000 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Found a flame war regarding concatenative languages from 2005 < 1283403011 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Apparently, stack effects weren't automatically checked back then < 1283403026 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :It's a new thing, with the optimising compiler. < 1283403098 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Well. < 1283403099 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Relatively new. < 1283403186 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :http://lambda-the-ultimate.org/node/900 < 1283403227 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :pronunciation is a bit too close to cunt for comfort :) < 1283403442 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :fizzie: whoever: I discovered how colorForth does interpreted code. < 1283403447 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :It's just a different, non-green colour. < 1283403453 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :So there's no real stop-defining delimiter thing. < 1283403455 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :I think fizzie asked. < 1283403458 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Or was it cpressey? < 1283403460 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Probably. Hmm. < 1283404051 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo: : fact 1- if dup fact 1+ * else 1+ then ; < 1283404052 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :>:) < 1283404054 0 :Zuu!unknown@unknown.invalid QUIT :Ping timeout: 276 seconds < 1283404091 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :if you have a colorForth-style-; and an if that doesn't drop like the i21: < 1283404092 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :: fact 1- if fact 1+ * ; then 1+ ; < 1283404128 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :That doesn't look like Factor < 1283404171 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :it's Forth, of a sort < 1283404183 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :the latter would work on the i21 and nothing else :-) < 1283404194 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :http://www.ultratechnology.com/1xforth.htm is a very good read btw < 1283404195 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :goodnight < 1283404197 0 :alise!unknown@unknown.invalid QUIT :Quit: Leaving < 1283404602 0 :Zuu!zuu@unaffiliated/zuu JOIN :#esoteric < 1283405146 0 :oerjan!unknown@unknown.invalid QUIT :Quit: Lost terminal < 1283405826 0 :augur!unknown@unknown.invalid QUIT :Remote host closed the connection < 1283405838 0 :augur!~augur@208-58-6-161.c3-0.slvr-ubr1.lnh-slvr.md.cable.rcn.com JOIN :#esoteric < 1283406677 0 :cheater00!~cheater@p549729CF.dip.t-dialin.net JOIN :#esoteric < 1283406874 0 :cheater99!unknown@unknown.invalid QUIT :Ping timeout: 252 seconds < 1283410721 0 :zzo38!~zzo38@h24-207-49-17.dlt.dccnet.com JOIN :#esoteric < 1283410728 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :Please read this Article III: http://www.fftw.org/y2k.html < 1283411618 0 :cheater-!~cheater@p5B216A8E.dip.t-dialin.net JOIN :#esoteric < 1283411618 0 :cheater00!unknown@unknown.invalid QUIT :Ping timeout: 240 seconds < 1283412260 0 :relet!unknown@unknown.invalid QUIT :Quit: Leaving. < 1283412566 0 :zzo38!unknown@unknown.invalid QUIT :Remote host closed the connection < 1283413157 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Twasn't me. < 1283413261 0 :relet!~hirtho@159.162.68.87 JOIN :#esoteric < 1283414399 0 :clog!unknown@unknown.invalid QUIT :ended < 1283414400 0 :clog!unknown@unknown.invalid JOIN :#esoteric < 1283414446 0 :FireFly!~firefly@unaffiliated/firefly JOIN :#esoteric < 1283416615 0 :FireFly!unknown@unknown.invalid QUIT :Quit: swatted to death < 1283419518 0 :Flonk!~chatzilla@93-82-40-169.adsl.highway.telekom.at JOIN :#esoteric < 1283424085 0 :tombom!tombom@wikipedia/Tombomp JOIN :#esoteric < 1283425607 0 :GreaseMonkey!unknown@unknown.invalid QUIT :Remote host closed the connection < 1283426462 0 :augur!unknown@unknown.invalid QUIT :Remote host closed the connection < 1283426782 0 :Flonk!unknown@unknown.invalid QUIT :Remote host closed the connection < 1283429809 0 :tombom!unknown@unknown.invalid QUIT :Ping timeout: 272 seconds < 1283432799 0 :Phantom_Hoover!~phantomho@cpc3-sgyl21-0-0-cust116.sgyl.cable.virginmedia.com JOIN :#esoteric < 1283433453 0 :Phantom_Hoover!unknown@unknown.invalid PRIVMSG #esoteric :http://en.wikipedia.org/wiki/Wikipedia:Terminal_Event_Management_Policy < 1283433896 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :I like the level 1 warning template. < 1283433918 0 :sftp!~sftp@79.174.50.208 JOIN :#esoteric < 1283433928 0 :distant_figure!unknown@unknown.invalid QUIT :Ping timeout: 260 seconds < 1283434116 0 :Phantom_Hoover!unknown@unknown.invalid QUIT :Ping timeout: 265 seconds < 1283435674 0 :distant_figure!~nine@clam.leg.uct.ac.za JOIN :#esoteric < 1283438299 0 :alise!~alise@91.105.124.106 JOIN :#esoteric < 1283438681 0 :relet!unknown@unknown.invalid QUIT :Quit: Leaving. < 1283439661 0 :derdon!~quassel@p5B3E5BA7.dip.t-dialin.net JOIN :#esoteric < 1283439780 0 :Phantom_Hoover!~phantomho@cpc3-sgyl21-0-0-cust116.sgyl.cable.virginmedia.com JOIN :#esoteric < 1283439800 0 :Phantom_Hoover!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, I like level 1 as well. < 1283439985 0 :Phantom_Hoover_!~phantomho@cpc3-sgyl29-2-0-cust326.sgyl.cable.virginmedia.com JOIN :#esoteric < 1283440090 0 :Phantom_Hoover!unknown@unknown.invalid QUIT :Ping timeout: 265 seconds < 1283440193 0 :FireFly!~firefly@unaffiliated/firefly JOIN :#esoteric < 1283440213 0 :Phantom_Hoover_!unknown@unknown.invalid PRIVMSG #esoteric :ACTION ponders why GHCi doesn't allow the definition of types < 1283440553 0 :Phantom_Hoover_!unknown@unknown.invalid PRIVMSG #esoteric :And how Coq does implicit parameters. < 1283440676 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Phantom_Hoover_: because ghci executes in a do block < 1283440683 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :same reason you have to proceed functions with "let" < 1283440686 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :also, cleverly. < 1283440692 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: brödrost < 1283440694 0 :Phantom_Hoover_!unknown@unknown.invalid PRIVMSG #esoteric :With forall? < 1283440729 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Phantom_Hoover_: ?? < 1283440733 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :what has forall got to do with it? < 1283440745 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :(all function arrows A->B are really just "forall (_:A), B" but you know that) < 1283440753 0 :Phantom_Hoover_!unknown@unknown.invalid PRIVMSG #esoteric :A misconception, obviously. < 1283440758 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :BRÖDROST sounds somehow heavy-metallish. (Also I'm reminded of a nice absurdist comic, but it's very Finnish-only, so the point might be lost.) < 1283440807 0 :Phantom_Hoover_!unknown@unknown.invalid PRIVMSG #esoteric :alise, ah, so how do they work? < 1283440825 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Phantom_Hoover_: you didn't know that? < 1283440827 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :h < 1283440828 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :oh < 1283440831 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :i see < 1283440833 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Phantom_Hoover_: cleverly. < 1283440840 0 :Phantom_Hoover_!unknown@unknown.invalid PRIVMSG #esoteric :alise, not too helpful... < 1283440842 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :fizzie: It means "toaster". < 1283440857 0 :Phantom_Hoover_!unknown@unknown.invalid PRIVMSG #esoteric :That is the best name for a heavy metal band ever. < 1283440864 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :alise: I know, but it *ought* to mean church-burning or something. < 1283440869 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Phantom_Hoover_: an implicit parameter is filled in when its value is obvious from the types of the others, or something approximating that anyway < 1283440891 0 :Phantom_Hoover_!unknown@unknown.invalid PRIVMSG #esoteric :alise, so it just does it automatically? < 1283440893 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :you can use an implicit parameter on the argument specifying a type or component of a type of another argument, usually < 1283440906 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Phantom_Hoover_: well, in declarations you can do {x:...} to make it implicit < 1283440913 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :normally it just sort of tries to make everything it can implicit, yes < 1283440913 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :however < 1283440915 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :you can also do < 1283440922 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Set Implicit Arguments functionOrDataType [arg arg arg]. < 1283440935 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :({x:...} rather than (x:...)) < 1283442088 0 :cpressey!~CPressey@173-9-215-173-Illinois.hfc.comcastbusiness.net JOIN :#esoteric < 1283442262 0 :MigoMipo!~John@84-217-14-89.tn.glocalnet.net JOIN :#esoteric < 1283442665 0 :mr45!WinNT@cpc2-hudd9-0-0-cust396.4-1.cable.virginmedia.com JOIN :#esoteric < 1283442853 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :hi < 1283442860 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, what about brödrost? < 1283442892 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, I mean, it seems completely non-sequitur... < 1283442908 0 :Phantom_Hoover_!unknown@unknown.invalid PRIVMSG #esoteric :`swedish Phantom < 1283442919 0 :HackEgo!unknown@unknown.invalid PRIVMSG #esoteric :Phuntum < 1283442932 0 :Phantom_Hoover_!unknown@unknown.invalid PRIVMSG #esoteric :`swedish bread < 1283442935 0 :HackEgo!unknown@unknown.invalid PRIVMSG #esoteric :breed < 1283442947 0 :Phantom_Hoover_!unknown@unknown.invalid PRIVMSG #esoteric :`translate en se Phantom < 1283442950 0 :HackEgo!unknown@unknown.invalid PRIVMSG #esoteric :en se Phantom < 1283442951 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, or did you ask me for a translation? In that case it means "toaster" (literal translation: bread toaster) < 1283442975 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :hm < 1283443000 0 :Phantom_Hoover_!unknown@unknown.invalid NICK :Phantom_Brodrost < 1283443018 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :brod is not a Swedish word afaik < 1283443265 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :`swedish Mighty Morphin' Power Rangers < 1283443267 0 :HackEgo!unknown@unknown.invalid PRIVMSG #esoteric :Meeghty Murpheen' Pooer Rungers < 1283443282 0 :Phantom_Brodrost!unknown@unknown.invalid PRIVMSG #esoteric :!swedish Mighty Morphin' Power Rangers < 1283443288 0 :EgoBot!unknown@unknown.invalid PRIVMSG #esoteric :Meeghty Murpheen' Pooer Rungers < 1283443889 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: He already said it means toaster, so I doubt it was about translation. < 1283443916 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :(Don't have any clue what it *was* about.) < 1283443920 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :(Away.) < 1283444016 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, right < 1283444202 0 :cpressey!unknown@unknown.invalid PART #esoteric :? < 1283444252 0 :MigoMipo!unknown@unknown.invalid QUIT :Remote host closed the connection < 1283444283 0 :MigoMipo!~John@84-217-14-89.tn.glocalnet.net JOIN :#esoteric < 1283444408 0 :cpressey!~CPressey@173-9-215-173-Illinois.hfc.comcastbusiness.net JOIN :#esoteric < 1283444607 0 :Phantom_Brodrost!unknown@unknown.invalid QUIT :Ping timeout: 245 seconds < 1283444634 0 :Phantom_Brodrost!~phantomho@cpc3-sgyl29-2-0-cust326.sgyl.cable.virginmedia.com JOIN :#esoteric < 1283444790 0 :Phantom_Brodrost!unknown@unknown.invalid PRIVMSG #esoteric :I seriously want to murder whoever pulled the plug on Geocities. < 1283444991 0 :Phantom_Brodrost!unknown@unknown.invalid PRIVMSG #esoteric :I would murder cpressey for playing hopscotch with Cat's Eye, but he's too lovable. < 1283445060 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :-_- < 1283445426 0 :comex!unknown@unknown.invalid QUIT :Ping timeout: 265 seconds < 1283445512 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Oh, I have a theory. While terminals display block letters, files contain cursive. I say this because it's always "print" to put stuff on the screen and "write" to put stuff in a file. < 1283445544 0 :coppro!unknown@unknown.invalid PRIVMSG #esoteric :hah < 1283446605 0 :comex!comex@c-67-188-10-190.hsd1.ca.comcast.net JOIN :#esoteric < 1283447442 0 :derdon!unknown@unknown.invalid QUIT :Remote host closed the connection < 1283448427 0 :augur!~augur@129-2-175-79.wireless.umd.edu JOIN :#esoteric < 1283448485 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :back < 1283448496 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric : I would murder cpressey for playing hopscotch with Cat's Eye, but he's too lovable. < 1283448496 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric : -_- < 1283448499 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :we actually have a template for your site < 1283448503 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :{{catseye|path}} < 1283448514 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :because it moves so much < 1283448544 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Phantom_Brodrost: try s/g/r/ in the url, btw < 1283448547 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :you may be lucky < 1283448572 0 :Phantom_Brodrost!unknown@unknown.invalid PRIVMSG #esoteric :alise, it's been fixed at catseye.tc for a while now. < 1283448585 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :yes, but iirc there were a bunch of broken links to the old site on the wiki < 1283448593 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :so we just replaced every catseye link with a template < 1283448595 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :and set it to catseye.tc < 1283448608 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :http://esolangs.org/wiki/Template:Catseye < 1283448614 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :http://esolangs.org/w/index.php?title=Template:Catseye&action=edit < 1283448698 0 :Phantom_Brodrost!unknown@unknown.invalid PRIVMSG #esoteric :Heh. < 1283448716 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :cpressey: have you seen PicoLisp? it's an interesting very-small, very-fast Lisp dialect interpreter < 1283448720 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :http://picolisp.com/5000/-2.html < 1283448740 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :some interesting choices, like 'a -> (quote . a), '(a b) -> (quote a b) < 1283448742 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :(explained in http://picolisp.com/5000/-2-3.html) < 1283448765 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :they base more or less everything on the cell < 1283448775 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :which is basically a cons with a few predefined car/cdr types < 1283448777 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :iirc: < 1283448793 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :cell := ((int | symbol | cell), (int | symbol | cell)) < 1283448804 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :the 32-bit one is written in C, 64-bit in asm < 1283448818 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :(except it seems to be some assembler written in PicoLisp; it appears to have if/then/else < 1283448820 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :*else) < 1283448830 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :interesting representation of NIL: http://picolisp.com/5000/-2-M.html < 1283448834 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :"This structure has great advantages. Any proper list (ending with 'NIL') becomes sort of "infinite", allowing to take the CDR as often as possible and still obtain 'NIL' again and again. < 1283448834 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Therefore, a function doesn't need to check whether it actually received an argument or not. It can simply take the next argument with CDR from the argument list, and doesn't see any difference between '(foo NIL)' and '(foo)'. This makes interpretation both simpler and faster." < 1283448839 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :they make it both a symbol and a cons < 1283448896 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :that sounds vaguely familiar < 1283448901 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :i wanted to do that with... something < 1283448906 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :it gets linked a bit (PicoLisp) < 1283448917 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :but yeah, the language itself is interesting! reading the wiki is fun < 1283448965 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :cpressey: they have no lambda < 1283448967 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :they use quote < 1283448969 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :'((x) x) < 1283448973 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :-> (quote (x) x) < 1283448990 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :I think this probably means they use dynamic scope, but I don't care, it's fun < 1283448996 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :yes < 1283448999 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :"Why do you use dynamic variable binding?" < 1283449003 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :http://software-lab.de/doc/faq.html#dynamic < 1283449064 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :"You mean the funarg problem, or problems that arise when a variable might be bound to itself? For that reason we have a convention in PicoLisp to use transient symbols (instead of internal symbols) ..." < 1283449067 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :huh < 1283449071 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :well, it's certainly interesting < 1283449329 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Quylthylg has an extra argument to car and cdr which specifies what to return if you try to use them on a nil. Passing nil as that argument would be similar to that behaviour. < 1283449336 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Well, would be that behaviour, actually. < 1283449382 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :But yes, PicoLisp looks quite interesting in its way. < 1283449389 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :heh, they have no strings, they just use transient symbols < 1283449396 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Because PicoLisp has something better: Transient symbols. They look and behave like strings in any respect, but are nevertheless true symbols, with a value cell and a property list. < 1283449396 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :This leads to interesting opportunities. The value cell, for example, can point to other data that represent the string's the translation. This is used extensively for localization. When a program calls < 1283449396 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric : (prinl "Good morning!") < 1283449396 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :then changing the value of the symbol "Good morning!" to its translation will change the program's output at runtime. < 1283449420 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :[[Transient symbols are also quite memory-conservative. As they are stored in normal heap cells, no additional overhead for memory management is induced. The cell holds the symbol's value in its CDR, and the tail in its CAR. If the string is not longer than 7 bytes, it fits (on the 64-bit version) completely into the tail, and a single cell suffices. Up to 15 bytes take up two cells, 23 bytes three etc., so that long strings are not very efficient (needing < 1283449420 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric : twice the memory on the avarage), but this disadvantage is made up by simplicity and uniformity. And lots of extremely long strings are not the common case, as they are split up anyway during processing, and stored as plain byte sequences in external files and databases.]] < 1283449431 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric : then changing the value of the symbol "Good morning!" to its translation will change the program's output at runtime. ;; this is just the greatest, most insane thing i've heard today < 1283449463 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :[[In an interactive environment (console), transient symbols should appear as an underlined sequence of characters. Where this is not possible (e.g. for representation in files), or inconvenient (while editing), double quotes '"' are used instead of underlining.]] ;; huh < 1283449566 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, PicoLisp? Hm? What makes it stand out from other LISPs? < 1283449581 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: *Lisps; and read everything I've said (plus the wiki). < 1283449588 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, tl;dr < 1283449602 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Well, that is not my problem. < 1283449853 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :cpressey: Their symbols appear to be constructed as '(value . name)/ < 1283449858 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :*. name). < 1283449866 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Well, with some property list stuff on the side, I guess. < 1283449941 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :[[For the third rule, however, things get a bit more involved. First - as a special case - if the CAR of the list is a number, the whole list is returned as it is:]] That is a bit gross though. < 1283449968 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :"When a number is used as a function, it is simply taken as a pointer to executable code that will be called with the list of (unevaluated) arguments as its single parameter. It is up to that code to evaluate the arguments, or not. Some functions do not evaluate their arguments (e.g. quote) or evaluate only some of their arguments (e.g. setq)." < 1283449985 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :It's like Forth! Except LISP! < 1283449995 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :(That was shouting Lisp, not miscapitalising it.) < 1283450018 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Inspecting the VAL of *, however, gives < 1283450018 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :: * # Get the VAL of the symbol '*' < 1283450018 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :-> 67291944 < 1283450021 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :That's actually quite cool. < 1283450063 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Now you are shouting for Val, but she's not here! < 1283450136 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :That was a quote :P < 1283450159 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Besides, as a typographical matter, Lisp function names may be capitalised (when you can't distinguish them in some other way, e.g. monospaced text). < 1283450162 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :And mine was a joke. I unfortunately don't have the time to read about and play with PicoLisp either. < 1283450172 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Which leads to fun things like saying CALL-WITH-CURRENT-CONTINUATION. < 1283450180 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :CALL WITH IT, DAMMIT!! < 1283450208 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Cool, the REPL actually matches parens and does the "foo" -> underline{foo} thing as you type. < 1283450222 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :: sdgkopegjser09jt < 1283450222 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :-> NIL < 1283450222 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Hmm. < 1283450322 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :? (car '*) < 1283450323 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :-> 67319368 < 1283450323 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :? (cdr '*) < 1283450323 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :!? (cdr '*) < 1283450323 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :* -- List expected < 1283450338 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :I guess they only typecheck when they really have to :) < 1283450472 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :cpressey: Do you know anything about the performance of x86 instructions? < 1283450552 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :I don't know much about that, but what little I know leads me to suggest that you can't say anything (or at least not much) about "x86 instructions" in a general sense, without talking about a single specific processor model. < 1283450555 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, I can help a bit < 1283450557 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :I think < 1283450623 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Gone are the days you could cycle-count anything, anyway. It's all about what sort of units happen to be free for scheduling, and memory-access times are pretty much random. < 1283450640 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, AMD and Intel both have tables over number of cycles per instructions in their modern architectures. As downloadable PDFs. However that is of course not the whole story, there is cache, wb/wc/uc, TLB misses and so on < 1283450648 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Well, my question is: are the push-and-popping stack instructions faster than Just Doing It Yourself? < 1283450659 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, the AMD docs indicate which ones are done in microcode iirc < 1283450667 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :and also how it stalls stuff < 1283450683 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :not sure if intel docs do < 1283450690 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, that depends on which CPU < 1283450692 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :iirc < 1283450708 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: They could be slower? Or merely equal? < 1283450710 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, on many CPUs just setting the stack pointer at the start of a function and then using mov is faster < 1283450719 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :many modern ones that is < 1283450735 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, due to instruction dependencies iirc < 1283450743 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :on %rsp < 1283450744 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Push and pop at least save in code size, and it would be a bit surprising if they were much slower than the equivalent manual "decrement and store/load and increment" pair. < 1283450758 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: well, I'd be setting the stack pointer to something manifestly not the usual stack in this case < 1283450771 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, hm? How do you mean < 1283450773 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :hmm, are there variants of push and pop which also take the stack? i suppose not < 1283450792 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :I guess saving the stack pointer, setting the stack pointer, doing push (or pop), then restoring the stack pointer is slower than the manual way, though. < 1283450798 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :(Just one operation.) < 1283450806 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :So it may be a good idea to use it for the main stack but manually handle the return stack. < 1283450857 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, anyway for the usual "common C function not using alloca or VLA" it is on modern cpus generally faster to increment %rsp by whatever amount you need, then use mov to put things on the stack relative that pointer < 1283450864 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :no C < 1283450871 0 :relet!~thomas@c905DBF51.dhcp.bluecom.no JOIN :#esoteric < 1283450873 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, well, this could apply to other languages too < 1283450887 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, any compiled ones where you know the size of your stack frame at entry < 1283450892 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: basically, this thing is going to execute a ludicrous amounts of pushes and pops per second. < 1283450893 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :it being forth < 1283450914 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, hm... You could probably optimise the code? < 1283450930 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :What? < 1283450941 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Forth is a stack language. Its whole operation is based on pushing and popping. < 1283450942 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, an optimising forth compiler. Yes I know this is not the usual way to do it < 1283450949 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :I am merely asking whether these are faster than using mov manually. < 1283450956 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :I don't need implementation tips... < 1283450956 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :but you could make one that tries to convert it to using registers and such < 1283450970 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :an optimising Forth compiler goes against the spirit of Forth, anyway < 1283450975 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :your code shouldn't be wasting time in the first place < 1283450976 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, anyway: several pushes after each other will all update %rsp/%esp. < 1283450986 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, that means they can't be executed out of order < 1283450998 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :same goes for pop < 1283451000 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :well, it won't be several pushes immediately < 1283451003 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :and mixed series of push/pop < 1283451013 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :it'll be push, push, ..., pop, push, push, ... < 1283451021 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :... being e.g. a jmp or two < 1283451022 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :well < 1283451025 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :a jmp and incrementing something < 1283451026 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :or whatever < 1283451044 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, better to, if possible, update %rsp once when entering the function, then use mov using %rsp for indirection < 1283451112 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :the mass migration of Digg users to reddit started a few days before September began in the incorrect (post-09/1993) calendar < 1283451115 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :coincidence? I think not. < 1283451127 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, this applies to modern CPUs. Not sure where exactly it becomes more efficient. But it push/pop would most likely be better on a i486. And update-once-and-mov would definitely be better on P4 and later. < 1283451134 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :in between... I don't know < 1283451155 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: this is between mov, inc, mov, inc and push < 1283451158 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :(same for pop) < 1283451184 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: ok, what about "save stack pointer, set the stack pointer to something else, (1 push or pop), restore the stack pointer"? < 1283451189 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, hm, why could you not merge does movs into an add, then do relative addressing < 1283451189 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :If you're going to do exactly the pushing operation ("decrement a register, move a word to where it points"), my guess is it'll be better to push than sub 4 + mov, if you can keep the thing in rsp; but possibly not if it's in some other register. (Though I'm not completely certain about that: it's possible register-renaming trickery could make xchg+push+xchg pretty fast.) < 1283451191 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :that's gotta be slower than a mov-based incantation right? < 1283451210 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, like >+>>++> would be optimised in any decent BF compiler < 1283451214 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :by just moving once < 1283451223 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: as i said, the fight is between precisely those options i listed < 1283451224 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :and then using an offset to the current position as needed < 1283451246 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, then I suspect push/pop is somewhat less bad. < 1283451252 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :fizzie: Specifically, the swap-the-stack-for-one-instruction thing would be when running r> and >r, which pop or push one value from/to the return stack from/to the main stack. < 1283451252 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, but try both and profile! < 1283451257 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: no. < 1283451265 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, ... what? < 1283451273 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :fizzie: So it would be "pop, xchg, push, xchg" or "xchg, pop, xchg, push" < 1283451348 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Well, that sounds somewhat reasonable. < 1283451366 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, what exactly is wrong with combining several updates to the stack pointer and then use offsets relative where it points? < 1283451367 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :just wondering < 1283451388 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :fizzie: That is, vs "pop, inc, mov" or "mov, dec, push". < 1283451399 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Respectively. < 1283451412 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, remember on x86_64 you may put temp data in a 128 byte region beyond the stack pointer. Any signal handler or such won't overwrite that. Specified in the ABI < 1283451423 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :useful for leaf functions to avoid updating stack pointer at all < 1283451491 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :alise: "push" is not "inc, mov", it grows the other direction. But anyway. Really, you *could* consider benchmarking this stuff; after you get it working, it's a small snippet to change and run your benchmarks. < 1283451507 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, indeed < 1283451523 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, but he refused to do proper measurements above: " Vorpal: no." < 1283451534 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: That was just to upset you, though. < 1283451550 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, no, it was just stupidity on your side. I'm sure of it. < 1283451553 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :fizzie: Er, right, you know what I mean with the alternative. < 1283451574 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: You /do/ realise that I've only been actually listening and talking to fizzie this whole time? < 1283451604 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, strange you highlighted me several times then. < 1283451621 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, but sure. Be a jerk if that is what you like < 1283451623 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: Yes; to annoy you. < 1283451656 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :troll < 1283451668 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Indeed. Perhaps you'll ignore me now? < 1283451703 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, no. That would be what you want. < 1283451721 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :haha < 1283451751 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, however I will remember to never try to be helpful when you ask a question again. < 1283451820 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :As far as code size is concerned, it's a very slight win. "pop, xchg, push, xchg" is 2+1+2+1=6 bytes (or 1+1+1+1=4 if your other stack is in rax, but that doesn't sound feasible) while "pop, sub 4, mov [rx]" is 1+3+3=7 bytes, or 1+3+4=8 if your other stack is in rbp. < 1283451855 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :fizzie: Yeah; I think I will go with the xchg. < 1283451859 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Especially since there's operations like rswap. < 1283451881 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Actually, you can swap the top two values of a stack without popping them. < 1283451884 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :So that will not actually be any longer. < 1283451913 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :If your other stack is in rsi and you keep the direction flag set properly, you can use lodsq as a single-byte-instruction pop (but push will still be longer). < 1283451945 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :I think I'll stick to regular stacks. < 1283451975 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :xchging the top two values of a stack will be faster than popping and pushing twice, I assume :P < 1283452014 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :I'm not sure about that, because xchg against memory will do LOCK automatically even if you don't put the LOCK prefix in. < 1283452052 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :But of course you don't need to pop, pop, push, push since the stack pointer won't move, just mov things around, possibly with some offsets. < 1283452080 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :(Oh, and the lodsq fake-"pop" can only pop into rax.) < 1283452117 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :True, it's just moving. < 1283452132 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :(On something like ARM, all your stack pointers would be general-purpose registers and you'd have pre/post-increment/decrement addressing with any register you want.) < 1283452201 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :(And on a more austere RISC, you'd just have load/store and separate add/sub, and no nonsense about one-register-only pushing.) < 1283452357 0 :Phantom_Brodrost!unknown@unknown.invalid QUIT :Ping timeout: 265 seconds < 1283452487 0 :choochter!unknown@unknown.invalid QUIT :Ping timeout: 258 seconds < 1283452574 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Gads, x86 instructions are ridiculous. XLATB: does "mov al, [rbx+al]" (hypothetical, since you could normally only [rbx+rax], but anyway) -- "This instruction is often used to translate data from one format (such as ASCII) to another (such as EBCDIC)." Yeah, I do asm-optimized ascii-ebcdic translation all the time. (I wonder if gcc can generate xlat for "unsigned char x, i, *p; x = p[i];" sort of code.) < 1283452665 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :xD < 1283452776 0 :Phantom_Brodrost!~phantomho@cpc3-sgyl29-2-0-cust326.sgyl.cable.virginmedia.com JOIN :#esoteric < 1283452809 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Anyway, guesstimating performance with a speculative-execution register-renaming superscalar thing is probably something that makes any statemets very context-sensitive ("if you have A, B, C and D, option 1 will be faster; ..."). I couldn't find out late numbers, but apparently already the P4 had 128 general-purpose registers it could use for register-renaming, and my guess is that a reg-reg xchg would be done by that machinery. < 1283452912 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Silly name for a Lisp: Lips < 1283452967 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Lots of punny names possible for related paraphernalia, I guess. < 1283452992 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Ooh, or Slip. < 1283453062 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Does anyone know if there are any well-written single-file bignum things? < 1283453066 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :GMP is just a bit too big for me to be happy < 1283453068 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :*happy. < 1283453186 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :I have the worst bignum implementation ever. but it's single-file! (I got sidetracked on a C programming course "calculate character histogram" home exercise, and wrote one with a bignum lib and multibyte character support.) < 1283453219 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :What license? :-P < 1283453242 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :I'm trying to find it, but you really don't want to use it. :p < 1283453252 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :fizzie: No, but I might want to modify it and use it. < 1283453261 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Hmm, maybe I can store every number just as a pair of bignums and call it a rational. < 1283453272 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :(That is, a not-necessarily-reduced rational.) < 1283453278 0 :derdon!~quassel@p5B3E5BA7.dip.t-dialin.net JOIN :#esoteric < 1283453355 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :I'm not so sure you even want to use that as a base; it's pretty simple to make a integer bignum thing which uses an array of unsigned ints as the storage format. < 1283453370 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :I can't recall what the course code was, or what year I did it. < 1283453447 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Someone's eaten my bignums. < 1283453464 0 :Phantom_Brodrost!unknown@unknown.invalid PRIVMSG #esoteric :All of them? < 1283453477 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :fizzie: But exponentation and the like! < 1283453480 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :*exponentiation < 1283453494 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Is... impossible! Or, < 1283453496 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :I am lazy! < 1283453508 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Say, I wonder what algorithms people use to approximate sqrt() on rationals. < 1283453526 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Yes, well, I doubt I have any non-trivial algorithms in the file, if I can find it. No FFT-based multiplications for me there. < 1283453543 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Meh. Who needs bignums rihgt now? < 1283453560 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Why do property lists exist? < 1283453583 0 :Phantom_Brodrost!unknown@unknown.invalid PRIVMSG #esoteric :alise, presumably the same algorithms as for naturals. < 1283453597 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Phantom_Brodrost: ...For sqrt()? < 1283453609 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :sqrt(2) = 1! < 1283453641 0 :Phantom_Brodrost!unknown@unknown.invalid PRIVMSG #esoteric :alise, huh? < 1283453656 0 :Phantom_Brodrost!unknown@unknown.invalid PRIVMSG #esoteric :OK, naturals -> rationals. < 1283453658 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Phantom_Brodrost: I'm asking what algorithm people use to calculate approximate_sqrt : Q -> Q. < 1283453701 0 :Phantom_Brodrost!unknown@unknown.invalid PRIVMSG #esoteric :Well, ignoring complexes, approx_sqrt : N → Q on numerator and denominator... < 1283453718 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Indeed. < 1283453723 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :And what of that algorithm? < 1283453798 0 :Phantom_Brodrost!unknown@unknown.invalid PRIVMSG #esoteric :Well, how is it done normally? < 1283453805 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :That is my question! Sheesh. < 1283453813 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :alise, fizzie: re performance of x86 instructions: omg yes, with pipelines and prefetching and the cache hierarchy, you just kind of ... guess. < 1283453875 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Let's see, a symbol is a name and a value. < 1283453878 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Paul Zimmermann, “Karatsuba Square Root”, INRIA Research Report 3805, November 1999, http://hal.inria.fr/docs/00/07/28/54/PDF/RR-3805.pdf < 1283453878 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Hmm. < 1283453887 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :I'm basically writing PicoLisp: The Ripoff here. < 1283453893 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :(It's yet another of those FFT-based algorithms.) < 1283453903 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :fizzie: no thx < 1283453931 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Or maybe not, actually. < 1283453954 0 :Phantom_Brodrost!unknown@unknown.invalid PRIVMSG #esoteric :alise, for nats? < 1283453965 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric : Anyway, guesstimating performance with a speculative-execution register-renaming superscalar thing is probably something that makes any statemets very context-sensitive ("if you have A, B, C and D, option 1 will be faster; ..."). I couldn't find out late numbers, but apparently already the P4 had 128 general-purpose registers it could use for register-renaming, and my guess is that a reg-reg xc < 1283453965 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :hg would be done by that machinery. <-- Hm... And still the AMD64 instruction set doesn't expose nearly as many < 1283453967 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :how sad < 1283453968 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Phantom_Brodrost: Yes. < 1283453969 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :The thing that gets me about optimizing generated machine code in the modern world is, really, how do you *know* your code is faster? A benchmark? Yeah, those're realistic. :/ < 1283453969 0 :Phantom_Brodrost!unknown@unknown.invalid PRIVMSG #esoteric :http://en.wikipedia.org/wiki/Methods_of_computing_square_roots < 1283454027 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, I suspect having 64 out of 128 programmer visible GPR would be a way better trade-off than the small number that x86_64 has < 1283454051 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Oho, that's clever. In PicoLisp, a symbol's address is actually one after its name. < 1283454061 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :(So **sym dereferences it.) < 1283454069 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :(Since the value comes after the name.) < 1283454190 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, hm yes... higher level optimisations are probably more useful in general for a compiler. Still there are some things you can do at that low level. And both AMD and Intel have optimisation guides aimed at compiler writers. < 1283454208 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :There's the very famous and very clever Quake "1/sqrt(x)" approximation, but that's decidedly floating-point: float invsqrt(float x) { float xh = 0.5f * x; int i = *(int*)&x; i = 0x5f3759d5 - (i >> 1); x = *(float*)&i; return x*(1.5f - xhalf*x*x); } < 1283454221 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :It's also a bit on the non-obvious side. < 1283454256 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :fizzie: Yes, I sort of don't want floating point. < 1283454272 0 :choochter!~choochter@host213-1-54-148.btremoteinternet-dsl.bt.net JOIN :#esoteric < 1283454351 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, I think SSEn for some n>=2 has some instruction for inverse of square root < 1283454367 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :err < 1283454376 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :that was mixing up Swedish name for the operation < 1283454378 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :with the English < 1283454464 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :reciprocal is the English word, invers is used in Swedish. < 1283454473 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :inverse square root is also used in English < 1283454478 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :see, e.g. what fizzie just quoted < 1283454481 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :(The Quake code.) < 1283454485 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :RSQRT[PS]S; reciprocal square root packed/scalar single-precision floating-point. < 1283454524 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :SSE dropped the trigonometrics, though; I wonder how they do sin(x) nowadays. < 1283454526 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, yes but inverse makes me think of f⁻¹ < 1283454543 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Then "inverse square root" would be stupid. < 1283454546 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :It being "square". < 1283454551 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, exactly! < 1283454562 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :But that isn't what it is used to mean. < 1283454601 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, well "inverse function" for most other things mean that < 1283454624 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :I don't think anyone actually says "inverse f" for f^-1. < 1283454627 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :f's inverse, maybe. < 1283454627 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, so it is kind of ambiguous < 1283454637 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :does anybody say "inverse cos" :) < 1283454646 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, no you say arccos < 1283454652 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :but only because it has a damn silly name < 1283454672 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :"inverse *of* square root" does sound a bit like ^2 though. < 1283454676 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :arccos sounds pretty hard to pronounce; I'd go with acos. < 1283454684 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :If you're expanding, might as well say "arc cosine". < 1283454684 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, indeed. < 1283454690 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :fizzie: But not inverse square root. < 1283454705 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, arc expands to arcus or something like that iirc < 1283454719 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, so arcus cosine probably? < 1283454819 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Finnish way to read arcsin and arccos out loud is as compound words, "arkussini" and "arkuskosini". < 1283454864 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :So we can store 4 bytes of a name per word on x86, 8 bytes on x86-64. < 1283454864 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :And the Finnish name for reciprocal is again very elegant and beatiful: "käänteisluku". (Lit. "inverse number", compare "käänteisfunktio" -- "inverse function" for the other sort of inverse.) < 1283454867 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, similar for Swedish < 1283454872 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :I wonder how PicoLisp handles longer names. < 1283454883 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, what is a word on x86-64 then? < 1283454886 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :fizzie: Are you being sarcastic? Because Finnish /is/ awesome. < 1283454889 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: 8 bytes. < 1283454896 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, AMD and Intel disagrees < 1283454907 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Yes, well, they're stupid and should die. < 1283454929 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, great, then we would all run ARM, PPC or SPARC I guess < 1283454931 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :excellent idea! < 1283454939 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Sure, I would go for that. < 1283454954 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :sadly PPC is dead < 1283454969 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :and I'm not sure Cell and similar makes such a good general purpose *desktop* CPU < 1283454969 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Gah; is there a variation on Emacs' SERVER-START that doesn't start if there's already a server running? < 1283454976 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :A SERVER-IS-RUNNING-P, or the like. < 1283454979 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :sure, awesome at the stuff it is meant for < 1283454984 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: PPC wouldn't be dead if AMD and Intel were dead. < 1283454998 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Besides, nothing wrong with SPARC. < 1283454999 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, well, true, but it is a bit too late now < 1283455008 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, did I say there was something wrong with SPARC? < 1283455013 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Nope. < 1283455016 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Just saying that we could use SPARC. < 1283455018 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :the register window stuff is cool < 1283455028 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, ALPHA if it wasn't dead < 1283455030 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :There are open-source implementations, too. < 1283455038 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, yeah that is cool < 1283455052 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :ARM's Cortex-A9 does quad-core 2GHz thing; it sounds like it might even be reasonable amount of power in a desktoppy environment. < 1283455079 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :fizzie: Perhaps... < 1283455096 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Apple's (not actually Apple's; I forget who designed it) A4 isn't too shabby either. < 1283455106 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, GHz isn't everything < 1283455113 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :That's 1 GHz and single-core, but still. < 1283455122 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, pipeline? out of order? super scalar? and so on... < 1283455128 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: Smarter code. < 1283455132 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :and efficient ISA of course < 1283455134 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, that too < 1283455143 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: ...is the programmer's job. < 1283455157 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Besides, most CPU power goes unused these days. < 1283455168 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Or worse, wasted. < 1283455186 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, but I mean, a 10 GHz bf CPU would probably be way less efficient than a 2 GHz x86-64 for almost everything < 1283455201 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :But way cooler, too. < 1283455216 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, well yes, but that isn't what most people buying a CPU wants < 1283455226 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Are you absolutely sure about that? < 1283455237 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :It is superscalar, I don't know very much of the other details. ARM's specs page has a DMIPS ("Dhrystone MIPS") performance value, but I don't know how those compare to intels. < 1283455251 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, either that or they define cool definitely than we in this channel do < 1283455264 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :s/definitely/differently/ < 1283455265 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :*differently < 1283455266 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :weird typio < 1283455267 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :typo* < 1283455275 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :fizzie: Let's just compare BogoMIPS! < 1283455288 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Anyway, at 10000 DMIPS and 2 GHz, it consumes a whopping 1.9 watts of power. < 1283455319 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :ByteByteJump is so cool. < 1283455319 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :uint8_t mem[MEMSIZE]; < 1283455320 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :uint32_t *pc = (uint32_t *)mem; < 1283455320 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :for(;;) { < 1283455320 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric : mem[pc[1]] = mem[pc[0]]; < 1283455320 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric : pc = (uint32_t *)(mem + pc[2]); < 1283455322 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :} < 1283455336 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :(Needs memory-mapped IO and a way to halt, but still, sweet.) < 1283455339 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :fizzie: Oh? < 1283455340 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, that is still way less than a P4. Probably way less than a core 2 duo too < 1283455343 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :fizzie: Just slap two of them together then. < 1283455354 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :brain < 1283455363 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :cpressey: brian < 1283455377 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: Really? Are you sure? < 1283455382 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Have you RUN Dhrystone on them? < 1283455386 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, no. It's a guesstimate < 1283455391 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, about those 1.9 W < 1283455397 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Oh, the temperature. < 1283455399 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Well, of course. < 1283455403 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Erm. < 1283455404 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, err not temp. Power usage < 1283455405 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :About the wattage. < 1283455409 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Yes, they're closer to 60-100W. < 1283455438 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: On the other hand, you can't use it to multitask as your sauna stove. < 1283455441 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :"Avoid using brk() and sbrk(): the malloc(3) memory allocation package < 1283455441 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric : is the portable and comfortable way of allocating memory." < 1283455442 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Hmph. < 1283455462 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Core i7 Gulftown models have a TDP of 130W. < 1283455465 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, well. My thinkpad when both cores are fully loaded (with SSE heavy code) uses like 25-27 W iirc. < 1283455467 0 :Wamanuz2!~Wamanuz@78-69-168-43-no84.tbcn.telia.com JOIN :#esoteric < 1283455469 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :fizzie: I meant the reasonable CPUs. :P < 1283455475 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, still quite a bit < 1283455491 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :fizzie: How much does one of those lovely ARMs cost? < 1283455493 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, though that includes stuff like monitor and memory and so on < 1283455498 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, not just the CPU < 1283455501 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :You could have 100 of them and use the same power. :) < 1283455505 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :alise: malloc is "comfortable". < 1283455506 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, when idle it is way less < 1283455509 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :cpressey: yeah XD < 1283455510 0 :kar8nga!~kar8nga@78.104.80.94 JOIN :#esoteric < 1283455512 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, like, 8-9 W < 1283455514 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :fizzie: Actually, isn't there some big ARM computer that consists of a fuckton of them? < 1283455522 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, on half-bright screen < 1283455537 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, still it of course includes more than just CPU, < 1283455538 0 :Wamanuz!unknown@unknown.invalid QUIT :Ping timeout: 276 seconds < 1283455546 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :sbrk() doesn't work well when there's memory in the way, right? < 1283455551 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :i.e. it won't do realloc's move-shop stuff. < 1283455561 0 :Phantom_Brodrost!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, random question: how would you pronounce "#"? < 1283455586 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Phantom_Brodrost: first thing that came to mind today, honestly, was "octalthorpe" < 1283455605 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, sbrk is quite similar in many ways to adding/subtracting a value from the stack pointer. But for the heap < 1283455610 0 :Phantom_Brodrost!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, ...that is what I am going to call it from now on. < 1283455611 0 :BeholdMyGlory!~behold@unaffiliated/beholdmyglory JOIN :#esoteric < 1283455624 0 :Phantom_Brodrost!unknown@unknown.invalid PRIVMSG #esoteric :And octalthorpebang! < 1283455627 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Incidentally, let's check consumer power supplies; last I looked (some years ago) they were hovering in the one kW range, now... "SilverStone Strider ST1500 1500W"; well, 1.5 kW, then. < 1283455627 0 :Phantom_Brodrost!unknown@unknown.invalid PRIVMSG #esoteric :s/d// < 1283455639 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, so it is useless for any memory management on it's own if you will ever free anything except the most recently allocated element < 1283455652 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: I'm maintaining my own heap. < 1283455673 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: modern OSes will do it in virtual memory, yeah, instead of allocating real memory for it? < 1283455681 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, just saying you need to do so with more than sbrk. Or you will get horrible memory fragmentation. < 1283455684 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :fizzie: there are 2 kW ones iirc. < 1283455691 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :fizzie: of course, you rarely need more than 600 W. < 1283455692 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Oh, I'm sure of that. < 1283455693 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, hm? well it is of course backed by virtual memory < 1283455697 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Soon the gamer-class computers will start to come with three-phase electric power connectors. < 1283455713 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: I don't particularly want to write a compacting GC, either, so my options are pretty limited as far as freeing memory goes. < 1283455715 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, XD < 1283455717 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :As in, "it probably won't happen". < 1283455725 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :So I'll just be relying on the OS to manage virtual memory well. < 1283455734 0 :Phantom_Brodrost!unknown@unknown.invalid PRIVMSG #esoteric :Soon the gamer-class computers are going to have the souls of 10 children in them for AI. < 1283455734 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, um. maybe back it by mmap then < 1283455750 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :http://esolangs.org/wiki/BytePusher this is awesome < 1283455757 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: yeah, I'm considering that too < 1283455768 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: although not in the way SBCL does since I want to work when overcommit is off < 1283455772 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :alise: You're writing a PicoLisp, right? You can take the marvelous GC advantage of having all your memory cells be the same size, then. < 1283455781 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :is there a way to increase the size of an mmapping? < 1283455793 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :cpressey: I'm writing Slip, which is like PicoLisp except MINE and BETTER. < 1283455794 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, it won't do anything if your heap looks like (@ = allocated, . = unallocated): @@@...@.@@.@@@@......@@........@.@...@@@....@@...@@ < 1283455797 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Unless there's some variable-length stuff you want to do, of course. I should have said "Lisp". < 1283455810 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :cpressey: Also, I'm not sure it will be. < 1283455819 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, which is what you will get if you only ever use sbrk and then never fill in the freed up holes < 1283455821 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :cpressey: Since what about symbols with names >4 or 8 bytes (depending on 32/64-bit)? < 1283455827 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: Mm. < 1283455833 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :There needs to be a remmap. < 1283455846 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :cpressey: Where do the rest of their names go? I am trying to figure out how PicoLisp does this. < 1283455848 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, there is a mremap. Linux specific. < 1283455858 0 :Phantom_Brodrost!unknown@unknown.invalid PRIVMSG #esoteric :alise, so will you be writing a compiler? < 1283455867 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Phantom_Brodrost: Most likely just an interpreter. < 1283455871 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :"I am lazy and my CPU is fast." < 1283455872 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, while the OS won't actually allocate your pages until you try to access them, it won't automagically unallocate zeroed out pages. < 1283455881 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :alise: I dunno. Maybe they do the ol' BASIC thing where only the first 4 characters of the identifier count :) < 1283455884 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, for most apps the overhead of detecting that wouldn't be worth oit < 1283455885 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :it* < 1283455886 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :I might just use a fixed-size heap. < 1283455889 0 :Phantom_Brodrost!unknown@unknown.invalid PRIVMSG #esoteric :alise, bah! How will we ever get Lisp86 working‽ < 1283455892 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :The Scheme interpreter I wrote for our "let's do SICP one last time" special commemorative Scheme course has a copying, compacting (well, of course, since it's copying) GC, and that's "just" 550 lines of x86-64 asm. (It's also probably incredibly buggy, since I wrote it in the last night or two before the deadline.) < 1283455897 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :cpressey: Die :) < 1283455902 0 :Phantom_Brodrost!unknown@unknown.invalid PRIVMSG #esoteric :We'll have to kidnap someone! < 1283455903 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, why not use libgc? < 1283455912 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, that is the lazy solution < 1283455912 0 :Phantom_Brodrost!unknown@unknown.invalid PRIVMSG #esoteric :How about ESR? < 1283455922 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :fizzie: Copying GCs are so yeargh, though. < 1283455930 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: I'm maintaining my own heap; GCs are like a 30-line thing. < 1283455937 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :I owe it to my users not to use a conservative collector. < 1283455948 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :(My users = me) < 1283455954 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :alise: It's a good choice when you have a deadline measured in hours and are writing manual assembly, though. :p < 1283455958 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Phantom_Brodrost: What the hell could HE do? < 1283455969 0 :Phantom_Brodrost!unknown@unknown.invalid PRIVMSG #esoteric :alise, write code < 1283455974 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Phantom_Brodrost: He can't. < 1283455978 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Phantom_Brodrost: Name a project written by esr. < 1283455980 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :"C-INTERCAL". < 1283455986 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Yes, which ais523 has spent years cleaning up. < 1283455986 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, the way you described your GC so far sounds worse than a conservative gc though. < 1283455989 0 :Phantom_Brodrost!unknown@unknown.invalid PRIVMSG #esoteric :alise, yes, but we like other people! < 1283455993 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :"fetchmail". < 1283455994 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :HAHAHAHAHA < 1283455995 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :HAHAHAHA < 1283455996 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :alise: If you use linked cells to hold long id's (bear with me) then you get fixed-sized cells and that makes GC easy. Need to allocate a new cell? Just take the next one off the free list. Free a cell? Add it to the free list. Free list empty? sbrk(). < 1283455997 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :AHAHAHAHA < 1283455998 0 :Phantom_Brodrost!unknown@unknown.invalid PRIVMSG #esoteric :So we don't want to enslave them! < 1283456002 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :GC snippet of the day: < 1283456002 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: it will be good within the heap < 1283456003 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :.fail: ;; TODO: remove when failure is not an option < 1283456003 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric : mov eax, 0x700f00d < 1283456003 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric : jmp error_sys < 1283456004 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :just not good for the OS < 1283456011 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Failure is NOT AN OPTION < 1283456013 0 :Phantom_Brodrost!unknown@unknown.invalid PRIVMSG #esoteric :THIS IS AN ETHICAL CONUNDRUM < 1283456026 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :cpressey: I can't use linked cells, though, because the CDR already contains a pointer to a cell (the value of the pointer). < 1283456033 0 :Phantom_Brodrost!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, oesnoesdon'tuseintelsyntaxnearVorpal < 1283456041 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :fizzie: UNREADABLE < 1283456043 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :HOW DOES THAT WORK < 1283456048 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :WHERE ARE THE %S < 1283456049 0 :Phantom_Brodrost!unknown@unknown.invalid PRIVMSG #esoteric :He hates it for ill-defined reasons. < 1283456056 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, most programs will not free up resources in the same order they allocated them. So you need to try to reduce fragmentation in some way < 1283456060 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Let's not go into the Intel syntax wars again. < 1283456069 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :It's just that one "mov", anyway. < 1283456079 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :fizzie: I was being sarcastic. < 1283456086 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, using a bunch of pools to keep the objects similar sized in a given area might work < 1283456097 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: Meh. < 1283456100 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: Do you realize that with fixed-size cells, fragmentation is basically a non-problem? < 1283456102 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :I have a lot of memory. < 1283456107 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :And what cpressey said. < 1283456108 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, I think the freebsd malloc uses pools like that < 1283456113 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Hopefully everything will be the same size. < 1283456114 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, ah, he has that? < 1283456118 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :I must have missed that < 1283456128 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :indeed that is like a single pool < 1283456132 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :and it solves it all < 1283456161 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :cpressey: Still not sure how to do symbol names, though. Oh, I know. < 1283456163 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Maybe I can have: < 1283456186 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :('HELL', ptr), ('OWOR', 'LD!\0\0') < 1283456188 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :for HELLOWORLD! < 1283456196 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :i.e., you just keep looking ahead until you get a \0. < 1283456198 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, you still need some way to store allocation metadata. Like a freelist < 1283456203 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :of some sort < 1283456212 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: Well, I'm GCing. So there will be a mark field. < 1283456235 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :I might even do the wonderful multithreaded mark-and-sweep I keep talking about. < 1283456238 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :No more GC delays! < 1283456258 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, just saying scanning for free on allocation would be rather slow < 1283456286 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :maybe having a map of pages containing at least one free spot would work < 1283456287 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: Maybe I could use a bitmask. < 1283456303 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :1101110 means that cells [0], [1], [3], [4] and [5] are available. < 1283456305 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :that way you need to scan only a small chunk < 1283456309 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :hm wait not a bitmask < 1283456309 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :(An array of integers, that is.) < 1283456322 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :rather, keep a count of free cells for each page < 1283456327 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :that makes updating it easier < 1283456331 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: I don't need to worry about pages this way. < 1283456351 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, well, you don't need your blocks to be page-sized. Just seemed a reasonable chunk size < 1283456367 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Eh. Divide by however many bits are in a long, & ...0... it, where the 0 is at the position of the remainder. < 1283456375 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Sounds complicated but really just one or two lines of code to update it. < 1283456390 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :And let's see, if we assume 32-bit we have 4 bytes in each. < 1283456391 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, anyway lets say each chunk start with a bitmask. And you have a global mask of full/non-full pages. Where each page is a bit < 1283456406 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: You can store the freelist inside the cells themselves. In a sense, it's just another Lisp list. < 1283456411 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :So for 4 megabytes, we can store a million cells. < 1283456415 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :4 megabytes of metadata, that is. < 1283456416 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, then after allocating you just test if your bitmask for the page is all 1, and if so set the global table as it < 1283456420 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, that works too < 1283456421 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :A cell is a cons, or a symbol, or whatever. < 1283456425 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Not bad. < 1283456433 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :cpressey: Ah, good idea. < 1283456447 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :So every N cells has a count of how many free cells there are in the next N cells? < 1283456456 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :You do need a mark bit somewhere, though, yes. < 1283456465 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Oh, of course. < 1283456497 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :LSB of the pointer is traditionally a good choice, since cells are two bytes long. You probably know that much... < 1283456512 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :why are cells 2 bytes only? < 1283456523 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :I mean, at least 2 bytes. < 1283456526 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :cpressey: LSB of which pointer? < 1283456527 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :right < 1283456533 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :I mean, at least 2 *addresses*. < 1283456539 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, indeed < 1283456548 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :on x86-64 they would be... 16 bytes each? < 1283456550 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :quite large < 1283456554 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :each cell I mean < 1283456611 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :alise: The tail pointer. If you're storing "improper" lists I can see how that might pose a problem. < 1283456612 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, I seem to remember some lisp(s) did some trick by being able to store lists so that the next element's car was in the previous cdr < 1283456619 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :as a space optimisation < 1283456624 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Ooh, haha: homework exercise 6 of that "course with the bignums in it": "Make a program that reads a file and encrypts/decrypts it into another file. You can invent the encryption algorithm by yourself. If you don't want, you can use this: [description of rot-N, where N is the key, and the description itself even manages to be wrong; it "encrypts" letters A..Z, but does modulo 25 instead of 26.]" < 1283456627 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :setting some control bit to indicate this was being done < 1283456628 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :cpressey: Of course I am. < 1283456647 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: yes < 1283456649 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: cdr coding < 1283456652 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :alise: Then you need to find some other place for it :) < 1283456662 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, going to do that? < 1283456666 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: unlikely < 1283456668 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: it's a bitch < 1283456669 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :right < 1283456677 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, yes it messes up allocation < 1283456680 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :yes < 1283456680 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :and alignment < 1283456682 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :heh. I was just going to say, "cdr coding is a bitch!" < 1283456684 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :(cdr cdr-coded-list) < 1283456695 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Unrolled linked lists are simpler and often higher-performance than CDR coding (no "tagged pointers"; typically less fragmentation). For short lists, CDR coding uses the least amount of space. < 1283456696 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :anyway < 1283456699 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, well messing up allocation is partly a side effect of messing up alignment < 1283456704 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Maybe for serialization it's OK. < 1283456749 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, back when memory was a much more limited resource it probably made sense < 1283456767 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Merf. I should probably implement a lisp at some point. I mean, in something other than another lisp. < 1283456782 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, in befunge! < 1283456798 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Uhhhh not what I was thinking. < 1283456805 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, it would be cool however < 1283456838 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Are there any Befunge interpreters out there that implement GC of the playfield? (implement it, not rely on their implementation langauge for it) < 1283456847 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :cpressey is like Rupert Holmes, unable to escape from his song with Piña Coladas. < 1283456851 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :'Cos FBBI sure as hell doesn't. < 1283456857 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :alise: YES < 1283456867 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, how can you GC the funge-space? < 1283456870 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :alise: Or that other guy, and "Werewolves of London". < 1283456880 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, you can't possibly know if some funge code references it < 1283456883 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :cpressey: Or Chris Pressey, and Befunge! < 1283456884 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Er... < 1283456916 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, or do you mean freeing up memory used by spaces? < 1283456918 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: Uh. If a range of space is empty -- free the memory for it? < 1283456919 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, if so yes < 1283456936 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :cpressey: Do you think that a-bunch-of-adjacent-cells representation for symbol names is a good idea? < 1283456941 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :I'm not so sure. < 1283456956 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, cfunge will free the cell in the hash array backed area if it is set to space < 1283456960 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :alise: Not for GC-friendliness, no. not so much. < 1283456969 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, it does that by returning it to a pool < 1283456973 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :cpressey: True. < 1283456974 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :rather than calling free() < 1283456978 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: cell-by-cell? < 1283456994 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: does it ever call free() on them? < 1283456995 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :I'm reading PicoLisp's source and then making sure to forget the exact code so I don't violate the GPL. < 1283457002 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, well it allocates the hash cells from some internal pools. It just returns those to it < 1283457021 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, and no it doesn't free up pools if an entire pool would ever become empty < 1283457028 0 :mr45!unknown@unknown.invalid QUIT :Ping timeout: 276 seconds < 1283457043 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: So if I have a Befunge program which p's a # into (0,0), then erases it and p's # into (0,1), etc, etc, will cfunge eventually run out of memory? From what you say it sounds like the answer is "yes". < 1283457044 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, still, many programs fit neatly inside the static backed area around 0,0 < 1283457056 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, no it won't < 1283457071 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, because it will put the freed up hash entry into the free list < 1283457079 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, and it will use that before allocating new pools :P < 1283457084 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :#undef bool < 1283457084 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :typedef enum {NO,YES} bool; < 1283457087 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :-- PicoLisp < 1283457102 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :typedef struct cell { // PicoLisp primary data type < 1283457103 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric : struct cell *car; < 1283457103 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric : struct cell *cdr; < 1283457103 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :} cell, *any; < 1283457103 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Huh. < 1283457104 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: k. < 1283457110 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :So it really is just two bytes. < 1283457111 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :How does that work? < 1283457122 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: But if you make a Befunge program that uses four gigabytes of space for a while, then erases almost everything, you won't return the uselessly allocated gigabytes to the system, right? < 1283457131 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :ACTION looks at their GC < 1283457152 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric : *(word*)&cdr(p) &= ~1; < 1283457188 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, here: < 1283457189 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :typedef union memory_block { < 1283457189 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric : struct s_fspace_hash_entry data; < 1283457189 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric : union memory_block *next_free; < 1283457189 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :} memory_block; < 1283457193 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :cpressey: I am not sure that makes sense. < 1283457200 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :cpressey: Although, wait. < 1283457206 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :cpressey: It does if you just use 31-bit integers. < 1283457212 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, chunks of those are used. And a free list < 1283457229 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :typedef struct heap { < 1283457229 0 :choochter!unknown@unknown.invalid QUIT :Ping timeout: 265 seconds < 1283457229 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric : cell cells[CELLS]; < 1283457229 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric : struct heap *next; < 1283457229 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :} heap; < 1283457230 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric : Vorpal: But if you make a Befunge program that uses four gigabytes of space for a while, then erases almost everything, you won't return the uselessly allocated gigabytes to the system, right? <-- no, but I have yet to see such a program in practise < 1283457230 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Interesting. < 1283457247 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, in practise here means "not specifically made as a benchmark" < 1283457258 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :There are no Befunge programs in practice. < 1283457263 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Apart from fungot. < 1283457263 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :^source < 1283457264 0 :fungot!unknown@unknown.invalid PRIVMSG #esoteric :alise: those who did see it a workman, a servant, and the moon is above and the clouds of the sky and fnord itself in the birth of my grandmother and fnord uncle might be sheer fancy on my part proposed, for his eyes were irresistibly drawn. and then my fancy reverted to the locale as i reflected that the excitant folklore was undoubtedly more universal in the past. < 1283457264 0 :fungot!unknown@unknown.invalid PRIVMSG #esoteric :http://git.zem.fi/fungot/blob/HEAD:/fungot.b98 < 1283457268 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Apart from fungot. < 1283457268 0 :fungot!unknown@unknown.invalid PRIVMSG #esoteric :alise: sometimes heard today, fnord by extensive scientific interests and aided by large numbers of fishing boats from gloucester, made a thorough and really significant digest. average people < 1283457268 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :I said. < 1283457279 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, same second < 1283457281 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :*shrug* < 1283457328 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :^style < 1283457329 0 :fungot!unknown@unknown.invalid PRIVMSG #esoteric :Available: agora alice c64 ct darwin discworld europarl ff7 fisher ic irc jargon lovecraft* nethack pa speeches ss wp youtube < 1283457331 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :ah < 1283457338 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: fungot in some sense; it would be "nice" if when an evil IRC user makes a space-wasting Underload program, it'd return the wasted space to the system after the program's been finished. (Not that it's a problem in practice, since there's a size limit for the Underload stack.) < 1283457339 0 :fungot!unknown@unknown.invalid PRIVMSG #esoteric :fizzie: the lovecraft library wishes to extend its gratitude to eulogio garca recalde for transcribing this text. he had to fnord had to get me in a thin envelope of fnord metal. he had counted about thirty when a sound reached him very fnord and < 1283457357 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, yeah and probably some user will do it again < 1283457365 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, and then it will already have it allocated < 1283457366 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, :P < 1283457395 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, anyway it is tricky, since the used cells might be spread out < 1283457398 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :over the blocks < 1283457415 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, in fact, I would say it is rather likely < 1283457452 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Yes, though if you allocate in pages, you could opportunistically free pages that contain only free'd pointers, if ever such occur. (It'd be a bit annoying to go through the free-list removing those, though.) < 1283457470 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :6824k VSZ, 5328k resident; it's not a very memory-intensive process there. < 1283457478 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, yes, and checking for that condition would incur some overhead < 1283457493 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, which for the majority of the cases would be non-useful < 1283457520 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :^ul (foo)(~:*~:^):^ < 1283457520 0 :fungot!unknown@unknown.invalid PRIVMSG #esoteric : ...too much stack! < 1283457523 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, anyway, let me check how much I allocate at once < 1283457524 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :For something even smaller, download miniPicoLisp.tgz. It is a minimal version, without support for databases, UTF-8, bignums, IPC, networking and other system-dependent functions. A kind of "pure" PicoLisp (not "pure Lisp"!). It supports the full PicoLisp language, but runs faster, and uses even less memory space. It should also not be restricted to Unix. In addition, it compiles and runs also on 64-bit systems. < 1283457528 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Sweet < 1283457541 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :7952k virtual, 6408k resident now. < 1283457566 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :#define WORD ((int)sizeof(long)) < 1283457566 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :#define BITS (8*WORD) < 1283457568 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :I... what? < 1283457570 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Oh, I see. < 1283457573 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :(I can't recall my underload stack limits.) < 1283457589 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Ooh, not using CHAR_BIT, how dreary! < 1283457597 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, more than a page at a time I think < 1283457620 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :A conceptual "page", anyway; a biggish blob. < 1283457658 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :(I wasn't expecting you to sysconf(_SC_PAGESIZE) the allocation size.) < 1283457682 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :lulz CHAR_BIT. < 1283457724 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, I think each hash entry is 4*8 bytes or something like that (x,y,value,next-in-same-bucket) < 1283457729 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, possibly a bit more < 1283457749 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :#define val(x) ((x)->car) ;; huh < 1283457752 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :each chunck is 4096 hash entries < 1283457756 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, so yeah more than a page < 1283457776 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :#define EVAL(x) (isNum(x)? x : isSym(x)? val(x) : evList(x)) < 1283457777 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :haha < 1283457817 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, that is of course assuming a 64-bit funge < 1283457821 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :cpressey: ping < 1283457826 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, x,y,value would be smaller otherwise < 1283457855 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :while next-in-same-bucket would depend on pointer size < 1283457875 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, where is that code from? < 1283457883 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal: miniPicoLisp < 1283457894 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, that's an absurd name < 1283457903 0 :alise!unknown@unknown.invalid PRIVMSG #esoteric :it's a smaller version of PicoLisp. :P < 1283457913 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, yeah but pico already implies it is small... < 1283457923 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :alise, it should be FemtoLisp or something < 1283457988 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Speaking of which, CHAR_BIT is indeed 8 in the TI C64xx. I guess they fake byte-addressing, then, since the hardware is definitely unable to do it. (Though it admittedly does use byte-indexed pointers, so that for all pointer values the LSB is 0.) < 1283458007 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Maybe there was in fact some special unaligned-read op in there. < 1283458237 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Oh, yes, LDNW/LDB and such. (Whose idea it was to make the instruction set reference PDF not include the actual instructions in the PDF table-of-contents metadata? There's just chapter 3.11, "Instruction Descriptions", page 87, and the next thing in the TOC is chapter 4, "Pipeline", page 509.) < 1283458404 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :(There's also lots of hyperlinks, but no single instruction index. There's six separate "list of instructions executing in the [foo] functional unit" lists (with links to descriptions), but between each list there's ten pages of opcode encoding tables. It's like it's designed to be as difficult as possible to look up opcodes by name.) < 1283458464 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :(I'm wondering if TI's expensive and sucky -- well, it *was* sucky last I saw it -- IDE has some sort of instruction lookup feature, and therefore they've left it out of these freely downloadable PDFs, so that it's not competing with the IDE docs.) < 1283459782 0 :Phantom_Brodrost!unknown@unknown.invalid QUIT :Ping timeout: 245 seconds < 1283459903 0 :Phantom_Brodrost!~phantomho@cpc3-sgyl29-2-0-cust326.sgyl.cable.virginmedia.com JOIN :#esoteric < 1283460220 0 :Behold!~behold@unaffiliated/beholdmyglory JOIN :#esoteric < 1283460323 0 :sshc_!~sshc@unaffiliated/sshc JOIN :#esoteric < 1283460330 0 :iGO!~xk001@62.169.78.110.rev.optimus.pt JOIN :#esoteric < 1283460396 0 :iGO!unknown@unknown.invalid QUIT :Client Quit < 1283460405 0 :iGO!~xk001@62.169.78.110.rev.optimus.pt JOIN :#esoteric < 1283460460 0 :BeholdMyGlory!unknown@unknown.invalid QUIT :Remote host closed the connection < 1283460461 0 :sshc!unknown@unknown.invalid QUIT :Remote host closed the connection < 1283460469 0 :cheater-!unknown@unknown.invalid QUIT :Excess Flood < 1283460477 0 :Quadrescence!unknown@unknown.invalid QUIT :Ping timeout: 265 seconds < 1283460481 0 :Behold!unknown@unknown.invalid NICK :BeholdMyGlory < 1283460506 0 :cheater-!~cheater@p5B216A8E.dip.t-dialin.net JOIN :#esoteric < 1283460602 0 :iGO!unknown@unknown.invalid QUIT :Client Quit < 1283460631 0 :iGO!~xk001@62.169.78.110.rev.optimus.pt JOIN :#esoteric < 1283461258 0 :Phantom_Brodrost!unknown@unknown.invalid PRIVMSG #esoteric :iGO, you do indeed. < 1283461280 0 :Quadrescence!~Quad@unaffiliated/quadrescence JOIN :#esoteric < 1283461465 0 :iGO!unknown@unknown.invalid PRIVMSG #esoteric :xD < 1283462234 0 :augur!unknown@unknown.invalid QUIT :Ping timeout: 264 seconds < 1283463581 0 :Phantom_Brodrost!unknown@unknown.invalid NICK :Vonlebio < 1283463680 0 :MigoMipo!unknown@unknown.invalid QUIT :Read error: Connection reset by peer < 1283463937 0 :tombom!tombom@wikipedia/Tombomp JOIN :#esoteric < 1283463941 0 :tombom!unknown@unknown.invalid QUIT :Read error: Connection reset by peer < 1283463967 0 :augur!~augur@129-2-175-79.wireless.umd.edu JOIN :#esoteric < 1283464007 0 :Mathnerd314!unknown@unknown.invalid QUIT :Ping timeout: 245 seconds < 1283464204 0 :Phantom_Hoover_!~phantomho@cpc3-sgyl29-2-0-cust326.sgyl.cable.virginmedia.com JOIN :#esoteric < 1283464218 0 :Vonlebio!unknown@unknown.invalid QUIT :Ping timeout: 265 seconds < 1283464220 0 :derdon!unknown@unknown.invalid QUIT :Ping timeout: 240 seconds < 1283464430 0 :iGO!unknown@unknown.invalid QUIT :Quit: Leaving < 1283464697 0 :Mathnerd314!~mathnerd3@128.198.97.198 JOIN :#esoteric < 1283465079 0 :olsner!unknown@unknown.invalid QUIT :Quit: Leaving < 1283465409 0 :augur!unknown@unknown.invalid QUIT :Ping timeout: 240 seconds < 1283465716 0 :olsner!~salparot@c83-252-161-133.bredband.comhem.se JOIN :#esoteric < 1283466006 0 :kar8nga!unknown@unknown.invalid QUIT :Remote host closed the connection < 1283466219 0 :Phantom_Hoover_!unknown@unknown.invalid QUIT :Ping timeout: 265 seconds < 1283466424 0 :Phantom_Hoover_!~phantomho@cpc3-sgyl29-2-0-cust326.sgyl.cable.virginmedia.com JOIN :#esoteric < 1283466753 0 :zzo38!~zzo38@h24-207-49-17.dlt.dccnet.com JOIN :#esoteric < 1283466863 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :Maybe I should allow Enhanced CWEB to ignore a shebang line at the top of a file, so that it can be used on Hackiki < 1283466978 0 :Phantom_Hoover_!unknown@unknown.invalid PRIVMSG #esoteric :Maybe. < 1283467013 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :Do you think it is good idea? < 1283467051 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :You should make a Hackiki on the esolang, such as /hackiki/ directory instead of /wiki/ to tell differerence < 1283467070 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :And also allow Hackiki files and MediaWiki files to be able to read each-other (but not write) < 1283467079 0 :Phantom_Hoover_!unknown@unknown.invalid PRIVMSG #esoteric :ACTION ponders whether we could create a BANCStar-oid. < 1283467105 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :And put a field in the MediaWiki account to associate them with a OpenID, to be used with Hackiki. < 1283467118 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :Phantom_Hoover_: I was thinking about the same idea in the past. < 1283467140 0 :Phantom_Hoover_!unknown@unknown.invalid PRIVMSG #esoteric :Well... it would need UI capabilities, to keep to BANCStar's spirit. < 1283467300 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :Phantom_Hoover_: Yes I think you might be correct, and you would do it in the strange way that BANCStar does it. < 1283467316 0 :Phantom_Hoover_!unknown@unknown.invalid PRIVMSG #esoteric :Well, we don't *know* the strange way BANCStar did it. < 1283467342 0 :Phantom_Hoover_!unknown@unknown.invalid PRIVMSG #esoteric :We know the syntax and about 5 conditional instructions. < 1283467470 0 :Phantom_Hoover_!unknown@unknown.invalid PRIVMSG #esoteric :Oh, and the scoping rules. < 1283467538 0 :oerjan!~oerjan@hagbart.nvg.ntnu.no JOIN :#esoteric < 1283467546 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :Phantom_Hoover_, BANCStar-oid. <-- it had oids? < 1283467557 0 :Phantom_Hoover_!unknown@unknown.invalid PRIVMSG #esoteric :It did not, but we should make one. < 1283467576 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :Phantom_Hoover_, do you mean oids as in SNMP? < 1283467609 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :So just guess and see if the example program is sensible in the way that you guessed. < 1283467616 0 :Phantom_Hoover_!unknown@unknown.invalid PRIVMSG #esoteric :No, I mean as in something similar enough that you could confuse them without close inspection. < 1283467649 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :Phantom_Hoover_, why oids though? There are a lot of other stuff you could think of putting in a bankstar context < 1283467654 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :Phantom_Hoover_, so why oids < 1283467679 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :If it is done in a way that the example program is still a sensible program (even if it does not do the same thing as before), then it can be confuse them even with close inspection. < 1283467694 0 :Phantom_Hoover_!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal, "-oid"? Prefix I use to indicate close similarity, per the English prefix? < 1283467707 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :*suffix < 1283467707 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :Phantom_Hoover_, oh < 1283467729 0 :Phantom_Hoover_!unknown@unknown.invalid PRIVMSG #esoteric :oerjan, I always get them confused. < 1283467738 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :Phantom_Hoover_, to me oid = http://en.wikipedia.org/wiki/Object_identifier < 1283467745 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :Phantom_Hoover_, thus the confusion < 1283467759 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :oic < 1283467764 0 :Phantom_Hoover_!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal, too much SE, obviously. < 1283467769 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :oerjan, that pun was so terrible < 1283467773 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :Phantom_Hoover_, SE? < 1283467774 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :thank you :D < 1283467794 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :oerjan, btw what does the c stand for? care? < 1283467799 0 :Phantom_Hoover_!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal, Software Engineering? < 1283467802 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :Phantom_Hoover_, ah < 1283467826 0 :Phantom_Hoover_!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal, see. < 1283467826 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :Phantom_Hoover_, well SNMP is to me the very epitome of excessive software engineering! < 1283467841 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :Phantom_Hoover_, should be ois :/ < 1283467849 0 :Phantom_Hoover_!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal, it's phonetic. < 1283467856 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :Phantom_Hoover_, yeah, I don't like that < 1283467870 0 :FireFly!unknown@unknown.invalid QUIT :Quit: swatted to death < 1283467904 0 :Phantom_Hoover_!unknown@unknown.invalid PRIVMSG #esoteric :Vorpal, the whole acronym is phonetic that way, which is rather neat. < 1283467906 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :Phantom_Hoover_, OIDs are used in X.509 certs too < 1283467914 0 :Vorpal!unknown@unknown.invalid PRIVMSG #esoteric :again too much software engineering < 1283468043 0 :Phantom_Hoover_!unknown@unknown.invalid PRIVMSG #esoteric :So anyway, http://reocities.com/ResearchTriangle/station/2266/tarpit/bancstar.html is the sum total of all accessible information on BANCStar. < 1283468218 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :I made a backup of that HTML page. < 1283468358 0 :Phantom_Hoover_!unknown@unknown.invalid PRIVMSG #esoteric :If there was any consistency in the instructions, that would help... < 1283468380 0 :Phantom_Hoover_!unknown@unknown.invalid PRIVMSG #esoteric :3001,,, and 3001,lots of numbers? < 1283468394 0 :Phantom_Hoover_!unknown@unknown.invalid PRIVMSG #esoteric :So is it variadic or what? < 1283468479 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :3001 is a block conditional, so maybe 3001,,, is the end of the block < 1283468508 0 :Phantom_Hoover_!unknown@unknown.invalid PRIVMSG #esoteric :Genius! < 1283468519 0 :Phantom_Hoover_!unknown@unknown.invalid PRIVMSG #esoteric :But what are the other 4 numbers for? < 1283468554 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :Ther are only 3 other numbers? < 1283468564 0 :Phantom_Hoover_!unknown@unknown.invalid PRIVMSG #esoteric :There are! < 1283468590 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :Maybe there is the number of the constant/variable, the number indicating the comparison type, and the value to compare it with < 1283468618 0 :Phantom_Hoover_!unknown@unknown.invalid PRIVMSG #esoteric :Ah, yes. < 1283468641 0 :Phantom_Hoover_!unknown@unknown.invalid PRIVMSG #esoteric :ACTION keeps viewing this from too much of an assembly perspective < 1283468754 0 :Phantom_Hoover_!unknown@unknown.invalid PRIVMSG #esoteric :ACTION → sleep < 1283468822 0 :Phantom_Hoover_!unknown@unknown.invalid QUIT :Quit: Leaving < 1283469219 0 :BeholdMyGlory!unknown@unknown.invalid QUIT :Remote host closed the connection < 1283469277 0 :alise!unknown@unknown.invalid QUIT :Ping timeout: 258 seconds < 1283470288 0 :Mathnerd314!unknown@unknown.invalid QUIT :Ping timeout: 276 seconds < 1283470493 0 :Mathnerd314!~mathnerd3@128.198.97.15 JOIN :#esoteric < 1283471959 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :http://sprunge.us/BCVI