<<25-06-2012>>

00:23:52*dom96_and joined #nimrod
00:24:08*dom96_and quit (Client Quit)
06:52:54*llm joined #nimrod
07:01:29*llm quit (Quit: ChatZilla 0.9.88.2 [Firefox 13.0.1/20120614114901])
09:15:43*Araq_ joined #nimrod
09:18:01Araq_good news zahary I found the memory corruption bug :-)
09:22:01zaharyyeah, I read the log
09:22:08zaharygood to hear
09:40:27*Araq_ quit (Read error: Connection timed out)
09:41:03*Araq_ joined #nimrod
10:34:10*Trix[a]r_za is now known as Trixar_za
10:55:04*Araq_ quit (Quit: ChatZilla 0.9.88.2 [Firefox 13.0.1/20120614114901])
10:57:13TasserAraq, found any leftover money?
11:20:04Trixar_zaOh I see
11:20:34Trixar_zaI need to add nimgame to the cfg file if I want to put it in a separate directory
11:25:20Trixar_za!words
11:25:39Trixar_zaer, wrong channel :P
12:24:57*Trixar_za is now known as Trix[a]r_za
13:26:26*JStoker quit (Excess Flood)
13:30:25*shevy quit (Ping timeout: 260 seconds)
13:36:14*JStoker joined #nimrod
13:42:58*shevy joined #nimrod
14:58:49*Trix[a]r_za is now known as Trixar_za
15:13:36*Trixar_za is now known as Trix[a]r_za
15:43:53*Trix[a]r_za is now known as Trixar_za
16:00:40*Trixar_za is now known as Trix[a]r_za
16:17:20*Trix[a]r_za is now known as Trixar_za
16:52:13Trixar_zaAraq, what are the minimum package requirements for Nimrod?
16:53:05AraqTrixar_za: you need a GCC
16:53:13Araqdunno about other requirements
16:53:37Trixar_zaI figured as much. Seems the rest is just optional extras
16:54:57Trixar_zaI actually tried to see how small I could make the nimrod compiler's directory (post bootstrapped and with nimrod's compiler compiled)
16:55:00Trixar_zaIt's about 20MB
16:55:45Trixar_za23MB with the examples and tests included
16:56:38Trixar_zaMeaning it's smaller than Python and Perl packaged
16:57:48Trixar_zaYes, I was kind of bored earlier :P
17:00:41Trixar_zaOh btw Araq, if you use nimgame with the latest github build it actually produces a completely different error
17:03:05Araqthe compiler's exe is about 1 MB
17:03:22Araqyou only need system.nim, lib/system and the configuration files I think
17:03:32Araqshould be way less than 20 MB ...
17:03:39Trixar_zaTrue
17:04:51Trixar_zaI left in the core, impure, pure, wrappers, posix and system
17:05:19Trixar_zaand ecmas
17:05:22Trixar_zawhatever that is
17:05:42Araqok 'core' is needed too, otherwise macros wouldn't work
17:06:30Trixar_zaYou'll probably need core to provide most functionality though
17:06:44Trixar_zaer s/core/pure/
17:06:45Trixar_za:P
18:01:55*Trixar_za is now known as Trix[a]r_za
18:25:03Araqping zahary
18:25:47zaharyhere
18:26:00AraqI've implemented routine annotations
18:26:11Araqaka "macros in a pragma section"
18:26:29Araqand I noticed there are some interesting things going on :-)
18:26:38Araqm:
18:26:44Araq proc p[T]() = nil
18:26:51Araqpasses the generic 'p' to m
18:27:01Araqand there is not much that can be done about it
18:27:05Araqbut for this:
18:27:14Araqproc p[T]() {.m.} = nil
18:27:27Araqwe can actually invoke 'm' for every instantiated 'p'
18:27:37Araqwhich is what you really want I think
18:28:25zaharyI wanted side effects from instantiations, but this actually is already possible with a static block inside the proc body
18:29:40AraqI know
18:30:07Araqso do you think it should just be syntactic sugar and no difference semantically?
18:31:47zaharythe classic use case for pragma attached to proc is when a bunch of real procs represent a single piece of functionality. like a RPC proc (you end up compiling code for serialization, probably replace the proc with a thunk function, etc)
18:34:04AraqI'm thinking of 'memoize'
18:34:16zaharybut surely there will be cases where "after instantiation" is useful (maybe another immediate vs ordinary option)
18:34:37Araqproc p[T](a, b: T): T {.memoize: (a, b).}
18:34:49Araqwhich is tranformed into:
18:35:06Araqmemoize((a,b)): proc p[T] ...
18:36:05*Tasser quit (Ping timeout: 260 seconds)
18:36:17zaharyis this a runtime memoization/
18:37:05Araqer, yes?
18:37:12Araqif I understand the term correctly :-)
18:37:26Araqyou want a different cache for each instantiation
18:37:31AraqI think ...
18:37:55Araqbut it can be done with 'static' too
18:38:12Araqer, ... I dunno
18:38:19zaharyyou can get that if you produce a single generic proc from the macro
18:39:50zaharyproc cached_p[T](a, b:T) =
18:39:50zahary var cache: THash[pair[T]] {.global.}
18:39:50zahary if (a, b) in cache: ….
18:45:29Araqsure
18:48:09Araqwell
18:48:24Araqsince it doesn't work yet the way I intented
18:48:45AraqI'll go with the simple way and make it only syntactic sugar
18:50:16zaharyalso, you can derive your "per instantiation" behavior from the simpler mechanism
18:50:16zaharyyou just need to insert a static block in the resulting proc
18:50:37Araqwell my way has problems anyway
18:51:03Araqin generic instantiation it's not supposed that proc.ast is somehow not a nkProcDef
18:51:08Araq(or similar)
18:51:46zaharydoes pragma push work pragma macros? that would be quite useful I think
18:51:57zahary* with with *
18:52:00zaharywork wirh
18:52:11Araqtemplate m(s: stmt): stmt {.immediate.} =
18:52:12Araq {.push stackTrace: off.}
18:52:13Araq s
18:52:15Araq {.pop.}
18:52:17Araqworks
18:52:18Araqif that's what you mean
18:52:29Araqin fact, I only tested it with this :D
18:52:43zaharyI mean. {.push myMacroPragma.}
18:52:57Araqno
18:53:13Araqwhat's the purpose?
18:53:17AraqmyMacroPragma:
18:53:19Araq proc a
18:53:21Araq proc b
18:53:23Araq ...
18:53:32Araqok you have to intend it
18:53:55Araqbut I don't really like 'push' and 'pop'
18:54:04Araqthey caused much trouble to implement
18:54:19AraqI prefer a first class construct:
18:54:38zaharyyes, that's why I wasn't sure about the need for macro pragmas after all
18:54:43Araqwith optimizations=on:
18:54:49Araq ...
18:54:59Araqis nicer IMO than push and pop
18:55:20Araqwould also have been much easier to implement
18:55:27Araqbut it sucks for system.nim
18:55:28*Tasser joined #nimrod
18:55:45Araqas we'd have even more indentation
18:55:51Tasserback we are again
18:56:15Araqand push/pop can do nice unstructed things:
18:56:23Araqwhen defined(x):
18:56:29Araq {.push: ....}
18:56:38Araq... ordinary code here
18:56:42Araqwhen defined(x):
18:56:47Araq {.pop.}
18:56:52zaharytrue that
18:58:07Araqbut then I never know which parts in system.nim have the dreaded stack traces turned on ... :-)
19:00:30Araqwhich is however due to the include files; unstructured pushs are not the reason ... hm
19:00:38zaharyideally, there will be also a compile-time IDE api. you'll be able to say things like "add visual label to this definition" and the IDE will display it somehow
19:14:26Araqmacros that modify whole procs have other issues btw:
19:14:43Araqvectorize:
19:14:49Araq proc p ...
19:15:22Araqif 'vectorize' is not an 'immediate' macro 'p' should be checked for semantics
19:15:50Araqwhich is what we need since then 'vectorize' has a chance to look at the *types*
19:16:12Araqso it transforms p and returns an optimized p
19:16:29Araqbut then we check 'p' for semantics again
19:16:40Araqas we can't be sure the macro produced something reasonable
19:17:07Araqbut semantic checking for nkProcDef introduces a new 'p'
19:17:22Araqthis means it will clash with "attempt to redefine p"
19:17:31Araqor something even worse
19:18:14zaharywell, there will be need for some flags like nfTransformed on the proc def for example
19:19:28AraqI think we simply need a specialized "semAfterMacroExpansion"
19:19:37Araqthat overwrites the definition
19:20:42Araqyou already did something similar
19:20:55Araqbut I forgot the details :-)
19:23:05Araqon the other hand
19:23:13Araqif macros can access the symbol table
19:23:23Araqyou could overwrite the definition yourself
19:23:33Araqand return a dummy 'nil' node
19:23:55Araqoh ...
19:24:17Araqthat's a loophole then
19:24:28Araqit can bypass the semantic checker this way
19:27:56zaharyI think the symbol table should be accessible with magics like isDefined, etc, but the interface shouldn't be too low level
19:27:56zaharyI considered once adding a addDefinition magic (can't recall why I needed that), but it was going to take a nkTypeDef or nkProcDef and just run the sem functions over them
19:30:01Araqactually it's a bit weird to hand nkProcDef to the macro
19:30:16Araqperhaps the macro should receive the proc's body only
19:30:41Araqbut then it couldn't add implicit parameters
19:30:46Araqso screw that
19:34:53Araqhm it should be easy to add an 'overwrite' mode for semcheck after macro expansion
19:35:08Araqin fact the code is already prepared for it
19:35:17Araqas the REPL has the same problem
19:35:25Araqvar x = error
19:35:33Araqvar x = 0 # overwrite please
19:40:15Araqok, next topic:
19:40:31AraqI plan to implement a {.forward: on.} pragma
19:40:54Araqthat causes the compilation pipeline to pass the whole module to the passes
19:41:18Araqand the semantic pass will then add the headers of all procs and methods to the symbol table
19:41:38Araqas if there would be an explicit forward declaration for them
19:42:29Araqwe can later make {.forward: on.} the default, but I will turn it off for the wrappers anyway
19:43:03Araqthe plan is to not add any proc/method in a 'when' statement
19:43:29Araqand to not do it for templates, iterators and macros as these have inlining semantics anyway
19:43:54Araqand I don't like the compiler to use some arbitrary flow through the module for semantic checking
19:44:21Araq(yes I know it's not really arbitrary ...)
19:45:13AraqI think these restrictions make perfect sense :-)
19:45:23Araqopinions?
19:45:26zaharyso, when I say "forward on", at the top of the module there are forward declarations for all procs?
19:46:02zaharywhat are the when statements doing? when isDefined(paramType): forward declare?
19:47:19zaharyah, I read your message in a wrong way
19:48:02zaharywell, the problem is the param types which come from other modules - the forward declarations should appear after the import statements
19:48:21Tasserwhat about conditional imports?
19:48:31zaharyyou can do them now
19:48:57Araqwell it's restricted to a single module obviously
19:49:11Araqyou need the explict forwards if you do cyclic modules
19:49:23Araqwhich are currently broken anyway
19:49:45Araqoh wait
19:49:49Araqnow I get what you mean
19:50:11Araqhm yes the {.forward: on.} needs to come after the import statements
19:50:17Araqtricky
19:50:38Tasserwhy tricky?
19:50:54Araqbecause 'import' can appear anywhere in top level scope
19:51:04Araqyou don't have to do it at the top of the module
19:51:13Araq(though almost all code does it)
19:53:15Tassercan't you resolve wherever a proc can be forward-declarated?
19:54:46Araqwhat do you mean?
19:54:51zaharyyou need to do a topological sort on the graph of procs pointing to their dependent symbol names (i.e. type names appearing as params and return values)
19:58:32Araqthat's as bad as doing a depth first traversal through th e module
19:58:54Araqmight as well do that then instead
19:59:35Araqfirst pass simply adds forwarded syms to the symbol table
19:59:50Araqand then semantic checking is done when the symbol is accessed
20:00:08zaharyI was explaining to Tass. otherwise, yeah, I have thought about this and a first pass over all modules is what I would go with
20:00:36Araqover all modules? o.O
20:00:49AraqI was still talking about *within* a single module
20:01:56zaharywell, I think cyclic dependencies should be allowed
20:02:22Araqthey are but you need explicit forwarding for them to work
20:02:41Araqotherwise you have Java/C# style
20:03:19Araqwhich is hardly a module system at all
20:03:51zaharyhmm, what's not right there?
20:05:30AraqI'm not sure how java does it these days
20:05:59Araqbut visual studio recompiles everything when I load a solution and keeps it in memory
20:06:31Araqafaik it uses a whole program translation approach much like nimrod does
20:06:59Araqexcept that nimrod now has symbol files
20:07:30AraqI don't know if they could be done for C#
20:07:33zaharyare assemblies equivalent to symbol files?
20:07:44zaharywhen it comes to compilation I mean
20:08:01zaharyaren't assemblies *
20:08:15Araqhm I dunno :-)
20:08:35AraqI only know it compiles too much and it takes too long :D
20:10:30zaharyyou can have any cyclic dependency in nimrod too (if it's not cyclic at the symbol level) - it's just quite a bit of pain in the ass to write the code in the required style
20:10:31zaharyyou have to do it like this
20:10:31zaharyproc foo(x: int)
20:10:31zaharyimport tables
20:10:32zaharyproc foo(x: TTable)
20:10:33zaharyimport windows
20:10:33zaharyproc foo(x: HWND)
20:11:16zaharyeverything that doesn't depend on another module gets at the top of the file, all imports are pushed as much as possible after the forward declarations
20:11:46zaharythis doesn't brake symbol files, right?
20:12:24Araqyeah it should be possible
20:12:49Araqand yes
20:13:06Araqit is possible to do allow all sort of crazy cycles and cache nevertheless
20:13:55Araqfor a cyclic dependency you simply have to the algorithm "assume unchanged"
20:17:13Araqbut if you have a dependency A -> B -> A you can hardly call it "modularity"
20:17:31Araqhow do you reuse B?
20:17:44Araqship it with A?
20:18:00Araqyou may as well 'include' it then ...
20:19:34zaharyin lasagna code terms, there just at the same layer. cyclic dependencies should not break layers
20:20:42Araqhttp://www.haskell.org/haskellwiki/Mutually_recursive_modules
20:20:53zaharyI remember reading an article once that argued that all OOP consists of a cyclic dependency between the few data structures that appear as members
20:26:00Araqwell
20:26:13AraqI think I'll do it differently :D
20:26:22Araqembrace the pragma solution
20:26:43Araq{.forward_refs.} # put forward refs here for all procs coming afterwards
20:26:59Araqand the programmer has to put it after the imports himself :D
20:27:13zaharythe proliferation of included files in the compiler is evidence for the these troubles with cyclic dependencies - there is the sem layer, but it can't be broken in several modules - instead we end up with one sumo module
20:27:39Araqyes I know you would bring this argument ;-)
20:27:46Araqit's a good point
20:28:20Araqbut the compiler is already quite complex and your proposal might take years to implement
20:28:46AraqI want a hacky solution now :-)
20:30:06zaharyI don't think it's that hard. I'm more worried about the performance costs associated with it, but I might give it a shot.
20:30:28Araqbtw we also could use modules instead of includes with the "dynamic binding hack"
20:30:48zaharyof course, you can implement anything in the meantime
20:31:44Araqalright
20:32:12Araqif haskell needs hacks around these things, nimrod is allowed them too :D
20:32:30zaharyI know, but I considered it even less appealing than the import statements layout that I mentioned earlier
20:37:21Araqmaybe we need the notion of a "package" in nimrod
20:37:47Araqand we disallow cyclic dependencies between packages
20:38:04Araqand compile a package as a single compilation unit
20:38:24Araqthis is effectively the 'include' solution but with better namespacing
20:56:54TasserAraq, so import package.file or what?
20:57:11Tasseror package.path/to/file/in/package
20:57:54AraqTasser: I dunno
20:59:56zaharyaren't packages in haskell a collections of modules? something more closer to a lib or dll in nimrod
21:00:43Araqhow come you are marked as away, zahary? :-)
21:01:17zaharydunno, I was away for the last 20 minutes
21:01:21zaharyam I still away?
21:03:02Araqyes
21:06:53Araqand to answer your question: I think haskell's packages only have to do with the package manager
21:07:04Araqrecursive modules are orthogonal to them
21:08:43Araq(btw now you're not away anymore)
21:09:36Araqok next topic (last for today)
21:09:55Araqgenerics suck as you have to type [T] all over
21:10:19AraqI always played with the idea to do:
21:10:36Araqgeneric [T: constraints_here]:
21:10:38Araq type
21:10:46Araq TContainer = ...
21:10:55Araq proc op1( ...
21:11:22Araqwhere the 'generic' would simply insert the [T] at the "appropriate" places
21:12:13Araqbut we already have implicit generics now ...
21:12:23Araqwhat's their status btw?
21:14:43zaharyso you like my proc foo(x: seq) style :)
21:14:45TasserAraq, so where would T be inserted in that snippet?
21:15:01Tasserzahary, thumbs up for that
21:15:23Tasserand I'd rather call them container instead of implicit generics
21:15:26Araqzahary: as I said, I'd prefer empty [] to denote a generic
21:15:46Araqin the implicit case
21:15:50Tassercontainer generics that is
21:15:59Araqbut I can see that it's a bit ugly
21:16:14TasserAraq, it takes a seq. Why the need for []?
21:16:35Araqto have "proc p(a, b)" # note no types here
21:16:50Araqavailable for more advanced type inference
21:18:01TasserI'd say use * or . as wildcard in that case
21:18:09Tasser... which is ugly, sadly
21:18:10zaharybut that's orthogonal too. there are simple 2 types Any(current expr) and Infer(to be implemented) and one of them is the default
21:18:22zahary* simply 2 *
21:18:43Araqwell yes but 'proc p(a, b)' can only have 1 meaning I think?
21:18:56*Trix[a]r_za is now known as Trixar_za
21:19:00zaharyit will mean infer when we have that
21:19:12Araqyou don't want haskell's type inference, you want clay's type propagation
21:19:43Araqso it will break compatibility once we got 'infer'?
21:19:52zaharyyep, I haven't programmed much in haskell, but I found it too strict in the few examples I tried
21:21:15zaharyand I actually mean the 'a types handling in ML in general (I have spent more time with ocaml than haskell)
21:23:10Araqhm what do you mean? 'a is too restrictive?
21:23:31Trixar_zaBtw Araq, I was thinking. I recently compiled Python and it actually had some painful dependencies (and headers) to compile certain modules. With Nimrod you don't need those headers to compile nimrod or even the packages needed by impure or wrappers
21:23:58Trixar_zamodules*
21:24:13AraqTrixar_za: yes. and your point is?
21:26:36Trixar_zaWell, a Nimrod package will have less requirements (actually only gcc) and the rest are suggested packages
21:26:46Trixar_zaSpeaking as a packager
21:27:22Araqwell a nimrod package depends onto the nimrod compiler
21:27:32Araqand the nimrod compiler on GCC ... :-)
21:28:34AraqTrixar_za: actually I have been thinking to provide a minimal nimrod distribution in addition to the default distribution
21:28:42fowllatest nimgame failing to compile for me :(
21:28:54Trixar_zaSame here fowl
21:29:02Trixar_zaWith a new error too
21:29:03Trixar_za:P
21:29:52fowlwho is vladar4
21:29:56fowldoes he come in here
21:30:42Araqvladar is only on the forum I think
21:30:55Araqbut it's on github, file a bug report
21:31:03Araqthough I think it's a compiler bug
21:31:15Trixar_zalib/nimgame/mask.nim(25, 18) Error: type mismatch: got (int, uint16)
21:31:15Trixar_zabut expected one of:
21:31:27Araqoh I see
21:31:38Araqwell unsigned ints are new ;-)
21:31:48Trixar_zalol
21:32:14Trixar_zaso originally it didn't use unsigned ints?
21:32:22Araqyes
21:32:28fowlmine is different http://pastebin.com/1KBCvtbJ
21:32:46fowlcryptic >_>
21:32:46Trixar_zaThis is with the latest git version btw :P
21:34:09Trixar_zarun koch boot -d:release
21:34:29fowli dont have a `koch`
21:34:33Araqwell fowl your error is related
21:34:53Trixar_zaAh, you didn't bootstrap then
21:35:15Araqer what?
21:35:33Araqfowl: how can you have a debug version of the compiler without bootstrapping? o.O
21:35:46Trixar_zaWell, he didn't use ./bin/nimrod to compile koch
21:35:54fowlAraq, not sure?
21:36:00Trixar_zaand didn't do koch boot -d:release
21:36:01fowlthis time i installed through AUR
21:37:02Trixar_zaWhen I messed up the koch boot you told me to do (I parseopt was taking 5 minutes like usual, so I just killed the process) it gave me the same error
21:37:37Trixar_zaafter doing koch boot -d:release properly, it fixed it and gave me the other standard error :/
21:38:24AraqTrixar_za: it hardly "fixed" it ...
21:38:31Araqit just hide it
21:38:40Trixar_zalol
21:38:50Trixar_zaWell hidden then
21:39:00fowlid rather wait until its updated for .8.15 than compiling .8.14 again
21:39:19Araqsure
21:40:45Trixar_zaBtw fowl, did you fix nimgame's use of do?
21:41:06AraqAUR's package is stupid if it ships with a debug version of the compiler ...
21:41:19Araqit gives nimrod's compile times a bad name ...
21:43:22fowlTrixar_za,i could give it a try
21:43:26Trixar_zaAh, so it's actually a bug and because the libraries still had the debugger code inside, it showed.
21:43:46Trixar_zaI thought I broke something >.>
21:46:15Araqso zahary what do you think of my 'generic' block? unnecessary?
21:48:28zaharyfist about ocaml… let me try to remember:
21:48:29zahary1 very weird problem was that some basic operations like number arithmetics were not defined as generic functions and this created all sort of problems in implementing other generic functions, which are based on these operations
21:48:29zaharyI can't remember the details on why the type system didn't allow me to work around this problem in a way similar to C++ where I would simply introduce overloads to adapt the incompatible interfaces
21:49:08Araqbecause ocaml doesn't support general overloading
21:49:20Araqas overloading + type inference is NP complete
21:49:39Araqit also has +. for float addition iirc
21:50:05zaharyhow does haskell deal with this? the grass is greener there as type classes are more consistently used in most of the libraries
21:50:31AraqI think the somewhat bounded overloading doesn't help
21:50:49Araqand they just have potentially exponential compile times :-)
21:51:57zaharybut even haskell type classes are too strict for me as you need to explicitly define every single category of types and provide type classes instances for every type
21:52:22Araqon the other hand the type classes introduce runtime polymorphism so they don't need to resolve the conflict at compile time ... ugh ... my haskell is too weak to tell
21:54:02Araqanyway, I like the C++ styled duck typing for generics
21:54:30Araqit's flexible and who cares if compile time errors are somewhat hard to read
21:55:29zaharyyou claimed better error messages and avoiding accidental type mismatches are good reasons to avoid overly generic code, but I don't see why anything that compiles (a type mismatch, you passed a wrong kind of duck) should be an error
21:56:24zaharythe errors can be improved upon - the clang guys are using very interesting algorithm to recover the "implicit interface" of the generic param
21:57:11zaharyso they tell you why your type is broken and locate the correct offending line pretty well
21:57:43Araqhey you're unfair
21:58:03AraqI always said it's kinda stupid to specify the contract that's already implict in the proc body anyway
21:58:50Araqhowever I said I'd do:
21:58:56Araqtype TMyFloat = float
21:59:11Araqand then have a 500K math library rely on nominal typing
21:59:22Araqto get sane compile times
21:59:32Araqand prevent code bloat
22:00:55Araqand it's easy to overdo generic types: every single string I use could be string[encoding] for instance
22:01:11Araqand generics are viral
22:02:00Araqspeaking of which
22:02:16Araqif you buy a commercial physics engine in C++
22:02:36Araqwhat does the code use? templates everywhere? or nominal typing?
22:03:08zaharynominal typing, I complained at length how terrible is that if you remember
22:03:25zaharyin fact every single library have their own math types
22:04:02Araqtrue but I suppose you can only do so much if you want to provide a DLL
22:04:27zaharyand you can't take advantage of ton of useful code for that reason (you are willing to endure the pain for the fancy physics engine)
22:04:27zaharywell, you can ship rod files
22:06:11zaharygiven that obfuscated version of the code can be produced, there will be less concerns for companies protecting their commercial code
22:08:30Araqrod files are simple to disassemble ... ;-)
22:10:42Araqbut we can change that; please continue
22:12:18zaharythe simple symbol renaming techniques are enough of a barrier for someone to seriously consider "stealing / forking" a commercial codebase
22:21:34Trixar_zaHehehe
22:21:46Trixar_zaI think I may enjoy writing a tutorial
22:24:23Trixar_zaInstalling Nimrod: "This is the point in most tutorials/guides where they baby you into how to install the programming language to your system. I'm not going to do this (sorry). Read install.txt like a good boy/girl and follow the instructions for your operating system. Well done, you deserve a cookie."
22:25:49Araqlots of people have trouble with building nimrod, Trixar_za :P
22:26:06Araqas you can never use the latest stable release to compile the new one
22:26:27Araqand I never mentioned that fact anywhere ...
22:27:07Araqbut hey that only shows nimrod's rapid progress :D
22:27:23Trixar_zaOr that it's jumped the shark early
22:27:24Trixar_za:P
22:29:08Trixar_zaBut yeah, I probably should provide some guide on how to do it. Taught somebody to use -d:release and --opt:size today too
22:29:15Trixar_zaI don't even thing about it anymore :/
22:37:42*Trixar_za disappears to bed
22:38:21*Trixar_za is now known as Trix[a]r_za
22:44:38Araqgood night
22:44:54fowlhow can you have problems? there are only 4 steps