00:05:58 Hello! 00:07:52 Hell no. 00:20:21 http://www.space-invaders.com/rubikdown.html 00:20:22 O_o 00:23:43 that's pretty easy once you know how to solve a rubik's cube 00:34:57 except not all color combinations are legal 00:38:38 once you know how to solve it, you pretty much know what's legal 00:39:27 ah ;) 00:39:29 :P 00:39:36 so what usually goes on here? 00:40:36 discussion about languages, usually 00:40:49 excellent. :D 00:40:58 Speaking of languages... 00:41:10 continuations: 00:41:20 Good, bad, or what? 00:41:33 (and continuated exception handling... whatever that's called) 00:42:45 never used 00:42:56 but i find it a useful concept 00:43:03 and a great toy used excessively 00:43:47 I've never really gotten into most functional languages, so I never use them, and in fact, never even heard of them `till I started doing language design research 00:45:05 i learned about functional programming here, pretty much :P 00:45:08 (iirc) 00:45:43 :P 00:47:23 hmmm... 00:47:32 well, coroutines are simply awesome... and they use a form of continuation. 00:47:52 coroutines? 00:47:55 continuations are pretty obligatory in order to actually implement threading 00:48:01 here's what I've got on Sophia so far, for those interested : http://deadbeefbabe.org/paste/4111 00:48:31 coroutines are procedures that can return multiple outputs and receive multiple inputs. 00:48:37 -!- sebbu has quit ("@+"). 00:49:02 a basic example would be processes running in an OS... 00:50:42 well, I've had a few language ideas about returning multiple values, but I think you're talking about something a little bit different :P 00:50:55 heh, most likely,. 00:51:10 Figs you mean returning multiple values simultaneously? 00:51:16 ...let me write up an example in Python. Familiar with it? 00:51:23 yeah 00:51:26 no 00:51:35 (yeah@oklopol, no@SIB) 00:51:45 with coroutines you return something and leave the function in a state where it expects more arguments 00:51:56 heh... if you've ever dealt with any kind of programming language... basic Python won't take but a few seconds to figure out. 00:52:11 I do most of my programming in C++ 00:52:19 I can probably take a guess at it :P 00:52:40 so... you have a statement in a funtion that is kinda like next_arg=return_and_wait(5); 00:52:41 it basically looks like pseudocode 00:53:06 so, it returns from the function normally, but the next given argument is given to next arg 00:53:26 so, it returns the continuation implicitly 00:53:35 O.o 00:53:36 ok 00:53:39 s/next arg/next_arg 00:53:43 I'd think of that as returning a function 00:54:06 (which I've done things similar to, but not exactly that) 00:54:18 I can see how that'd be useful 00:54:24 kinda like that, though it's usually not returned, but the function itself changes into the new function, that now is the continuation waiting for more parameters 00:54:45 hmm 00:55:00 (correct me if i'm wrong, i've never used yield, which i believe is return_and_wait) 00:55:07 If I was picking a syntax for it based on the way you guys've just described it, I'd do something like 00:55:08 (yield being python) 00:56:06 f=f(x); 00:56:13 f(y); 00:56:29 where f is a function returning a function type :P 00:57:00 ...it's probably the same thing I'd imagine. 00:57:28 Figs the problem with that is f(x) will actually return a value, not just the continuation 00:57:59 I come from C++ remember? :P 00:58:13 reference arguments as return path :P 00:58:23 but eh 00:58:28 ? 00:58:35 return path? 00:58:52 void triple(int& x) {x=3*x;} 00:59:05 well, for lack of a better term 00:59:28 if you have ever done C/C++ programming 00:59:39 i've done mostly c/c++ programming 00:59:43 ok :) 01:00:01 but, returning is a better way, usually 01:00:13 in a fair number of cases, yeah. 01:00:28 but you can do it that way, if you have to 01:00:41 one of the things I thought about for Creole (my language) was to do this: 01:00:49 struct Z = f(x); 01:01:18 if(Z.foo) {bar();} 01:01:41 now what's that mean? 01:01:44 with f returning multiple values 01:01:57 ah 01:01:58 i see 01:02:09 I haven't tried to impliment that yet 01:02:15 so I don't know if it is a good idea or not :P 01:02:28 I have returned 01:02:30 it's quite clever 01:02:42 ...I like it... and I've actually found practical uses for it. 01:02:42 though i'd not do it exactly like that 01:02:50 ..in a text-based game :) 01:03:16 well, using names for returning makes sense in that you usually have names for the args 01:03:18 how could you do it, oklopol? 01:03:21 *would 01:03:54 Here's a coroutine in Python : http://deadbeefbabe.org/paste/4112 01:04:22 "bullet" supports multiple named return values from a function: http://www.nonlogic.org/dump/text/1174856252.html 01:04:25 i would do it exactly like that. 01:04:52 ... 01:05:16 do subdiv[val1:a val2:b] to [subresult:sub divresult:div] 01:05:24 in def main 01:05:27 right? 01:05:47 * SevenInchBread tries his best to stomach the type declarations to figure out what we're talking about. 01:06:18 heh, you'd hate the stuff I'm working on then, 7" 01:06:25 oklopol: that is how they work 01:07:05 ...I probably would. 01:07:19 personally, I find [ ] for blocking to be hard to read, but that's just because I've grown up on {}'s and () 01:07:49 RodgerTheGreat i assume you'll do 'struct lambdas' as i call them like Figs just showed... i mean that struct is just a hash table 01:08:03 in bullet, parameters are given in the form type:name and returned values are extracted in the form storeValueName:ReturnedValueName 01:08:03 I think []'s are easier to follow without "losing them"... it is a little weird though. 01:08:24 with Sophia, I just made everything lazy... so all ()'s are essentially blocks. 01:08:36 mm 01:08:53 i don't know why i assume that. 01:09:06 even non-()'d expressions are blocks. 01:09:08 oklopol: it is one approach that might work 01:09:22 heh, my whole language is blocks @_@ 01:09:32 and interfaces 01:09:52 I still have to figure out a lot of the syntax though 01:10:06 bullet doesn't really need interfaces, because it's non-OO 01:10:18 Figs, if everything is blocks... you could probably afford to get rid of a block syntax. 01:10:21 no, it has interfaces :P 01:10:39 heh 01:10:40 def subdiv[double:a double:b] returns [double:sub double:div] 01:10:43 that is an interface 01:10:54 two inputs (a,b) 01:11:04 and two outputs 01:11:07 (sub,div) 01:11:10 it's a function 01:11:12 unless I am misreading? 01:11:12 though 01:11:18 io is a good example of a language that doesn't eagerly evaluate function arguments - http://iota.flowsnake.org/ 01:11:18 yes. Functions have interfaces :P 01:11:20 ok, If that's how you define interfaces. I think of them how Java uses interfaces 01:11:24 Common Lisp macros are very similar. 01:11:40 abstract base classes (ABCs) in C++ then 01:11:47 ok 01:11:51 gotcha 01:12:21 the thing I've found while I've been working on Creole is that at some point, everything breaks down to actions. 01:12:29 it doesn't matter what language you're in. 01:12:36 be it Lisp or Fortran 01:12:45 or something in-between 01:12:47 define action 01:12:56 statement; statement; statement; 01:13:20 -nod- in all my experience with language designing... everything breaks down to the primitives. 01:13:28 ...my limited experience, mind you 01:13:31 well, that is one way to abstract any language 01:13:41 but many languages do not have statements 01:13:48 like that 01:13:50 Lisp, for example. :) 01:13:57 well, yeah :) 01:14:00 Lisp has statements :P 01:14:09 though not the "blah;" 01:14:11 form 01:14:15 well... it has macros... which can sometimes look an awful lot like statements. 01:14:16 the main reason I designed functions in a name [params][unloads] style rather than unloads=name[params] style is that rather than getting really long lines of nested functions for some operations, you just get a series of code blocks one after another 01:14:51 not sure I follow that 01:14:54 Figs it's all about abstraction, you can think of everything as functional as well, it's just not every language is inherently the "action" kind 01:14:55 explain? 01:15:03 Smalltalk, from what I can tell... has no statements. and currently Sophia executes as one huge expression. 01:15:44 unless you're doing something like prolog 01:15:51 then you're doing statements... essentially. 01:15:57 prolog is more like declarations 01:16:01 RodgerTheGreat: i thought that might have something to do with it 01:16:05 well 01:16:05 bullet will never have something like Length[Mid[Input[0],5,8]] 01:16:23 there's probably a better way of explaining 01:16:28 because that looks nasty and matching brackets is hard to read 01:16:50 actually that's one thing i thought you might've not thought through :P because... well i like the nested chaos 01:16:57 so, how do you do Length(mid(input(0),5,8)? 01:17:12 int rtn 01:17:28 do input[0] to [rtn] 01:17:35 mmm 01:17:39 interesting 01:18:04 do mid[rtn,5,8] to [rtn] 01:18:18 hmm 01:18:20 now, maybe my problem is I really don't see that big a difference between functional programming and proceedural programming... 01:18:21 do length[rtn] to rtn[] 01:18:31 that's really loose, though 01:19:01 I'm ignoring var types and proper return names because I just made those functions up and this is an example 01:19:07 do mid[rtn,5,8] to [rtn] -> do mid[input,5,8] to [rtn] i suppose 01:19:37 hmm 01:19:46 how are you combining input[0] with 5 and 8 for mid? 01:20:05 is oklotalk 'Length(mid(input(0),5,8)' is written '3' PLUS it never fails! 01:20:08 *in 01:20:18 hmmm... what does mid do? 01:20:22 substr 01:20:26 ah. 01:20:36 well, remember, in bullet "do foo[arg:x] to [y:val]" is equivalent to the C-style "y=foo[arg];" 01:20:37 let's see.... 01:21:03 I gave a bad initial example... 01:21:07 and what's input[0] ...like stdin? 01:21:13 does it matter? 01:21:14 :P 01:21:16 input[0] is input's length 01:21:19 in bullet 01:21:23 ah. 01:21:28 since arrays and strings are 1-indexed 01:21:29 it doesn't. It's just a random function 01:22:18 so... how exactly are you combining input[0], 5, and 8? 01:22:23 for mid? 01:22:31 or can you not do that as a single statement? 01:22:32 I JUST MADE THAT FUNCTION UP 01:22:42 you're overanalyzing a poor example 01:22:43 ... :) 01:22:50 eep :P 01:22:53 I don't care what it does 01:22:59 just how your interfaces connect 01:23:14 let's go back to this better explanation: 01:23:15 in bullet "do foo[arg:x] to [y:val]" is equivalent to the C-style "y=foo[arg]; 01:23:22 ok... 01:23:23 so 01:23:33 first_input=input[1]; do mid[first_input,5,8] to [sub:ret]; Length(sub); i guess 01:23:47 wouldn't it be 01:24:02 input[1] to [first_input:notsureonthis]; 01:24:08 no 01:24:11 no? 01:24:17 Maybe. 01:24:23 do* 01:24:26 do to 01:24:29 assuming foo is "def foo[int:x] returns [int:val][val = x+x] 01:24:29 do input[1] to [first_input] 01:24:46 BUT var = value, if value needs no function call 01:24:49 this is how i see it 01:24:56 I thought input[1] was a function O.o 01:25:09 oh 01:25:14 then it'd been how you said 01:25:34 something I read a while ago about making languages easy to teach 01:25:45 is to make visually distinct syntax for each concept 01:25:53 what was input[1] supposed to be then? 01:25:55 array? 01:26:03 inputs in an array :P 01:26:08 whatever they are... 01:26:09 this was the problem with the example: I wasn't specifying return types and input types, so it's impossible to tell if foo[x] is supposed to be an array index or a function 01:26:11 ...hmmm, if that were true... Perl would make a great educational language. 01:26:16 input(0) in the first example 01:26:17 that's why they work how they do 01:26:41 and why my example, I will say again, sucked 01:26:48 Rodger, no offense meant, but you should either (a) combine functions and arrays or (b) make the syntax distinct ;) 01:27:02 they *ARE* distinct. 01:27:08 then I'm confused :P 01:27:33 the syntax is distinct... function: do <> to <>, array var=array[index] 01:27:42 s/array/array: 01:27:42 when I actually write code, they're distinct. They aren't when I give pseudocode to try to explain how something works and you interpret it as real code 01:28:02 (i'm not sure about the syntax though :)) 01:28:12 this is kind of fun :D 01:28:25 whee. I'm not used to talking to people who find this stuff interesting :) 01:28:31 just look at the example code in the spec so far- it is all correct 01:28:35 hmmm... I'm not sure visually distinct concepts makes for good educational languages. 01:28:50 Scheme is really good for learning... and it's completely and utterly uniform 01:29:06 Figs my thoughts exactly when i first came here 01:29:14 Scheme ownz0rz. 01:29:15 Perl makes sure that every concept is visually distinct... but it's consider a complete mess to start off on. 01:29:22 yeah, I'm glad I found this channel 01:29:32 hi, Sukoshi! Long time no see. 01:29:44 you are wrong there... [03:21:12] Maybe. 01:29:44 Who in their right mind thinks that making each different programming concept visually distinct helps? 01:30:00 That's the very *antithesis* of abstraction! 01:30:27 Sukoshi: have you seen the language I'm working on? 01:30:37 http://www.nonlogic.org/dump/text/1174856252.html 01:30:37 RodgerTheGreat: Nopes. 01:30:38 no 01:30:46 sukoshi: link. 01:30:48 thanks, oklopol 01:30:50 making syntax for different operations visually distinct 01:30:50 :P 01:30:51 I've been cramming (and am, and will be) AP test stuff, mostly Physics. 01:31:19 I plan on trying to build a magnetic engine after the AP test based on an idea I got. 01:31:49 neato 01:31:59 our own Tesla 01:32:06 let me see if I can find the examples from before... 01:32:15 Did Tesla make a magnetic engine? 01:32:46 ...I actually like some of Perls ideas... and I like a good deal of Schemes ideas too... but are very different. 01:32:59 s/but/both 01:33:11 I haven't gotten far in learning perl 01:33:17 but that's because I haven't spent much time at it 01:33:21 (about 15 minutes?) 01:33:27 what I've seen so far, I've liked 01:33:44 I had a hard time working with message-passing OOP after having fun with CLOS for so long. 01:34:57 ok, here was the example I found that made me think distince syntax was a fairly good idea 01:35:05 note, I haven't programmed in the language 01:35:27 A(B) supposedly has 5 possible meanings in Turing 01:35:40 [1] call function A and pass parameter B 01:35:57 [2] dereference pointer B to access an object in collection A 01:35:57 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 01:36:06 [3] access the Bth element of array A 01:36:20 [4] construct a set of type A with a single element having the value of B 01:36:37 [5] create a one-letter substring of the string A consisint of its Bth character 01:36:52 *consisting 01:36:55 ...I think a lot of languages get a little too caught up in their ideology... like Scheme. Lisp and Smalltalk create religious fanatics. 01:37:04 lol 01:37:09 Paul Graham? 01:37:21 ...something like that. 01:37:28 Python and its readability creates fanatics too. 01:38:13 ...while I like all of their ideas... I don't like how forceful they are about their philosophy. 01:38:25 I think there are fanatics of every language. 01:38:30 that's part of what's driving my development of Creole 01:38:36 Although the ASM fanatics get sparer every generation. 01:38:39 the fact that "There are many ways to do things" 01:38:59 Languages like Perl are nice because it doesn't force you to succumb To The Grand and Absoltute Plan. 01:39:10 I think it's already been done though 01:39:15 I can't remember what 01:39:18 Tcl? 01:39:26 That's Perl's motto 01:39:30 There's more than one way to do it. 01:39:54 One of Python's mottos is "There should be one obvious way to do it". 01:39:57 well, bullet's design philosophy is the creation of failsafe code... I'm not sure that's really an ideology that'll incite fanaticism, just fanaticism for the compiler-writers. :) 01:40:10 hehe 01:41:05 it's just a feature of the language... 01:41:17 I like languages that are fun to play around with... and let you do what you want. The first language I learnt was Python - and I loved it until I discovered other languages. Now Python seems kind of conservative and bland... but I still use it the most because I know it really well. 01:41:30 some of the things that I'm trying to do with my language (dunno how well I'll succeed) are: (1) flexibility for extension, (2) good error handling and debugging, (3) documentation after I finish designing the syntax 01:42:14 I think error handling is one of the keys to building a really good language. 01:42:26 Few languages focus on error handling as well as they should. 01:42:27 i've made one language while we've been talking :) 01:42:33 lol 01:42:35 ;) 01:42:36 well.... not thoroughly 01:42:48 Sophia's Grand Principle of Construction is: (1) THE AWAKENING OF THE ABSOLUTE MODE OF THOUGHT (2) A LANGUAGE THAT CREATES ORGASMS WHILE DOING THINGS VERY VERY WELL UNDER A SINGLE AND ALL CONSISTENT IDEAL 01:43:06 wow 01:43:08 lol 01:43:11 now THAT's a language. 01:43:21 :P 01:43:32 * RodgerTheGreat tries to remember his last coding-induced orgasm... 01:43:38 ... 01:43:54 am I in #esoteric or #ecstacy ? :P 01:43:58 I'm kinda drawing a blank here, SevenInchBread 01:44:10 ...Homespring is an excellent language - which has already done this: http://web.archive.org/web/20041011092543/http://www.rpi.edu/~bindej/hs.html 01:46:11 ROFL! 01:46:13 ;) 01:46:51 homespring is indeed fun 01:47:05 "Because programming isn't like a river, but it damn well ought to be!" 01:47:35 Well, CLers are said to most proficient when under acid. 01:47:58 Because even though the underlying brain pattern changes, they can abstract the language to work with their new brain patterns. 01:48:11 lol 01:48:21 eh, makes sense :P 01:48:26 that sounds frighteningly accurate 01:48:57 ...but now Sophia is the best language to use for anything ever... even though it's incomplete and kind of completely unspecified. 01:48:59 talking about orgasms, http://www.vjn.fi/pb/p115251624.txt i'm pretty sure i had a boner when i finished this 01:49:05 not sure about the rest of the night 01:49:39 that's pretty scary, dude 01:49:54 have fun at the international obfuscated C coding contest :) 01:49:57 :P 01:50:00 but as they say, "enjoy what you do"... 01:50:31 i just bruteforced the seeds for the functions and obfuscated manually for 3 hours 01:50:31 ...I once tried to obfuscated Python... 01:50:36 it didn't work well. 01:50:42 oh yeah it does 01:50:46 well... yeah. 01:50:47 python loves to be obfuscated 01:50:50 but not as well as like... Perl 01:51:12 most of Python obfuscation comes in the form of syntatic substitutions for very very simple things. 01:51:48 http://www0.us.ioccc.org/1985/lycklama.c 01:52:08 haha 01:52:11 nice 01:52:21 found that on ioccc 01:52:27 couldn't find the ball program :\ 01:52:32 I figured from the URL 01:52:43 well, in python you can redefine variable types... so you can have type and value separate... and that gets really kinky 01:53:05 http://www0.us.ioccc.org/1985/lycklama.c 01:53:08 what's that do? 01:53:18 I don't know. 01:53:30 mine was hello world 01:53:35 in case i didn't mention 01:53:54 it has a non obfuscated version in the comment 01:54:33 I think it scrolls text to the right? 01:54:39 ? 01:54:47 what 01:54:48 ? 01:54:51 compile it and see :P 01:55:06 hmm 01:55:07 based purely on the defines, it could do a lot of things... 01:55:10 that's a define thingie 01:55:26 i once had the trouble of manually demacroing such a program 01:55:33 it usually gets quite simple 01:55:43 i mean the lycklama is a define thingie 01:56:01 goto 01:56:07 doesn't compile for me :P 01:56:07 <3 01:56:26 but I know what's wrong... I think 01:56:26 i'll try 01:57:17 nope... 01:57:18 doesn't work 01:57:22 gcc dies 01:57:30 invalid preprocessing directive #o 01:58:27 http://www.vjn.fi/pb/p514653524.txt 01:58:27 and now 01:58:36 read(a,b,c,d), what's that? 01:59:32 it defines a part of the rest of the defines, something c++ seems to deny 02:00:07 yeah 02:00:14 I thought C supported it 02:00:21 but @_@ 02:00:49 http://www0.us.ioccc.org/1985/Makefile 02:00:51 makefile for it 02:01:56 I assume it's part of a set of these 02:03:57 I tried manually translating all the defines for that program, and I just get a mess 02:04:18 hmm 02:04:19 :\ 02:04:31 *shrug* 02:04:44 have you guys read the Crenshaw "Lets make a compiler!" series? 02:04:49 those last two lines #o garbage.... 02:04:53 just don't make sense to me 02:05:02 unless I don't understand what define does 02:05:03 -!- ShadowHntr has quit ("End of line."). 02:05:52 nope 02:05:57 sounds interesting 02:06:23 I found it from bloodshed.net 02:06:48 link us up 02:07:08 looking for it 02:07:15 I have it downloaded and can reupload if I can't find it 02:07:42 got it 02:07:42 http://iecc.com/compilers/crenshaw/crenshaw-txt.zip 02:07:48 feel free to use my team's pastebin at nonlogic.org/dump 02:07:54 ah 02:07:54 * RodgerTheGreat downloads 02:07:59 I usually use rafb.net/paste 02:08:02 but thanks 02:08:16 hmm.... does someone have a dismacroer for c? 02:08:21 I used to use rafb until we went ahead and coded our own. :) 02:08:26 ;) 02:08:52 i tried to use my one-step thue but... it does not work of course 02:09:02 how far along are you guys in actually building compilers for your languages? 02:09:11 i've never made a compiler 02:09:29 Figs: this looks awesome! thanks, man- I'm sure it'll be fascinating reading 02:09:33 i've made prolly 50 or something interpreters 02:09:39 warning though, it is in pascal :P 02:09:42 it might push a real Bullet compiler closer to existence 02:09:42 -!- mvivian has joined. 02:09:47 eew 02:09:54 but it is easy enough to read 02:09:54 god c is beautiful <3 02:09:55 well, I'm sure I can still learn from it 02:10:26 hmm... guess i'll do it manually 02:10:50 c is an ass ugly language that only survives because of it's legacy codebase and a dearth of viable alternatives 02:11:05 the target language the guy is using is 68000 asm 02:11:14 awesome 02:11:24 68k's have a pretty clean instruction set 02:11:51 c is the most beautiful language i know 02:11:51 pascal +68k asm... sounds like the early days of the macintosh 02:11:54 unfortunately, my assembly skills are next to nothing :P 02:12:11 mine are next to yours 02:12:13 I've dabbled with FASM before I got good at C++... which was years ago 02:12:40 that didn't come out right :P 02:12:45 let me rephrase... 02:13:33 I tried learning Fasm years ago before I got sufficiently proficitent in C++ to really see how things fit together from the low to high level. 02:14:02 now... manually fix the typoes I just made and you'll have a fairly good description ;) 02:14:19 I'm reading these with less 02:14:28 since notepad doesn't like the formatting 02:14:58 (yes. I'm still on Windows.) 02:15:05 (please don't kill me ;p) 02:15:38 seems like they have a link to a book on parsing 02:15:38 http://www.cs.vu.nl/~dick/PTAPG.html 02:15:39 request granted 02:15:41 but I haven't read it 02:17:55 c.... beautiful? 02:18:45 yeah 02:21:39 *shrug* 02:21:44 C can be nice... 02:21:52 much of the time, I don't think it is 02:21:54 but it can be ;) 02:22:26 right now, I'm working on my rule-parser system 02:22:56 eventually, my compiler will be able to have rules handed to its parser stage 02:24:12 if I get this to work :P 02:24:24 out of curiousity 02:24:31 have any of you blogged about your language design? 02:26:01 ....nope. 02:26:07 * SevenInchBread just got back from obfuscating some Python. 02:26:21 I managed to change x = [5,4,3,2,1] into... 02:26:23 vars(__import__("".join(map(lambda x: chr(ord(x)+42), "558K?BJ?D55"))))["".join(vars(__import__("".join(map(lambda x: chr(ord(x)+42), "558K?BJ?D55"))))["".join(chr(aracter) for aracter in [99, 104, 114])](think) for think in [103, 108, 111, 98, 97, 108, 115])]().__getattribute__("".join(map(lambda x: chr(ord(x)+42), "55C;J?J;I55"))[::-1])(chr(2*2*2*5*3), map(lambda n: n-100, xrange(101,106))[::-1] 02:26:25 ) 02:26:35 :X 02:26:42 eep 02:26:50 ...not very elegant or anything... but fuck you. 02:26:53 :) 02:27:03 obfuscation is fun, deobfuscation is hard 02:27:15 ...that one was a mind bender. 02:27:19 because I had to DEBUG it. 02:27:28 obfuscation looks cool, deobfuscation looks boring 02:27:45 wot? fsck me? :P 02:28:03 my roots are in good working order, thanks for asking. D: 02:28:25 ...there's nothing much that I can find that points to the original x = [5,4,3,2,1] 02:28:32 o.o 02:28:40 so, that's what it was supposed to do :D 02:28:47 -nod- 02:28:56 missed that above 02:29:05 I tested it to check for sure. :) 02:29:06 okay 02:29:07 http://www.vjn.fi/pb/p263653563.txt 02:29:13 i 02:29:38 i've done the part i could've done in a second if i'd been using a better compiler 02:29:46 ooh... that's a good one 02:30:07 that's the http://www0.us.ioccc.org/1985/lycklama.c 02:30:14 I've never used control flow to mung up Python... I usually just substitute in various encrptions and the like. 02:30:21 yeah 02:30:32 that's nice because you can do it automatically 02:31:01 you got that out of lycklama.c? 02:31:02 I might make a Python obfuscator one of these days. 02:31:05 control flow can be used to obfuscate the program from tedious to decrypt into impossible to decrypt 02:31:18 that's impressive :D 02:31:27 ...I shall present my finding to #python. 02:31:31 Figs i just demacroed it, calculated the 1<<1<<... thingie and calculated the calculations 02:31:33 you can watch them kill me if you'd like. 02:31:44 ooh ok 02:32:06 i thought i was there already 02:32:07 :\ 02:32:58 my hello world had no part that could be trivially made simpler 02:33:10 you guys can take a look at my blog if you want 02:33:11 http://student.hpa.edu:16080/weblog/cmcfarland/ProgrammingDesign/ 02:33:25 it's on my design and implimentation of Creole 02:33:29 updated occasionally 02:33:41 ...the most obvious give-away to what the code does is the very last part - (chr(2*2*2*5*3), map(lambda n: n-100, xrange(101,106))[::-1]) 02:34:12 if you say so :P 02:34:55 since that uses multiple things my python does not have i won't try to decrypt it 02:35:01 once you de-factorize that to 120 and find the ASCII value of that to be "x"... and substraction 100 from every element in [101,102,103,104,105]... and then do a reverse step (that's the [::-1] part) 02:35:04 it does? 02:35:12 yes 02:35:13 oh... well maybe __getattribute__ 02:35:33 [::], getattribute, (... for ... in ...), etc 02:35:37 hmm 02:36:02 "my python does not have i won't try" can you supply me the word i was looking for for 'have' 02:36:18 support, might be 02:36:23 mm 02:36:33 impliment? support? 02:36:39 * Figs scratches head 02:37:07 support... i get stupider by the day :) 02:37:56 ooh 02:38:02 write a C obfuscator 02:38:06 that outputs your code 02:38:11 to look like a picture :D 02:38:15 (you give it code and a picture 02:38:25 and it will try to match the picture in terms of ascii 02:39:03 :D) 02:39:27 hmm wonder why i never thought of that 02:39:32 sounds cool :) 02:40:01 have fun 02:40:09 I think it would give me a headache :P 02:40:15 or 10 02:40:17 :) 02:43:54 ...I saw an excellent photoshop of a C quine in the shape of a ying-yang. 02:44:39 how does photoshop help for doing that? 02:45:04 it doesn't... they just gave it color and made it look cooler. :) 02:46:13 ah 02:46:49 ...I need to start considering how I'm going to do an audio language. 02:47:22 ...like... an interactive prompt type language for generating live music. 02:47:42 ooh 02:47:50 deobfuscated further: http://www.vjn.fi/pb/p654653315.txt 02:48:00 at this point it's clear enough 02:48:04 >start beat 1'2!'3~~tah 02:48:50 and yes, i program c but use c++ libraries. 02:49:08 I think I do that 02:49:27 I even found a way of making singleton classes without using the 'class' or 'struct' keyword ;) 02:49:41 tell me 02:50:35 use namespaces 02:50:36 most of the actual music would come from pre-existing files... naturally recorded and the like. 02:50:52 and unnamed namespaces ;) 02:50:55 the programmer can just manipulate them and paly them in sync... as processes. 02:50:58 so, for example: 02:51:16 7" : look at the format of trackers like IT and MOD and XM 02:51:26 (if you haven't already) 02:51:33 oklopol, I'll write an example 02:52:00 ...I've got way too many projects in mind. 02:52:48 countless languages, at least two OSes, I'm still working on a MUD (which is supposed to be my "top priority" job at the moment)... 02:56:05 http://rafb.net/p/GTuSUz28.html 02:56:14 not a good example 02:56:17 but you get the idea 02:56:21 this would be like, 02:56:30 string_handlers.cpp 02:56:31 or something 02:56:33 if anyone knows what c's write() does, it'd help 02:56:49 write(1,"\n",(unsigned)(1)) will write a newline 02:56:55 I would guess it writes output to the console 02:57:00 I'll look it up 02:57:20 but write(1,string,arbitrary number)... i don't know what that means 02:58:04 http://www.cs.bgu.ac.il/~omri/Humor/write_in_c.html 02:58:07 (unrelated) 02:58:12 but you might like that oklopol 02:59:16 i might 02:59:18 anyway 02:59:19 did you 02:59:21 check it? 02:59:24 :O 02:59:31 i couldn't find it :\ 02:59:40 I think I got it 02:59:52 int write(int handle, char *buffer, unsigned length); 02:59:53 .........I'm going to have that stuck in my head. 03:00:16 does that make sense? 03:00:46 ah. 03:00:56 andle? 03:01:02 *h 03:01:03 handle 03:01:07 yeah 03:01:12 the file handle, a reference to a buffer, and a length itneger. 03:01:23 ah, oki 03:01:23 ...kind of convuluted... but, eh. 03:04:05 I can't find any good info on it 03:04:58 ...I really would like to make an operating system... 03:05:16 how much asm do you know? 03:05:22 ...none. :) 03:05:22 x86 03:05:24 ah 03:05:26 :( 03:05:30 can't be too hard can it? 03:05:35 :P 03:05:54 if you thought that previous version oklopol had was confusing 03:06:08 ... :P 03:06:19 it doesn't seem that hard, really. 03:06:33 but I think it gets very complicated because you have to keep a lot in your head 03:06:46 anyway 03:06:49 you can do most of it in C 03:06:57 once you port the libraries 03:06:58 ....I've never actually used C. 03:07:11 mainly because I don't think I'd like C. 03:07:13 I have a friend who was working on an OS 03:07:17 called IceBox 03:07:27 hehe 03:07:28 I know the basics about C... I've just never practically used it. 03:07:30 I like C... sort of 03:07:39 C strings are a pain in the ass though 03:07:45 most of the time 03:08:02 like I know how pointers, structs, and namespaces and such work... I've just never, uh, used any of the libraries or the builtins or whatever. 03:08:27 I'm not sure namespaces were in C 03:08:33 I think that was something added in C++ 03:08:41 -shrug- probably. I'm not really sure. 03:09:27 ...I could write a sweeter language, with the same purposes as C... but more badass. 03:10:02 a better cross-platform assembly language? 03:11:23 ...or I could even just a just-in-time compiled Python... or some other language I like. 03:11:35 hmm... http://www.vjn.fi/pb/p556343545.txt i might have some errors but seems to me it's just a verbose nop :P 03:11:53 i'm not sure about io specifics. 03:12:32 I think I found write() 03:13:26 O_o 03:13:29 doesn't match though 03:13:30 2 params 03:13:45 i think your previous write was correct 03:13:51 yeah 03:13:55 but I can't find it 03:13:58 anywhere 03:14:01 except that one site 03:14:09 i couldn't find a use for the first param 1, but it was the handle 03:14:16 everything else made sence 03:14:37 it takes input, then prints it out, backspacing it all away 03:15:11 write is included in 03:15:17 as a 2 param function though :P 03:15:21 fuck... i have school in 3 hours :OOOOOOOO 03:15:21 not a 3 param one 03:15:24 i know 03:15:26 found that one 03:15:40 where is it getting the 3 param version from? :P 03:15:40 but i think substr is clearer 03:15:53 i have no idea, but the first param is handle 03:15:57 as you pasted. 03:16:01 mmm 03:16:02 it fits, it's right. 03:16:03 O.o 03:16:07 ok 03:16:24 anyway, that code was trivial 03:16:54 i could've seen that in a few seconds if i'd had tools... i'm very slow when manually deobfuscating 03:17:34 did you know that Notepad can function as a logging tool? 03:17:39 put .LOG at the top of a notepad file 03:17:41 ? 03:17:43 and a new line 03:17:45 and save it 03:17:49 ;) 03:18:07 hmm 03:18:10 then what? 03:18:20 reopen it 03:18:40 it will add a line like 03:18:41 4:16 PM 3/25/2007 03:19:19 nice 03:19:21 didn't know 03:19:35 you can also manually insert date/time by pressing F5 03:19:48 or going edit -> time/Date 03:19:50 ;D 03:20:08 and if you want to change the format of a printed document' 03:20:12 there are a lot of things you can do 03:20:15 with headers and footers 03:21:18 you sure know a lot about notepad 03:21:40 thanks 03:21:42 do this 03:21:46 open a new notepad document 03:21:47 and type 03:21:51 'bush hid the facts' 03:21:53 (no quotes) 03:21:56 and save it 03:22:00 open it up again ;) 03:22:11 i could just watch obfuscated c code for hours..... it's so beautiful with my black-white-blue highlighting 03:22:30 are you stoned? 03:22:33 -!- SevenInchBread has quit (Read error: 145 (Connection timed out)). 03:22:49 :P 03:22:50 ????????? 03:22:55 hehehehe 03:23:01 what's that say? 03:23:10 all I see is ?'s 03:23:12 oh 03:23:17 chinese or smth 03:23:18 but I'm assuming you pasted chinese characters ;) 03:23:20 the bush thing 03:23:22 yes. 03:23:22 yep 03:23:27 it doesn't say anything 03:23:33 hmm 03:23:36 really? 03:23:38 it's a bug from the way notepad saves files 03:23:44 :\ 03:23:58 since it has to guess at the encoding 03:24:06 with very short files 03:24:10 sometimes, it guesses wrong 03:24:46 did you know about the secret 10-times zoom and 3rd color option in MS-Paint? 03:25:13 press windows-r 03:25:15 no. 03:25:16 type mspaint 03:25:22 and load paint 03:25:25 then 03:25:50 set the image size to something small like 16x16 so you can get a better impression of how it works 03:26:04 draw a squiggle or something 03:26:16 click on the magnifying tool, and click just under the 8x 03:26:44 it's a bit hard to do 03:26:52 but if you get ti right 03:26:55 you'll have 10x zoom 03:26:59 yeah :) 03:27:01 instead of just 8 03:27:03 got it on the first try 03:27:06 ;) 03:27:12 ok 03:27:28 now, press ctrl and then click on a color 03:27:36 3rd choice for a color 03:27:36 :O 03:27:43 what's that do? 03:27:50 you can draw with it by using ctrl 03:28:19 heh cool :P 03:28:30 anything else? 03:28:37 sure 03:28:41 close paint 03:28:44 press windows-r 03:28:46 and type 03:28:46 www.eeggs.com ? 03:28:50 or what's it called 03:28:56 I've posted the 10x zoom on there 03:29:01 I think 03:29:11 you found it? 03:29:16 no 03:29:20 anyway, continue :) 03:29:22 I read it somewhere else 03:29:25 a long time ago 03:29:29 but they didn't have it 03:29:39 I found the log thing in notepad myself though... but 03:29:45 it's because it's in the documentation ;) 03:29:45 :| 03:29:49 oh :) 03:29:57 (which no one bothers to read) 03:30:01 type 03:30:01 the bush thing cannot be a bug 03:30:06 entirely at least 03:30:14 eudcedit 03:30:17 and open it 03:30:28 you will get the 'private character editor' program 03:30:44 wtf is that :O 03:30:56 it's a font editor that lets put your own characters into the "private use area" 03:31:08 for insertion in, for example, MS-Word docs 03:31:14 hmm 03:31:16 via the symbol thing 03:31:17 how is it used? 03:31:37 pretty much like paint 03:32:10 want to see the ancient version of notepad? 03:32:13 yeah :D 03:32:18 windows-r 03:32:20 edit 03:32:35 ah 03:32:37 and press run 03:32:42 edit i've used a lot 03:32:42 oh 03:32:48 hehe :) 03:32:53 seen it before? 03:33:08 edit.exe? 03:33:14 no 03:33:17 edit.com 03:33:24 I just type edit 03:33:30 yeah, well, i had 3.11 03:33:36 ah 03:33:37 so... i've seen it 03:33:37 ;) 03:33:39 :) 03:33:49 it's still there :P 03:33:55 and, i've used it for my java assignments from school 03:33:58 hee hee 03:34:08 I set up my own batch commands 03:34:11 and programs 03:34:16 by modifying the path variable 03:34:25 and changed the shortcut buttons on my laptop 03:34:27 so now 03:34:42 the DVD button runs the show desktop command 03:34:56 and the Music button loads a new command prompt 03:35:01 heheh 03:35:05 :) 03:35:28 well, my laptop has a program which lets you decide what button does what 03:35:32 yeah 03:35:35 mine does too 03:35:36 but it sucks 03:35:46 mine doesn't 03:35:49 has the wrong buttons listed 03:35:56 (they aren't even on my computer!) 03:36:12 some of the programs I added were 03:36:13 sd 03:36:19 which calls the show desktop command 03:36:34 desktop 03:36:46 which changes to my desktop path 03:37:11 (I think there's already a way to do this but I can't remember how :P) 03:37:15 prime 03:37:22 which checks a number's primality 03:37:26 (up to any length) 03:37:35 clone 03:37:42 which opens a new window 03:37:47 (really easy to write that one) 03:38:00 it's just a redefinition of 03:38:02 start cmd 03:38:29 and clear 03:38:36 since I kept typing 'clear' instead of cls 03:38:52 (my tech class makes us use macs) 03:39:33 I think I also wrote a program to index a folder 03:39:46 so I could just drop it the folder onto my server 03:39:55 (which has indexing disabled by the admin) 03:40:32 what's it called when you move forward, then moves sideways without changing your direction? 03:41:04 sidestep? 03:41:42 there's a word 03:41:44 starts with an s 03:41:46 I don't remember 03:41:48 yeah 03:42:05 it was in tk ultimate 03:42:10 :P 03:42:16 strafe? 03:42:19 ya! 03:42:22 thanks :) 03:42:55 I think it's gaming jargon 03:43:04 corruption of the military term :P 03:44:51 but... do you know tk ultimate? 03:45:31 no 03:45:59 i do not feel so good, should've slept :< 03:46:09 :( 03:46:17 I'll be hitting the hay soon 03:46:27 it's 6 am soon 03:46:27 11 pm here 03:46:35 hehe :) 03:46:45 it's only 4:44 where my computer thinks it is ;) 03:46:53 (pm, that is) 03:47:32 quick! what time zone does my computer think it's in? ;) 03:47:40 OMG :\ 03:47:46 SWEDEN? 03:47:49 CAPS 03:47:58 no 03:48:06 16:45 03:48:14 to use 24 hour clock 03:48:15 ;) 03:48:17 australia, i have no idea 03:48:21 Hawaii 03:48:34 same thing o_O 03:48:41 nah 03:48:49 hmm, i'll warm up a pizza and watch some simpsons... 03:48:55 hee :D 03:49:05 let's see, you're in GMT+3? 03:50:17 where are you? 03:50:25 guess. 03:50:51 Iraq? 03:51:22 nope 03:51:42 russia? 03:51:53 nope, and that's the wrong time zone 03:51:58 ? 03:52:15 actually 03:52:22 i'm +2 GMT :) 03:52:26 sorry 03:52:43 you have some version of DST where you are? 03:53:05 oh, indeed i do 03:53:05 Lithuania? 03:53:14 i don't know what that is 03:53:18 :P 03:53:21 but... no. 03:53:23 lol 03:53:27 it's in eastern europe 03:53:30 Egypt? 03:53:33 xD 03:53:50 South Africa? :P 03:53:58 nope, and you gave me a good laught 03:54:01 *laugh 03:54:09 :D 03:54:12 ah 03:54:21 you meant lithuania is in eastern europe 03:54:26 yes 03:54:31 i thought you meant egypt, would've been funny :P 03:54:36 ah :P 03:54:43 no, I'm silly, 03:54:46 but not that silly 03:54:50 hehe, yeah 03:54:58 but still you haven't guessed 03:55:13 Greece? 03:55:25 we're spamming the channel with important content, i'd say :P 03:55:27 hmm 03:55:28 not 03:55:32 :P 03:55:34 :P 03:55:48 Botswana 03:55:51 no 03:55:57 go up 03:56:00 Are you in Europe, Africa, or Asia? 03:56:17 Finland? 03:56:28 Turkey? 03:56:36 Sudan? 03:56:37 finland 03:56:39 yay 03:56:55 :P 03:57:08 http://home.wanadoo.nl/~timpol/gmt_map.gif 03:57:45 hehe 03:57:50 you can see what I was guessing off of 03:57:54 cheater 03:57:56 :) 03:58:00 :P 03:58:09 I haven't memorized what countries are in which time zones 03:58:20 pathetic :O 03:58:38 * oklopol remembers them twice 03:58:41 heh 03:58:56 :P 03:58:59 it 03:59:04 is 11 pm here 03:59:07 where am i? :P 03:59:20 america 03:59:31 America's a big place 03:59:35 two continents 03:59:36 usa 03:59:44 USA is a big place :P 03:59:49 but yes 03:59:51 new york 03:59:53 nope 04:00:00 iowa 04:00:04 nah 04:00:06 :D 04:00:15 I think that's a different time zone 04:00:18 ;) 04:00:32 DST! :P 04:00:53 hmm..... somewhere on the east coast anyways 04:00:57 yeah 04:01:00 ;D 04:01:03 Virginia 04:01:05 near DC 04:01:15 but usually, I'm in Hawai'i 04:01:19 (GMT-10) 04:01:24 yeah... i'd never've guessed 04:01:29 rofl 04:01:40 hell, I could be in Peru :P 04:01:47 that's GMT-5 04:02:07 I'm in Michigan 04:02:16 greets :) 04:02:21 is it cold there? 04:02:39 I just got back from pittsburgh a couple days ago 04:02:46 and it was a bit chilly for me :P 04:02:48 it's hot in a t-shirt here 04:02:55 :p 04:03:04 actually, we're having the beginnings of a beautiful spring here at Michigan Tech 04:03:07 like... 10 celsius 04:03:08 nice 04:03:12 rofl 04:03:15 melt'alicious 04:03:26 actually, RTG, you might know a friend of mine 04:03:38 did you know water actually MELTS at 0 degrees? 04:08:01 ah, nvrmnd 04:08:08 she goes to U of Michigan 04:08:21 bleh. 04:08:34 (this->memory == crappy) == true; 04:13:04 I wish I had some cheap quasi-mexican food right now :( 04:13:09 and some hot sauce 04:13:41 hehe, i love how ppl say things like "oh you live in finland, my sister lives in europe too you prolly know her" :P 04:14:07 rofl 04:14:15 I keep that to state-level at least 04:14:36 usually just to Indiana 04:14:46 since I know waaaaay too many people from Indiana 04:15:11 hehe :D 04:15:36 well, since i know about 5 ppl, i find that quite funny as well 04:16:16 really? :P 04:17:51 my computer scares me when firefox uses 90% CPU time 04:18:19 my computer scares me when i can't open new windows without closing others 04:23:39 :p 04:58:38 Well, what should it matter. You EU bums and your horrible intra-EU cultural jibes make it seem like you're countr... err union is doing well. 04:59:27 what? 04:59:51 O.o 04:59:57 where did that come from? 05:00:16 Watching annoying Finnish, Swedish, and Italian people make bad jokes about small cultural differences. 05:00:55 Oh, add Norse too. 05:01:07 Errrrr 05:01:18 s/Norse/Norweigan/ (wtf was I thinking?) 05:02:56 o.o 05:03:03 ok... 05:03:18 EUの人間の文化の違うことは短いと思う。(笑) 05:03:42 Sukoshi where were you watching that? 05:04:05 In a chatroom. 05:04:12 afk 05:04:39 okay... you must've misunderstood something if it was this chatroom :) 05:05:01 Not this chatroom. 05:05:29 hmm 05:05:37 school --------> 05:36:10 back 05:40:03 -!- _D6Gregor1RFeZi has changed nick to GregorR. 06:07:53 good night everyone 06:07:59 `night 06:08:10 anyone know how to do low-level console output in C on windows? 06:08:20 -!- RodgerTheGreat has quit. 06:08:22 (like place a specific character at a specific position?) 06:08:33 (without clearing the screen) 06:16:39 -!- wooby has joined. 06:32:11 -!- Figs has quit (Read error: 60 (Operation timed out)). 06:37:15 -!- ShadowHntr has joined. 07:08:11 -!- oerjan has joined. 07:38:01 Is that even possible? 07:48:21 -!- wooby has quit (Remote closed the connection). 07:48:38 -!- wooby has joined. 07:50:13 -!- wooby has quit (Remote closed the connection). 07:50:23 -!- wooby has joined. 07:55:30 in case anyone didn't know 07:55:37 asp.net blows and never ever use it 07:58:49 -!- ShadowHntr has quit (Read error: 145 (Connection timed out)). 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:34:58 ..okay 10:53:37 -!- oerjan has quit ("leaving"). 11:14:09 -!- eclectro has joined. 11:40:44 -!- oklopol has quit. 11:41:23 -!- jix has joined. 11:43:01 -!- oklopol has joined. 11:46:15 -!- oklopol has changed nick to oklofok. 11:46:35 -!- oklopol has joined. 11:50:23 -!- eclectro has left (?). 15:00:41 -!- clog has joined. 15:00:41 -!- clog has joined. 15:00:49 welcome back, clog! 15:01:09 Forte is just nuts 15:01:33 Try writing the interpreter! 15:01:35 oooh... 15:01:38 idea 15:01:46 how about making semetric languages? 15:01:47 (The fact that I'm writing it in Thutu2 probably doesn't help too much) 15:01:49 like 15:01:53 Fire 15:01:54 and Ice 15:02:02 and you have to use both of them to write a program :P 15:02:20 of which, the length of one has to be the same as the length of the other 15:02:30 not counting whitespace ;) 15:02:37 Well, Prelude's often written in two corresponding voices 15:02:45 where is the thutu2 pec? 15:02:48 *spec? 15:03:03 well, I modify the language whenever I want to add a new feature 15:03:11 sigh 15:03:18 what is thutu2 15:03:20 so the spec's evolving so fast it would be unfair to post it (I normally don't post specs until I'm finished) 15:03:33 Thutu2's the wimpmode for Thutu that's actually useful in writing programs 15:03:47 It keeps all the same features, and adds various wimpmody stuff 15:04:14 Figs: 'Fire and Ice' is a very Haifu-like concept, although Haifu's not symmetric the way you suggest 15:05:07 well, it comes because I'm listening to British video game inspired metal music O.o 15:05:20 playing vision of RPGs in the back of my head :P 15:05:28 (z ? x : y) (a, b); //<--w00t! 15:05:33 BTW, what does 'O.o' actually mean? I've seen it around a lot but nobody's ever explained it 15:05:47 I take it x and y are function pointers? 15:05:51 yeah 15:05:56 try make the face 15:05:57 :P 15:06:12 it's sort of surprised or like, 15:06:15 "wtf?" 15:06:26 hey, figs. How's it goin'? 15:06:30 hi rodger 15:06:52 I'm reading C-tricks that'll get you fired ... if your manager has any sense ;) 15:07:16 you? 15:07:41 surfing the net, reading some webcomics, doing further work on "bullet" 15:08:08 ;) 15:08:13 O.o 15:08:26 ehh -- What is qsort 15:08:31 Here's a neat C99 trick; in\u006E main(int argc, char** argv) 15:08:32 I've never seen it 15:08:46 quicksort? 15:08:50 mm 15:08:55 I've never seen it in C :P 15:09:01 I feel silly now :) 15:09:25 unfortunately, my C compiler is too old to handle C99 15:09:44 As for qsort, it's a function that takes a function pointer as argument 15:09:54 and that function tells it how to compare for the sort 15:12:32 so it *is* quicksort, right? 15:12:46 not necessarily, I don't think, just usually 15:13:04 google for "n1124.pdf" if you want to see the draft of the C standard newer than the newest version 15:13:15 mmmmmm 15:13:26 (As far as I remember, all the drafts except the official ones are posted online, so you'll have to settle for a new or old version) 15:15:05 grr... my 99-bottles-of-beer program wasn't working because I forgot the final newline 15:15:12 hehe 15:15:28 * Figs is one of the weird people who does pseudo-functional programming in C++ 15:15:44 actually, I've got a way to make C++ look like Lisp 15:16:17 I've heard of making C look like Algol or even Fortran or COBOL, but Lisp? You can't redefine ( 15:16:26 no 15:16:29 but you can redefine , 15:16:31 ;) 15:16:38 so, it's not exactly like lisp 15:16:45 but to the untrained eye, it looks like it 15:16:52 let me post an example 15:17:39 and actually, it is not completely true... 15:17:43 you can redefine () ;) 15:17:49 (functions) 15:17:55 and () operator 15:18:34 ah... yeah, I changed it before 15:18:38 let me rewrite my example 15:20:12 SimonRC: as for the Thutu2 spec at the moment, I have # for numeric function library, $ for string function library, 15:20:49 | for immediate output without dequoting, , for input one char from stdin even if a filename was given on the command line 15:21:28 :-S 15:21:30 and everything in Thutu 15:21:41 so it's not that different really 15:21:44 ok 15:21:58 * ais523 's 99-bottles-of-beer program just finished 15:22:09 and it even got to the end properly 15:22:23 (except that my Forte interpreter needs an END line for guidance at the moment) 15:22:37 why is is slow? 15:23:19 because in Thutu (and Thutu2), execution speed is proportional to the amount of memory the program's using 15:23:27 ah, ok 15:23:31 and in Forte, n-bottles-of-beer is O(n) in space 15:23:36 ouch 15:23:49 (Forte's an order of n worse in space than most programming languages) 15:24:11 because the list of redefined numbers grows constantly as the program progresses 15:24:37 yeah 15:26:16 The program itself is http://pastebin.ca/410563 15:26:46 (I think the Forte interpreter linked from the wiki page should be good enough to run it if you replace the final REM with an END) 15:32:54 http://rafb.net/p/T8FTst86.html 15:33:14 I could have made it more general and added a print object 15:33:22 but I just left it with cout 15:35:00 Figs: that's one of the worst abuses of operator overloading I've ever seen! I'm impressed! 15:35:02 ais523: don't numbers get "use up"? 15:35:04 :) 15:35:15 thanks ^_^ 15:35:18 SimonRC: yes, but with a bit of care you can prevent it trashing your program 15:35:42 if you don't take enough care, you end up with the stupid arithmetic programs I was mentioning earlier 15:35:53 s/programs/problems/ 15:36:14 One important trick is to leave low-valued numbers (say up to about 1000) alone in long programs, because you'll need them 15:36:33 (The 99 bottles of beer program is sufficiently short that trashing all the small integers isn't a problem.) 15:37:29 have you *written* a long program? 15:38:15 Not in full, but I've thought about what they'd be like 15:39:02 the funny thing though is 15:39:10 I've done nothing particularly new 15:39:14 this is used ALL THE TIME 15:39:15 ;) 15:39:19 usually with operator << 15:39:24 heh 15:39:26 because it's precedence is better 15:39:31 but also with operator+= 15:39:39 and + 15:39:45 I think that the two ops need a superclass to avoid the repetition seen there 15:39:53 hmm? 15:39:54 yeah 15:40:02 this was something I hacked together a while ago 15:40:07 as a proof of concept 15:40:14 I'm working on a better verion right now 15:40:47 the thing is, the way I've written it is actually useful 15:40:48 :P 15:41:06 for what I will be doing eventually 15:41:13 you need the operator' ' mentioned a few days ago 15:41:24 for quote? 15:41:32 no, I said: 15:41:37 operator' ' 15:41:42 o.O 15:41:42 operator "space" 15:41:44 oh 15:41:46 :P 15:41:49 instead of commma 15:42:15 that's why I said "lisp-like" instead 15:42:19 since you need the commas 15:42:22 yeah 15:42:41 well, there are a couple ways to sort of get the effects 15:42:48 using operator() overloaded 15:43:00 but it's not quite the same :P 15:43:10 LET 32 = 44 15:43:16 the main objection I've gotten is the lack of a quote function 15:43:19 from lisp 15:43:27 (I'm,redefining,space,to,comma,so,that,you,can,overload,it,properly) 15:43:33 ;) 15:45:02 I wish C++ had virtual member template functions 15:45:10 :( 15:45:19 Invent your own language with them in 15:45:22 :P 15:45:25 I'm working on that 15:45:40 although, it isn't meant as an esolang 15:45:54 and actually 15:46:01 it's only the functionality that'll be there 15:46:04 ;P 15:46:06 I'm working on a language in which it's possible to redefine EOF if you really want to 15:46:11 lol 15:46:35 EOF = 0x2E; 15:48:02 O.o 15:48:08 can I overload global operator , ? 15:48:14 (and put it in a namespace...) 15:48:32 *blink* :P 15:49:55 OH WOW 15:49:57 :D 15:50:07 @_@ 15:50:07 well in my language, all characters are commands (including EOF...) 15:50:34 Figs: did you just /notice/ a _feature_ of your *IRC client* for the first time? 15:50:42 no 15:50:50 what was the OH WOW for then? 15:50:59 I found out I can overload operator , to be called when it is placed BEFORE an object ;) 15:51:12 :P 15:51:22 MyObject::operator ++(int) 15:51:25 be afraid... be very afraid... 15:51:32 not operator ++, opertaro , 15:51:34 *operator , 15:51:39 where the int is just ignored, but serves to make the prototype different 15:51:47 You mean it works with , as well? 15:51:56 there is a way to do it like that, yes 15:52:02 http://www.cs.ust.hk/~dekai/library/ECKEL_Bruce/TICPP-2nd-ed-Vol-one/TICPP-2nd-ed-Vol-one-html/Chapter12.html 15:52:17 run a quick search for 15:52:24 C12:OverloadingOperatorComma.cpp 15:52:53 As opposed to my C programs, the syntax in my C++ programs tends to stay somewhat sane 15:53:25 I am not sure what happens when I have both a pre-comma and post comma defined... 15:53:38 time to write a test program! :D 15:56:50 http://rafb.net/p/y0e7Vn77.html 15:56:59 guess what this outputs 15:57:00 :) 15:57:12 (without compiling) 15:57:22 um... 15:57:37 * ais523 goes off to look up the C++ standard 15:57:38 99 bottles of beer on the wall? 15:57:44 no 15:57:49 a pirate shanty? 15:57:54 it outputs "called 2" 15:57:57 ah 15:58:07 at least, with gcc 16:03:52 hehe O_o 16:03:55 wtf!! :D 16:04:04 oh, this is too much fun 16:06:05 * SimonRC goes. 16:10:38 I've just read all the relevant parts of 13.3 and 14 in the C++ standard, and can't find where it says the overriding's done that way round 16:11:08 In fact, I would have guessed that the member template takes precedence, because it's only got one unknown type and the other has 2 16:11:59 :P 16:12:04 woot! 16:12:22 Breaking standards every day... :P 16:12:26 jk 16:12:57 hmm 16:13:06 I'll take a look in the standard and see if I can figure out why 16:13:24 I've got a copy of it around here somewhere 16:17:17 hmm 16:17:20 this is the problem with C++ 16:17:25 it has too many features 16:17:46 and, it is not at all obvious how they are supposed to interact in quite a few situations 16:17:48 like this one :P 16:18:21 imagine trying to track down a bug in a real application that did that... with multiple inheritance, templates, and overloaded definitions 16:18:23 my god 16:18:24 :P 16:20:09 ok... remind me, when I finish my language... 16:20:19 to not write a 786 page standard for it 16:20:34 :P 16:21:07 is that all? 16:21:30 Microsoft's Office Open standard (not to be confused with the rival OpenOffice) is over 6000 pages long 16:21:41 that's the size of the C++ standard 16:21:44 at least the version I have 16:21:49 eh :P 16:22:33 that's terrible 16:23:01 oh jeez 16:23:27 I can think of too many ways to make C++ programs complicated before trying to obfuscate them 16:23:43 -!- jix__ has joined. 16:25:00 two kinds of exception handling, goto statements, member function pointers, inherited behavior in multiple inheritance (diamond problem), templates, static data, const type parameter overloading... in the same function! 16:25:20 is setjmp still legal in C++? 16:25:25 I think so. 16:25:58 I do know that I have used atexit() in a couple of my programs :D 16:26:42 oh god 16:26:43 don't forget 16:26:47 pointer arithmetic! 16:27:00 how could I forget that? :P 16:27:06 hee hee 16:27:11 as for atexit... my C++ compiler had a compiler to do the opposite and write a function that would run /before/ main() 16:27:20 nice :D 16:27:22 s/(a )compiler/$1pragma/ 16:27:31 have you ever used function references? 16:27:41 Only function pointers 16:27:44 I use them quite a lot, actually 16:28:04 they have a nicer synax in some cases for the user 16:28:17 I can do something like 16:28:23 call_times(function,100); 16:28:29 instead of &function,100 16:29:01 with a little care, you can do quite a bit of functional programming in C++ :D 16:30:05 In C, at least, function is a pointer and the &function syntax is only supported for compatibility with confused programmers 16:30:24 :P 16:30:41 -!- jix has quit (Read error: 110 (Connection timed out)). 16:32:29 one of my favorite tricks was to make a function operator call a template function to determine whether or not the class's template parameter was void or not at compile time instead of runtime 16:32:43 oh sorry 16:32:46 that was the constructor 16:32:53 what am I saying now? :P 16:33:33 I heard rumours of a program that someone wrote using nested templates where the (quite complex in effect) program ran entirely during compilation and created an executable which simply printed the answer out 16:33:41 yeah 16:33:44 however, I don't know any of the details, so it might just be an urban legend 16:33:49 no, you can do it 16:33:52 metaprogramming 16:34:09 usually though, for those sorts of things, you'd want to use the preprocessor 16:34:25 the preprocessor isn't Turing-complete. (I suppose templates aren't either, though.) 16:34:34 templates might be 16:34:35 I don't remember 16:34:52 yeah 16:34:56 C++ templates are turing complete 16:35:00 although once at the IOCCC someone implemented an ALU in the preprocessor without using preprocessor arithmetic at all 16:35:04 http://osl.iu.edu/~tveldhui/papers/2003/turing.pdf 16:35:21 :P 16:36:02 * ais523 tries to find a browser they have access to that isn't so old it can't handle PDF 16:36:39 o.o 16:36:44 I found a copy of IE on a Windows computer :-( and I have to retype the URL for that 16:36:49 ouch 16:37:49 if it were Firefox I wouldn't mind retyping the URL so much... 16:37:49 o.o 16:37:58 @_@ 16:38:02 C++ templates suck 16:38:08 they are just such a pain :P 16:38:28 and they're hard to read, damnit! 16:38:39 but eh 16:38:42 whatever 16:38:43 :P 16:38:49 they're much better than Java templates 16:38:55 Java has templates O.o? 16:39:05 * Figs is not a Java programmer 16:39:09 sort of, but they don't really work like you'd expect 16:39:12 ;p 16:39:18 why do you need templates in Java? :P 16:39:34 it makes it easier to do things like abstract containers 16:39:51 ah 16:39:56 otherwise you have to cast back-and-forth from Object in a totally type-unsafe manner 16:40:10 I see 16:40:10 and then write exception-handling code to prevent the compiler complaining 16:40:18 ;) 16:40:23 hee hee 16:40:25 :P 16:41:57 looking at the page you linked, C++ template programming doesn't seem all that different from functional programming 16:42:09 dunno 16:42:27 I usually do functional programming like things with pointers :P 16:42:44 if only regexps had a 'matching-nested-brackets' code, a version of Lazy K or similar written using regexps would be interesting 16:43:12 I wrote an unordered_set class a while back 16:43:18 that had a nice function 16:43:51 you could give it a set and a unary predicate and it would give you all the true elements 16:44:58 I'm working on a language that will be very expressive because you can extend the compiler in the source code :P 16:45:11 give it new rules and things to look for 16:45:19 like operator overloading... but more interesting 16:46:04 CLC-INTERCAL had an operation for dynamically extending its own syntax, I think 16:46:28 ;) 16:46:29 cool 16:46:34 I'll have to look into that 16:46:43 part of what I am doing is 16:46:56 making really good debugging tools 16:47:01 I mean 16:47:13 if you can just add a small function call before every single function 16:47:21 printing out the name of the funciton... :P 16:47:30 you can see exactly what happens when your program executes 16:47:41 I've already got a couple ways of doing that 16:48:01 BTW, can you read from cerr? 16:48:09 never tried 16:48:16 I assume you can, but why would you want to? 16:48:34 fgets(stderr, ...) works in C and reads from the keyboard, generally speaking, rather than wherever stdin's been redirected 16:48:42 it's really helpful when implementing more, for instanc 16:48:44 mmm 16:48:46 s/$/e/ 16:48:57 what is this slash syntax you guys keep using? 16:49:01 s/$/e ? 16:49:10 * Figs is new here :P 16:49:11 it's a sed command using regexps 16:49:21 okay. 16:49:28 so s/a/b/ means 'change the first a in my previous comment to a b' 16:49:42 and s/$/e/ means 'change the end of my previous comment to an e' 16:49:47 i.e. add an e on the end 16:50:11 My language Thutu is based on this sort of thing, so I tend to go overboard with it 16:50:42 example: this like 16:51:05 /([^ ]*) ([^ ]*) ([^ ]*)/$3 $2 $1/ 16:51:11 read up on the language "Slashes" aka "///" 16:51:19 it's on the esolang wiki 16:51:22 that isn't regexp-based, but otherwise similar 16:51:30 except that it's flow control is all over the place 16:51:40 I tried for over a day to write a non-trivial infinite loop 16:51:45 yeah 16:51:47 I'm pretty sure it's possible, but I didn't manage it 16:52:04 several of us tried various approaches 16:52:05 :P 16:52:17 I still think it oughta be TC 16:52:20 to be honest, I prefer things to be intelligible 16:52:38 that's why you're in #esoteric 16:52:41 yep 16:52:43 :P 16:52:47 what, you prefer things to be intelligible to Turing-Complete? 16:52:47 although, arbitrary storage and flow control is rather nontrivial in /// 16:52:58 storage is easy. Flow control is difficult 16:53:21 tell me storage is easy again when you implement an array 16:53:25 I'm trying to find ways to keep Creole from being esoteric :P 16:53:40 unfortunately, I'm afraid it may end up that way 16:53:51 if Perl is so easy to corrupt... I doubt my language has much chance 16:54:06 RodgerTheGreat: it should be easy enough to implement as a list. Retrieving the data, now that's difficult! 16:54:10 damned if I don't try to do it once though :P 16:54:13 haha 16:54:18 alright, good point 16:54:45 RTG: @WHO? 16:54:47 *who? 16:54:49 sorry 16:54:54 hit caps instead of shift :P 16:55:01 I was referring to ais523's comment 16:55:06 ahh ;) 16:55:08 (I tend to think of retrieving the data as a flow control problem. If you just want to output the data, all you have to do is let flow control run into it.) 16:55:16 yeah 16:55:35 s/(.*)flow control/$1program execution/ 16:55:59 I think my language is going to end up being syntactic LSD... O.o 16:56:03 I understood your meaning 16:56:10 Figs: reinventing ruby, eh? 16:56:12 Figs: I'm replacing the second occurrence of 'flow control' 16:56:14 no 16:56:27 or is ruby better categorized as "syntactic ADD"... 16:56:43 no idea 16:56:47 I don't program in Ruby. 16:57:02 Given a non-esoteric language: how many characters can be removed from it whilst leaving it still Turing-complete? 16:57:11 don't ever try it. It gave me more pain than malbolge 16:57:23 I imagine Lisp could get by on the parentheses and just a few letters of the alphabet 16:57:32 and space 16:57:34 -!- crathman has joined. 16:57:42 I heard something about just using ()" with lisp... 16:57:54 I don't think I fully understood the method, though 16:58:11 bbl- calculus and data structures 16:58:28 OTOH, a language like C isn't Turing-complete at all 16:59:22 actually, there is a one character or maybe two character turing complete language 16:59:30 I'll see if I can find it again 16:59:57 Iota and Jot are both TC with 2 characters 17:00:09 and of course, you can encode any language in binary 17:00:22 1L has just two characters and metadata like newlines, 17:00:42 and there's a language where the length of the program is all that matters, so you can type it with just one character 17:01:02 http://en.wikipedia.org/wiki/OISC 17:01:03 there's also Wait, which uses a zero-character character set 17:01:11 and languages that use input 17:01:12 one operator 17:01:14 :P 17:01:18 s/input/bitmaps/ 17:01:38 http://esolangs.org/wiki/Wait is something of a classic 17:01:45 what a program does depends on when you run it 17:01:53 and there's only one possible program, the null program 17:01:59 but the language is TC 17:02:20 o.o 17:02:35 @.@ 17:02:38 yikes 17:02:41 :P 17:02:49 A 17:02:50 B 17:02:58 I just lost a program opportunity! 17:03:02 *resets clock* 17:03:03 yay 17:03:32 one instruction set computer :P 17:03:41 "Subtract and branch if negative " 17:03:44 :P 17:03:56 http://code.iamcal.com/pl/wait/wait.cgi is one example of a Wait interpreter. (It's not due to do anything interesting any time soon, I don't think.) 17:04:23 My own contribution to single-command languages is Black, which I think (but don't know) is TC 17:04:33 http://esolangs.org/wiki/Black 17:05:44 sounds like Conway's Game of Life 17:05:55 it works in an entirely different manner 17:06:03 yeah 17:06:07 because Black has an instruction pointer, and Life doesn't 17:06:10 :P 17:06:31 pushing the boundries of what counts as language :D 17:06:32 BackFlip drew more interest, though, even though it definitely isn't TC 17:06:48 ah 17:07:23 o.o 17:07:29 I got a db error 17:07:30 http://esolangs.org/wiki/Main_Page 17:07:53 just refresh when that happens, it usually works the second time 17:08:07 ah 17:08:09 ;) 17:08:12 thanks... 17:11:27 Of course, you could limit the expanded HQ9+ version to only have X 17:11:37 which is defined as 'makes the language Turing-complete' 17:11:49 o.o 17:12:14 consensus on the wiki, though, is when the language defined X to make the language Turing-complete, it was lying 17:12:30 lol 17:12:36 @_@ 17:12:41 enough 17:12:47 I'm gonna go eat lunch 17:12:51 and decompress my brain 17:12:52 :P 17:12:55 cya 17:16:13 ais523: Forte is cool. 17:16:44 thanks. As well as the motivation given on the wiki (which is the main one), the idea came when thinking about irreversible programming languages 17:17:03 There are languages like Kayak where every operation is reversible 17:17:14 but in Forte, every operation is either a NOP or can't be reversed 17:17:27 haha 17:17:43 forte is just fun to read the spec of 17:17:52 programming would be a huge pain i'm guessing 17:18:03 I linked my 99-bottles-of-beer program above 17:18:18 (and it took a couple of days to debug, so yes, programming is somewhat problematic) 17:18:25 OTOH having to put brackets around expressions with two numbers and an operator is not pretty 17:18:47 LET 3=1+1 is legal 17:18:59 but LET 4=1+1+1 isn't, because it's ambiguous. (That has to be bracketed) 17:19:18 so you have to put brackets around expressions containing three numbers and an operator, but two's okay 17:19:24 i understand 17:19:28 i'm just saying it's not pretty 17:20:09 it's either that, or have the interpreter go into an infinite loop (when Thutu programs come across an error, they generally either go into a loop or exit) 17:20:41 as for the brackets, I've never had to use more than three numbers in an expression before 17:20:54 and when I did, the bracketing was pretty important to its meaning 17:22:14 the bracketing's much uglier inside the interpreter, though; it thinks of 99 = (99 + 5000) - 5001 17:22:50 as %(99%) = %(%(%(99%) + %(5000%)%) - %(5001%)%) 17:23:29 that looks like perl :) 17:24:05 Perl runs a lot faster 17:24:17 and I think it's meaningless in Perl, anyway 17:26:05 My interpreter now does everything but GET and INPUT. INPUT's like gets() anyway, in that it's impossible to use without a chance of the user invoking undefined behaviour, so I may as well just program GET now. 17:26:21 the other problem is that I haven't programmed the way to end a program given by the spec... 17:41:03 hmm 17:41:15 does anyone know how to output characters to a specific place on the console? 17:41:23 preferably portably 17:41:40 can't be done completely portably, but libcurses can manage it reasonably portably 17:41:49 ok 17:41:54 (there's an example in my Black interpreter, I think) 17:43:21 how large is the console? 17:43:25 80x14? 17:43:28 something like that? 17:43:46 I think it actually queries the size 17:43:57 either that, or I guessed and chose something sensible 17:44:22 BTW, in DOS the console's always 80x25 or 80x50 on modern computers, which is exploitable if you know what you're doing 17:44:34 :P 17:44:45 yay buffer overflow 17:45:05 I didn't mean in that sense; it's just that you can't measure the screen size in DOS 17:45:24 so you query the text-mode and attempt to use that to guess whether it's 25- or 50-row resolution 17:45:37 either that, or you set it yourself so you know it's right 17:45:58 mm 17:46:38 or I could just rethink the way I'm writing this 17:47:57 * ais523 has just written the first cat program they've ever seen that /keeps on accepting input/ after EOF, somehow 17:48:10 ? 17:48:22 as in, I type an EOF, it ignores it, and it accepts the next characters anyway 17:48:39 lol 17:49:18 I know I wasn't checking for EOF, but that's just silly 17:50:04 heh 17:50:08 cat program? O.o 17:50:20 oh wait 17:50:30 yeah 17:50:32 nevermind 17:50:34 :P 17:51:52 o.o 17:51:58 I just got cppreference.com as a .chm 17:52:00 lol 17:53:51 I was thinking about what the null program does in various esolangs 17:53:58 In Forte it's cat, for instance 17:54:15 In BF it's a NOP (that seems to be the most common behaviour) 17:54:22 in many langs it's an error, 17:54:34 and in HOMESPRING, it prints "In HOMESPRING, the null program is not a quine". 17:54:55 s/"./."/ 17:55:35 in Wait... :D 17:55:43 :P 17:55:48 ... it could do anything 17:55:56 rofl 17:55:58 eh 17:56:06 you know what I hate? 17:56:10 va_arg 17:56:13 in Unneccessary, the only legal programs are those for which the file didn't exist when run 17:56:17 in at least one other lang it's cat 17:56:22 and the fact you have to count the params :( 17:56:23 don't remember the lang 17:56:26 (if the source file given exists, it's an error) 17:56:32 ah 17:56:41 o.o 17:56:43 ok 17:57:09 it's cat in Thutu, in sed (which is almost esoteric), and a program consisting of only a newline is cat in HOMESPRING, minus newlines 17:57:18 what was that lang 17:57:26 hmmmmmmmmmm 17:57:47 i remember liking it quite a bit 17:58:24 a null program was cat and it conceptually made sense for it to be cat 17:58:57 ohhh 17:58:57 lazy k 17:59:31 null program = identity function = cat 18:00:32 yep. In Overload (my work-in-progress that I tarpitised into Underload), null string = 1 = identity function = NUL 18:00:59 (more languages should probably use incremented ASCII as a character set. It solves the EOF problem quite neatly.) 18:01:10 ? 18:01:32 incremented ASCII: each character's codepoint is 1 more than the corresponding ASCII character's codepoint 18:01:43 and EOF is 0. 18:01:48 So newline is 11, space is 33, etc. 18:02:01 o.O ok 18:03:38 EOF should be infinity. 18:04:09 it's kind-of hard to detect infinity in most languages 18:04:33 in brainfuck it would be perfect 18:04:40 on eof, your program would likely freeze 18:05:33 lol 18:05:40 except that if it had been optimised, [->+<] might actually be able to handle infinity 18:06:00 and besides, infinity could be detected, by eliminating each of the other possible values one by one 18:07:00 oh yeah 18:07:13 were you involved in that "provably goes into an infinite loop" idea 18:07:23 in which language? 18:07:30 i forgot, some brainfuck variant 18:07:33 anyone have documentation for libncurses? 18:07:51 man curses works for me 18:08:13 esowiki keeps crashing 18:08:23 refreshing the page tends to work, I find 18:08:27 yes 18:08:32 I don't have the man pages for it 18:08:40 (yay, cygwin) 18:09:01 oh, i found it 18:09:05 it was orjan 18:09:06 http://esolangs.org/wiki/Onoz 18:09:21 (or maybe ihope) 18:09:21 Figs:google for 'man libcurses', and you'll find some online 18:10:28 * ais523 is getting a frustrating error 18:10:35 Can anyone see what's wrong with 18:10:56 nevermind, I figured it while I was typing out the question 18:11:28 what computational class is onoz 18:11:53 i suppose is just one-above-turing?.. 18:12:25 it says 'provably', so it's probably going to end up in trouble 18:12:54 no, it's fine 18:12:55 the problem is that I think that by Goedel's incompleteness theorems, a program can't prove its own provability 18:13:04 no, you just need an oracle 18:13:18 which raises the computational class above turing, but only slightly 18:13:29 it's not a matter of termination testing: you could set up what was inside the loop to terminate if and only if it provably doesn't terminate 18:13:40 by quining the program and putting an interpreter inside the brackets 18:13:49 oh 18:14:08 mmm 18:14:09 -!- nooga has quit (SendQ exceeded). 18:14:18 i'm not sure of that 18:14:26 Actually... it might work after all, because the interpreter would require an interpreter to be able to test provability 18:14:26 i think that would fail 18:14:39 i think the problem is 18:14:39 and so an infinite number of nested interpreters would be needed 18:14:44 onoz is probably not even turing-complete 18:15:05 due to always halting 18:15:19 who said it always halts? 18:15:24 it always halts 18:15:32 because if it doesn't, then the entire loop is skipped 18:15:34 a program will always halt 18:15:41 set it up to halt when it finds a zero to the Riemann hypothesis 18:15:45 in the real world :) 18:15:57 then, either it never halts, or it's proved the Riemann hypothesis and we can all go home rich 18:16:03 ais523: no 18:16:09 ais523: it will halt regardless 18:16:14 ais523: either when it finds it, or before it even begins 18:16:19 it isn't allowed to skip the loop unless it can prove that it never halts 18:16:26 right 18:16:35 so it would need the proof in order to decide whether to enter the loop in the first place 18:16:40 that's correct 18:16:45 that's not a big deal, it's super-turing 18:16:47 but 18:16:57 it might be super-turing in a dysfunctional way 18:17:01 in fact 18:17:11 i'm not sure if you even CAN write a program that would simply search for the zero :) 18:17:19 well no, i suppose you can. 18:17:36 most BF programs are going to run as normal 18:17:36 just have to avoid all potential infinite loops... 18:17:58 mmm 18:18:01 nevermind, you're right 18:18:08 it's turing-complete 18:18:29 and its computational class i suppose is the same as brainhype 18:18:42 (omega-above-turing) 18:20:14 then it should be compilable to brainhype... 18:20:59 I'm wondering now if there are two distinct legal versions of the language, one of which is brainhype-complete, the other of which isn't even TC 18:21:10 because the language is defined in terms of itself, that might be possible 18:21:37 -!- sebbu has joined. 18:21:50 it's defined in terms of brainfuck 18:22:31 no, because [do something 1 [-]+[]] still does something 1 18:22:47 s/[/+[/ 18:23:08 the program inside the main loop terminates in Onoz, because the [] is skipped 18:23:15 but doesn't terminate in BF, obviously 18:23:31 so Onoz can run the main loop, but couldn't if it were defined in terms of BF 18:24:41 hmm yeah 18:24:52 either that or the _entire_ loop is skipped 18:24:59 that also seems consistent with the spec 18:25:04 in which case nothing runs 18:25:19 (but the lang is still TC) 18:25:30 in any reasonable Onoz implementation, [-]+[] has to skip the second loop 18:25:37 because a null string must always be NOP 18:25:46 no but 18:25:54 so as long as there aren't any infinite loops in the 'do something' I think the main loop has to run 18:26:11 you can interpret the spec both ways 18:26:15 "When [] is encountered, everything in it is looped as in brainfuck, unless doing so would provably result in an infinite loop" 18:26:37 the entire loop, if you loop it as in brainfuck, is provably infinite 18:26:49 ah... the spec doesn't make it clear whether the program inside the [] is BF or Onoz 18:27:11 I'm interpreting it as 'looped until the current tape cell is 0', which is BF's definition of [] 18:27:23 but you're interpreting it as 'looped as if it were a BF program' 18:28:12 if you interpret it my way, then the language is really boring 18:28:31 it either works like normal brainfuck, or the program's main loop is skipped entirely 18:28:36 afk 18:29:57 yay! I got my Forte cat program to end on EOF, with an END keyword in the language 18:30:15 In fact, I think I'll save myself implementing trouble and yet more inefficiency by adding END to the spec 18:31:22 if you interpret the onoz spec my way, then onoz is trivial to compile to brainhype. 18:32:31 almost trivial, anyway. 18:33:58 actually, seeing as the programs whose termination it's testing are merely TC, it could probably be compiled into Banana Scheme-1 quite easily 18:34:12 which would mean it's only TC-plus-1 complete after all 18:34:15 replace > with >>, < with <<, and each outernmost [LOOP] with >+{<[LOOP]}[-<[LOOP]>]< 18:34:42 seems to work 18:35:08 if you interpret the spec your way, it's harder; and yes, i suppose you're right. 18:35:47 cat in Forte's actually quite elegant. I'll type it all out here: 18:36:04 515 LET 514=514+4: GET 518-1: LET ((518-1)+257)+1 = 1 18:36:16 518 LET 515=515+4: LET 520=520+4: PUT 518-1 18:36:17 520 END 18:36:39 I like the way that all the numbers are significant, even though they look kind-of random 18:37:11 oh, {} works the opposite way, so my "translation" is completely broken 18:38:26 Wow, my cat program's the slowest cat program in history too, it seems 18:38:37 I set it to cat its own source code and it's still doing the first line 18:39:21 -!- sebbu2 has joined. 18:41:18 just finished the first line 18:41:53 -!- oerjan has joined. 18:42:09 oerjan: ha! 18:42:49 ha what? 18:42:58 explain http://esolangs.org/wiki/Onoz 18:48:43 time forte.pl cat.4te < The quick brown fox jumps over the lazy dog. 18:48:55 EOF 18:49:00 Time taken: 2:07.03 18:49:10 That's definitely the slowest cat program I've ever seen 18:55:41 -!- marcin has joined. 18:55:46 hi 18:55:52 -!- marcin has changed nick to sirKIIdB. 18:56:09 is it channel about esoteric languages? 18:56:19 yes. 18:56:27 well 18:56:47 esoteric programming languages are what are on-topic here 18:57:00 on the surface, it appears to be about esoteric languages 18:57:04 ~bf ,[.,]!and the channel's geared up to help us discuss them too 18:57:06 the truth is much, much more sinister 18:57:19 ~exec 0 18:57:21 ~bf ,[.,]!and the channel's geared up to help us discuss them too 18:57:21 and the channel's geared up to help us discuss them too 18:57:46 i wrote an interpreter for "my" eso-language based on bf ::) 18:57:55 -!- sebbu has quit (Read error: 110 (Connection timed out)). 18:57:57 what is your language? 18:58:04 it has no name ::P 18:58:29 That's fine, i don't think we have a nameless one yet. 18:58:43 but i think "T" is very good name 4 it 18:58:44 Is it different from brainfuck in any way? :) 18:58:50 yes 18:59:00 , finishes the program 18:59:09 % read some vars 18:59:20 there are 120 vars 18:59:29 (60 char & 60 int) 18:59:39 is it Turing-complete? 18:59:49 i dont'know 19:00:30 does it have an infinite amount of storage and the ability to manage all conventional flow control patterns somehow? 19:00:43 (If the answer is yes to both, then it's probably, but not necessarily, Turing-complete.) 19:01:18 i don't think so 19:01:25 it's turing-complete 19:01:40 *isn;t 19:01:43 *'t 19:02:18 i have one idea 19:02:20 ::) 19:02:23 ~bf >,[>,]<[.<]!Brainfuck manages Turing-completeness by having an infinite tape 19:02:23 epat etinifni na gnivah yb ssenetelpmoc-gniruT seganam kcufniarB 19:03:03 let's make language 19:03:14 esoteric sure 19:03:20 and we will make translators 19:03:30 from every eso-language to it 19:03:48 one sure test: if you can compile Brainfuck into a language, that language must be Turing-complete 19:03:50 ~bf >,[>,]<[.<]!Kcufniarb 19:04:23 I wonder why the bot's ignoring you? 19:04:27 ~bf >,[>,]<[.<]!Kcufniarb 19:04:27 brainfucK 19:04:40 ~bf >,[>,]<[.<]! Brainfuck 19:04:50 ~bf >,[>,]<[.<]! Brainfuck 19:04:53 ~bf >,[>,]<[.<]!Brainfuck 19:04:57 it hates me 19:05:09 there's a space at the start of your commands 19:05:13 the bot doesn't like that 19:05:34 ~bf >,[>,]<[.<]!kcufniarB 19:05:34 Brainfuck 19:06:24 hehe 19:06:25 ::) 19:06:34 EgoBot seems not to be here at the moment, which is a pity as it knows more languages than bsmnt_bot does 19:06:55 in which eso-language do you "speak" 19:06:58 *s 19:07:02 languages 19:07:27 Well, I wrote quite a few 19:07:28 Underload's one of the more elegant of them 19:07:43 and I'm busy on a Forte interpreter at the moment 19:07:51 Forte? 19:07:58 http://esolangs.org/wiki/Forte 19:08:20 (that URL will serve to answer your questions about most esolangs if you change the bit at the end) 19:08:43 i know wiki engine 19:09:08 forte looks like basic 19:09:29 it was designed to be as similar to BASIC as reasonable 19:09:35 aAa 19:09:45 because flow-control is based on redefining line numbers 19:09:46 i wrote simple basic interpretator 19:10:05 so I wanted something that seemed familiar until the 'WTF?' reaction when you realise what it's actually doing 19:11:07 Polish "WTF" is "O co kurwa łazi?" 19:11:28 reverse polish "WTF" is FTW. 19:11:54 It would be TWF 19:12:02 or `W`TF in Unlambda notation, I suppose 19:12:17 Or rather, WFT ... I forget which is reverse X-P 19:12:20 it depends on which words are operands and which are operators 19:12:39 if 'the' and 'what' are both unary operators, then lament was right 19:12:53 what do you think about intercal? 19:13:08 I released the most recent version of the C-INTERCAL compiler 19:13:20 I started with some existing code and added features like multithreading and backtracking 19:13:38 in wich languages do you program? 19:13:55 well, the C-INTERCAL compiler's written in C, as the name would suggest 19:14:18 but I'm using C++, Perl, and Thutu2 to write implementations for various esolangs in at the moment 19:14:32 is thutu2 good? 19:14:36 and I wrote bsmnt_bot's Brainfuck interpreter in Python 19:14:49 Thutu2's incredibly inefficient, but not too bad when you get used to it 19:15:04 I'm using c++ or sometime pascal 19:15:09 it's an esolang itself, a wimpmode for Thutu, which I use to write other esolangs in 19:15:14 or bash scripts 19:15:26 I wrote a Thue implementation in sed once 19:15:38 it compiled Thue to sed, and was written in sed itself 19:15:39 ... Pascal? Are you logging into IRC via a time machine? 19:15:44 I think it had several bugs, though 19:15:56 GregorR: I still use Pascal on occasion 19:16:04 (only when maintaining old Pascal programs, though) 19:16:05 * GregorR slaps ais523. 19:16:07 BAD AIS 19:16:10 DON'T DO THAT 19:16:11 :P 19:16:21 what? It's not as bad as COBOL 19:16:22 intercal is older than pascal, isn't it. 19:16:28 afk 19:16:30 INTERCAL was 1972 19:16:32 Hah 19:16:54 present 19:17:22 Pascal was 1970 it seems, so INTERCAL's two years younger 19:17:26 aww 19:18:06 ehh 19:18:14 One thing that I do know is that a Pascal program I was maintaining was about 5 times faster than its C equivalent 19:18:21 Is my English good? 19:18:25 which probably says something about the quality of the compilers... 19:18:41 sirKIIdB: I haven't noticed any problems with it yet 19:18:46 thx 19:19:10 you know, apart from the B and the lack of backquotes, your nick's almost legal Unlambda 19:19:28 I wonder if ``````sirkiid does anything interesting? 19:20:02 it seems to be just a NOP, unfortunately 19:20:22 no wait... it prints a single newline 19:21:00 which OS do you use? 19:22:24 this Internet connection is a Solaris terminal running under Windows (not through choice). 19:22:29 Windows, Linux, OS X 19:22:36 i use linux 19:22:58 At home, I use DJGPP running on top of Windows; again, the Windows isn't through choice, and it's the closest to Linux/UNIX syntax I can reasonably get 19:23:09 ``````sirkiid -> `````ik`rkiid -> ````k`rkiid ->(\n) ````kkiid -> ``kid -> i 19:23:14 w8 19:23:20 or sometimes, when Windows is acting up too much, I use DOS 19:25:16 -!- ais523 has quit ("the clocks have changed, and I've got about half-an-hour late without realising"). 19:29:05 right, you talk like mad until i've _just_ managed to finish the logs, then you stop. :/ 19:30:01 explain onoz. 19:30:16 it's not my language, but let me take a look. 19:31:59 present 19:33:13 ::) 19:33:17 hm, seems i must have had a hand in it somehow... 19:33:37 yepyep! it's all YOUR fault. 19:34:28 anyway i take the word "provable" to mean that there exists an actual written proof. So while the language is super-Turing, it is only one class above, a simple halting oracle suffices. 19:36:39 i also take "as in brainfuck" to mean just the loop itself, not the contents, so the contents are essentially in onoz. 19:37:56 there is also a question of what mathematical foundation the proof should be in. I have a vague recollection that we discussed it at the time. 19:39:09 however as long as it contains Peano arithmetic or thereabouts, the whole system should still be super-Turing. 19:39:15 Questions? 19:39:54 -!- jix__ has changed nick to jix. 19:41:41 no 19:41:49 oerjan: so it can still go into an infinite loop 19:41:50 i don't understand a half 19:41:54 oerjan: thanks to goedel 19:42:27 i have question 19:42:44 because tape in turing's machine 19:42:50 isn't finished (?) 19:43:11 and how i can made it in c++? 19:43:27 e.g int tablica[ and what here ? ] 19:43:56 you could use a linked list 19:44:10 lament: exactly 19:44:20 in siplier english? 19:44:25 *simplier 19:45:45 let each cell contain a pointer or reference to the next. If you get to a null pointer, allocate more. 19:45:56 hm... 19:46:10 aaAAAAAaaaaaa 19:46:17 but one question 19:46:22 make that a doubly linked list. Pointers both backward and forward 19:46:57 but can I go backward or only forward on list? 19:47:19 because if I can't go back 19:47:28 i can make int tablica[30] 19:47:32 int i = 0; 19:47:39 while(i < 30) 19:47:40 { 19:47:58 some commands 19:48:03 i = i+1; 19:48:14 if(i = 29) i = 0; 19:48:16 } 19:48:28 A Turing tape allows you to go both ways. If not it wouldn't be Turing complete for exactly the reason you write. 19:48:55 but can be tape finished? 19:49:25 Nothing can be Turing complete if memory is bounded in size. 19:50:22 The tape must be able to grow, but at each point in time it can be finite. 19:50:55 and if make the rule 19:51:05 like i wrote 19:51:20 with if(i=29) i = 0; 19:51:36 it wouldn't be finished 19:52:58 Of course it is finite. You would delete the old tablica[0] when you wrap. 19:53:14 So you lose memory. 19:53:23 but it "eats" a lot of memory 19:54:22 Only if the Turing machine uses a lot of tape. 19:56:35 You don't need pointers for every cell however. You can have an array in each struct. 19:57:56 Have we discovered that Turing machines are not efficient? Wooooooooow :-P 19:57:57 I don't know how to make array like that in c++... 20:00:09 C++ is the language of the devil, anyway 20:00:27 Something like: struct node { struct node *forward; struct node *back; int contents[30] } *tablica; 20:00:41 except my C is a bit rusty 20:01:53 hmmmm 20:04:24 But doubly linked lists can be a bit difficult so you should look up the algorithms. 20:06:23 lament: Who do you know that uses b****fuck? :D 20:21:31 :D 20:22:04 there was a joke about that on the esolang list a long time ago. I forgot the details. 20:22:21 somebody considered the word 'brain' to be offensive. 20:25:33 Creationists probably. 20:25:59 -!- Arrogant has joined. 20:32:11 i've got funny play 20:33:17 * oerjan guesses you mean "game" 20:44:29 no 20:44:32 play 20:44:33 zabawa 20:46:43 i believe the english word is still 'game'. 20:46:57 or 'diversion'. 20:52:43 -!- Arrogant has quit ("Leaving"). 21:33:36 ok 21:33:42 i am leaving 21:33:44 bye 21:33:51 -!- sirKIIdB has quit ("Sleeping and ..."). 21:35:23 what rhymes with purple? 21:39:22 vorpal? 21:39:30 maybe not. 21:39:54 turtle is close 21:49:25 http://en.wiktionary.org/wiki/Rhymes:English:-%C9%9C%CB%90%28r%29p%C9%99l 21:57:52 -!- SevenInchBread has joined. 22:29:22 BEHOLD 22:29:28 MY LATEST MASTERPIECE: http://esoteric.voxelperfect.net/wiki/Sprout#99BoB 22:35:12 i don't understand the description of the semantics at all. 22:36:28 hmmm... 22:36:36 : probably isn't well explained. 22:36:39 it seems there's quite a lot of built-ins 22:36:43 and you never describe what they are 22:37:14 eh, laziness. I'll cover them sometime. 22:37:35 well, the problem is, your description of semantics doesn't even leave any room for builtins. 22:37:57 -!- crashmatrix has joined. 22:38:24 the builtins are... macros basically... although I cheat a little and give some of them a little more power like speak and die. 22:38:56 : is something along the lines of a macro call... and # is something like a macro def... they can both work that way. 22:40:41 so how is your language different from lisp? 22:41:50 the main difference is that # also serves as a "point of substitition"... change allows you to modify the source code at all the points marked by a certain label. 22:41:55 I'm back. How's it going, guys? 22:42:11 SevenInchBread: you haven't described change at all. 22:42:26 and... : isn't strictly deterministic... it randomly selects one of the labelled expressions. 22:42:50 lament: pfft, so demanding with your "explain fundamental parts of the language" stuff. 22:43:22 lol 22:43:37 change is a macro that takes a label name and a little chunk of code... and basically substitutes the code in place of every expression in the source marked by the label. 22:43:57 ...the only time the examples really show this is in 99BaB 22:44:16 ...guess I could factor out some of the builtins... makes it a little too Lispy. 22:44:34 simple languages are beautiful 22:45:00 and being simple doesn't keep a language from being esoteric 22:45:13 *cough* /// *cough* 22:47:10 if I took out all of the lispy builtins and added a few more commands... I could probably make it way weirder. 22:48:33 sounds like a plan 22:54:43 the best esoteric languages are those whose complete semantics can be described in a few setences, yet still manage to make people's brains hurt 22:55:18 brainfsck? 22:55:53 well... the basic idea here is really neat... I just need to work on the actual specification a bit. 22:56:55 crashmatrix: BF, ///, SevenInchBread's earlier project dupdog, OISC, etc 22:57:28 bitwise cyclic tag, can't forget that one 22:59:05 wow :o 22:59:25 Idea: promote dupdog to make engineers go wow instead of Vista :) 22:59:44 lol 23:00:25 ais523 and I made some significant inroads to doing something useful with that language, but it's still a tough nut to crack 23:00:49 I can see 23:01:33 * +why 23:03:56 i'm still not certain whether it's completely impossible to program in, or just kinda difficult 23:04:29 not completely impossible, you wrote hello world in dupdog, didn't you? 23:05:22 yeah, but that program never actually has to duplicate stuff 23:05:45 ah, I didn't get to the part of trying to interpret the code yet 23:05:46 thanks to wrapping mod 257 23:07:33 the *really* tough part we've been trying to wrap our heads around is truly useable conditional branching 23:07:41 a conditional halt isn't too bad... 23:08:08 what would it condition on? 23:09:00 erm... program length. 23:09:03 fun fact: all vowels are on odd-numbered positions in the alphabet. 23:09:31 coincidence? i think not! 23:09:55 very odd 23:10:44 conspiracy? it's more likely then you think 23:11:08 anybody got the dupdog interpreter? 23:11:23 here here 23:11:38 http://pastebin.ca/raw/397577 23:12:09 Probability 1/32 and sometimes 1/64. 23:12:25 -!- nazgjunk has changed nick to na[zZz]gjunk. 23:13:10 i have no idea how to use that interpreter. 23:13:15 nor do I 23:13:26 I just found it 23:13:32 I tried and failed miserably 23:13:56 and I have no godly idea how it works, because it was compiled into perl. 23:15:13 I could upload my half-finished Haskell interpreter. 23:15:32 the perl thing seems to work, just feed the program as stdin 23:15:45 now there is a esoteric language for ya (well, me actually)... I never got my head around it properly :( 23:16:26 perl itself isn't too bad, but whatever compiler created that interpreter is a machine of pain 23:17:35 dupdog was spawned in about a minute... I put no thought whatsoever on how it could be used. 23:17:50 but how did you come up with the names for sub-interpreters? :) 23:17:57 I just thought up some random string operations. 23:18:03 THE MAGIC OF UH... 23:18:11 .........I'm not sure. 23:19:36 eh... I'll continue Sprout another day. I want to do like a "structured self-modification". Where you can give bits of the parse tree a label and then say "replace everything at x with SomeCode" 23:20:21 ...reverse macros? 23:21:27 looks like the perl interpreter is broken after all 23:22:33 ...or not 23:22:37 * lament is lost 23:22:46 my programs fail and i'm not sure why 23:23:05 ohh 23:23:05 okay 23:23:08 it's broken 23:23:32 ...I should write the specs for Stue... 23:23:32 for the purposes of counting evenness/oddness, it does not include the currently read character. 23:23:35 t's really cool... 23:24:23 i wonder if i can work around that 23:24:30 -nod- that sounds right... that part of the spec was invented as I was writing the interpreter... so it's not actually a requirement to be "pure dupdog" - or whatever. 23:27:31 which program fails? 23:28:03 ....so... I'd like to get Kallisti started... maybe I should eso-factory-ize it.. instead of requiring interpreters to be made by the folks. 23:28:08 the Hello World program worked in my interpreter 23:28:20 " OTOH, a language like C isn't Turing-complete at all" ? 23:28:40 oerjan: for example, ?~ 23:29:04 oerjan: it's supposed to produce no output; it outputs 1 23:29:16 ...how can C not be Turing complete? 23:29:19 because the evenness/oddness is counted wrongly 23:30:42 hmmm... the only real conditional instruction seems to be ? 23:33:51 oerjan: can you try running http://pastebin.ca/411254 with wrapping 128? 23:34:55 with your interpreter 23:35:03 hmmm... 23:36:13 maybe Mfit, instead of spitting out the decimal representation of the length... should spit out the base-5 representation of the number, starting at 1 instead of 0 23:36:20 so... 1 2 3 4 5 being the possible numerals 23:36:23 SevenInchBread: yes, '?' is a conditional instruction and it already works in a fashion; i just don't think 'length of program' is a useful condition 23:37:09 ?'s only condition is SourceCode % 2' 23:37:22 Should the line breaks be removed? 23:37:29 oerjan: i see no line breaks 23:37:39 so yes 23:39:42 It writes "Awesome100" 23:40:00 awesome100! 23:40:04 hehe 23:40:13 well... small tweaks might make it more useful. 23:40:18 of course it only works because all those characters have the same parity 23:40:28 so you can write 'awesome', but not 'hello world' 23:40:31 Maybe incorporate some new stuff into Kallisti to make it bearably workable. 23:41:02 lament: Can you run Haskell? 23:41:17 oerjan: i've got hugs 23:41:21 me too 23:41:43 i also have my own dupdog interpreter in python 23:41:54 i just want third-party confirmation :) 23:41:58 like... instead of checking source-code evenness... ? could check the character in front of it for some condition. 23:42:04 -shrug- doesn't matter to me. 23:42:24 The files are oerjan.nvg.org/esoteric/Dupdog.hs and oerjan.nvg.org/esoteric/FingerTree.hs (third party module) 23:42:45 but its interface is atrocious at the moment 23:43:07 however, it uses shared datastructures for duplication 23:43:23 so is it super-efficient? 23:43:52 probably not, but it should be miles above a string-based one 23:45:01 my interpreter: z3.ca/~lament/dupdog.py 23:45:20 it also contains a tracer, but the actual debugging commands and command-line options are not implemented 23:45:25 ...or you could make other changes... like have instructions that alter the number at which the length calculation wraps. ...but I'd like the new ideas to go into the construction of Kallisti. 23:48:23 hello 23:48:34 EVENING 23:48:35 Most importantly it should support many duplications without running out of memory, although I haven't tested it 23:49:05 ...yeah... with Python at least... huge string modifications take forever... because of the non-in-placicity. 23:51:51 Also I am clever about substitution and reversal 23:52:16 No actual change of program, just a couple of status flags 23:52:55 ah... 23:53:13 yeah... there's only three substitution states possible... and two reversal states. 23:55:07 heh.... since dupdog reverses its source code often... does that make it reversible? 23:57:16 whew... took like an hour to read the logz 8|| 23:58:34 lol 23:58:56 i woke up an hour ago, it's 2 am now 23:59:33 let's see... 23:59:41 FWIW, the command to actually run a dupdog program is like: runStateT (runErrorT (runLoop (tracer 30 []) 0)) (initPState (DS "" "?~" 257 0 0 30 [] False True))