<< 10-02-2014 >>

00:00:29filwitAraq: okay great. so my thinking was pretty accurate. I can hack fix it myself, so it's not a big deal.
00:01:12AraqI will tell you the invariant in the vm when you document it afterwards. deal?
00:02:11filwiti'm not sure exactly what you mean, but I don't mine documenting things as I learn them
00:02:28Araqgood, will tell you tomorrow, I need to sleep now
00:02:41filwitokay, night
00:07:36*darkf joined #nimrod
00:25:47*xenagi joined #nimrod
00:42:40*ics quit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
01:01:25DemosBitPuffin, ping
01:14:06BitPuffinDemos: pong?
01:14:24Demoslinagl is your library right?
01:14:30BitPuffinhell ye
01:14:47BitPuffinmissing somoething?
01:14:52DemosI am trying to write a linear algebra library (because why not) and am running into issues with static[T] not existing
01:15:21BitPuffinDemos: why not? Because linagl :P
01:15:23Demoswell I want to have a type param that would make the matrix dynamic sized, but I am not sure how to do that without compile time constant values
01:16:00BitPuffinDemos: right now unless I have missed something you can only pass ranges as parameters to generics
01:16:15BitPuffinso that's why linagl atm does that
01:17:02BitPuffinso you have to do type TMat5 = TMatrix[float32, range[0..4], range[0..4] instead of TMatrix[float32, 5, 5]
01:17:37BitPuffinDemos: but you should be using linagl instead :) it is in the public domain and everything
01:20:41BitPuffinDemos: so you could even use it for your secret illegal drug dealer projects
01:25:12*Demos_ joined #nimrod
01:25:18Demos_sorry, I got disconnected
01:25:47Demos_so it is just really stupid that you can only pass ranges as generic params
01:26:35BitPuffinDemos_: check the logs if you missed what I said
01:27:17Demos_yeah you can use ranges, but static[int] is a documented feature that does not work...
01:27:36BitPuffinDemos_: I don't even know what it is supposed to do
01:27:57Demos_you can have template params that are compile-time constant values
01:28:06*Demos quit (Ping timeout: 245 seconds)
01:28:13BitPuffinhmm
01:29:23BitPuffinDemos_: docs link?
01:29:35Demos_http://build.nimrod-lang.org/docs/manual.html#special-types
01:29:40Demos_note that none of that code works
01:33:29*ics joined #nimrod
01:46:41Demos_using ranges is a fairly bad solution. I also can not get code like type Foo[T] = object, proc DoIt[Foo](): int = stuff with Foo.T
01:53:32Demos_BitPuffin, Also why are vector and matrix seperate types?
02:08:03*EXetoC quit (Quit: WeeChat 0.4.2)
02:25:35*askatasuna joined #nimrod
02:32:51Discolodawhat arguments can a generic take?
02:33:13*askatasuna quit (Ping timeout: 272 seconds)
02:33:58*dmac quit (Ping timeout: 246 seconds)
02:40:16*BitPuffin quit (Ping timeout: 246 seconds)
03:12:16Demos_types that do not cause the compiler to break when you try and pass them to a generic
03:13:16*BitPuffin joined #nimrod
03:34:14*aftersha_ joined #nimrod
03:38:14*BitPuffin quit (Read error: Connection reset by peer)
03:38:52*BitPuffin joined #nimrod
03:44:27*carum joined #nimrod
03:45:22*brson quit (Ping timeout: 246 seconds)
03:47:20Demos_ping BitPuffin
03:47:20*brson joined #nimrod
03:48:50Demos_linagl does not work very well... or at all
03:51:13*aftersha_ quit (Quit: Computer has gone to sleep.)
03:59:21*BitPuffin quit (Ping timeout: 245 seconds)
04:01:09*xenagi quit (Quit: Leaving)
04:14:52*carum quit (Remote host closed the connection)
04:20:13*BitPuffin joined #nimrod
04:22:10*ics quit (Ping timeout: 260 seconds)
04:24:49*ics joined #nimrod
04:32:32*BitPuffin quit (Ping timeout: 253 seconds)
04:41:48Demos_cd ..
04:42:43*carum joined #nimrod
04:43:43*carum quit (Remote host closed the connection)
05:08:54*micklat joined #nimrod
05:10:49*micklat quit (Remote host closed the connection)
05:13:18*dmac joined #nimrod
05:28:17*brson quit (Ping timeout: 246 seconds)
05:28:23*brson joined #nimrod
05:33:47*Demos_ quit (Quit: Leaving)
05:36:30*isenmann joined #nimrod
06:08:21*micklat joined #nimrod
06:15:00*ddl_smurf quit (Quit: ddl_smurf)
06:15:18*DAddYE joined #nimrod
06:17:57*brson quit (Read error: Operation timed out)
06:20:41*ics quit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
06:25:37*ics joined #nimrod
06:42:36*demizer joined #nimrod
06:46:04*demizer quit (Quit: WeeChat 0.4.2)
06:46:51*demizer joined #nimrod
07:06:43*aftersha_ joined #nimrod
07:09:01*filwit quit (Quit: Leaving)
07:24:04micklatI want to submit a pull request. How do I run the test suite?
07:34:26*athaudia quit (Ping timeout: 265 seconds)
07:41:12*aftersha_ quit (Quit: Textual IRC Client: www.textualapp.com)
07:41:29*aftersha_ joined #nimrod
07:41:55*aftersha_ quit (Client Quit)
07:56:51*psquid quit (Ping timeout: 272 seconds)
07:58:00Araqmicklat: "koch tests" does the trick
07:58:24Araqbut currently many tests fail, I'm working hard to make them green or disable them
07:59:03Araqbbl
08:39:54*aftersha_ joined #nimrod
08:47:11*aftersha_ quit (Quit: Computer has gone to sleep.)
09:19:07*skrylar joined #nimrod
09:19:23skrylarmeep
09:30:13*athaudia joined #nimrod
09:30:48*DAddYE quit (Remote host closed the connection)
09:32:05*CarpNet joined #nimrod
09:37:13skrylari will say that when i saw nimrod compiled to C originally i passed over it for Rust, since haXe's C++ target was dog slow. After seeing how fast it actually runs despite using GCC i am impressed
09:46:25*dmac quit (Ping timeout: 272 seconds)
10:00:11*micklat quit (Remote host closed the connection)
10:03:34*radsoc joined #nimrod
10:29:57*BitPuffin joined #nimrod
10:30:05BitPuffinpong demizer
10:30:09BitPuffinDemos_
10:30:15BitPuffinseems like he isn't here though
10:30:19BitPuffinwould like to know what is wrong
10:30:28skrylarits a pretty quiet night
10:30:30BitPuffinlinagl has probably been affected by regressions or something
10:30:49BitPuffinI noticed that some bug I had posted was re-opened on github
10:30:55skrylardo you know the last version your code worked on?
10:31:14BitPuffinskrylar: well no since it was a git version
10:31:26BitPuffin0.9.3 doensn't really help because there is a million 0.9.3's :P
10:31:32skrylarhrm
10:31:48skrylaryeah, i should probably poke about that. Rust encodes the git revision in to -v
10:32:10skrylarI was going to suggest using bisect to find the regression, but that requires you know what hash was good
10:32:21BitPuffinskrylar: I have never seen you here before btw, so hey! :)
10:32:29skrylarBitPuffin: 'elloes
10:32:33BitPuffinanyway
10:32:39BitPuffinHe just said that linagl doesn't work
10:32:43BitPuffinhe didn't say what didn't
10:32:48BitPuffinkind of unhelpful
10:32:50skrylar:/
10:32:53*ics quit (Ping timeout: 252 seconds)
10:32:55BitPuffinI haven't touched it in a while though
10:33:04BitPuffinBut I could do some work on it after work today
10:33:24BitPuffinlet's see if he created a bug report
10:34:41BitPuffinnope no bug report
10:34:50BitPuffingod damn it Demos!
10:35:25skrylarno bug report, no bug :o
10:35:32*ics joined #nimrod
10:36:13BitPuffinand I just tried compiling and running the tests
10:36:15BitPuffinno errors
10:36:21BitPuffinso kind of hard to know what he's talking about :(
10:36:34BitPuffinunless he's like using 0.9.2 or something
10:36:38BitPuffinbecause that is not supported
10:36:53skrylaryay releases-that-youre-not-supposed-to-use synrome \o/
10:37:03BitPuffin\o/
10:37:13BitPuffinyeah hopefully Araq releases 0.9.4 soon
10:37:15skrylarrust does that too. i think its really silly
10:37:31BitPuffinalthough if generics aren't fixed by then I'm gonna have to require 0.9.5 pretty quickly to use linagl
10:37:45skrylarwhats broken about generics right now?
10:38:25BitPuffinuh well for example, you can't pass anything but types and ranges as parameters to them right now
10:38:56BitPuffinand when they aren't types you can't use them in the return type
10:39:19skrylari thought thats what the generic system was for
10:39:32skrylari thought if it wasn't a type, you were supposed to use a template
10:39:52BitPuffinskrylar: njaeeaeahe
10:39:59BitPuffinanyways take this as an example
10:40:04BitPuffinthis is a workaround that uses ranges
10:40:10BitPuffinand it still doesn't work
10:40:12BitPuffinproc sub*[T; R, C: range](m: TMatrix[T, R, C], therow, thecol: TInteger): TMatrix[T, R.low..R.high-2, C.low..C.high-2] {.noSideEffect.} =
10:40:38BitPuffinthis is for getting a submatrix of a matrix of R*C dimensions
10:42:13BitPuffinskrylar: so as you can see there is no way for me to say that "this returns a matrix that is one R-1*C-1 dimensions
10:42:35*skrylar doesn't know math ._.
10:42:56BitPuffinskrylar: okay well a two dimensional array then
10:43:07skrylari'm looking at the line
10:43:54skrylarI think the range part in your return definition is doing it
10:44:11skrylaris one allowed to do expressions when declaring a generic type?
10:44:23BitPuffinskrylar: basically what it is trying to say is that if you have an array (just gonna use C ish syntax for fun) that is [4][4] that you pass in, you will get a [3][3] array back
10:44:41BitPuffinskrylar: you are supposed to be allowed to do it but it doesn't work right now
10:44:57skrylarI'd probably templatize it then
10:45:15skrylarI have one section of code that uses templates and 'emit' just because the pragma syntax is derpy
10:45:31skrylare.g. proc foo(...) # works
10:45:45skrylarproc foo(...) {.importc: bar.} # nope
10:47:05BitPuffinodd
10:47:25skrylari also had bad issues where if i try to use 'macro' at all, the compiler segfaults
10:47:59BitPuffinskrylar: have you talked to Araq about it?
10:48:10BitPuffinand checked if it was reported and if not reported it? :P
10:48:12skrylarBitPuffin: this is the first time i've been to the IRC, tonight
10:48:21BitPuffinah I see
10:48:31skrylari poked in to nitpick about unicode
10:48:35BitPuffinwell Araq is our leader so it's him you should pester about these things
10:49:15skrylarI noticed 'char' was 8-bit and that the 'unicode' module operates on runes, which is incorrect; i'll have to poke/patch that at some point
10:49:37BitPuffinincorrect?
10:49:39skrylarits a common mistake, but 'graphemes' are the correct unit to iterate by when dealing with a unicode string, not runes
10:50:04BitPuffinah
10:50:13BitPuffinwell I don't know super much about encodings
10:50:16BitPuffinjust a little
10:50:32skrylarBitPuffin: basically according to the TRs, a 'code point' is the actual numeric value for a single unicode thingy; though a lot of people call those 'runes'
10:51:05BitPuffinTR?
10:51:06skrylarbut say, an umlauted A
10:51:15BitPuffinumlauted? :P
10:51:17skrylarBitPuffin: unicode technical report
10:51:20BitPuffinah
10:51:44skrylarif you put an A with an umlaut in the stream, it can be a special "A-with-umlaut" code point or "A" followed by "combining diacritic: umlaut"
10:52:04skrylarthese are both valid unicode
10:52:50skrylarthe pain in the ass is that there is no 'actual' limit to how many diacritic marks can be stuffed on a single rune, which means you can have a single letter and 5,000 symbols stuck to it; though the stream safe subset only allows 30
10:53:41BitPuffinlol
10:54:08BitPuffinah umlaut is like åäö?
10:54:14skrylaryeah
10:54:27BitPuffinor maybe without å
10:54:36skrylarI wrote a unicode lib in C99 last year, it was painful.
10:55:06BitPuffinwell not surprising you know so much about that then :P
10:55:14skrylarheh
10:55:26skrylarIts amazing how much of a pain it truly is to get text on the screen :)
10:57:08BitPuffinhehe
10:57:11*askatasuna joined #nimrod
10:57:16BitPuffinThat's what happens
10:57:58skrylari'm still surprised by the binary size for nimrod so far
10:57:59BitPuffinit's funny how you think those things are easy
10:58:14BitPuffinbut it's because it is solved
10:58:22skrylarits easy until you want something special
10:58:35skrylari think thats why there are no good outliners for windows, really
10:59:07skrylaron the mac you can just ask the OS to do most of this for you; on Windows the instant you want more than a stock control you're back to learning about font metrics and gap buffers
11:01:20skrylarthere's also horrible things like what Unity or Love2D do
11:01:46BitPuffinwhat do they do?
11:01:52skrylarLove2D just goes through the string every frame and asks SDL to render it by character; Unity creates and GC's every widget on the screen per frame
11:02:10BitPuffinHAHA
11:02:12BitPuffinwhat
11:02:13skrylarits no wonder that on a 1000$ engine, people are still selling GUI replacements
11:02:21skrylarbecause the GUI is just godawful
11:03:36skrylarUnity is really no better than OGRE with a pre-made level editor and Mono/C# bindings ^^;
11:04:02BitPuffinso you are saying use NeoAxis?
11:04:20BitPuffinIt is "better" though
11:04:26BitPuffinsince ogre is a rendering engine
11:04:27skrylarI wouldn't actually pay for an engine o.o
11:04:32BitPuffinunity also comes with physics and shit
11:04:37BitPuffinand I know
11:04:39BitPuffinthere are plugins
11:04:45BitPuffinanyways I hate premade engines anyway
11:04:58skrylarThere is one and only one pre-made engine I respect, and that is the Unreal engine
11:05:11skrylarBecause people can punch that thing in to doing pretty much anything they want it to
11:05:17BitPuffinlol
11:05:27BitPuffindo you know what a god awful codebase UE 3 has?
11:05:33BitPuffinI've heard terrible horror stories
11:05:38BitPuffinbut basically to sum it up
11:05:52BitPuffinthe UE 3 games you see on the market, such as Bioshock Infinite etc
11:05:58skrylarTorque is.. meh, I don't like it. I actually bought a license before they fully opened it but you have to patch the C++ side to do anything interesting, and TorqueScript is pretty hilarious
11:05:58BitPuffinare NOT even running UE 3
11:06:06skrylaryeah everyone hates 3
11:06:13skrylarubisoft still uses 2.5
11:06:40BitPuffinit's like, something that has been patched and orked around and all that stuff until it barely works but is yet better than the original
11:06:50BitPuffinoh so you meant UE 2.x?
11:06:57skrylarsounds like gamebryo lol
11:07:05skrylargamebryo is just terrible
11:07:16skrylarit sounds like a great idea and you see Civ + TES games use it
11:07:38skrylarthen you find out that Civ had to bugfix the hell out of the engine to fix the terrible performance leaks
11:07:55skrylarand Bethesda has been monkeypatching it until Skyrim where they basically rewrote everything
11:08:30skrylarall though i still find Source to be the most embarassing engine IMO
11:08:38BitPuffinWhy?
11:08:47BitPuffinI'd say that source is probably one of the most robust on the market
11:08:47skrylarIts a jank Quake 2 engine
11:09:09skrylarNo scripting layer, only supports BSP maps, does not handle large maps with any grace
11:09:29BitPuffinit has lua and squirrel scripting?
11:09:46skrylarit didn't the last time i knew people who tried to use it
11:09:54BitPuffinI guess it's not built to be a silver bullet (nothing can be)
11:10:04BitPuffinwhich I think is fine
11:10:17BitPuffinin fact I think that's the whole problem with premade engines
11:10:22BitPuffinthey are built to solve everything
11:10:25skrylarhttps://developer.valvesoftware.com/wiki/Source_Engine_Features no scripting layer
11:10:28BitPuffinwhich makes them a mediocre solution for everything
11:11:10skrylarwell that was why the unreal engine used to be good
11:11:12BitPuffinhttps://developer.valvesoftware.com/wiki/VScript
11:11:22skrylarit was a chunk of modules glued together by unrealscript
11:12:37skrylarheh squirrel and gamemonkey. i remember those
11:13:24skrylarSadly LuaJit is pretty much the reason non-lua scripting languages don't matter for games; at least in my opinion
11:14:38skrylarthe amount of speed that thing punches out of lua is absurd
11:15:41BitPuffinwell
11:16:39BitPuffinI might argue that you shouldn't use a scripting lang for the stuff that needs absurd perf
11:17:10skrylarmaybe
11:17:19skrylarthough i don't like regular code being slow for no reason
11:17:37BitPuffin*cough* nimrod
11:17:52skrylari haven't had speed issues yet ._.
11:18:02BitPuffinthat's not what I meant
11:18:21BitPuffinI meant that nimrod is pretty much as pretty as a scripting language but still fast as a systems programming language :
11:18:23BitPuffin:)
11:18:38skrylarwell, i didn't use it at first because GC and compiles to C
11:18:53BitPuffinyou don't have to use CG
11:18:55BitPuffinGC*
11:18:57skrylarmandatory GC makes me 'ew' and i used haxe which compiles to C++ and is dog slow
11:19:23skrylara simple roguelike in haxe took like 2-15 seconds to build
11:19:23BitPuffinand compiles to C is a nice feature because it means you can run on places that don't support nimrod (ie, every console on earth)
11:19:40skrylarit helps that its *straight* C
11:19:59skrylarregular C compiles pretty fast if you aren't a derp with 50mb of headers to trawl
11:19:59*aftersha_ joined #nimrod
11:20:02BitPuffinskrylar: anyways, we have optional GC (I also hate mandatory GC with a passion) and the compilation speed is pretty decent!
11:20:31skrylarBitPuffin: yeah, i saw that the GC was competent
11:20:34BitPuffinskrylar: yes and I believe nimrod also does some voodoo with compiling it on multiple threads etc
11:20:53BitPuffinor like
11:21:06BitPuffinIt compiles the C while it generates the next C for it to compile
11:21:10skrylarnimrod doesn't emit headers for things that don't need it, so GCC isn't trawling megabytes of useless data
11:21:13BitPuffinso it's utilizing resources well
11:21:30skrylarI used to use a program 'makeheaders' for my straight C which did the same thing
11:21:49skrylarscanned your C files and made minimized headers, so 1) no manual maintenence and 2) much faster compiling even without parallel builds
11:22:01BitPuffinskrylar: anyway, there is no reason why we couldn't compile straight to machine code (you are in fact welome to implement it if you so please :P)
11:22:14skrylarBitPuffin: nah, i don't mind since its very quick
11:22:17BitPuffinwe just use C because we can utilize optimizers and shit
11:22:30skrylarthe full build of the compiler only took ~10 seconds IIRC
11:22:40BitPuffinyup
11:22:50BitPuffinand that's the biggest nimrod source there is more or less
11:23:02skrylari don't mind 10 seconds for a massive code base, especially considering you don't usually *need* to full build all the time
11:23:06skrylar:)
11:23:45BitPuffinyep
11:23:47BitPuffinbuild in caching
11:23:49BitPuffinluvit
11:24:01skrylarccache + lazy compilation :3
11:24:08BitPuffinwe also *can* compile to C++, objective-c, js
11:24:11skrylarthough i don't think nimrod is lazy compiling on my machine right now
11:24:18*aftersha_ quit (Client Quit)
11:24:35skrylarit might be, but it hasn't been slow enough for me to get concerned yet
11:24:46skrylar0.2s on average to rebuild my test code so i'm not worried, lol
11:25:15BitPuffin:)
11:25:47skrylari might be interested in trying to figure out how to shield Ogre builds in nimrod at some point
11:26:01skrylari think using the dynlib will keep link times down
11:26:55skrylarmy least favorite part about ogre is that it brings in a few hundred megabytes of templatized C++ sadness which means simple code will take ridiculous amounts of time to compile
11:27:06skrylarwhich doesn't exist in say, Horde3D, because all of that has been shielded
11:28:35skrylarBitPuffin: though i do like pascal types :)
11:37:43skrylarBitPuffin: huh. i just wondered if templates and tags could be used to generate shaders
11:38:24skrylare.g. use tags to limit it so only 'shader-able' methods from a module could be called in a block, and then a macro that rewrote the actual code to GLSL
11:42:52*EXetoC joined #nimrod
11:54:27BitPuffinskrylar: of course it could
11:54:48BitPuffinin fact I am planning to do something like that
11:55:13*aftersha_ joined #nimrod
11:56:14EXetoCwot
11:58:10BitPuffinEXetoC: sup
12:13:37skrylargenerics are <3
12:14:09skrylari rewrote my rectangle math code over from Rust, and the total LOC is way down mostly because the generics are less derpy
12:16:47skrylarBitPuffin: is there a nimrod equivalent to "maybe returns" already?
12:19:34BitPuffinskrylar: maybe returns?
12:22:56skrylarBitPuffin: in rust they have a generic maybe type, somewhat haskell-ish but its basically a variant type with "Some X" and "None"
12:23:07skrylarSo you can return Maybe<Rectangle>
12:24:16EXetoCit returns either way in normal circumstances, but anyway, there's variants
12:25:01skrylarEXetoC: the function always returns a value; its just a special variant that replaces 'nil' in case the encased type is a non-nillable pointer
12:25:28skrylareasy enough to write a Nimrod version of the same, I just wasn't sure if that was already a thing
12:25:51EXetoCI was just nitpicking
12:25:53EXetoChttps://github.com/fowlmouth/nimlibs/blob/master/fowltek/maybe_t.nim
12:26:03EXetoChttp://build.nimrod-lang.org/docs/manual.html#object-variants
12:26:19skrylaralright
12:26:33skrylari was mostly just curious if there was already a convention for that, before i started doing anything with it
12:26:36skrylari knew how to write it
12:26:40EXetoCit's slightly less useful, or maybe it's just a little clunkier, but we might get something similar soon
12:27:06EXetoCok
12:28:02skrylarthats a weird API for it (i just read the source)
12:29:50EXetoCyeah?
12:31:36skrylarEXetoC: I guess it can't be helped all that much, though it would look better if you could do
12:31:54skrylarcase x; of Something: blah, Nothing: blah
12:32:32skrylar"if X" is strange because it could be an uncertain boolean, in which case it now reads as though you were checking the boolean instead of merely the *existence* of the boolean
12:33:36skrylarbut thats a whole hive of bees that probably doesn't need to be worried about at the moment
12:33:39*carum joined #nimrod
12:33:59EXetoCfor TMaybe? if so, see the 'converter'
12:34:16*carum quit (Remote host closed the connection)
12:35:40*carum joined #nimrod
12:37:15*aftersha_ quit (Quit: Computer has gone to sleep.)
12:38:05EXetoChave a look at this if it's unclear http://build.nimrod-lang.org/docs/manual.html#convertible-relation
12:38:36skrylarI understand how the code works and I was mostly just nitpicking the syntax for using that TMaybe
12:39:04skrylarI do appreciate the help though
12:39:47EXetoCright. well, I wouldn't mind referencing 'has' explicitly tbh
12:40:49skrylari suppose the good thing about nimrod is that with templates there can be a few dozen ways to use something like a TMaybe and they won't bloat the actual binaries like C++ would
12:41:17*aftersha_ joined #nimrod
12:49:54BitPuffinI should probably read through the build version of tfm
12:50:01BitPuffinso that I am up to date with latest features
12:50:26EXetoCya
12:52:44BitPuffinwould be cool if nimrod got some of the nice sugar from ruby I think
12:53:05BitPuffinso that you can do `a = 5 if a == 2` or whatever
12:54:09EXetoCif (let x=p();x==1): ?
12:54:54skrylartfm?
12:55:35skrylarEXetoC: that incurs the need for indentation
12:56:01EXetoCI don't think so
12:56:08skrylarBitPuffin: i think that would pretty much be served by an 'iif' method/macro i think
12:56:24EXetoCif (let x=p();x==1): echo "yup"
12:56:38skrylari think VB and some Pascals had it so it was like that; x = iif(a == 2, 5, 0)
12:56:39BitPuffinskrylar: tfm = the fucking manual
12:56:44skrylarBitPuffin: oh. :P
12:56:52BitPuffinis in rtfm :P
12:56:57BitPuffinas
12:58:21EXetoClet x = (discard 3; 4); assert x == 4
12:58:28skrylari opened the manual page for the gtk2 unit; it made my scrollbar sad
12:58:32EXetoCexcept you need to replace the ; with a newline
12:58:54BitPuffinI don't see how what you are typing is addressing what I said lol
12:58:55EXetoCit'd be nice if that could be avoided, for the sake of IRC mainly :>
12:59:12EXetoCBitPuffin: then what does that do?
12:59:23BitPuffinoh you just mean what it would do?
12:59:56BitPuffinwell I gues syou would do `a = 5 if a == 4 else 3`
12:59:59BitPuffinor something like that
13:00:05BitPuffincan't remember exactly how ruby does it
13:00:13BitPuffinor maybe that it just keeps its value
13:00:15BitPuffinyeah probably that
13:00:41EXetoClet x = if y: z else: w
13:00:51EXetoCno?
13:01:10EXetoCif not, then you'll have to translate to Nimrod, because I don't know Ruby c(:)
13:01:50BitPuffinEXetoC: yeah i know that you can do that in fact I believe I do it quite a few times
13:02:00BitPuffinit's just harder to follow in certain cases
13:02:13BitPuffincan't remember where it was annoying though
13:03:22skrylarheh, i didn't know you could
13:03:34skrylarI just re-did code earlier to use abs/min/max instead
13:03:36EXetoCit's pretty clear when you break it into multiple lines. I usually expand it to four, but I suppose three lines is pretty readable too
13:04:24BitPuffinEXetoC: yeah but the ruby way is readable on one line :P
13:08:16EXetoCoh well
13:19:23*carum quit (Remote host closed the connection)
13:25:55*aftersha_ quit (Quit: Computer has gone to sleep.)
13:34:01*darkf quit (Quit: Leaving)
13:55:22*Araq_ joined #nimrod
13:55:50Araq_hi skrylar welcome
13:56:07Araq_hi demizer welcome
14:03:55*radsoc quit (Quit: Leaving)
14:07:09*radsoc joined #nimrod
14:12:28*[1]Endy joined #nimrod
14:13:59BitPuffinAraq_: you don't by any chance have any idea of what demos meant when he said that linagl doesn't seem to work at all?
14:14:19BitPuffinbecause it works here
14:20:59Araq_BitPuffin: no but even I would, I wouldn't tell you
14:21:19Araq_because you don't like nimrod's if-expressions :P
14:22:42OrionPKoh dear
14:22:51BitPuffinAraq_: oh snap diddely
14:23:11BitPuffinAraq_: I do like them, I just think the different variations are more readable in certain situation
14:23:13EXetoChe said it wasn't ideal, because of the limitations that you too had run into
14:23:13BitPuffins
14:23:26EXetoCdid he also say that it didn't work at all?
14:24:40Araq_BitPuffin: can't agree, sorry, if then else is the standard order
14:24:52Araq_and python's is weird
14:25:11*OrionPK quit (Remote host closed the connection)
14:25:23EXetoCyes, it's consistent
14:25:25*OrionPK joined #nimrod
14:25:30Discolodab?t:f is the only logical pick expression
14:25:34BitPuffinEXetoC: well those limitations will be removed when the compiler is fixed, so it's not really an issue with linagl
14:25:34EXetoCweird indeed
14:25:38BitPuffinEXetoC: and yes he did
14:26:00BitPuffinDemos_ | linagl does not work very well... or at all
14:28:29BitPuffinI am a bit confused why he doesn't understand why matrices and vectors are different types, one is a 2d array and one isn't
14:28:43EXetoCvector.nim doesn't work for me: Error: internal error: typeRel: tyNon
14:29:09Araq_that's a regression that I cause in an attempt to make the compiler more stable ...
14:29:10EXetoC*tyNone
14:29:15Araq_*that I caused
14:29:25EXetoCfair enough
14:29:32BitPuffinhttps://gist.github.com/BitPuffin/8916869
14:29:38BitPuffinworks here
14:29:43BitPuffinI updated the compiler yesterday
14:30:36EXetoCI updated 1-2 days ago
14:30:38BitPuffinEXetoC: do you have the latest version of the compajler
14:32:28EXetoCI don't know if I remembered to pull, but I'll try again tonight
14:32:49BitPuffinEXetoC: could possibly be that the version that babel pulls isn't the head version
14:33:09EXetoCI cloned the repository
14:34:26BitPuffinwell then there we go
14:34:29BitPuffinshould work
14:36:43EXetoCwe'll see
14:37:18BitPuffinEXetoC: why can't you try now? :P
14:42:25*Araq_ quit (Quit: ChatZilla 0.9.90.1 [Firefox 27.0/20140127194636])
14:48:59*ddl_smurf joined #nimrod
14:54:03*aftersha_ joined #nimrod
14:59:51*aftersha_ quit (Quit: Computer has gone to sleep.)
15:09:33skrylarhmm..
15:09:43skrylarFossil seems neat, but I like my git-rebase.
15:12:44*aftersha_ joined #nimrod
15:14:52*Demos joined #nimrod
15:16:28VarriountHello honey badgers!
15:16:39Demoshello Varriount
15:16:50Demosfixed your sleep scedule I see
15:17:36BitPuffinDemos: whatchu talkin bout linagl not working
15:18:25DemosBitPuffin: I just sent you a memo, initially it was because babel had the wrong version, then there are issues with the side effect checker
15:18:52BitPuffinDemos: I haven't seen any issues with the tests I have written at least
15:18:53BitPuffinhrm
15:18:55Demosalso [0,0,0] and [0.0,0.0,0.0] do not seem to convert to array[float32, 0..2], which is kinda stupid
15:19:17DemosI was also having the mag function fail the side effects check
15:19:21DemosI am on 0.9.3 master
15:19:58BitPuffinDemos: Err I don't think you should mix int vectors with float vectors really
15:20:07BitPuffinUnless you do so explicitly
15:20:51DemosBitPuffin: right. But when initializeing stuff having that conversion is nice. It is not something you can fix, would probably need to be special cased in the language (do not want conversions happening everywhere, only on initialization)
15:20:53BitPuffinDemos: right it fails because I have to use C sqrt
15:21:07Demosdoes C sqrt have side effects?
15:21:22BitPuffinDemos: no but nimrod can't verify that calling C doesn't mean side effects
15:21:40BitPuffinso yeah that's a minor issue
15:21:57BitPuffinDemos: anyway most of the warts (such as temporarily having to use ranges) is limitations of the compiler atm
15:22:03BitPuffinthat's why I have pre-defined types
15:22:03Demoswell it makes normalize and mag just not work. Should remove the noSideEffect pragma on them until it does
15:22:27BitPuffinso that it won't break peoples code who doesn't do anything out of the ordinary
15:22:34BitPuffinDemos: yeah absolutely, that's just a miss on my end
15:24:48BitPuffinDemos: mag is currently a much bigger pain in the ass than in should be because we only have sqrt for floats
15:25:08BitPuffinbut it's not a biggie
15:25:20BitPuffinIt gives you what you expect now I guess :P
15:25:49Demosfrankly I think there should be a "noSideEffectsJustTrustMe" pragma. I think haskell has something like that for C functions
15:26:14BitPuffinoh and it only works for "float" and not "float32" because I can't do TReal stuff on it
15:26:17BitPuffinDemos: agreed
15:26:33VarriountnoReallyThisHasNoSideEffectsEvenThoughItSeemsLikeItDoesNoReally
15:27:07Demos{.noSideEffectsErrornosCanDieInAFire.}
15:28:39Demosdoes float accept floatXXs as well, I seem to recall some issue relateing to that when I used linagl on the devel branch
15:29:01DemosI thought "oh float must be a typeclass, oh wait that is dumb"
15:32:32BitPuffinDemos: there was some issues with typeclasses
15:32:38BitPuffinand no float is float
15:32:46BitPuffinTReal includes float float32 float64 etc
15:32:59VarriountAnyone know if the semantics for "instanciating" a new closure iterator has changed at all?
15:34:48BitPuffinDemos: anyways mag is fixed now
15:35:27BitPuffinDemos: anyways it is really useful if you use linagl, because it helps me find bugs and also makes it so that there is one more person who can complain about bugs holding it back in the compiler :)
15:36:06VarriountAlso, any ideas on how to iterate through a closure iterator that has args, when given as an argument to another closure iterator?
15:38:19DemosBitPuffin: allright, I may submit a pr for some accessor functions (although having a function called "x" is bound to clash with /something/
15:40:32BitPuffinDemos: accessor functions?
15:40:38BitPuffinDemos: you mean like vec.x
15:40:41BitPuffindon't do that
15:40:46BitPuffinswizzling is already implemented
15:40:53BitPuffinbut it's currently broken
15:40:57BitPuffinbecause bugs in the compiler
15:41:27BitPuffinDemos: but in theory you should be able to do vec.xyxyzyzyxgzyzxyzgrgbgbrgbrbgrbaststspqpqqsptsq
15:42:41Demoswhat I saw was vec.{"xyzzzwagggg"}
15:43:11DemosI just saw zah say he was fixing deligators tonight, so hope remains
15:43:17*aftersha_ quit (Quit: Computer has gone to sleep.)
15:45:40VarriountHm. I wonder if there's any way we could get funding for nimrod.
15:46:09BitPuffinDemos: yeah initially in was that but then when zahary added delegators I made it into v.ecxhrexhoa
15:46:34BitPuffinDemos: may have removed that though
15:46:45BitPuffinit's really just a matter of changing the name etc
15:47:12BitPuffinDemos: as you can see the {"xyxyxyxy"} thing is deprecated
15:47:18Demoswhat is a matter of changeing the name? deligators or getting funding?
15:47:30BitPuffinbecause it is preferred to not use it since it will be removed in favor of x.xz
15:47:41BitPuffinDemos: delegators
15:47:57Demosyeah I really like the .xxxyzwang thing, much better than the way glm does it (macros for each combination)
15:48:05BitPuffinDemos: yup
15:48:11BitPuffinbbl
15:53:22*[2]Endy joined #nimrod
15:56:44*[1]Endy quit (Ping timeout: 245 seconds)
16:09:06skrylar:|
16:10:05skrylarwell that was a subtle bug: forgot the type specifier to the last parameter in a function, Nimrod didn't find this suspicious at all (i wonder what type it thought it was? or did it just use the same type as the parameter before it?) and so the reason my code wasn't drawing was ... because it wasn't actually calling the right method, not the cliprect being broken. *derps self*
16:11:14Varriountskrylar: If procedure parameters aren't given a type, they default to the "expr" type
16:12:38DemosVarriount: really, auto would be more sane
16:12:49EXetoC"auto* = expr"
16:12:59Demosreally now.?...?
16:13:00VarriountDemos: The 'auto' type is the 'expr' type
16:13:05*Discoloda left #nimrod (#nimrod)
16:13:05Demosneat
16:13:16*skrylar wouldn't mind a compiler hint about that
16:13:21skrylarif nothing else it lets you know it did it
16:13:28*Varriount agrees with skrylar
16:13:32Demosshould be a warning
16:13:54skrylarsuch would have saved me about 45 minutes of going "wut?"
16:13:57VarriountActually, such a feature might not be too hard to implement.
16:14:01EXetoCyou can already do p(x, y: T) so it's a source of confusion
16:14:06skrylarFun times with ncurses: Can't use debugEcho because curses is eating the buffer
16:14:14Varriount:3
16:14:31EXetoCp(x, y: T) -> p(x: T, y: T)
16:14:49VarriountI have no sympathy, ncurses doesn't work on windows without cygwin
16:15:00DemosI hear ncurses is a big ball of wtf
16:15:06skrylarVarriount: http://pdcurses.sourceforge.net/ *whistles*
16:15:08Varriount^ That too
16:15:21Varriount:O
16:15:27EXetoCtermbox?
16:15:34skrylartermbox is nix only
16:15:52Varriountskrylar: Why aren't programs like this more well-known?
16:16:06skrylarVarriount: i donno. I found out about it because ToadyOne used it for Liberal Crime Squad
16:16:07Demosdoes COMMAND.COM even allow stuff like curses?
16:16:12skrylarDemos: yes
16:16:25EXetoCthey don't make that obvious at all
16:16:30skrylarThe guy who wrote termbox even mentioned it
16:17:04skrylarwell its.. done through weird APIs, for windows
16:17:33Demoswelcome to windows EnjoyYourStayEx
16:17:39skrylarAnd full of stupidity, like you can ask Windows for the "size" of your console but then it tells you the virtual size, and then a window size, but only kind of, so you have to calculate your *actual* buffer size
16:18:02OrionPKtime for someone to wrap this game engine i guess https://github.com/okamstudio/godot
16:18:37*skrylar peeks at it
16:18:50Demoslooks like reddit hugged that website to death
16:18:52skrylarthe .org url is taking a small forever to open
16:19:18OrionPKya
16:19:32OrionPKit loaded up eventually
16:20:05OrionPKa pure nimrod engine would be better yet, of course :P
16:20:06*carum joined #nimrod
16:20:20skrylarPort it :P
16:20:48skrylarmaybe i'll look at this when the website is functionally usable later
16:22:32*skrylar is still trying to get a morphic-inspired GUI built :(
16:23:50VarriountIn its defence, some parts of the winapi are wierd due to maintaining compatability with things like MS-Dos
16:24:14*carum quit (Ping timeout: 245 seconds)
16:24:37*Demos quit (Ping timeout: 248 seconds)
16:26:18VarriountDemos: I don't think COMMAND.COM actually exists anymore. It's just cmd.exe now. \nitpick
16:29:52skrylarVarriount: some of it is also the painful legacy of C
16:30:33skrylareven stuff like this http://libagar.org/ gets really derpy to use, because you have to fake all of the OO
16:31:09EXetoCwe have a couple of upcoming engines, but it takes ages as always
16:31:38VarriountHm. Interesting. Does libagar use native api's, like wxwidgets, or something like java's gui toolkits?
16:32:13skrylarit uses SDL
16:32:15EXetoCBitPuffin: have you used PA yet?
16:33:06BitPuffinEXetoC: PortAudio?
16:33:07Varriountskrylar: Araq has a repo named "Claro", which he had envisioned to be a nimrod gui toolkit
16:33:17EXetoCBitPuffin: yes
16:33:24BitPuffinEXetoC: nein
16:33:28VarriountHowever it's not currently developed, and quite.. lacking
16:33:42EXetoCBitPuffin: ok
16:33:47BitPuffinEXetoC: have you?
16:33:48*Demos joined #nimrod
16:33:52skrylarVarriount: i've been designing one based on Morphic (smalltalk) and the DOM (html)
16:34:04Varriountskrylar: Sounds interesting.
16:34:11skrylarMorphics.. basically just a scene graph really
16:34:27skrylarthere is a 'morph' class and every widget is just a combination of those
16:34:31VarriountSo, by DOM, you mean, seperate the data from the layout?
16:34:33EXetoCBitPuffin: are you on devel? I just built the latest Nimrod source, and vector.nim still generates an ICE
16:34:40EXetoCBitPuffin: nope
16:34:43BitPuffinEXetoC: I am not on devel
16:34:52skrylare.g. a button is a morph with a background on push/release, a checkbox is just a text morph stuck to a button morph, that kind of thing
16:34:58EXetoCthat ought to explain it then
16:35:13BitPuffinEXetoC: indeed
16:35:14EXetoCDemos: are you on the devel branch?
16:35:24BitPuffinI'm on master
16:35:24VarriountEXetoC: Any ideas on how generic closure iterators could be properly passed in around in nimrod?
16:35:55BitPuffinGod damn it must the repository name be capitalized
16:36:03BitPuffinmakes it a pain to cd into xD
16:36:08VarriountSo that chaining things iterators like filter and map would work?
16:36:21BitPuffinfrom now on I shall change the dir name
16:36:24EXetoCindeed. speaking of which, I should tweak my shell a little
16:36:31VarriountBitPuffin: Not if you're on a case-insensitive file system. :3
16:36:34skrylarVarriount: kinda. I took inspiration for the actual layouting and event from the CSS box model and the event system from how the DOM passes them to JavaScript. Mostly because I started the project in Rust and it was a lesser evil to put every common message through a channel type than it was to inherit things. Dynamic dispatch over there is.. kind of a massive PITA right now.
16:36:39BitPuffinVarriount: fuck that shit
16:37:11EXetoCVarriount: I don't know any details
16:37:23Varriountskrylar: Pfft, dynamic dispatch. Nimrod has advanced static dispatch trees.
16:37:26DemosBitPuffin: merge meh pr to linagl
16:38:10Demosand EXetoC I switch around often, usually I am on devel or master, rarely stable
16:38:25Demoswith meh ssd it takes <1m to reboot the whole compiler
16:38:36skrylarVarriount: my partial ideas are that making controls should be easy and you shouldn't have to disassemble *everything* to make a new part, the GUI should be loadable from resource files (e.g. same concept as Apple's nibs), and ideally I'd like it to be action-driven. Qt/Delphi has a thing where you can make 'actions' that are attached to toolbars and menu buttons, so those have the same button text and enable state, but then for some
16:39:27BitPuffinDemos: what is it about
16:39:40DemosI removed {.nosideeffect.} on normalize
16:39:52skrylarend-user customization of the GUI is really easy if you've already split off what each button should do in to little units :)
16:39:57Varriountskrylar: And what about native look and feel?
16:40:01Demossince normalized calls mag and that causes the side effect checker to reject it
16:40:06skrylarVarriount: i don't really care about that so much.
16:40:14BitPuffinyeah
16:40:42DemosVarriount: I think native look/feel is a lost cause. I mean Qt does it by essentially "brute artistic force" and imo tends to look more native than wxWidgets
16:40:49skrylarVarriount: Drawing controls isn't integral to my class tree, so if you want that you *can* do it
16:40:56BitPuffinDemos: I guess that change doesn't really merit that you need to say that you dedicate the work to the public domain or whatever
16:41:00BitPuffina comment or something would be nice
16:41:02BitPuffinthough
16:41:11skrylarDemos: it calls the windows style APIs nowadays
16:41:13BitPuffinI should really get like a waiver file or something
16:41:34skrylarthere are ways of asking XP and beyond to draw the modern theming on to a GDI canvas
16:41:37EXetoCDemos: 65s here (SATA). not too bad
16:41:43DemosBitPuffin: what... I change one line. And I do not intend to keep my own fork and not send prs
16:41:49BitPuffin:P
16:42:07BitPuffinThat's why I said it doesn't really merit forcing you to say that
16:42:15BitPuffinit is merged
16:42:24Demosalso, afaik CC0 is not copyleft :D
16:42:32skrylarall though for what I want to do, I don't really gain a benefit from native L&F; I actually *like* the weird notebook skin that Notebook had on the mac, and the subdivision UI of Blender
16:42:46BitPuffinDemos: didn't say it was
16:42:49BitPuffinDemos: it is public domain
16:42:50skrylarbut you can certainly shovel it under what i have written, since its not tightly coupled
16:43:18EXetoCDemos: 49s when upping the CPU freq, but <1m isn't too specific :>
16:43:32skrylarVarriount: hilariously the current revision draws out to {n,pd}curses, because who doesn't want an outliner that runs in PuTTY? :D
16:44:43BitPuffinpfff, copyleft
16:44:47*BitPuffin hates the gpl
16:45:16*Demos does not mind the gpl, would like authors to licence under LGPL with a static linking exception
16:45:23skrylar^
16:45:39Demosalthough one can static link and offer object files
16:45:53skrylarSDL moved off of LGPL lately
16:46:07BitPuffinno
16:46:15BitPuffinfuck both GPL and LGPL and everything of the like
16:46:34BitPuffinbut yeah licensing under that is definitely preferred
16:46:40BitPuffinover regular pure bs GPL
16:46:49BitPuffinskrylar: wasn't that a long long time ago? :P
16:46:58skrylari don't really mind the "if you fiddle with our lib we want the changes" licenses; you *are* kinda getting big libraries for free in those cases
16:47:10skrylarBitPuffin: i donno, it looks like nimrod is using bindings for 1.2
16:47:53skrylarall though with big libs like OGRE I don't really *want* to fiddle with them
16:49:07skrylarI kinda wonder about overengineering sickness in the C++ world; it seems like C++ people love 500 template pileups, 9 hour compile times and half a million lines of code to print hello world
16:49:17Varriount^
16:49:39Varriountskrylar: Don't forget the restrictive mindset that the Java world is stuck in
16:49:54DemosI agree, although there do exist good c++ template libraries (Eigen!)
16:49:59BitPuffin:P
16:50:15skrylarDemos: C++'s native architecture makes *any* template library bad
16:50:30Demosthere is a c++ lib called libcinder designed for "creative coding", but compile times for a trivial (<1000 line) project get to like 6mins
16:50:49skrylarNow all the code has to go in headers which aren't compiled, so now GCC has to churn over 60mb of code per file
16:51:11skrylarC++'s grammar is horrendous to begin with, let alone megabytes of data to run through it
16:51:26Demosskrylar: sure, Eigen does pay consider compile time though. And afaik nimrod's import statement works the same way just without the stupid scope issues
16:51:28EXetoCCompiling C++ code on my 1x2GHz CPU was too damn slow
16:51:37*XAMPP quit (Ping timeout: 260 seconds)
16:51:42skrylarDemos: import is symbolic
16:51:44Demosbut yeah, having every single header bring in /all/ of boost sucks
16:52:09skrylarIIRC nimrod supports symbolic modules, which means they get compiled once and not again unless you touch it
16:52:26Demosskrylar: right, I think I misspoke.
16:52:39skrylarits okay :)
16:52:50Demosnimrod has modules, that is the important part
16:53:02Demosthe whole way #include is transitive is imo a bigger problem than compile times
16:53:04skrylarI can get over the need for forward declarations (ick) considering its a really minor amount of derp for what you get out of it
16:53:19Demoswhat in nimrod?
16:53:23skrylaryeah
16:53:53Demosyeah forward decls are kinda meh. Not ideal but it can be nice having the whole public interface at the top of the file
16:54:00Varriountskrylar: Are you using SDL or Cairo?
16:54:26skrylarDemos: you only need forward decls for recursive definitions
16:54:57skrylarDemos: and its for the pascal reason (compiler gets to skip an extra step which means 500k SLOC codebases compile exponentially faster than C++)
16:55:20skrylarVarriount: neither, ncurses at the moment
16:55:37skrylarVarriount: i do a lot of switching due to an uncomfortable desk chair, so i've been working on it through ssh most of the time.
16:55:42VarriountA console GUI?
16:55:57skrylaryes, but the design is the same otherwise
16:55:58Demosskrylar: but don't you need forward decls for recursive definitions in c++ as well?
16:56:21skrylarDemos: no, a C++ class can call its own methods without them IIRC
16:57:49skrylarVarriount: i'm trying to keep the module set up in such a way that the only thing that changes between targets are the implementations of the Draw function; I don't imagine it would be too hard to even put those in a different file and just use 'include' with some 'when' statements
16:58:19skrylarbut its easier to get a console behaving, and i can actually use the program that i need to write at least; doing it in a full GUI takes a lot more time
16:59:04skrylarVim has a CLI and GUI version so maybe its not a bad idea to have both for an app :)
17:00:32BitPuffinyeah I was actually thinking about that earlier
17:00:52BitPuffinmaybe it's better to forward declare everything at the top of the nimrod file like a pseudo header because it makes it quicker to skim
17:01:18Demosfrankly I think it does not matter that much. If you need to skim it than point docgen at it
17:01:20EXetoCI use the terminal version only for the shell features
17:01:24BitPuffinas a guy who prefers to just open a source file to loook what is available I like it
17:01:32Demosbut yeah
17:01:47BitPuffinDemos: yeah I know but I don't wanna have to leave by text editor and open like firefox to view it :P
17:01:56Demosthe argument that headers are somehow good because they seperate interface and implementation is not a very stong argument
17:02:36BitPuffinIt is a fair point I think
17:02:44BitPuffinbut headers have really bad consequences
17:02:59EXetoCI hate repeating myself in that way
17:03:05BitPuffinI wouldn't actually mind it if nimrod had headers, just as long as import would work the same way
17:03:09BitPuffinEXetoC: yaeh I guess
17:05:18Demoswell I would not mind if nimrod's module API definition (for binary modules) had the same format as a "header" but I don't want to have to write it myself
17:05:59EXetoCthat could be automated of course
17:06:08BitPuffinD has the .di modules iirc
17:06:22BitPuffinyeah automatic generation would be sweet
17:07:30*DAddYE joined #nimrod
17:10:19dom96hello people
17:10:35dom96welcome skrylar!
17:11:45BitPuffinoi dom96
17:12:01dom96Demos: Have you tried using the {.noSideEffects.} pragma on wrapped C functions?
17:12:04*DAddYE quit (Ping timeout: 265 seconds)
17:12:15dom96BitPuffin: oiiii
17:13:19dom96hrm, the jester example doesn't compiler.
17:13:23dom96*compile
17:13:26dom96How did this happen!?
17:13:32EXetoCdom96: how's the current socket interface? for a game for example.
17:13:45dom96EXetoC: How is it for a game?
17:13:48dom96EXetoC: Good?
17:14:03Demosdom96: I think I did
17:14:06EXetoCI suppose I should wait a month or two if I'm not in a hurry
17:14:15*aftersha_ joined #nimrod
17:14:20*DAddYE joined #nimrod
17:14:21Demosdom96: do you mean on the declerations in math.nim or on the calls?
17:14:25EXetoCdom96: just so you know what the use case is
17:14:28dom96Demos: Declarations.
17:14:39dom96EXetoC: It should be good for everything.
17:14:39Demosyeha i tried that last night
17:14:48EXetoCdom96: the one we have now? ok
17:15:07dom96EXetoC: Sure. But the new one will replace it.
17:15:19dom96May not bother with a deprecation path.
17:18:48*DAddYE quit (Ping timeout: 265 seconds)
17:19:50dom96Araq: Looks like you broke my dear jester.
17:24:39*aftersha_ quit (Quit: Computer has gone to sleep.)
17:24:40skrylardom96: helloes
17:25:05skrylarEXetoC: you could always wrap enet :)
17:25:42dom96That is in fact already wrapped :P
17:25:58skrylarwell there you go
17:26:21*skrylar snickers that rust was at 0.9 and TCP/UDP sockets were completely broken >_>
17:26:30Demosthere is also a zmq wrapper, I hear people like zmq
17:27:04skrylarI've never actuallyed used zmq, other than reading the pages about it a long time ago. I think thats more of an internal messenging setup than anything you want public-facing
17:27:06*dom96 looks depressingly at the amount of people using Rust.
17:27:44dom96I'm the same in regards to zmq. Haven't read much about it and currently regard it as an unnecessary dependency.
17:28:10skrylaryeah.. i finally left #rust a few days ago. ran in to a showstopping bug with the stdlib (they fixed it now i think) but there's just too much derp
17:28:45OrionPKbleh, why doesnt the dom module have a console/console.log
17:29:02skrylarlike public release versions that contain broken sadness, syntax which is finger painful, and the worst part: 'oh well some layer of LLVM will optimize this really slow thing away at some point' </rant>
17:29:22*XAMPP joined #nimrod
17:29:26dom96skrylar: You should write a blog post titled "Why I left Rust for Nimrod" ;)
17:29:41skrylardom96: i had started to write one about tips for using rust
17:29:45skrylari think now my tip would just be "don't"
17:30:17skrylarthe memory safety rig is neat until you need to actually do something
17:30:37skrylari was reading that the mozilla guys were having trouble getting the DOM modelled under it, and thats what the language was designed *for*
17:31:08dom96You are literally the first person I came across to say something negative about Rust.
17:31:19skrylarlol
17:32:35EXetoCskrylar: was that recently?
17:32:35dom96I'm mostly too busy working on Nimrod to judge it for myself. I once decided to try it, after waiting 45 minutes for the compiler to bootstrap I decided to give up.
17:32:42skrylarEXetoC: yes
17:32:47Demosskrylar: I have never used rust but that is the impression I got from reading about the type system
17:33:00skrylarwell the borrowing mechanics are really neat
17:33:22skrylarit will get mad if you try to shove a pointer somewhere and it can't prove that pointer is going to live long enough not to dangle
17:33:29DemosI /know/ that c++'s unique_ptr<T>s are only really useful when you get non-owning raw pointers from them, and restricting that to some subset where the language can prove valid access would be hard
17:33:51Varriountdom96: Did you push your iocp stuff yet?
17:33:55dom96Varriount: yeah
17:33:58Varriount:D
17:34:05*XAMPP quit (Ping timeout: 260 seconds)
17:34:07skrylarthe derpiness comes in that they removed the GC heap, which means you can't really do the dynamic dispatch stuff
17:34:12dom96Varriount: It's in devel actually. Because Araq accidentally merged it in there ...
17:34:18EXetoCskrylar: I thought it was alright, apart from the implementation limitations at that time, but it's too bad even the language devs are struggling
17:34:23dom96But I am still working on the newasync branch.
17:34:25Varriountdom96: Why wouldn't it be in devel?
17:34:31skrylarEXetoC: well they won't rewrite anything :|
17:34:39dom96Varriount: Because it's not ready.
17:34:59skrylarEXetoC: there is so much about Rust now that is WONTFIX because "well the AST isn't built for that" e.g. macros are crippled because they have a specific pass that has access to basically nothing
17:35:46dom96Nimrod really shines when it comes to macros.
17:36:01Demosdom96: well once you get passed the rather terse error messages and bugs
17:36:03skrylartheir compiler runs in passes, which means errors come in all jigsaw puzzled; fix all the errors? get new errors
17:36:35dom96skrylar: Oh yeah. Speaking of Maybe: all you need is a pattern matching macro and you're set I think.
17:36:42skrylaroh yeah, the 45 minute bootstrap is because they forked LLVM
17:37:14skrylarlisp macros + pascal types <3
17:37:18EXetoCdom96: what part of it?
17:37:34skrylardom96: i do wish that nimrod wouldn't monomize generics for distinct pointers
17:37:35dom96EXetoC: Linux support
17:38:10skrylarmaybe its being nitpicky but pointer types do not need a struct for each pointer, they can just use a void* and typecast like a C programmer would
17:38:17dom96Demos: True... but the macros are still IMO pretty sexy.
17:38:51dom96skrylar: No idea what "monomize generics" means heh
17:39:05EXetoCdom96: the pattern matching. the problem I had was the verbosity involved when constructing Nothing
17:39:19Varriount"ref object of PObject" - What is that, a ref of a ref of an object?
17:39:38dom96Varriount: No. A ref object inheriting from a 'ref TObject'
17:39:48dom96Varriount: It's not a double ref.
17:40:13skrylardom96: say you have an object with a single T field, now say you use that object three times with different pointer types.
17:40:17DemosI agree, once the polish is applied they will be amazing. But quite frankly all of nimrod's metaprogramming features need refinement. I ran into a lot of trouble trying to do some type-level arithmatic yesterday
17:40:37skrylardom96: if its a distinct pointer, nimrod will generate 3 structures in the C file which each have 'void*' as the type for the distinct pointer but are identical structs
17:41:09skrylare.g. it doesn't know that it can share the generic because they are all void* types
17:41:50dom96skrylar: oh, well i'm sure that can be fixed?
17:42:03skrylarprobably; i wouldn't know how
17:42:17skrylarI know Ada does some things so that generics don't bloat up the code base very much
17:42:32dom96Wouldn't the C compiler take care of the bloat in this case though?
17:43:05skrylarI don't know if GCC or LLVM will de-dup everything
17:43:08Varriountskrylar: Generics are hard.
17:43:24skrylarsupposedly LLVM has a mechanism for shared generics but I don't know what it is
17:43:31*[2]Endy quit (Read error: Operation timed out)
17:45:21*XAMPP joined #nimrod
17:45:25dom96EXetoC: What verbosity is that? The need to instantiate the generic?
17:45:43EXetoCdom96: yes
17:45:56dom96EXetoC: Yeah, that's a bit of a PITA
17:47:40Demoshm conversions from (int, int) to (float, float) are invalid even with a cast, how annoying
17:47:58Demosnot a cast[]() style cast ofc
17:48:42dom96I must admit, int/float types in Nimrod are a tad annoying.
17:50:19Demosyeah, all those implicit conversions in C are annoying but not having them makes you realize why they are there
17:51:21EXetoCdom96: that has more to do with tuples
17:51:33*radsoc quit (Ping timeout: 272 seconds)
17:51:50DemosEXetoC: yeah, this is true
17:55:03*DAddYE joined #nimrod
17:55:11EXetoCI don't know if it should be implicit for anything other than ranges
17:56:53Demosyeah, and makeing implicit conversions for tuples is probably more trouble than it is worth. Even explicit conversions could be hard. I am all for implicit conversions for initialization (when a numeric literal appears in code)
17:58:05EXetoCsure. in many cases it is
18:01:16*Demos quit (Ping timeout: 252 seconds)
18:06:55*brson joined #nimrod
18:17:24BitPuffinyou know what, I'm gonna work a bit on my multiplayer thing
18:18:20OrionPKwhat network lib are u using
18:19:09BitPuffinright now just internal nimrod shits
18:23:33skrylarblegh. multiplayer code.
18:23:47skrylarscenegraph sync hell
18:26:48BitPuffin:P
18:26:58BitPuffinit's a bit more difficult than that
18:27:25BitPuffinat least for this project
18:35:01reactormonkskrylar, o/
18:35:12reactormonkHow do I get map(x.inputs, proc(i: TItem): TTypeID = i.typeID).toSet.incl(y.output.typeID) running?
18:35:36reactormonk(TSet[TItem], proc (TItem): TTypeID)
18:35:41reactormonkaka mapping over a set
18:36:52AraqOrionPK: I can't reproduce your leak
18:37:05Araqit stays below 300K forever
18:37:11OrionPKlook at task manager or the console?
18:37:14OrionPKlooking*
18:37:23Araqconsole
18:37:28OrionPKlook at task manager
18:37:36Araqhumm
18:37:39EXetoCreactormonk: where does it fail? does incl work like that when it takes a var as the first arg?
18:38:27AraqOrionPK: that means nimrod's reporting is wrong?
18:39:20OrionPKaraq maybe.. or it's leaking memory outside of nimrod's GC?
18:40:36reactormonkEXetoC, it's the map itself.
18:40:43reactormonkjust defined it in sets
18:41:10AraqOrionPK: ok, will look at it later
18:41:48*aftersha_ joined #nimrod
18:42:57Araqskrylar: we require the "no forwarding rule for the macro system. pascal has nothing to do with it
18:43:12*filwit joined #nimrod
18:43:37EXetoCreactormonk: you haven't gotten it to work? have you looked at system.map?
18:44:31filwitAraq: what symbol in vm did you want me to document?
18:44:41Araqlol
18:45:05Araqmake a top level comment how it works
18:45:30filwityeah a doc comment, got it
18:45:37filwitbut what part?
18:45:59Araqthe calling convention
18:46:11Araqthe registers
18:46:25filwitokay, so just everything i've been going over for awhile
18:46:38filwitokay
18:46:46filwit^doubt okay
18:46:49filwitdouble*
18:46:50Araqthe bizzare invaraints wrt PNode
18:46:54NimBotAraq/Nimrod devel ba8e74d Simon Hafner [+1 ±1 -0]: added `map` to sets
18:46:54NimBotAraq/Nimrod devel 59dd15c Simon Hafner [+1 ±0 -0]: added tests for set
18:47:15reactormonkAraq, request to rename set to bitset
18:47:56Araqreactormonk: why no make a map for everything that has items?
18:48:53reactormonkAraq, because initSet
18:49:09reactormonkAraq, I need items() and the constructor.
18:49:30Araqoh so your map returns a set, i see
18:49:35reactormonkyup.
18:49:41*BitPuffin quit (Ping timeout: 260 seconds)
18:49:46Araqvery well then
18:49:54reactormonkThat's why I pressed for a null-element by type.
18:50:11filwitrename: set=>bitset, seq=>list, list=>chain :P
18:50:29filwit(just kidding, though they are my favorite names)
18:50:36reactormonkfilwit, ;-)
18:51:00reactormonkAraq, issue for mapping type => proc that generates a nulle-element of that type
18:51:15reactormonk?
18:51:22Araqno
18:51:44Araqfix some bug instead
18:51:51Araqthere are over 230 issues
18:52:10reactormonkthat's a feature request. 1minute of work.
18:52:31filwitthose are bugs caused by you though Araq (since you wrote the compiler). It's only fare you have to fix them all.
18:52:43filwitmakes perfect sense
18:53:14*Varriount slaps filwit around a bit with a average-sized meteor.
18:53:29Araqreactormonk: nope
18:53:31Araqwrong
18:53:52reactormonkAraq, go on...
18:53:54AraqI recently realized it's not enough to write the code and test it
18:54:04Araqyou have to maintain it ...
18:54:05reactormonkyou also have to fix it?
18:54:43reactormonkAraq, do you give someone, say dom96, the authority to act on behalf of the nimrod project for GSoC?
18:55:19VarriountCan dom96 even do that? Don't you have to be 18 or older, or something?
18:55:27Araqhey
18:55:34VarriountHi
18:55:38Araqdom96 is not *that* young
18:56:32Araqfilwit: actually most bugs are zahary's :P
18:56:33dom96But I am but a toddler.
18:56:59reactormonkAraq, I could write liftedMap[A,B](zero: proc(): A, add: proc(var x: A, B)): proc map*[A, B](data: TSet[A], op: proc (x: A): B {.closure.})
18:57:21reactormonkwell, the generics in the first part would need to be different from the second part
18:57:30OrionPKdom96 how many years have you been programming?
18:57:40*dom96 counts
18:57:54reactormonkI think I'm at 6
18:57:57dom96~6 ish
18:58:04OrionPKhow old are you again? 19?
18:58:07dom9618
18:58:14reactormonknot too shabby
18:58:16OrionPKsince you were 12?
18:58:19dom96yeah
18:58:25OrionPKI was doing HTML when I was 12 or 13 iirc
18:58:32reactormonkI have written my first code at 12, but that was VB ^^
18:58:32dom96Give or take 1 or two years
18:58:36OrionPKbut no actual programming until I was maybe 16 or 17
18:58:44reactormonk^ same
18:58:55dom96Yeah, I was doing VB.NET back then
18:59:03reactormonkdom96, well, do you want to do the GSoC?
18:59:12OrionPKI did some VBA when I was 15 or something
18:59:19*DAddYE quit ()
18:59:33dom96reactormonk: I don't think a single person can do it.
18:59:52reactormonkdom96, I'm pretty sure as well. Are you in for kicking other people to do it?
19:00:02dom96Ahh... VB.NET. Those were the days.
19:00:26reactormonkdom96, if you wanna have the American speech - it's gonna look good on your resume
19:00:30OrionPK.NET wasnt around, unfortunately
19:00:38dom96reactormonk: I wouldn't mind doing it, but after reading the FAQ it looks like a lot of papers need to be filled out. Including tax forms and what not, which I have no experience with.
19:01:02reactormonkdom96, I'm sure there's a mentor channel somewhere where you can get help for that
19:01:03dom96reactormonk: hrm, that's true.
19:01:21dom96reactormonk: Do you want to work on Nimrod over the summer?
19:01:27filwitbeyond my initial programming in BASIC (on an hand-me-down Apple IIc), I learned programming from writing Macromedia Director Lingo scripts
19:01:30reactormonkdom96, nope, need to finish my masters
19:01:43VarriountI do! I want to work on nimrod over the summer!
19:01:50filwiti looked up Director, apparently it's still alive and making Shockwave games today..
19:02:00dom96Varriount: Loving the excitement!
19:02:11*DAddYE joined #nimrod
19:02:43dom96hrm, actually. I started with C not VB.NET hah
19:02:54reactormonkAraq, do you approve of dom96, so he can go ahead if he decides to?
19:02:55filwitso basically, soon we loose dom96 to college life?
19:03:02dom96Was disappointed I could only create console apps though.
19:03:02VarriountI started with Python :3
19:03:09filwit:|
19:03:39dom96(The book I got only gave examples of how to print things in a console. I wanted GUI apps!)
19:04:16dom96filwit: I'll be working on Nimrod while at lectures, so you won't lose me :P
19:04:24Varriount^ Like me
19:04:37NimBotAraq/Nimrod devel e534ad4 Simon Hafner [+0 ±2 -0]: fixed a bug in `map` for sets
19:04:47dom96I'm really worried I will be extremely bored in the first year.
19:05:35Araqreactormonk: you know... having me review your code has its advantages
19:05:39dom96If we spend a month reviewing "Hello World" I will just tell them to give me the end of year exams now and put me in the second year :P
19:05:48Araqreactormonk: yes I approve dom96 for everything
19:06:04dom96:)
19:06:05reactormonkAraq, yup. But it also costs you time. PRs it is?
19:06:24reactormonkyour choice.
19:07:11AraqPRs please
19:07:34Araqwe have quality issues and dom96 said it's because I do too few code reviews
19:07:34reactormonkkk
19:07:49Varriountdom96: Did I tell you why I think stdout and stderr are getting mixed up?
19:07:56VarriountIn osproc.nim
19:07:59dom96Varriount: nope. Do tell.
19:07:59reactormonkdom96, so go ahead with GSoC
19:08:14dom96reactormonk: How about you help me register?
19:08:24reactormonkdom96, sure
19:08:38dom96Right, let me finish watching the walking dead first.
19:08:45reactormonkhttp://www.google-melange.com/gsoc/homepage/google/gsoc2014
19:08:51Varriountdom96: In short, what I believe is happening is that multiple writes are happening at once, getting the output stream mixed up
19:09:00reactormonkdom96, I'll have to do some homework in about 1h though
19:09:05EXetoCAraq: what are the endian conversions in oids for?
19:09:06reactormonkand from what I see, it's gonna take a while
19:09:13VarriountThe equivalent of two programs trying to write to the same file at the same time.
19:09:53AraqEXetoC: it's always big endian or something. fyi I ported this from the C client library
19:10:04Araqit's not like I came up with this myself
19:10:28EXetoCodd, but ok got it
19:11:18reactormonkAraq, any plans to harden repr against nil?
19:11:45dom96reactormonk: 10 mins left
19:12:06dom96Varriount: Interesting, any ideas how to fix it?
19:12:07reactormonkdom96, kk
19:12:28Araqbah, not 'repr' again
19:12:39AraqI wonder why it's so loved
19:12:51Araqit's hack and doesn't work that well
19:12:52filwitwhat's the alternative to repr?
19:12:59Varriountdom96: I'll have to look at the windows internals of osproc.nim
19:14:42dom96Araq: because it's useful for debugging.
19:15:07dom96people don't want to write a function which goes through each field manually and echos it
19:15:44reactormonkAraq, I'd love to deprecate repr in favour of a $ that works on everything
19:16:38Araqreactormonk: $ for everything is not good
19:16:54reactormonkAraq, so repr for everything then.
19:17:17Araqmeh fine, so make it work with 'nil'
19:17:35Araqit works with nil afaict
19:17:50Araqbut I never use repr so I might be wrong
19:18:12reactormonkI get a few nil access errors with repr
19:18:14*zahary joined #nimrod
19:20:22Araqhi zahary
19:21:33*Mat3 joined #nimrod
19:21:39Mat3hi all
19:23:39Araqhi Mat3
19:23:40zaharyhi
19:23:58Araqzahary: I changed how typedesc works in the compiler but now stuff broke ...
19:24:25dom96ooh, House of Cards Against Humanity
19:24:29*Mordecai joined #nimrod
19:24:50zaharywhat did you change?
19:25:17Mat3hi Araq
19:25:30Mat3and zahary
19:27:00reactormonkhttp://pastebin.com/2XkfVm5m
19:27:18Araqtypedesc[T] stays as it is, typedesc becomes internally tyTypeDesc[tyNone]
19:27:19reactormonkhttp://pastebin.com/2XkfVm5m
19:27:21reactormonkoops
19:27:38Araqso that skipTypes doesn't crash when you skip tyTypedesc
19:27:52Mat3exist there a time-frame for stable Nimrod versions ?
19:28:04Araqbut I'm puzzled by the logic in sigmatch.nim wrt tyTypeDesc
19:28:10AraqMat3: december 2014
19:28:32zaharytyTypeDesc[tyNone] would be void in the current design
19:28:35dom96reactormonk: ok, time to do this.
19:28:45zaharystill different than just typedesc
19:28:58Araqzahary: I don't think so
19:29:09AraqtyEmpty is void, tyNone is ... none
19:29:17zaharyah, you could be right
19:30:28reactormonkdom96, just found a bug in sqlite fastrows I believe
19:30:30zaharyso, what's puzzling in sigmatch?
19:30:31reactormonkbut go for it
19:30:57Varriountdom96: Preliminary research on stdout and stderr pipes suggest that the problem *might* be due to buffering
19:31:34reactormonkdom96, http://www.google-melange.com/gsoc/homepage/google/gsoc2014
19:31:40dom96"Mentor Summit at Google: Representatives from each successfully participating organization are invited to Google to greet, collaborate and code"
19:31:41dom960_o
19:31:58dom96So if my application is successful I will get to visit Google?
19:32:10reactormonkdom96, looks like it
19:32:18dom96hrm, why not.
19:32:43zaharydom96: have you read what does it take to become a mentoring organisation?
19:32:52reactormonkdom96, I suppose name is just nimrod
19:33:03reactormonkany official nimrod logo?
19:33:14Varriountreactormonk: The crown
19:33:25reactormonkdom96, ^
19:33:33VarriountThe unofficial logo is a honey badger
19:33:51dom96zahary: I'm reading the FAQ now.
19:33:58dom96reactormonk: Let me read the FAQ first.
19:34:07reactormonkdom96, go fir it
19:34:18dom96zahary: Would you have time to mentor?
19:34:23*xtagon joined #nimrod
19:34:27VarriountHi xtagon
19:34:36xtagonHey Varriount
19:34:46reactormonko/ xtagon
19:34:58xtagonWhat's new?
19:35:08*Mat3 is now known as Mat3-work
19:35:30dom96This looks pretty in-depth: http://en.flossmanuals.net/GSoCMentoring/what-is-gsoc/
19:38:18zaharydom96: I might be surprised by how much time is needed, but I could certainly try (mentoring)
19:39:12dom96zahary: According to the FAQ "Five hours per student per week is a reasonable estimate."
19:39:16dom96http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#howmuch
19:39:41zaharythat sounds quite reasonable
19:40:14dom96But make sure to keep yourself free because if you start disappearing students may get really discouraged.
19:40:57dom96Araq: You might as well be a mentor too.
19:41:21zaharyI'm rarely without access to email, live chat as IRC is another story
19:41:49dom96zahary: I see. Can I have your email?
19:42:23dom96I think as long as you have some sort of way to communicate with the student it will be fine.
19:42:29Varriountdom96: Is there any reliable way to test osproc getting stdout and stderr mixed up?
19:43:43zaharyI have one of yours (morfeusz), so I'll send you a ping
19:43:54dom96zahary: ok. Thanks.
19:44:08dom96Varriount: hrm, not sure.
19:44:28dom96Varriount: Perhaps create some app which writes to the stdout and stderr
19:44:37xtagonNimrod is going to participate in GSoC? :D
19:44:44reactormonkhttp://dpaste.com/1602184/ <- that's the data structure that kicks repr
19:44:47dom96xtagon: Maybe, interested?
19:45:08reactormonkVarriount, 2> /dev/null to test for stdout
19:45:22VarriountWindows, remember?
19:45:32xtagondom96, I'm not enrolled in an academic institution right now
19:46:02dom96xtagon: ahh, I wish I could participate as a student but I have the same problem heh.
19:46:33reactormonkVarriount, oh sap
19:46:45VarriountHrm. http://stackoverflow.com/questions/1545619/can-i-capture-stdout-stderr-separately-and-maintain-original-order
19:46:49*Mordecai quit (Quit: bbiab)
19:47:31dom96Varriount: Perhaps there is a different way to merge the two streams.
19:49:54*radsoc joined #nimrod
19:50:32xtagonNo, you NEVER cross the streams!
19:50:52xtagonhttp://www.youtube.com/watch?v=jyaLZHiJJnE
19:52:36*carum joined #nimrod
19:57:41dom96Araq: What do we actually want students to be working on?
19:57:44Araqzahary: sigmatch line 884 following
19:59:09Araqyou check the bindings before even checking whether it's typedesc or typeDesc[T]
19:59:31Araqwhich means (a, b: typedesc) only matches (int, int) but not (int, float)
20:01:26zaharythat was true at some point, then we decided that typedesc is not bindOnce
20:01:44zaharythis is currently handled earlier while the proc implicit generic params are collected
20:01:52*JStoker quit (*.net *.split)
20:01:53*joelmo quit (*.net *.split)
20:01:53*gsingh93_ quit (*.net *.split)
20:02:05zahary(a, b: typedesc) will be translated to (a: typedesc1, b: typedesc2)
20:02:15*JStoker joined #nimrod
20:02:28zaharynow, I'm not sure if the code in sigmatch still needs to have its current structure
20:02:48Araqalso this part
20:02:50Araq internalAssert prev.sonsLen == 1
20:02:52Araq let toMatch = if tfUnresolved in f.flags: a
20:02:53Araq else: a.sons[0]
20:02:55Araq result = typeRel(c, prev.sons[0], toMatch)
20:02:57*tdc joined #nimrod
20:03:34Araqyou don't even check what 'a' is, you simply access a.sons[0]
20:04:14*gsingh93_ joined #nimrod
20:04:26*joelmo joined #nimrod
20:04:46zaharythis is prev; it can't be something different than a typedesc
20:05:01zaharyah, nevermind
20:05:37tdcWhat is the Nimrod way to split a module into several files?
20:06:13Araqtdc: either use different modules with symbol "forwarding" via 'export' or use simply use 'include' instead of 'import'
20:07:37tdcexcellent! with include the doc parsing doesn't work - right? So maybe "forwarding" is cleanest?
20:07:46*vbtt joined #nimrod
20:07:59Araqtdc: doc2 can see through "include"
20:08:19tdcok. Thanks!
20:09:47dom96It seems we need two org admins anyway.
20:11:52dom96Araq: If we do this I am going to need some feedback here.
20:12:05Araqdom96: ok, I'm number two
20:12:15Araqthere are lots of things one could do
20:12:34dom96Araq: Firstly, we need concrete ideas. Because we need to submit a link to the ideas list in the proposal.
20:12:48dom96Araq: Secondly, how many students do we want to take?
20:12:59reactormonkdom96, one or two.
20:13:01Araqimplement true coroutines that can capture the full stack
20:13:14dom96reactormonk: Yeah, definitely not more than 2.
20:13:21vbtt+1 to the coroutines idea!
20:13:22dom96Varriount already wants to do it so that's 1.
20:13:57zaharyI propose making nimrod a platform for GC research - this means implementing precise stack marking and allowing GC implementation files to pick their code generation mode
20:14:08dom96Araq: Create a gist with ideas.
20:14:45Varriountdom96: Hm?
20:14:58dom96Varriount: You want to participate in GSoC
20:15:05Araqalso we can have go-like light-weight concurrency with excellent C interop with some new technique that I invented
20:15:23Varriountdom96: Yes...
20:15:25Araqwell likely re-invented :P
20:15:50dom96Araq: All that sounds very difficult :P
20:15:51Varriountdom96: There is likely no sure way to untangle stdout and stderr
20:16:00vbttAraq:don't true coroutines give us light-weight concurrency already?
20:16:01VarriountNot even the command prompt can do it.
20:16:16reactormonkVarriount, muh.
20:16:24Araqvbtt: sure but without multi-core support
20:16:47*aftersha_ quit (Quit: Computer has gone to sleep.)
20:16:59zaharyso Araq, you are right, I managed to crash it with some carefully crafted code
20:17:01dom96Varriount: What would you like to do?
20:17:09vbttAraq: as i see - you want to multiplex coroutines on multiple system threads.
20:17:13dom96(For GSoC)
20:17:16Varriountdom96: For what? GSoC, or osproc.nim?
20:17:21dom96^
20:17:32VarriountAnything that you think I can handle, that is needed.
20:17:39Araqvbtt: no *I* don't want that at all
20:17:56VarriountIf you think that coroutines are possible for someone of my skill set, I will try my best.
20:18:07Araqso every "cheap" coroutine can race, no thanks
20:18:18*shodan45 joined #nimrod
20:18:44*BitPuffin joined #nimrod
20:18:51*Varriount|Mobile joined #nimrod
20:19:00Araqdom96: 64 new record?
20:19:00dom96Araq: How are you planning on mentoring people about implementing coroutines?
20:19:01vbttAraq: fwiw, i think true coroutines, single threaded are good enough.
20:19:06dom96Araq: no
20:19:22Varriount|MobileMeep
20:19:46vbttAraq:also just coroutines may be the right sized project complexity-wise.
20:19:46Araqdom96: well I can give detailed instructions of what needs to be done to implement them
20:19:52*shodan45 is 65 \o/
20:20:23*shodan45 notes that 65 is not his age :P
20:21:01dom96Araq: ok, anything you can think of that I could mentor?
20:22:04Varriount|Mobileasyncio development
20:22:53dom96That will be done by the time summer arrives :P
20:23:00vbttactually single threaded coroutines are more desirable imo. you know exactly one of them is running and you know the switch points. they also use a shared heap.
20:23:10Araqvbtt: exactly
20:24:24vbttand the programmer can manually spin up multiple threads if they desire.
20:25:46vbttok. yeah i definitely support the single threaded coroutines idea! and if it eventually works well with the async io, that would be ideal.
20:26:01vbtt(basically i want a gevent like system in nimrod)
20:26:39Araqvbtt: dom96 has a working prototype of asyncio with nimrod's "yield"
20:27:47Araqzahary: please have a look at why tests/macros/tmacrogenerics fails
20:28:01AraqI changed its supposed output, but it fails again
20:28:19Araqand I'm not sure I should have changed the supposed output
20:28:45zaharyhave you tried to fix the handling in typedesc values in the new VM?
20:28:58vbttAraq:ok. dom96: is your stuff checked in?
20:29:16dom96vbtt: newasync branch
20:29:22dom96vbtt: It's not finished yet
20:29:33dom96vbtt: And I have some code which is still not pushed.
20:30:01*psquid joined #nimrod
20:30:08*psquid quit (Changing host)
20:30:08*psquid joined #nimrod
20:30:42*carum quit (Remote host closed the connection)
20:30:44Araqzahary: yes the codegen of the vm is aware of tyTypeDesc. But it still gets it wrong
20:30:49vbttdom96:thanks. do you have examples i can look at? or docs?
20:31:05dom96vbtt: Not just yet.
20:31:12*[1]Endy joined #nimrod
20:31:47Varriount|MobileAraq: If you ever get the urge to work on iterator and generic bugs, I have an entire file full of them
20:32:05dom96Araq: Here is KDE's idea list: http://community.kde.org/GSoC/2011/Ideas
20:32:19dom96The idea list is the most important in the application.
20:33:20EXetoCshould categories.nim be extended to include "tests/stdlib" when specifying the stdlib category?
20:34:05EXetoCrather than just lib/pure/*.nim and the highlite module
20:34:20vbttVarriount:are you familiar with how coroutines are used?
20:34:52demizerHello, everyone. Is there a way to read the html documentation for the master branch?
20:35:22Varriount|Mobilevbtt: Vaguely
20:35:35*Mat3-work is now known as Mat3
20:36:15Varriount|Mobiledemizer: Run the documentation generator on a clone of the master branch
20:36:16EXetoCdemizer: build.nimrod-lang.org. a hyperlink to build.nimrod-lang.org/docs/manual.html is missing
20:36:23vbttVarriount:you could start by looking at Python greenlets, gevent(which uses greenlets) and lua coroutines.
20:36:28demizersweet thank you
20:36:31EXetoCor that
20:36:34vbttVarriount:are you familiar with python generators?
20:36:49Varriount|Mobilevbtt: Quite familiar with those
20:37:17dom96Araq: Is `is` in a `when` broken?
20:38:26EXetoCnot for me
20:38:47EXetoCare the operands types?
20:38:49*micklat joined #nimrod
20:38:57*[1]Endy quit (Read error: No route to host)
20:39:18Varriount|Mobilevbtt: But iirc, Python generators are not coroutines
20:39:34*[1]Endy joined #nimrod
20:39:37dom96hrm, I think I see the issue.
20:39:50vbttVarriount: simplifying here but goroutines are the next level of generators.
20:40:17Varriount|Mobile"Next level" in what way?
20:40:19dom96What's the behaviour of 'is' when comparing a variable to a type?
20:40:34EXetoCcan individual output tests be executed?
20:40:34vbttVarriount: generators can have one suspended function. coroutines are a stack of suspended function calls.
20:40:51vbttVarriount:sorry meant coroutines (not goroutines)
20:43:02NimBotdom96/jester master 1527e0d Dominik Picheta [+0 ±1 -0]: Fixes #12
20:43:34vbttVarriount: so a function f() calls start_coroutine g(). then g() calls h(). so the stack looks like this: f() -> [ g() -> h() ]
20:43:58vbttthe square brackets represent the coroutine
20:44:18vbttnow h() could 'suspend' and control returns to f().
20:44:42Varriount|MobileSo, like Python's 'yield from'?
20:44:45vbttnow f() calls f2() and the stack looks like this. f() -> f2()
20:45:23vbtthowever the coroutine [g() -> h()] is still around in a suspended state and can be 'resumed'.
20:45:49vbttVarriount:yes like 'yield from'. the difference is that you don't have to write 'yield from' in each function that can be suspended.
20:46:24vbttyou just write normal code and any function can call 'suspend()' which suspends the current coroutine.
20:46:56Araqdom96: I wouldn't say "broken" but maybe the new vm still gets it wrong occasionally
20:47:05dom96Araq: nah, it's fine.
20:47:07vbtt(i'm describing asymmetric coroutines, btw, there are also symmetric ones where the idea is similar, i.e. suspended function stack, but the semantics are different)
20:48:20dom96Araq: Add ideas here please: https://github.com/Araq/Nimrod/wiki/GSoC-2014-Ideas
20:48:51vbttVarriount:also, different from 'yield from' in that you can start a new coroutine and call any function (i.e. the called function doesn't have to be written with 'yield' or 'yield from')
20:49:14vbttVarriount:i.e. the semantics are more like threads.
20:49:15Varriount|MobileThe question is, how difficult would it be to implement coroutines? I would probably need help, I don't think I could implement them on my own.
20:49:58vbttVarriount:with Araq's help, it shouldn't be too hard. Are you familiar with how function calls work w.r.t the stack?
20:50:32*psquid quit (Quit: oop)
20:51:06*psquid joined #nimrod
20:51:06*psquid quit (Changing host)
20:51:06*psquid joined #nimrod
20:52:28Varriount|Mobilevbtt: Again, I have some knowledge. Bits and pieces that I've picked up from reading
20:53:29Varriount|MobileThings like, different kinds of function calls modify certain registers to reflect return addresses and values and arguments
20:53:39Mat3Varriount|Mobile: You will need some knowledge of how to avoid call-frames (or better about misusing them for coroutine sheduling)
20:53:40dom96Is there much information about how coroutines are implemented out on the internet?
20:53:40vbttVarriount: that's probably something you should read up on. also, i recommend using coroutines to get an idea of the semantics. (e.g. lua, greenlets, stackless etc.)
20:54:50vbttdom96:yes but i haven't found a good resource that covers it from the ground up. also it depends on your function call implementation, and coroutines are much easier in interpreted languages which store the function frames as heap objects.
20:55:12Varriount|Mobilevbtt: Good thing I like reading
20:56:00Varriount|MobileI've been reading a boom on the internals of Windows NT to get to bed
20:56:09Varriount|Mobile*book
20:57:54vbttVarriount:w.r.t the stack i meant that the function locals are stored on the stack (c semantics and also nimrod). if you want to suspend functions, naturally you need a strategy to either copy the locals or have some kind or segmented stack or store the locals in the heap, not stack. so you have to make these decisions that araq can help you with.
20:58:40vbttanyway, g2g. bbl
21:00:30dom96wow, my cahbot still compiles.
21:00:53*[1]Endy quit (Ping timeout: 248 seconds)
21:01:45dom96bbl
21:05:52vbttVarriount:feel free to ping me on irc with questions if i'm around.
21:06:53Mat3coroutines: http://home.hccnet.nl/a.w.m.van.der.horst/forthlecture6.html
21:08:35*carum joined #nimrod
21:10:47vbttMat3:wikipedia is probably a better introduction :)
21:13:53Mat3well, this coroutine implementation is only one single definition (CO) which should be easily understandable in my opinion
21:16:44vbttperhaps, but only to those comfortable with forth.
21:20:24*Varriount|Mobile quit (Quit: AndroIRC - Android IRC Client ( http://www.androirc.com ))
21:23:27OrionPKin a for x in.. how come the `x` variable is `res` and not `x` in endb
21:23:41OrionPK(when i look at locals)
21:27:05AraqOrionPK: inlining of iterators is to blame, I guess
21:28:11*micklat quit (Remote host closed the connection)
21:28:12OrionPK:\
21:30:57*tdc quit (Quit: Leaving)
21:33:12*carum quit (Remote host closed the connection)
21:34:21*carum joined #nimrod
21:45:24*carum quit (Remote host closed the connection)
21:52:46VarriountAraq: Any plans on passing closure iterators with arbitrary parameters as arguments to another iterator?
21:53:35Araqno sure what you mean
21:54:02Araqclosure iterators got more stable recently and can capture from an outer proc
21:54:13vbttnice ^
21:54:35VarriountAraq: Yes.. but that only works if the iterators are expressly designed that way.
21:55:30vbttbtw, would be nice to have the syntax allow easy definition of iterators that just capture from the outer proc. this is the more common case, imo.
21:56:09vbttit is less common to pass parameters into the iterator with each step. however the syntax makes defining those easy.
21:56:48Varriountvbtt: I'm thinking about iterator chains, like map(filter(...), ...)
21:58:56Varriountvbtt, Araq: See https://gist.github.com/Varriount/8925071
21:58:58zaharywe have talked about this - I'd like to see it with inline iterators actually (closure iterators are slow)
21:59:50Varriountzahary: nd what was the outcome of the talk?
21:59:56Varriount*And
22:00:28dom96back
22:00:50dom96Ideas guys, ideas: https://github.com/Araq/Nimrod/wiki/GSoC-2014-Ideas
22:01:49zaharywell, they are not trivial to implement, but the outcome of such discussions is very easily influenced by working code :)
22:02:08vbttVarriount: cant you chain iterators already? by wrapping it in iter() or something?
22:03:44vbttI mean - something like map() should accept an iterable, right?
22:04:58*Demos joined #nimrod
22:05:39Varriountvbtt: There is not iter() procedure or iterator, as far as I'm aware.
22:06:20Varriountvbtt: Yes, but the iterator map() accepts has a known number and types of arguments
22:06:56VarriountOne argument, that accepts item in a sequence given to map()
22:07:37VarriountIn order to chain iterators, you would have to go through each one-by-one, accumulating the result of each and passing sequences.
22:08:35AraqVarriount: oh that's what you mean
22:09:51Demoscan we steal things from Haskell's various iteration libraries or is that too much type wankery (I know little about how haskell does this, only that their implementation is very general and composable, and probably slow)
22:10:13dom96OT: Anyone here watch House of Cards?
22:10:42zaharyideally expressions such as map(foo, …).filter(…).group_by(…) should be lazy and shouldn't produce any allocations
22:11:03dom96Varriount: Thanks for the edits :)
22:11:06EXetoCenter type class interfaces?
22:11:22Varriountdom96: Feel free to strike down any that are two ambiguous
22:11:34dom96We will need to make those ideas more in-depth though
22:11:46dom96or else we risk getting rejected as an org
22:12:59VarriountHow in-depth?
22:13:14dom96http://community.kde.org/GSoC/2011/Ideas
22:13:59Varriountdom96: You want the ideas formatted like that?
22:15:09dom96Perhaps not exactly like that, but a explanation of the project or idea would be nice.
22:15:23dom96"Fix bugs with iterators/generics" is a bit vague.
22:15:41dom96It needs to be concrete, something we can measure.
22:16:06vbtt"fix bugs" is not going to attract many takers.
22:16:18dom96indeed.
22:16:45vbttnew, cool sounding features will.
22:16:47Demoswell you can word it differently, it /is/ the most pressing issue
22:18:02dom96hrm, i'm not sure how this is going to work. What if someone completes the ideas listed on that page before GSoC starts?
22:18:51Mat3ciao
22:20:55*radsoc quit (Ping timeout: 260 seconds)
22:21:06BitPuffinzahary: are you fixing generics?
22:22:04Demoswell I don't think that is going to happen. And there are other related things such as "add support for spiffy generic features", "improve babel", "write a better random number generation library", "improve the time/date library", "improve c2nim", "improve the importcpp pragma (having type Foo[A, B] = object {.importcpp:"SomeGeneric<A,B>".} would be grand)"
22:22:09*Mat3 quit ()
22:26:05VarriountDemos: CryptGenRandom ftw
22:26:21Varriountdom96: Updated again, what do you think?
22:26:38DemosVarriount, is that a thing?
22:27:04VarriountDemos: There's a easily-wrapped random number generator in the windows api
22:27:24VarriountOr rather, crytographic random data generator
22:27:54Demosright, the nimrod API needs to be good. Also we want more than a crypto secure generator.
22:28:20Demoshaving access to a good PRNG is no good if everyone is running it once and modding the output
22:29:18AraqDemos: what do you mean "improve c2nim"? it's perfect. you might however simply wrap and use clang's parser instead
22:29:42BitPuffin"it's perfect" - biggest lie 2014
22:30:03Araqthis is the much better solution when you try to translate stdio.h
22:30:21Demosyeah that was what I was thinking keep c2nim as a lightweight converter and have like clang2nim
22:30:35Demosanyway my point was that nimrod has no shortage of projects to get done
22:31:11Araqdom96: can you mentor a parser generator?
22:31:23Araqin fact, I want re2c for nim
22:32:16reactormonkAraq, re is what?
22:33:40Araqand a nim backend for Ragel
22:33:49Araqreactormonk: "regular expression"
22:34:07reactormonkAraq, ah, a code generator for regexp
22:37:47VarriountDemos: How does the page look now?
22:38:52Demosstandard library is OK
22:39:32Demoswhat about making the docgen use huristics and comments to group "methods" together?
22:39:42dom96Araq: I think so
22:39:53Demosby huristics I mean "is the first param named self or this"
22:40:03filwitwell, huh.. Godot engine looks pretty cool. Even the scripting is python-like.
22:40:10dom96Varriount: Get rid of those bullet points in front of headers.
22:40:14dom96*headings
22:40:41EXetoCDemos: that's so verbose. how about just 'o' :-)
22:41:39DemosEXetoC, well false positives. The idea would be to have some kind of annotation in the doc comments
22:42:38EXetoCI think just a list of all variations would be fine, but maybe I'm too optimistic
22:42:45dom96Varriount: That's better
22:43:16EXetoCand a slightly more flexible output
22:43:28shodan45filwit: I tried to look at the code for some of their examples, but only found xml files with vaguely code-like stuff in them
22:44:02reactormonkDemos, I'd prefer an index that gives you every proc that takes a type
22:44:14VarriountWill no-one else add ideas?
22:44:26reactormonkVarriount, documentation improvements all over.
22:44:36reactormonkor adapting yard or something similar
22:44:38AraqVarriount: I missed something here
22:44:38Demosright, but there is the issue of procs where the first param is in no way special
22:44:44Demoslike pow(x,y) or whatever
22:44:59Araqwhat is the site you're all looking at?
22:45:05filwitGodot is like exactly what I'm writing for Nimord, even the scripts look familiar to my goals.
22:45:07filwitI can build games on Linux and publish to Windows, Mac, Android, etc.. that's cool
22:45:16BitPuffinwhat's the way to deal with parameters sent to a program
22:45:19VarriountAraq: Github
22:45:20BitPuffinlike ./mysoftware bla
22:45:20dom96Araq: https://github.com/Araq/Nimrod/wiki/GSoC-2014-Ideas ?
22:45:23BitPuffinhow do I get the bla part
22:45:27filwitshadon45: the examples are in the main git
22:45:39filwitshodan45* ^
22:46:13Varriountdom96: I can't fill out the "implement coroutines" idea, since I have no idea how to go about implementing it. :/
22:46:16filwitcalled 'demos', then the scripts are .gd
22:46:56shodan45filwit: I'll look again... I swear some of them only had images + an xml file
22:47:15filwitshodan45: https://github.com/okamstudio/godot/blob/master/demos/3d/platformer/enemy.gd
22:50:02BitPuffin.gd?
22:50:12filwitGodot engine
22:50:16filwitmakes sense
22:50:19BitPuffinoh
22:50:21BitPuffinyeah
22:50:23BitPuffinI saw that
22:51:32BitPuffinis it getOpt?
22:52:36VarriountOoh, I have a project idea. It was originally gradhas. Allow nimrod to include the standard library into the nimrod executable at bootstrap, and use those modules (unless a new one can be found)
22:54:52DemosOh, fixing the way module loading works would be good as well
22:55:34BitPuffinWHAT
22:55:36BitPuffinparseopt
22:55:38BitPuffinis deprecated
22:55:44dom96parseopt2
22:55:57dom96also
22:56:10dom96There is a nice library for this stuff in babel
22:56:24BitPuffinparseopt2 lol
22:56:28BitPuffindom96: what's the name
22:56:35dom96github.com/fenekku/commandeer
22:57:17BitPuffindom96: I think babel should do a nimrod doc automatically or something
22:57:19BitPuffinwould be sweet
22:58:21dom96perhaps
23:00:53BitPuffindom96: then you could just create a symlink to the docs directory and it would get updated as pkgs were added :D
23:01:27Araq"Implement support for the JavaScript backend in the tester" wtf?
23:01:38Araqthe tester supports that already
23:01:52EXetoCthat was easy
23:01:54EXetoCnext
23:02:08dom96Araq: It does?
23:02:18Araqyes
23:02:27dom96Are there any tests for the JS backend?
23:02:40Araqthere is even support to run the *same* test for multiple targets
23:02:50Araqincluding the JS target
23:02:50EXetoCoh yeah
23:03:09Araqdom96: yes there are
23:03:15dom96hrm, ok.
23:04:14dom96Araq: I don't think you should be writing how these things should be done.
23:04:22dom96Araq: You should be writing what the end result should be.
23:04:39Araqnah, poor students will get it all wrong
23:04:59dom96That's why you mentor them...
23:05:35dom96You know, students pick where they go.
23:05:48Araqwell I'll keep these notes for myself then, fine
23:06:00dom96Step-by-step instructions will probably discourage them
23:06:21VarriountOr make them underestimate the challenge of the task
23:07:04Araqhey, it's simple :P
23:07:09Araqhardly a challenge
23:07:19EXetoC1. add features 2. fix bugs 3. release 1.0
23:08:16dom96oh well, just dump your ideas in there for now.
23:08:32dom96We can refine things later.
23:08:37dom96And i'm too tired to do it now.
23:08:52Varriountdom96: What about the rest of the application? Do you need help with it?
23:09:04*Varriount *really* wants this to happen
23:09:36dom96I'm worried about the W8-BEN IRS form I will have to fill out.
23:09:43dom96I think that's after we get accepted though.
23:11:27VarriountIf I get to work on nimrod as part of the GSoC, it means that I won't have to get a job over the summer, and lose (even more) time to nimrod.
23:12:08dom96Yeah, the great thing is that you already know Nimrod. If we get another student they will need to spend a fair share of their time learning Nimrod.
23:12:25dom96Perhaps we should just request 1.
23:12:32dom96But then that feels a bit... unfair. lol
23:12:32VarriountI can help teach them
23:12:45Araqpfff nimrod is dead simple to learn
23:12:47VarriountNimrod is not that hard to learn.
23:13:11VarriountNo harder than Java is, and much less likely to alter your brain
23:13:38dom96I really want this to happen too. Not only because of the t-shirt but it means I will probably have an easier time getting in to the GSoC as a student next year.
23:14:06VarriountIt seems to me that using Java tends to alter (and restrict) the mind of a programmer when programming, which is a shame.
23:15:11VarriountI imagine that to a hard-core java user, nimrod is quite scary - no classes, seperation of 'methods' and objects, etc.
23:15:16NimBotAraq/Nimrod devel a600ce5 Zahary Karadjov [+1 ±4 -0]: fixes #797; generic procs can be used in places expecting matching concrete proc types
23:17:07EXetoCmy mind does indeed seem very unaltered atm
23:17:19DemosI am also a student. Although I have far less experience in nimrod than Varriount
23:17:45VarriountDemos: Not that much less experience.
23:18:09Demosyou came from python right?
23:18:13VarriountYeah.
23:19:16Araqzahary: var prc = if arg.kind in nkLambdaKinds: arg[0].sym else: arg.sym
23:19:46Araqis slightly wrong as nkIteratorDef can be used anonymously
23:20:25dom96Demos: You're welcome to participate too if you'd like.
23:20:29Araqin fact, I want to get rid of nkLambda, nkProcDef suffices, if n[namePos] is empty, it's anonymous
23:21:12Demoswell apperently students apply next month. But yeah GSoC sounds great
23:21:20Araqwhich at that point shouldn't be the case anymore
23:21:58*shodan45 quit (Quit: Konversation terminated!)
23:21:58dom96If we get accepted it'll be fun :)
23:24:02Araqgood night
23:29:53BitPuffinuh
23:29:55BitPuffinwhat the fuck
23:30:04BitPuffinhow do I make an optional argument with commandeer
23:30:12Varriountcommandeer?
23:30:15dom96aww yeah. Finished Physics homework in 5 mins.
23:30:16BitPuffinlike I can run the command like "bla" or "bla server"
23:30:20BitPuffindom96: noob
23:30:34dom96BitPuffin: u wut m8
23:31:45*xenagi joined #nimrod
23:34:43dom96Reddit always makes AMAs funny. Gotta love the Bill Gates AMA.
23:35:43xenagiwhy is that one funny?
23:36:40BitPuffinfucking commandeer
23:36:45dom96People make lots of funny jokes.
23:36:46BitPuffinlet me make an optional argument
23:39:17dom96This is pure gold: http://www.reddit.com/r/IAmA/comments/1xj56q/hello_reddit_im_bill_gates_cochair_of_the_bill/cfbsntu
23:40:23BitPuffin/Users/isak/src/nim/combat-cravings/src/combat
23:40:24BitPuffinNot enough command-line arguments
23:40:26BitPuffinError: execution of an external program failed
23:40:28BitPuffin._.
23:40:47dom96BitPuffin: Fork that shit.
23:40:56BitPuffindom96: fuck that shit
23:43:01dom96BitPuffin: noob
23:45:35EXetoCparseopt/parseopt2? just migrate later
23:46:16BitPuffindom96: no u
23:47:14BitPuffinhttps://gist.github.com/BitPuffin/888fe85faab4438925b6
23:47:21BitPuffinget a read from nil ._.
23:48:26BitPuffinwait now it works
23:58:55*darkf joined #nimrod
23:59:19EXetoCjust use discard, but nil works for now