< 1181435694 0 :GregorR-L!unknown@unknown.invalid QUIT :"Leaving" < 1181436238 0 :sebbu2!unknown@unknown.invalid QUIT :"@+" < 1181442081 0 :c|p!unknown@unknown.invalid QUIT :"Leaving" < 1181442196 0 :RodgerTheGreat!unknown@unknown.invalid QUIT : < 1181442347 0 :RodgerTheGreat!n=Rodger@wads-5-232-125.resnet.mtu.edu JOIN :#esoteric < 1181443526 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :i got asked if i had kids today < 1181443530 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :it was funny < 1181443560 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :what was the context of this < 1181443583 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :i was riding my bike past a part and a little kid asks < 1181443593 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :*park < 1181443773 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :hunh < 1181443809 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :that is a unusual question, but as Bill Cosby would say, "Kids say the darnedest things!" < 1181443917 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :yeah < 1181448172 0 :erider!unknown@unknown.invalid QUIT :"I don't sleep because sleep is the cousin of death!" < 1181457759 0 :oerjan!n=oerjan@hagbart.nvg.ntnu.no JOIN :#esoteric < 1181459647 0 :GreaseMonkey!n=finlyffs@222-154-134-19.jetstream.xtra.co.nz JOIN :#esoteric < 1181460755 0 :Sgeo!unknown@unknown.invalid QUIT :Remote closed the connection < 1181462399 0 :clog!unknown@unknown.invalid QUIT :ended < 1181462400 0 :clog!unknown@unknown.invalid JOIN :#esoteric < 1181464234 0 :sebbu!n=sebbu@ADijon-152-1-6-213.w83-194.abo.wanadoo.fr JOIN :#esoteric < 1181468956 0 :sebbu2!n=sebbu@ADijon-152-1-102-89.w81-50.abo.wanadoo.fr JOIN :#esoteric < 1181469648 0 :oerjan!unknown@unknown.invalid QUIT :"leaving" < 1181470481 0 :jix!n=jix@dyndsl-085-016-236-043.ewe-ip-backbone.de JOIN :#esoteric < 1181470571 0 :GreaseMonkey!unknown@unknown.invalid PRIVMSG #esoteric :ok, gonna get off now, gnight everyone < 1181470584 0 :sebbu!unknown@unknown.invalid QUIT :Read error: 110 (Connection timed out) < 1181470593 0 :GreaseMonkey!unknown@unknown.invalid QUIT :"Hasta la Vista(R)" < 1181471391 0 :jix!unknown@unknown.invalid QUIT :"CommandQ" < 1181471827 0 :jix!n=jix@dyndsl-085-016-236-043.ewe-ip-backbone.de JOIN :#esoteric < 1181488653 0 :jix!unknown@unknown.invalid QUIT :"CommandQ" < 1181492818 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :I wonder if Mel of /The Story of Mel/ is still around < 1181492935 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :if not, there are probably still some Real Programmers carrying on his proud tradition < 1181493196 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :there's not even any real computers around anymore < 1181493437 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :not except when people build their own, anyway < 1181493448 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :and not in the "order from newegg" sense < 1181493455 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :out of relays < 1181493477 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :what most people do is "assembling" computers, not building them < 1181493708 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ACTION goes beep < 1181493712 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :for no reason < 1181493753 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :fair enough < 1181494695 0 :c|p!n=wil@unaffiliated/cp/x-000001 JOIN :#esoteric < 1181494974 0 :oerjan!n=oerjan@hagbart.nvg.ntnu.no JOIN :#esoteric < 1181495257 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :@who < 1181495262 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :whoops < 1181495265 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :wrong window < 1181495377 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :a likely story < 1181495380 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :Mel is known to be "Mell Kaye" < 1181495394 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :@who? isn't that moo or something? < 1181495504 0 :bsmnt_bot!i=gavin@abacus.kwzs.be JOIN :#esoteric < 1181495518 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :it's not one of lambdabot's though lambdabot does take some @-commands < 1181495554 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :i vaguely recall moo commands began with @, like @create < 1181495617 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :incidentally i am pretty sure there was a lambdamoo < 1181495623 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :heh < 1181495666 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Ah yes, from wikipedia: It is the oldest and most active MOO today, with just under 3000 regular members. < 1181495704 0 :RodgerTheGreat!unknown@unknown.invalid NICK :PocketUniverse < 1181495707 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :no, lambdabot is to be found on #haskell, among other places < 1181495736 0 :PocketUniverse!unknown@unknown.invalid NICK :RodgerTheGreat < 1181495765 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :i know what lambdabot is too < 1181495833 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :it has esoteric languages too, brainfuck and i think unlambda < 1181495877 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :maybe we could invite it here... < 1181496085 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :you'll make bsmnt_bot jealous < 1181496102 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :hmph, it seems not to work presently, otherwise you can /msg it < 1181496148 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :i suppose a bot with a functional haskell interpreter _would_ make our bots jealous < 1181496198 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :you can always fork an interpreter < 1181496303 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :it has an interesting approach to sandboxing, using Haskell's type system to avoid non-pure expressions < 1181496392 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :that requires a bit more than just invoking an interpreter directly on the code < 1181496510 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :(actually it invokes a compiler and a dynamical linker. apparently all modern haskell implementations are compiler-based) < 1181496571 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :although it does run it in a forked process with ulimits, so the sandboxing is not totally type-based. < 1181496631 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :(I read about this just the other day, i think it was in the haskell-cafe archive) < 1181499908 0 :cmeme!unknown@unknown.invalid QUIT :Remote closed the connection < 1181499930 0 :cmeme!n=cmeme@boa.b9.com JOIN :#esoteric < 1181501967 0 :jix__!n=jix@dyndsl-091-096-059-193.ewe-ip-backbone.de JOIN :#esoteric < 1181502004 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :the world needs a better S < 1181502011 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :*OS < 1181502265 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :with fine grained security and a better scripting language than C < 1181502639 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :fine grained enough to run arbitrary code without a second thought < 1181502677 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :that's pretty much the dream < 1181502723 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :it might be possible to make that kind of security more feasible through the use of "secure" trusted compilers that build code that can be considered foolproof < 1181502744 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :that's not good enough < 1181502753 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :the security needs to come from the kernel < 1181502811 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :if compilation became a core service, (which it should if *all* non-kernel software was compiled on the system before execution) it would make perfect sense for it to be part of the kernel < 1181502830 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :do away with binary executables and you solve a lot of potential issues before they can start. < 1181502836 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :when i said arbitrary code, i meant arbitrary machine code < 1181502856 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :not everyone wants to give away their source < 1181502865 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :in a non virtualized environment, arbitrary machinecode is inherently insecure. < 1181502895 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :you could avoid having to distribute source by using intermediary interpreted bytecode, and effectively do the same thing as virtualization < 1181502954 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :you can execute arbitrary machine code safely < 1181502983 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :because anything dangerous has to go through the kernel < 1181503241 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :i think the hard part would be managing the tons of permissions data you need to keep track of in an intelligent way < 1181503396 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :and the methods programs use to modify it < 1181503664 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :How about requiring compilers to embed safety proofs into the compiled code? < 1181503682 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :how can you prove safety? < 1181503682 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :These would have no run-time penalty, as they would be executed by the loader. < 1181503699 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :The compiler knows more about the program that is represented in the machine code. < 1181503743 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :exactly < 1181503748 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :It could know that there aren't any generalised pointers, just refernces and array iterators, but that is hard to tell from the object code < 1181503792 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :Since it has access to a more abstract representation of the program (i.e. the source code), it has a good idea of all the safety invariants that hold. < 1181503866 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :It knows what things are always true, that are much easier to check than discover for object code < 1181503870 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :A Java compiler could annotate the code to say where on the stack was pointers and where was references. < 1181503875 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :especially if it is written in a language that actually has support for safety invariants < 1181503888 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :(then show that there is no generalised pointer arithmatic) < 1181503896 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: e.g. Java < 1181503904 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :Or just about anything modern < 1181503934 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :You could also prove things like functions not doing ay IO < 1181503943 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :*cough* Haskell *cough* < 1181503949 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :how can you prove something like that? < 1181504003 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :in Haskell, if it doesn't have an IO return type, and unsafePerformIO never gets near it, the function *does* *no* *IO*. < 1181504029 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :which as i mentioned was how LambdaBot does part of its sandboxing < 1181504031 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :that's a pretty good mechanism- I'm going to have to explore that language more. < 1181504033 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :and how can you prove that given only the machine code? < 1181504042 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :not easily < 1181504051 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :bsmntbombdood: in general, you don't < 1181504058 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :right < 1181504060 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :that is why the *compiler* creates the proof, and the loader checks it < 1181504062 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :you must construct the proof simultaneously with the machine code < 1181504063 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :I did say < 1181504086 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :how do you verify a proof is what i meant < 1181504135 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :well, to do file IO, you would have to do an OS call or fiddle with the disk devices directly < 1181504147 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :http://www.cs.cornell.edu/talc/ < 1181504159 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :therefore, you can show that you do no OS calls, and do not write to certain memory addresses < 1181504168 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :i think the right approch is to check the permissions related to a system call whenever that call is used < 1181504178 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :slow < 1181504198 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :even with a Synthesis-style OS it would be slow < 1181504214 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :(It gets only a little bit trickier if you add HoF.) < 1181504242 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :i don't think it would be much slower < 1181504288 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :depends on your permissions scheme < 1181504317 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :when to check would probably depend on how often the code is going to run < 1181504350 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :if it is going to run many times it would be better to have a once-and-for-all proof < 1181504369 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :i don't think you can have a proof like that < 1181504434 0 :kushalhada!n=A@202.70.69.15 JOIN :#esoteric < 1181504449 0 :kushalhada!unknown@unknown.invalid PART #esoteric :? < 1181504533 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :what part of this do you think is unsolvable? < 1181504582 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :i have no idea how you would construct a proof that could be verified < 1181504636 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :a proof by definition is verifiable < 1181504651 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :otherwise it is not a complete proof < 1181504701 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :you could analize the machine code at loadtime < 1181504756 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :that wouldn't work even with simple stuff like adding two numbers to get the syscall number < 1181504758 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :the machine code comes with the proof bundled, that is what proof-carrying code means < 1181504783 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :how does the proof work < 1181504841 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :it is just a proof in a machine readable format, that somehow proves that your code satisfies the system's safety protocol < 1181504860 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :uh huh < 1181504874 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :it might be equivalent to digital signing or something < 1181504896 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :or embedded into the functioning of the executable format somehow < 1181504943 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :i and have no idea how to construct a proof like that < 1181504958 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :and i highly doubt it's possible < 1181504989 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :well there are many people working on machine checkable proofs of program properties. < 1181505032 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :one of the teams is working on creating a certified compiler for Standard ML. it would be the first "real" language with such a compiler. < 1181505059 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :you can do it with a trusted compiler, sure < 1181505135 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :apparently they go through Typed Assembly Language, which is asm annotated with types proving the properties of the program < 1181505183 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :the Curry-Howard isomorphism which says that types and theorems are basically the same thing is important in much of this kind of work < 1181505215 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :so in a sense Java's types are a simpler version of the same < 1181505228 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :bsmntbombdood: but you don't need to trust the compiler. If the compiler can explain why the code is safe, and the OS can check it, then it doesn't matter if the executable is a string of random bytes, it must be safe. < 1181505250 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :SimonRC: "if" < 1181505489 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :it's not "if", it's "when", and i believe the answer is "within five years" < 1181505490 0 :sebbu!n=sebbu@ADijon-152-1-23-244.w83-194.abo.wanadoo.fr JOIN :#esoteric < 1181505504 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :although not for an entire operating system i guess < 1181505513 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :bah, 20 years at least < 1181505540 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :but if the proof is part of the executable, the compiler only has to do it once, right? <:D < 1181505577 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :right < 1181505578 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :I don't think you can construct a proof like that < 1181505581 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :Although MS's Singularity experiment has almost everything written in "safe C#". < 1181505613 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :bsmntbombdood: depends on the language you are compiling < 1181505617 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :checking permissions at runtime allows binarys to ignore security if they want to < 1181505650 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :how the hell can anyone honestly use [C-derivative] and "safe" in the same sentence without negation operators or other complex syntactic shenanigans? < 1181505651 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :I mean, a C compiler would have more difficulty than a Haskell compiler in checking safety. < 1181505666 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :RodgerTheGreat: erm C# is not that bad on that angle < 1181505681 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :you have to mark all "unsafe" code explicitly < 1181505706 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :And you can write huge swathes of code with no "unsafe" blocks at all < 1181505718 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :e.g. most of Singularity < 1181505733 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :eugh < 1181505748 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :(BTW, I really suggest that you check out the Singularity video on Channel 9 at MSDN.) < 1181505756 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :C# is better than Java < 1181505766 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :In my book, when the wheel sucks, build a new one, don't just superglue on retreads. < 1181505774 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :by which I mean, I like programming in it better < 1181505805 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :RodgerTheGreat: they have thrown away almost everything except the colour (i.e. the syntax) < 1181505813 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :although the syntax does suck a bit < 1181505822 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :but it's not too bad for an imperative language < 1181505830 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :I guess < 1181505849 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :I still feel I could do better (which is not an entirely idle statement) < 1181505898 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :"You need to be free to point the gun wherever you want, but most of the time you *know* you don't want it anywhere near your foot and the compiler should help you out with that." < 1181505911 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :heh < 1181505958 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :well, that saves you from some mistakes, but doesn't do anything about the two most dangerous types of coders: malicious hackers and people with no idea what they're doing. < 1181505963 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :.NET languages are like those lego people: they claim to be different, bu there is a haunting similarity between them. < 1181505970 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :lol < 1181505971 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :RodgerTheGreat: heh < 1181506009 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :There is only one real functional .NET language, and it is not exactly popular. < 1181506015 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :F# < 1181506030 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :I've never heard of F# < 1181506056 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :it is much based on Ocaml, i hear < 1181506312 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :yes] < 1181506319 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :doesn't look too bad to me < 1181506344 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :Although ISTR it has the dreadful syntax for types that OCaml has. < 1181506391 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :I really don't know how I can hate it so much. < 1181506439 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Ocaml is not known for having a pretty default syntax, unlike Haskell < 1181506462 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :At least it allows the C# syntax for types. < 1181506479 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :but really, *postfix* type constructors < 1181506483 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :i understand F# has an alternative syntax < 1181506491 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :that is inheritance from ML < 1181506527 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :And an infix type operator (tuple) that neither left nor right associates, but does magic instead, with parentheses being significant? < 1181506539 0 :calamari!n=calamari@ip72-200-73-175.tc.ph.cox.net JOIN :#esoteric < 1181506544 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :that is also from ML i think < 1181506568 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :yes, I know < 1181506576 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :I hate ML's type syntax < 1181506613 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :And then there's the need for explicit indication of recursion in "let"s. < 1181506618 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :hey, calamari < 1181506633 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :there's an idea I wanted to mention to you a few days ago- < 1181506638 0 :sebbu2!unknown@unknown.invalid QUIT :Read error: 110 (Connection timed out) < 1181506642 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :FFS people, it is a *functional* language! The compiler should be worrying about that, not the programmer. < 1181506647 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :ACTION stops ranting < 1181506651 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :hi RodgerTheGreat < 1181506656 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :shoot < 1181506679 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :actually without rec you can use the old definition on the right side < 1181506685 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :like with scheme < 1181506690 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :yuk < 1181506694 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :we were discussing how the use of peek, poke and varptr effectively give BASIC pointers- do you think it would be possible to incorporate this type of functionality into BFBASIC? < 1181506739 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :shouldn't be too hard < 1181506739 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :obviously, you couldn't use it for accessing arbitrary memory, but you could try to have the compiler map peeks and pokes within memory "owned" by a program < 1181506758 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :right < 1181506771 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :it _might_ be possible to access arbitrary memory if you have a fixed memory layout < 1181506786 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :er, < 1181506800 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :i guess that's what you meant < 1181506809 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: I don't think he's referring to interpreter bugs < 1181506817 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :lol < 1181506823 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :not outside the program < 1181506826 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :right < 1181506831 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :I understood exactly what you meant < 1181506848 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :excellent- we're on the same wavelength < 1181506857 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :but then with protected memory you couldn't do that anyway < 1181506889 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :a DIM statement is very similar to a memory allocation in lower-level languages < 1181507021 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :RodgerTheGreat: here is my suggestion for this... < 1181507042 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :there is a function called arrows that translates @vars into >>> <<<'s < 1181507052 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :ok < 1181507054 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :for example @myvar might be location 123 < 1181507078 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :you could change that function so that it would treat something like @234 specially < 1181507093 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :so, you're suggesting extending that function to handle peek's "dereferences"? < 1181507099 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :ah < 1181507101 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :hm < 1181507101 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :then @567 in the code would go to memory location 567 < 1181507136 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :then you can use that to write your peek and poke routines < 1181507185 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :that could work. Now that I'm thinking of this in terms of translation into BF, though, I forsee this could generate some really nasty compiled code < 1181507191 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :I don't remember what varptr is.. looking that up < 1181507201 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :well, yeah < 1181507203 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :varptr returns the memory address of a given variable < 1181507208 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :but that's the case anyways .. hehe < 1181507213 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :oh < 1181507220 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :that should be easy to implement as well < 1181507231 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :it's how you access a variable via peek and poke so you don't have to just guess wildly. :) < 1181507238 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :makes sense < 1181507249 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :do you have the source code to bfbasic ? < 1181507254 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :I think so < 1181507259 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :it is available via cvs < 1181507262 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :okay great < 1181507265 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :ACTION rifles through his drive < 1181507281 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :I think the lastest is 1.50 rc 2 < 1181507285 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :latest < 1181507286 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :effectively, if we compare BASIC to C, varptr() < 1181507289 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :erk < 1181507304 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :varptr(x) is equivalent to &x < 1181507316 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :I would start off by understanding the arrows() function < 1181507321 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :peek(x) is equivalent to *x < 1181507342 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :=*x < 1181507362 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :poke is *x= < 1181507362 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :and poke x,a is equivalent to *x=a < 1181507366 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :yeah < 1181507387 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :anyhow.. if you have any questions about the source code, let me know < 1181507402 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :ah, I found arrows < 1181507407 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :if you don't have the cvs version I can dig it up for you < 1181507411 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :I'll play around with this for a while < 1181507416 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :okay :) < 1181507425 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :I have v1.30 < 1181507486 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :that's old < 1181507494 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :oh. < 1181507544 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :well, that's the version you have in a .ZIP on your site- that's probably where I got it. < 1181507556 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :RodgerTheGreat: http://sourceforge.net/cvs/?group_id=59653 < 1181507646 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :oh, dang- you're at 1.41 < 1181507674 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :actually, src contains the latest < 1181507677 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :1.50rc2 < 1181507716 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :src/ I mean < 1181507730 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :afk.. < 1181507739 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :alright, got it < 1181507750 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :what's new since 1.3? < 1181507834 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :woah, select case? < 1181507854 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :I didn't implement that :) < 1181507914 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :and I must say that AlgebraicExpression.java frightens me a bit < 1181507950 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :wow, it all makes sense now: http://freefall.purrsia.com/ff200/fv00125.htm < 1181507971 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :lol < 1181507983 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :everyone loves a calvin and hobbes reference < 1181508187 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :ACTION reads about the significant parentheses in F# < 1181508198 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :dear god please make it stop < 1181508238 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :the type "int -> int" is not the same as "(int -> int)" < 1181508268 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :wow < 1181508328 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :neither is "type c = C of int * int" the same as "type c = C of (int * int)", though that was got from ML < 1181508341 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ACTION wonders what SimonRC thinks about python's relation syntax < 1181508569 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :what's that like? < 1181508632 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :basically, 1 <= x < y < 3 means the same as in mathematics < 1181508651 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :ah yes < 1181508658 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :Perl6 is gonna have that too < 1181508675 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :That is not *too* bad < 1181508722 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :Perl 6 is also going to have the amazing | and & operators, which allow things like "a&b=c|d", meaning "(a=c||a=d)&&(b=c||b=d)". < 1181508735 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :but they have some reasonably clean semantics behind that < 1181508746 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :that's pretty ugly < 1181508772 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :it's Perl < 1181508781 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :or possibly it means "(a=c&&b=c)||(a=d&&b=d)". I forget < 1181508815 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :is & and | not bitwise and and or? < 1181508841 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :icon has | like that doesn't it < 1181508863 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :icon does it in a good way, similar to the List monad in Haskell. < 1181508871 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :bsmntbombdood: not in Perl 6 < 1181508888 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :bitwise ones have ? prepended < 1181508927 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :so Perl 6 will not be backwards compatible? < 1181508927 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :or is that numeric ones? In which case the bitwise ones have + before them, and the character ones I forget about < 1181508931 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :nope < 1181508946 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :some very simple things will stay < 1181508979 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :numeric? < 1181509222 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :huh? < 1181509254 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :how is numeric &| different from bitwise? < 1181509278 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :ints versus strings < 1181509279 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :dunno < 1181509809 0 :calamari!unknown@unknown.invalid QUIT :"Leaving" < 1181511678 0 :jix__!unknown@unknown.invalid QUIT :"CommandQ" < 1181514639 0 :ihope!n=ihope@c-71-205-100-59.hsd1.mi.comcast.net JOIN :#esoteric < 1181518330 0 :sebbu!unknown@unknown.invalid QUIT :"@+" < 1181519657 0 :davidmc!n=chatzill@159-134-245-28.as1.chf.cork.eircom.net JOIN :#esoteric < 1181519757 0 :davidmc!unknown@unknown.invalid NICK :xTarget