00:00:29 | filwit | Araq: okay great. so my thinking was pretty accurate. I can hack fix it myself, so it's not a big deal. |
00:01:12 | Araq | I will tell you the invariant in the vm when you document it afterwards. deal? |
00:02:11 | filwit | i'm not sure exactly what you mean, but I don't mine documenting things as I learn them |
00:02:28 | Araq | good, will tell you tomorrow, I need to sleep now |
00:02:41 | filwit | okay, 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:25 | Demos | BitPuffin, ping |
01:14:06 | BitPuffin | Demos: pong? |
01:14:24 | Demos | linagl is your library right? |
01:14:30 | BitPuffin | hell ye |
01:14:47 | BitPuffin | missing somoething? |
01:14:52 | Demos | I am trying to write a linear algebra library (because why not) and am running into issues with static[T] not existing |
01:15:21 | BitPuffin | Demos: why not? Because linagl :P |
01:15:23 | Demos | well 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:00 | BitPuffin | Demos: right now unless I have missed something you can only pass ranges as parameters to generics |
01:16:15 | BitPuffin | so that's why linagl atm does that |
01:17:02 | BitPuffin | so you have to do type TMat5 = TMatrix[float32, range[0..4], range[0..4] instead of TMatrix[float32, 5, 5] |
01:17:37 | BitPuffin | Demos: but you should be using linagl instead :) it is in the public domain and everything |
01:20:41 | BitPuffin | Demos: so you could even use it for your secret illegal drug dealer projects |
01:25:12 | * | Demos_ joined #nimrod |
01:25:18 | Demos_ | sorry, I got disconnected |
01:25:47 | Demos_ | so it is just really stupid that you can only pass ranges as generic params |
01:26:35 | BitPuffin | Demos_: check the logs if you missed what I said |
01:27:17 | Demos_ | yeah you can use ranges, but static[int] is a documented feature that does not work... |
01:27:36 | BitPuffin | Demos_: I don't even know what it is supposed to do |
01:27:57 | Demos_ | you can have template params that are compile-time constant values |
01:28:06 | * | Demos quit (Ping timeout: 245 seconds) |
01:28:13 | BitPuffin | hmm |
01:29:23 | BitPuffin | Demos_: docs link? |
01:29:35 | Demos_ | http://build.nimrod-lang.org/docs/manual.html#special-types |
01:29:40 | Demos_ | note that none of that code works |
01:33:29 | * | ics joined #nimrod |
01:46:41 | Demos_ | 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:32 | Demos_ | 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:51 | Discoloda | what 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:16 | Demos_ | 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:20 | Demos_ | ping BitPuffin |
03:47:20 | * | brson joined #nimrod |
03:48:50 | Demos_ | 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:48 | Demos_ | 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:04 | micklat | I 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:00 | Araq | micklat: "koch tests" does the trick |
07:58:24 | Araq | but currently many tests fail, I'm working hard to make them green or disable them |
07:59:03 | Araq | bbl |
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:23 | skrylar | meep |
09:30:13 | * | athaudia joined #nimrod |
09:30:48 | * | DAddYE quit (Remote host closed the connection) |
09:32:05 | * | CarpNet joined #nimrod |
09:37:13 | skrylar | i 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:05 | BitPuffin | pong demizer |
10:30:09 | BitPuffin | Demos_ |
10:30:15 | BitPuffin | seems like he isn't here though |
10:30:19 | BitPuffin | would like to know what is wrong |
10:30:28 | skrylar | its a pretty quiet night |
10:30:30 | BitPuffin | linagl has probably been affected by regressions or something |
10:30:49 | BitPuffin | I noticed that some bug I had posted was re-opened on github |
10:30:55 | skrylar | do you know the last version your code worked on? |
10:31:14 | BitPuffin | skrylar: well no since it was a git version |
10:31:26 | BitPuffin | 0.9.3 doensn't really help because there is a million 0.9.3's :P |
10:31:32 | skrylar | hrm |
10:31:48 | skrylar | yeah, i should probably poke about that. Rust encodes the git revision in to -v |
10:32:10 | skrylar | I was going to suggest using bisect to find the regression, but that requires you know what hash was good |
10:32:21 | BitPuffin | skrylar: I have never seen you here before btw, so hey! :) |
10:32:29 | skrylar | BitPuffin: 'elloes |
10:32:33 | BitPuffin | anyway |
10:32:39 | BitPuffin | He just said that linagl doesn't work |
10:32:43 | BitPuffin | he didn't say what didn't |
10:32:48 | BitPuffin | kind of unhelpful |
10:32:50 | skrylar | :/ |
10:32:53 | * | ics quit (Ping timeout: 252 seconds) |
10:32:55 | BitPuffin | I haven't touched it in a while though |
10:33:04 | BitPuffin | But I could do some work on it after work today |
10:33:24 | BitPuffin | let's see if he created a bug report |
10:34:41 | BitPuffin | nope no bug report |
10:34:50 | BitPuffin | god damn it Demos! |
10:35:25 | skrylar | no bug report, no bug :o |
10:35:32 | * | ics joined #nimrod |
10:36:13 | BitPuffin | and I just tried compiling and running the tests |
10:36:15 | BitPuffin | no errors |
10:36:21 | BitPuffin | so kind of hard to know what he's talking about :( |
10:36:34 | BitPuffin | unless he's like using 0.9.2 or something |
10:36:38 | BitPuffin | because that is not supported |
10:36:53 | skrylar | yay releases-that-youre-not-supposed-to-use synrome \o/ |
10:37:03 | BitPuffin | \o/ |
10:37:13 | BitPuffin | yeah hopefully Araq releases 0.9.4 soon |
10:37:15 | skrylar | rust does that too. i think its really silly |
10:37:31 | BitPuffin | although if generics aren't fixed by then I'm gonna have to require 0.9.5 pretty quickly to use linagl |
10:37:45 | skrylar | whats broken about generics right now? |
10:38:25 | BitPuffin | uh well for example, you can't pass anything but types and ranges as parameters to them right now |
10:38:56 | BitPuffin | and when they aren't types you can't use them in the return type |
10:39:19 | skrylar | i thought thats what the generic system was for |
10:39:32 | skrylar | i thought if it wasn't a type, you were supposed to use a template |
10:39:52 | BitPuffin | skrylar: njaeeaeahe |
10:39:59 | BitPuffin | anyways take this as an example |
10:40:04 | BitPuffin | this is a workaround that uses ranges |
10:40:10 | BitPuffin | and it still doesn't work |
10:40:12 | BitPuffin | proc 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:38 | BitPuffin | this is for getting a submatrix of a matrix of R*C dimensions |
10:42:13 | BitPuffin | skrylar: 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:56 | BitPuffin | skrylar: okay well a two dimensional array then |
10:43:07 | skrylar | i'm looking at the line |
10:43:54 | skrylar | I think the range part in your return definition is doing it |
10:44:11 | skrylar | is one allowed to do expressions when declaring a generic type? |
10:44:23 | BitPuffin | skrylar: 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:41 | BitPuffin | skrylar: you are supposed to be allowed to do it but it doesn't work right now |
10:44:57 | skrylar | I'd probably templatize it then |
10:45:15 | skrylar | I have one section of code that uses templates and 'emit' just because the pragma syntax is derpy |
10:45:31 | skrylar | e.g. proc foo(...) # works |
10:45:45 | skrylar | proc foo(...) {.importc: bar.} # nope |
10:47:05 | BitPuffin | odd |
10:47:25 | skrylar | i also had bad issues where if i try to use 'macro' at all, the compiler segfaults |
10:47:59 | BitPuffin | skrylar: have you talked to Araq about it? |
10:48:10 | BitPuffin | and checked if it was reported and if not reported it? :P |
10:48:12 | skrylar | BitPuffin: this is the first time i've been to the IRC, tonight |
10:48:21 | BitPuffin | ah I see |
10:48:31 | skrylar | i poked in to nitpick about unicode |
10:48:35 | BitPuffin | well Araq is our leader so it's him you should pester about these things |
10:49:15 | skrylar | I 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:37 | BitPuffin | incorrect? |
10:49:39 | skrylar | its a common mistake, but 'graphemes' are the correct unit to iterate by when dealing with a unicode string, not runes |
10:50:04 | BitPuffin | ah |
10:50:13 | BitPuffin | well I don't know super much about encodings |
10:50:16 | BitPuffin | just a little |
10:50:32 | skrylar | BitPuffin: 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:05 | BitPuffin | TR? |
10:51:06 | skrylar | but say, an umlauted A |
10:51:15 | BitPuffin | umlauted? :P |
10:51:17 | skrylar | BitPuffin: unicode technical report |
10:51:20 | BitPuffin | ah |
10:51:44 | skrylar | if 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:04 | skrylar | these are both valid unicode |
10:52:50 | skrylar | the 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:41 | BitPuffin | lol |
10:54:08 | BitPuffin | ah umlaut is like åäö? |
10:54:14 | skrylar | yeah |
10:54:27 | BitPuffin | or maybe without å |
10:54:36 | skrylar | I wrote a unicode lib in C99 last year, it was painful. |
10:55:06 | BitPuffin | well not surprising you know so much about that then :P |
10:55:14 | skrylar | heh |
10:55:26 | skrylar | Its amazing how much of a pain it truly is to get text on the screen :) |
10:57:08 | BitPuffin | hehe |
10:57:11 | * | askatasuna joined #nimrod |
10:57:16 | BitPuffin | That's what happens |
10:57:58 | skrylar | i'm still surprised by the binary size for nimrod so far |
10:57:59 | BitPuffin | it's funny how you think those things are easy |
10:58:14 | BitPuffin | but it's because it is solved |
10:58:22 | skrylar | its easy until you want something special |
10:58:35 | skrylar | i think thats why there are no good outliners for windows, really |
10:59:07 | skrylar | on 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:20 | skrylar | there's also horrible things like what Unity or Love2D do |
11:01:46 | BitPuffin | what do they do? |
11:01:52 | skrylar | Love2D 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:10 | BitPuffin | HAHA |
11:02:12 | BitPuffin | what |
11:02:13 | skrylar | its no wonder that on a 1000$ engine, people are still selling GUI replacements |
11:02:21 | skrylar | because the GUI is just godawful |
11:03:36 | skrylar | Unity is really no better than OGRE with a pre-made level editor and Mono/C# bindings ^^; |
11:04:02 | BitPuffin | so you are saying use NeoAxis? |
11:04:20 | BitPuffin | It is "better" though |
11:04:26 | BitPuffin | since ogre is a rendering engine |
11:04:27 | skrylar | I wouldn't actually pay for an engine o.o |
11:04:32 | BitPuffin | unity also comes with physics and shit |
11:04:37 | BitPuffin | and I know |
11:04:39 | BitPuffin | there are plugins |
11:04:45 | BitPuffin | anyways I hate premade engines anyway |
11:04:58 | skrylar | There is one and only one pre-made engine I respect, and that is the Unreal engine |
11:05:11 | skrylar | Because people can punch that thing in to doing pretty much anything they want it to |
11:05:17 | BitPuffin | lol |
11:05:27 | BitPuffin | do you know what a god awful codebase UE 3 has? |
11:05:33 | BitPuffin | I've heard terrible horror stories |
11:05:38 | BitPuffin | but basically to sum it up |
11:05:52 | BitPuffin | the UE 3 games you see on the market, such as Bioshock Infinite etc |
11:05:58 | skrylar | Torque 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:58 | BitPuffin | are NOT even running UE 3 |
11:06:06 | skrylar | yeah everyone hates 3 |
11:06:13 | skrylar | ubisoft still uses 2.5 |
11:06:40 | BitPuffin | it'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:50 | BitPuffin | oh so you meant UE 2.x? |
11:06:57 | skrylar | sounds like gamebryo lol |
11:07:05 | skrylar | gamebryo is just terrible |
11:07:16 | skrylar | it sounds like a great idea and you see Civ + TES games use it |
11:07:38 | skrylar | then you find out that Civ had to bugfix the hell out of the engine to fix the terrible performance leaks |
11:07:55 | skrylar | and Bethesda has been monkeypatching it until Skyrim where they basically rewrote everything |
11:08:30 | skrylar | all though i still find Source to be the most embarassing engine IMO |
11:08:38 | BitPuffin | Why? |
11:08:47 | BitPuffin | I'd say that source is probably one of the most robust on the market |
11:08:47 | skrylar | Its a jank Quake 2 engine |
11:09:09 | skrylar | No scripting layer, only supports BSP maps, does not handle large maps with any grace |
11:09:29 | BitPuffin | it has lua and squirrel scripting? |
11:09:46 | skrylar | it didn't the last time i knew people who tried to use it |
11:09:54 | BitPuffin | I guess it's not built to be a silver bullet (nothing can be) |
11:10:04 | BitPuffin | which I think is fine |
11:10:17 | BitPuffin | in fact I think that's the whole problem with premade engines |
11:10:22 | BitPuffin | they are built to solve everything |
11:10:25 | skrylar | https://developer.valvesoftware.com/wiki/Source_Engine_Features no scripting layer |
11:10:28 | BitPuffin | which makes them a mediocre solution for everything |
11:11:10 | skrylar | well that was why the unreal engine used to be good |
11:11:12 | BitPuffin | https://developer.valvesoftware.com/wiki/VScript |
11:11:22 | skrylar | it was a chunk of modules glued together by unrealscript |
11:12:37 | skrylar | heh squirrel and gamemonkey. i remember those |
11:13:24 | skrylar | Sadly LuaJit is pretty much the reason non-lua scripting languages don't matter for games; at least in my opinion |
11:14:38 | skrylar | the amount of speed that thing punches out of lua is absurd |
11:15:41 | BitPuffin | well |
11:16:39 | BitPuffin | I might argue that you shouldn't use a scripting lang for the stuff that needs absurd perf |
11:17:10 | skrylar | maybe |
11:17:19 | skrylar | though i don't like regular code being slow for no reason |
11:17:37 | BitPuffin | *cough* nimrod |
11:17:52 | skrylar | i haven't had speed issues yet ._. |
11:18:02 | BitPuffin | that's not what I meant |
11:18:21 | BitPuffin | I meant that nimrod is pretty much as pretty as a scripting language but still fast as a systems programming language : |
11:18:23 | BitPuffin | :) |
11:18:38 | skrylar | well, i didn't use it at first because GC and compiles to C |
11:18:53 | BitPuffin | you don't have to use CG |
11:18:55 | BitPuffin | GC* |
11:18:57 | skrylar | mandatory GC makes me 'ew' and i used haxe which compiles to C++ and is dog slow |
11:19:23 | skrylar | a simple roguelike in haxe took like 2-15 seconds to build |
11:19:23 | BitPuffin | and 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:40 | skrylar | it helps that its *straight* C |
11:19:59 | skrylar | regular C compiles pretty fast if you aren't a derp with 50mb of headers to trawl |
11:19:59 | * | aftersha_ joined #nimrod |
11:20:02 | BitPuffin | skrylar: anyways, we have optional GC (I also hate mandatory GC with a passion) and the compilation speed is pretty decent! |
11:20:31 | skrylar | BitPuffin: yeah, i saw that the GC was competent |
11:20:34 | BitPuffin | skrylar: yes and I believe nimrod also does some voodoo with compiling it on multiple threads etc |
11:20:53 | BitPuffin | or like |
11:21:06 | BitPuffin | It compiles the C while it generates the next C for it to compile |
11:21:10 | skrylar | nimrod doesn't emit headers for things that don't need it, so GCC isn't trawling megabytes of useless data |
11:21:13 | BitPuffin | so it's utilizing resources well |
11:21:30 | skrylar | I used to use a program 'makeheaders' for my straight C which did the same thing |
11:21:49 | skrylar | scanned your C files and made minimized headers, so 1) no manual maintenence and 2) much faster compiling even without parallel builds |
11:22:01 | BitPuffin | skrylar: 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:14 | skrylar | BitPuffin: nah, i don't mind since its very quick |
11:22:17 | BitPuffin | we just use C because we can utilize optimizers and shit |
11:22:30 | skrylar | the full build of the compiler only took ~10 seconds IIRC |
11:22:40 | BitPuffin | yup |
11:22:50 | BitPuffin | and that's the biggest nimrod source there is more or less |
11:23:02 | skrylar | i 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:06 | skrylar | :) |
11:23:45 | BitPuffin | yep |
11:23:47 | BitPuffin | build in caching |
11:23:49 | BitPuffin | luvit |
11:24:01 | skrylar | ccache + lazy compilation :3 |
11:24:08 | BitPuffin | we also *can* compile to C++, objective-c, js |
11:24:11 | skrylar | though i don't think nimrod is lazy compiling on my machine right now |
11:24:18 | * | aftersha_ quit (Client Quit) |
11:24:35 | skrylar | it might be, but it hasn't been slow enough for me to get concerned yet |
11:24:46 | skrylar | 0.2s on average to rebuild my test code so i'm not worried, lol |
11:25:15 | BitPuffin | :) |
11:25:47 | skrylar | i might be interested in trying to figure out how to shield Ogre builds in nimrod at some point |
11:26:01 | skrylar | i think using the dynlib will keep link times down |
11:26:55 | skrylar | my 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:06 | skrylar | which doesn't exist in say, Horde3D, because all of that has been shielded |
11:28:35 | skrylar | BitPuffin: though i do like pascal types :) |
11:37:43 | skrylar | BitPuffin: huh. i just wondered if templates and tags could be used to generate shaders |
11:38:24 | skrylar | e.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:27 | BitPuffin | skrylar: of course it could |
11:54:48 | BitPuffin | in fact I am planning to do something like that |
11:55:13 | * | aftersha_ joined #nimrod |
11:56:14 | EXetoC | wot |
11:58:10 | BitPuffin | EXetoC: sup |
12:13:37 | skrylar | generics are <3 |
12:14:09 | skrylar | i rewrote my rectangle math code over from Rust, and the total LOC is way down mostly because the generics are less derpy |
12:16:47 | skrylar | BitPuffin: is there a nimrod equivalent to "maybe returns" already? |
12:19:34 | BitPuffin | skrylar: maybe returns? |
12:22:56 | skrylar | BitPuffin: in rust they have a generic maybe type, somewhat haskell-ish but its basically a variant type with "Some X" and "None" |
12:23:07 | skrylar | So you can return Maybe<Rectangle> |
12:24:16 | EXetoC | it returns either way in normal circumstances, but anyway, there's variants |
12:25:01 | skrylar | EXetoC: 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:28 | skrylar | easy enough to write a Nimrod version of the same, I just wasn't sure if that was already a thing |
12:25:51 | EXetoC | I was just nitpicking |
12:25:53 | EXetoC | https://github.com/fowlmouth/nimlibs/blob/master/fowltek/maybe_t.nim |
12:26:03 | EXetoC | http://build.nimrod-lang.org/docs/manual.html#object-variants |
12:26:19 | skrylar | alright |
12:26:33 | skrylar | i was mostly just curious if there was already a convention for that, before i started doing anything with it |
12:26:36 | skrylar | i knew how to write it |
12:26:40 | EXetoC | it's slightly less useful, or maybe it's just a little clunkier, but we might get something similar soon |
12:27:06 | EXetoC | ok |
12:28:02 | skrylar | thats a weird API for it (i just read the source) |
12:29:50 | EXetoC | yeah? |
12:31:36 | skrylar | EXetoC: I guess it can't be helped all that much, though it would look better if you could do |
12:31:54 | skrylar | case x; of Something: blah, Nothing: blah |
12:32:32 | skrylar | "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:36 | skrylar | but 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:59 | EXetoC | for 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:05 | EXetoC | have a look at this if it's unclear http://build.nimrod-lang.org/docs/manual.html#convertible-relation |
12:38:36 | skrylar | I understand how the code works and I was mostly just nitpicking the syntax for using that TMaybe |
12:39:04 | skrylar | I do appreciate the help though |
12:39:47 | EXetoC | right. well, I wouldn't mind referencing 'has' explicitly tbh |
12:40:49 | skrylar | i 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:54 | BitPuffin | I should probably read through the build version of tfm |
12:50:01 | BitPuffin | so that I am up to date with latest features |
12:50:26 | EXetoC | ya |
12:52:44 | BitPuffin | would be cool if nimrod got some of the nice sugar from ruby I think |
12:53:05 | BitPuffin | so that you can do `a = 5 if a == 2` or whatever |
12:54:09 | EXetoC | if (let x=p();x==1): ? |
12:54:54 | skrylar | tfm? |
12:55:35 | skrylar | EXetoC: that incurs the need for indentation |
12:56:01 | EXetoC | I don't think so |
12:56:08 | skrylar | BitPuffin: i think that would pretty much be served by an 'iif' method/macro i think |
12:56:24 | EXetoC | if (let x=p();x==1): echo "yup" |
12:56:38 | skrylar | i think VB and some Pascals had it so it was like that; x = iif(a == 2, 5, 0) |
12:56:39 | BitPuffin | skrylar: tfm = the fucking manual |
12:56:44 | skrylar | BitPuffin: oh. :P |
12:56:52 | BitPuffin | is in rtfm :P |
12:56:57 | BitPuffin | as |
12:58:21 | EXetoC | let x = (discard 3; 4); assert x == 4 |
12:58:28 | skrylar | i opened the manual page for the gtk2 unit; it made my scrollbar sad |
12:58:32 | EXetoC | except you need to replace the ; with a newline |
12:58:54 | BitPuffin | I don't see how what you are typing is addressing what I said lol |
12:58:55 | EXetoC | it'd be nice if that could be avoided, for the sake of IRC mainly :> |
12:59:12 | EXetoC | BitPuffin: then what does that do? |
12:59:23 | BitPuffin | oh you just mean what it would do? |
12:59:56 | BitPuffin | well I gues syou would do `a = 5 if a == 4 else 3` |
12:59:59 | BitPuffin | or something like that |
13:00:05 | BitPuffin | can't remember exactly how ruby does it |
13:00:13 | BitPuffin | or maybe that it just keeps its value |
13:00:15 | BitPuffin | yeah probably that |
13:00:41 | EXetoC | let x = if y: z else: w |
13:00:51 | EXetoC | no? |
13:01:10 | EXetoC | if not, then you'll have to translate to Nimrod, because I don't know Ruby c(:) |
13:01:50 | BitPuffin | EXetoC: yeah i know that you can do that in fact I believe I do it quite a few times |
13:02:00 | BitPuffin | it's just harder to follow in certain cases |
13:02:13 | BitPuffin | can't remember where it was annoying though |
13:03:22 | skrylar | heh, i didn't know you could |
13:03:34 | skrylar | I just re-did code earlier to use abs/min/max instead |
13:03:36 | EXetoC | it'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:24 | BitPuffin | EXetoC: yeah but the ruby way is readable on one line :P |
13:08:16 | EXetoC | oh 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:50 | Araq_ | hi skrylar welcome |
13:56:07 | Araq_ | 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:59 | BitPuffin | Araq_: 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:19 | BitPuffin | because it works here |
14:20:59 | Araq_ | BitPuffin: no but even I would, I wouldn't tell you |
14:21:19 | Araq_ | because you don't like nimrod's if-expressions :P |
14:22:42 | OrionPK | oh dear |
14:22:51 | BitPuffin | Araq_: oh snap diddely |
14:23:11 | BitPuffin | Araq_: I do like them, I just think the different variations are more readable in certain situation |
14:23:13 | EXetoC | he said it wasn't ideal, because of the limitations that you too had run into |
14:23:13 | BitPuffin | s |
14:23:26 | EXetoC | did he also say that it didn't work at all? |
14:24:40 | Araq_ | BitPuffin: can't agree, sorry, if then else is the standard order |
14:24:52 | Araq_ | and python's is weird |
14:25:11 | * | OrionPK quit (Remote host closed the connection) |
14:25:23 | EXetoC | yes, it's consistent |
14:25:25 | * | OrionPK joined #nimrod |
14:25:30 | Discoloda | b?t:f is the only logical pick expression |
14:25:34 | BitPuffin | EXetoC: well those limitations will be removed when the compiler is fixed, so it's not really an issue with linagl |
14:25:34 | EXetoC | weird indeed |
14:25:38 | BitPuffin | EXetoC: and yes he did |
14:26:00 | BitPuffin | Demos_ | linagl does not work very well... or at all |
14:28:29 | BitPuffin | I 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:43 | EXetoC | vector.nim doesn't work for me: Error: internal error: typeRel: tyNon |
14:29:09 | Araq_ | that's a regression that I cause in an attempt to make the compiler more stable ... |
14:29:10 | EXetoC | *tyNone |
14:29:15 | Araq_ | *that I caused |
14:29:25 | EXetoC | fair enough |
14:29:32 | BitPuffin | https://gist.github.com/BitPuffin/8916869 |
14:29:38 | BitPuffin | works here |
14:29:43 | BitPuffin | I updated the compiler yesterday |
14:30:36 | EXetoC | I updated 1-2 days ago |
14:30:38 | BitPuffin | EXetoC: do you have the latest version of the compajler |
14:32:28 | EXetoC | I don't know if I remembered to pull, but I'll try again tonight |
14:32:49 | BitPuffin | EXetoC: could possibly be that the version that babel pulls isn't the head version |
14:33:09 | EXetoC | I cloned the repository |
14:34:26 | BitPuffin | well then there we go |
14:34:29 | BitPuffin | should work |
14:36:43 | EXetoC | we'll see |
14:37:18 | BitPuffin | EXetoC: 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:33 | skrylar | hmm.. |
15:09:43 | skrylar | Fossil seems neat, but I like my git-rebase. |
15:12:44 | * | aftersha_ joined #nimrod |
15:14:52 | * | Demos joined #nimrod |
15:16:28 | Varriount | Hello honey badgers! |
15:16:39 | Demos | hello Varriount |
15:16:50 | Demos | fixed your sleep scedule I see |
15:17:36 | BitPuffin | Demos: whatchu talkin bout linagl not working |
15:18:25 | Demos | BitPuffin: 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:52 | BitPuffin | Demos: I haven't seen any issues with the tests I have written at least |
15:18:53 | BitPuffin | hrm |
15:18:55 | Demos | also [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:17 | Demos | I was also having the mag function fail the side effects check |
15:19:21 | Demos | I am on 0.9.3 master |
15:19:58 | BitPuffin | Demos: Err I don't think you should mix int vectors with float vectors really |
15:20:07 | BitPuffin | Unless you do so explicitly |
15:20:51 | Demos | BitPuffin: 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:53 | BitPuffin | Demos: right it fails because I have to use C sqrt |
15:21:07 | Demos | does C sqrt have side effects? |
15:21:22 | BitPuffin | Demos: no but nimrod can't verify that calling C doesn't mean side effects |
15:21:40 | BitPuffin | so yeah that's a minor issue |
15:21:57 | BitPuffin | Demos: anyway most of the warts (such as temporarily having to use ranges) is limitations of the compiler atm |
15:22:03 | BitPuffin | that's why I have pre-defined types |
15:22:03 | Demos | well it makes normalize and mag just not work. Should remove the noSideEffect pragma on them until it does |
15:22:27 | BitPuffin | so that it won't break peoples code who doesn't do anything out of the ordinary |
15:22:34 | BitPuffin | Demos: yeah absolutely, that's just a miss on my end |
15:24:48 | BitPuffin | Demos: mag is currently a much bigger pain in the ass than in should be because we only have sqrt for floats |
15:25:08 | BitPuffin | but it's not a biggie |
15:25:20 | BitPuffin | It gives you what you expect now I guess :P |
15:25:49 | Demos | frankly I think there should be a "noSideEffectsJustTrustMe" pragma. I think haskell has something like that for C functions |
15:26:14 | BitPuffin | oh and it only works for "float" and not "float32" because I can't do TReal stuff on it |
15:26:17 | BitPuffin | Demos: agreed |
15:26:33 | Varriount | noReallyThisHasNoSideEffectsEvenThoughItSeemsLikeItDoesNoReally |
15:27:07 | Demos | {.noSideEffectsErrornosCanDieInAFire.} |
15:28:39 | Demos | does float accept floatXXs as well, I seem to recall some issue relateing to that when I used linagl on the devel branch |
15:29:01 | Demos | I thought "oh float must be a typeclass, oh wait that is dumb" |
15:32:32 | BitPuffin | Demos: there was some issues with typeclasses |
15:32:38 | BitPuffin | and no float is float |
15:32:46 | BitPuffin | TReal includes float float32 float64 etc |
15:32:59 | Varriount | Anyone know if the semantics for "instanciating" a new closure iterator has changed at all? |
15:34:48 | BitPuffin | Demos: anyways mag is fixed now |
15:35:27 | BitPuffin | Demos: 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:06 | Varriount | Also, any ideas on how to iterate through a closure iterator that has args, when given as an argument to another closure iterator? |
15:38:19 | Demos | BitPuffin: allright, I may submit a pr for some accessor functions (although having a function called "x" is bound to clash with /something/ |
15:40:32 | BitPuffin | Demos: accessor functions? |
15:40:38 | BitPuffin | Demos: you mean like vec.x |
15:40:41 | BitPuffin | don't do that |
15:40:46 | BitPuffin | swizzling is already implemented |
15:40:53 | BitPuffin | but it's currently broken |
15:40:57 | BitPuffin | because bugs in the compiler |
15:41:27 | BitPuffin | Demos: but in theory you should be able to do vec.xyxyzyzyxgzyzxyzgrgbgbrgbrbgrbaststspqpqqsptsq |
15:42:41 | Demos | what I saw was vec.{"xyzzzwagggg"} |
15:43:11 | Demos | I 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:40 | Varriount | Hm. I wonder if there's any way we could get funding for nimrod. |
15:46:09 | BitPuffin | Demos: yeah initially in was that but then when zahary added delegators I made it into v.ecxhrexhoa |
15:46:34 | BitPuffin | Demos: may have removed that though |
15:46:45 | BitPuffin | it's really just a matter of changing the name etc |
15:47:12 | BitPuffin | Demos: as you can see the {"xyxyxyxy"} thing is deprecated |
15:47:18 | Demos | what is a matter of changeing the name? deligators or getting funding? |
15:47:30 | BitPuffin | because it is preferred to not use it since it will be removed in favor of x.xz |
15:47:41 | BitPuffin | Demos: delegators |
15:47:57 | Demos | yeah I really like the .xxxyzwang thing, much better than the way glm does it (macros for each combination) |
15:48:05 | BitPuffin | Demos: yup |
15:48:11 | BitPuffin | bbl |
15:53:22 | * | [2]Endy joined #nimrod |
15:56:44 | * | [1]Endy quit (Ping timeout: 245 seconds) |
16:09:06 | skrylar | :| |
16:10:05 | skrylar | well 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:14 | Varriount | skrylar: If procedure parameters aren't given a type, they default to the "expr" type |
16:12:38 | Demos | Varriount: really, auto would be more sane |
16:12:49 | EXetoC | "auto* = expr" |
16:12:59 | Demos | really now.?...? |
16:13:00 | Varriount | Demos: The 'auto' type is the 'expr' type |
16:13:05 | * | Discoloda left #nimrod (#nimrod) |
16:13:05 | Demos | neat |
16:13:16 | * | skrylar wouldn't mind a compiler hint about that |
16:13:21 | skrylar | if nothing else it lets you know it did it |
16:13:28 | * | Varriount agrees with skrylar |
16:13:32 | Demos | should be a warning |
16:13:54 | skrylar | such would have saved me about 45 minutes of going "wut?" |
16:13:57 | Varriount | Actually, such a feature might not be too hard to implement. |
16:14:01 | EXetoC | you can already do p(x, y: T) so it's a source of confusion |
16:14:06 | skrylar | Fun times with ncurses: Can't use debugEcho because curses is eating the buffer |
16:14:14 | Varriount | :3 |
16:14:31 | EXetoC | p(x, y: T) -> p(x: T, y: T) |
16:14:49 | Varriount | I have no sympathy, ncurses doesn't work on windows without cygwin |
16:15:00 | Demos | I hear ncurses is a big ball of wtf |
16:15:06 | skrylar | Varriount: http://pdcurses.sourceforge.net/ *whistles* |
16:15:08 | Varriount | ^ That too |
16:15:21 | Varriount | :O |
16:15:27 | EXetoC | termbox? |
16:15:34 | skrylar | termbox is nix only |
16:15:52 | Varriount | skrylar: Why aren't programs like this more well-known? |
16:16:06 | skrylar | Varriount: i donno. I found out about it because ToadyOne used it for Liberal Crime Squad |
16:16:07 | Demos | does COMMAND.COM even allow stuff like curses? |
16:16:12 | skrylar | Demos: yes |
16:16:25 | EXetoC | they don't make that obvious at all |
16:16:30 | skrylar | The guy who wrote termbox even mentioned it |
16:17:04 | skrylar | well its.. done through weird APIs, for windows |
16:17:33 | Demos | welcome to windows EnjoyYourStayEx |
16:17:39 | skrylar | And 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:02 | OrionPK | time for someone to wrap this game engine i guess https://github.com/okamstudio/godot |
16:18:37 | * | skrylar peeks at it |
16:18:50 | Demos | looks like reddit hugged that website to death |
16:18:52 | skrylar | the .org url is taking a small forever to open |
16:19:18 | OrionPK | ya |
16:19:32 | OrionPK | it loaded up eventually |
16:20:05 | OrionPK | a pure nimrod engine would be better yet, of course :P |
16:20:06 | * | carum joined #nimrod |
16:20:20 | skrylar | Port it :P |
16:20:48 | skrylar | maybe 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:50 | Varriount | In 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:18 | Varriount | Demos: I don't think COMMAND.COM actually exists anymore. It's just cmd.exe now. \nitpick |
16:29:52 | skrylar | Varriount: some of it is also the painful legacy of C |
16:30:33 | skrylar | even stuff like this http://libagar.org/ gets really derpy to use, because you have to fake all of the OO |
16:31:09 | EXetoC | we have a couple of upcoming engines, but it takes ages as always |
16:31:38 | Varriount | Hm. Interesting. Does libagar use native api's, like wxwidgets, or something like java's gui toolkits? |
16:32:13 | skrylar | it uses SDL |
16:32:15 | EXetoC | BitPuffin: have you used PA yet? |
16:33:06 | BitPuffin | EXetoC: PortAudio? |
16:33:07 | Varriount | skrylar: Araq has a repo named "Claro", which he had envisioned to be a nimrod gui toolkit |
16:33:17 | EXetoC | BitPuffin: yes |
16:33:24 | BitPuffin | EXetoC: nein |
16:33:28 | Varriount | However it's not currently developed, and quite.. lacking |
16:33:42 | EXetoC | BitPuffin: ok |
16:33:47 | BitPuffin | EXetoC: have you? |
16:33:48 | * | Demos joined #nimrod |
16:33:52 | skrylar | Varriount: i've been designing one based on Morphic (smalltalk) and the DOM (html) |
16:34:04 | Varriount | skrylar: Sounds interesting. |
16:34:11 | skrylar | Morphics.. basically just a scene graph really |
16:34:27 | skrylar | there is a 'morph' class and every widget is just a combination of those |
16:34:31 | Varriount | So, by DOM, you mean, seperate the data from the layout? |
16:34:33 | EXetoC | BitPuffin: are you on devel? I just built the latest Nimrod source, and vector.nim still generates an ICE |
16:34:40 | EXetoC | BitPuffin: nope |
16:34:43 | BitPuffin | EXetoC: I am not on devel |
16:34:52 | skrylar | e.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:58 | EXetoC | that ought to explain it then |
16:35:13 | BitPuffin | EXetoC: indeed |
16:35:14 | EXetoC | Demos: are you on the devel branch? |
16:35:24 | BitPuffin | I'm on master |
16:35:24 | Varriount | EXetoC: Any ideas on how generic closure iterators could be properly passed in around in nimrod? |
16:35:55 | BitPuffin | God damn it must the repository name be capitalized |
16:36:03 | BitPuffin | makes it a pain to cd into xD |
16:36:08 | Varriount | So that chaining things iterators like filter and map would work? |
16:36:21 | BitPuffin | from now on I shall change the dir name |
16:36:24 | EXetoC | indeed. speaking of which, I should tweak my shell a little |
16:36:31 | Varriount | BitPuffin: Not if you're on a case-insensitive file system. :3 |
16:36:34 | skrylar | Varriount: 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:39 | BitPuffin | Varriount: fuck that shit |
16:37:11 | EXetoC | Varriount: I don't know any details |
16:37:23 | Varriount | skrylar: Pfft, dynamic dispatch. Nimrod has advanced static dispatch trees. |
16:37:26 | Demos | BitPuffin: merge meh pr to linagl |
16:38:10 | Demos | and EXetoC I switch around often, usually I am on devel or master, rarely stable |
16:38:25 | Demos | with meh ssd it takes <1m to reboot the whole compiler |
16:38:36 | skrylar | Varriount: 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:27 | BitPuffin | Demos: what is it about |
16:39:40 | Demos | I removed {.nosideeffect.} on normalize |
16:39:52 | skrylar | end-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:57 | Varriount | skrylar: And what about native look and feel? |
16:40:01 | Demos | since normalized calls mag and that causes the side effect checker to reject it |
16:40:06 | skrylar | Varriount: i don't really care about that so much. |
16:40:14 | BitPuffin | yeah |
16:40:42 | Demos | Varriount: 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:49 | skrylar | Varriount: Drawing controls isn't integral to my class tree, so if you want that you *can* do it |
16:40:56 | BitPuffin | Demos: 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:00 | BitPuffin | a comment or something would be nice |
16:41:02 | BitPuffin | though |
16:41:11 | skrylar | Demos: it calls the windows style APIs nowadays |
16:41:13 | BitPuffin | I should really get like a waiver file or something |
16:41:34 | skrylar | there are ways of asking XP and beyond to draw the modern theming on to a GDI canvas |
16:41:37 | EXetoC | Demos: 65s here (SATA). not too bad |
16:41:43 | Demos | BitPuffin: what... I change one line. And I do not intend to keep my own fork and not send prs |
16:41:49 | BitPuffin | :P |
16:42:07 | BitPuffin | That's why I said it doesn't really merit forcing you to say that |
16:42:15 | BitPuffin | it is merged |
16:42:24 | Demos | also, afaik CC0 is not copyleft :D |
16:42:32 | skrylar | all 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:46 | BitPuffin | Demos: didn't say it was |
16:42:49 | BitPuffin | Demos: it is public domain |
16:42:50 | skrylar | but you can certainly shovel it under what i have written, since its not tightly coupled |
16:43:18 | EXetoC | Demos: 49s when upping the CPU freq, but <1m isn't too specific :> |
16:43:32 | skrylar | Varriount: hilariously the current revision draws out to {n,pd}curses, because who doesn't want an outliner that runs in PuTTY? :D |
16:44:43 | BitPuffin | pfff, 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:23 | skrylar | ^ |
16:45:39 | Demos | although one can static link and offer object files |
16:45:53 | skrylar | SDL moved off of LGPL lately |
16:46:07 | BitPuffin | no |
16:46:15 | BitPuffin | fuck both GPL and LGPL and everything of the like |
16:46:34 | BitPuffin | but yeah licensing under that is definitely preferred |
16:46:40 | BitPuffin | over regular pure bs GPL |
16:46:49 | BitPuffin | skrylar: wasn't that a long long time ago? :P |
16:46:58 | skrylar | i 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:10 | skrylar | BitPuffin: i donno, it looks like nimrod is using bindings for 1.2 |
16:47:53 | skrylar | all though with big libs like OGRE I don't really *want* to fiddle with them |
16:49:07 | skrylar | I 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:17 | Varriount | ^ |
16:49:39 | Varriount | skrylar: Don't forget the restrictive mindset that the Java world is stuck in |
16:49:54 | Demos | I agree, although there do exist good c++ template libraries (Eigen!) |
16:49:59 | BitPuffin | :P |
16:50:15 | skrylar | Demos: C++'s native architecture makes *any* template library bad |
16:50:30 | Demos | there 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:49 | skrylar | Now 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:11 | skrylar | C++'s grammar is horrendous to begin with, let alone megabytes of data to run through it |
16:51:26 | Demos | skrylar: 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:28 | EXetoC | Compiling C++ code on my 1x2GHz CPU was too damn slow |
16:51:37 | * | XAMPP quit (Ping timeout: 260 seconds) |
16:51:42 | skrylar | Demos: import is symbolic |
16:51:44 | Demos | but yeah, having every single header bring in /all/ of boost sucks |
16:52:09 | skrylar | IIRC nimrod supports symbolic modules, which means they get compiled once and not again unless you touch it |
16:52:26 | Demos | skrylar: right, I think I misspoke. |
16:52:39 | skrylar | its okay :) |
16:52:50 | Demos | nimrod has modules, that is the important part |
16:53:02 | Demos | the whole way #include is transitive is imo a bigger problem than compile times |
16:53:04 | skrylar | I 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:19 | Demos | what in nimrod? |
16:53:23 | skrylar | yeah |
16:53:53 | Demos | yeah 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:00 | Varriount | skrylar: Are you using SDL or Cairo? |
16:54:26 | skrylar | Demos: you only need forward decls for recursive definitions |
16:54:57 | skrylar | Demos: 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:20 | skrylar | Varriount: neither, ncurses at the moment |
16:55:37 | skrylar | Varriount: 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:42 | Varriount | A console GUI? |
16:55:57 | skrylar | yes, but the design is the same otherwise |
16:55:58 | Demos | skrylar: but don't you need forward decls for recursive definitions in c++ as well? |
16:56:21 | skrylar | Demos: no, a C++ class can call its own methods without them IIRC |
16:57:49 | skrylar | Varriount: 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:19 | skrylar | but 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:04 | skrylar | Vim has a CLI and GUI version so maybe its not a bad idea to have both for an app :) |
17:00:32 | BitPuffin | yeah I was actually thinking about that earlier |
17:00:52 | BitPuffin | maybe 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:18 | Demos | frankly I think it does not matter that much. If you need to skim it than point docgen at it |
17:01:20 | EXetoC | I use the terminal version only for the shell features |
17:01:24 | BitPuffin | as a guy who prefers to just open a source file to loook what is available I like it |
17:01:32 | Demos | but yeah |
17:01:47 | BitPuffin | Demos: yeah I know but I don't wanna have to leave by text editor and open like firefox to view it :P |
17:01:56 | Demos | the argument that headers are somehow good because they seperate interface and implementation is not a very stong argument |
17:02:36 | BitPuffin | It is a fair point I think |
17:02:44 | BitPuffin | but headers have really bad consequences |
17:02:59 | EXetoC | I hate repeating myself in that way |
17:03:05 | BitPuffin | I wouldn't actually mind it if nimrod had headers, just as long as import would work the same way |
17:03:09 | BitPuffin | EXetoC: yaeh I guess |
17:05:18 | Demos | well 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:59 | EXetoC | that could be automated of course |
17:06:08 | BitPuffin | D has the .di modules iirc |
17:06:22 | BitPuffin | yeah automatic generation would be sweet |
17:07:30 | * | DAddYE joined #nimrod |
17:10:19 | dom96 | hello people |
17:10:35 | dom96 | welcome skrylar! |
17:11:45 | BitPuffin | oi dom96 |
17:12:01 | dom96 | Demos: Have you tried using the {.noSideEffects.} pragma on wrapped C functions? |
17:12:04 | * | DAddYE quit (Ping timeout: 265 seconds) |
17:12:15 | dom96 | BitPuffin: oiiii |
17:13:19 | dom96 | hrm, the jester example doesn't compiler. |
17:13:23 | dom96 | *compile |
17:13:26 | dom96 | How did this happen!? |
17:13:32 | EXetoC | dom96: how's the current socket interface? for a game for example. |
17:13:45 | dom96 | EXetoC: How is it for a game? |
17:13:48 | dom96 | EXetoC: Good? |
17:14:03 | Demos | dom96: I think I did |
17:14:06 | EXetoC | I 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:21 | Demos | dom96: do you mean on the declerations in math.nim or on the calls? |
17:14:25 | EXetoC | dom96: just so you know what the use case is |
17:14:28 | dom96 | Demos: Declarations. |
17:14:39 | dom96 | EXetoC: It should be good for everything. |
17:14:39 | Demos | yeha i tried that last night |
17:14:48 | EXetoC | dom96: the one we have now? ok |
17:15:07 | dom96 | EXetoC: Sure. But the new one will replace it. |
17:15:19 | dom96 | May not bother with a deprecation path. |
17:18:48 | * | DAddYE quit (Ping timeout: 265 seconds) |
17:19:50 | dom96 | Araq: Looks like you broke my dear jester. |
17:24:39 | * | aftersha_ quit (Quit: Computer has gone to sleep.) |
17:24:40 | skrylar | dom96: helloes |
17:25:05 | skrylar | EXetoC: you could always wrap enet :) |
17:25:42 | dom96 | That is in fact already wrapped :P |
17:25:58 | skrylar | well there you go |
17:26:21 | * | skrylar snickers that rust was at 0.9 and TCP/UDP sockets were completely broken >_> |
17:26:30 | Demos | there is also a zmq wrapper, I hear people like zmq |
17:27:04 | skrylar | I'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:44 | dom96 | I'm the same in regards to zmq. Haven't read much about it and currently regard it as an unnecessary dependency. |
17:28:10 | skrylar | yeah.. 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:45 | OrionPK | bleh, why doesnt the dom module have a console/console.log |
17:29:02 | skrylar | like 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:26 | dom96 | skrylar: You should write a blog post titled "Why I left Rust for Nimrod" ;) |
17:29:41 | skrylar | dom96: i had started to write one about tips for using rust |
17:29:45 | skrylar | i think now my tip would just be "don't" |
17:30:17 | skrylar | the memory safety rig is neat until you need to actually do something |
17:30:37 | skrylar | i 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:08 | dom96 | You are literally the first person I came across to say something negative about Rust. |
17:31:19 | skrylar | lol |
17:32:35 | EXetoC | skrylar: was that recently? |
17:32:35 | dom96 | I'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:42 | skrylar | EXetoC: yes |
17:32:47 | Demos | skrylar: I have never used rust but that is the impression I got from reading about the type system |
17:33:00 | skrylar | well the borrowing mechanics are really neat |
17:33:22 | skrylar | it 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:29 | Demos | I /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:51 | Varriount | dom96: Did you push your iocp stuff yet? |
17:33:55 | dom96 | Varriount: yeah |
17:33:58 | Varriount | :D |
17:34:05 | * | XAMPP quit (Ping timeout: 260 seconds) |
17:34:07 | skrylar | the derpiness comes in that they removed the GC heap, which means you can't really do the dynamic dispatch stuff |
17:34:12 | dom96 | Varriount: It's in devel actually. Because Araq accidentally merged it in there ... |
17:34:18 | EXetoC | skrylar: 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:23 | dom96 | But I am still working on the newasync branch. |
17:34:25 | Varriount | dom96: Why wouldn't it be in devel? |
17:34:31 | skrylar | EXetoC: well they won't rewrite anything :| |
17:34:39 | dom96 | Varriount: Because it's not ready. |
17:34:59 | skrylar | EXetoC: 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:46 | dom96 | Nimrod really shines when it comes to macros. |
17:36:01 | Demos | dom96: well once you get passed the rather terse error messages and bugs |
17:36:03 | skrylar | their compiler runs in passes, which means errors come in all jigsaw puzzled; fix all the errors? get new errors |
17:36:35 | dom96 | skrylar: Oh yeah. Speaking of Maybe: all you need is a pattern matching macro and you're set I think. |
17:36:42 | skrylar | oh yeah, the 45 minute bootstrap is because they forked LLVM |
17:37:14 | skrylar | lisp macros + pascal types <3 |
17:37:18 | EXetoC | dom96: what part of it? |
17:37:34 | skrylar | dom96: i do wish that nimrod wouldn't monomize generics for distinct pointers |
17:37:35 | dom96 | EXetoC: Linux support |
17:38:10 | skrylar | maybe 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:17 | dom96 | Demos: True... but the macros are still IMO pretty sexy. |
17:38:51 | dom96 | skrylar: No idea what "monomize generics" means heh |
17:39:05 | EXetoC | dom96: the pattern matching. the problem I had was the verbosity involved when constructing Nothing |
17:39:19 | Varriount | "ref object of PObject" - What is that, a ref of a ref of an object? |
17:39:38 | dom96 | Varriount: No. A ref object inheriting from a 'ref TObject' |
17:39:48 | dom96 | Varriount: It's not a double ref. |
17:40:13 | skrylar | dom96: say you have an object with a single T field, now say you use that object three times with different pointer types. |
17:40:17 | Demos | I 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:37 | skrylar | dom96: 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:09 | skrylar | e.g. it doesn't know that it can share the generic because they are all void* types |
17:41:50 | dom96 | skrylar: oh, well i'm sure that can be fixed? |
17:42:03 | skrylar | probably; i wouldn't know how |
17:42:17 | skrylar | I know Ada does some things so that generics don't bloat up the code base very much |
17:42:32 | dom96 | Wouldn't the C compiler take care of the bloat in this case though? |
17:43:05 | skrylar | I don't know if GCC or LLVM will de-dup everything |
17:43:08 | Varriount | skrylar: Generics are hard. |
17:43:24 | skrylar | supposedly 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:25 | dom96 | EXetoC: What verbosity is that? The need to instantiate the generic? |
17:45:43 | EXetoC | dom96: yes |
17:45:56 | dom96 | EXetoC: Yeah, that's a bit of a PITA |
17:47:40 | Demos | hm conversions from (int, int) to (float, float) are invalid even with a cast, how annoying |
17:47:58 | Demos | not a cast[]() style cast ofc |
17:48:42 | dom96 | I must admit, int/float types in Nimrod are a tad annoying. |
17:50:19 | Demos | yeah, all those implicit conversions in C are annoying but not having them makes you realize why they are there |
17:51:21 | EXetoC | dom96: that has more to do with tuples |
17:51:33 | * | radsoc quit (Ping timeout: 272 seconds) |
17:51:50 | Demos | EXetoC: yeah, this is true |
17:55:03 | * | DAddYE joined #nimrod |
17:55:11 | EXetoC | I don't know if it should be implicit for anything other than ranges |
17:56:53 | Demos | yeah, 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:05 | EXetoC | sure. in many cases it is |
18:01:16 | * | Demos quit (Ping timeout: 252 seconds) |
18:06:55 | * | brson joined #nimrod |
18:17:24 | BitPuffin | you know what, I'm gonna work a bit on my multiplayer thing |
18:18:20 | OrionPK | what network lib are u using |
18:19:09 | BitPuffin | right now just internal nimrod shits |
18:23:33 | skrylar | blegh. multiplayer code. |
18:23:47 | skrylar | scenegraph sync hell |
18:26:48 | BitPuffin | :P |
18:26:58 | BitPuffin | it's a bit more difficult than that |
18:27:25 | BitPuffin | at least for this project |
18:35:01 | reactormonk | skrylar, o/ |
18:35:12 | reactormonk | How do I get map(x.inputs, proc(i: TItem): TTypeID = i.typeID).toSet.incl(y.output.typeID) running? |
18:35:36 | reactormonk | (TSet[TItem], proc (TItem): TTypeID) |
18:35:41 | reactormonk | aka mapping over a set |
18:36:52 | Araq | OrionPK: I can't reproduce your leak |
18:37:05 | Araq | it stays below 300K forever |
18:37:11 | OrionPK | look at task manager or the console? |
18:37:14 | OrionPK | looking* |
18:37:23 | Araq | console |
18:37:28 | OrionPK | look at task manager |
18:37:36 | Araq | humm |
18:37:39 | EXetoC | reactormonk: where does it fail? does incl work like that when it takes a var as the first arg? |
18:38:27 | Araq | OrionPK: that means nimrod's reporting is wrong? |
18:39:20 | OrionPK | araq maybe.. or it's leaking memory outside of nimrod's GC? |
18:40:36 | reactormonk | EXetoC, it's the map itself. |
18:40:43 | reactormonk | just defined it in sets |
18:41:10 | Araq | OrionPK: ok, will look at it later |
18:41:48 | * | aftersha_ joined #nimrod |
18:42:57 | Araq | skrylar: 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:37 | EXetoC | reactormonk: you haven't gotten it to work? have you looked at system.map? |
18:44:31 | filwit | Araq: what symbol in vm did you want me to document? |
18:44:41 | Araq | lol |
18:45:05 | Araq | make a top level comment how it works |
18:45:30 | filwit | yeah a doc comment, got it |
18:45:37 | filwit | but what part? |
18:45:59 | Araq | the calling convention |
18:46:11 | Araq | the registers |
18:46:25 | filwit | okay, so just everything i've been going over for awhile |
18:46:38 | filwit | okay |
18:46:46 | filwit | ^doubt okay |
18:46:49 | filwit | double* |
18:46:50 | Araq | the bizzare invaraints wrt PNode |
18:46:54 | NimBot | Araq/Nimrod devel ba8e74d Simon Hafner [+1 ±1 -0]: added `map` to sets |
18:46:54 | NimBot | Araq/Nimrod devel 59dd15c Simon Hafner [+1 ±0 -0]: added tests for set |
18:47:15 | reactormonk | Araq, request to rename set to bitset |
18:47:56 | Araq | reactormonk: why no make a map for everything that has items? |
18:48:53 | reactormonk | Araq, because initSet |
18:49:09 | reactormonk | Araq, I need items() and the constructor. |
18:49:30 | Araq | oh so your map returns a set, i see |
18:49:35 | reactormonk | yup. |
18:49:41 | * | BitPuffin quit (Ping timeout: 260 seconds) |
18:49:46 | Araq | very well then |
18:49:54 | reactormonk | That's why I pressed for a null-element by type. |
18:50:11 | filwit | rename: set=>bitset, seq=>list, list=>chain :P |
18:50:29 | filwit | (just kidding, though they are my favorite names) |
18:50:36 | reactormonk | filwit, ;-) |
18:51:00 | reactormonk | Araq, issue for mapping type => proc that generates a nulle-element of that type |
18:51:15 | reactormonk | ? |
18:51:22 | Araq | no |
18:51:44 | Araq | fix some bug instead |
18:51:51 | Araq | there are over 230 issues |
18:52:10 | reactormonk | that's a feature request. 1minute of work. |
18:52:31 | filwit | those are bugs caused by you though Araq (since you wrote the compiler). It's only fare you have to fix them all. |
18:52:43 | filwit | makes perfect sense |
18:53:14 | * | Varriount slaps filwit around a bit with a average-sized meteor. |
18:53:29 | Araq | reactormonk: nope |
18:53:31 | Araq | wrong |
18:53:52 | reactormonk | Araq, go on... |
18:53:54 | Araq | I recently realized it's not enough to write the code and test it |
18:54:04 | Araq | you have to maintain it ... |
18:54:05 | reactormonk | you also have to fix it? |
18:54:43 | reactormonk | Araq, do you give someone, say dom96, the authority to act on behalf of the nimrod project for GSoC? |
18:55:19 | Varriount | Can dom96 even do that? Don't you have to be 18 or older, or something? |
18:55:27 | Araq | hey |
18:55:34 | Varriount | Hi |
18:55:38 | Araq | dom96 is not *that* young |
18:56:32 | Araq | filwit: actually most bugs are zahary's :P |
18:56:33 | dom96 | But I am but a toddler. |
18:56:59 | reactormonk | Araq, 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:21 | reactormonk | well, the generics in the first part would need to be different from the second part |
18:57:30 | OrionPK | dom96 how many years have you been programming? |
18:57:40 | * | dom96 counts |
18:57:54 | reactormonk | I think I'm at 6 |
18:57:57 | dom96 | ~6 ish |
18:58:04 | OrionPK | how old are you again? 19? |
18:58:07 | dom96 | 18 |
18:58:14 | reactormonk | not too shabby |
18:58:16 | OrionPK | since you were 12? |
18:58:19 | dom96 | yeah |
18:58:25 | OrionPK | I was doing HTML when I was 12 or 13 iirc |
18:58:32 | reactormonk | I have written my first code at 12, but that was VB ^^ |
18:58:32 | dom96 | Give or take 1 or two years |
18:58:36 | OrionPK | but no actual programming until I was maybe 16 or 17 |
18:58:44 | reactormonk | ^ same |
18:58:55 | dom96 | Yeah, I was doing VB.NET back then |
18:59:03 | reactormonk | dom96, well, do you want to do the GSoC? |
18:59:12 | OrionPK | I did some VBA when I was 15 or something |
18:59:19 | * | DAddYE quit () |
18:59:33 | dom96 | reactormonk: I don't think a single person can do it. |
18:59:52 | reactormonk | dom96, I'm pretty sure as well. Are you in for kicking other people to do it? |
19:00:02 | dom96 | Ahh... VB.NET. Those were the days. |
19:00:26 | reactormonk | dom96, if you wanna have the American speech - it's gonna look good on your resume |
19:00:30 | OrionPK | .NET wasnt around, unfortunately |
19:00:38 | dom96 | reactormonk: 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:02 | reactormonk | dom96, I'm sure there's a mentor channel somewhere where you can get help for that |
19:01:03 | dom96 | reactormonk: hrm, that's true. |
19:01:21 | dom96 | reactormonk: Do you want to work on Nimrod over the summer? |
19:01:27 | filwit | beyond my initial programming in BASIC (on an hand-me-down Apple IIc), I learned programming from writing Macromedia Director Lingo scripts |
19:01:30 | reactormonk | dom96, nope, need to finish my masters |
19:01:43 | Varriount | I do! I want to work on nimrod over the summer! |
19:01:50 | filwit | i looked up Director, apparently it's still alive and making Shockwave games today.. |
19:02:00 | dom96 | Varriount: Loving the excitement! |
19:02:11 | * | DAddYE joined #nimrod |
19:02:43 | dom96 | hrm, actually. I started with C not VB.NET hah |
19:02:54 | reactormonk | Araq, do you approve of dom96, so he can go ahead if he decides to? |
19:02:55 | filwit | so basically, soon we loose dom96 to college life? |
19:03:02 | dom96 | Was disappointed I could only create console apps though. |
19:03:02 | Varriount | I started with Python :3 |
19:03:09 | filwit | :| |
19:03:39 | dom96 | (The book I got only gave examples of how to print things in a console. I wanted GUI apps!) |
19:04:16 | dom96 | filwit: I'll be working on Nimrod while at lectures, so you won't lose me :P |
19:04:24 | Varriount | ^ Like me |
19:04:37 | NimBot | Araq/Nimrod devel e534ad4 Simon Hafner [+0 ±2 -0]: fixed a bug in `map` for sets |
19:04:47 | dom96 | I'm really worried I will be extremely bored in the first year. |
19:05:35 | Araq | reactormonk: you know... having me review your code has its advantages |
19:05:39 | dom96 | If 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:48 | Araq | reactormonk: yes I approve dom96 for everything |
19:06:04 | dom96 | :) |
19:06:05 | reactormonk | Araq, yup. But it also costs you time. PRs it is? |
19:06:24 | reactormonk | your choice. |
19:07:11 | Araq | PRs please |
19:07:34 | Araq | we have quality issues and dom96 said it's because I do too few code reviews |
19:07:34 | reactormonk | kk |
19:07:49 | Varriount | dom96: Did I tell you why I think stdout and stderr are getting mixed up? |
19:07:56 | Varriount | In osproc.nim |
19:07:59 | dom96 | Varriount: nope. Do tell. |
19:07:59 | reactormonk | dom96, so go ahead with GSoC |
19:08:14 | dom96 | reactormonk: How about you help me register? |
19:08:24 | reactormonk | dom96, sure |
19:08:38 | dom96 | Right, let me finish watching the walking dead first. |
19:08:45 | reactormonk | http://www.google-melange.com/gsoc/homepage/google/gsoc2014 |
19:08:51 | Varriount | dom96: In short, what I believe is happening is that multiple writes are happening at once, getting the output stream mixed up |
19:09:00 | reactormonk | dom96, I'll have to do some homework in about 1h though |
19:09:05 | EXetoC | Araq: what are the endian conversions in oids for? |
19:09:06 | reactormonk | and from what I see, it's gonna take a while |
19:09:13 | Varriount | The equivalent of two programs trying to write to the same file at the same time. |
19:09:53 | Araq | EXetoC: it's always big endian or something. fyi I ported this from the C client library |
19:10:04 | Araq | it's not like I came up with this myself |
19:10:28 | EXetoC | odd, but ok got it |
19:11:18 | reactormonk | Araq, any plans to harden repr against nil? |
19:11:45 | dom96 | reactormonk: 10 mins left |
19:12:06 | dom96 | Varriount: Interesting, any ideas how to fix it? |
19:12:07 | reactormonk | dom96, kk |
19:12:28 | Araq | bah, not 'repr' again |
19:12:39 | Araq | I wonder why it's so loved |
19:12:51 | Araq | it's hack and doesn't work that well |
19:12:52 | filwit | what's the alternative to repr? |
19:12:59 | Varriount | dom96: I'll have to look at the windows internals of osproc.nim |
19:14:42 | dom96 | Araq: because it's useful for debugging. |
19:15:07 | dom96 | people don't want to write a function which goes through each field manually and echos it |
19:15:44 | reactormonk | Araq, I'd love to deprecate repr in favour of a $ that works on everything |
19:16:38 | Araq | reactormonk: $ for everything is not good |
19:16:54 | reactormonk | Araq, so repr for everything then. |
19:17:17 | Araq | meh fine, so make it work with 'nil' |
19:17:35 | Araq | it works with nil afaict |
19:17:50 | Araq | but I never use repr so I might be wrong |
19:18:12 | reactormonk | I get a few nil access errors with repr |
19:18:14 | * | zahary joined #nimrod |
19:20:22 | Araq | hi zahary |
19:21:33 | * | Mat3 joined #nimrod |
19:21:39 | Mat3 | hi all |
19:23:39 | Araq | hi Mat3 |
19:23:40 | zahary | hi |
19:23:58 | Araq | zahary: I changed how typedesc works in the compiler but now stuff broke ... |
19:24:25 | dom96 | ooh, House of Cards Against Humanity |
19:24:29 | * | Mordecai joined #nimrod |
19:24:50 | zahary | what did you change? |
19:25:17 | Mat3 | hi Araq |
19:25:30 | Mat3 | and zahary |
19:27:00 | reactormonk | http://pastebin.com/2XkfVm5m |
19:27:18 | Araq | typedesc[T] stays as it is, typedesc becomes internally tyTypeDesc[tyNone] |
19:27:19 | reactormonk | http://pastebin.com/2XkfVm5m |
19:27:21 | reactormonk | oops |
19:27:38 | Araq | so that skipTypes doesn't crash when you skip tyTypedesc |
19:27:52 | Mat3 | exist there a time-frame for stable Nimrod versions ? |
19:28:04 | Araq | but I'm puzzled by the logic in sigmatch.nim wrt tyTypeDesc |
19:28:10 | Araq | Mat3: december 2014 |
19:28:32 | zahary | tyTypeDesc[tyNone] would be void in the current design |
19:28:35 | dom96 | reactormonk: ok, time to do this. |
19:28:45 | zahary | still different than just typedesc |
19:28:58 | Araq | zahary: I don't think so |
19:29:09 | Araq | tyEmpty is void, tyNone is ... none |
19:29:17 | zahary | ah, you could be right |
19:30:28 | reactormonk | dom96, just found a bug in sqlite fastrows I believe |
19:30:30 | zahary | so, what's puzzling in sigmatch? |
19:30:31 | reactormonk | but go for it |
19:30:57 | Varriount | dom96: Preliminary research on stdout and stderr pipes suggest that the problem *might* be due to buffering |
19:31:34 | reactormonk | dom96, http://www.google-melange.com/gsoc/homepage/google/gsoc2014 |
19:31:40 | dom96 | "Mentor Summit at Google: Representatives from each successfully participating organization are invited to Google to greet, collaborate and code" |
19:31:41 | dom96 | 0_o |
19:31:58 | dom96 | So if my application is successful I will get to visit Google? |
19:32:10 | reactormonk | dom96, looks like it |
19:32:18 | dom96 | hrm, why not. |
19:32:43 | zahary | dom96: have you read what does it take to become a mentoring organisation? |
19:32:52 | reactormonk | dom96, I suppose name is just nimrod |
19:33:03 | reactormonk | any official nimrod logo? |
19:33:14 | Varriount | reactormonk: The crown |
19:33:25 | reactormonk | dom96, ^ |
19:33:33 | Varriount | The unofficial logo is a honey badger |
19:33:51 | dom96 | zahary: I'm reading the FAQ now. |
19:33:58 | dom96 | reactormonk: Let me read the FAQ first. |
19:34:07 | reactormonk | dom96, go fir it |
19:34:18 | dom96 | zahary: Would you have time to mentor? |
19:34:23 | * | xtagon joined #nimrod |
19:34:27 | Varriount | Hi xtagon |
19:34:36 | xtagon | Hey Varriount |
19:34:46 | reactormonk | o/ xtagon |
19:34:58 | xtagon | What's new? |
19:35:08 | * | Mat3 is now known as Mat3-work |
19:35:30 | dom96 | This looks pretty in-depth: http://en.flossmanuals.net/GSoCMentoring/what-is-gsoc/ |
19:38:18 | zahary | dom96: I might be surprised by how much time is needed, but I could certainly try (mentoring) |
19:39:12 | dom96 | zahary: According to the FAQ "Five hours per student per week is a reasonable estimate." |
19:39:16 | dom96 | http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#howmuch |
19:39:41 | zahary | that sounds quite reasonable |
19:40:14 | dom96 | But make sure to keep yourself free because if you start disappearing students may get really discouraged. |
19:40:57 | dom96 | Araq: You might as well be a mentor too. |
19:41:21 | zahary | I'm rarely without access to email, live chat as IRC is another story |
19:41:49 | dom96 | zahary: I see. Can I have your email? |
19:42:23 | dom96 | I think as long as you have some sort of way to communicate with the student it will be fine. |
19:42:29 | Varriount | dom96: Is there any reliable way to test osproc getting stdout and stderr mixed up? |
19:43:43 | zahary | I have one of yours (morfeusz), so I'll send you a ping |
19:43:54 | dom96 | zahary: ok. Thanks. |
19:44:08 | dom96 | Varriount: hrm, not sure. |
19:44:28 | dom96 | Varriount: Perhaps create some app which writes to the stdout and stderr |
19:44:37 | xtagon | Nimrod is going to participate in GSoC? :D |
19:44:44 | reactormonk | http://dpaste.com/1602184/ <- that's the data structure that kicks repr |
19:44:47 | dom96 | xtagon: Maybe, interested? |
19:45:08 | reactormonk | Varriount, 2> /dev/null to test for stdout |
19:45:22 | Varriount | Windows, remember? |
19:45:32 | xtagon | dom96, I'm not enrolled in an academic institution right now |
19:46:02 | dom96 | xtagon: ahh, I wish I could participate as a student but I have the same problem heh. |
19:46:33 | reactormonk | Varriount, oh sap |
19:46:45 | Varriount | Hrm. http://stackoverflow.com/questions/1545619/can-i-capture-stdout-stderr-separately-and-maintain-original-order |
19:46:49 | * | Mordecai quit (Quit: bbiab) |
19:47:31 | dom96 | Varriount: Perhaps there is a different way to merge the two streams. |
19:49:54 | * | radsoc joined #nimrod |
19:50:32 | xtagon | No, you NEVER cross the streams! |
19:50:52 | xtagon | http://www.youtube.com/watch?v=jyaLZHiJJnE |
19:52:36 | * | carum joined #nimrod |
19:57:41 | dom96 | Araq: What do we actually want students to be working on? |
19:57:44 | Araq | zahary: sigmatch line 884 following |
19:59:09 | Araq | you check the bindings before even checking whether it's typedesc or typeDesc[T] |
19:59:31 | Araq | which means (a, b: typedesc) only matches (int, int) but not (int, float) |
20:01:26 | zahary | that was true at some point, then we decided that typedesc is not bindOnce |
20:01:44 | zahary | this 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:05 | zahary | (a, b: typedesc) will be translated to (a: typedesc1, b: typedesc2) |
20:02:15 | * | JStoker joined #nimrod |
20:02:28 | zahary | now, I'm not sure if the code in sigmatch still needs to have its current structure |
20:02:48 | Araq | also this part |
20:02:50 | Araq | internalAssert prev.sonsLen == 1 |
20:02:52 | Araq | let toMatch = if tfUnresolved in f.flags: a |
20:02:53 | Araq | else: a.sons[0] |
20:02:55 | Araq | result = typeRel(c, prev.sons[0], toMatch) |
20:02:57 | * | tdc joined #nimrod |
20:03:34 | Araq | you 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:46 | zahary | this is prev; it can't be something different than a typedesc |
20:05:01 | zahary | ah, nevermind |
20:05:37 | tdc | What is the Nimrod way to split a module into several files? |
20:06:13 | Araq | tdc: either use different modules with symbol "forwarding" via 'export' or use simply use 'include' instead of 'import' |
20:07:37 | tdc | excellent! with include the doc parsing doesn't work - right? So maybe "forwarding" is cleanest? |
20:07:46 | * | vbtt joined #nimrod |
20:07:59 | Araq | tdc: doc2 can see through "include" |
20:08:19 | tdc | ok. Thanks! |
20:09:47 | dom96 | It seems we need two org admins anyway. |
20:11:52 | dom96 | Araq: If we do this I am going to need some feedback here. |
20:12:05 | Araq | dom96: ok, I'm number two |
20:12:15 | Araq | there are lots of things one could do |
20:12:34 | dom96 | Araq: Firstly, we need concrete ideas. Because we need to submit a link to the ideas list in the proposal. |
20:12:48 | dom96 | Araq: Secondly, how many students do we want to take? |
20:12:59 | reactormonk | dom96, one or two. |
20:13:01 | Araq | implement true coroutines that can capture the full stack |
20:13:14 | dom96 | reactormonk: Yeah, definitely not more than 2. |
20:13:21 | vbtt | +1 to the coroutines idea! |
20:13:22 | dom96 | Varriount already wants to do it so that's 1. |
20:13:57 | zahary | I 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:08 | dom96 | Araq: Create a gist with ideas. |
20:14:45 | Varriount | dom96: Hm? |
20:14:58 | dom96 | Varriount: You want to participate in GSoC |
20:15:05 | Araq | also we can have go-like light-weight concurrency with excellent C interop with some new technique that I invented |
20:15:23 | Varriount | dom96: Yes... |
20:15:25 | Araq | well likely re-invented :P |
20:15:50 | dom96 | Araq: All that sounds very difficult :P |
20:15:51 | Varriount | dom96: There is likely no sure way to untangle stdout and stderr |
20:16:00 | vbtt | Araq:don't true coroutines give us light-weight concurrency already? |
20:16:01 | Varriount | Not even the command prompt can do it. |
20:16:16 | reactormonk | Varriount, muh. |
20:16:24 | Araq | vbtt: sure but without multi-core support |
20:16:47 | * | aftersha_ quit (Quit: Computer has gone to sleep.) |
20:16:59 | zahary | so Araq, you are right, I managed to crash it with some carefully crafted code |
20:17:01 | dom96 | Varriount: What would you like to do? |
20:17:09 | vbtt | Araq: as i see - you want to multiplex coroutines on multiple system threads. |
20:17:13 | dom96 | (For GSoC) |
20:17:16 | Varriount | dom96: For what? GSoC, or osproc.nim? |
20:17:21 | dom96 | ^ |
20:17:32 | Varriount | Anything that you think I can handle, that is needed. |
20:17:39 | Araq | vbtt: no *I* don't want that at all |
20:17:56 | Varriount | If you think that coroutines are possible for someone of my skill set, I will try my best. |
20:18:07 | Araq | so 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:00 | Araq | dom96: 64 new record? |
20:19:00 | dom96 | Araq: How are you planning on mentoring people about implementing coroutines? |
20:19:01 | vbtt | Araq: fwiw, i think true coroutines, single threaded are good enough. |
20:19:06 | dom96 | Araq: no |
20:19:22 | Varriount|Mobile | Meep |
20:19:46 | vbtt | Araq:also just coroutines may be the right sized project complexity-wise. |
20:19:46 | Araq | dom96: 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:01 | dom96 | Araq: ok, anything you can think of that I could mentor? |
20:22:04 | Varriount|Mobile | asyncio development |
20:22:53 | dom96 | That will be done by the time summer arrives :P |
20:23:00 | vbtt | actually 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:10 | Araq | vbtt: exactly |
20:24:24 | vbtt | and the programmer can manually spin up multiple threads if they desire. |
20:25:46 | vbtt | ok. 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:01 | vbtt | (basically i want a gevent like system in nimrod) |
20:26:39 | Araq | vbtt: dom96 has a working prototype of asyncio with nimrod's "yield" |
20:27:47 | Araq | zahary: please have a look at why tests/macros/tmacrogenerics fails |
20:28:01 | Araq | I changed its supposed output, but it fails again |
20:28:19 | Araq | and I'm not sure I should have changed the supposed output |
20:28:45 | zahary | have you tried to fix the handling in typedesc values in the new VM? |
20:28:58 | vbtt | Araq:ok. dom96: is your stuff checked in? |
20:29:16 | dom96 | vbtt: newasync branch |
20:29:22 | dom96 | vbtt: It's not finished yet |
20:29:33 | dom96 | vbtt: 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:44 | Araq | zahary: yes the codegen of the vm is aware of tyTypeDesc. But it still gets it wrong |
20:30:49 | vbtt | dom96:thanks. do you have examples i can look at? or docs? |
20:31:05 | dom96 | vbtt: Not just yet. |
20:31:12 | * | [1]Endy joined #nimrod |
20:31:47 | Varriount|Mobile | Araq: If you ever get the urge to work on iterator and generic bugs, I have an entire file full of them |
20:32:05 | dom96 | Araq: Here is KDE's idea list: http://community.kde.org/GSoC/2011/Ideas |
20:32:19 | dom96 | The idea list is the most important in the application. |
20:33:20 | EXetoC | should categories.nim be extended to include "tests/stdlib" when specifying the stdlib category? |
20:34:05 | EXetoC | rather than just lib/pure/*.nim and the highlite module |
20:34:20 | vbtt | Varriount:are you familiar with how coroutines are used? |
20:34:52 | demizer | Hello, everyone. Is there a way to read the html documentation for the master branch? |
20:35:22 | Varriount|Mobile | vbtt: Vaguely |
20:35:35 | * | Mat3-work is now known as Mat3 |
20:36:15 | Varriount|Mobile | demizer: Run the documentation generator on a clone of the master branch |
20:36:16 | EXetoC | demizer: build.nimrod-lang.org. a hyperlink to build.nimrod-lang.org/docs/manual.html is missing |
20:36:23 | vbtt | Varriount:you could start by looking at Python greenlets, gevent(which uses greenlets) and lua coroutines. |
20:36:28 | demizer | sweet thank you |
20:36:31 | EXetoC | or that |
20:36:34 | vbtt | Varriount:are you familiar with python generators? |
20:36:49 | Varriount|Mobile | vbtt: Quite familiar with those |
20:37:17 | dom96 | Araq: Is `is` in a `when` broken? |
20:38:26 | EXetoC | not for me |
20:38:47 | EXetoC | are the operands types? |
20:38:49 | * | micklat joined #nimrod |
20:38:57 | * | [1]Endy quit (Read error: No route to host) |
20:39:18 | Varriount|Mobile | vbtt: But iirc, Python generators are not coroutines |
20:39:34 | * | [1]Endy joined #nimrod |
20:39:37 | dom96 | hrm, I think I see the issue. |
20:39:50 | vbtt | Varriount: simplifying here but goroutines are the next level of generators. |
20:40:17 | Varriount|Mobile | "Next level" in what way? |
20:40:19 | dom96 | What's the behaviour of 'is' when comparing a variable to a type? |
20:40:34 | EXetoC | can individual output tests be executed? |
20:40:34 | vbtt | Varriount: generators can have one suspended function. coroutines are a stack of suspended function calls. |
20:40:51 | vbtt | Varriount:sorry meant coroutines (not goroutines) |
20:43:02 | NimBot | dom96/jester master 1527e0d Dominik Picheta [+0 ±1 -0]: Fixes #12 |
20:43:34 | vbtt | Varriount: so a function f() calls start_coroutine g(). then g() calls h(). so the stack looks like this: f() -> [ g() -> h() ] |
20:43:58 | vbtt | the square brackets represent the coroutine |
20:44:18 | vbtt | now h() could 'suspend' and control returns to f(). |
20:44:42 | Varriount|Mobile | So, like Python's 'yield from'? |
20:44:45 | vbtt | now f() calls f2() and the stack looks like this. f() -> f2() |
20:45:23 | vbtt | however the coroutine [g() -> h()] is still around in a suspended state and can be 'resumed'. |
20:45:49 | vbtt | Varriount: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:24 | vbtt | you just write normal code and any function can call 'suspend()' which suspends the current coroutine. |
20:46:56 | Araq | dom96: I wouldn't say "broken" but maybe the new vm still gets it wrong occasionally |
20:47:05 | dom96 | Araq: nah, it's fine. |
20:47:07 | vbtt | (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:20 | dom96 | Araq: Add ideas here please: https://github.com/Araq/Nimrod/wiki/GSoC-2014-Ideas |
20:48:51 | vbtt | Varriount: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:14 | vbtt | Varriount:i.e. the semantics are more like threads. |
20:49:15 | Varriount|Mobile | The 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:58 | vbtt | Varriount: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:28 | Varriount|Mobile | vbtt: Again, I have some knowledge. Bits and pieces that I've picked up from reading |
20:53:29 | Varriount|Mobile | Things like, different kinds of function calls modify certain registers to reflect return addresses and values and arguments |
20:53:39 | Mat3 | Varriount|Mobile: You will need some knowledge of how to avoid call-frames (or better about misusing them for coroutine sheduling) |
20:53:40 | dom96 | Is there much information about how coroutines are implemented out on the internet? |
20:53:40 | vbtt | Varriount: 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:50 | vbtt | dom96: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:12 | Varriount|Mobile | vbtt: Good thing I like reading |
20:56:00 | Varriount|Mobile | I've been reading a boom on the internals of Windows NT to get to bed |
20:56:09 | Varriount|Mobile | *book |
20:57:54 | vbtt | Varriount: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:40 | vbtt | anyway, g2g. bbl |
21:00:30 | dom96 | wow, my cahbot still compiles. |
21:00:53 | * | [1]Endy quit (Ping timeout: 248 seconds) |
21:01:45 | dom96 | bbl |
21:05:52 | vbtt | Varriount:feel free to ping me on irc with questions if i'm around. |
21:06:53 | Mat3 | coroutines: http://home.hccnet.nl/a.w.m.van.der.horst/forthlecture6.html |
21:08:35 | * | carum joined #nimrod |
21:10:47 | vbtt | Mat3:wikipedia is probably a better introduction :) |
21:13:53 | Mat3 | well, this coroutine implementation is only one single definition (CO) which should be easily understandable in my opinion |
21:16:44 | vbtt | perhaps, but only to those comfortable with forth. |
21:20:24 | * | Varriount|Mobile quit (Quit: AndroIRC - Android IRC Client ( http://www.androirc.com )) |
21:23:27 | OrionPK | in a for x in.. how come the `x` variable is `res` and not `x` in endb |
21:23:41 | OrionPK | (when i look at locals) |
21:27:05 | Araq | OrionPK: inlining of iterators is to blame, I guess |
21:28:11 | * | micklat quit (Remote host closed the connection) |
21:28:12 | OrionPK | :\ |
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:46 | Varriount | Araq: Any plans on passing closure iterators with arbitrary parameters as arguments to another iterator? |
21:53:35 | Araq | no sure what you mean |
21:54:02 | Araq | closure iterators got more stable recently and can capture from an outer proc |
21:54:13 | vbtt | nice ^ |
21:54:35 | Varriount | Araq: Yes.. but that only works if the iterators are expressly designed that way. |
21:55:30 | vbtt | btw, 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:09 | vbtt | it is less common to pass parameters into the iterator with each step. however the syntax makes defining those easy. |
21:56:48 | Varriount | vbtt: I'm thinking about iterator chains, like map(filter(...), ...) |
21:58:56 | Varriount | vbtt, Araq: See https://gist.github.com/Varriount/8925071 |
21:58:58 | zahary | we have talked about this - I'd like to see it with inline iterators actually (closure iterators are slow) |
21:59:50 | Varriount | zahary: nd what was the outcome of the talk? |
21:59:56 | Varriount | *And |
22:00:28 | dom96 | back |
22:00:50 | dom96 | Ideas guys, ideas: https://github.com/Araq/Nimrod/wiki/GSoC-2014-Ideas |
22:01:49 | zahary | well, they are not trivial to implement, but the outcome of such discussions is very easily influenced by working code :) |
22:02:08 | vbtt | Varriount: cant you chain iterators already? by wrapping it in iter() or something? |
22:03:44 | vbtt | I mean - something like map() should accept an iterable, right? |
22:04:58 | * | Demos joined #nimrod |
22:05:39 | Varriount | vbtt: There is not iter() procedure or iterator, as far as I'm aware. |
22:06:20 | Varriount | vbtt: Yes, but the iterator map() accepts has a known number and types of arguments |
22:06:56 | Varriount | One argument, that accepts item in a sequence given to map() |
22:07:37 | Varriount | In order to chain iterators, you would have to go through each one-by-one, accumulating the result of each and passing sequences. |
22:08:35 | Araq | Varriount: oh that's what you mean |
22:09:51 | Demos | can 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:13 | dom96 | OT: Anyone here watch House of Cards? |
22:10:42 | zahary | ideally expressions such as map(foo, …).filter(…).group_by(…) should be lazy and shouldn't produce any allocations |
22:11:03 | dom96 | Varriount: Thanks for the edits :) |
22:11:06 | EXetoC | enter type class interfaces? |
22:11:22 | Varriount | dom96: Feel free to strike down any that are two ambiguous |
22:11:34 | dom96 | We will need to make those ideas more in-depth though |
22:11:46 | dom96 | or else we risk getting rejected as an org |
22:12:59 | Varriount | How in-depth? |
22:13:14 | dom96 | http://community.kde.org/GSoC/2011/Ideas |
22:13:59 | Varriount | dom96: You want the ideas formatted like that? |
22:15:09 | dom96 | Perhaps not exactly like that, but a explanation of the project or idea would be nice. |
22:15:23 | dom96 | "Fix bugs with iterators/generics" is a bit vague. |
22:15:41 | dom96 | It needs to be concrete, something we can measure. |
22:16:06 | vbtt | "fix bugs" is not going to attract many takers. |
22:16:18 | dom96 | indeed. |
22:16:45 | vbtt | new, cool sounding features will. |
22:16:47 | Demos | well you can word it differently, it /is/ the most pressing issue |
22:18:02 | dom96 | hrm, 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:51 | Mat3 | ciao |
22:20:55 | * | radsoc quit (Ping timeout: 260 seconds) |
22:21:06 | BitPuffin | zahary: are you fixing generics? |
22:22:04 | Demos | well 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:05 | Varriount | Demos: CryptGenRandom ftw |
22:26:21 | Varriount | dom96: Updated again, what do you think? |
22:26:38 | Demos | Varriount, is that a thing? |
22:27:04 | Varriount | Demos: There's a easily-wrapped random number generator in the windows api |
22:27:24 | Varriount | Or rather, crytographic random data generator |
22:27:54 | Demos | right, the nimrod API needs to be good. Also we want more than a crypto secure generator. |
22:28:20 | Demos | having access to a good PRNG is no good if everyone is running it once and modding the output |
22:29:18 | Araq | Demos: what do you mean "improve c2nim"? it's perfect. you might however simply wrap and use clang's parser instead |
22:29:42 | BitPuffin | "it's perfect" - biggest lie 2014 |
22:30:03 | Araq | this is the much better solution when you try to translate stdio.h |
22:30:21 | Demos | yeah that was what I was thinking keep c2nim as a lightweight converter and have like clang2nim |
22:30:35 | Demos | anyway my point was that nimrod has no shortage of projects to get done |
22:31:11 | Araq | dom96: can you mentor a parser generator? |
22:31:23 | Araq | in fact, I want re2c for nim |
22:32:16 | reactormonk | Araq, re is what? |
22:33:40 | Araq | and a nim backend for Ragel |
22:33:49 | Araq | reactormonk: "regular expression" |
22:34:07 | reactormonk | Araq, ah, a code generator for regexp |
22:37:47 | Varriount | Demos: How does the page look now? |
22:38:52 | Demos | standard library is OK |
22:39:32 | Demos | what about making the docgen use huristics and comments to group "methods" together? |
22:39:42 | dom96 | Araq: I think so |
22:39:53 | Demos | by huristics I mean "is the first param named self or this" |
22:40:03 | filwit | well, huh.. Godot engine looks pretty cool. Even the scripting is python-like. |
22:40:10 | dom96 | Varriount: Get rid of those bullet points in front of headers. |
22:40:14 | dom96 | *headings |
22:40:41 | EXetoC | Demos: that's so verbose. how about just 'o' :-) |
22:41:39 | Demos | EXetoC, well false positives. The idea would be to have some kind of annotation in the doc comments |
22:42:38 | EXetoC | I think just a list of all variations would be fine, but maybe I'm too optimistic |
22:42:45 | dom96 | Varriount: That's better |
22:43:16 | EXetoC | and a slightly more flexible output |
22:43:28 | shodan45 | filwit: 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:02 | reactormonk | Demos, I'd prefer an index that gives you every proc that takes a type |
22:44:14 | Varriount | Will no-one else add ideas? |
22:44:26 | reactormonk | Varriount, documentation improvements all over. |
22:44:36 | reactormonk | or adapting yard or something similar |
22:44:38 | Araq | Varriount: I missed something here |
22:44:38 | Demos | right, but there is the issue of procs where the first param is in no way special |
22:44:44 | Demos | like pow(x,y) or whatever |
22:44:59 | Araq | what is the site you're all looking at? |
22:45:05 | filwit | Godot is like exactly what I'm writing for Nimord, even the scripts look familiar to my goals. |
22:45:07 | filwit | I can build games on Linux and publish to Windows, Mac, Android, etc.. that's cool |
22:45:16 | BitPuffin | what's the way to deal with parameters sent to a program |
22:45:19 | Varriount | Araq: Github |
22:45:20 | BitPuffin | like ./mysoftware bla |
22:45:20 | dom96 | Araq: https://github.com/Araq/Nimrod/wiki/GSoC-2014-Ideas ? |
22:45:23 | BitPuffin | how do I get the bla part |
22:45:27 | filwit | shadon45: the examples are in the main git |
22:45:39 | filwit | shodan45* ^ |
22:46:13 | Varriount | dom96: I can't fill out the "implement coroutines" idea, since I have no idea how to go about implementing it. :/ |
22:46:16 | filwit | called 'demos', then the scripts are .gd |
22:46:56 | shodan45 | filwit: I'll look again... I swear some of them only had images + an xml file |
22:47:15 | filwit | shodan45: https://github.com/okamstudio/godot/blob/master/demos/3d/platformer/enemy.gd |
22:50:02 | BitPuffin | .gd? |
22:50:12 | filwit | Godot engine |
22:50:16 | filwit | makes sense |
22:50:19 | BitPuffin | oh |
22:50:21 | BitPuffin | yeah |
22:50:23 | BitPuffin | I saw that |
22:51:32 | BitPuffin | is it getOpt? |
22:52:36 | Varriount | Ooh, 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:52 | Demos | Oh, fixing the way module loading works would be good as well |
22:55:34 | BitPuffin | WHAT |
22:55:36 | BitPuffin | parseopt |
22:55:38 | BitPuffin | is deprecated |
22:55:44 | dom96 | parseopt2 |
22:55:57 | dom96 | also |
22:56:10 | dom96 | There is a nice library for this stuff in babel |
22:56:24 | BitPuffin | parseopt2 lol |
22:56:28 | BitPuffin | dom96: what's the name |
22:56:35 | dom96 | github.com/fenekku/commandeer |
22:57:17 | BitPuffin | dom96: I think babel should do a nimrod doc automatically or something |
22:57:19 | BitPuffin | would be sweet |
22:58:21 | dom96 | perhaps |
23:00:53 | BitPuffin | dom96: then you could just create a symlink to the docs directory and it would get updated as pkgs were added :D |
23:01:27 | Araq | "Implement support for the JavaScript backend in the tester" wtf? |
23:01:38 | Araq | the tester supports that already |
23:01:52 | EXetoC | that was easy |
23:01:54 | EXetoC | next |
23:02:08 | dom96 | Araq: It does? |
23:02:18 | Araq | yes |
23:02:27 | dom96 | Are there any tests for the JS backend? |
23:02:40 | Araq | there is even support to run the *same* test for multiple targets |
23:02:50 | Araq | including the JS target |
23:02:50 | EXetoC | oh yeah |
23:03:09 | Araq | dom96: yes there are |
23:03:15 | dom96 | hrm, ok. |
23:04:14 | dom96 | Araq: I don't think you should be writing how these things should be done. |
23:04:22 | dom96 | Araq: You should be writing what the end result should be. |
23:04:39 | Araq | nah, poor students will get it all wrong |
23:04:59 | dom96 | That's why you mentor them... |
23:05:35 | dom96 | You know, students pick where they go. |
23:05:48 | Araq | well I'll keep these notes for myself then, fine |
23:06:00 | dom96 | Step-by-step instructions will probably discourage them |
23:06:21 | Varriount | Or make them underestimate the challenge of the task |
23:07:04 | Araq | hey, it's simple :P |
23:07:09 | Araq | hardly a challenge |
23:07:19 | EXetoC | 1. add features 2. fix bugs 3. release 1.0 |
23:08:16 | dom96 | oh well, just dump your ideas in there for now. |
23:08:32 | dom96 | We can refine things later. |
23:08:37 | dom96 | And i'm too tired to do it now. |
23:08:52 | Varriount | dom96: What about the rest of the application? Do you need help with it? |
23:09:04 | * | Varriount *really* wants this to happen |
23:09:36 | dom96 | I'm worried about the W8-BEN IRS form I will have to fill out. |
23:09:43 | dom96 | I think that's after we get accepted though. |
23:11:27 | Varriount | If 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:08 | dom96 | Yeah, 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:25 | dom96 | Perhaps we should just request 1. |
23:12:32 | dom96 | But then that feels a bit... unfair. lol |
23:12:32 | Varriount | I can help teach them |
23:12:45 | Araq | pfff nimrod is dead simple to learn |
23:12:47 | Varriount | Nimrod is not that hard to learn. |
23:13:11 | Varriount | No harder than Java is, and much less likely to alter your brain |
23:13:38 | dom96 | I 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:06 | Varriount | It seems to me that using Java tends to alter (and restrict) the mind of a programmer when programming, which is a shame. |
23:15:11 | Varriount | I imagine that to a hard-core java user, nimrod is quite scary - no classes, seperation of 'methods' and objects, etc. |
23:15:16 | NimBot | Araq/Nimrod devel a600ce5 Zahary Karadjov [+1 ±4 -0]: fixes #797; generic procs can be used in places expecting matching concrete proc types |
23:17:07 | EXetoC | my mind does indeed seem very unaltered atm |
23:17:19 | Demos | I am also a student. Although I have far less experience in nimrod than Varriount |
23:17:45 | Varriount | Demos: Not that much less experience. |
23:18:09 | Demos | you came from python right? |
23:18:13 | Varriount | Yeah. |
23:19:16 | Araq | zahary: var prc = if arg.kind in nkLambdaKinds: arg[0].sym else: arg.sym |
23:19:46 | Araq | is slightly wrong as nkIteratorDef can be used anonymously |
23:20:25 | dom96 | Demos: You're welcome to participate too if you'd like. |
23:20:29 | Araq | in fact, I want to get rid of nkLambda, nkProcDef suffices, if n[namePos] is empty, it's anonymous |
23:21:12 | Demos | well apperently students apply next month. But yeah GSoC sounds great |
23:21:20 | Araq | which at that point shouldn't be the case anymore |
23:21:58 | * | shodan45 quit (Quit: Konversation terminated!) |
23:21:58 | dom96 | If we get accepted it'll be fun :) |
23:24:02 | Araq | good night |
23:29:53 | BitPuffin | uh |
23:29:55 | BitPuffin | what the fuck |
23:30:04 | BitPuffin | how do I make an optional argument with commandeer |
23:30:12 | Varriount | commandeer? |
23:30:15 | dom96 | aww yeah. Finished Physics homework in 5 mins. |
23:30:16 | BitPuffin | like I can run the command like "bla" or "bla server" |
23:30:20 | BitPuffin | dom96: noob |
23:30:34 | dom96 | BitPuffin: u wut m8 |
23:31:45 | * | xenagi joined #nimrod |
23:34:43 | dom96 | Reddit always makes AMAs funny. Gotta love the Bill Gates AMA. |
23:35:43 | xenagi | why is that one funny? |
23:36:40 | BitPuffin | fucking commandeer |
23:36:45 | dom96 | People make lots of funny jokes. |
23:36:46 | BitPuffin | let me make an optional argument |
23:39:17 | dom96 | This is pure gold: http://www.reddit.com/r/IAmA/comments/1xj56q/hello_reddit_im_bill_gates_cochair_of_the_bill/cfbsntu |
23:40:23 | BitPuffin | /Users/isak/src/nim/combat-cravings/src/combat |
23:40:24 | BitPuffin | Not enough command-line arguments |
23:40:26 | BitPuffin | Error: execution of an external program failed |
23:40:28 | BitPuffin | ._. |
23:40:47 | dom96 | BitPuffin: Fork that shit. |
23:40:56 | BitPuffin | dom96: fuck that shit |
23:43:01 | dom96 | BitPuffin: noob |
23:45:35 | EXetoC | parseopt/parseopt2? just migrate later |
23:46:16 | BitPuffin | dom96: no u |
23:47:14 | BitPuffin | https://gist.github.com/BitPuffin/888fe85faab4438925b6 |
23:47:21 | BitPuffin | get a read from nil ._. |
23:48:26 | BitPuffin | wait now it works |
23:58:55 | * | darkf joined #nimrod |
23:59:19 | EXetoC | just use discard, but nil works for now |