00:00:07 | flaviu | Also, can we ban trailing whitespace in the source tree? |
00:22:46 | * | superfunc_ joined #nimrod |
00:34:29 | * | darkf_ joined #nimrod |
00:38:07 | * | darkf quit (Ping timeout: 272 seconds) |
00:38:57 | * | darkf_ is now known as darkf |
00:49:28 | Varriount | Aww... is the party over? |
00:49:53 | flaviu | Varriount: And I wasn't invited? :/ |
00:50:33 | Varriount | flaviu: You are right that uint32's would be more appropriate for unicode. |
00:52:23 | flaviu | I'm concerned that it may be totally broken on arch's that have 16 bit words |
00:52:37 | * | superfunc quit (Quit: Connection closed for inactivity) |
00:52:42 | * | Joe_knock left #nimrod ("Leaving") |
00:53:07 | * | mko quit (Quit: Bye.) |
00:54:53 | Varriount | flaviu: Someone needs to get skryler's unicode stuff into the stdlib |
00:59:43 | BitPuffin | yeah |
00:59:45 | BitPuffin | Skryler |
00:59:48 | BitPuffin | remember that guy |
01:00:12 | BitPuffin | :D |
01:01:40 | flaviu | Anyone remember his Github name? |
01:05:11 | Varriount | flaviu: Same as his irc name |
01:05:13 | Varriount | https://github.com/Skrylar/Skylight |
01:06:01 | flaviu | Oops, I misspelled it. Ok. |
01:09:44 | flaviu | Varriount: It's incomplete |
01:10:11 | flaviu | I think just going over the current version adding a bunch of tests and cleaning up is sufficient. |
01:11:43 | * | superfunc_ quit (Ping timeout: 246 seconds) |
01:13:19 | * | Jehan_ quit (Quit: Leaving) |
01:21:04 | * | rpag quit (Ping timeout: 245 seconds) |
01:25:56 | * | Hakaslak quit (Quit: TODO: Generate 'Computer Sleep Quit Message') |
01:49:52 | * | fowlmouth joined #nimrod |
01:50:53 | * | fowl quit (Ping timeout: 255 seconds) |
01:57:22 | * | q66[lap]_ quit (Changing host) |
01:57:23 | * | q66[lap]_ joined #nimrod |
02:13:17 | * | saml_ joined #nimrod |
02:16:57 | * | brson quit (Quit: leaving) |
02:17:23 | * | brson joined #nimrod |
02:21:29 | * | wan quit (Ping timeout: 255 seconds) |
02:22:27 | * | wan joined #nimrod |
02:42:07 | * | Trustable quit (Quit: Leaving) |
02:48:28 | * | Boscop joined #nimrod |
02:48:28 | * | Boscop quit (Changing host) |
02:48:28 | * | Boscop joined #nimrod |
02:50:39 | * | brson quit (Quit: leaving) |
02:50:53 | * | brson joined #nimrod |
02:51:23 | * | flaviu quit (Ping timeout: 240 seconds) |
03:19:23 | * | AFKMorpork is now known as AMorpork |
03:21:11 | * | bjz quit (Ping timeout: 265 seconds) |
03:29:53 | * | rpag joined #nimrod |
03:44:31 | * | ARCADIVS joined #nimrod |
03:52:35 | * | vendethiel- joined #nimrod |
03:53:59 | * | vendethiel quit (Ping timeout: 245 seconds) |
04:03:09 | * | vendethiel- quit (Ping timeout: 245 seconds) |
04:19:59 | * | kemet joined #nimrod |
04:22:28 | * | saml_ quit (Quit: Leaving) |
04:49:57 | * | xenagi quit (Read error: Connection reset by peer) |
04:59:25 | * | Hakaslak joined #nimrod |
05:01:34 | * | Hakaslak quit (Max SendQ exceeded) |
05:02:13 | * | Hakaslak joined #nimrod |
05:12:38 | * | kemet quit (Remote host closed the connection) |
05:18:36 | * | Demos_ quit (Read error: Connection reset by peer) |
05:24:45 | * | Hakaslak quit (Quit: TODO: Generate 'Computer Sleep Quit Message') |
05:37:26 | * | AMorpork quit (Quit: to actually disconnect) |
05:37:44 | * | AMorpork joined #nimrod |
05:38:52 | * | edayo joined #nimrod |
05:49:50 | * | khmm joined #nimrod |
05:53:29 | * | BitPuffin quit (Ping timeout: 258 seconds) |
06:52:53 | * | johnsoft quit (Ping timeout: 265 seconds) |
06:53:43 | * | johnsoft joined #nimrod |
06:54:19 | * | Hakaslak joined #nimrod |
06:54:35 | * | gokr_ joined #nimrod |
06:56:29 | * | gokr quit (Ping timeout: 245 seconds) |
06:56:32 | * | Hakaslak quit (Max SendQ exceeded) |
06:57:12 | * | Hakaslak joined #nimrod |
06:57:31 | * | vendethiel joined #nimrod |
07:00:19 | * | vendethiel quit (Client Quit) |
07:09:25 | * | Hakaslak quit (Quit: TODO: Generate 'Computer Sleep Quit Message') |
07:10:27 | * | Hakaslak joined #nimrod |
07:13:35 | * | johnsoft quit (Ping timeout: 244 seconds) |
07:15:33 | * | johnsoft joined #nimrod |
07:20:17 | * | brson quit (Quit: leaving) |
07:20:36 | * | johnsoft quit (Ping timeout: 244 seconds) |
07:30:35 | * | edayo_ joined #nimrod |
07:33:21 | * | gokr joined #nimrod |
07:33:29 | * | edayo quit (Ping timeout: 265 seconds) |
07:34:10 | * | edayo joined #nimrod |
07:35:04 | * | edayo_ quit (Ping timeout: 244 seconds) |
07:36:29 | * | gokr_ quit (Ping timeout: 245 seconds) |
07:49:01 | * | Matthias247 joined #nimrod |
07:58:08 | * | khmm quit (Ping timeout: 265 seconds) |
08:03:38 | * | khmm joined #nimrod |
08:04:56 | * | f0wl joined #nimrod |
08:07:34 | * | Hakaslak quit (Quit: TODO: Generate 'Computer Sleep Quit Message') |
08:16:28 | * | Matthias247 quit (Quit: Matthias247) |
08:21:20 | * | f0wl quit (Ping timeout: 265 seconds) |
08:22:15 | * | johnsoft joined #nimrod |
08:22:25 | * | gokr_ joined #nimrod |
08:25:11 | * | gokr quit (Ping timeout: 244 seconds) |
08:36:29 | * | Francisco quit (Ping timeout: 264 seconds) |
08:37:28 | Araq | flaviu: trailing whitespace is irrelevant for any tool not written by a Neanderthal. If git doesn't like it, add some option to ignore it. |
08:38:49 | * | Francisco joined #nimrod |
08:42:22 | Araq | oh wait, this option seems to be missing. so let's instead be religious about it: http://codeimpossible.com/2012/04/02/Trailing-whitespace-is-evil-Don-t-commit-evil-into-your-repo-/ |
08:42:59 | * | gokr joined #nimrod |
08:43:07 | Araq | typical unix mentality. don't fix broken tools. blame somebody else instead. |
08:43:13 | * | MyMind quit (Read error: Connection reset by peer) |
08:43:55 | * | Pisuke joined #nimrod |
08:46:04 | * | gokr_ quit (Ping timeout: 245 seconds) |
08:49:41 | * | khmm quit (Ping timeout: 244 seconds) |
08:52:49 | * | khmm joined #nimrod |
08:57:19 | gokr1 | Araq: I guess this solution is the "reasonable way" in Nim for the super call problem using procs? http://goran.krampe.se/2014/10/31/nim-and-oo-part-ii/ |
08:58:03 | gokr1 | I also think that was the proposed solution mentioned in the forum somewhere when this was brought up. |
08:59:22 | Araq | no. generics are not necessary |
08:59:26 | Araq | in this case |
08:59:48 | Araq | you can simply use a non-generic helper proc that uses the base type in its signature |
09:00:38 | Araq | one macro based solution is to transform 'method m' to 'proc mBase' and 'method m' that calls mBase |
09:00:54 | Araq | and then you can transform 'super m' to 'mBase' |
09:04:49 | Araq | gotta go, see you later |
09:07:40 | * | irrequietus joined #nimrod |
09:08:17 | * | wan quit (Ping timeout: 264 seconds) |
09:08:41 | * | wan joined #nimrod |
09:11:02 | * | Jesin quit (Read error: Connection reset by peer) |
09:17:49 | gokr1 | Hmmm, ok! |
09:18:28 | gokr1 | Btw, this is a fairly interesting little dialog with Alan Kay on OO: http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_en |
09:20:36 | gokr1 | Araq: Aren't you missing the fact (that I write fairly detailed about) that the "helper proc" then wrongly will resolve self calls to Fruit and not Banana? |
09:25:17 | gokr1 | As soon as you call a proc with an explicit base type - then any subsequent "self calls" from that proc will resolve to Fruit only and "miss" overrides. |
09:26:40 | * | bjz joined #nimrod |
09:49:55 | * | johnsoft quit (Ping timeout: 244 seconds) |
09:50:46 | * | BlaXpirit joined #nimrod |
09:50:54 | * | johnsoft joined #nimrod |
09:53:00 | * | BlaXpirit quit (Client Quit) |
09:55:30 | dom96 | Not even a thank you for fixing nimbuild? :( |
09:59:04 | * | Araq0 joined #nimrod |
10:00:53 | Araq0 | dom96_: thank you |
10:01:13 | Araq0 | gokr: why would the proc only call procs and not other methods? |
10:01:26 | Araq0 | I don't see the problem, it "just works" |
10:01:53 | dom96_ | Araq0: No problem |
10:02:38 | Araq0 | gokr: btw please don't use proc p(a, b, c) (without explicit types) |
10:03:12 | Araq0 | I'll ban all these experimental features for 1.0 under a switch --experimental or something |
10:04:07 | Araq0 | bbl |
10:04:10 | * | Araq0 quit (Quit: Page closed) |
10:14:52 | * | vezzy joined #nimrod |
10:15:21 | * | quasinoxen quit (Ping timeout: 260 seconds) |
10:40:28 | gokr1 | Isn't "proc p(a)" equivalent to "proc p[T](a: T)"? |
10:42:09 | gokr1 | "why would the proc only call procs and not other methods?" - not sure I follow, did I say something along those lines? |
10:58:45 | * | johnsoft quit (Ping timeout: 260 seconds) |
10:59:00 | * | johnsoft joined #nimrod |
10:59:44 | * | edayo_ joined #nimrod |
11:02:35 | * | edayo quit (Ping timeout: 255 seconds) |
11:21:55 | * | BlaXpirit joined #nimrod |
11:25:28 | * | Araq0 joined #nimrod |
11:25:32 | * | untitaker_ quit (Ping timeout: 256 seconds) |
11:26:36 | Araq0 | gokr: "Aren't you missing the fact (that I write fairly detailed about) that the "helper proc" then wrongly will resolve self calls to Fruit and not Banana?" if the helper proc calls a method on Fruit, it will be resolved to Banana if that's what the fruit is |
11:27:23 | Araq0 | it's quite like private vs public calls in Java. private methods are bound statically, but can invoke public methods which are bound dynamically |
11:30:40 | gokr1 | Yes, a method will work. But not procs. |
11:31:01 | gokr1 | Wait... |
11:32:41 | * | untitaker joined #nimrod |
11:32:59 | gokr1 | So I have one fruit.nim using only procs and generics. If I change the type of that base proc to "Fruit" then it will of course fail when I do "self.reduction()" because self is then a Fruit and it will call the Fruit reduction always. |
11:33:10 | gokr1 | Now, again - this is trying to use procs only. |
11:33:28 | gokr1 | But... the second sentence above you wrote - not sure what that means. |
11:40:52 | gokr1 | Hmmm, I am benching both the "methods only" fruits - and the "procs and generics only fruits". With a heterogenous seq - 30 million fruits - for the procs only fruits I need to cast before calling calcPrice - but... the funny thing is that both variants run just as fast. |
11:41:52 | gokr1 | So... while I am perhaps doing something wrong - it seems method lookup is... very fast. No obvious need to bother here at least. |
11:45:49 | * | bjz quit (Ping timeout: 264 seconds) |
11:49:37 | gokr1 | Araq0: But yes, good point there - for private methods (non *) we can relatively easy move to procs/generics since we control all calls to them. I just did a mixed variant of my method based fruit.nim - and... it works, as long as I don't have public methods in Fruit (with self: Fruit) because again, then it fails. |
11:49:44 | * | bjz joined #nimrod |
11:49:48 | gokr1 | Too bad I can't see any speed improvement though :) |
12:03:45 | * | hg joined #nimrod |
12:03:48 | Araq0 | well method dispatching has been optimized and can be faster than how c++ does it |
12:10:01 | * | edayo joined #nimrod |
12:12:29 | * | edayo_ quit (Ping timeout: 264 seconds) |
12:12:44 | * | hg quit (Quit: Page closed) |
12:17:44 | * | Trustable joined #nimrod |
12:22:56 | * | edayo_ joined #nimrod |
12:23:04 | * | edayo quit (Ping timeout: 244 seconds) |
12:27:07 | * | irrequietus quit (Ping timeout: 255 seconds) |
12:36:03 | * | quasinoxen joined #nimrod |
12:36:29 | * | vezzy quit (Ping timeout: 245 seconds) |
12:39:46 | Araq0 | gokr1: the major reason why we don't use methods in the stdlib is that they don't play well with the effect system and our dead code elimination optimization |
12:40:27 | Araq0 | and these are inherent problems with dynamic binding |
12:42:08 | gokr1 | Got it |
12:42:36 | gokr1 | But I was amazed that I couldn't see any difference in speed - so methods must be... very optimized. Of course, I don't have many kinds of Fruit :) |
12:43:38 | gokr1 | So I guess I will write a part III too - to sum up the findings. I can add these facts there. |
12:43:59 | Araq0 | beware micro benchmarks. they are often completely misleading |
12:44:06 | * | dom96_ quit (Ping timeout: 256 seconds) |
12:44:09 | gokr1 | Btw... if I do "type(x)" I get a typedesc - right? But I can't do like "type(x) == Banana", right? |
12:44:11 | gokr1 | Yeah, I know. |
12:44:59 | Araq0 | you can compute 12 square roots in the time a cache miss takes. or something like that. |
12:45:32 | Araq0 | right, there is no == for typedescs, but you can use 'is' |
12:45:43 | gokr1 | But is ... is compile time, right? |
12:45:57 | Araq0 | 'is' is compile-time, 'of' is run-time |
12:46:08 | gokr1 | So I can't do "type(x) is Banana", right? |
12:46:24 | Araq0 | you can do "x of Banana" |
12:46:35 | gokr1 | And "of" is like #isKindOf: in Smalltalk, it will be true for all subtypes too. |
12:46:49 | Araq0 | yes |
12:46:57 | gokr1 | I made a silly if/elif/elif using of - but ... had to make sure to test leafs first :) |
12:47:49 | gokr1 | You wrote don't leave out types - but... isn't "fn(self)" equal to "fn[T](self:T)"? |
12:48:00 | gokr1 | Or some subtle difference? Or just clarity you mean? |
12:48:08 | Araq0 | it is, but I consider it sloppy |
12:48:16 | * | edayo joined #nimrod |
12:48:41 | gokr1 | Well... perhaps. It does make less "line noise" though for my eyes. |
12:49:07 | gokr1 | Oh well, so far so good :) |
12:49:29 | gokr1 | It seems to me that... OO is very doable, unless I missed something. |
12:50:03 | Araq0 | it is. except for the 'super' feature. but that's like 5 lines of code to add to the compiler ;-) |
12:50:16 | Araq0 | will do it for the next version |
12:50:22 | gokr1 | Right! Did you decide to do a "next best call" like the others? |
12:50:35 | gokr1 | (others being Dylan, CLOS etc) |
12:50:43 | Araq0 | I think 'static_call' is less confusing |
12:50:44 | gokr1 | I am not sure if there is another technique to consider. |
12:50:58 | Araq0 | what does "next best call" mean, anyway? |
12:51:19 | Araq0 | 'static_call' fits the language |
12:51:29 | * | edayo_ quit (Ping timeout: 264 seconds) |
12:51:32 | gokr1 | AFAICT from reading up on Julia etc - you simply call the next method that matches. |
12:51:57 | gokr1 | And "best" using some precedence rule of course. |
12:52:01 | Araq0 | yes, but it's not obvious what "next method" means |
12:52:27 | Araq0 | is there some chain of methods? and if so, how does it look like? |
12:52:37 | gokr1 | I think most seem to go left to right on args etc. |
12:52:41 | gokr1 | I haven |
12:52:46 | gokr1 | 't used any of those langs though. |
12:53:13 | Araq0 | well I have some trust in my design capabilities. so it's static_call. ;-) |
12:53:29 | gokr1 | And... sorry - but what did it do now again? :) |
12:54:06 | gokr1 | (and I do agree that the "next method" feels ... slightly gotcha-prone) |
12:54:17 | Araq0 | it uses the method that overloading resolution determines to use |
12:54:36 | Araq0 | static_call m(Banana(b), Fly(x)) |
12:55:07 | gokr1 | Ah, so you use type conversions but to call methods instead of procs? |
12:55:35 | Araq0 | yes |
12:55:36 | gokr1 | So "static_call" in contrast to "dynamic call" that methods normally would use. |
12:55:42 | Araq0 | exactly |
12:55:42 | * | darkf quit (Quit: Leaving) |
12:55:43 | gokr1 | Ah, right. Yeah, cleaner. |
12:55:58 | gokr1 | And it fits what you would do with procs. |
12:56:25 | gokr1 | super duper then :) |
12:57:11 | gokr1 | Btw... I am also trying to... learn how to use Twitter. The hash tag is #nimlang - and there is also an account @nimrodlang |
12:57:34 | Araq0 | the nice thing with Nim's syntax is that it allows static_call m(a,b) without making static_call a keyword |
12:57:56 | Araq0 | it's just yet another builtin |
12:58:01 | gokr1 | Oh, so static_call would be a macro? |
12:58:13 | gokr1 | Or a magic proc. |
12:58:28 | Araq0 | there is no difference really in this case |
12:58:41 | * | flyx joined #nimrod |
12:58:42 | Araq0 | but likely a magic proc |
12:59:07 | gokr1 | I do agree that not requiring () opens up more extendability. |
12:59:23 | gokr1 | I presume you agree with ... Steele on growing a language? :) |
12:59:31 | Araq0 | yup |
12:59:49 | * | AMorpork is now known as AFKMorpork |
13:00:20 | gokr1 | Ok... think I need to bang my head against Urho a bit. |
13:00:54 | gokr1 | Thanks for all answers btw. |
13:01:07 | Araq0 | you're welcome |
13:01:38 | gokr1 | I know n00bs can be ... annoying sometimes, but I do try to read in the manuals etc first :) |
13:03:14 | Araq0 | nah n00bs are fine, but you're not a n00b anyway |
13:04:47 | gokr1 | But I really appreciate the friendly atmosphere here. Much like in Smalltalk. :) And many newbie questions turn into very interesting discussions. |
13:05:04 | gokr1 | Ok, gotta go pick up a car. Later. |
13:06:36 | * | ARCADIVS quit (Quit: ARCADIVS) |
13:11:19 | * | gokr_ joined #nimrod |
13:13:22 | * | AFKMorpork is now known as AMorpork |
13:14:31 | * | gokr quit (Ping timeout: 244 seconds) |
13:14:49 | * | Araq0 quit (Quit: Page closed) |
13:19:26 | * | khmm quit (Ping timeout: 256 seconds) |
13:40:12 | * | gokr joined #nimrod |
13:40:23 | * | mbenadda joined #nimrod |
13:43:59 | * | gokr_ quit (Ping timeout: 245 seconds) |
13:47:53 | * | johnsoft quit (Ping timeout: 264 seconds) |
13:48:11 | * | johnsoft joined #nimrod |
13:58:49 | * | irrequietus joined #nimrod |
14:09:16 | * | edayo_ joined #nimrod |
14:11:53 | * | edayo quit (Ping timeout: 264 seconds) |
14:12:18 | * | gokr1 quit (Ping timeout: 265 seconds) |
14:14:43 | * | fowl joined #nimrod |
14:17:53 | * | gokr_ joined #nimrod |
14:19:37 | * | gokr quit (Ping timeout: 244 seconds) |
14:33:03 | * | AMorpork is now known as FrankenMorpork |
14:45:16 | * | BitPuffin joined #nimrod |
14:45:17 | * | gokr joined #nimrod |
15:02:53 | * | johnsoft quit (Ping timeout: 264 seconds) |
15:03:14 | * | johnsoft joined #nimrod |
15:08:58 | * | rpag quit (Remote host closed the connection) |
15:09:38 | * | irrequietus quit () |
15:11:55 | * | rpag joined #nimrod |
15:19:39 | * | Joe_knock joined #nimrod |
15:27:19 | gokr | Silly question, is there a trivial way to run a lambda over a collection and sum up? Like you would do using #inject:into: in Smalltalk. |
15:31:15 | Joe_knock | gokr: Were you the 1 who wrote a blog post "I missed nim" ? |
15:31:22 | gokr | yeah |
15:31:54 | Joe_knock | Your posts were interesting. Running a work-horse laptop too. |
15:33:00 | * | Hakaslak joined #nimrod |
15:35:15 | * | Hakaslak quit (Max SendQ exceeded) |
15:35:55 | * | Hakaslak joined #nimrod |
15:38:08 | * | Hakaslak quit (Max SendQ exceeded) |
15:39:04 | * | Hakaslak joined #nimrod |
15:40:05 | * | Hakaslak quit (Max SendQ exceeded) |
15:40:42 | * | Hakaslak joined #nimrod |
15:45:20 | NimBot | nimrod-code/nimforum new_async b5f6d8f Dominik Picheta [+1 ±3 -0]: Implemented new design for thread view. |
15:47:40 | * | Demos joined #nimrod |
15:49:06 | * | Hakaslak quit (Quit: TODO: Generate 'Computer Sleep Quit Message') |
15:49:18 | Demos | has anyone here watched JOnathan Blow's language design videos? |
15:58:47 | * | Hakaslak joined #nimrod |
16:01:55 | * | FrankenMorpork is now known as AFKMorpork |
16:02:46 | Joe_knock | is async compatible with 0.9.6? |
16:05:33 | * | dom96_ joined #nimrod |
16:06:15 | dom96_ | Joe_knock: Not really. The new stuff I introduced and the many bugs I fixed did not make it into 0.9.6. |
16:06:25 | dom96_ | You're better off using big break at this point anyway though. |
16:06:49 | * | superfunc joined #nimrod |
16:07:14 | * | Hakaslak quit (Ping timeout: 272 seconds) |
16:07:14 | * | gokr_ quit (Read error: Connection reset by peer) |
16:07:23 | * | gokr_ joined #nimrod |
16:07:58 | Joe_knock | dom96_: I know you're busy, but it would be awesome if you could write a to-do like app using the new stuff as a tutorial. |
16:10:10 | dom96_ | You mean like a web app? |
16:11:38 | Joe_knock | a tiny one. Like the to-do apps |
16:12:11 | dom96_ | I can give it a shot. |
16:12:26 | dom96_ | Still working on the new design for the forum though. |
16:15:29 | Joe_knock | I suppose all the "killer" frameworks got a start with those simple tutorials and people just built on top of that. |
16:30:01 | * | Hakaslak joined #nimrod |
16:35:18 | * | rpag quit (Ping timeout: 265 seconds) |
16:42:01 | * | dom96_ quit (Ping timeout: 246 seconds) |
16:47:04 | * | mbenadda quit (Quit: Be back later ...) |
16:49:06 | * | Hakaslak quit (Quit: TODO: Generate 'Computer Sleep Quit Message') |
16:53:41 | * | Hakaslak joined #nimrod |
16:54:46 | * | Hakaslak quit (Max SendQ exceeded) |
16:55:21 | * | Hakaslak joined #nimrod |
16:58:19 | dom96 | Joe_knock: true |
16:58:30 | dom96 | jester does still need some polishing though |
17:02:53 | * | dom96_ joined #nimrod |
17:04:42 | gokr | http://goran.krampe.se/2014/10/31/nim-and-oo-part-iii |
17:07:58 | * | EastByte_ is now known as EastByte____ |
17:12:39 | * | irrequietus joined #nimrod |
17:13:49 | * | superfunc_ joined #nimrod |
17:18:38 | * | AFKMorpork is now known as AMorpork |
17:18:45 | * | AMorpork is now known as FrankenMorpork |
17:31:04 | * | gokr_ quit (Read error: Connection reset by peer) |
17:31:28 | * | gokr_ joined #nimrod |
17:32:44 | * | gokr quit (Ping timeout: 256 seconds) |
17:33:34 | * | Hakaslak quit (Remote host closed the connection) |
17:34:09 | * | Hakaslak joined #nimrod |
17:35:13 | * | superfunc quit (Ping timeout: 246 seconds) |
17:35:14 | * | superfunc_ is now known as superfunc |
17:36:23 | * | Hakaslak quit (Max SendQ exceeded) |
17:37:12 | * | Hakaslak joined #nimrod |
17:39:27 | * | Hakaslak quit (Max SendQ exceeded) |
17:40:24 | * | Hakaslak joined #nimrod |
17:41:35 | * | Hakaslak quit (Max SendQ exceeded) |
17:42:20 | * | Hakaslak joined #nimrod |
17:44:35 | * | Hakaslak quit (Max SendQ exceeded) |
17:45:16 | * | Hakaslak joined #nimrod |
17:46:21 | * | Hakaslak quit (Max SendQ exceeded) |
17:47:04 | * | Hakaslak joined #nimrod |
17:47:52 | * | Jehan_ joined #nimrod |
17:48:13 | * | Hakaslak quit (Max SendQ exceeded) |
17:49:05 | * | Hakaslak joined #nimrod |
17:50:20 | * | Hakaslak quit (Max SendQ exceeded) |
17:51:08 | * | Hakaslak joined #nimrod |
17:53:29 | * | Hakaslak quit (Max SendQ exceeded) |
17:54:21 | * | Hakaslak joined #nimrod |
17:54:24 | * | gokr_ quit (Read error: Connection reset by peer) |
17:55:00 | * | gokr_ joined #nimrod |
17:56:47 | * | Hakaslak quit (Max SendQ exceeded) |
17:57:44 | * | Hakaslak joined #nimrod |
17:59:47 | * | Hakaslak quit (Client Quit) |
18:00:04 | * | edayo joined #nimrod |
18:02:53 | * | edayo_ quit (Ping timeout: 240 seconds) |
18:03:46 | * | Hakaslak joined #nimrod |
18:03:59 | * | irrequietus quit () |
18:04:45 | * | Matthias247 joined #nimrod |
18:05:54 | * | Hakaslak quit (Client Quit) |
18:07:06 | * | Hakaslak joined #nimrod |
18:08:05 | * | Hakaslak quit (Client Quit) |
18:10:00 | * | Hakaslak joined #nimrod |
18:12:45 | * | xenagi joined #nimrod |
18:15:18 | * | Hakaslak quit (Quit: TODO: Generate 'Computer Sleep Quit Message') |
18:22:25 | * | Hakaslak joined #nimrod |
18:23:36 | * | Hakaslak quit (Max SendQ exceeded) |
18:24:15 | * | Hakaslak joined #nimrod |
18:24:45 | * | BlaXpirit quit (Quit: Quit Konversation) |
18:25:28 | * | Hakaslak quit (Max SendQ exceeded) |
18:26:09 | * | Hakaslak joined #nimrod |
18:26:22 | * | BlaXpirit joined #nimrod |
18:30:43 | * | Hakaslak quit (Ping timeout: 255 seconds) |
18:35:50 | wan | Hey dom96, I want to update nim to 0.9.6 for techempower's bench (tfb), is jester fine with it? |
18:36:11 | dom96 | nah, you'll need bigbreak |
18:36:35 | wan | oh, I'll take it to nimbreak then |
18:36:42 | wan | *bigbreak |
18:37:10 | wan | by the way, could you take a look at my pull on nim-zmq when you have the time? |
18:37:45 | wan | I'm finally using babel/nimble for nawak |
18:53:01 | * | Matthias247 quit (Read error: Connection reset by peer) |
19:06:40 | dom96 | sure |
19:08:01 | dom96 | merged |
19:09:59 | * | gokr joined #nimrod |
19:11:37 | * | Jesin joined #nimrod |
19:13:02 | * | irrequietus joined #nimrod |
19:13:46 | * | superfunc_ joined #nimrod |
19:20:26 | wan | thanks! |
19:25:32 | * | brson joined #nimrod |
19:27:56 | Araq | so dom96 ... should we release 0.9.8 that only contains a couple of fixes but includes nimble? |
19:28:13 | Araq | or should we go for 0.10.0 |
19:28:26 | dom96 | the latter |
19:28:44 | Araq | Varriount: ping |
19:29:46 | * | brson quit (Client Quit) |
19:29:55 | * | brson joined #nimrod |
19:36:27 | Joe_knock | is dom96 the co-chair of the Nim foundation? :P |
19:37:53 | Araq | Joe_knock: power comes from contributing |
19:38:38 | Joe_knock | and long-term commitment |
19:39:21 | Araq | write something like Nim's networking layer and I will ask you about your opinion of release schedules too ;-) |
19:41:10 | Joe_knock | Well I can't do the deep tech stuff, but I am going to write the equivalent of numpy for Nim. |
19:41:53 | * | BitPuffin quit (Ping timeout: 264 seconds) |
19:44:21 | Araq | :O |
19:44:39 | * | Joe_knock cracks knuckles and grins evilly |
19:47:02 | Jehan_ | /popcorn |
19:53:25 | * | flaviu joined #nimrod |
19:53:49 | dom96 | Joe_knock: If you do that then I will worship you. |
19:54:40 | Jehan_ | dom96: I think he's not quite serious. :) |
19:54:47 | Joe_knock | dom96: It is something we all can use, instead of python + pypi |
19:55:10 | Jehan_ | Not that I wouldn't love it, but a numpy-equivalent is a truckload of work. |
19:55:28 | Jehan_ | I don't have enough spare cycles lying around to even think about implementing a fraction of it. |
19:55:49 | Araq | first step: revive nimborg and ensure it works with numpy |
19:56:45 | Joe_knock | Jehan_: What about starting with basic statistics toolset? |
19:57:09 | Jehan_ | Joe_knock: The big time eater is all the mathematical algorithms you'll need. |
19:57:27 | * | Araq is sure the 80/20 rule also applies to numpy |
19:57:33 | * | flaviu quit (Read error: No route to host) |
19:57:44 | Jehan_ | Yeah, but even individual algorithms are time eaters. |
19:58:15 | Joe_knock | Do you guys think nim will blow pypi/cython + numpy out of the water? |
19:58:36 | * | flaviu joined #nimrod |
19:58:38 | Jehan_ | I remember that the Sage people asked one of the Magma guys (I think) how he had implemented Quaternion Algebras. |
19:58:55 | Jehan_ | His answer was something along the lines of him having essentially spent a decade working on it. |
19:59:15 | Jehan_ | Joe_knock: Depends on what you're looking at. |
19:59:36 | Jehan_ | I can tell you right now that feature completeness is a LOT more important for a lot of scientists than raw speed. |
19:59:52 | Joe_knock | agreed |
20:00:33 | Jehan_ | A program that runs a couple of hours longer but saves you having to spend a week implementing non-trivial stuff is still better for the average researcher. |
20:00:49 | Araq | speaking of which ... does anybody think the python people will see the light and drop python3 ? |
20:01:12 | Joe_knock | drop it for ...? Araq |
20:01:12 | Jehan_ | I'm seeing it in Computer Algebra, where you either spend a huge amount of money for one of the commercial Ma systems (Magma, Maple, Mathematica) or use an interpreted system (GAP, Singular, Macauley2) etc. |
20:01:17 | Jehan_ | Araq: No. |
20:01:35 | Jehan_ | There's too much time invested in Python3, especially some internal rearchitecting. |
20:01:51 | Jehan_ | I expect that Python 2 and 3 will continue to coexist for quite some time. |
20:01:56 | Araq | Joe_knock: for python 2. |
20:02:07 | Jehan_ | And if they stop supporting Python 2, then Red Hat or other vendors will keep it going. |
20:02:16 | Jehan_ | Too many people depending on Python 2 compatibility. |
20:02:16 | Joe_knock | they're dropping support for 2 next year... |
20:02:18 | Araq | python 2 still has all the modules and frameworks |
20:02:39 | Araq | Joe_knock: nope, it's supported until 2020 afaik |
20:02:44 | Jehan_ | I don't expect a fork, but I expect Python 2 to be maintained indefinitely. |
20:03:13 | Araq | I like python 2 better fwiw |
20:03:39 | Jehan_ | I don't see the benefits of Python 3. |
20:03:53 | Jehan_ | I believe the serious benefits are largely if you're doing Unicode-dependent stuff. |
20:03:55 | Joe_knock | my user group gently nudged us to consider 3. |
20:04:28 | Araq | unicode is a pita with python 3 |
20:04:47 | Jehan_ | Araq: Dunno, it's nothing that affects me. |
20:04:50 | Araq | it enforces "correctness" where no such thing exists really. |
20:05:05 | Araq | unicode is a moving standard and really *complex* |
20:05:14 | Jehan_ | Which is also why, for better or worse, Python 3 doesn't really buy me anything, one way or the other. |
20:05:15 | * | irrequietus quit (Ping timeout: 258 seconds) |
20:05:28 | Jehan_ | Araq: Agreed. One of the things I like about Nim is that strings are encoding-agnostic. |
20:05:50 | * | edayo quit (Quit: WeeChat 1.1-dev) |
20:05:59 | Araq | 'print' as a statement is also nicer for debugging |
20:06:02 | Jehan_ | Which also means that it works for Shift-JIS or EUC-JP or EUC-KR (mostly). |
20:06:28 | Jehan_ | The parentheses don't bother me much, I just think that was an unnecessary incompatibility. |
20:06:40 | Jehan_ | It's not like print as a keyword hurt anyone. |
20:06:45 | Araq | indeed. |
20:07:09 | Jehan_ | That seemed more like a clean-up to meet some theoretical ideal, not a practical need. |
20:07:43 | Araq | well the theoretical ideal IMHO would have been to make () optional for calls, like Nim does it. |
20:07:54 | Araq | but then religion kicks in and says |
20:07:58 | Jehan_ | But the whole Python 2/3 thing has driven me to pretty much use Ruby for my scripting needs. |
20:08:08 | Araq | "no no no, there should be one way to do things" |
20:08:14 | Jehan_ | Araq: Hmm, there are downsides for that, such as parsing ambiguities. |
20:08:39 | Jehan_ | That's not just "one way", but also keeping the implementation simple. |
20:09:05 | Jehan_ | Ruby right now has some serious advantages over Python for me, as far as scripting is concerned. |
20:09:09 | Araq | the implementation is not hard at all. |
20:09:46 | Jehan_ | More concern about compatibility (sometimes incompatibilities are introduced, but usually more gently) and easier interfacing with C. |
20:09:46 | Araq | but then python even has problems with multi-line lambdas ... |
20:10:34 | Araq | Ruby has a 'case' statement. That alone makes it far superior. |
20:10:44 | Jehan_ | In the end, I'm pretty much using Pythin only in two places still: SCons scripting and Mercurial extensions. |
20:10:53 | Joe_knock | Isn't Puppet in Ruby? |
20:11:12 | Jehan_ | Joe_knock: Dunno. I don't do web stuff (and I haven't ever even looked at Rails). |
20:12:18 | Jehan_ | When I say scripting, I mean pretty much that. |
20:12:22 | Joe_knock | I don't see python losing any users any time soon though. Massive projects are running on it now. |
20:12:30 | Jehan_ | I like Ruby for doing small scripts and fast prototyping. |
20:12:37 | * | superfunc quit (Quit: Connection closed for inactivity) |
20:13:01 | Jehan_ | Joe_knock: Correct. Which is why I think Python2 will continue to exist almost indefinitely, no matter what the Python core team thinks. |
20:13:49 | Joe_knock | didn't Ruby have a breaking version as well? Jehan_ |
20:14:19 | Jehan_ | Joe_knock: Yup, it did have compatibility breaks. But they were much more gentle, as I said. |
20:14:37 | * | FrankenMorpork is now known as AFKMorpork |
20:14:58 | Jehan_ | I have a 14-year old piece of code that I recently tried to run and which still worked, other than having to replace id with object_id, I think. |
20:15:25 | Jehan_ | Fixing the generated C code because of incompatibilities in gcc was more work. :) |
20:16:16 | Jehan_ | Oh, and that was non-trivial code: The Ruby program was an Eiffel compiler, with a parser written in PCCTS (i.e., using C). |
20:17:10 | Jehan_ | I'm also a bit concerned about Scala migrating to the JVM 8. |
20:17:15 | Jehan_ | I understand why they're doing it. |
20:17:44 | Jehan_ | They want to get the new features (such as more efficient anonymous functions) and they don't have the manpower to support multiple backends. |
20:17:53 | * | fowl quit (Ping timeout: 244 seconds) |
20:18:25 | Joe_knock | There's a ton of languages out there now. |
20:18:36 | Jehan_ | But I'm worried that the tools to convert JVM 8 bytecode to an earlier version that they intend to use for backwards compability may not be enough. |
20:19:26 | Jehan_ | Joe_knock: Yeah. But lots of them without much support, limited tooling, or stuff that goes away when their author finishes his or her degree. |
20:20:02 | Jehan_ | That's one of the reasons why I'm using Nim, to be honest. |
20:20:42 | Jehan_ | While I would have designed the language different in quite a few places, that's nothing compared to having a reasonably mature, stable environment. |
20:21:52 | Jehan_ | Plus, there are only a few other languages in the same space, and all of them don't meet my needs in one way or another, even though they're interesting on their own. |
20:22:34 | Joe_knock | "write something like Nim's networking layer and I will ask you about your opinion of release schedules too ;-)" Maybe Araq will allow 1 or 2 design changes if you build that |
20:23:42 | Jehan_ | In Rust, GCed memory is a second-class citizen, which makes it largely useless for me (even though I understand that this is a critical feature for the niche they're aiming for). Go has a lot of fascinating ideas, but the limitations of the type system get in my way (though, again, I understand what their goal is and can appreciate it – it's just not what I need). |
20:25:13 | Jehan_ | D is probably the closest language to Nim in intent, and I'd actually written quite a bit of code in D before I ran into Nim. My main problem with D is that the GC still needs major improvement and they seem to be shifting more and more to a Rust-like approach, where the GC is an optional thing; that worries me. |
20:25:37 | Jehan_ | Subjectively, I also like Pascal and Python-style syntax more than C syntax, but that's not a killer feature one way or the other. |
20:25:43 | flaviu | Rust is pretty cool. But compilation speed @_@ |
20:25:55 | Jehan_ | And as for release schedules, meh, I don't care about those. :) |
20:26:16 | Joe_knock | when there is a code-bloat of 80LoC, I think that is where syntax matters. |
20:26:17 | Jehan_ | Usually, if I find a bug that breaks my code, I fix it myself. |
20:26:36 | Joe_knock | 80K |
20:26:43 | Joe_knock | *80k :-/ |
20:27:29 | ldlework | Jehan_: isn't Nim's GC optional..? |
20:27:33 | Jehan_ | flaviu: Compilation speed I can live with. But it's really the odd obsession that too many people have with avoiding GC that's my problem. |
20:27:57 | Jehan_ | ldlework: In theory, you can disable it, but … the language isn't designed to make it optional. |
20:28:08 | Jehan_ | Rather, the language is designed to minimize its impact. |
20:28:23 | ldlework | Jehan_: a lack of GC is required for lots of programming and types of applications that you're probably not used to doing yourself |
20:28:59 | ldlework | Its not an obsession its a requirement |
20:29:01 | Jehan_ | Araq basically smartly recognized that a single-threaded GC is a hell of a lot easier to write and make fast than a multi-threaded GC, even if it comes at the expense of some flexibility. |
20:29:19 | Jehan_ | ldlework: I know, but those domains are really few and far between. |
20:29:25 | ldlework | Jehan_: not really |
20:29:44 | ldlework | Exposure bias isn't a good justification for your comment about GC obsession. |
20:29:54 | ldlework | I'm not making a serious argument, I'm just pointing it out |
20:30:34 | Jehan_ | ldlework: Let me put it this way. As I said, I totally appreciate the need for having a GC-free language. It's just that there's also a need for languages that aren't weighed down by that consideration. |
20:30:54 | ldlework | Jehan_: what exactly about rust is weighed down by a lack of GC |
20:31:01 | Jehan_ | Making a GC optional or unnecessary leaves a footprint on the language and the code you write. |
20:31:07 | gokr | Anyone know of any current usage of Nim where they consciously avoid ref and GC? |
20:31:08 | ldlework | Like? |
20:31:52 | Jehan_ | ldlework: The *necessity* to track ownership and the syntactical noise that it creates, for starters. |
20:32:12 | ldlework | Jehan_: do you think Rust does this in a way that adds a bunch of syntactical noise? |
20:32:13 | ldlework | I mean really? |
20:32:14 | Jehan_ | Plus, the much bigger noise when you actually want GC. |
20:32:35 | Jehan_ | The problems with ownership and closures. |
20:32:48 | ldlework | Which problem |
20:33:06 | flaviu | Jehan_: GC in mobile isn't very good. And it also has issues with mandatory runtimes and such, its harder to use a library that uses GC in a language that doesn't support it. |
20:34:10 | Jehan_ | flaviu: It depends on the GC, honestly. |
20:34:11 | ldlework | flaviu: you're just obsessed |
20:34:28 | Jehan_ | For the mobile part, I mean. |
20:34:52 | Jehan_ | And yes, I know about the issues with combining libraries with different approaches to memory management. |
20:34:55 | flaviu | ldlework: hmm? I'm not against GC, but there are some valid criticisms. |
20:35:18 | ldlework | Jehan_: good thing they are few and far between, amirite? |
20:35:39 | flaviu | ldlework: Are you actually serious, or are you just trolling? |
20:35:40 | ldlework | flaviu: I was being facetious, I don't think you're obsessed |
20:35:45 | Jehan_ | ldlework: Hmm? |
20:35:52 | ldlework | Jehan_: Hmm? what? |
20:36:12 | Jehan_ | ldlework: Not sure about your last comment. |
20:36:22 | Jehan_ | What you were trying to say, I mean. |
20:36:41 | ldlework | Jehan_: I was using your own argument as to why the reasons for needing no-GC are few and far between |
20:36:55 | ldlework | And that the kinds of applications that require no-GC |
20:37:09 | Jehan_ | The problem with closures and borrowing, by the way, is that they often violate the stack's LIFO policy. |
20:37:17 | * | Dispatch joined #nimrod |
20:37:26 | ldlework | Jehan_: can you link to anything about that? |
20:37:37 | Jehan_ | ldlework: That is not helped by having no GC. |
20:37:47 | Jehan_ | It's a problem with ANY memory management strategy. |
20:37:51 | ldlework | Then why bring it up at all? |
20:38:06 | * | irrequietus joined #nimrod |
20:38:22 | Jehan_ | ldlework: I acknowledged that there was a problem? |
20:38:44 | ldlework | But its an equivalency. |
20:39:00 | Jehan_ | Well, any memory management strategy outside of doing all memory management manually. |
20:39:22 | ldlework | It doesn't distinguish. So I'm not sure why its relevant to the position that people and languages that push for non-GC are obsessed |
20:39:26 | ldlework | (instead of you know, just having reasons) |
20:39:42 | flaviu | Well, just allocate stuff. Deallocating is for scrubs |
20:39:43 | Jehan_ | ldlework: The problem is not when they need GC for their own purposes. |
20:40:02 | Jehan_ | But when they want to impose a GC-less environment on *everything*. |
20:40:52 | Jehan_ | Look, I'm writing enough close-to-the-metal stuff where a GC gets in the way. I totally appreciate where it's a problem. |
20:41:26 | ldlework | "The basic idea is to remove garbage collection from the core language and relegate it to the standard library, with a minimal set of language hooks in place to allow for flexible, pluggable automatic memory management." |
20:41:31 | Jehan_ | But there's a point where insisting on GC-freedom for everything because, I dunno, it *may* have a couple of percent overhead does not make any sense anymore. |
20:41:33 | ldlework | This sounds so horrible! |
20:41:46 | flaviu | ldlework: How is that horrible? That's about ideal |
20:42:00 | flaviu | The language shouldn't force decisions like that on the programmer |
20:42:06 | ldlework | flaviu: again, I'm being overtly sarcastic and facetious to demonstrate how untennable Jehan_'s generalizing position is |
20:42:34 | Jehan_ | ldlework: The problem is that automatic memory management is not a local concern that CAN be packaged in a library. |
20:42:45 | ldlework | Jehan_: it is with a language like Rust |
20:42:54 | ldlework | Jehan_: have you used it? |
20:43:20 | ldlework | "with a minimal set of language hooks in place" |
20:43:42 | Jehan_ | ldlework: Simple example. Garbage collection requires that you scan the stack. How do you do that without having language support (other than the hacks that the Boehm GC does)? |
20:44:11 | Jehan_ | Second, any GC with reasonable performance requires either a write or read barrier of some form. |
20:44:15 | ldlework | Jehan_: he's literally suggesting that they utilize meta-programming to implement implicit management |
20:44:19 | Jehan_ | This means that code generation has to produce them. |
20:44:24 | ldlework | And relegate the implementation to the library |
20:44:49 | ldlework | I don't see your concern where this is fundamentally impossible |
20:45:59 | ldlework | And the problem isn't that a language doesn't allow you to escape from the GC for some specific thing, but uses it for everything else |
20:46:03 | ldlework | That isn't the problem at all |
20:46:12 | ldlework | People want -no GC- for several completely justified reasons |
20:46:22 | Jehan_ | ldlework: Did I say otherwise? |
20:46:39 | ldlework | Yes, you said that languages that allow you to escape it for this or that, are fine |
20:46:45 | ldlework | but languages that force no GC are a problem |
20:46:54 | ldlework | But actually for lots of people, no GC is exactly what is desired |
20:47:07 | ldlework | It isn't about managing some specific resource that people want no GC for |
20:47:26 | ldlework | In some cases any GC at all is unacceptable |
20:47:48 | ldlework | Even in the simple case of Mobile where GC stops the world for trivially large heap sizes |
20:48:08 | Jehan_ | ldlework: That only tells me that you don't know how GCs work. |
20:48:34 | ldlework | Jehan_: I don't know what you mean. I haven't said anything untrue. |
20:48:53 | ldlework | You can demonstrate easily if I have made a mistake instead of accusing :) |
20:49:17 | Jehan_ | Because we have known how not to stop the world for GC for, umm, a few decades now? |
20:49:44 | Jehan_ | If you still think stop-the-world is an actual issue with a quality GC, I don't know what to say. |
20:49:50 | ldlework | uhhhhh |
20:49:51 | Jehan_ | Go read up on GC implementation. |
20:49:52 | ldlework | haha |
20:49:54 | flaviu | Jehan_: Java has a state of the art GC. Now look at minecraft. |
20:50:11 | Jehan_ | flaviu: They make the mistake of having a global shared heap. |
20:50:12 | flaviu | Apparently minecraft's central issue these days *is* gc pauses |
20:50:14 | ldlework | Jehan_: both the JVM and the CLR have stop-the-world collections when running conurrently |
20:50:26 | Jehan_ | Which, with multiple threads, is a hell of a lot more difficult. |
20:50:41 | Jehan_ | Look at OCaml's GC for an actual example of something that doesn't have these issues. |
20:50:51 | ldlework | Jehan_: oh so now you're putting constraints on the kind of software I can write |
20:50:55 | * | Joe_knock finally appreciates mention of something familiar... minecraft |
20:50:56 | Jehan_ | flaviu: The issue is that they allocate too much stuff. That would be a problem even without GC. |
20:51:02 | Jehan_ | ldlework: No. |
20:51:07 | ldlework | Jehan_: but you just did |
20:51:12 | flaviu | No it wouldn't. They could just stick it on the stack |
20:51:34 | Jehan_ | flaviu: The nursery in OCaml is essentially a stack, for what it's worth. |
20:51:49 | Jehan_ | Arguably, Chicken Scheme also, but that's an oddball implementation. |
20:52:02 | Jehan_ | ldlework: No. |
20:52:15 | ldlework | Jehan_: name a production GC right now that doesn't stop the world with normal heapsizes on mobile |
20:52:24 | Jehan_ | ldlework: OCaml's. |
20:52:36 | ldlework | Jehan_: yeah I forgot about all that OCaml code on mobile right now |
20:52:37 | Jehan_ | Nim's, actually. Assuming you don't introduce cycles. |
20:52:40 | * | ldlework smacks his forhead. |
20:53:35 | Joe_knock | Can you use GC as a testing output after building your project and then going back to your code and implementing the stuff manually? |
20:53:35 | Jehan_ | ldlework: My point is that the GC technology is there. Not that for some reason it didn't get deployed on mobile platforms. |
20:54:00 | Jehan_ | Joe_knock: It's generally more helpful to use GC as a detector for leaks and early deallocations. |
20:54:07 | Jehan_ | I.e. the other way round. |
20:54:44 | Joe_knock | So as much as you can, you should try to do trivial GC manually? |
20:55:06 | Jehan_ | Joe_knock: Not sure what you mean? |
20:55:50 | Joe_knock | Jehan_: Instead of letting some automated process do GC for everything, for smaller parts of code where you're aware of de-allocation, you do it yourself. |
20:55:59 | ldlework | "The marking process can take a long time to run over the complete major heap and has to pause the main application while it's active." |
20:56:20 | ldlework | Jehan_: the truth is that for every GC you can point to that says "Oh this problem is solved" you leave out "In the very specific conditions X" |
20:56:35 | ldlework | Your generalization simply isn't useful to anyone. |
20:56:51 | Jehan_ | ldlework: Read the next sentence: "It therefore runs incrementally by marking the heap in slices." |
20:57:12 | ldlework | Jehan_: it doesn't say that it doesn't stop the process |
20:57:49 | ldlework | It even gives you the ability to manualy control slice collections. Why would you need to do that if the GC had no impact on your application's performance. |
20:57:59 | ldlework | I mean, this argument isn't even interesting it is so trivially untrue. |
20:58:00 | Jehan_ | ldlework: I say, because I've actually looked at the code. You are just googling in an attempt to win a debate, but don't actually understand what you're reading. |
20:58:19 | Jehan_ | In any event, I've got work to do and can't waste more time arguing with an ignoramus. Night. |
20:58:20 | * | Jehan_ quit (Quit: Leaving) |
20:58:21 | ldlework | Jehan_: yeah because I'm not familiar with a specific GC you mentioned to be the holy grail I know nothing. |
20:59:19 | gokr | Making a 32 bit .so on a 64 bit Linux - do you think I need to set up a virtual 32 bit Linux instead? |
21:01:39 | * | Dispatch quit (Quit: Page closed) |
21:01:44 | Demos | biggest issue with java is not GC quality but the fact that even trivial objects are allocated on heap, if you did that in C perf would probably be /worse/ |
21:06:36 | * | gokr solved it |
21:06:58 | gokr | (--cpu:i386 --passC:"-m32" --passL:"-m32" seemed to do the trick. |
21:07:55 | Araq | ldlework: aicas a hard real-time concurrent and parallel GC for Java. minimum RAM requirements in practice 20MB. it's a commercial product though. |
21:08:31 | Araq | it scales to several GB of memory too |
21:08:54 | Araq | note that hard real-time means provably no pauses. |
21:10:57 | Araq | that surely is good enough for your phone... |
21:11:08 | ldlework | Araq: and there are no downsides? |
21:12:26 | Araq | the overhead is nicely spread out, but it's not zero. That would be your downside, I guess. |
21:13:01 | Demos | wait, how do people do hard real-time manual memory management? |
21:13:21 | flaviu | I'm not too convinced, the demand for that on Android is immense. There has to be some catch |
21:13:55 | Araq | yeah because the android technology stack is so good already ... er ... wait |
21:14:36 | Demos | I dobut it would work if you are allocating as much as a typical java program |
21:15:27 | Araq | *shrug* the fact is that most people who talk about GCs have no idea about GCs and have only touched some absurdly primitive GCs |
21:16:44 | Demos | yeah, I think languages should not use having a GC as an excuse to allocated everything on the heap |
21:16:51 | Demos | then people would not hate them so much |
21:17:14 | Araq | the "omg I can't use a heap" argument is also naive btw |
21:17:34 | Araq | O(1) alloc/dealloc is a solved problem, for instance |
21:18:20 | flaviu | Araq: O(1) isn't particularly essential. Constant factor is what really matters |
21:19:12 | Araq | flaviu: Thttp://www.gii.upv.es/tlsf/ |
21:19:28 | Araq | "Fast. Additionally to a bounded cost, the allocator has to be efficient and fast enough. TLSF executes a maximum of 168 processor instructions in a x86 architecture. Depending on the compiler version and optimisation flags, it can be slightly lower or higher. " |
21:20:03 | flaviu | oh, I see how aicas works. It has a few essential threads that cannot be interrupted. To make such a realtime thread, you cannot use memory managed by GC. |
21:20:28 | flaviu | "For realtime threads not to be affected by garbage collector activity, these threads need to use memory areas that are not under the control of the garbage collector" |
21:20:38 | Araq | flaviu: er no |
21:20:47 | Araq | that's just the general RTSJ spec |
21:21:01 | Araq | aicas doesn't require that at all |
21:21:27 | flaviu | Araq: It sounds like you have experience here. How does it do it then? |
21:22:28 | Araq | the essential invariant is that everything reachable from the stack is also reachable via some heap based root. so no stop the world for stack marking is required. |
21:23:21 | Araq | note that stacks are the only real problem for pauseless GCs to work. |
21:28:41 | NimBot | Araq/Nimrod bigbreak 4b61592 Araq [+0 ±1 -0]: minor bugfix for notFoundError |
21:28:41 | NimBot | Araq/Nimrod bigbreak 860a288 Araq [+0 ±1 -0]: fixes #1595 |
21:28:41 | NimBot | Araq/Nimrod bigbreak 590461d Araq [+3 ±0 -0]: updated the test |
21:28:41 | NimBot | Araq/Nimrod bigbreak bbb1671 Araq [+0 ±3 -0]: Merge branch 'bigbreak' of https://github.com/Araq/Nimrod into bigbreak |
21:30:20 | Araq | Demos: one essential missing piece for CTE is 'os.changed' |
21:30:38 | Araq | that returns true if some file changed since the last run |
21:31:06 | Demos | can it be implemented at compile time with like a getDate function, I guess not |
21:31:07 | Araq | however "since the last run" is not clearly defined |
21:31:09 | flaviu | Araq: Actually, it looks like TLSF is one of the worse alligators: http://webkit.sed.hu/blog/20100324/war-allocators-tlsf-action |
21:31:12 | Demos | yeah |
21:31:41 | flaviu | "alligators" :P |
21:32:40 | Araq | flaviu: well "hard real-time" does not mean "fast", but "fast enough with provable worst case execution times" |
21:33:18 | flaviu | Most people don't care about though. "Fast enough" is what people care about |
21:34:12 | Araq | most people argue for minimal jitter |
21:34:19 | Demos | right, so a GC without a massive deltas in the graph is good |
21:34:28 | Araq | they simply don't even know what they argue for |
21:34:47 | flaviu | I sure hope that a single, slightly slower allocation won't push you over your time budget |
21:35:15 | flaviu | There is an order of magnitude difference between GC freezes and possible malloc freezes |
21:35:28 | Araq | these things are all blown out of proportion anyway |
21:35:55 | flaviu | Araq: No. I've had issues playing minecraft because of that jitter. And mobile games... |
21:36:15 | Demos | flaviu, because minecraft allocates a MASSIVE amount of memory each frame |
21:36:24 | Demos | like 200+ MB/s |
21:36:35 | flaviu | Demos: Yep, but that's a recent increase |
21:36:58 | flaviu | They're using boxed Vector2Ds now :/ |
21:37:06 | Demos | yes. That was my point |
21:37:11 | Araq | yeah and I love it |
21:37:23 | Demos | allocating everything as a heap object is gunna be a problem |
21:37:31 | Araq | proves that these FP advices wrt immutable data is simply bullshit |
21:37:43 | flaviu | Araq: Immutable data on the stack :D |
21:38:17 | Araq | oh really? who does that? Haskell certainly does not. |
21:38:28 | Araq | which is the crown of everything |
21:38:50 | flaviu | https://stackoverflow.com/questions/5132350/how-do-haskell-compilers-decide-whether-to-allocate-on-the-heap-or-the-stack |
21:39:06 | Demos | Araq, don't I lot of persistent data structures require a lot of dynamic allocations? |
21:40:03 | Araq | Demos: persistent data structures are ultimately against the hardware works. on multiple levels. |
21:40:41 | Araq | immutability really only works for scalars or when you don't have lots of data |
21:41:48 | Araq | and you only trade one set of bugs for another set of bugs anyway |
21:45:14 | ldlework | Araq: what you're talking about right now is fascinating |
21:45:17 | ldlework | and you should write a bit about it |
21:46:36 | Araq | yeah I know I should really write a book ... :-/ |
21:46:42 | Demos | I think the nimrod compiler is him writing about it |
21:47:01 | * | Jesin quit (Quit: Leaving) |
21:47:10 | Araq | "everything you think you know about programming is wrong" ;-) |
21:47:29 | Araq | would be the book title |
21:47:38 | flaviu | Araq: Just summarize it in a blog post |
21:50:46 | Araq | Demos: usually I program a 'changed' and a 'submit' which use checksums |
21:51:10 | Araq | but it's a bit tedious |
21:51:20 | ldlework | Araq: yeah just summarize your thoughts into an article, because then we can use that to seek out more information |
21:52:01 | Araq | ldlework: there often is not more information easily available |
21:52:19 | flaviu | Araq: also, we can post it on reddit; they love linkbait titles |
21:54:59 | ldlework | flaviu: who doesn't!? |
21:55:31 | Araq | Demos: any idea? can we somehow avoid 'submit'? |
21:58:23 | Araq | flaviu: we can first submit ldlework's article to reddit ... |
21:58:34 | Araq | or one of gokr_ 's ... |
21:58:35 | ldlework | Araq: is it any good? |
21:58:46 | Araq | I like it |
21:58:47 | ldlework | I haven't received any feedback |
21:58:48 | flaviu | Can someone post it? |
21:58:51 | ldlework | Well that's good |
21:58:55 | flaviu | Here, I mean |
21:59:06 | ldlework | http://blog.ldlework.com/a-cursory-look-at-meta-programming-in-nim/ |
22:00:35 | Araq | well you need to update at least one thing |
22:00:44 | Araq | "some work done to implicitly 'demote' a macro to its immediate form when you call it with undeclared arguments. " |
22:01:12 | Araq | this is not how it works. you should say that it is possbile to unify immediate with non-immediate macros |
22:01:22 | Araq | and Nim is on its way in doing so |
22:01:38 | Araq | also you should perhaps show off "currying a la Nim" |
22:02:06 | ldlework | I think I did express that the need to tag was just a detail of on-going development? |
22:02:19 | ldlework | Araq: or maybe we save the defect |
22:02:20 | Araq | that was the only feature that I remember right now that has been discovered and not designed |
22:02:23 | ldlework | so you can come in and correct me |
22:02:28 | ldlework | possibly spurring discourse? |
22:02:48 | ldlework | whatever you want |
22:03:06 | Araq | meh, fine |
22:03:16 | Araq | poke me until I do that |
22:09:57 | Araq | can somebody compile babelpkglist.nim with 0.9.4 and the JS codegen and diff it against what 0.9.6 produces? |
22:16:28 | * | flaviu quit (Ping timeout: 250 seconds) |
22:19:25 | * | superfunc_ quit (Ping timeout: 246 seconds) |
22:37:39 | * | irrequietus quit () |
22:43:38 | Varriount | Araq: Pong |
22:44:57 | Araq | Varriount: still some complaints about the installer |
22:45:25 | Araq | http://forum.nimrod-lang.org/t/604 |
22:45:40 | Araq | though I don't think we generate a link to the docs, do we? |
22:46:04 | Araq | and I don't think we really need to |
22:46:52 | Araq | oh wait we do |
22:46:59 | Araq | and it works for me? |
22:49:10 | Araq | hey |
22:49:17 | Araq | you removed that feature |
22:49:44 | Varriount | I did? |
22:50:48 | Araq | yeah |
22:50:58 | Araq | overview.html has no link anymore |
22:51:30 | Demos | where is the part in ldlework's article about currying? |
22:51:44 | Araq | it's completely missing :P |
22:52:19 | Demos | is there a link to them? I don't know about em |
22:52:46 | Araq | it's in system/excpt.nim |
22:54:15 | ldlework | Is currying synonymous for function partials? |
22:54:23 | ldlework | wait |
22:54:27 | ldlework | I can't believe I just asked that |
22:54:36 | * | ldlework goes home and gets drunk. |
22:55:10 | Demos | I dont see it, just exception code with no comments to point me to where currying is used |
22:55:22 | Demos | wait found it |
22:55:45 | Araq | well it's not "currying" |
22:55:56 | Araq | but it reminded me of currying |
22:56:30 | Demos | yeah it is a template.... people who want currying will be disapoint |
22:56:48 | Demos | although currying should not be that hard to do, would need some special annotation (a function or operator) |
23:12:03 | Araq | well strictly speaking currying is simply f_a(b) = f(a, b) iirc |
23:12:15 | Araq | it doesn't need special syntax |
23:12:28 | Araq | you get the feature for free when you have proper closures |
23:16:00 | Demos | yeah |
23:16:10 | Demos | but special syntax is what makes it deserve a name |
23:18:04 | Araq | nah, the idea behind is brilliant but simple |
23:18:15 | Araq | that's why it deserves a name |
23:18:18 | Joe_knock | Demos: You shall be allowed to add your own specially flavoured currying if you can re-write Pandas in Nim |
23:19:38 | * | Boscop_ joined #nimrod |
23:23:44 | * | Boscop quit (Ping timeout: 255 seconds) |
23:30:15 | * | Jesin joined #nimrod |
23:31:23 | * | Jehan_ joined #nimrod |
23:32:18 | ldlework | Well |
23:32:28 | ldlework | I've pitched Docker on Nim |
23:32:46 | ldlework | Or rather, I announced the existence of Nim to Dockerfolk and pointed them to my blog |
23:32:53 | Joe_knock | I'm pitching Jester to the guys at OpenShift |
23:33:11 | ldlework | Docker is Golang to the core |
23:33:20 | ldlework | And many peope here have cultish tendencies regarding it |
23:33:25 | ldlework | So we'll see how the response is :P |
23:33:34 | * | biscarch joined #nimrod |
23:33:40 | Joe_knock | Doesn't Docker pre-date Go? |
23:33:57 | ldlework | Joe_knock: definitely not |
23:36:09 | Joe_knock | The info about Docker is that it started in like 05/06/07 as something else |
23:37:18 | ldlework | Joe_knock: the company used to be Dotcloud a paas |
23:37:28 | ldlework | The paas has internal technology to manage the paas's containers |
23:37:42 | ldlework | They pivoted and made that internal Python tech into Docker |
23:37:51 | ldlework | which was ported to Golang |
23:37:53 | Joe_knock | internal python? |
23:37:55 | Joe_knock | aah |
23:38:36 | Araq | hi biscarch welcome |
23:38:53 | * | Mat3 joined #nimrod |
23:38:56 | Mat3 | hello |
23:40:09 | biscarch | Araq: hello |
23:40:13 | Jehan_ | Araq: system.compiles seems to emit error messages when the argument doesn't compile? Is there a way to suppress it? |
23:40:46 | Araq | Jehan_: I think that's a regression |
23:41:00 | Jehan_ | Gotcha. |
23:43:16 | ldlework | Araq: do you want me to post the article or is it better taste if someone else does? |
23:45:04 | Araq | ldlework: dunno. let's ask skyfex to do it. |
23:46:19 | * | Jesin quit (Quit: Leaving) |
23:47:43 | Joe_knock | ldlework: Are you pro-Python in your stack? |
23:47:57 | ldlework | Joe_knock: I'm not sure exactly what you're asking |
23:48:16 | Joe_knock | ldlework: Is that your preferred choice of language for most tasks? |
23:48:22 | ldlework | Oh definitely. |
23:48:35 | * | Jesin joined #nimrod |
23:48:48 | ldlework | Joe_knock: I'm a DRY fetishist |
23:49:00 | ldlework | Python gives me the ability to be overtly DRY for better or worse |
23:49:07 | ldlework | Using Golang makes me fucking insane |
23:49:27 | Joe_knock | I see your python interests go as far as Salt too. |
23:49:56 | ldlework | Joe_knock: are you doxxing me right now? |
23:49:57 | ldlework | haha |
23:55:00 | Araq | ldlework: congratulations. most programmers never make it to the thought "DRY taking seriously means a macro system" |
23:57:25 | Varriount | Araq: So, I'm making some progress setting up a buildbot for nim. |
23:57:40 | Varriount | It's interesting, because the 'config' file is actually just a python script. |
23:58:23 | Varriount | It would be nice (one day) if regular nimrod programs could make use of the compiler's VM, to do something like that. |
23:58:36 | * | Joe_knock doxxs ldlework |
23:58:56 | ldlework | Joe_knock: :) |
23:59:48 | Mat3 | ldlework: Does that mean you are impressed by golang ? |
23:59:50 | * | ARCADIVS joined #nimrod |
23:59:59 | Jehan_ | Varriount: Have you considered executing an external Nim program that communicates via marshal.nim? |