00:03:02 -!- sebbu has quit ("@+").
00:14:56 <jayCampbell> unfortunately there was only one vehicle to escort voters to the polls
00:52:23 -!- Corun has joined.
00:52:28 -!- ab5tract_ has joined.
00:54:36 -!- ab5tract_ has quit (Client Quit).
01:13:42 -!- GregorR has set topic: 270 electoral votes to win. OBAMA 77 ----- MCCAIN 34.
01:13:49 -!- Asztal has quit ("@").
01:29:26 -!- GregorR has set topic: 270 electoral votes to win. OBAMA 81 ----- MCCAIN 34.
01:38:28 -!- lament has set topic: 270 electoral votes to win. PALIN 81 ----- MCCAIN 34.
01:41:50 -!- GregorR has set topic: 270 electoral votes to win. OBAMA 102 ----- MCCAIN 34.
01:59:03 <ehird> heh. hi GregorR /lament
02:01:21 -!- GregorR has set topic: 270 electoral votes to win. CNN says: OBAMA 102 ----- MCCAIN 43.
02:02:13 <ehird> usa elections amirite
02:03:12 <GregorR> Some of us are Americans :P
02:04:08 -!- GregorR has set topic: 270 electoral votes to win. CNN says: OBAMA 174 ----- MCCAIN 49.
02:06:34 <pikhq> I didn't vote, but for one simple reason...
02:06:45 <pikhq> My absentee ballot came in just in time to mock me.
02:06:57 <pikhq> "Haha, you won't get me in on time!"
02:14:25 -!- GregorR has set topic: 270 electoral votes to win. CNN says: OBAMA 174 ----- MCCAIN 64.
02:22:18 <ehird> pikhq: DID YOU VOTE FOR GregorR
02:23:58 <ehird> AND LOST THE ELECTION :( (nah)
02:24:03 <Slereah> It's going to be so awesome
02:24:44 <Slereah> http://mfrost.typepad.com/cute_overload/images/2008/11/04/herrings_all_the_way.jpg
02:26:14 -!- GregorR has set topic: 270 electoral votes to win. CNN says: OBAMA 174 ----- MCCAIN 69.
02:37:46 -!- GregorR has set topic: 270 electoral votes to win. CNN says: OBAMA 194 ----- MCCAIN 69.
02:41:24 -!- GregorR has set topic: 270 electoral votes to win. CNN/Google: OBAMA 194/175 ----- MCCAIN 69/61.
02:46:16 <ehird> http://news.bbc.co.uk/2/hi/americas/us_elections_2008/7697829.stm
02:46:22 <ehird> it's the bbc, the bbc are cool
02:46:55 <Slereah> The BBC is a pretty cool guy
02:49:44 <ehird> c'mon obama, just win, kthx
02:49:48 -!- GregorR has set topic: 270 electoral votes to win. CNN/Google: OBAMA 199/195 ----- MCCAIN 78/70.
02:51:02 -!- Slereah has set topic: 270 electoral votes to win. CNN/Google: SHRIMP 199/195 ----- HERRING 78/70.
02:51:22 -!- Asztal has joined.
02:51:52 <Slereah> I love how the BBC has a color for 3rd parties
02:52:02 -!- lament has set topic: 270 erectoral votes to win. CNN/Google: SHRIMP 199/195 ----- HERRING 78/70.
02:52:03 <Slereah> Like a third party is ever going to have anything anywhere
02:52:19 -!- ehird has set topic: 270 erections required to win..
02:53:02 -!- lament has set topic: 270 erections required to win. CNN 199/195 ----- GOOGLE 78/70.
02:58:53 <lament> yes, huge erections in america
02:59:02 <lament> seems like CNN is winning
02:59:27 <Slereah> Don't blame me, I voted for Rick Astley
03:07:04 <psygnisfive> http://fora.tv/2008/02/19/Neil_DeGrasse_Tyson_Death_by_Black_Hole
03:07:09 -!- GregorR has set topic: 270 electoral votes to win. CNN/Google: OBAMA 207/202 ----- MCCAIN 89/75.
03:21:48 -!- GregorR has set topic: 270 electoral votes to win. Everyone agrees that Obama has at LEAST 200 (even FOX!), and there are 73 freebies for Obama on the west coast. In short: OBAMA WINS!.
03:22:18 -!- Corun has quit ("This computer has gone to sleep").
04:20:15 -!- ehird has set topic: Obama won..
04:20:19 -!- ehird has set topic: Obama won. Fuck yeah..
04:31:43 -!- pikhq has set topic: McCain's conceded, rather than recount. Fuck yeah. | Obama won. Fuck yeah..
05:00:24 -!- Sgeo has quit (Connection timed out).
06:15:13 <oklopol> i refuse to know what all this commotion was about.
06:16:36 <oklopol> mccain? well i know what a *cane* is. osama was the tower guy. these fuck yeahs are probably just science fiction
07:01:17 <GregorR> http://www.conservapedia.com/Barack_Obama // Hahahaha, this is so over-the-top-libelous it's not so much offensive as surreal :P
07:18:19 <bsmntbombdood> GregorR: what does this mean "which most Christians would not retain."
07:21:20 <Jiminy_Cricket> Most Christians would not keep that as their middle name
07:30:25 -!- KingOfKarlsruhe has joined.
07:36:33 <bsmntbombdood> it sounds like most christians would not retain hussien
07:37:33 <psygnisfive> but that sort of construction is quite common in english.
07:38:35 <Jiminy_Cricket> There's nothign grammatically wrong with the way it is written.
07:41:37 -!- KingOfKarlsruhe has quit (Remote closed the connection).
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
10:11:22 -!- lifthrasiir has quit ("leaving").
10:11:47 -!- lifthrasiir has joined.
11:54:45 -!- lifthrasiir has quit (Read error: 104 (Connection reset by peer)).
12:09:18 -!- Slereah has quit (Read error: 110 (Connection timed out)).
12:41:07 -!- lifthrasiir has joined.
12:58:32 -!- KingOfKarlsruhe has joined.
12:58:53 -!- KingOfKarlsruhe has quit (Client Quit).
12:58:59 -!- KingOfKarlsruhe has joined.
13:03:37 -!- Corun has joined.
13:28:00 -!- ais523_ has joined.
13:37:28 -!- KingOfKarlsruhe has quit (Remote closed the connection).
13:39:25 -!- psygnisfive has quit (kornbluth.freenode.net irc.freenode.net).
13:39:26 -!- Jiminy_Cricket has quit (kornbluth.freenode.net irc.freenode.net).
13:39:47 -!- psygnisfive has joined.
13:39:47 -!- Jiminy_Cricket has joined.
13:56:13 -!- ais523_ has quit ("http://www.mibbit.com ajax IRC Client").
14:00:36 -!- Corun has quit ("This computer has gone to sleep").
14:32:09 -!- Judofyr has joined.
14:32:15 <ehird> lol that conservapedia article
14:51:30 -!- ehird has set topic: Obama won. Fuck yeah. | But Prop 8 passed. lol@usa.
14:58:51 -!- jix has joined.
14:59:44 <oklopol> i see, and passing would be which way exactly?
15:00:43 <ehird> oklopol: a while back (ages ago), california allowed gay marraige
15:00:49 <ehird> prop 8 has passed, and it's reversing that
15:00:56 <ehird> http://www.kcra.com/california-proposition-8/index.html
15:01:38 <oklopol> lol@usa kinda gave away they removed gays and not the other way
15:02:01 <oklopol> but as i didn't remember they existed in the first place
15:19:42 <ehird> ITT: UK government surveillence reaches the internet http://www.telegraph.co.uk/news/uknews/3384743/Internet-black-boxes-to-record-every-email-and-website-visit.html
15:34:58 -!- Judofyr_ has joined.
15:51:27 -!- Judofyr has quit (Read error: 110 (Connection timed out)).
15:51:45 * ehird was awake at 5am yesterday x_x
15:52:59 <oklopol> my sleep cycle is pretty normal nowadays :<
15:58:49 -!- sebbu has joined.
16:39:09 <ehird> so im wholesale ripping off jayCampbell
16:39:14 <ehird> and writing a brainfuck-program-generator
16:39:24 <ehird> think i could breed programs to hello world?
16:39:41 <ais523> that was managed for Malbolge once, BF seems like it would be easier
16:40:23 <ehird> i'll just generate random programs for now
16:40:28 <ehird> I think I could rip the interpreter out of bff.c
16:40:34 <ehird> although then I'd have to code t he generator in c
16:40:38 <ehird> it'd be nice and fast but ..
16:50:54 -!- oerjan has joined.
16:52:12 -!- Judofyr_ has quit (Remote closed the connection).
16:52:49 -!- Judofyr has joined.
16:54:57 -!- KingOfKarlsruhe has joined.
17:11:18 <oerjan> Californians will burn in hell for passing Prop 8. This will be nicely ironic.
17:12:35 <ehird> oerjan, using capitals?
17:12:53 <ehird> psygnisfive: whaddya mean what
17:13:13 <ehird> 'cause prop 8 is evil, presumably
17:13:54 <ehird> i don't see how you can not see what he's talking about?
17:14:01 <oerjan> ehird: tongue too much in cheek, affects capitalization
17:14:01 <ehird> it's plain, simple english... do you have troubles with it?
17:14:10 <ehird> oerjan: you might wanna get that checked out
17:14:26 <oerjan> psygnisfive: the irony is the theory that God vehemently disagrees with fundamentalist Christians
17:14:46 <oerjan> but _still_ burns people in hell
17:30:01 <ehird> http://www.flickr.com/photos/ajohnhart/sets/72157608561494488/ creepy
17:34:54 <oerjan> barack obama, now as grey goo
17:36:45 <oerjan> there was an old meaning?
17:38:59 <ehird> http://colony14.net/id53.html
17:39:04 <ehird> "November 4 is getting close, and unless something dramatic happens it looks like Barack Hussein (“I am not a Kenyan”) Obama, Jr. (alias Barry “I am not an Indonesian” Soetoro) will become the next President of the United States."
17:39:26 <jayCampbell> is that any worse than being mindlessly american?
17:39:39 <ehird> barack hussein i am not a kenyan obama, jr.
17:39:44 <ehird> barry i am not an indonesian soetoro
17:40:05 <ais523> incidentally, anyone else here noticed that Obama seems to use British English not American English?
17:40:34 <pikhq> ais523: Is that such a *bad* thing?
17:40:44 <ehird> ais523: he seems to give off more of a british vibe than american, for some reason
17:40:49 <ehird> (The reason is that he's a communist terrorist.)
17:40:56 <ais523> psygnisfive: he said "autumn" rather than "fall" referring to the season in his victory speech
17:41:35 <psygnisfive> while british english exclusively uses autumn, and fall isnt even acceptable
17:41:40 <ais523> also he doesn't have much of an american accent
17:41:41 <ehird> FALL IS UnACCEPTABLE
17:42:04 -!- Corun has joined.
17:45:39 <oerjan> http://www.irregularwebcomic.net/cgi-bin/poll.pl?a=7
17:47:35 <oerjan> while i voted for Obama, i do agree the Allosaurus was probably the second best in that election
17:47:57 -!- ehird has set topic: Ron Paul won. Fuck yeah..
17:48:21 <ehird> see the internet is always right
17:48:48 <oerjan> ehird: is that a quote of something?
17:49:04 <ehird> oerjan: what, ron paul?
17:49:24 <ehird> oerjan: ron paul was the official presidential candidate of the annoying internet for the longest time
17:49:32 <ehird> especially reddit&digg
17:49:43 <ehird> no, i put that there when obama won
17:50:51 <oerjan> that needs to be an acronym
17:50:59 <ehird> doesn't trip off the tounge
17:52:02 <psygnisfive> "Looking ahead to 2010, House and Senate Democrats will be jealously eyeing Obama’s e-mail lists and technology secrets"
17:52:14 <psygnisfive> obama apparently operates a high tech research facility
17:53:19 <oerjan> i should imagine the republicans would be eyeing them even more jealously
17:54:18 <psygnisfive> http://daringfireball.net/2008/11/the_fantastic_monument
17:54:27 <ehird> psygnisfive: yeah 'cause mccain supporters are way more rational
17:54:31 <oerjan> i'm sure they would love to use his funding method
17:55:11 <ehird> psygnisfive: there's nothing that inherently makes obama/mccain supporters irrational, although mccain supporters have a better chance due to the candidate they support...
17:55:20 <ehird> i think it's just a case of that most people are pretty stupid
17:55:48 <psygnisfive> im just tired of hearing people pour their hopes and dreams into this one person
17:56:09 <ehird> give them some slack, they've had bush for 8 years
17:56:57 <psygnisfive> I VOTED FOR OBAMA BECAUSE OBAMA IS FOR CHANGE
17:57:08 <psygnisfive> and when i asked him what sort of change he was like
17:57:42 <oklopol> i just ask python who to vote, it knows every time
17:57:52 <ehird> oklopol: who did it say
17:58:04 -!- ehird has left (?).
17:58:14 <oklopol> i doubt you care much about the elections i've voted in
17:58:14 -!- ehird has joined.
17:58:21 -!- ehird has left (?).
17:58:47 -!- ehird has joined.
17:59:03 <oklopol> i doubt you care much about the elections i've voted in
17:59:41 <ehird> oklopol: run it on the us election
18:01:09 <psygnisfive> we should add more stuff to the competition
18:05:39 <ehird> oklopol: what algorithm
18:05:54 <ehird> oklopol: i was hoping you'd have an awesomely okoy algorithm to do it
18:06:04 <oklopol> i'm aiming for that @ next election
18:06:21 <oklopol> it's just i decided this is my way to vote like one day before the election i voted in.
18:09:13 <oerjan> random voting seems a little weak. what you want for true chaos is something like geohashing for politics. then many people will vote the same way, but randomly.
18:10:15 <oerjan> that will _really_ screw up the predictions
18:24:50 -!- olsner has joined.
18:31:44 <ehird> no, but i sould be
18:32:17 <AnMaster> ehird, I have been trying to find out how to get length of an unicode string in python, in chars not bytes, for about half an hour without luck
18:32:24 <AnMaster> and since I know you are good at python
18:32:44 <ehird> len(x) = length of x, for any x where that makes sense
18:32:51 <ehird> calls "magic method" x.__len__()
18:33:40 <AnMaster> ah yes I did look at the unicode and string class docs without luck. thanks a lot
18:35:52 -!- asiekierka has joined.
18:36:32 <asiekierka> Well, what can a Polish foreigner say about the US election.
18:36:54 <asiekierka> Someguy won, that's fine, Someotherguy lost, that's fine, BUT WHAT ISN'T FINE IS...
18:37:09 <asiekierka> The US election was talked about more here than our Polish election!
18:37:19 <asiekierka> No-one cared about the polish election
18:37:35 <psygnisfive> thats because poland isnt the worlds largest supporter of international terrorism.
18:38:33 <ehird> also because nobody cares about poland
18:38:39 <ehird> wow, i just got an idea that is easy and could work and would be cool
18:39:11 <ehird> psygnisfive: i want to quickly hack up a test of it first to maake sure it might work
18:39:15 <ehird> i shall tell imminently.
18:39:29 <ehird> also asiekierka just dequalified himself
18:39:39 -!- asiekierka has left (?).
18:39:56 -!- asiekierka has joined.
18:40:16 <AnMaster> ehird, what happened to optbot?
18:40:21 <ehird> AnMaster: not here? huh.
18:40:36 <ehird> stupid unstable POS
18:40:45 <ehird> optbot is awesome.
18:40:48 <ehird> everyone loves optbot.
18:41:00 <psygnisfive> not as annoying as SeppBot in #compling but
18:41:01 <ehird> nobody else agrees with you.
18:41:08 <ehird> so tough shit, i'm restarting it
18:41:21 <ehird> thank you asiekierka.
18:41:27 -!- optbot has joined.
18:41:27 -!- optbot has set topic: the entire backlog of #esoteric: http://tunes.org/~nef/logs/esoteric | I love you.
18:41:48 <optbot> ehird: it stars 'oko' and 'kok' this one does
18:42:56 <AnMaster> also topic, why Ron Paul of all the possible choices?
18:43:07 <ehird> AnMaster: because ron paul is the Comedy Internet Option
18:43:28 <ehird> he was all over reddit/digg/whatever
18:44:06 <AnMaster> ah ok, I usually don't read such sites, however I wonders, why did they focus on him?
18:44:16 <ehird> 'cuz everybody loved him.
18:44:23 <ehird> 'cuz he was all OH CONSTITUTION
18:44:40 <GregorR> Also he's a gold-standard-moron, and that's always funny :P
18:53:44 -!- asiekierka has quit (Read error: 104 (Connection reset by peer)).
18:53:58 <ais523> haha, that's really funny
18:54:00 -!- asiekierka has joined.
18:54:24 <ais523> asiekierka wrote an infiniloop in #IRP, I copied it to fungot over here to figure out what it did, and then asiekierka quit...
18:54:25 <fungot> ais523: no one will ever have to consider it trivial to extract the information automatically declared) 13 lines. unfortunately, that foundation is often incomplete.
18:54:54 <ais523> yes, because it was trying to run an infiniloop was the implication
18:55:09 <ais523> quite a few of the bots in here used to /quit if you infinilooped them
18:55:14 <ais523> although that doesn't happen nowadays
18:56:38 <ais523> +ul (-)(-)((:S(|)S:(~)~a*^*)~a*^:^):^
18:56:39 <thutubot> -|--|---|-----|--------|-------------|---------------------|----------------------------------|------------------------------------------------------- ...too much output!
18:57:07 <ais523> ehird: I think there are shorter ways, that was just idiomatic
18:57:47 <ais523> asiekierka: Unlambda or Underload?
18:58:02 <ais523> do you know lambda calculus?
18:58:22 <ais523> probably it's best to learn that first, or getting your head around Unlambda is basically impossible, so I'll teach you now
18:58:34 <ais523> it's more an esolang basis than something you're taught at school
18:58:50 <asiekierka> {{if anyone wants to comment, feel free!}}
18:58:58 <ais523> basically, in imperative langs like BF, you write down the commands you want in the order they happen, and you have things like loops and ifs to make them happen in a different order
18:59:05 <ais523> and you have variables to store data
18:59:14 <asiekierka> In lambda calculus, you don't have variables...?
18:59:29 <ais523> the only variables you have in lambda calculus are the params to functions
18:59:30 <asiekierka> And the result of the code itself is the output, right?
18:59:40 <ais523> and in "pure" lambda calculus, yes
18:59:53 <asiekierka> Unlambda includes an output function though
18:59:56 <ais523> although some lambda-calculus-based langs like Unlambda have side-effect output functions
19:00:31 <ais523> it's based on the concept of functions, first of all
19:00:36 <oerjan> +ul (-|)(~:S(-)~*~:^):^
19:00:38 <thutubot> -|--|---|----|-----|------|-------|--------|---------|----------|-----------|------------|-------------|--------------|---------------| ...too much output!
19:00:44 <ais523> if you want to be able to store data, get another functoin and pass it as a param
19:00:51 <oerjan> oh wait that was fibonacci
19:00:52 <ais523> and you can make functions at will
19:00:54 <ais523> now, the tricky parts:
19:01:04 <ais523> you can generate functions at runtime, from templates
19:01:09 <ais523> and you can pass functions as arguments
19:01:34 <asiekierka> what do you mean by "generate functions at runtime, from templates"?
19:01:40 <ais523> let's do 99bob in a hypothetical high-level lambda calculus lang, to give you some idea of how it works
19:01:54 <ais523> asiekierka: basically, they're like functions but with things missing
19:02:04 <ais523> numbers, functions, or other fill-in-the-gaps stuff
19:02:39 <ais523> well, to print one bottle of beer, you could do a function like this (hypothetical syntax)
19:03:13 <ais523> lambda(a) {print a, " bottles of beer on the wall,\n", a, "bottles of beer,\ntake one down, pass it around,\n", a-1, "bottles of beer on the wall.\n"}
19:03:33 <ais523> nice and simple, basically the same as in an imperative lang
19:03:36 <ais523> the only difference is we have the lambda operator here that creates a function with no name
19:03:41 <ais523> and we can pass it around like a variable
19:03:55 <asiekierka> So we can repeat it 99 times, and here we go, it's the 99bob program
19:04:11 <ais523> yes, 99 times with different arguments, but that's normally considered cheating when writing 99bob
19:04:19 <ais523> you want to use some kind of loop, normally
19:04:36 <ais523> there are no looping constructs; in an imperative lang, you'd use recursion
19:04:49 <asiekierka> The code is some kind of thing which pastes the var 99 times, and executes it
19:04:52 <ais523> something like function b(x) {lambda(a){...}(x); b(x-1);}
19:05:00 <ais523> that doesn't work in lambda calculs because the functions don't have names
19:05:17 <ais523> you can still do recursion, but it's a bit trickier
19:05:35 <psygnisfive> recursion is possible in LC, just not conveniently
19:05:45 <AnMaster> ehird, another quick python question: I looked more closely this time, I need to check if a string contain a #, I guess the __contains__ is what I want, (looked at help(unicode)). But I'm not sure, and what is the "special" way to call the __contains__ one then?
19:05:56 <ais523> suppose I have lambda(f,x){f(f,x);}, which is a function I'll call sii for reasons which become clear later
19:06:09 <ehird> AnMaster: '#' in string
19:06:11 <psygnisfive> infact, a recursive version would probably look very YC.
19:06:11 <ehird> AnMaster: I think you should read a basic tutorial.
19:06:14 <ais523> now, if I apply that with a function and an arg as its first argumetn
19:06:23 <AnMaster> ehird, you are probably right :)
19:06:25 <ais523> *a function as its first arg, an arg as its second
19:06:29 <ehird> AnMaster: try http://diveintopython.org/
19:06:41 <ais523> it'll give the function /itself/ as an /argument/
19:06:56 <AnMaster> hopefully I don't have to code too much in this, I can't say I like the language, but there was no alternative
19:07:19 <asiekierka> So, it basically runs itself by carrying the params
19:07:32 <psygnisfive> ais' version is basically it. if sii has a conditional recursion within it, e.g. if x = 0 ... else sii(sii,x-1)
19:07:35 <ais523> so, lambda(f,x){f(f,x)}(lambda(b,a){lambda(x){...}(a); b(a-1)})(99)
19:07:47 <ais523> all the information you need, you carry in params
19:07:50 <ehird> AnMaster: What are you using it for?
19:07:54 <ais523> if a function needs to loop, it needs to call itself
19:07:57 <ais523> so it needs itself as a param
19:08:09 <ais523> (and the ... prints out one line of bottle of beer)
19:08:16 <AnMaster> ehird, there is the bot framework pywikipediabot, I needed to code a custom wikipedia bot to use on a wiki I edit
19:08:29 <ehird> AnMaster: There are bot frameworks for other langs
19:08:38 <ehird> But Python is good, so. :p
19:08:55 <AnMaster> ehird, ah but I already use several scripts for pywikipediabot, changing wouldn't be that easy.
19:09:04 <ais523> ok, that's basically a high-level language using lambda calculus for control flow
19:09:09 <ais523> Unlambda is very low-level, though
19:09:18 <ais523> so there are several changes that need to be made
19:09:26 <ais523> first, Unlambda doesn't allow functions with more than one arg
19:09:29 <ais523> but there's a trick to get around that
19:09:43 <ais523> consider this trivial function: lambda (a,b) {a+b}
19:09:53 <ais523> asiekierka: that might work, but there's a cleverer way
19:10:03 <ais523> remember you can generate functions from templates?
19:10:18 <ais523> I can change lambda (a,b) {a+b} to lambda(a) { lambda(b) {a+b} }
19:10:22 <psygnisfive> multiple arguments are abstract anyway you know.
19:10:33 <psygnisfive> lambda(a,b) is as good as what ais just said
19:10:33 <ais523> say I call that function with the arg 2
19:10:45 <ais523> psygnisfive: yes, I'm trying to explain why though
19:10:50 <ehird> psygnisfive: shut up
19:10:54 <ehird> ais523 is trying to explain the basics
19:10:59 <ais523> then, I get lambda(b) {2+b}
19:11:00 <ehird> you're just adding confusion on to that.
19:11:30 <ais523> then if we give 5 to the resulting function, we get 7
19:11:54 <ais523> instead of calling it as (lambda (a,b) {a+b})(2,5) with 2 args, it's called as (lambda(a) { lambda(b) {a+b} })(2)(5)
19:11:57 -!- asiekierka has quit (Read error: 104 (Connection reset by peer)).
19:12:15 * ais523 waits for asiekierka's connection to fix itself
19:13:08 -!- asiekierka has joined.
19:13:20 <ais523> <ais523> instead of calling it as (lambda (a,b) {a+b})(2,5) with 2 args, it's called as (lambda(a) { lambda(b) {a+b} })(2)(5)
19:13:31 <ais523> I stopped once I noticed you leave
19:13:40 <ais523> so what we have here is a function which returns a function
19:13:55 <ais523> you give it the first arg, it returns a function that takes the second arg and gives you the result
19:14:07 <ais523> btw, Haskell is based on that principle, as well as a few others, it's called "currying"
19:14:38 <ehird> asiekierka: note that this means that you can't have variable-argument functions
19:14:46 <ehird> unless you can tell when you have the last arg
19:14:47 <ais523> also, in Unlambda you don't have a semicolon operator or anything like that to combine statements
19:14:50 <ehird> e.g. if you have to give it a DONE arg
19:14:55 <ehird> then it can return the final func or itself
19:15:04 <ais523> ehird: a bit advanced, but correct
19:15:13 <ais523> this is just to make it more annoying I think
19:15:17 <ehird> ais523: i tried to say it simply :p
19:15:22 <ais523> in Unlambda, absolutely everything returns a result
19:15:31 <ais523> and things won't run until their result is available
19:15:46 <ais523> in Unlambda, everything takes one arg too
19:15:53 <ais523> even things that would normally take zero
19:15:54 <oerjan> ehird: i've once been pondering using d as a special marker for variable-argument functions in unlambda
19:15:57 <ais523> .a prints a, and returns its arg
19:16:33 <ehird> asiekierka: needs `
19:16:34 <ais523> not quite, you need to apply the functions in the right order
19:16:37 <ehird> you can't do funcarg
19:16:41 <ehird> you have to do `funcarg
19:16:46 <ehird> but yes, what ais523 said too
19:17:23 <oerjan> ehird: in my interpreter i instead used an explicit argument count (since you need to count the right number of `s anyhow), but an ending d should have been possible
19:17:24 <ais523> `r`.d`.l`.r`.o`.w`.o`.l`.l`.e`.hi
19:17:33 <ais523> in order to run r, it has to calculate its argument first
19:17:44 <asiekierka> The other way also works, but is utterly stupid
19:17:47 <ais523> which is .d applied to something, it has to calculate /its/ argument first
19:17:53 <ais523> until you end up with `.hi
19:17:56 <ais523> which prints h and returns i
19:18:08 <ais523> identity function, I could have put anything there
19:18:15 <ais523> it's just a placeholder as I need to give the function some argument
19:18:38 <ais523> whereas your program prints hlloworld\n
19:19:07 <asiekierka> Tested in the original unlambda interpreter
19:19:10 <ais523> it prints helloworld without the final newline
19:19:19 <ais523> it's a bit complicated how though
19:19:24 <ais523> it first prints h and returns .e
19:19:26 <ehird> ``````````.h.e.l.l.o.w.o.r.l.d`ri
19:19:35 <ais523> then that .e prints e and returns .l
19:19:50 <ais523> so yes, ```````````.h.e.l.l.o.w.o.r.l.dri should work
19:20:09 <ais523> each letter prints itself then returns the next letter, which is then run with the letter after that as its arg and so on
19:20:23 <ais523> so it's more complicated than my version, but has the advantage of running forwards in the source
19:20:40 <ais523> now, the major feature of Unlambda is that despite being based on lambda calculus, it doesn't actually have lambdas
19:20:50 -!- asiekierka has changed nick to asie[away].
19:20:51 <ais523> and ok, I'll wait for you to come back
19:23:13 <oerjan> ais523: variable argument functions in unlambda is not mad(der than the rest of the language), it's in fact the only way to get really compact lists
19:23:15 -!- asie[away] has changed nick to asiekierka.
19:23:18 <lament> that's cause it's based on combinatory logic, not lambda calculus
19:23:40 <ais523> oerjan: it makes sense in the context of Unlambda, just not on any other level
19:23:51 <ais523> asiekierka: basically, you have three functions s k i
19:24:01 <ais523> and which you can generate any lambda function out of
19:24:08 <ais523> i is very simple, it's lambda(x) {x}
19:24:29 <ais523> and instead of just saying what k and s are, it's probably easier to explain where they come from
19:24:53 <ais523> suppose you have lambda(x) { lambda(y) { x(y) } }
19:25:04 <ais523> and you want to get rid of the lambdas
19:25:31 <ais523> let me think a moment...
19:26:05 <ais523> the x in the inside isn't affected by the value of y at all
19:26:18 <ais523> so if we want to write it as a function of y, it would be lambda(y) {x}
19:26:33 <ais523> the y is irrelevant here, and quite a lot of the time in Unlambda you need a way to get functions like that
19:26:38 <ais523> that's where k comes in
19:26:49 <ais523> k(x) returns a function which always returns x no matter what its argument
19:26:55 <ais523> so k(x) = lambda(y) {x}
19:27:11 <ais523> now, y as a function of y is also very easy
19:27:18 <ais523> it's lambda(y) {y} which is i
19:27:48 <ais523> so, what's x(y) as a function of y? it's lambda(y) {x(y)} obviously, but Unlambda doesn't let you use lambdas
19:28:01 <ais523> this is where s comes in
19:28:22 <ais523> s(a)(b)(y) is (a(y))(b(y))
19:28:37 <ais523> in other words, suppose we need to calculate x(y)
19:28:52 <ais523> and we have both x and y as functions of y, which we do
19:28:58 <ais523> x as a function of y is k(x), y as a function of y is i
19:29:04 <ais523> so I can do s(k(x))(i)(y)
19:29:24 <asiekierka> And output their result as the final result
19:29:33 <ais523> it'll do k(x)(y) and i(y), and apply one to the other
19:30:10 <ais523> so if s(k(x))(i)(y) is x(y), then s(k(x))(i) must be lambda(y) {x(y)}
19:30:17 <ais523> so that's got rid of one of our lambdas
19:30:36 <ais523> in Unlambda notation, btw, this would be ``s`kxi
19:30:43 <ais523> where x isn't unlambda at all
19:30:54 <ais523> to get rid of the other one, we can follow the same rules again
19:31:01 <ais523> which I haven't stated yet, but implied
19:31:06 <ais523> there's a mechanical way you can change things...
19:31:33 <ais523> f changes to `kf for any f which doesn't involve the thing we're lambdaing
19:31:38 <ais523> and the thing we are lambdaing changes to i
19:31:59 <ais523> so ``s`kxi changes to ``s``s`ks``s`kki`ki
19:32:19 <ais523> which is how you write lambda(x) { lambda(y) { x(y) } } in Unlambda
19:32:37 <ais523> this is actually enough information to be able to write Unlambda programs, most of them are just compiled directly like that
19:32:59 <ais523> generally speaking, Unlambda's described as not all that hard to write if you know what you're doing (due to that transformation), but basically impossible to read
19:33:27 <ais523> Unlambda has a few other operators just to make things a lot harder
19:33:44 <ais523> there's c, which gives imperative programmers nightmares, and d, which gives functional programmers nightmares
19:33:51 <ais523> and yes, but v2 is just to allow I/O
19:34:01 <ais523> also v, but that's just shorthand and not particularly interesting
19:34:12 <asiekierka> ais523: btw, do you want v2 original interpreter's EXE?
19:34:24 <ais523> (by the way, i can be written as ``skk but that's more coincidence than anything particularly interesting IMO)
19:34:42 <ehird> asiekierka: ais523 uses linux
19:34:43 <ais523> asiekierka: I run Linux not Windows, I could run it but there wouldn't be much point
19:34:52 <ehird> so do most people in here :p
19:34:52 <asiekierka> (useful for obfuscation... if anyone would ever want to do it)
19:34:55 <ais523> besides I think I have the V2 interpreter
19:35:05 <ais523> the Linux version, though
19:35:09 <ais523> not sure if it's the original
19:35:23 <asiekierka> and i have the Windows version; compiled by Cygwin; with the garbage collector
19:35:28 <ais523> and the ``skk trick mostly impresses people who like to get the number of commands down
19:35:39 <ais523> ah, I can't run Cygwin executables here, it doesn't play well with Wine
19:36:19 <asiekierka> Which part of hell do you want: the d part or the c part? {{unlambda commands}}
19:36:32 <lament> i is clearly more basic than s
19:36:43 <lament> so i deserves to be a builtin
19:36:44 <ais523> asiekierka: c is neat, elegant, and basically impossible to explain
19:36:45 <oerjan> d is not strictly necessary, while c is necessary for I/O
19:36:52 <lament> and therefore your builtins aren't orthogonal
19:37:00 <ais523> oerjan: c is only necessary for I/O because the I/O model is stupid
19:37:13 <asiekierka> So who wants to go to the c part of hell
19:37:32 <oerjan> not the I/O model per se, but the choice of booleans
19:37:32 <ais523> asiekierka: I'll try to explain c in one line, then everyone who doesn't know what it does already can go wtf
19:37:41 <oerjan> and i think of it as evil, not stupid
19:38:02 <lament> so more like Obama than Bush
19:38:05 <oerjan> and one of the best decisions
19:38:29 <ais523> if you call c with an argument, then it runs the argument but gives it an argument which is a magical construct called a continuation, and if the continuation ever gets run it goes back in time to when c was called and returns the argument given to the continuation from c, rather than running c's argument
19:39:15 <ais523> oerjan: ok, it's an esolang, deliberately choosing a choice of booleans that need something as crazy as c to work with is very eso
19:39:34 <ais523> asiekierka: I'll help you along
19:39:58 <ais523> it helps slightly if you imagine c as Unlambda's version of goto, it completely messes up the control flow mechanism
19:40:20 <ais523> basically, if you call a function, it can return normally
19:40:32 <ais523> but in imperative languages, you normally have a return statement that lets you break out of the middle of a function
19:40:45 <ais523> Unlambda doesn't have a return statement to break out of functions directly
19:40:48 <asiekierka> I think `ci = `ci(`*i) = `i(`*i) = a deliberate pile of nothingness, huh?
19:40:51 <ais523> but c lets you generate such statements
19:42:05 <ais523> so in an awful mix of notations and paradigms, suppose I do `c lambda(r) {while(true){print "press q to quit\n"; if(getkey()=='q') r(0); }}
19:42:31 <ais523> it's pretty clear here that c is being used to generate a return statement, r in this case
19:42:52 <ais523> and the place you put the c allows you to choose which function to return from
19:42:59 <asiekierka> ais523: Did i work with c right, in my example?
19:43:08 <ais523> I'm not certain I understand your notation
19:43:26 <ehird> ais523: its standard...
19:43:32 <asiekierka> (`*i) is the Esolangs wiki's continuation notation
19:43:35 <ehird> (...) = continuation with * = the thing pased to the continuationn
19:43:59 <ais523> I never really tried to get my head around notations for imagining continuations, I find them much easier to imagine than to write down
19:44:49 <asiekierka> I prefer analyzing how I think it does it, and then comparing it with how it works
19:46:19 <ais523> `ci returns a continuation which returns the continuation's argument instead of the continuation
19:47:18 <ais523> the main problematicness in continuation-related thinking processes is the go-back-in-time thing (btw, I'm planning to use them for Feather, they're the perfect choice for it)
19:59:11 <ais523> I think asiekierka's beginning to see why I said c was basically impossible to explain
20:01:58 <AnMaster> what has C got to do with unlambda?
20:02:16 <ais523> AnMaster: c the Unlambda command, not C the language
20:02:32 <AnMaster> is C "get current continuation"?
20:03:04 -!- ais523 has set topic: the entire backlog of #esoteric: http://tunes.org/~nef/logs/esoteric | there's c, which gives imperative programmers nightmares, and d, which gives functional programmers nightmares.
20:03:18 <ais523> it's call with current continuation, almost the same
20:03:25 <ais523> `ci would be get current continuation
20:03:41 <AnMaster> well I don't understand call/cc but I'm beginning to
20:03:57 <AnMaster> ais523, also what is d in the topic
20:04:09 <ais523> AnMaster: nope, the Unlambda command
20:04:18 <AnMaster> ais523, and what does that d do?
20:04:21 <ais523> it means something along the lines of "don't evaluate this yet"
20:04:40 <ais523> it causes something to be evaluated the next time its value becomes relevant, rather than immediately
20:04:58 <AnMaster> requesting lazy evaluation on a specific bit?
20:05:43 <ais523> yes, it's like case-by-case lazy evaluatoino
20:06:01 <ais523> but considering that d can be passed around as a function argument just like anything else in Unlambda, it causes absolute chaos
20:06:41 -!- asiekierka has quit (Read error: 104 (Connection reset by peer)).
20:06:47 <AnMaster> but it doesn't actually sound hard to understand
20:06:56 <ais523> no, it's probably easier to understand than c
20:07:00 <ais523> much harder to /use/, though
20:07:02 -!- asiekierka has joined.
20:07:23 <AnMaster> ais523, yes... how would it be used?
20:07:42 <ais523> normally to make side effects happen later rather than now, it shortens the program a lot
20:08:15 <oerjan> asiekierka: actually `ci = `i(*) = (*)
20:08:17 <ais523> otherwise you have to put in lots of ``s`kk stuff in order to cause the command that would cause the side effect to be constructed at the last moment rather than running earlier
20:08:36 <asiekierka> Is there any other worthwhile esolang than befunge, brainf**k, piet, underload and unlambda?
20:09:04 <ehird> also, popular is irrelevant
20:11:41 <oklopol> ooooooooooooooooooooooooooooooooo
20:13:01 <oklopol> most of the interesting ones are incredibly hard to program in.
20:13:12 <asiekierka> And the 5 seconds is the time it takes from clicking the link to showing the page
20:13:38 <fizzie> fis@eris:~/src/jitfunge$ build/jitfunge test.b98
20:14:01 <fungot> echo reverb rev rot13 rev2 fib wc ul cho choo pow2 source help
20:14:06 <fungot> ^<lang> <code>; ^def <command> <lang> <code>; ^show [command]; lang=bf/ul, code=text/str:N; ^str 0-9 get/set/add [text]; ^bool
20:14:07 <fizzie> Not yet; it's very unportable code at-the-moment. When I get fungot running on it, I'll put it up.
20:14:07 <fungot> fizzie: so to a point they are working on a distributed dialect of scheme :p ( and that ork interpreter written in qt
20:14:36 <AnMaster> fizzie, why not use llvm to make it portable?
20:14:53 <AnMaster> iirc that is the only portable way to run code like that
20:15:01 <ehird> PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE
20:15:02 <ehird> PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE PORTABLE
20:15:03 <fizzie> Yes, mmap with PROT_READ|PROT_WRITE|PROT_EXEC.
20:15:52 <ehird> fizzie: is it based on any code?
20:15:54 <ehird> or is it a new impl
20:16:02 <fizzie> ehird: Completely from scratch.
20:16:24 <ehird> fizzie: I'd like to help but I dunno how I could.
20:16:30 <asiekierka> Q: Is an infiniloop possible in Unlambda?
20:16:34 <AnMaster> same I could probably not do it
20:16:41 <ehird> fizzie: I assume it's not at the level of implementing fingerprints yet?
20:16:44 <ehird> I'd be good at that.
20:16:50 <fizzie> The stack is done (well, will be done, if I can manage) by mmaping some memory for it, then catching the SIGSEGV, mangling some registers around, then restoring the context.
20:16:52 <AnMaster> asiekierka, should be using continuations
20:17:39 <ehird> AnMaster: it's "good"
20:17:44 <fizzie> Hey, no explicit underflow/overflow checks.
20:17:48 <AnMaster> fizzie, how do you know you didn't catch the sigsegv from something else?
20:17:56 <fizzie> From the address it gives me.
20:17:59 <ehird> by setting a flag?
20:18:21 <AnMaster> fizzie, what about pop on empty stack then?
20:18:58 <fizzie> Well, that's just a read below the current stack; I just need to set a suitable register to zero, add +4 to the funge-stack pointer reg, and restore the faulting context from the next instruction.
20:19:19 <AnMaster> fizzie, assuming that is you go for a full blown befunge-98 that is
20:19:21 <fizzie> Stackstack will probably involve some copying around, though.
20:19:35 <fizzie> There is an interface of sorts for fingerprints (all A..Z are mapped to distinct function calls) so that can be used for implementing fingerprints without having to touch the code-generation.
20:19:59 <AnMaster> fizzie, if you did this on kernel level you could use memory mapping to implement stack stack
20:20:20 <fizzie> I could probably use separate mmap ranges for the stack-stack substacks and simply swap some pointers.
20:20:44 <AnMaster> ah no you would still need copy on write
20:21:06 <fizzie> Currently I use eax/ebx/ecx/edx for the generated Funge-code, edi as a temporary for more complicated blocks (so far no branches yet! just conditional sets) and esi as the funge stack pointer.
20:21:25 <AnMaster> fizzie, so how far are you going to take this? Full blown mycology passing? t support?
20:21:47 <ais523> fizzie: why not ebp as the stack pointer?
20:21:48 <fizzie> I don't see how I could do 't' with correct timing without completely losing the point.
20:21:53 <ais523> that would be more usual...
20:21:58 <ais523> or even esp if you want to live dangerously
20:22:14 <ais523> but that would play badly with the rest of the code, I guess
20:22:18 <ais523> ehird: multithreads a Funge program
20:22:26 <ehird> why would that be hard?
20:22:27 <ais523> but the threading's synchronous, like in INTERCAL
20:22:40 <ais523> thus fizzie's "with correct timing" mention
20:22:42 <AnMaster> fizzie, also just an idea, wouldn't using something like llvm be useful here?
20:22:45 <ais523> doing it with incorrect timing wouldn't be hard
20:22:56 <AnMaster> or maybe it would abstract too much and prevent some of these hacks
20:23:47 <fizzie> I do quite a lot of function calls from inside the generated code, so I'm trying to mostly obey the calling conventions; I guess ebp is sort-of needed for stack frames to make sense.
20:24:07 <AnMaster> fizzie, hm passing on stack or in registers?
20:24:21 <asiekierka> The ultimate Unlambda contest: Make a program that decides whether obama should win or mccain
20:24:26 <AnMaster> if you really want to go for speed then passing parameters in registers would be useful
20:24:40 <ais523> asiekierka: nah, that's just printing a constant string
20:24:46 <fizzie> Well, on stack, the normal cdecl style. For now, anyway. It's not too difficult to change later, probably.
20:25:31 <ehird> ^ works it out for itself
20:25:36 <ehird> using boolean logic.
20:25:50 <fizzie> Oh, and I haven't done register-spilling at all yet, so it currently crashes badly if some piece of code needs more registers. That shouldn't be *too* hard, though.
20:25:57 <asiekierka> if the election was meant to be calculated only with computers that can only run unlambda
20:26:01 <oerjan> asiekierka: ```sii``sii to your earlier question
20:26:14 <ais523> oerjan: ha, you came up with the same answer as me
20:26:15 <ehird> asiekierka: i don't think that the election is decided by AIs deciding who should be president
20:26:19 <fizzie> I'm sure llvm would have been an interesting idea, but since I started writing x86 code-generating code already...
20:26:36 <asiekierka> ehird: the only params you get is the number of votes
20:26:53 <asiekierka> so, if 1 person voted on mccain and 3 on obama
20:27:01 <AnMaster> fizzie, hm... is the whole thing ASM?
20:27:07 <ehird> AnMaster: unlambda
20:27:27 <fizzie> It's C++ mostly, except that of course the code-generation uses assembly.
20:27:39 <fizzie> What I think is funky is that the "hello" thing I pasted was the absolute first time I tried to actually run the code I generated; it very very very much surprised me when it actually worked.
20:27:44 <AnMaster> fizzie, how far does it get in mycology?
20:27:51 <AnMaster> assuming it pass sanity at all
20:28:07 <ehird> he's evidently just started workinnnng on it
20:28:16 <ehird> i imagine it can't do anything more than hello world or maybe hq9+
20:28:29 <fizzie> Er, probably nowhere right now. Of course I could run it; but I expect a segfault or something.
20:28:47 <oerjan> ais523: it came up as one of the main cases in the 0x29A functional subset
20:29:10 <AnMaster> fizzie, still you should publish your code IMO, {insert rant about the cathedral vs. the bazaar}
20:29:27 <ehird> {insert rant about how AnMaster should shut up}
20:29:31 <fizzie> Segfault: ooh, I'm clairvoyant.
20:29:32 <oerjan> ais523: ```sii``sii, well in disguise
20:29:45 <fizzie> 3200 lines of C++ already, heh.
20:29:54 <AnMaster> fizzie, how much of that is ASM stuff?
20:30:50 <fizzie> Welll... most of codegen.cc (1400 lines) is at least very closely related.
20:31:07 <AnMaster> fizzie, how will it handle self modification?
20:31:24 <ehird> just modify the generated code
20:32:02 <AnMaster> I mean, you need to store two versions
20:32:04 -!- asiekierka has quit (Read error: 104 (Connection reset by peer)).
20:32:18 <ehird> just convert the machine code back to real code
20:32:30 <ehird> you generate it in a predefined pattern, not hard to do a quick check then extract the params
20:32:34 <ehird> and then see what that means
20:32:47 <AnMaster> as it is jitting you would probably generate optimised linear code
20:32:54 <fizzie> I don't think that will be very trivial, since it constant-folds things like 88*:* into a single constant.
20:33:06 <ehird> fizzie: well, that'd be a problem
20:33:08 <ais523> just store the playfield somewhere separate for the purpose of g and p
20:33:16 <ehird> then when p happens, recompile that bit
20:33:18 <fizzie> But I do keep a separate data-space, I just generate snippets of code hooked into (pos, delta) pairs.
20:33:22 <ehird> "that bit" is fizzie's problem
20:33:25 <AnMaster> ehird, see that was what I said
20:33:39 <fizzie> So p just needs to remove those snippets that happen to be there.
20:34:07 <ehird> gee AnMaster said something vague and meaningless, he sure showed me
20:34:57 <fizzie> The interpreter main loop works so that if it doesn't find code to execute starting from the current (pos, delta), it traces up to next @, |, _, w, or a snippet of existing code (and constant-folds and optimizes a bit already there), then converts that code into a native code function and calls that.
20:35:12 <AnMaster> gee ehird can't gets angry again because of his own blown up ego
20:35:53 -!- Judofyr has quit (Read error: 104 (Connection reset by peer)).
20:36:30 -!- Judofyr has joined.
20:37:09 <fizzie> If it happens (fortuitously) hit the entry-point of an existing snippet, it adds a link there; otherwise it erases the old snippet and starts a new right there. I'm hoping that when I run this on some code, it'll basically end up finding the basic blocks and generating separate functions for those.
20:37:22 <AnMaster> fizzie, I'd really like to play around with it a bit already, I realise it is very incomplete and so on, but still
20:38:19 <AnMaster> fizzie, another idea, you could special case some common patterns such as >:#,_@
20:39:54 * AnMaster imagines a book called "Befunge Design patterns"
20:39:56 <fizzie> Maybe. There's also a lot of optimization opportunities in the generated code.
20:40:12 <AnMaster> fizzie, ah there llvm would really have helped
20:41:02 <fizzie> There's a tarball at http://zem.fi/~fis/jitfunge-export.tar.gz but don't expect anything actually working, or any support whatsoever, or even that it'd work on a non-Linux box; I think there's a mremap call in there, I'm not sure how well-supported that is. (Easy to eliminate, though.)
20:41:27 <fizzie> There are a couple of known memory leaks, too; the part which manages the mmap pages for the functions doesn't really do much memory management.
20:42:10 <fizzie> (The functions can't really be moved at will because of some PC-relative addressing in the call instructions; it would need some relocations for that.)
20:42:24 <fizzie> You can probably compile it with just a single g++ command, though.
20:43:07 <AnMaster> fizzie, any special cflags needed?
20:43:21 <AnMaster> g++ -o build/parser.o -c -m32 -Wall -Werror -ggdb3 src/parser.cc
20:43:21 <AnMaster> cc1plus: warnings being treated as errors
20:43:21 <AnMaster> src/parser.cc: In constructor 'jitfunge::Trace_impl::opargs::opargs()':
20:43:21 <AnMaster> src/parser.cc:18: warning: array subscript has type 'char'
20:43:50 <fizzie> Curious warning; I don't get that one.
20:43:57 <AnMaster> fizzie, maybe different gcc version
20:43:57 <fizzie> It's obviously correct, though.
20:44:09 -!- Judofyr has quit (Remote closed the connection).
20:44:13 <AnMaster> CFLAGS="-march=k8 -msse3 -m32 -O2 -pipe" CXXFLAGS="-march=k8 -msse3 -m32 -O2 -pipe" scons
20:44:44 -!- Judofyr has joined.
20:45:33 <fizzie> Yes, I think there's some explicit scons command for picking up that stuff from the environment.
20:45:35 <AnMaster> fizzie also: scons: *** Source `src/tool.cc' not found, needed by target `build/tool.o'. Stop.
20:45:50 <fizzie> Oh, I haven't added tool.cc in the svn, so svn export didn't catch it.
20:46:17 <AnMaster> tell me when you got an updated version that fixes the tool.cc and the char thing
20:46:35 <AnMaster> fizzie, it also warned for line 19 20 21 22 23 and 24 in the same file
20:46:48 <AnMaster> and multiple times for each line
20:47:34 <fizzie> I fixed that tarball there for the tool.cc thing, but not yet the char-array indexing.
20:48:15 <AnMaster> hm svn needs server side support?
20:48:57 <fizzie> Yes. I do have a svn server here, though, but I think it's configured so that it only accepts HTTPS connections with client certificates. Haven't used it for anything public.
20:49:38 -!- oklopol has quit (Read error: 104 (Connection reset by peer)).
20:49:54 -!- oklopol has joined.
20:50:41 <AnMaster> fizzie, hm what cpu do you generate for?
20:51:18 -!- kar8nga has joined.
20:51:31 <fizzie> Okay, the tarball now should have tool.cc and (int) casts for the array indices.
20:52:02 <fizzie> Something like i686, although the only "fancy" opcode there is the conditional SET, which I think appeared around Pentium Pro.
20:52:45 <fizzie> Incidentally, the scons script should generate both jitfunge and jittool; the 'jitfunge' part is the interpreter (such at it is) but the jittool is maybe more interesting.
20:53:10 <fizzie> The jittool one takes file (plus optional four integers, x y dx dy) and generates + compiles a single trace, then dumps the generated code.
20:53:29 <fizzie> Although the final stage of the dumping just calls "ndisasm -b 32 tmp.data" which you might not have in your path.
20:53:45 <AnMaster> fizzie, any idea why that segfaults?
20:53:51 <AnMaster> what did your hello look like?
20:53:55 <fizzie> Stack underflow, maybe?
20:54:11 <fizzie> Yes, because I haven't done the stack part yet. :p
20:54:27 <AnMaster> fizzie, adding a 0 at the start didn't help
20:54:35 <fizzie> My hello looked like a"olleh",,,,,,0@ :p
20:54:49 <AnMaster> Program received signal SIGSEGV, Segmentation fault.
20:54:49 <AnMaster> #1 0x49811ca0 in ?? () from /lib/ld-linux.so.2
20:54:52 <AnMaster> #3 0x08054749 in jitfunge::AsmFunction::operator() (this=0x841b058) at src/codegen.hh:274
20:55:03 <AnMaster> also: Backtrace stopped: frame did not save the PC
20:55:13 <fizzie> Well, it's inside some generated code all right.
20:55:31 <fizzie> (The 0 there in my hello is because @ -- despite what the spec says -- also pops a single value to use as the exit code at the moment.)
20:55:46 <fizzie> I'll work on portability when I get it to work at all first. :p
20:56:16 <AnMaster> fizzie, why is the 0 needed in front of that @ in your code?
20:56:54 <fizzie> My @ and q map to the same thing. Work-in-progress....
20:57:00 * AnMaster wonders about current lag spike
20:57:08 <AnMaster> I think I may need to restart router
20:57:42 <fizzie> Oh, anything using stack segfaults currently, since I haven't even initialized the stack pointer. :p
20:58:01 <ais523> fizzie: what in Befunge doesn't use the stack? Not a lot, surely?
20:58:31 <AnMaster> fizzie, how comes your hello worked then?
20:58:34 <fizzie> a"olleh",,,,,,0@ doesn't "use the stack" because it's all constants, so it gets turned into "set eax to character, push eax, call writechr".
20:59:36 <AnMaster> fizzie, that program must be seriously hard to debug
21:00:05 <fizzie> I'm not quite sure how that will follow, but I'm still working on it.
21:00:27 <AnMaster> fizzie, well do you aim for speed with it?
21:00:33 <fizzie> Speed, I guess. And complete Funge-98 enough so that fungot runs on it.
21:00:33 <fungot> fizzie: undefined variable ' f' called within it. how in the world who don't spend all time merging a custom xml format have less expertise.
21:00:44 <AnMaster> fizzie, because I'm well aware this will beat anything, including cfunge
21:01:06 <fizzie> Mycology within limits. I'm not sure what all it tests.
21:01:22 <AnMaster> fizzie, it tests core, and optionally any fingerprints
21:01:26 <fizzie> The 't' thing is something I'm not going to do, and neither will I do trefunge probably.
21:01:32 <AnMaster> of course it just tells you fingerprint foo couldn't be loaded
21:01:44 <AnMaster> and mycology doesn't test trefunge
21:01:49 <AnMaster> and nor does cfunge support trefunge
21:02:30 <AnMaster> fizzie, does it compile with anything but gcc btw?
21:02:48 <fizzie> There's no obvious gcc-isms, at least.
21:03:21 <AnMaster> fizzie, well scons seems to ignore both CC and CFLAGS
21:03:31 <fizzie> I will probably start testing with mycology when I get some real code to run. Although I think I'll take the rest of the evening as a break.
21:04:17 <AnMaster> fizzie: scons: *** Do not know how to make target `clean'. Stop.
21:04:33 <ehird> <AnMaster> gee ehird can't gets angry again because of his own blown up ego
21:04:43 <ehird> i don't know where this imagined ego of mine comes from.
21:04:44 <ehird> care to enlighten?
21:05:12 <AnMaster> fizzie, anyway any idea how to get scons to read the env vars?
21:05:36 <fizzie> I'll fix the SConstruct file to do that.
21:06:21 <AnMaster> fizzie, also it is CXXFLAGS I guess?
21:06:56 <AnMaster> at least that is what autotools and everything else use
21:13:54 -!- oklopol has quit (Read error: 104 (Connection reset by peer)).
21:14:11 -!- oklopol has joined.
21:14:50 <fizzie> AnMaster: Well, the tarball in there now has a SConstruct file which lets you override CXXFLAGS and CXX (the C++ compiler used).
21:15:23 <ehird> fizzie: gonna test on os x
21:15:33 <fizzie> Heh, good luck with that. :p
21:15:56 <fizzie> The mremap call won't be there, at least. I'll do a workaround for that at some point.
21:16:07 <fizzie> It isn't really needed, anyway.
21:18:32 <fizzie> My only OS X computer is a powerpc, so I probably won't really be testing with that.
21:21:12 -!- kar8nga has quit (Read error: 110 (Connection timed out)).
21:23:41 -!- oklokok has joined.
21:24:33 -!- oklopol has quit (Read error: 104 (Connection reset by peer)).
21:47:49 <fizzie> fis@eris:~/src/jitfunge$ cat test.b98
21:47:49 <fizzie> 0a"!dlrow ,olleH">:#,_@
21:47:49 <fizzie> fis@eris:~/src/jitfunge$ build/jitfunge test.b98
21:48:10 <fizzie> Still doesn't handle stack underflow, but at least the stack is there.
21:48:22 <fizzie> Also chased around a couple of very mysterious bugs.
21:48:32 -!- jix has quit (Read error: 145 (Connection timed out)).
21:49:33 -!- jix has joined.
21:50:33 <fizzie> For reference, the >:#,_ loop is translated into something like: mov esi, [stack_top]; std; lodsd; push eax; call writechr; add esp, 4; mov eax, [esi]; test eax, eax; mov eax, 0; setnz al; mov [stack_top], esi;
21:51:29 <ehird> fizzie: buildin' on os tenpoop
21:51:34 <fizzie> (After which control returns from the generated code back into the interpreter, which will use the eax value to decide whether to call the same piece of code again or to proceed to the left.)
21:51:48 <fizzie> Oh yes, those are very pretty.
21:51:52 <ehird> pikhq: yes, befunge-98 jit
21:51:53 <pikhq> Wow. That's gorgeous.
21:51:58 <ehird> it's been done before, but only -93
21:52:17 <fizzie> It's not like jitfunge really does anything very -98y yet, though.
21:52:23 <fizzie> Although the space is larger.
21:52:32 <ehird> fizzie: Here is a paste you can do absolutely ntohing with:
21:52:52 <ehird> fizzie: http://rafb.net/p/8raqXi81.html
21:54:29 <fizzie> Well, there's the mremap error, that one's clear. I'm not sure I want to try reading that C++ one.
21:54:45 <fizzie> I'm not quite sure I'm using the C++ TR1 hash table right, anyway.
21:56:22 -!- jix has quit ("CommandQ").
21:56:31 <AnMaster> fizzie, iirc you can't return from sigsegv handler right?
21:57:16 <AnMaster> ehird, well it would terminate you
21:57:23 <ehird> AnMaster: considering SBCL does it
21:57:29 <ehird> and presumably jitfunge
21:57:34 <AnMaster> llvm-g++ is hashed (/home/arvid/local/llvm/bin/llvm-g++)
21:57:41 <AnMaster> llvm-g++ -o build/codegen.o -c -march=k8 -msse3 -m32 -O0 -ggdb3 -pipe src/codegen.cc
21:57:41 <AnMaster> sh: llvm-g++: command not found
21:57:59 <ehird> AnMaster: iirc, scons doesn't inherit PATH
21:58:02 <ehird> for an actual reason that i forget.
21:58:09 <ehird> no, it is justified
21:58:19 <ehird> AnMaster: I think "scons 'PATH=$PATH'"
21:58:33 <ehird> AnMaster: no, "how it was justified"
21:58:43 <ehird> AnMaster: found it
21:58:59 <ehird> AnMaster: http://www.scons.org/faq.php#SS_4_3
21:59:01 <fizzie> The signal handler gets the ucontext_t struct as a third parameter when using the sigaction stuff, then I can (possibly, unportably) setcontext() back to it after manipulating it a bit.
21:59:18 <AnMaster> fizzie, to be able to build here I would need to override LD too
21:59:30 <AnMaster> and to be able to override the path
22:00:22 <AnMaster> ehird, I see what it says but requiring end users to do that is just silly
22:00:27 <fizzie> Feel free to edit the SConstruct, then.
22:00:42 <ehird> AnMaster: scons was designed in an environment for e.g. companies with a software project
22:00:53 <AnMaster> ehird, ok then it makes sense I guess
22:00:54 <ehird> if you were in one, presumably you would realise the advantage of fully repeatable builds anywhere
22:00:59 <ehird> but yes, that sucks for end-users
22:01:14 <AnMaster> ehird, yes for internally using it in a company it makes sense
22:01:56 <ehird> AnMaster: it was used to compile doom3
22:02:04 <ehird> "Doom3's Linux build system uses SCons. CC="ccache distcc g++-3.3" JOBS=8 rocks!"
22:02:14 <ehird> so there they have an internally-distributed, presumably automated build process
22:02:37 <AnMaster> it make sense for internally usage yes
22:03:26 * AnMaster solves it by setting CXX to the full path
22:03:39 <AnMaster> but yes it breaks when it tries to use ld
22:03:44 <ehird> AnMaster: so set LD?
22:04:52 <AnMaster> I tried to extend the same way that was already used
22:05:12 <AnMaster> /home/arvid/local/llvm/bin/llvm-g++ -o build/jitfunge -m32 -ggdb build/main.o build/codegen.o build/interp.o build/parser.o build/space.o
22:05:12 <AnMaster> /usr/bin/ld: skipping incompatible /home/arvid/local/llvm/lib/gcc/x86_64-unknown-linux-gnu/4.2.1/../../../../lib/libstdc++.a when searching for -lstdc++
22:05:12 <AnMaster> /usr/bin/ld: skipping incompatible /home/arvid/local/llvm/lib/gcc/x86_64-unknown-linux-gnu/4.2.1/../../../libstdc++.a when searching for -lstdc++
22:05:12 <AnMaster> /usr/bin/ld: cannot find -lstdc++
22:05:14 <AnMaster> collect2: ld returned 1 exit status
22:05:23 <AnMaster> it just works with both autotools and cmake
22:05:35 <AnMaster> heck it usually just works with 99% of the plain makefiles too
22:06:18 <ehird> i can't use this program therefore the shitty things it tries to replace are superior
22:06:25 <ehird> autotools is not a total ugly hack, nope
22:06:36 <fizzie> scons is a bit peculiar with its habits, but I sort-of like it when doing build systems for myself; my DS development environment is done with it.
22:06:44 <ehird> AnMaster: What does uggly mean? Really ugly?
22:06:49 <ehird> also, no, it really doesn't
22:06:55 <AnMaster> ehird, autotools sucks I fully agree
22:07:00 <AnMaster> but at least it respects env variables
22:07:17 <fizzie> Anyway, scons's name for the linker is 'LINK', not 'LD'.
22:07:19 <AnMaster> and I can't figure out how to make scons respect LD
22:07:39 <ehird> ld is a certain linker
22:07:56 <ehird> ld refers to a single linker product
22:08:02 <ehird> there are others that are not lds but they are linkers
22:08:10 <ehird> ld is not a generic term of linker
22:08:25 <ehird> AnMaster: in that case.
22:08:32 <ehird> but what about LD=magic-corp-foobazing-linker?
22:08:39 <ehird> magic-corp-foobazing-linker is a linker, not an ld(1).
22:08:42 <AnMaster> ehird, well that is how it is usually done
22:08:51 <ehird> AnMaster: usually done != the better option
22:08:53 <AnMaster> ln -s llvm-ld magic-corp-foobazing-linker
22:08:56 <ehird> Windows is what is usually used.
22:09:01 <ehird> So why don't you use it?
22:09:34 <AnMaster> llvm-ld: Unknown command line argument '-m32'. Try: '/home/arvid/local/llvm/bin/llvm-ld --help'
22:09:35 <AnMaster> llvm-ld: Unknown command line argument '-ggdb'. Try: '/home/arvid/local/llvm/bin/llvm-ld --help'
22:10:15 <fizzie> I'm not sure ld needs those flags, actually.
22:10:18 <ehird> on the other hand, LD is probably a better name for the env variable
22:10:24 <ehird> since it seems to require ld :p
22:10:27 <fizzie> (It's LINKFLAGS where they come from.)
22:10:40 * oerjan writes down AnMaster's name for future stalking
22:11:03 <fizzie> It's not really a build system, it's just something that manages to compile it here. As I've mentioned a couple of times, it's just a tarball, not a distribution.
22:11:50 <AnMaster> you could find it using google
22:11:58 <ehird> see: cfunge source.
22:12:07 <fizzie> Hee, now it can run mycology without segfaulting.
22:12:35 <ehird> i should try and look up AnMaster's phone number just to be creepy.
22:12:37 <fizzie> http://zem.fi/~fis/mycout.txt
22:12:43 * oerjan tosses his list of things to blackmail AnMaster for
22:13:29 <AnMaster> fizzie, well 7! would be easy to fix
22:13:52 <fizzie> I have implemented !, but apparently not right.
22:14:12 <fizzie> "7!. a, 0@" does print a 0 here, but that's not surprising, since it constant-folds that.
22:14:41 <AnMaster> fizzie, wait constant folding is computed in a different way?
22:14:41 -!- oklopol has joined.
22:14:53 <fizzie> Well, sure, since it's the parser which does it.
22:15:00 <AnMaster> fizzie, hm maybe constant fold based on first run?
22:15:04 -!- oklokok has quit (Read error: 104 (Connection reset by peer)).
22:15:45 <fizzie> I don't really think so. The generated code with/without constant-folding is completely different, after all.
22:16:45 <oerjan> constant folding is usually good, but not in poker programs
22:16:47 <fizzie> Curious, though. "700p00g!.a,0@" also prints out 0. It might be some other bug causing the mycology output, though.
22:17:07 <AnMaster> oerjan, eh? pun detected but not understood
22:17:17 <oerjan> SO LOOK IT UP ALREADY :D
22:17:22 <ais523> AnMaster: "fold" is something you can do in poker
22:17:30 <AnMaster> oerjan, I don't plan to learn playing poker
22:17:35 <ais523> which causes you to lose the hand, but not lose any more money than you've already bet
22:17:39 <oerjan> i don't play it either
22:17:52 <ais523> doing it constantly will cause you to lose eventually, although doing it sometimes is normally a good idae
22:17:59 <oerjan> but i know some basic rules
22:18:04 <AnMaster> fizzie, tracing output dumping stack at each step?
22:19:00 <AnMaster> ais523, how can you loose more money than you already bet?
22:19:11 <ais523> AnMaster: normally you have the choice of folding or betting mroe
22:19:24 <AnMaster> ais523, ah, so there is no "pass"?
22:19:24 <ais523> so if you don't fold, you have to bet more
22:19:31 <ais523> there is sometimes but not usually
22:19:50 <ais523> that's the whole point of poker strategy, you force your opponents to bet more, or to bluff them into folding
22:21:58 <AnMaster> fizzie: src/interp.cc:19: warning: unused parameter 'location'
22:22:14 <AnMaster> src/parser.cc:63: warning: missing initializer for member 'jitfunge::StackChange::flush'
22:22:15 <AnMaster> src/parser.cc:63: warning: missing initializer for member 'jitfunge::StackChange::in'
22:22:27 <fizzie> Is this with what compiler?
22:22:41 <fizzie> Ah. With some optimization flags?
22:22:48 <fizzie> Without -O2 it won't catch all that.
22:22:54 <fizzie> Will fix at some point.
22:22:58 <AnMaster> CXXFLAGS="-march=k8 -msse3 -m32 -O3 -Wall -Wextra -ftracer -fweb -frename-registers -ggdb3 -pipe"
22:24:12 <AnMaster> but -ftracer is actually useful
22:25:53 <AnMaster> Perform tail duplication to enlarge superblock size. This transformation simplifies the control flow of the function allowing other optimizations to
22:25:53 <fizzie> Well, the mycology bug was a bug in some of the trivial optimizations I do; forgot to set one value, so it skipped one instruction that was actually necessary.
22:26:15 <AnMaster> I tested it and for example it replaced something like:
22:26:39 <ais523> AnMaster: I know what tail duplication does
22:26:55 <ais523> it didn't just do that, it changed the target of a goto too
22:27:25 <ais523> AnMaster: say you have an if near the end of a function
22:27:25 <fizzie> http://zem.fi/~fis/mycout.txt ... does that "p doesn't modify space" test putting an instruction on the playfield?
22:27:38 <ais523> tail duplication makes two copies of the end of the function, one for each branch of the if
22:27:41 <ais523> and optimises them separately
22:27:51 <AnMaster> ais523, yes it helped a lot in the case I tried it
22:28:03 <ais523> my guess is mov %edx, %eax was a goto target without -ftracer so it couldn't be optimised out
22:28:22 <AnMaster> ais523, oddly enough nothing else in the function changed
22:28:38 <ais523> strange, are you sure that was -ftracer?
22:29:14 <AnMaster> ais523, I also used -fweb in both cases
22:30:00 <AnMaster> ais523, also when I later added some calls to __builtin_expect() I got it down to even less jumps
22:30:22 <AnMaster> mostly conditional stores iirc
22:30:30 <AnMaster> or whatever they are called now again
22:30:42 <AnMaster> (the function returned true or false
22:31:28 <fizzie> Well, then it's a "known issue".
22:32:23 <AnMaster> fizzie, would it be hard to later port this program to another arch?
22:32:41 <AnMaster> or is the low level code generation well enough abstracted?
22:32:58 <fizzie> Nontrivial, but maybe not terribly hard.
22:33:33 <fizzie> Abstraction, schmabstraction; at least almost all x86-specific code is in codegen.cc; too bad that one is almost half of the lines in the whole program.
22:36:38 -!- Judofyr has quit (Read error: 104 (Connection reset by peer)).
22:37:06 <AnMaster> fizzie, how do you implement funge space?
22:37:14 -!- Judofyr has joined.
22:37:28 <AnMaster> I mean, static array for some given size I guess
22:37:33 <fizzie> There's a static block of 64*64 cells (for coordinates 0..63) and a hashmap outside it.
22:37:51 <AnMaster> you will want a lot larger later on
22:37:56 <fizzie> Well, it's a single compile-time constant to change.
22:38:56 <fizzie> Also, when the get/put coordinate arguments are constants (i.e. 00g, <blabla>00p) that are inside the static range, the generated code will do simple mov's to/from there.
22:39:28 <fizzie> So those should be pretty much as fast as "variables".
22:39:51 <AnMaster> fizzie, you should probably be able to dynamically resize the static array
22:39:58 <AnMaster> just re-generate the access code
22:40:11 <AnMaster> if you notice a lot of access in some area
22:41:44 <fizzie> There's a single "mov edi, staticspacestart" involved, but after that 11g is just mov eax, [edi+0x104]
22:43:07 <AnMaster> fizzie, how optimal is the generated machine code?
22:43:22 <fizzie> But not most pessimal.
22:43:42 <AnMaster> fizzie, do you think it will beat a good interpreter compiled with a good compiler?
22:43:43 <fizzie> It does stupid things, but not completely brainlessly idiotic things, at least in most cases.
22:44:24 <fizzie> For some programs, certainly. No need to update position/delta, parse things like <>v^ at all, or even fetch instructions from the funge-space.
22:45:03 <fizzie> I'll do benchmarking when I get something non-trivial to work. I think I'll test with that underload interp first.
22:45:13 <AnMaster> fizzie, what about something like the game of life in it?
22:45:26 <fizzie> I think I'm going to have to add a bit more non-portability to the mix for the "catch stack underflow by intercepting the page-fault" feature, since if I just use the portable form of mmap(), the page it gives me ends up right next to other stuff in the virtual address space, and reading below it will not cause segfault but just return random-ish fluff.
22:45:34 <AnMaster> fizzie, also I expect that you will do it on cfunge on an intel machine and using ICC
22:45:40 <AnMaster> that is about as optimal as you can get
22:46:09 <ehird> ah, i am reminded again why i ignored AnMaster
22:46:51 <AnMaster> fizzie, hm so you need to map two pages after each other
22:47:04 <AnMaster> fizzie, and make one nonaccess using mprotect
22:47:05 -!- Judofyr has quit.
22:47:16 <AnMaster> that should work fairly portable for underflow
22:47:34 <AnMaster> you would need fixed mappings I guess
22:48:03 <fizzie> That's the "trust your luck" scenario; there's nothing saying it should map things consecutively. I think I'll just use MMAP_FIXED, it's not *so* unportable.
22:48:23 <fizzie> Even though the man-pages complain about the discouragednessity of it.
22:48:43 <fizzie> Yes, well, with MMAP_FIXED I don't think I need anything below it.
22:48:54 <fizzie> Non-mapped address spage should generate segfaults just fine.
22:48:58 <AnMaster> fizzie, what if some other mapping is created below
22:49:02 -!- KingOfKarlsruhe has quit (Remote closed the connection).
22:49:04 <AnMaster> that sounds like trust your luck too
22:49:58 <fizzie> Okay, maybe I could stick a guard page there. But the whole "let's use this address for the stack, it's probably not used" thing is a bit iffy. I don't think I'll start randomly trying multiple addresses or anything like that.
22:50:28 <AnMaster> fizzie, ok what do you prefer?
22:50:56 <AnMaster> fizzie, oh my system uses ASLR
22:51:59 <AnMaster> fizzie, I guess that explains why it complains about text relocations?
22:52:44 <fizzie> I think the ASLR implementations still have some specific ranges for the various types of memory areas. Don't know the details of those, though.
22:53:40 <fizzie> I think I'll just stick the funge stack into 0x40000000 or something and hope it works. The whole system is quite a "hope it works" thing. But at least enlarging the stack should be easy then, just add more pages.
22:54:27 <AnMaster> fizzie, and really that is a bad idea
22:57:28 <AnMaster> that prints aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
22:59:10 <fizzie> Updated the tarball, you can probably just copy your fixed SConstruct over it.
22:59:35 <fizzie> Still, probably won't make sense to do much bug-hunting just yet; there are a lot of 'em.
23:01:41 <AnMaster> you said p would just clear out code paths
23:01:52 <AnMaster> but how does that work if a constant path bypasses it?
23:02:22 <AnMaster> and that p writes into hello world
23:02:53 <AnMaster> fizzie, so my question is, how do you update in the middle of constant folded paths
23:12:23 -!- Corun has left (?).
23:18:27 -!- mu has joined.
23:20:32 -!- Corun has joined.
23:22:24 <fizzie> The space-hashmap has (pos, delta) entries for all commands encountered when tracing the paths, so that can be used to notice when p is writing into something that has been visited when compiling.
23:23:14 <fizzie> When that happens, I just clear the whole compiled snippet, and it will get recompiled the next time (if ever) it is ran.
23:24:32 -!- omniscient_idiot has quit (Nick collision from services.).
23:24:37 -!- mu has changed nick to Omnisicient_Idio.
23:24:40 -!- olsner has quit ("Leaving").
23:24:44 <fizzie> Anyhow, sleeping really now.
23:25:04 -!- omniscient_idiot has joined.
23:25:08 -!- Omnisicient_Idio has left (?).
23:25:23 -!- Jiminy_Cricket has quit (Nick collision from services.).
23:25:35 -!- Jiminy_Cricket has joined.
23:33:48 -!- oerjan has quit ("Good night").
23:45:34 <AnMaster> whoa I just got cfunge to compile using Open64