←2008-11-04 2008-11-05 2008-11-06→ ↑2008 ↑all
00:03:02 -!- sebbu has quit ("@+").
00:14:26 <jayCampbell> townsville is solidly blue
00:14:56 <jayCampbell> unfortunately there was only one vehicle to escort voters to the polls
00:15:18 <ehird> heh
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:01:26 <GregorR> 'lo
02:02:13 <ehird> usa elections amirite
02:03:01 <GregorR> Yuh
02:03:12 <GregorR> Some of us are Americans :P
02:04:06 <Slereah> DID YOU VOTE
02:04:08 -!- GregorR has set topic: 270 electoral votes to win. CNN says: OBAMA 174 ----- MCCAIN 49.
02:04:12 <Slereah> FOR THE OBJECTIVIST PARTY
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:06 <ehird> hey bitches
02:22:18 <ehird> pikhq: DID YOU VOTE FOR GregorR
02:22:20 <ehird> YES YOU DID
02:22:35 <Slereah> I voted for Rick Astley
02:23:20 <ehird> heh
02:23:40 <Slereah> And he won, too :D
02:23:46 <Slereah> Best act ever on MTV
02:23:54 <Slereah> It will be the 10th, IIRC
02:23:56 <ehird> lost the game
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:24:46 <Slereah> :D
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:11 <ehird> GregorR: um
02:46:16 <ehird> http://news.bbc.co.uk/2/hi/americas/us_elections_2008/7697829.stm
02:46:18 <ehird> use that
02:46:22 <ehird> it's the bbc, the bbc are cool
02:46:23 <ehird> :p
02:46:41 <GregorR> Bloody effing grall
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:01 <ehird> yeah
02:52:02 -!- lament has set topic: 270 erectoral votes to win. CNN/Google: SHRIMP 199/195 ----- HERRING 78/70.
02:52:03 <ehird> so useless :D
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:20 <puzzlet> huge erections going on?
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:06 <psygnisfive> WATCH IT
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:01:16 <ehird> OBAMA
04:01:19 <ehird> WPMMMMMMMMM
04:01:23 <ehird> WONNNNNN
04:02:28 <ehird> GregorR: :D
04:03:01 <GregorR> ^^
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:15:46 <Jiminy_Cricket> Good idea
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
06:16:55 <Jiminy_Cricket> lol
06:17:48 <oklopol> lickture ->
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:17:08 <bsmntbombdood> hey kids
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:22:09 <bsmntbombdood> oh
07:22:49 <bsmntbombdood> that's some shitty english right there
07:23:07 <Jiminy_Cricket> hehe
07:29:22 <psygnisfive> its not shitty at all
07:29:26 <psygnisfive> its perfectly fine and understandable
07:30:25 -!- KingOfKarlsruhe has joined.
07:35:17 <bsmntbombdood> psygnisfive: no it's not
07:35:27 <psygnisfive> yes it is
07:35:53 <psygnisfive> its a relative clause
07:35:58 <psygnisfive> how is it not fine and understandable?
07:36:33 <bsmntbombdood> it sounds like most christians would not retain hussien
07:37:22 <psygnisfive> ah, yes i can see what you mean
07:37:26 <psygnisfive> yeah there is ambiguity this is true
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:38:45 <Jiminy_Cricket> nothing, too.
07:41:37 -!- KingOfKarlsruhe has quit (Remote closed the connection).
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
09:59:13 <AnMaster> yay Obama! :)
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:30:19 <ehird> hi ais523_
14:32:09 -!- Judofyr has joined.
14:32:15 <ehird> lol that conservapedia article
14:32:18 <ehird> is amazing
14:51:30 -!- ehird has set topic: Obama won. Fuck yeah. | But Prop 8 passed. lol@usa.
14:58:42 <oklopol> what's prop 8=
14:58:43 <oklopol> ?
14:58:51 -!- jix has joined.
14:59:18 <omniscient_idiot> gay marriage
14:59:44 <oklopol> i see, and passing would be which way exactly?
14:59:50 <omniscient_idiot> I don't know
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:03 <oklopol> yeah okay.
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:02:05 <oklopol> but yeah californum
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:46:21 <ehird> hi ais523
15:47:13 <ais523> hi ehird
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:16 <oklopol> yeah we know
15:52:31 <ais523> so was I
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:15 <ehird> ^.^
16:39:17 <ehird> hmm
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:24 <ehird> hmm
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:37 <ehird> unheard of!
17:12:43 <psygnisfive> ey? what?
17:12:53 <ehird> psygnisfive: whaddya mean what
17:13:04 <psygnisfive> why will it burn in hell now?
17:13:13 <ehird> 'cause prop 8 is evil, presumably
17:13:27 <psygnisfive> well banning gay marriage is bad mkay
17:13:29 <psygnisfive> but
17:13:43 <psygnisfive> i dont see what oerjans talking about
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:05 <ehird> :p
17:14:10 <ehird> oerjan: you might wanna get that checked out
17:14:12 <ehird> sounds painful
17:14:26 <oerjan> psygnisfive: the irony is the theory that God vehemently disagrees with fundamentalist Christians
17:14:46 <psygnisfive> oh i see
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:31 <psygnisfive> whole new meaning to the term obamabots
17:36:45 <oerjan> there was an old meaning?
17:37:00 <psygnisfive> yeah
17:37:07 <psygnisfive> people who mindlessly supported obama
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:25 <psygnisfive> Soetoro is a cool name
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:41 <ehird> aka
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:33 <psygnisfive> british english? since when?
17:40:34 <pikhq> ais523: Is that such a *bad* thing?
17:40:37 <psygnisfive> his accent was not british
17:40:38 <ais523> I don't think so
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:09 <psygnisfive> autumn is acceptable parlance in america
17:41:19 <psygnisfive> less common, but not unheard of either.
17:41:30 <ais523> well, I suppose so
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:41:45 <ehird> *UNACCEPTABLE
17:41:51 <ehird> FASCIST BRITS :O
17:42:04 -!- Corun has joined.
17:45:39 <oerjan> http://www.irregularwebcomic.net/cgi-bin/poll.pl?a=7
17:46:09 <ehird> hah
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:03 <oerjan> s/agree/think/
17:48:04 <psygnisfive> lol
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:10 <oerjan> yes
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:34 <oerjan> also the Fuck yeah
17:49:43 <ehird> no, i put that there when obama won
17:49:43 <ehird> :p
17:50:43 <oerjan> the annoying internet
17:50:50 <ehird> yes
17:50:51 <oerjan> that needs to be an acronym
17:50:55 <ehird> TAI
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:17 <ehird> totally
17:53:19 <oerjan> i should imagine the republicans would be eyeing them even more jealously
17:53:55 <psygnisfive> you'd think
17:54:05 <psygnisfive> obama people dont have to be rational tho
17:54:18 <psygnisfive> http://daringfireball.net/2008/11/the_fantastic_monument
17:54:21 <psygnisfive> case in point
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:54:45 <psygnisfive> ehird: oh, no, they're worse
17:54:47 <psygnisfive> but that's a given
17:54:59 <psygnisfive> so its hardly worth mentioning
17:55:04 <psygnisfive> republicans are by default nutjobs
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:30 <psygnisfive> true
17:55:48 <psygnisfive> im just tired of hearing people pour their hopes and dreams into this one person
17:55:56 <psygnisfive> as tho hes some sort of magical panacea
17:56:09 <ehird> give them some slack, they've had bush for 8 years
17:56:42 <psygnisfive> true
17:56:46 <psygnisfive> but its like
17:56:50 <psygnisfive> my roommate was like
17:56:57 <psygnisfive> I VOTED FOR OBAMA BECAUSE OBAMA IS FOR CHANGE
17:56:58 <psygnisfive> OK
17:56:59 <psygnisfive> CHANGE
17:57:01 <psygnisfive> GRR
17:57:08 <psygnisfive> and when i asked him what sort of change he was like
17:57:14 <ehird> CHANGEY CHANGE
17:57:14 <psygnisfive> well i dont actually KNOW ok
17:57:15 <ehird> MORON
17:57:16 <ehird> >:D
17:57:22 <oklopol> :D
17:57:25 <psygnisfive> and im not exaggerating either
17:57:29 <psygnisfive> i wish i was
17:57:31 <psygnisfive> but thats what he said
17:57:37 <psygnisfive> he didnt even know
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:14 <oklopol> bye
17:58:21 -!- ehird has left (?).
17:58:33 <psygnisfive> wabi!
17:58:37 <psygnisfive> oh
17:58:39 <psygnisfive> no wabi
17:58:47 -!- ehird has joined.
17:59:02 <oklopol> bye
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:00:23 <psygnisfive> oklopol, has ais sussed the program yet?
18:01:00 <oklopol> psygnisfive: nope.
18:01:05 <psygnisfive> lame
18:01:09 <psygnisfive> we should add more stuff to the competition
18:01:12 <psygnisfive> its no fun otherwise
18:05:28 <oklopol> ehird: python says mccain
18:05:39 <ehird> oklopol: what algorithm
18:05:47 <oklopol> random.choice.
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:09:33 <psygnisfive> lolwut
18:09:43 <ehird> hah
18:10:15 <oerjan> that will _really_ screw up the predictions
18:13:40 <psygnisfive> i are tired :(
18:13:54 <psygnisfive> berb
18:24:50 -!- olsner has joined.
18:31:33 <AnMaster> ehird, are you ignoring me?
18:31:33 <oklopol> oerjan: i like that
18:31:40 <AnMaster> if not I got a question
18:31:44 <ehird> no, but i sould be
18:31:47 <ehird> *should
18:31:47 <ehird> and what
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:27 <ehird> len(s)
18:32:30 <AnMaster> ah
18:32:44 <ehird> len(x) = length of x, for any x where that makes sense
18:32:49 <AnMaster> ah ok
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:33:41 <AnMaster> :)
18:34:08 <ehird> np.
18:35:52 -!- asiekierka has joined.
18:35:55 <asiekierka> BOO!
18:36:18 <psygnisfive> LEAN!
18:36:32 <asiekierka> Well, what can a Polish foreigner say about the US election.
18:36:46 <psygnisfive> preferably nothing
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:11 <asiekierka> Now that's weird
18:37:19 <asiekierka> No-one cared about the polish election
18:37:25 <asiekierka> And everyone cares about the US one!
18:37:35 <psygnisfive> thats because poland isnt the worlds largest supporter of international terrorism.
18:38:28 <asiekierka> Also, how's Esolangs?
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:38:41 <ehird> that's rare.
18:38:45 <asiekierka> hm
18:38:51 <asiekierka> wh at is it
18:38:56 <ehird> it is cool.
18:38:57 <psygnisfive> ehird tell tell :D
18:39:01 <asiekierka> Tell or you'll die
18:39:11 <ehird> psygnisfive: i want to quickly hack up a test of it first to maake sure it might work
18:39:12 <ehird> but no fear
18:39:15 <ehird> i shall tell imminently.
18:39:16 <psygnisfive> ok
18:39:19 <asiekierka> 10...
18:39:21 <asiekierka> 9...
18:39:22 <asiekierka> 8...
18:39:23 <asiekierka> 7...
18:39:24 <asiekierka> 6...
18:39:26 <asiekierka> 5...
18:39:27 <asiekierka> 4...
18:39:29 <asiekierka> SPEE...
18:39:29 <ehird> also asiekierka just dequalified himself
18:39:31 <asiekierka> SPOO...
18:39:32 <ehird> by spamming
18:39:35 <ehird> *disqualified
18:39:36 <asiekierka> SPONE!
18:39:37 * asiekierka got kicked
18:39:39 -!- asiekierka has left (?).
18:39:44 <ehird> thank god.
18:39:45 <psygnisfive> ..
18:39:56 -!- asiekierka has joined.
18:40:05 <asiekierka> No, just kidding *cough*sadly*COUGH*
18:40:16 <AnMaster> ehird, what happened to optbot?
18:40:21 <ehird> AnMaster: not here? huh.
18:40:35 <psygnisfive> thank god
18:40:36 <ehird> stupid unstable POS
18:40:42 <ehird> psygnisfive: why?
18:40:45 <ehird> optbot is awesome.
18:40:48 <ehird> everyone loves optbot.
18:40:53 <psygnisfive> optbot was annoying
18:41:00 <psygnisfive> not as annoying as SeppBot in #compling but
18:41:01 <ehird> nobody else agrees with you.
18:41:08 <asiekierka> Wait, now there's thutubot back!
18:41:08 <ehird> so tough shit, i'm restarting it
18:41:08 <asiekierka> MURDER!
18:41:15 <asiekierka> THUTUBOT MURDERED OPTBOT!
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:33 <asiekierka> Uh-oh
18:41:47 <ehird> optbot: test
18:41:48 <optbot> ehird: it stars 'oko' and 'kok' this one does
18:41:53 <psygnisfive> hey guess what
18:41:56 <psygnisfive> michael crichton is dead
18:42:11 <ehird> cool.
18:42:23 <psygnisfive> he was a horrible author
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:17 * AnMaster googles
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:44:49 <AnMaster> heh
18:53:44 <ais523> ^bf +[]
18:53:44 -!- asiekierka has quit (Read error: 104 (Connection reset by peer)).
18:53:49 <fungot> ...out of time!
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:38 <asiekierka> ais523: My IRC crashed
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:55:17 <ais523> +ul (:^):^
18:55:18 <asiekierka> ha
18:55:19 <thutubot> ...out of time!
18:55:24 <asiekierka> now i understand the joke
18:56:38 <ais523> +ul (-)(-)((:S(|)S:(~)~a*^*)~a*^:^):^
18:56:39 <thutubot> -|--|---|-----|--------|-------------|---------------------|----------------------------------|------------------------------------------------------- ...too much output!
18:56:53 <ehird> ais523: awesome
18:57:07 <ais523> ehird: I think there are shorter ways, that was just idiomatic
18:57:35 <asiekierka> :)
18:57:47 <ais523> asiekierka: Unlambda or Underload?
18:57:52 <asiekierka> Unlambda.
18:57:56 <ais523> ok
18:57:58 <asiekierka> Unlambda this time
18:58:02 <ais523> do you know lambda calculus?
18:58:05 <asiekierka> Nno.
18:58:16 <asiekierka> 5th grade elementary
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:29 <asiekierka> Okay
18:58:34 <ais523> it's more an esolang basis than something you're taught at school
18:58:39 <asiekierka> ok
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:08 <ais523> (the tape in BF)
18:59:14 <asiekierka> In lambda calculus, you don't have variables...?
18:59:18 <ais523> yes
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:00 <ais523> so they're "impure"
19:00:11 <asiekierka> yes
19:00:19 <asiekierka> Okay, now the lambda calculus basis
19:00:26 <asiekierka> How does it work
19:00:31 <ais523> it's based on the concept of functions, first of all
19:00:31 <asiekierka> yes, only params to functions
19:00:36 <oerjan> +ul (-|)(~:S(-)~*~:^):^
19:00:38 <thutubot> -|--|---|----|-----|------|-------|--------|---------|----------|-----------|------------|-------------|--------------|---------------| ...too much output!
19:00:39 <asiekierka> yes
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:00:57 <asiekierka> Yeah.
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:13 <asiekierka> yeah.
19:01:26 <asiekierka> wait
19:01:34 <asiekierka> what do you mean by "generate functions at runtime, from templates"?
19:01:38 <asiekierka> yes, at runtime
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:44 <asiekierka> but what do you mean by templates
19:01:51 <asiekierka> ok, ais523
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:08 <asiekierka> ok
19:02:14 <asiekierka> So, what about the 99bob thing
19:02:18 <asiekierka> Yes.
19:02:25 <asiekierka> oh wait, ignore the Yes
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:23 <asiekierka> Yes
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:45 <asiekierka> And {} is the function
19:03:51 <ais523> in this syntax, yes
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:16 <asiekierka> Yes
19:04:19 <ais523> you want to use some kind of loop, normally
19:04:28 <asiekierka> But i mean, repeat at runtime
19:04:30 <psygnisfive> you do it recursively
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:05 <asiekierka> Ok
19:05:17 <ais523> you can still do recursion, but it's a bit trickier
19:05:28 <asiekierka> Hm.
19:05:35 <psygnisfive> recursion is possible in LC, just not conveniently
19:05:44 <asiekierka> Okay, psygnisfive.
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:51 <psygnisfive> YC is recursive.
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:12 <psygnisfive> ish
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:35 <AnMaster> thank you
19:06:41 <ais523> it'll give the function /itself/ as an /argument/
19:06:50 <asiekierka> Yes
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:27 <asiekierka> one of them is a function
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:39 <ais523> and yes
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:26 <asiekierka> yes
19:08:29 <ehird> AnMaster: There are bot frameworks for other langs
19:08:38 <ehird> But Python is good, so. :p
19:08:41 <asiekierka> I understand
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:33 <psygnisfive> ok guys
19:09:40 <psygnisfive> im off to my syntax seminar
19:09:41 <psygnisfive> see ya
19:09:42 <asiekierka> Make the one arg two args combined?
19:09:43 <ais523> consider this trivial function: lambda (a,b) {a+b}
19:09:46 <ais523> and bye psygnisfive
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:08 <asiekierka> Huh... yes
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:46 <psygnisfive> or as good as lambda(c) where c = <a,b>
19:10:50 <ehird> psygnisfive: shut up
19:10:54 <ehird> ais523 is trying to explain the basics
19:10:54 <ehird> to asiekierka
19:10:57 <psygnisfive> or any other shit like that.
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:06 <psygnisfive> good :D
19:11:06 <psygnisfive> bye
19:11:18 <asiekierka> and let's say b is five
19:11:23 <asiekierka> so the result is 2+5=7
19:11:30 <ais523> then if we give 5 to the resulting function, we get 7
19:11:45 <asiekierka> Ok
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:12 <asiekierka> ..What did i miss
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:21 <asiekierka> I stopped on <asiekierka> I see
19:13:31 <ais523> I stopped once I noticed you leave
19:13:31 <asiekierka> Ok
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:06 <asiekierka> :)
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:04 <asiekierka> mhm
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:36 <asiekierka> even ".a"?
19:15:44 <ais523> yes
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:02 <ais523> oerjan: you are mad
19:16:09 <ais523> so, a Hello World
19:16:11 <ehird> oerjan: wow
19:16:13 <ehird> xD
19:16:19 <asiekierka> .h.e.l.l.o.w.o.r.l.dr?
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:12 <asiekierka> ``````````.h.e.l.l.o.w.o.r.l.dr?
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:48 <ais523> and so on
19:17:53 <ais523> until you end up with `.hi
19:17:56 <ais523> which prints h and returns i
19:17:59 <asiekierka> What's i?
19:18:07 <ehird> identity
19:18:08 <ais523> identity function, I could have put anything there
19:18:09 <ehird> `ix = x
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:04 <ais523> whoops, no it doesn't
19:19:07 <asiekierka> Tested in the original unlambda interpreter
19:19:07 <asiekierka> v2
19:19:09 <asiekierka> helloworld\n
19:19:10 <ais523> it prints helloworld without the final newline
19:19:19 <ais523> it's a bit complicated how though
19:19:23 <ehird> asiekierka:
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:27 <ehird> should work
19:19:28 <ehird> i think
19:19:29 <asiekierka> Or
19:19:35 <ais523> then that .e prints e and returns .l
19:19:37 <asiekierka> ```````````.h.e.l.l.o.w.o.r.l.dri
19:19:40 <ehird> ah
19:19:41 <ehird> yes
19:19:44 <ais523> and so on
19:19:44 <ehird> that works
19:19:44 <asiekierka> :D
19:19:50 <ais523> so yes, ```````````.h.e.l.l.o.w.o.r.l.dri should work
19:20:07 <asiekierka> Okay
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:09 <asiekierka> i got this around
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:41 <asiekierka> sadly, brb
19:20:47 <asiekierka> [[going off for a sec]]
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:16 <asiekierka> back
19:23:18 <lament> that's cause it's based on combinatory logic, not lambda calculus
19:23:19 <asiekierka> you may continue
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:23:54 <ais523> which are predefined
19:23:57 <asiekierka> Yes
19:24:00 <asiekierka> i is the placeholder
19:24:01 <ais523> and which you can generate any lambda function out of
19:24:04 <asiekierka> Now what's the k and the s?
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:35 <asiekierka> ok
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:09 <asiekierka> yes
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:53 <asiekierka> yes
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:03 <asiekierka> Oh
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:18 <asiekierka> So it'll do both x(y) and y(y)
19:29:24 <asiekierka> And output their result as the final result
19:29:24 <ais523> no
19:29:33 <ais523> it'll do k(x)(y) and i(y), and apply one to the other
19:29:37 <ais523> k(x)(y) is x
19:29:39 <ais523> i(y) is y
19:29:43 <asiekierka> xy?
19:29:43 <ais523> so the output is x(y)
19:29:48 <asiekierka> oh
19:30:05 <asiekierka> so, anything else?
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:21 <asiekierka> Yes
19:30:36 <ais523> in Unlambda notation, btw, this would be ``s`kxi
19:30:42 <asiekierka> thanks
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:11 <ais523> ` changes to ``s
19:31:20 <asiekierka> yes
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 <asiekierka> mhm
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:29 <asiekierka> ...oh GOD
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:47 <asiekierka> ...scary, but neat
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:19 <asiekierka> yeah
19:33:27 <ais523> Unlambda has a few other operators just to make things a lot harder
19:33:39 <asiekierka> d and c in v1
19:33:43 <asiekierka> And some other in v2
19:33:44 <ais523> there's c, which gives imperative programmers nightmares, and d, which gives functional programmers nightmares
19:33:44 <asiekierka> right?
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:43 <ehird> mostly
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:35:45 <asiekierka> oh
19:36:19 <asiekierka> Which part of hell do you want: the d part or the c part? {{unlambda commands}}
19:36:19 <lament> i think ``skk is ugly
19:36:32 <lament> i is clearly more basic than s
19:36:37 <ais523> lament: so do I
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:36:55 <lament> ugly :(
19:36:57 <asiekierka> Oh
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:38:51 <asiekierka> ... I have this urge to go wtf
19:38:59 <asiekierka> But i'll try to understand it
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:47 <asiekierka> ok
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:36 <asiekierka> Unlambda's website uses <cont>
19:43:38 <ais523> ah, ok
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:45:12 <ais523> makes sense
19:45:47 <asiekierka> And fixing my thinking patterns
19:46:19 <ais523> `ci returns a continuation which returns the continuation's argument instead of the continuation
19:46:42 <asiekierka> ...pain
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:54:26 <asiekierka> No, i did some stuff wrong
19:54:40 <asiekierka> ``cii - ``i(`*i)i - `(`*i)i - `ii - `
19:54:45 <asiekierka> ... - i
19:54:46 <asiekierka> i mean
19:54:53 <asiekierka> not ... - `
19:54:55 <asiekierka> but ... - 1
19:54:57 <asiekierka> er
19:55:02 <asiekierka> but ... - i
19:56:33 <ais523> yes, that looks right
19:58:50 <AnMaster> unlambda?
19:58:54 <ais523> AnMaster: yes
19:58:55 <asiekierka> mmhm
19:59:07 <asiekierka> Now i'm trying to learn c
19:59:11 <ais523> I think asiekierka's beginning to see why I said c was basically impossible to explain
20:01:48 <AnMaster> ais523, eh?
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:20 <AnMaster> ah
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:05 <AnMaster> err
20:03:05 <AnMaster> c
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:27 <AnMaster> ais523, ah just call/cc
20:03:41 <AnMaster> well I don't understand call/cc but I'm beginning to
20:03:44 <AnMaster> after several weeks
20:03:45 <asiekierka> `ci = ii
20:03:48 <AnMaster> with scheme
20:03:48 <asiekierka> `cr = rr
20:03:57 <AnMaster> ais523, also what is d in the topic
20:04:00 <AnMaster> not the language I guess?
20:04:06 <asiekierka> it's unlambda chars
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:29 <AnMaster> ais523, or?
20:05:43 <ais523> yes, it's like case-by-case lazy evaluatoino
20:05:46 <ais523> *evaluation
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:40 <AnMaster> oh I can see that
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:07:54 <AnMaster> heh
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:08:46 <AnMaster> lots
20:08:56 <asiekierka> as in, really worthwhile and popular
20:08:59 <ehird> not many
20:09:04 <ehird> also, popular is irrelevant
20:09:05 <asiekierka> Does DOBELA count?
20:09:41 <asiekierka> brb
20:09:49 <AnMaster> doebla isn't popular afaik?
20:10:03 <asiekierka> yeah
20:10:04 <asiekierka> it's not
20:10:09 <asiekierka> but is it worthwhile
20:11:06 <AnMaster> hm
20:11:07 <asiekierka> hm?
20:11:09 <AnMaster> boolfuck?
20:11:11 <AnMaster> rube?
20:11:14 <AnMaster> err
20:11:15 <AnMaster> RUBE*
20:11:27 <asiekierka> Yeah, ok
20:11:32 <asiekierka> is DOBELA worthwhile?
20:11:41 <oklopol> ooooooooooooooooooooooooooooooooo
20:11:48 <AnMaster> no clue
20:12:06 <asiekierka> Check it out
20:12:43 <AnMaster> HQ9+
20:12:47 <AnMaster> well not really
20:12:53 <AnMaster> famous yes
20:12:55 <asiekierka> HQ9+ is worthwhile
20:13:00 <asiekierka> only it's worthwhile for 5 seconds
20:13:00 <AnMaster> asiekierka, famous though
20:13:01 <asiekierka> no more
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:27 <AnMaster> asiekierka, Banana Scheme
20:13:37 <fizzie> Whoa.
20:13:38 <fizzie> fis@eris:~/src/jitfunge$ build/jitfunge test.b98
20:13:38 <fizzie> hello
20:13:48 <AnMaster> fizzie, now that looks cool
20:13:50 <AnMaster> got a link?
20:14:01 <asiekierka> ^show
20:14:01 <fungot> echo reverb rev rot13 rev2 fib wc ul cho choo pow2 source help
20:14:06 <asiekierka> ^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:20 <AnMaster> fizzie, JIT to native code?
20:14:26 <fizzie> Yes, ia32.
20:14:36 <AnMaster> fizzie, why not use llvm to make it portable?
20:14:39 <AnMaster> also how does it do it
20:14:43 <AnMaster> mmap and mprotect?
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:08 <AnMaster> fizzie, ah right
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:07 <AnMaster> nice
20:16:07 <ehird> Cool.
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:22 <AnMaster> fizzie, oh god gracious
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:55 <AnMaster> I mean like a real bug
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:25 <AnMaster> and stackstack?
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:03 <AnMaster> without copying around
20:20:04 <AnMaster> ;)
20:20:12 <AnMaster> just messing with tlb
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:20:45 <AnMaster> :D
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:49 <ehird> what does t do?
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:24:48 <asiekierka> Nonono
20:24:52 <asiekierka> but it must decide by itself
20:25:08 <AnMaster> ais523, Obama already won...
20:25:11 <AnMaster> err
20:25:11 <ehird> asiekierka: yes
20:25:12 <AnMaster> asiekierka, ^
20:25:14 <ehird> if True:
20:25:17 <ehird> print 'Obama'
20:25:18 <ehird> else:
20:25:20 <ehird> print 'Ron Paul'
20:25:31 <ehird> ^ works it out for itself
20:25:33 <asiekierka> ... i hate you
20:25:34 <AnMaster> fizzie, hm
20:25:36 <ehird> using boolean logic.
20:25:39 <asiekierka> But i mean
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:41 <asiekierka> in unary numbers
20:26:53 <asiekierka> so, if 1 person voted on mccain and 3 on obama
20:26:54 <asiekierka> you get
20:26:56 <asiekierka> xxx|x
20:27:01 <AnMaster> fizzie, hm... is the whole thing ASM?
20:27:07 <ehird> AnMaster: unlambda
20:27:17 <AnMaster> ehird, this jit I mean...
20:27:25 <ehird> unlikely.
20:27:27 <ehird> i'm betting c
20:27:27 <fizzie> It's C++ mostly, except that of course the code-generation uses assembly.
20:27:29 <ehird> or c++
20:27:35 <AnMaster> hm
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:05 <ehird> AnMaster: dude
20:28:07 <ehird> he's evidently just started workinnnng on it
20:28:11 <AnMaster> ehird, yes
20:28:16 <ehird> i imagine it can't do anything more than hello world or maybe hq9+
20:28:16 <AnMaster> ehird, I'm still interested
20:28:29 <fizzie> Er, probably nowhere right now. Of course I could run it; but I expect a segfault or something.
20:28:41 <AnMaster> fizzie, right
20:28:47 <oerjan> ais523: it came up as one of the main cases in the 0x29A functional subset
20:29:03 <ais523> oerjan: what did?
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:44 <AnMaster> {insert rant about rants}
20:29:45 <fizzie> 3200 lines of C++ already, heh.
20:29:54 <AnMaster> fizzie, how much of that is ASM stuff?
20:30:03 <AnMaster> I mean outputting asm
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:21 <ehird> it's jit
20:31:24 <ehird> just modify the generated code
20:31:31 <AnMaster> yes but how exactly
20:31:35 <ehird> umm
20:31:37 <ehird> by writing to it?
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:05 <AnMaster> in case g is used
20:32:13 <ehird> no you don't
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:06 <ehird> :P
20:33:08 <ais523> just store the playfield somewhere separate for the purpose of g and p
20:33:11 <ehird> ais523: yeah
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:23 <ehird> :p
20:33:25 <AnMaster> ehird, see that was what I said
20:33:31 <ehird> AnMaster: and?
20:33:39 <AnMaster> my point exactly
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:09 <AnMaster> fizzie, nice
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:21 <AnMaster> s/can't /
20:35:53 -!- Judofyr has quit (Read error: 104 (Connection reset by peer)).
20:36:12 <AnMaster> fizzie, hm interesting
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:05 <AnMaster> scons? hm
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:09 <AnMaster> apart from -m32
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:22 <AnMaster> oops?
20:43:31 <AnMaster> gcc 4.1.2 btw
20:43:34 <fizzie> Hmm.
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:05 <fizzie> 4.3.2 here.
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:16 <AnMaster> was my command
20:44:23 <AnMaster> seems it ignored the cflags
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:45:59 <AnMaster> ok
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:37 <AnMaster> again for char
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:23 <AnMaster> oh right it does
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:28 <AnMaster> fizzie, i386? i686?
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:10 <AnMaster> ok
20:52:38 <AnMaster> jitfunge jittool
20:52:39 <AnMaster> hm?
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:52:46 <AnMaster> what is the difference?
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:17 <AnMaster> ah
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:36 <fizzie> (It's part of NASM.)
20:53:39 <AnMaster> 91+"!dlrow olleH">:#,_@
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:04 <AnMaster> fizzie, oh that segfaults?
20:54:06 <AnMaster> right
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> 0xf7f48012 in ?? ()
20:54:49 <AnMaster> (gdb) bt
20:54:49 <AnMaster> #0 0xf7f48012 in ?? ()
20:54:49 <AnMaster> #1 0x49811ca0 in ?? () from /lib/ld-linux.so.2
20:54:50 <AnMaster> #2 0xffa42b98 in ?? ()
20:54:52 <AnMaster> #3 0x08054749 in jitfunge::AsmFunction::operator() (this=0x841b058) at src/codegen.hh:274
20:54:56 <AnMaster> doesn't tell me anything
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:21 <AnMaster> @ doesn't take any arguments
20:56:23 <AnMaster> q does
20:56:44 <AnMaster> ah
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:58:41 <AnMaster> ah
20:59:36 <AnMaster> fizzie, that program must be seriously hard to debug
20:59:48 <AnMaster> also what is your goal?
20:59:51 <AnMaster> uttermost speed?
20:59:54 <fizzie> World domination.
20:59:59 <AnMaster> hah
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:00:50 <AnMaster> fizzie, hm not mycology?
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:37 <AnMaster> or "y says t isn't supported"
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:29 <AnMaster> and CXX and CXXFLAGS
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:03:50 <AnMaster> fizzie, :)
21:03:59 <oklopol> ...rest of the evening?
21:04:03 <ehird> bak
21:04:08 <oklopol> oh, it's only 23
21:04:17 <AnMaster> fizzie: scons: *** Do not know how to make target `clean'. Stop.
21:04:19 <AnMaster> ??
21:04:27 <fizzie> It's "scons -c".
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:11 <oklopol> e-hird, e-go, nuff said
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:39 <ehird> >:D
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:47:49 <fizzie> Hello, world!
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:34 <ehird> olol
21:51:37 <ehird> 5 page c++ error
21:51:45 <pikhq> ... Funging JIT?
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:54:53 <fizzie> Away for a time now.
21:56:22 -!- jix has quit ("CommandQ").
21:56:31 <AnMaster> fizzie, iirc you can't return from sigsegv handler right?
21:57:03 <ehird> yes you can
21:57:16 <AnMaster> ehird, well it would terminate you
21:57:18 <AnMaster> that is what I meant
21:57:21 <AnMaster> fizzie, also an issue
21:57:23 <ehird> AnMaster: considering SBCL does it
21:57:29 <ehird> and presumably jitfunge
21:57:30 <ehird> you are wrong
21:57:34 <AnMaster> $ type llvm-g++
21:57:34 <AnMaster> llvm-g++ is hashed (/home/arvid/local/llvm/bin/llvm-g++)
21:57:41 <AnMaster> scons: Building targets ...
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:45 <AnMaster> wtf :P
21:57:50 <AnMaster> it is in PATH
21:57:59 <ehird> AnMaster: iirc, scons doesn't inherit PATH
21:58:02 <ehird> for an actual reason that i forget.
21:58:04 <AnMaster> ehird, how silly
21:58:09 <ehird> no, it is justified
21:58:09 <AnMaster> ah there is a reason?
21:58:10 <AnMaster> strange
21:58:10 <ehird> i just forget how
21:58:11 <AnMaster> well
21:58:12 <ehird> :-P
21:58:16 <AnMaster> s/how/why/
21:58:18 <AnMaster> well anyway
21:58:19 <ehird> AnMaster: I think "scons 'PATH=$PATH'"
21:58:20 <ehird> should do it
21:58:33 <AnMaster> ehird, didn't help
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:12 <AnMaster> heh
22:02:14 <ehird> so there they have an internally-distributed, presumably automated build process
22:02:22 <AnMaster> ehird, yes
22:02:37 <AnMaster> it make sense for internally usage yes
22:02:40 <AnMaster> I agreed
22:02:48 <ehird> yeah.
22:02:49 <AnMaster> but, not for end users
22:02:55 <ehird> yse
22:02:56 <ehird> *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:41 <ehird> makes sense
22:03:44 <ehird> AnMaster: so set LD?
22:03:49 <AnMaster> ehird, it ignores it :)
22:04:09 <ehird> eat it
22:04:13 * AnMaster fixes the sconstruct file
22:04:20 <AnMaster> hm nop
22:04:22 <AnMaster> didn't help
22:04:52 <AnMaster> I tried to extend the same way that was already used
22:04:55 <AnMaster> but it doesn't work
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:05:52 <AnMaster> but not with scons
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:32 <AnMaster> ehird, it is an uggly hack
22:06:35 <AnMaster> I never said I liked it
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:39 <AnMaster> but I said it works
22:06:44 <ehird> AnMaster: What does uggly mean? Really ugly?
22:06:45 <AnMaster> that was my point
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:24 <AnMaster> fizzie, ok....
22:07:29 <AnMaster> that is again crazy
22:07:32 <ehird> AnMaster: no
22:07:33 <ehird> no it's not
22:07:39 <ehird> ld is a certain linker
22:07:44 <AnMaster> LD=foo
22:07:48 <ehird> AnMaster:
22:07:50 <ehird> that is incorrect
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:12 <ehird> *for
22:08:18 <AnMaster> LD=llvm-ld
22:08:20 <AnMaster> in this case
22:08:25 <ehird> AnMaster: in that case.
22:08:32 <ehird> but what about LD=magic-corp-foobazing-linker?
22:08:32 <AnMaster> and yes it is an LD
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:44 <AnMaster> also
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:04 <AnMaster> ehird, ok point taken
22:09:13 <AnMaster> it might be a better name
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:09:36 <AnMaster> heh
22:10:09 <ehird> ...
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:10:51 <ehird> oerjan: wut
22:10:53 <AnMaster> why?
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:05 <oerjan> because it's THERE
22:11:17 <AnMaster> oerjan, what is?
22:11:34 <oerjan> "arvid", i presume
22:11:45 <AnMaster> oerjan, yes what about it?
22:11:50 <AnMaster> you could find it using google
22:11:53 <AnMaster> or whatever
22:11:55 <ehird> arvid norlander
22:11:58 <ehird> see: cfunge source.
22:12:03 <AnMaster> see? it is public
22:12:07 <fizzie> Hee, now it can run mycology without segfaulting.
22:12:08 <oerjan> bah
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:39 <fizzie> Not very far, though.
22:12:43 * oerjan tosses his list of things to blackmail AnMaster for
22:12:46 <AnMaster> ehird, heh. sorry not listed
22:13:01 <AnMaster> at least not under my name
22:13:29 <AnMaster> fizzie, well 7! would be easy to fix
22:13:32 <AnMaster> just implementing !
22:13:40 <AnMaster> and ! is kind of trivial
22:13:52 <fizzie> I have implemented !, but apparently not right.
22:14:00 <AnMaster> ok I take that back
22:14:05 <AnMaster> trivial when not done in ASM
22:14:11 <AnMaster> fizzie, it is logical not
22:14:12 <fizzie> "7!. a, 0@" does print a 0 here, but that's not surprising, since it constant-folds that.
22:14:20 <fizzie> I know what it is.
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:09 <AnMaster> would make such stuff easier
22:15:45 <fizzie> I don't really think so. The generated code with/without constant-folding is completely different, after all.
22:16:33 <AnMaster> fizzie, hm ok
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 <AnMaster> ais523, ah
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:53 <ais523> *idea
22:17:59 <oerjan> but i know some basic rules
22:18:04 <AnMaster> fizzie, tracing output dumping stack at each step?
22:18:08 <AnMaster> or is that impossible?
22:19:00 <AnMaster> ais523, how can you loose more money than you already bet?
22:19:06 <AnMaster> ?!
22:19:11 <ais523> AnMaster: normally you have the choice of folding or betting mroe
22:19:13 <ais523> *more
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:28 <AnMaster> odd
22:19:31 <ais523> there is sometimes but not usually
22:19:42 <AnMaster> such a strange game
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:06 <AnMaster> and a lot more of those
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:17 <AnMaster> and a few more of those
22:22:27 <fizzie> Is this with what compiler?
22:22:35 <AnMaster> fizzie, gcc 4.1.2
22:22:41 <fizzie> Ah. With some optimization flags?
22:22:41 <AnMaster> -O2 -Wall
22:22:44 <fizzie> Right.
22:22:48 <fizzie> Without -O2 it won't catch all that.
22:22:54 <fizzie> Will fix at some point.
22:22:57 <AnMaster> fizzie, I also tried this:
22:22:58 <AnMaster> CXXFLAGS="-march=k8 -msse3 -m32 -O3 -Wall -Wextra -ftracer -fweb -frename-registers -ggdb3 -pipe"
22:22:59 <AnMaster> :D
22:23:03 <AnMaster> yes it is insane
22:24:12 <AnMaster> but -ftracer is actually useful
22:25:32 <ais523> -ftracer?
22:25:53 <AnMaster> -ftracer
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 <AnMaster> do better job.
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:25:55 <AnMaster> ais523,
22:26:15 <AnMaster> I tested it and for example it replaced something like:
22:26:28 <AnMaster> movp %al,%edx
22:26:38 <AnMaster> mov %edx,%eax
22:26:39 <ais523> AnMaster: I know what tail duplication does
22:26:40 <AnMaster> with a single one
22:26:53 <AnMaster> I don't remember the details
22:26:55 <ais523> it didn't just do that, it changed the target of a goto too
22:27:12 <AnMaster> ais523, hm?
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:32 <AnMaster> ais523, well yeah?
22:27:38 <AnMaster> I think I did in my test
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:28:49 <AnMaster> yes
22:29:14 <AnMaster> ais523, I also used -fweb in both cases
22:29:19 <AnMaster> and -frename-register
22:29:24 <AnMaster> but
22:29:29 <AnMaster> the only change was -ftracer
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:02 <Deewiant> fizzie: probably
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:36:44 <AnMaster> fizzie, heh
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:43 <AnMaster> fizzie, 64x64 hm, small
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:03 <AnMaster> fizzie, righta
22:38:04 <AnMaster> right*
22:38:07 <AnMaster> and an offset
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:37 <AnMaster> heh
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:16 <fizzie> Very pessimal.
22:43:22 <fizzie> But not most pessimal.
22:43:23 <AnMaster> a
22:43:25 <AnMaster> ah*
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:02 <AnMaster> fizzie, true
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:45:50 <AnMaster> oh and x86_64 ;P
22:45:56 <AnMaster> sure on x86 it may be slower
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:22 <AnMaster> fizzie, I said fixed mappings
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:19 <AnMaster> fizzie, hm
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:53:53 <fizzie> Must sleeps now.
22:54:01 <AnMaster> um
22:54:12 * oklopol sleeps first!
22:54:12 <oklopol> ->
22:54:22 <AnMaster> fizzie, cya
22:54:27 <AnMaster> fizzie, and really that is a bad idea
22:57:19 <AnMaster> fizzie, fyi:
22:57:21 <AnMaster> v >a"u",,0@
22:57:21 <AnMaster> >"a",0|
22:57:21 <AnMaster> >a"d",,0@
22:57:24 <AnMaster> in the version I have
22:57:28 <AnMaster> that prints aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
22:58:23 <fizzie> Prints "ad" here.
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:00:25 <AnMaster> fizzie, yep
23:00:29 <AnMaster> was just testing
23:01:05 <AnMaster> fizzie, ad here too now
23:01:32 <AnMaster> fizzie, question:
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:17 <AnMaster> "hello world"0_ p
23:02:22 <AnMaster> and that p writes into hello world
23:02:25 <AnMaster> or something such
23:02:30 <AnMaster> then next time you enter that
23:02:53 <AnMaster> fizzie, so my question is, how do you update in the middle of constant folded paths
23:02:59 <AnMaster> without scanning everything
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
←2008-11-04 2008-11-05 2008-11-06→ ↑2008 ↑all