<< 31-07-2013 >>

00:00:18gradhagoing back in time is a useful feature, trust me
00:00:21Araqthe latest commit that has been pushed is the breaking commit
00:00:36Araqno need for anything more fancy
00:01:06gradhaI'm already thinking about stuff breaking, so being able to request past commits would be good if something unexpected happens and the breaking commit doesn't record
00:01:17gradhathen you can fix problems and repeat just the test run
00:01:32Araq*shrug* if it makes you happy
00:03:22gradhahuh, conceptually it sounds simple, any advice on real world problems with nimbuild I might need to be aware of?
00:03:35gradhaor maybe I should talk tomorrow to dom96?
00:03:50AraqI bet you do want to talk to him
00:04:09Araqhis code ... is ... hacked together
00:04:48gradhahah, unbelivable
00:05:09gradhahave you ever looked at somebody else's code and thought "oh, it's well written"
00:05:21Araqyeah
00:05:51gradhain nimrod too?
00:05:56Araqbut right now only Lua's source code comes to mind ;-)
00:07:01Araqthe math stuff written in Nimrod I code reviewed was good
00:07:26Araqyour code is always quite clean too iirc
00:07:51gradhamore like verbose, which is the complaint I hear most from other developers
00:08:30gradhaI should really write a book, about nimrod, the serial killer, whose first victim is a girl named Ruby...
00:18:13comexAraq: C++ is strictly worse than C at very many different things
00:18:37AraqI disagree
00:18:47comexRust is very unstable and encourages you to write very different code than C
00:18:56comexnimrod, well *shrug*
00:19:07AraqI forgot about Modula 2 btw
00:19:18AraqModula 2 is exactly C without the bullshit
00:22:08comexperhaps
00:22:10comexnever used it
00:22:20comexbut C++ also tries to encourage you to write much higher level, often worse code
00:22:58Araq*shrug* that's a feature
00:23:18comexit also implements metaprogramming in such a braindead way that given any large C++ project, there is almost certain to be difficult to understand magic
00:23:35comexC macros can be worse, but they are usually not
00:23:46gradhamagic is by definition difficult to understand, otherwise we would not call it magic
00:23:56AraqC's inablitity to express higher level features is certainly not a *feature*
00:24:03comexAraq: it is certainly a feature
00:24:33comexor at least, if you want to support higher level features, you should do it in a way that does not make it easy to produce slow, unmaintainable, hard-to-read code
00:25:26comexbut things like templates are not as necessary as they seem - when they are, C suffers, but the high volume of C code is testament to the fact that they are usually not necessary
00:25:36comexand avoiding them often produces better code
00:26:07Araqthe high volume of Java code proves nobody needs anything lower level
00:26:22Araqcan you see the falacy now?
00:26:54comexC is significantly more expressive than Java.
00:27:43Araqit's not about Java
00:27:54Araqit's an example of your fallacy argument
00:28:00comexwhat is the fallacy?
00:28:09Araq"the high volume of C code is testament to the fact that they are usually not necessary"
00:29:07comexit is not a proof, but evidence.
00:29:18Araqthe high volume of C code is only shows programmer's stubbornness
00:29:19comexthe high volume of Java code is testament that its features are usually sufficient to do what is wanted. of course we must look at more than just the volume
00:29:22gradhalet me try too "the high volume of sequential code is testament to the fact that concurrent code is usually not necessary"
00:29:34comexthere are many more detailed reasons I do not like Java, but the high volume of code is a reasonable counter-argument
00:29:38comexgradha: that would be correct.
00:30:07Araqthe high volume of Fortran code is a testament of its superior performance
00:30:20comexno, you are taking it too far
00:30:26gradhacomex: weird, I would say that the high volume of sequential code is testament to the fact that concurrent bugfree code is hard to write
00:31:03Araqthe high volume could also imply an incredible unexpressive language
00:31:20comexAraq: in Java, it does. in C, it does not, as it is usually more succinct than either Java or C++.
00:31:34comexgradha: those are the same thing. it is due to that difficulty that we only write concurrent code when necessary.
00:32:17Araqcomex: that's just bullshit, compare a GTK app in C vs one in C++
00:32:37comexGTK is a poorly designed C library.
00:32:45Araqand btw C++ proves C is not sufficient
00:32:51Araqso does Objective C
00:32:58Araqotherwise they wouldn't have been invented
00:33:15Araqusing your twisted logic at least ...
00:33:22comexno, C++ proves, as you like to say, that programmers are stubborn
00:33:46Araqlol
00:33:49gradhacomex: I'm afraid I've seen too many cases of sequential code wasting multicore machienes to consider your statement true, most people don't even think of writing concurrent code because they are not looking for performance
00:33:58AraqC++ was "revolutionary" when it came around
00:34:10Araqall this OO stuff was way too much for most C programmers
00:34:56Araqit certainly doesn't prove stubbornness
00:36:15Araqand btw most C code looks like err = call_some_function(); if (err) goto error;
00:36:18comexstubborn enough to expect the language to do everything for them, in order to make stupid things (but not most non-stupid things) easy
00:36:30comexso does most C++ code, it's better than using exceptions
00:36:32Araqif that doesn't prove the usefulness of exceptions then I dunno
00:37:13Araqit doesn't suffice, you can't compose functions then anymore
00:37:17comexexceptions are ridiculously easy to not pay attention to and then allow to blow up your application
00:37:19gradhawhat a coincidence, machines are hitting speed limits and suddenly concurrency is important again
00:37:46comexanother example of programmers thinking the machine can do everything for them.
00:38:00gradhawe are going to see more concurrent programming now, not because it wasn't necessary, but because hardware improvements made it less cost-effective
00:38:44comexgradha: necessary and cost effective are the same thing.
00:39:39EXetoChow many exceptions aren't fatal anyway? at least in some types of applications
00:40:17AraqEXetoC: whether it's fatal or not depends on the use case, a library often can't make this decision
00:40:35Araqso exceptions have been invented to increase modularity
00:41:33EXetoCyes, but it means a lot of convenience for many of the users
00:42:15comexAraq: right, because getting a random NullPointerException from 5 calls deep is modular
00:42:23comexthere's a reason why most C++ code I've seen avoids exceptions!
00:42:35Araqin C++ there is no NullPointerException
00:42:40comexanyway, arguing is fun, but i have to go
00:43:09comexhave fun ;p
00:43:32Araqit's more fun when the arguments are reasonable ...
00:44:31Araqand btw "ooh this feature is bad in C++, it must be bad in general" is yet another fallacy of yours ...
00:45:46*gradha quit (Quit: bbl, need to watch https://www.youtube.com/watch?v=1ZZC82dgJr8 again)
00:47:52EXetoCyeah it's very different in other languages
00:50:29NimBotAraq/Nimrod master 604e579 Araq [+1 ±2 -0]: 'nirmod pretty': almost working
00:56:15EXetoChttps://github.com/Araq/Nimrod/blob/master/compiler/semexprs.nim#L347 I've hit this. I was trying to create a nested tuple
00:56:22EXetoCtrying to reduce it now
01:42:04*DAddYE quit (Remote host closed the connection)
01:43:46EXetoCdone. simple workaround as always
02:03:01*q66 quit (Quit: Leaving)
02:43:11*DAddYE joined #nimrod
02:50:17*DAddYE quit (Ping timeout: 261 seconds)
03:03:12*Associat0r quit (Read error: Connection reset by peer)
03:08:13*DAddYE joined #nimrod
04:01:35*EXetoC quit (Quit: WeeChat 0.4.1)
04:03:21*Associat0r joined #nimrod
04:03:22*Associat0r quit (Changing host)
04:03:22*Associat0r joined #nimrod
04:19:22*OrionPK quit (Read error: Connection reset by peer)
04:26:49*xilo quit (Ping timeout: 246 seconds)
04:29:10reactormonkAraq, on what can I build a JS repr? Should it display JS or nimrod objects?
05:42:28*Trix[a]r_za is now known as Trixar_za
06:40:01*Trixar_za is now known as Trix[a]r_za
06:45:07*Trix[a]r_za is now known as Trixar_za
07:14:48*Araq_ joined #nimrod
07:50:14*Trixar_za is now known as Trix[a]r_za
08:32:14*DAddYE quit (Remote host closed the connection)
08:32:44*DAddYE joined #nimrod
08:37:27*DAddYE quit (Ping timeout: 260 seconds)
09:15:23dom96<Araq> [01:04:09] his code ... is ... hacked together
09:15:31dom96My code is beautiful.
09:33:30*BitPuffin joined #nimrod
09:45:51BitPuffinHmm
09:47:29BitPuffinwhat should I name this collada import library: Cologne (or Collogne), Coloader (or Colloader) or daerod
09:48:37*q66 joined #nimrod
09:56:22*BitPuffin quit (Read error: Connection reset by peer)
10:01:00*BitPuffin joined #nimrod
10:02:34dom96hey BitPuffin
10:02:42BitPuffinhello dom96!
10:04:57BitPuffindom96: sup?
10:05:18dom96hrm, not much really
10:06:09dom96Trying to work on the async stuff but getting distracted all the time...
10:07:23dom96BitPuffin: how are things going on your end?
10:17:15BitPuffindom96: async stuff?
10:17:41BitPuffindom96: it's gonig pretty okay, not getting too much done really but I'm currently working on a collada import library for nimrod
10:20:58dom96Yeah, i'm creating a C#-like await thingy: https://github.com/Araq/Nimrod/blob/asyncmacro/tests/compile/tasyncitermacro.nim
10:55:54dom96bbl
11:11:19BitPuffindom96: cool!
11:11:20BitPuffinHu
11:11:22BitPuffinuh*
11:11:33BitPuffinParsexml vs xmlparser?
11:16:59*Associat0r quit (Quit: Associat0r)
11:27:12Araq_BitPuffin: daerod sounds cool
11:27:51BitPuffinAraq_: Hmm, and I went with cologne, daerod is pretty nice though, might rename
11:27:52Araq_dom96: your code certainly can be improved ... you should really learn about GCSE
11:28:21Araq_"global common subexpression elimination"
11:29:37*Associat0r joined #nimrod
11:29:37*Associat0r quit (Changing host)
11:29:37*Associat0r joined #nimrod
11:37:33BitPuffinAraq_: it's most likely a temporary name anyways like with linagl. If I decide to write my API in nimrod (probably) after evaluating it for a few projects these libs will become part of it
11:38:08Araq_ok
11:57:26*BitPuffin quit (Ping timeout: 268 seconds)
12:08:01*Araq_ quit (Quit: ChatZilla 0.9.90.1 [Firefox 22.0/20130618035212])
12:13:15*Associat0r quit (Quit: Associat0r)
13:20:14*Araq_ joined #nimrod
13:20:28*Araq_ quit (Client Quit)
13:25:51*EXetoC joined #nimrod
13:27:05dom96Araq: Yes, of course it can be. I'll admit that the branches support is a bit messy.
13:37:09*Endy joined #nimrod
13:41:34*BitPuffin joined #nimrod
13:58:03*Araq_ joined #nimrod
13:59:45*Araq_ quit (Client Quit)
14:04:12BitPuffindom96: Do you anything about progress on values in generic params?
14:06:31dom96nope, sorry.
14:06:36BitPuffinawh :(
14:06:43BitPuffinkind of need it
14:07:03BitPuffinI'm not gonna do matrices with ranges
14:10:40*[1]Endy joined #nimrod
14:13:40*Endy quit (Ping timeout: 264 seconds)
14:13:40*[1]Endy is now known as Endy
14:14:53*xilo joined #nimrod
14:16:06*Associat0r joined #nimrod
14:16:07*Associat0r quit (Changing host)
14:16:07*Associat0r joined #nimrod
14:19:20BitPuffinEXetoC: okay so I'm just gonna merge, but could you do some trivial change (like add a documentation comment for something
14:19:41BitPuffinEXetoC: and add the unlicense stuff to the commit message
14:22:51BitPuffin"I dedicate any and all copyright interest in this software to the public domain. I make this dedication for the benefit of the public at large and to the detriment of my heirs and successors. I intend this dedication to be an overt act of relinquishment in perpetuity of all present and future rights to this software under copyright law." that stuff
14:25:55*Sergio965 joined #nimrod
14:27:05*Associat0r quit (Quit: Associat0r)
14:48:28*BitPuffin quit (Ping timeout: 264 seconds)
15:01:07*Associat0r joined #nimrod
15:01:07*Associat0r quit (Changing host)
15:01:07*Associat0r joined #nimrod
15:22:31*BitPuffin joined #nimrod
15:25:21EXetoCBitPuffin: adding it now
15:25:40BitPuffinEXetoC: btw I'm switching over to CC0
15:25:47BitPuffinit's also public domain
15:25:50BitPuffinbut it's a bit better written
15:27:25BitPuffinEXetoC: (so your statement will still apply)
15:32:02EXetoCok
15:32:53EXetoCactually, I'll add it in a couple of hours.
15:33:26BitPuffinEXetoC: okay, tell me when!
15:42:46*BitPuffin quit (Read error: Operation timed out)
16:39:21*Endy quit (Quit: HydraIRC -> http://www.hydrairc.com <- *I* use it, so it must be good!)
17:01:24*DAddYE joined #nimrod
17:08:22*DAddYE_ joined #nimrod
17:09:11*BitPuffin joined #nimrod
17:11:56*DAddYE quit (Ping timeout: 268 seconds)
17:33:28*Associat0r quit (Quit: Associat0r)
17:34:19*DAddYE_ quit (Remote host closed the connection)
17:34:51*DAddYE joined #nimrod
17:50:45AraqBitPuffin: what's wrong with passing 0..N-1 instead of N to a generic matrix?
17:58:09EXetoCit's a start. changing it later won't be that hard, and you can hide some of that with aliases like in the vector module
18:10:40EXetoCBitPuffin: comitting in a minute
18:15:39BitPuffinAraq: it's a bit meh
18:15:52BitPuffinbut yeah
18:15:59BitPuffinI might do it just to get started
18:27:12EXetoCthere
18:35:31NimBotAraq/Nimrod master 0a9eaf1 Araq [+0 ±5 -0]: 'nimrod pretty' usable
18:56:26*Emmyy joined #nimrod
18:58:06Araqhi Emmyy, welcome
18:58:37EmmyyHello :)
18:58:41BitPuffinEXetoC: good choice on the tolerance parameter!
18:59:08BitPuffinEXetoC: but why export swizzle characters?
19:02:13BitPuffinAraq: as a temporary workaround. Would it be possible to write a term rewriting parameter that changes the dimension parameter to a vector or a matrix from say N to 0..N-1? That way the public interface would be identical
19:04:14EXetoCmaybe someone will need it for some reason. change it if you want
19:07:57EXetoCand when reading the documentation. maybe export it only when nimdoc is defined, at the very least
19:08:25EXetoCnah that would be confusing
19:11:46AraqBitPuffin: values for generics is perhaps 2 weeks off, no need for workarounds
19:17:17BitPuffinEXetoC: hmm, well I guess no one will really use the library until then except for me, and I'll pretty much only use the provided aliases anyways
19:17:21EXetoCmaybe just a couple of templates that makes the interface identical
19:17:48BitPuffinEXetoC: I don't really think anyone will need to specify the range
19:17:59BitPuffinEXetoC: not when you can swizzle :P
19:18:54BitPuffinAraq: but anyways, would it be possible? I won't do it, I just want to know if term rewriting macros would be flexible enough
19:22:47AraqI don't think so, TR macros transform code, not declarations
19:47:43NimBotAraq/Nimrod master 3a3ca55 Yury Benesh [+0 ±2 -0]: Fixed libX11, libXrender bindings for macos and linux.
19:47:43NimBotAraq/Nimrod master 7795d2e Yury Benesh [+0 ±4 -0]: Added pkg-config support to xlib, xrender, cairo, cairoxlib
19:47:43NimBotAraq/Nimrod master 096eb6a Yury Benesh [+0 ±2 -0]: Some fixes to xlib wrapper
19:47:43NimBotAraq/Nimrod master 8fc7909 Yury Benesh [+0 ±2 -0]: Fixed XClientMessageEvent struct, added equals operator fot TAtom from unsigned, added xclient union field access proc to XEvent
19:47:43NimBot4 more commits.
19:48:28*Mat2 joined #nimrod
19:48:30Mat2hello
19:48:35NimBotAraq/Nimrod master a88ecab EXetoC [+0 ±1 -0]: Add missing SDL symbols.
19:48:35NimBotAraq/Nimrod master 912e613 EXetoC [+0 ±1 -0]: dynlib
19:48:35NimBotAraq/Nimrod master 345155a Araq [+0 ±1 -0]: Merge pull request #530 from EXetoC/master... 2 more lines
19:48:59EXetoCalright!
19:49:03EXetoCMat2: hi
19:53:13Mat2hi EXetoC
19:59:24NimBotAraq/Nimrod master 4c9c8f0 Grzegorz Adam Hankiewicz [+0 ±1 -0]: Adds convenience copyFileWithPermissions to os module.
19:59:24NimBotAraq/Nimrod master f1940fe Grzegorz Adam Hankiewicz [+0 ±1 -0]: Adds convenience expandTilde proc around getHomeDir.
19:59:24NimBotAraq/Nimrod master 5e64a40 Grzegorz Adam Hankiewicz [+0 ±1 -0]: Notes kind() getter is used to read TXmlNode.k field.
19:59:24NimBotAraq/Nimrod master d405382 Grzegorz Adam Hankiewicz [+0 ±1 -0]: Adds findAll() convenience procs to xmltree.
19:59:24NimBot1 more commits.
19:59:39Sergio965Hi!
19:59:58Araqgah ... so many pull requests ...
20:00:05Mat2hi Sergio965 and Araq
20:00:56Araqhi Sergio965 and Mat2
20:01:36Sergio965HI Mat2 and Araq
20:01:43Sergio965My name isn't 4 characters. :(
20:01:55Sergio965Araq: The more pull requests the merrier!
20:02:01Mat2*g*
20:02:29*Associat0r joined #nimrod
20:02:29*Associat0r quit (Changing host)
20:02:29*Associat0r joined #nimrod
20:03:31Araqwell I guess so but I can either fix bugs, work on new features or do code reviews ...
20:05:04*Mat2 added immediate prefetching as optimization for out-of-order architectures with dynamic-register allocation to my compiler
20:07:29AraqMat2: I think on the fly (G)CSE is easy to do and quite beneficial for any language implementation
20:08:22Araqa jump optimizer is trivial too; loop invariant code motion looks somewhat harder
20:08:31Araqany experience with these?
20:08:41EXetoChey, you're mixing first and third-person :p
20:08:49Sergio965loop invariant code motion is pretty sweet.
20:09:20BitPuffinAraq: what'n nimrod pretty?
20:09:23Sergio965GCSE is pretty easy.
20:09:34BitPuffinhey Mat2!
20:09:43Mat2Hi BitPuffin
20:09:46dom96hello everyone
20:09:52BitPuffino/ dom96
20:10:03Sergio965Is that a hand wave?
20:10:06BitPuffinyeah
20:10:09dom96gah, GCSE is a British thing.
20:10:15Sergio965??
20:10:19Sergio965British?
20:10:21Mat2hi dom96
20:10:23BitPuffindom96: you mean GCHQ?
20:10:31dom96Why must you conflate my acronyms?
20:10:41Sergio965Why must you conflate yourself?
20:10:41Sergio965:D
20:10:42Sergio965:o
20:10:44Sergio965!
20:10:56dom96BitPuffin: no
20:10:58EXetoCwhy are there cat videos on the internet?
20:11:08Sergio965EXetoC: Why are there cats?
20:11:13dom96It stands for General Certificate of Secondary Education :P
20:11:18BitPuffinEXetoC: Why are there?
20:11:28BitPuffinEXetoC: Why are?
20:11:32BitPuffinEXetoC: Why?
20:11:33Sergio965I don't think that's a valid sentence, BitPuffin.
20:11:35BitPuffinEXetoC: ?
20:11:57BitPuffinSergio965: Depends
20:12:00AraqSergio965: GCSE is much more important than loop invariant code motion though
20:12:22Mat2Araq: I have implemented GCSE at the parser level (very Forth related so not common applicable)
20:12:23Sergio965BitPuffin: The "Why are there?" one. Not sure about the "Why are?" and "Why?"
20:12:48Sergio965Mat2: At the parser level? That doesn't seem doable…you need data flow analysis.
20:13:06Sergio965Araq: I agree, but loop invariant code motion is pretty cool.
20:13:35Sergio965Loop unrolling + GCSE can result in code motion, though.
20:13:41Sergio965Well, in the equivalent of, I suppose.
20:13:57Mat2Data flow is known at typing (or parsing) (as written, very Forth related)
20:14:22Sergio965I suppose it depends on the language.
20:14:31Mat2yes
20:14:39Sergio965Not sure how it would work in any language with more than one basic block.
20:15:02BitPuffinSergio965: :D
20:15:10AraqSergio965: loop unrolling is irrelevant for a VM
20:15:24Sergio965Araq: Since when are we talking about VMs?...
20:15:30Araqwell I am :P
20:15:42Sergio965uh.
20:15:49Sergio965:\
20:15:56Sergio965Okay then. :)
20:16:15AraqBitPuffin: what did you use instead of 'len' for vectors again?
20:18:10Mat2Sergio965: Its doable for dynamic languages though reinterpretation and evaluation (thus can be combined to the process to get the code in a CPS form)
20:19:58EXetoCBitPuffin: plural?
20:20:58Sergio965Mat2: Sounds you're doing more than "parsing" at that point.
20:25:22Mat2that's right but I must note that Forth oriented languages are very uncommon in this aspect because parsing can mean state and error check-up, compilation, code-execution, dynamic (re)interpretation and state-modification
20:31:38EXetoCBitPuffin: or what are you getting at? I was just joining in on the randomness
20:31:47EXetoCSergio965: my sentence? if so, please correct it :>
20:32:50Mat2anyhow, the whole state of the entire envirionment is always known at every point (at least in my system)
20:34:33EXetoCI should finish my lambda macro some time
20:34:51Mat2that would be nice
20:38:30Mat2does Nimrod support closures ?
20:38:40EXetoCyes
20:38:43EXetoCsee the closure pragma
20:38:50Mat2thanks
20:39:53dom96There is no nice closure syntax though, the do notation fills that gap somewhat.
20:40:21EXetoCctrl+f ftw :>
20:42:26EXetoCdom96: aren't lvalues implicitly converted? no big deal then
20:43:17dom96hrm, what do you mean?
20:44:47Araqdom96: come on, don't spread FUD
20:45:03Araqa "nice" closure syntax is a macro away
20:45:28Araqand the syntax that we have is consistent and nice IMO
20:48:21*gradha joined #nimrod
20:49:15EXetoCdom96: the right-hand side of assignments. proc literals seems to be implicitly convertible to closures
20:50:07dom96Araq: I will believe it when I see it. So you won't introduce any nice shorthand for closures anymore?
20:51:13Araqdom96: that is correct
20:52:01Araqthere will be built-in \ macro instead
20:52:26dom96EXetoC: I would love some syntax sugar, so that instead of writing: proc (x, y: int): int = x + y; I can write: x, y => x + y; or something similar.
20:52:27EXetoCI might be wrong. are nested procedures closures?
20:52:42AraqEXetoC: depends onto wether they capture variables
20:52:51EXetoCok
20:53:56EXetoCit seems like you can't capture parameters of an outer function though
20:54:00EXetoCor maybe they have to be vars
20:54:39EXetoCno, they are
20:54:42dom96Araq: I can't say that I am looking forward to that anymore. But I will complain once I can determine whether I hate the macro or not :P
20:54:51dom96gradha: yo
20:55:00gradhayo
20:55:06dom96gradha: Still want to add that feature to nimbuild?
20:55:11EXetoCdom96: \(...) is what he suggested
20:55:12gradhayes
20:56:35dom96gradha: Here is how it should be done: make the tester generate a .json file that nimbuild can read, make the .json file end up in the same dir as the testresults.html file, write some nice code to read 2 .json files and render a diff to the user.
20:59:19EXetoC\(x, y, x + y). he might've suggested \(x + y) too, which would look for single-letter identifier or something like that
21:00:07dom96why not: \x, y (x + y); actually that looks odd.
21:00:12dom96When did he suggest this?
21:00:59EXetoCwhen I asked about it a couple of weeks ago
21:01:36EXetoCdom96: how would that work? using TR macros or something?
21:01:51dom96EXetoC: probably wouldn't.
21:03:20Araqindeed I suggested \(x + y)
21:03:34Araqit's even shorter than Haskell so it must be good
21:05:04dom96I don't see how that can work.
21:05:38EXetoCwhy not?
21:06:03dom96var x = 5; \(x + y) # do I want the global 'x' or does my closure take two params?
21:06:09Mat2\(x + y) -> \x.\y.x+y ?
21:06:27Araqdom96: takes 2 params of course :P
21:06:46Araqvar xx = 5; \(xx +y) # takes 1 param, captures xx
21:07:08dom96what?
21:07:14Mat2ah ok
21:07:21dom96it's whitespace sensitive?
21:07:40EXetoCno, identifier length
21:10:32dom96Why? Because we don't scare away enough users thanks to SI?
21:11:06Mat2sorry, what means SI ?
21:11:10*gradha quit (Quit: bbl, need to watch https://www.youtube.com/watch?v=1ZZC82dgJr8 again)
21:11:15dom96style insensitivity.
21:11:32EXetoChow is that scary? can't you have a more verbose overload as well?
21:11:38DAddYE(x, x: int) do -> int: x + y
21:11:52DAddYEdo (x, x: int) -> int: x + y
21:11:57DAddYEnot sure which is correct
21:12:13Mat2I see no problems out of SI, sorry
21:12:28AraqDAddYE: do (x, y: int) -> int: x + y
21:12:39dom96AFAIK do notation only works when the last param of your proc expects a closure.
21:12:46EXetoCMat2: most programmers don't want change
21:13:19Araqdom96: you want \ for a really short notation, I don't see the problem
21:13:40Araqwhat is it these days that people complain they get what they asked for?
21:13:48Mat2change is essential to live because life means change
21:13:49EXetoCpeople in general don't
21:13:59dom96I certainly didn't ask for this.
21:14:27dom96What's wrong with Haskell's syntax?
21:14:50dom96Let me guess, it's not possible with macros.
21:14:55Araqnimrod is not haskell and I'm sick and tired of ever more special cases in the syntax
21:15:15Araqwe can do \(x, y, x + y) though easily with a macro
21:15:21Sergio965Haskell is amazing.
21:16:19Mat2if we talk about syntax dialects, why not considering ML ?
21:16:31DAddYEMat2: ruby
21:16:32DAddYEhahah
21:16:45Sergio965Ruby. Ruby is amazing, too.
21:16:59Sergio965Every. Language. Is. Amazing. ELIA.
21:17:10Mat2DAddye: Brainfuck
21:17:12Sergio965ELIA Language Is Amazing
21:17:16dom96Araq: I would prefer that.
21:17:17Sergio965Boom.
21:17:39Araqdom96: fine then
21:17:54EXetoCso not both then?
21:17:58AraqI think it's stupid to stop half way at a short notation, but *shrug*
21:17:58dom96Araq: But I don't understand why you changed your mind.
21:18:00EXetoCoh well, it's still short
21:18:20EXetoCAraq: I agree
21:19:44Araqmaybe we should do \(\x + \y) for auto-declaration of x,y :P
21:19:57Araqnah, bad for nesting lambdas
21:21:26BitPuffinAraq: for length of strings when swizzling, and array length
21:21:55BitPuffinEXetoC: well it was just random
21:22:08DAddYEsorry I'm retarded but what is \() this purpose?
21:23:08EXetoCit's short
21:23:21Associat0rML syntax has some legacy cruft
21:23:40EXetoCany kind of lambda syntax would encourage composition
21:24:17dom96Araq: IIRC you said you would implement something along the lines of: \x, y => x + y. I still like that syntax a lot.
21:24:40AraqI said I would implement (x, y :: x + y)
21:24:53BitPuffinEXetoC: ctrl+f?
21:24:57BitPuffinah
21:24:59BitPuffinsearch?
21:25:02EXetoCya
21:25:12EXetoCand grep :>
21:25:21Mat2Associat0r: Yes but it have two strong variants: Caml and most important: F#
21:26:48Associat0rwhich still somewhat suffer from the cruft
21:27:17Mat2ok, please be more precise !
21:28:00Associat0rwell tuple types vs tuple values
21:28:53Araqdom96: any syntax without explicit () is doomed for lambdas IMO, it quickly becomes unreadable, precedences become unclear
21:30:11Associat0rDiscriminated Union data ctors that only exist in tupled form
21:30:14dom96Araq: I think you should still implement that syntax.
21:30:23Araqdom96: which one?
21:30:32dom96Araq: (x, y :: x + y)
21:30:38Associat0rthere is some more
21:31:41Mat2Associat0r: The type system of ML is eager evaluated as most more common programming languages
21:32:03Associat0rMat2: yes
21:32:13Associat0rwhat does this have todo with it?
21:33:05Associat0rIdris and Elm don't suffer from it and are eager too
21:34:29Araqdom96: for marketing a non-builtin lambda seems way better ;-)
21:35:11Araqeverybody loves a small core + macros as the overwhelming language design
21:35:33Araqwell everybody who thinks macros are a good idea anyway
21:36:03Mat2ML handles that strict in the sense that the type alone depends state (or state-less). For the F# compiler that is of advantage for efficient usage of the NET environment (the vm.inherent type system)
21:37:25Mat2I think taht is one reason for choosing ML as 'inspiration' for creating F#
21:37:38Associat0rMat2: btw why aren't you in ##fsharp?
21:37:40BitPuffinwait what's wrong with haskell, haskell is freaking spectacular :D
21:37:59Associat0rhaskell's records are broken
21:39:53Mat2Associat0r: I do not want to be limited to the NET framework (or its open-source equivalent Mono)
21:40:23Associat0rMat2: well it's just a runtime
21:41:13BitPuffinAssociat0r: but it's also very spectacular
21:41:22Mat2its one way to rule them all, no thanks
21:41:43BitPuffinMat2: yeah that's wise
21:42:00Associat0rBitPuffin: Idris is way more spectacular
21:42:34Associat0rMat2: how do you mean?
21:43:56BitPuffinAssociat0r: never heard of it, link?
21:44:24*OrionPK joined #nimrod
21:44:32Associat0rBitPuffin: http://www.idris-lang.org/
21:44:35Mat2the NET framework is so special designed, that is onbly fit well to x86 based systems (not to forget Micro$oft operating systems)
21:44:47Mat2^only
21:45:07BitPuffinAssociat0r: why is it better than haskell?
21:45:25Associat0rBitPuffin: dep types, eager eval, fixed records
21:45:54Associat0rBitPuffin: better syntax for type annotations
21:46:15Associat0rbetter user definable sugar for DSLs
21:46:20Associat0rand lots more
21:46:30BitPuffinAssociat0r: how's performance?
21:46:43BitPuffinAssociat0r: does it have a project like cloud haskell? That is like erlang
21:46:45dom96Araq: From a marketing standpoint a broken implementation, or an implementation which the majority sees as being broken, will cause problems.
21:47:06Associat0rit's designed to have better perf than Haskell
21:47:23BitPuffinAssociat0r: Hmm
21:47:32Associat0rBitPuffin: it's still in development
21:47:45BitPuffinAssociat0r: anything like yesod for it?
21:47:57Associat0rnot sure
21:48:35Associat0rMat2: I don't think it's true
21:48:52EXetoCmake everything a class, and then just market away
21:50:19Araqdom96: not if there are alternative implementations all broken in different ways :-)
21:50:41Araqthat's the secret mojo of Perl and C++
21:51:58Mat2Associat0r: Well I would hope to be wrong but ... it's an Microsoft invitation, right ?
21:54:10Mat2that's these corporation which included a check routine just for pushing up a warning message in Win 3.1 when executed with DR-DOS
21:55:17Araqyeah this evil corporation which produces OSes that continue to run my old software ...
21:55:48Araqit's as if they understand what the purpose of an OS is ... running software
21:56:03Mat2(and informing the user to proceed by pressing F2 loading Win95 if no keyboard was attached)
21:57:20Mat2Araq: right
21:57:44Mat2for this purpose there exist emulators
21:58:02Araqand yet wine never works for me
21:58:36EXetoCsurprising, huh
21:58:51Araqok, sometimes it does but often it doesn't
21:58:59AraqI guess I play too uncommon games
21:59:26Mat2Araq: Wine configuration is not easy
21:59:37EXetoCI've been able to play morrowind and half-life
22:00:54*DAddYE_ joined #nimrod
22:01:06Associat0rAraq: what about VMs?
22:01:09EXetoCit seems like it has improved quite a lot the last couple of years. I still don't really bother though
22:01:20Associat0rAraq: is the perf there yet?
22:03:02AraqAssociat0r: I don't think so, my XP is quite slow under virtualBox
22:04:34*DAddYE quit (Ping timeout: 256 seconds)
22:05:19Araqwith the PFoo() constructor syntax TFoo.new seems quite redundant and confusing, should we deprecate it?
22:05:50Araqnote that TFoo.new returns a 'ref TFoo' but 'new(x)' takes a 'ref TFoo'
22:06:15Araqso var x = TFoo.new is the same as var x: PFoo; new(x)
22:07:05Mat2time for some sleep, ciao
22:07:13Araqbye Mat2
22:07:22*Mat2 quit (Quit: Verlassend)
22:13:06dom96perhaps
22:13:18dom96If PFoo has some fields, is PFoo() allowed?
22:13:37Araqyeah unless they need to be initialized
22:13:46Araqlike 'not nil' fields
22:14:55dom96hrm, didn't I mention a case where it complained when I tried to construct an object without specifying any fields?
22:15:47dom96well I can't remember
22:16:42NimBotAraq/Nimrod master c14a0e5 Araq [+0 ±2 -0]: fixes #532
22:17:04Araqdom96: yeah but range[1..x] needs to be initialized too
22:17:13Araqand I think you stumbled upon that
22:17:25AraqTTimeInfo is affected by this too
22:18:58dom96why not just allow default for that?
22:19:09Associat0rAraq: what kind of CPU do you have?
22:19:16dom96for range that would be '1' in that cas.e
22:19:18dom96*case
22:19:46Araqdom96: that's lots of work for a minor feature
22:22:34dom96fair enough
22:22:52AraqAssociat0r: Intel Core 2 Quad 2.5 Ghz
22:23:50*DAddYE_ quit (Remote host closed the connection)
22:24:14EXetoCwhat has bothered me the most I think is the inability to create anonymous instances of 'var'
22:24:22*DAddYE joined #nimrod
22:24:25Associat0rAraq: that didn't have hardware virtualization right?
22:25:11EXetoCAssociat0r: it's a performance feature as well? I tried to find out, but it's never mentioned
22:26:00Associat0ro it has http://en.wikipedia.org/wiki/Intel_Core_2#Models
22:26:29Araqyeah but I run an old version of vitualbox, maybe it doesn't use it
22:27:01Araq4.1.18
22:27:27EXetoCreading up on it now. it might just be that the difference was negligible on early implementations
22:27:37Araqhmm not that old
22:27:41Associat0rhttps://news.ycombinator.com/item?id=6134424
22:27:55EXetoCyeah I know
22:28:40EXetoCI don't need to optimize for speed though, so I can just omit 'var' in many cases
22:28:42Associat0rNimrod could use a mention
22:30:55dom96Associat0r: Why don't you mention it then?
22:33:33Associat0rI'm not intimately familiar with the lang yet
22:34:08Associat0rsame reason that I never mention Rust on HN or reddit
22:37:33Araqeverybody always mentions Rust anyway
22:38:23Associat0rAraq: btw are you gonna address null some day?
22:38:50Araqin my reality the compiler implements full "not nil" checking in git HEAD, Associat0r
22:39:10Araqeffectively making the type system control flow based
22:39:25Araqit's pretty cool :P
22:39:27Associat0rAraq: I mean no nil by default
22:40:12Araqbreaks every wrapper and I'm not sure it's the right default
22:40:35AraqNimrod is not Java where you use references everywhere
22:41:01Araqwhen you use 'ref' you likely create some graph like structure where 'nil' is a valid value
22:41:52Araqand algebraic data types instead often end up using a few more bytes
22:43:51NimBotAraq/Nimrod master 6e3a517 Dominik Picheta [+0 ±1 -0]: Improved documentation for macros.newProc.
22:44:32NimBotAraq/Nimrod asyncmacro 3a3ca55 Yury Benesh [+0 ±2 -0]: Fixed libX11, libXrender bindings for macos and linux.
22:44:32NimBotAraq/Nimrod asyncmacro 7795d2e Yury Benesh [+0 ±4 -0]: Added pkg-config support to xlib, xrender, cairo, cairoxlib
22:44:32NimBotAraq/Nimrod asyncmacro 096eb6a Yury Benesh [+0 ±2 -0]: Some fixes to xlib wrapper
22:44:32NimBotAraq/Nimrod asyncmacro 8fc7909 Yury Benesh [+0 ±2 -0]: Fixed XClientMessageEvent struct, added equals operator fot TAtom from unsigned, added xclient union field access proc to XEvent
22:44:32NimBot31 more commits.
22:45:25Associat0rI see
22:47:01Araqalso I think this whole "not null" thing is vastly overblown, proving array indexes correct is also a "solved problem"
22:47:39Araqand yet nobody thinks it needs to be done at compile time or you're stuck in the 80ies
22:47:55Associat0rI don't think it's overblown at all
22:48:55Associat0rneedlessly checking for null is boilerplate
22:48:58Associat0rand error prone
22:49:31Associat0ralso when something is nullable I want to be forced to check for it
22:49:37Araqwell don't check then, let it crash instead
22:49:58AraqI don't want to be forced to check for it
22:50:20Araqoften it's not-null due to some very complex invariant
22:50:36Araqthat I can't express in the type system
22:50:39Associat0rbut why let it crash if it's not supposed to be valid value at all and can be easily prevented
22:51:17Araqso what do you instead? if (x == null) throw new InvalidArgumentException() ?
22:51:40Araqlet it crash is Erlang's secret for robustness :P
22:52:42Associat0rnull would be None and I would check it with a combinator like getOrElse or pattern match over it
22:52:53Associat0rif I forget about it I would get a compile-time error
22:53:12Araqyeah sure
22:53:35Associat0rif it's not supposed to be null, I wouldn't have to throw an exception
22:54:22Associat0rwell not an exception related to null anyway
22:54:28Araqan AST node has an optional type node
22:54:44Araqnow check for node.typ != null everywhere in your compiler
22:54:54Araqand tell me it's not annoying and you end up with
22:55:43Araqmatch node.typ {
22:55:50Associat0rwith a combinator it's not annoying
22:55:51EXetoCthe "extraction" part doesn't have to be very verbose though
22:55:57Araq None: InternalError("...");
22:56:07Araq Some(x): < logic here>
22:56:07Associat0rthe combinator is supposed to abstract the explicit matching
22:56:09Araq}
22:56:48Araqright the combinator
22:57:00Associat0ralso if you don't check for it and it is null in your case it would crash at runtime instead
22:57:12Araqdoes that happen to involve lots of expensive closures?
22:57:28Araqyeah, it'll crash instead
22:57:38Associat0rdoesn't have to be expensive
22:57:40EXetoCx.unwrap()
22:57:43Araqbig deal, I'll get a stack trace anyway
22:57:47Araqand fix it
22:57:58Araqsame for the internalError()
22:58:40Associat0rwell it's a typed language why not leverage the type system?
22:59:03Araqbecause the type system is not nearly expressive enough for this?
22:59:12Araqunfortunately
23:09:39Araqgood night
23:09:46EXetoCso a tagged union is no good? such verbose matches can be abstracted away
23:09:48EXetoCbye
23:10:05Associat0rGN
23:13:36BitPuffinbtw Araq, wayland has a stable api now, maybe it's time to add a wrapper for it :)
23:19:49EXetoC!? a.intersects(b)
23:19:58EXetoCabstracting shit is fun in expressive languages :>
23:20:44dom96Are you guys doing the upcoming Ludum Dare?
23:22:14EXetoCnah
23:22:30dom96aww why not?
23:24:45EXetoCwell, I prefer to re-invent the wheel, and my wheel is fairly square-shaped atm
23:26:12dom96I would like to try it again, and if someone else competed using Nimrod too it would boost my motivation :P
23:26:58*Sergio965 quit (Read error: Operation timed out)
23:33:39dom96good night
23:34:47EXetoCsomeone else then maybe. I'm not a good candidate :>
23:34:50EXetoCbye
23:41:35BitPuffindom96: I could participate, but I have to work on my real project(s)