<< 27-01-2014 >>

00:02:13*brson quit (Ping timeout: 248 seconds)
00:05:51*darkf joined #nimrod
00:09:42*BitPuffi1 joined #nimrod
00:12:17*BitPuffi1 is now known as BitPuffin
00:34:21Discoloda''
00:34:24Discoloda'
00:41:21BitPuffinStill must say that being able to define a || operator that let's you do |a| would be beyond badass
00:48:35fowlwhat is |a|
00:53:13*filwit joined #nimrod
00:53:45filwithey guys, i'm trying to modify my fork of Nimrod/devel
00:53:50filwitbut not the best at git
00:54:06filwiti want to make sure i'm not changing master. Steps?
00:54:33reactormonkfilwit, git checkout devel
00:54:36filwitgit pull upstream; git merge upstream/master; git checkout upstream/devel
00:55:08filwitreactormonk: ^ those steps are all ?
00:55:40filwitthen when i modify a file, it will be on my own devel branch?
00:55:55filwiti only ask cause of the 'upstream' (it wont let me just checkout 'deve')
00:56:12BitPuffinhaha
00:56:13reactormonkhm
00:56:14BitPuffinI know this guy
00:56:15filwiti see a 'origin/master' but everything else is 'upstrea/...'
00:56:16BitPuffinhttp://www.reddit.com/r/gifs/comments/1w862f/they_wanted_to_shoot_me_making_games_on_local_tv/
00:56:31BitPuffinWell "internet know" him
00:56:35reactormonkfilwit, go ask in #git
00:56:37BitPuffinbest gif 2014
00:56:38filwitBitPuffin: literally just saw that 2 minutes ago, lol
00:56:38BitPuffinsrsly
00:56:45EXetoC:p
00:56:51filwitreactormonk: k
00:57:29EXetoCslightly higher WPM than me
00:57:30filwitjesus.. 1000+ folks in #git
00:58:47BitPuffinhttp://hackertyper.com/
01:05:54BitPuffinhttp://youtu.be/u8qgehH3kEQ wow
01:06:08filwit1000+ people and no one is answering me :(
01:07:14BitPuffinfilwit: welcome to irc
01:07:17filwitreactormonk, reason i ask, is cause koch on my devel branch fails (at compiler/types.nim) but the devel branch on the real repo succeeds
01:09:08filwitah, nevermind, i think there was a merge conflict
01:09:15filwitthat's probably the reason
01:09:36filwithow to make the upstream overwrite my local repo?
01:10:03filwitguess i should just google it...
01:23:16reactormonkfilwit, delete the local branch, recreate it
01:24:04filwitreactormonk: i'll try that, but someone from #git his helping me now
01:28:34fowlgit it super confusing
01:28:47fowland there are no decent gui clients for it :/
01:29:25filwitnever really used anything else besides SVN, and i much prefer GIT
01:30:33filwitps. reactormonk: here's an output of some git branch -a, and git log: https://gist.github.com/PhilipWitte/8641866
01:32:13reactormonkfilwit, I'd go for the nuclear option and just git branch -D devel and git checkout -b devel upstream/devel
01:32:47BitPuffinfowl: hg
01:32:49filwitreactormonk: great, thanks
01:32:52BitPuffinand filwit, hg
01:32:58filwithg?
01:33:26BitPuffinhttp://mercurial.selenic.com/
01:33:30EXetoCshort for hug
01:33:48reactormonkBitPuffin, kinda dead from what I've heard
01:34:22BitPuffinreactormonk: you've heard wrong but ok
01:34:30*xenagi joined #nimrod
01:34:53reactormonkBitPuffin, kk. Sadly, git has github. So that's gonna stick for a while.
01:35:03BitPuffinreactormonk: true
01:35:12BitPuffinreactormonk: however bb is quite nice
01:35:21filwitonly other repo i'd consider is Bazaar
01:35:33filwitbut really happy with git so far really
01:35:33reactormonkwasn't that the dead one? ^^
01:35:35EXetoC"GET /myadmin/scripts/setup.php" lul
01:35:41BitPuffinnot as good as gh maybe but still doesn't lack anything I need
01:35:47BitPuffinlol bzr
01:36:03reactormonkGot three seqs, how do I create the product of them?
01:36:05filwittons of AUR packages use bzr...
01:36:05BitPuffinyeah bzr is get
01:36:13BitPuffinit's ONLY used by canonical
01:36:16BitPuffinand when I say get
01:36:17BitPuffinI mean dead
01:36:24filwitno.. Inkscape
01:36:32filwitsome others, i forget now though
01:36:35BitPuffinEXetoC: stop typing stuff that I read while typing
01:36:36filwiti think maybe GIMP
01:36:45*noam joined #nimrod
01:36:58BitPuffinfilwit: No don't think so
01:37:08BitPuffinbut yeah there is a few
01:37:10BitPuffinbut not many
01:37:22BitPuffinkazam or whatever dafuq it's called uses it I believe
01:37:50filwitBlender just switched to Git, so that means Git > All
01:37:59filwitplus Linus wrote it so...
01:38:06filwitunquestionable king
01:39:23EXetoCBitPuffin: ok
01:40:11*Varriount|Mobile quit (Remote host closed the connection)
01:40:27*Varriount|Mobile joined #nimrod
01:41:30BitPuffinEXetoC: deal
01:48:08EXetoCbacon
01:54:49BitPuffinI ate that today
01:54:53BitPuffinor I guess it's yesterday now
02:01:16EXetoCyum
02:01:16*EXetoC quit (Quit: WeeChat 0.4.2)
02:09:56*ddl_smurf joined #nimrod
02:16:46filwithow do i build Nimrod without Koch?
02:17:29filwitcompile/nimrod.nim?
02:17:33filwitcompiler*
02:17:53filwitso just $ nimrod c compiler/nimrod
02:17:56filwitanything else?
02:18:33filwitnevermind, still fails, wtf..
02:19:39filwitanyone else getting: compiler/types.nim(454, 33) Error: ')' expected; when trying to build from devel? it doesn't happen on the real repo, but happens on my fork
02:50:42*filwit quit (Quit: Leaving)
02:53:05reactormonkanyone got product code?
03:08:09Varriount|Mobilehuh?
03:18:33*aftershave joined #nimrod
03:19:32reactormonkproc product[T](x: openarray[seq[T]]): seq[seq[T]] =
03:24:25*Boscop quit (Read error: Connection reset by peer)
03:29:06Varriountreactormonk: What kind of product? Unordered, no repeats, ?
03:33:28*renesac quit (Ping timeout: 245 seconds)
03:35:53*brson_ quit (Quit: leaving)
03:43:00fowluse sequtils
03:43:53Varriountfowl: Sequtils doesn't have cartesian product, iirc
03:52:22xtagonDoes anyone know if there's a good example of how to use execProcess? I'm trying to figure out how to pipe a string to a command, then the stdout of that command to another command. It's easy to do in bash, but I want to do it in Nimrod
04:02:59*BitPuffin quit (Quit: WeeChat 0.4.2)
04:03:21*BitPuffin joined #nimrod
04:03:44*werebutt joined #nimrod
04:03:45*werebutt left #nimrod (#nimrod)
04:08:42reactormonkVarriount, unordered. there's a unique in sequtils, so no repeats is fine. Unordered too.
04:15:17*aftershave quit (Quit: Computer has gone to sleep.)
04:42:10*DAddYE joined #nimrod
04:42:25Varriountreactormonk: If I had the time, I would write up some code, but unfortunately I have to write an essay using vaguely stated directions
04:42:34*renesac joined #nimrod
04:43:41Varriountreactormonk: The basic outline of a variadic cartesian product procedure would be to use a binary product procedure (two nested 'for' loops) on the given elements, accumulating the results.
04:45:23VarriountSee this D code for an idea - https://github.com/quickfur/phobos/commit/1b90ce37021de777cc2a6d7d9e32a8625ca4a100
04:46:40*renesac quit (Ping timeout: 245 seconds)
04:52:53reactormonkVarriount, oh, I like the idea of inline unittests
04:53:41VarriountHuh?
04:53:48reactormonkVarriount, in the file linked ^^
04:53:56reactormonkhttps://github.com/quickfur/phobos/blob/1b90ce37021de777cc2a6d7d9e32a8625ca4a100/std/algorithm.d
04:55:18Varriountreactormonk: That's what we we have 'when isMainModule' for.
04:55:35reactormonkVarriount, yup, but that kinda drags it to the end of the file
04:55:52VarriountOr right after the procedure.
04:56:05VarriountThe unittests don't have to be in one clump.
04:58:10Varriountreactormonk: If you get a product procedure working right, add it to algorithms.nim and send in a pull request.
04:58:14VarriountGood luck!
04:58:47*renesac joined #nimrod
05:04:42*xenagi quit (Quit: Leaving)
05:25:43*Demos quit (Read error: Connection reset by peer)
05:47:09*isenmann joined #nimrod
06:03:37*bbodi joined #nimrod
06:03:50*xtagon quit (Quit: Leaving)
06:04:54*Varriount|Mobile quit (Quit: AndroIRC - Android IRC Client ( http://www.androirc.com ))
06:08:45*vbtt joined #nimrod
06:09:40vbtthello
06:16:35vbttcan someone review the last example for type classes here: http://vocalbit.com/posts/exploring-type-classes-in-nimrod.html
06:18:54*vbtt quit (Quit: Page closed)
06:31:23*renesac quit (Ping timeout: 245 seconds)
06:35:09*Mordecai joined #nimrod
06:36:31*psquid quit (Ping timeout: 272 seconds)
06:44:03*renesac joined #nimrod
06:45:55*bbodi quit (Ping timeout: 253 seconds)
07:05:22*Mat3 joined #nimrod
07:05:32Mat3hi all
07:10:02*vbtt joined #nimrod
07:10:27vbtthi Mat3
07:23:34Mat3hi vbtt
07:36:49*zahary joined #nimrod
07:38:29Mat3hello zahary
07:38:29vbtthi zahary
07:39:11vbttzahary: when you get a chance can you please verify the last example on http://vocalbit.com/posts/exploring-type-classes-in-nimrod.html
07:41:57*DAddYE_ joined #nimrod
07:44:01*DAddYE quit (Ping timeout: 272 seconds)
07:49:20zaharyvbtt: sure, the code is correct, but I haven't tried yet to test it / fix it
07:49:29zaharyhi Mat3
07:50:01vbttzahary: thanks - just want to make sure the code is correct. last time i wrote a rushed example and it was incorrect.
07:52:01*DAddYE_ quit (Remote host closed the connection)
07:52:29*renesac quit (Ping timeout: 240 seconds)
07:54:37Mat3I'm puzzled again how to implement unions in Nimrod. The reason for this is, using unions in C is useful abstracting endian dependent storage and I can't think of a rational reason for a system-programming language as Nimrod not directly support it - specially as Nimrod compiles to C
07:56:22vbttMat3: did you look at object variants?
07:56:34vbttit's a better version of unions
07:56:57vbttMat3: http://nimrod-lang.org/tut2.html#object-variants
07:57:16*aftershave joined #nimrod
07:57:17Mat3yes, but compiling to unions can't be granted
07:57:53vbttMat3: why do you care about the compiled code?
07:58:51Mat3because low-level programming is endian dependent (and I'm wrote a JIT compiler)
07:59:19vbttah i see. will casting not work for you either?
07:59:32Mat3no
08:01:06vbttyou'll have to ask araq. i'm not sure what c unions will give you that can't be achieved by casting in nimrod.
08:01:09Mat3my current solution is encapsulating code-storage though an object which explicitly handles endian conversion (but that's an ugly effort compared to C)
08:01:51Mat3there also exist a module for that purpose
08:02:04vbttMat3: that sounds reasonable - the performance should be comparable to c anyway, no?
08:02:18vbttyou only have to define this object once, i hope.
08:02:24Mat3yes of course
08:03:14AraqMat3: in theory 'cast' can be used instead of 'union' for everything
08:03:23Mat3hi Araq
08:03:38Araqin practice it can suck ;-)
08:03:39*DAddYE joined #nimrod
08:04:10Araqso yeah, unions and bit fields will be supported with yet another pragma (yap)
08:04:11*DAddYE quit (Remote host closed the connection)
08:04:17*DAddYE joined #nimrod
08:04:48Mat3thanks
08:06:02*renesac joined #nimrod
08:06:19Mat3hi DAddYE and renesac
08:08:28vbttbtw does anyone use aporia?
08:09:48Mat3Araq: I'm think finishing my documentation today and start working on the Nimrod subset (Ninive sounds a good name for it)
08:10:10Araqok great
08:10:22Araqvbtt: I use it all the time on both linux and windows ...
08:10:58vbttAraq: cool. i'll give it a shot then - sounds stable enough. hope it supports other languages..
08:14:18Araqit does
08:20:36vbttlater, guys
08:20:45Mat3ciao
08:20:54*vbtt quit (Quit: Page closed)
08:22:45Mat3in danger repeating me: The lua economy established an effort bringing Lua to system applicage with similar goals to my project: http://www.eluaproject.net/
08:24:14Mat3there also exist some projects like that for various Basic dialects and not to forhet C# of course (even ML as I see)
08:24:45Mat3^forget
08:25:30Mat3so the race is started ;)
08:26:00Mat3(or the race is on ? anyhow)
08:27:27AraqMat3: that doesn't change the fact that Lua is a pita to debug with its cascading nil values ...
08:28:32Araqtuple[a: bool, b: int16] # 4 bytes in nimrod, now try the same with Lua and you're fighting the language
08:29:03Mat3I know (somehow Lua fans does not see the relevance of that argument however)
08:29:36Araqfyi I wrote the first version of "pas2nim" in Lua ... :-)
08:30:03Araqsomehow the simpler language didn't lead to simpler code ;-)
08:32:07Mat3I once wrote a specific filter for raw-satellite data in Lua (rewrote that mess in Forth later)
08:32:37Mat3my experience with Lua is as bad as yours
08:34:17Mat3anyhow; There exist fine Basic dialects for embedded systems ;)
08:39:18*Mordecai quit (Ping timeout: 245 seconds)
08:39:42*Mordecai joined #nimrod
08:39:49Mat3hello Mordecai
08:41:17*zahary quit (Quit: Leaving.)
08:43:02*mal`` quit (Read error: Operation timed out)
08:43:31*mal`` joined #nimrod
08:54:12*zahary joined #nimrod
09:03:28*zahary1 joined #nimrod
09:05:41*zahary quit (Ping timeout: 248 seconds)
09:13:04*DAddYE quit (Remote host closed the connection)
09:16:35*zahary1 quit (Ping timeout: 252 seconds)
09:35:15*CarpNet joined #nimrod
09:41:22*silven quit (Remote host closed the connection)
09:44:21*silven joined #nimrod
10:06:57*aftershave quit (Quit: Computer has gone to sleep.)
10:14:08*DAddYE joined #nimrod
10:18:49*DAddYE quit (Ping timeout: 272 seconds)
10:21:22*aftershave joined #nimrod
10:33:41*ics quit (Ping timeout: 248 seconds)
10:35:30*ics joined #nimrod
10:37:29*BitPuffin quit (Ping timeout: 240 seconds)
11:09:08Mat3ciao
11:09:17*Mat3 quit (Quit: Verlassend)
11:11:32*EXetoC joined #nimrod
11:15:44*DAddYE joined #nimrod
11:16:32*DAddYE_ joined #nimrod
11:20:37*DAddYE quit (Ping timeout: 272 seconds)
11:21:15*DAddYE_ quit (Ping timeout: 272 seconds)
12:45:49*BitPuffin joined #nimrod
12:50:21*BitPuffin quit (Ping timeout: 252 seconds)
12:58:10renesacAraq, is the devel compiler already capable of compiling the Particle Bench with glfw?
12:59:45renesacbtw, the case inconsistency in our ParticleBench will bite us in the compressed source size comparison
13:01:35*Mordecai is now known as psquid
13:15:08*[1]Endy joined #nimrod
13:38:17*delian66 joined #nimrod
13:40:08EXetoCrenesac: I don't know, but the VM ICE triggered by glfw.nim was fixed recently
13:40:42EXetoCok N.nim segfaults
13:40:58*_nano quit (Ping timeout: 245 seconds)
13:41:00renesac:/
13:48:49EXetoCrenesac: it does work. I forgot to pull
14:03:11*bbodi joined #nimrod
14:03:17bbodihi all
14:03:47bbodiI have a simple data structure and a proc, which dont want to be compiled :)
14:04:03bbodiPSelectItem*[T] = ref TSelectItem[T]
14:04:03bbodiTSelectItem*[T] = object
14:04:20bbodiproc drawItem*[T](item: PSelectItem[T]) =
14:04:25bbodiit throws me internal error
14:04:37bbodiwith the latest version of the compiler
14:04:54bbodidou you see any problem with that code?
14:05:07bbodi(TSelectItem contains some trivial fields of course)
14:06:20EXetoCthat alone compiles for me and I don't know if anything similar has been reported
14:08:06renesacEXetoC: \o/
14:08:18renesacthen I will move back to nimrod devel head
14:13:54bbodiEXetoC: thanks, then I will investigate further
14:15:26bbodiYeah, found, its a serious bug! I forgot to put the [T] after the type-name in one of my variable, but the compiler didn't complain about it. I try to reproduce then make an isse about it
14:18:16*darkf quit (Quit: Leaving)
14:35:28bbodiCan we use methods with generic types?
14:36:15bbodilike that: method handleEvent*[T](self: PComboBox[T], event: PEvent) =
14:41:30*io2 joined #nimrod
14:55:52Discolodais reddit down for you guys?
14:57:28OrionPKnope
15:05:32*vendethiel quit (Remote host closed the connection)
15:05:51*vendethiel joined #nimrod
15:31:34OrionPKhmm reddit on my phone seems to be down thigh
15:31:36OrionPKthough
15:31:58OrionPKoh, nevermind
15:42:18*bbodi quit ()
15:45:25*io2 quit (Ping timeout: 245 seconds)
15:46:04renesacreddit is probably unstable
16:03:02Discolodaim thinking websites that use the amazon cloud was/is unstable
16:09:33*BitPuffin joined #nimrod
16:21:42*io2 joined #nimrod
16:22:58*zahary joined #nimrod
16:27:12*Mat3 joined #nimrod
16:27:31Mat3hi all
16:31:55renesacfilwit: I'm having the same error trying to compile nimrod devel from my fork
16:32:10renesacdid you get any clue of what was wrong?
16:33:05*Mat3 is now known as Mat3-bbl
16:35:56*Mordecai joined #nimrod
16:37:23*psquid quit (Disconnected by services)
16:37:25*Mordecai is now known as psquid
16:43:02*renesac is now known as renesac|away
16:55:14*nueva joined #nimrod
16:59:51*zahary quit (Quit: Leaving.)
17:06:05nuevaEXetoC: here is a patch for current devel HEAD to fix errors when compiling with -d:useFFI http://pastebin.com/zCfcNJxe
17:06:54nueva*when compiling compiler
17:14:18*Demos joined #nimrod
17:16:25nuevaDemos: do you have sources of VisualStudio project support available somewhere?
17:17:19nuevacan somebody provide an example of idetools command usage?
17:19:14*Varriount|Mobile joined #nimrod
17:20:44Varriount|MobileAraq: I think there is a syntax error present in one of the branches that is preventing users from building Nimrod. See the most recent issue on GitHub
17:22:16*tdc joined #nimrod
17:25:33*BitPuffin quit (Ping timeout: 245 seconds)
17:41:10renesac|awayVarriount|Mobile, filwit: putting some parenthesis on the pointed spot fixed it, and I managed to compile it
17:43:04Demosyay!
17:43:07DemosI got the same problem
17:43:12renesac|awaywhat a difference, 48 seconds to bootstrap compiling itself 3 times vs 43 minutes for compiling from the provided cpp sources in rust
17:43:35Demosis rust written in cpp?
17:43:39renesac|awayI will report on the github issue
17:43:45renesac|awayno, I think it is written in rust
17:44:01renesac|awaybut the tar.gz file I download was full of cpp sources
17:44:28Demoswierd. maybe the nimrod bootstrap process is better aobut dependencies
17:44:47renesac|awayor maybe because it compiles to c instead of cpp...
17:44:55dom96renesac|away: What did you turn the line into? internalAssert(false) ?
17:45:12*renesac|away haven't tried the cpp mode from nimrod
17:45:19renesac|awaydom96, wait a minute
17:46:03renesac|away else: (internalAssert(false); "")
17:46:12renesac|awaythis did the trick
17:46:36dom96that's what I thought
17:47:10renesac|awaymaybe the devel compiler can compile that w/o parenthesis, but the master can't
17:47:27dom96indeed, or a previous version of devel.
17:48:08*renesac|away is now known as renesac
17:48:12NimBotAraq/Nimrod devel c3e531b Dominik Picheta [+0 ±1 -0]: Fixes #848.
17:48:14Demosrenesac|away: c is not really faster to compile than cpp aside from the fact that cpp shares c's compalation model and when combined with some of cpp's features that can force more files into the header
17:49:14Demosalso, I just submitted a pr to add my alpm wrapper to babel... just so someone knows
17:49:59Demos43mins seems excessive, were you using MSVC 11 or something?
17:50:06DiscolodaDemos: its the template instantiation, each translation unit gets new instances of templated classes/functions
17:50:28DemosDiscoloda: I mean sure. But I think more problematic is just the way headers work
17:50:52Demoscombined with the need to put templates in headers can cause a snowball effect where tons of code is included in each TU
17:51:10NimBotnimrod-code/packages master 10855fb charlie [+0 ±1 -0]: added libalpm package
17:51:10NimBotnimrod-code/packages master c0e3bfd Dominik Picheta [+0 ±1 -0]: Merge pull request #45 from barcharcraz/master... 2 more lines
17:51:12Discolodawell, that is why cpp usually takes longer than c
17:51:24Demostrue
17:51:51Demosand because C projects tend to be lower level and have less dependencies (LOOKING AT YOU BOOST)
17:52:23DemosI have worked on a c++ project where just including one header from a certain library would make the TU take 20sec to compile
17:52:40Discolodalol
17:52:43renesacDemos, I'm using g++ and executing the make
17:52:56Demosbut yeah. Nimrod compile times are quite nice. I am a little suprised the rust is so sluggish
17:52:58renesacI don't know why it took so long
17:53:21renesacnote that I didn't compile any rust code, the rust compiler itself can be fast
17:53:28Demosright
17:53:39renesacbut building the compiler from the tar.gz provided was very slow...
17:54:06dom96Doesn't Rust have to build its own version of LLVM or something?
17:54:24Demoshm, if it did that would be the problem
17:54:44dom96I recall reading somewhere that that is the reason why it is so slow.
17:54:54Demosbut even gcc is faster than 40mins (esp if you exclude like fortran, ada and xcompile)
17:55:48Demosandhow nimrod's bootstrap process is better than pie and it makes us happy
17:56:28*icebattle joined #nimrod
18:00:20renesac:)
18:01:25*Demos quit (Ping timeout: 272 seconds)
18:04:20*bbodi joined #nimrod
18:04:54reactormonkcompiling to C has a few distinctive advantages
18:06:32*BitPuffin joined #nimrod
18:11:51*DAddYE joined #nimrod
18:16:10*Varriount|Mobile quit (Remote host closed the connection)
18:18:52NimBotAraq/Nimrod devel 50e7129 Dominik Picheta [+1 ±2 -1]: Finished logging module.
18:27:11*brson joined #nimrod
18:32:32*ics quit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
18:38:18*ics joined #nimrod
18:46:16reactormonkif someone is interested in writing a product for the algorithm.nim, here are the tests: http://dpaste.com/1572533/
18:47:09reactormonkhttp://dpaste.com/1572542/ actually.
19:09:28*aftersha_ joined #nimrod
19:09:44*aftershave quit (Quit: Computer has gone to sleep.)
19:26:22*io2 quit (Read error: Operation timed out)
19:36:11*BitPuffin quit (Ping timeout: 260 seconds)
19:42:22*reactormonk quit (Quit: WeeChat 0.4.1)
19:47:44*brson quit (Quit: leaving)
19:48:00*brson joined #nimrod
19:57:10*xtagon joined #nimrod
19:59:01*Mat3-bbl is now known as Mat3
20:12:15*io2 joined #nimrod
20:13:18*Mat3 do not know why new languages like Rust features a C oriented syntax
20:14:22VarriountMat3: Because the languages are designed for masochists
20:14:42Mat3hello Varriount
20:15:47EXetoCfamiliarity IIRC
20:16:19EXetoC>.>
20:17:00Mat3hi EXetoC
20:25:12*Icefoz joined #nimrod
20:30:33EXetoClo
20:31:20*Icefoz quit (Quit: leaving)
20:36:01renesacMat3, in rust they argued about conceptual parser simplicity
20:36:11renesacall could be condensed in a simple line to be compiled
20:37:41renesacand there are many JS programmers that hates the idea of "automatic semicolon insertion"
20:39:45*bbodi quit (Ping timeout: 272 seconds)
20:39:49renesacand probably never learned python's way of getting rid of semicolons while mantaining flexibilty of multiline expressions
20:40:34renesacthey prefer paying for this flexibilty every line, instead of putting a parenthesis in the rare lines when they need
20:41:07renesacor not even that, because usually you already have some handy break point
20:41:42renesacand they think about method chaining, not functions with multiple optional named parameters
20:41:50Mat3Forth is an example for parser simplicity: Only white spaces needed + RPN
20:43:08renesacthe latter is much easier to split in multiple lines w/o the need of any superfulous extra characters
20:43:54renesacbut the former is the Java/C++ way
20:46:57Mat3hmm, I think the Fortran syntax for example is far more readable and can be parsed with comparable effort
20:55:36*Discoloda left #nimrod (#nimrod)
20:56:28Mat3anyhow, there seem to like curly braces and related noise, so its ok
20:56:47Mat3(for them)
20:57:59*aftersha_ quit (Quit: Computer has gone to sleep.)
20:58:26*[1]Endy quit (Ping timeout: 264 seconds)
21:01:37renesacwell, curly braces are redundant, and this redundancy may be useful when for some reason you lost the identation
21:02:02renesacyou can then reconstruct the program structure and identation from the curly braces
21:02:38Araqyeah but if the braces and the indentation disagree, whom do you trust? ;-)
21:02:40renesacthe common cited situations are: code pasted as plain text in e-mails and comments, copy-paste in code refactoring
21:02:44*XAMPP joined #nimrod
21:02:44*XAMPP quit (Changing host)
21:02:44*XAMPP joined #nimrod
21:03:17renesacthe first one can be worked around pointing to code hosted in proper places
21:03:31*Discoloda joined #nimrod
21:03:52renesacthe second one I never understood because I never worked with a IDE that fixed those things up for me
21:04:24renesacor better, I never worked enough time to bother learning all the ins-outs of the IDE
21:04:56Araqrenesac: it's however *very* simple to design a syntax that neither requires ';' nor newlines
21:05:10Araqit does require {} or 'end' though
21:05:18renesacbut selecting the copied code and tabbing/un-tabbing around aways looked simple for me
21:05:34renesacit would be more difficult if I had also to fix {}
21:06:08renesacAraq, any language that way?
21:06:27renesacwell, I bet there are many
21:06:29Mat3doesn't one advantage of structured languages where once there independence from syntactical elements like blocks ?
21:06:41renesac?
21:07:22Mat3why does one need curly braces in loops where a simple end statement would be sufficient ?
21:07:51Araqrenesac: in fact only some dialects of basic come to mind
21:07:52renesacto not type the end statement
21:09:06Araqoberon iirc doesn't require semicolons at all
21:09:18renesacwell, brainfuck can be written all in one line, and dont't need newlines nor ;
21:09:18Araqbut it never occured to wirth they are not necessary
21:09:19renesac:P
21:09:23Mat3DO i = n, someCall (x) ... endDO (Fortran)
21:09:43Mat3also no visible line terminator needed
21:09:48Mat3at all I mean
21:09:50renesacruby and lua are also this style
21:09:54renesacI find it kinda ugly
21:09:58renesacand lolcode
21:10:26renesacI much prefer indentation defined blocks
21:11:14Mat3I think it's more readable because of a syntax holding no renundant information (which I call noise)
21:11:38renesacMat3: hopefully there is correct identation, so it is redundant too
21:12:44Mat3in Fortran (beside archaic Fortran 77) the parser does not depend on identation at all
21:13:09Mat3only white-space sperated tokens
21:13:14Mat3^seperated
21:13:22renesacyeah, that is true for (almost?) all languages with this kind of redundancy
21:13:50renesacthey thus allow misleading identation, as araq said
21:15:02renesacI don't like when people say "white-space sensitive", because it sounds like "invisible-space"
21:15:32renesacwhen the things it depends on are very visible from the non-white characters that must be around the white-space
21:15:53Mat3it's even true for APL: (2=0 +.= T o.|T) / T←ιN
21:16:30renesacand almost all languages depends on one type or other of white space, simple space between tokens being the most common
21:16:37*vbtt joined #nimrod
21:16:42Araqyup
21:16:50Mat3because some seperation must be exist
21:16:52renesacMat3, IIRC there was a 70's language that didn't care about spaces
21:17:12Araqand if it doesn't, it's weird too: while (n-->0) ...
21:17:44vbttyou can say 'compulsory indentation' instead of 'whitespace sensitive'
21:17:59vbtt(as opposed to 'compulsory braces')
21:18:02renesacI usually say "identation sensitive" or "identation defined"
21:18:08Araqyou can also say "layout based parsing"
21:18:27fowlruby is whitespace sensitive, "method &foo" is different from "method&foo" and "method & foo"
21:19:08renesacfowl: space between identifiers and operators
21:19:12renesac^^"
21:19:15Mat3FORi=1TO1000STEP2:PRINTi:NEXTi (hurrah! it work's)
21:19:33EXetoCnice
21:19:40fowland if you give up paren-less function calls you dont need semicolons
21:19:58fowlecho(foo)x.blah()
21:20:14vbtti dont like paren-less function calls fwiw.
21:20:31renesac[19:04:56] <Araq> renesac: it's however *very* simple to design a syntax that neither requires ';' nor newlines <-- how we could forget LISP?
21:20:57renesacparenthesis, parenthesis everywhere!
21:20:59Araqrenesac: Lisp is in its own league, that's why
21:21:34Mat3(setq y '(defun multi (x) (* x x)))
21:22:05Araqvbtt: paren-less function calls ftw
21:22:17Araq() are annoying
21:23:39Mat3SET y TO multi :x x * x END
21:23:49Mat3(Logo)
21:26:37Mat3anyhow: I feel most curly-bracers would be quite happy with lisp if the braces would be replaced with curly-braces ;)
21:28:35renesacI'm checking the new paren-less nimrod function calls
21:29:10Mat3oh, is there a new compiler version out ?
21:29:11renesacI'm trying to get a "adding line to a single line C if" kind of pitfall
21:29:31renesacMat3, I'm compiling the devel head from github
21:30:03Mat3ok, I will wait for for the next stable version
21:30:05renesacbut so far nimrod isn't letting me make function calls that when extended with a second argument become wrong
21:30:18renesacthat is good
21:30:40vbttrenesac:what's the new function call syntax?
21:30:59renesacAraq can explain better than me
21:31:22renesacor maybe link to the place where it is explained
21:32:19vbtt(I thought nimrod already had that)
21:32:58NimBotnimrod-code/nimbuild master 22d158e Dominik Picheta [+0 ±1 -0]: Fixed dummyhub crashing on accept.
21:33:03Araqvbtt: nimrod only had it for statements, but I extended it to expressions
21:33:21Mat3ncie !
21:33:28Mat3sorry, nice !
21:33:53Araqecho foo bar
21:33:55Araqis
21:33:59Araqecho(foo(bar))
21:34:15Araqecho foo bar, baz
21:34:17Araqis
21:34:23Araqecho foo(bar, baz)
21:34:42renesacAraq: you already checked/thought in the kind of pitfall I'm trying to trigger?
21:35:01OrionPKpretty soon i'll be able to just copy paste well formatted english and compile it via nimrod
21:35:30vbtti see
21:35:37Mat3get some sleep, ciao
21:35:42Araqrenesac: not sure but I added tests/parser/tcommand_as_expr.nim
21:35:59*Mat3 quit (Quit: Verlassend)
21:37:16vbtta b c, d
21:37:22vbtta(b(c,d)) ?
21:37:23vbttor
21:37:31vbtta(b(c), d) ?
21:38:07Araqthe former of course
21:38:09renesacright, already found one questionable situation:
21:38:10renesachttps://gist.github.com/ReneSac/a638e1f9d3da866e1f55
21:38:15renesacthis is kinda confusing
21:38:29renesacbut of course, is not a bug
21:38:40*tdc quit (Quit: Leaving)
21:39:59Araqrenesac: initially I wanted to disallow that but found it hard to do with the current grammar :P
21:40:43Araqmost important use case is the upcoming 'await' and 'spawn' calls which really need
21:41:01Araqlet foo = spawn bar(a, b)
21:41:14vbttwhy not just make them keywords? they're special enough.
21:41:18renesacthe problem is that when you first wrote that code, the 'optarg' proc didn't had an optional argument
21:41:27renesacand your code printed both fine
21:41:53Araqrenesac: that's a very good point
21:41:57renesacand then, by simply someone adding that optional argument in a library function you used, you have a bug
21:42:14vbttgood catch!
21:42:36Araqrenesac: yeah makes me reconsider my design
21:42:43*renesac was smelling something fish, glad I could capture it
21:43:09vbttlet foo = spawn(bar a, b)
21:43:10Araqvbtt: the point is to implement 'await' as a macro though
21:43:16renesac*fishy
21:43:17vbttthat will work too..
21:44:08vbtthm, perhaps only macros can be called without parens. makes them special at least.
21:44:50Araqvbtt: that doesn't help anything and violates a core design rule of nimrod
21:45:07vbttwhich rule?
21:45:18Araqwhich is to consiously decouple the syntax from the semantics
21:46:07Araqmultiple call syntaxes and multiple routine kinds (template, proc etc.) but you can use any call syntax for any routine
21:46:17EXetoCdom96: is {.nimcall.} in jester.nim an optimization? I doubt it makes a noticeable difference. replacing the two instances with {.closure.} fixes my issue
21:46:28vbttiow, it's a PSL (programmer specific language)
21:46:54vbttwhat's wrong with async(foo(a, b)) ?
21:47:00Araqbecause it's pretty Lisp-y under the hood ;-)
21:47:48Araqalso operator overloading and getters and setters all suggest that's what a language should do :-)
21:47:55dom96EXetoC: What's your issue?
21:48:18EXetoCdom96: that a closure is required in my case
21:48:23Araqvbtt: too many () and not consistent with 'return' etc.
21:48:34dom96EXetoC: Why would it be?
21:48:54dom96EXetoC: Is this you trying to have a 'get "/":' inside a proc?
21:49:03EXetoCdom96: yes
21:49:27dom96EXetoC: Please report it as an issue.
21:49:45dom96I will take a look at it when I have more time.
21:50:15EXetoCdom96: PR sent
21:50:35Araqrenesac: your pitfall is wrong, I think
21:50:36vbttreally? what's the setter syntax? (can't remember it cause it's not symmetrical to getter syntax)
21:50:49Araqproc `foo=`
21:53:03Araqrenesac: parsing doesn't look at proc definitions
21:53:07Araqso this:
21:53:14EXetoCwill echo"x", "y" remain disallowed?
21:53:21Araqproc optarg(x:int):int = x
21:53:22Araqproc singlearg(x:int):int = 20*x
21:53:24Araqecho optarg 1, singlearg 2
21:53:27Araqfails
21:53:37Araqas it passes 2 arguments to 'optarg'
21:54:00vbttAraq:why does it need to be consistent with 'return'? it's not a special control-flow statement, is it? ;)
21:54:48Araqweill 'await' is sugar for 'yield' so arguably it is a control-flow statement
21:55:15vbttjust curious - is 'if' implemented as a macro?
21:55:20Araqrenesac: you need to try harder :P
21:55:30Araqvbtt: no
21:55:59Araqin fact, keywords are the ugliest part in nimrod's syntactical design
21:56:11Araqbut they are also very hard to get rid of
21:57:33vbtti guess i understand the design philosophy better..
21:57:40vbttand disagree with it.
21:58:38AraqI can imagine
21:59:03Araqbut what's the alternative? IMHO there is none
22:00:10vbttthere are many alternatives of course. but they follow a different design philosophy.
22:00:13Araqdisallowing operator overloading is no solution, it leads to barbaric code where a[i] works for arrays but nothing else. good luck trying to write generic code with that.
22:00:52vbtti like some code elements to be 'special'. e.g. function and type definitions, control structures, operators.
22:01:04Araqin C# I don't know whether it's a.prop() or a.prop ...
22:01:21vbttyou can have overloading of course - by just overloading special methods.
22:01:21Araqetc. there is no alternative.
22:01:38Araqthat's just stupid.
22:01:43vbttin nimrod I dont know how to get a reference to a function, without calling it.
22:01:55Araqis % '__percent__' or '__format__' ?
22:02:11Araqis + '__add___ or '__plus__'?
22:02:18Araqand what is += then?
22:02:25vbttyou could just follow convention - use the character name (not semantic operation)
22:02:46Araqvbtt: wrong, you do know if you get a reference or not
22:02:57vbttbut having too may operators is also not a good thing in my book. haskell is so confusing.
22:03:09vbtteverything has a new operator (because it's possible)
22:03:32Araq*shrug* that's a problem of the programming culture
22:03:37vbtta = f # in python if f is a function a is the same function
22:03:44vbttin nimrod? f is called, I supposed?
22:03:49Araqnope
22:03:55Araqa = f x # call
22:04:03Araqa = f # no call
22:04:08Araqa = x.f # call
22:04:51vbttwhy no shortcut for a = f() ?
22:05:02vbttnimrod just special cases something else.
22:05:08*psquid quit (Ping timeout: 245 seconds)
22:05:09Araqbecause first class functions are more important
22:05:22vbttbtw, type T = object x: String t = T() t.x # is it x(t) or the field?
22:05:39Araqthe field
22:06:12*psquid joined #nimrod
22:06:12Discolodastupid idea but, why not .f == f()
22:06:13vbttall i'm saying are such things are not obvious to me.
22:06:18Araqwhy should nulladic function application be done without ()? it's rare and would be confusing :P
22:06:27vbttbut consistent.
22:06:32vbtta = f x, y, z
22:06:34vbtta = f x, y
22:06:36vbtta = f x
22:06:37vbtta = f
22:07:01Araq*shrug* so what, first class functions are more important
22:07:02vbttlast one is special case. i understand special cases are necessary. i'm just pointing out you cant get away from it.
22:09:13nuevafor the syntax discussion: there is indentation-based syntax for lisp isomorphic to sexps http://readable.sf.net
22:11:00Araqnueva: already know it, but thanks
22:11:50AraqDiscoloda: leading '.' creates lots of new problems
22:13:12nuevaAraq: you know everything in PL sphere, I already understood it (no offence assumed). still it might be interesting to others.
22:14:31Araqvbtt: they might not be obvious but they can be learned and afaict don't create nasty surprises
22:15:03Araqthe exception is the fact that we have too few whitespace dependent parts ;-)
22:15:21Araqecho $foo
22:15:23Araqis parsed as
22:15:29Araqecho $ foo
22:15:37Araqand not as echo($foo)
22:15:49Araqbut I plan to fix that too ;-)
22:17:47OrionPKyay!
22:18:00OrionPKthe echo $foo always gets me
22:18:35EXetoCa terminal emulator depending on a physics engine? interesting
22:18:40OrionPKoptimize for optimal cuddliness
22:18:59vbttwhat does echo $ foo mean? (with parenthesis please)
22:19:15vbttit means echo($(foo)) to me in the new syntax.
22:19:16OrionPKecho(`$`(foo)) presumably
22:19:30vbttand what does echo($foo) mean?
22:19:38OrionPK$ is 'to string'
22:19:40EXetoCsame?
22:20:17vbttright lets say $ is just the function name.
22:20:25Araqecho $ foo = (echo) $ (foo)
22:20:35Araqaka binary operator invokation
22:21:05Araqand no, $ is not a function name, but an operator, `$` would simply be a function name
22:21:22vbttah, ok.
22:22:07AraqI had a cool article explaining all this, but dr Dobbs shortened it
22:22:25Araqso now the original article is a chaptel in my book :P
22:22:30Araq*chapter
22:22:37vbttbook?
22:22:46vbttdo you mean manual?
22:22:54Araqno, like a book
22:23:02Araqwith printed pages and stuff
22:23:26vbtthopefully it'll be available in digital format.
22:23:28nuevahow can I totally define compiler suite from command line --cc:g++ --g++.exe=/path/to/g++ ? what else Nimrod requires?
22:23:40renesac"vanity publisher" or someone interested by your language?
22:24:11vbttAraq: what's the scope of the book?
22:24:21renesacand Araq: right, I will try harder ;)
22:24:26*ddl_smurf quit (Quit: ddl_smurf)
22:25:27Araqnueva: just edit the config instead
22:25:33Araqand it's gpp not g++
22:25:34vbttbtw, the new syntax means (f x) is the same as f(x), correct?
22:25:57Araqvbtt: in some cases, yes
22:26:08vbtta = f(x)
22:26:10nuevaAraq: yeah, I know about config, I want to avoid it. so '+' is an invalid character in option name?
22:26:10vbtta = (f x)
22:26:32vbtta = (f(x), g(y))
22:26:44vbtta = ((f x), (g y))
22:27:04vbttbut NOT: a = (f x, g y) # == (f(x, g(y))
22:27:12vbtti think i understand.
22:27:14nuevathanks, replacing + with letter helped
22:28:16vbttgetting more like lisp, hehe.
22:28:21vbttreminds one of that quote.
22:28:31Araqyeah indeed
22:29:27*io2 quit ()
22:31:51vbttwith so many options, which one does nimrod pretty pick?
22:32:43Araqnimrod pretty doesn't transform call syntaxes
22:33:10Araqin fact, currently is only makes stuff case consistent and warns about identifiers not adhering to the style guide
22:33:26vbttok
22:33:58Araqalso your question implies that the different syntaxes would be better one instead
22:34:19vbttwell for operators there is a better one.
22:34:25vbtt(infix)
22:34:30vbttbut yeah, i get what you are saying.
22:36:16Araqecho x.len, y.len, sum(a, b, c)
22:36:18nueva--clib:zlib turns into -l/absolute/path/to/nimrod/compiled/module/directory/zlib. unintitive, I've expected just -lzlib. but I guess --passL is for me then
22:36:34Araqis not better written as:
22:36:47Araqecho(len(x), len(y), sum(a, b, c))
22:37:12Araqit's exactly this consistency that makes Lisp so hard to work with IMO
22:38:21vbttI agree with you about lisp.
22:38:37vbtthowever, you *can* write it as your second example.
22:38:46vbtti can't define echo to be only used without parens.
22:39:19Araqyes, that's a different *point* of the language
22:40:17Araqdefinitions should as far as reasonable not dictate the usage
22:40:50Araqotherwise you get C#'s lovely x.foo vs. x.foo()
22:43:38vbttwhat's the issue with x.foo vs x.foo() ?
22:43:43Araq(is it a.Length() or a.Length or a.Count() or a.Count? why do I have to care about it again?)
22:44:15vbtti see.
22:44:46vbttyour'e looking at it from a usage point of view (how do i ...?)
22:44:59Araqnot really
22:45:05vbtti'm looking at it from a readability point of view (what does this do..?)
22:45:48AraqI know even a.Count() is an O(1) operation and the JIT will inline it
22:45:59Araqso what's the point? let me write a.Count instead
22:46:24Araqwhat kind of readability are you talking about?
22:46:40Araqa.Count is a property access and a.Count() a method call? yeah very interesting
22:47:00Araqhow does it help anybody reading the code?
22:47:22Araqyou might as well encode the line number of the defintion at the callsite instead
22:47:24*filwit joined #nimrod
22:48:30Araqand pretend it improves "readability", because it encodes some piece of information
22:48:42vbttit's always consistent, that's all.
22:51:28filwitwell i logged on to ask how to fix my fork of devel, but just pulled and now it's working. great
22:51:34renesacplaying with the new function call syntax, I found the method call syntax very useful when you don't want parenthesis:
22:51:35filwiton to trying to fix a bug
22:51:45vbttnimrod lets you write functions in many forms and people will write them in all its forms.
22:52:03vbttperhaps that flxibility is your goal.
22:52:15filwitrenesac: new function call syntax?
22:52:24Araqand that's perfectly fine with me as it doesn't let people use reflection ;-)
22:52:38renesac'echo 1.optarg, singlearg 2' will not be affected if optarg has or not an optional argument while 'echo optarg 1, singlearg 2'
22:52:54vbttdidn't get the reflection comment.
22:53:10renesacwill print different things wether optarg has or not an optional argument
22:53:25renesacI find the first behaviour better
22:53:48Araqrenesac: I think you're wrong
22:54:29Araqvbtt: reflection really produces unmaintainable code, not f(x) vs. (f x)
22:54:30renesacindeed i'M wrong again
22:54:55Araqrenesac: the parser never looks at the definitions as it uses no symbol table
22:55:22Araqit's always parsed the same way, no matter how optarg singearg are defined
22:55:23renesacAraq: reflection also produces huge binaries, see Qt5 and their 25mb mobile apps...
22:55:59vbttAraq:perhaps. i'll have to write more nimrod code to judge.
22:57:01Araqvbtt: it's syntax vs semantics. the semantics are *very* static and so nimrod code is much easier to follow than Golang code
22:57:28Araqbut I expect it will take another decade for programmers to realize this
22:57:49Araqas syntax is all they can see
22:58:09renesacAraq, you need to write more blog posts
22:58:29renesacexplaining that, for example
23:00:05vbttAraq: I get your comment about decoupling syntax vs semantics. stuff like that should be on a special page on the website.
23:00:27vbttnimrod's design philosphy or something. just a blurb.
23:00:50Araqvery well, as I said, I already have the chapter
23:00:55Araqcan make a blog post out of it
23:02:11vbttthat would be great.
23:02:13renesacAraq, what I meant earlier: https://gist.github.com/ReneSac/a638e1f9d3da866e1f55
23:02:24renesacthey behave a little different
23:02:39renesacand I like the second behaviour better
23:03:56renesacthough I'm sure I will find some use for the first form
23:04:06renesacbut I think it is less readable
23:04:08Araqweak binding for ',' is strange though
23:04:25Araqit's like attaching 'else' to the outermost 'if'
23:05:02renesacwhat is the operator precedence of functions now?
23:05:36renesacit fits in that precedence table in the manual?
23:06:50Araqthe precedence table is unaffected
23:07:11Araqbut doesn't explicitly list ordinary function application
23:07:21Araqbecause it's "intuitive" :P
23:09:35filwitAraq: trying to fix a compiler bug on sigmatch:897 where a.sons[0] is being returned but a.sonsLen == 0. I'm not sure what to do at this point. (aka, this effects procs which have a T:typedesc[Foo] as first param). any hints on what I should return?
23:10:26filwitguess that's not much to go on
23:10:52filwiti guess i need to understand the structures a bit more really
23:10:57Araqmy line 897 is different from your line
23:11:09Araqare you on devel?
23:11:12filwityeah
23:11:27Araqmaybe I'm not up to date
23:11:29filwitoriginal like looks like: let toMatch = if tfUnresolved in f.flags: a
23:11:40filwitelse: a.sons[0]
23:12:07Araqthat's my line 821 ...
23:12:25filwiti just pulled so idk
23:12:30filwitmaybe you haven't pushed
23:12:46Araqzahary recently got meta-type happy ...
23:13:07filwitanyways, i'm just trying to figure out what to pass to typeRel(..) as the 'toMatch' param
23:13:12Araqso ... I have no idea what tyTypeDesc is these days
23:13:19filwitlol
23:13:28filwitokay, i'll figure it out
23:14:35filwitwait i think i figured out what to do, gotta check
23:15:57filwitthank god Nimrod builds so fast
23:16:33*reactormonk joined #nimrod
23:16:36filwiti imagine hacking on GCC would be an exercise in the virtue of patience
23:16:48Varriount^
23:18:48renesacAraq, version 3: https://gist.github.com/ReneSac/a638e1f9d3da866e1f55
23:18:57renesacnow I'm getting something
23:19:09*renesac has a devil smile
23:21:01nuevaAraq: can i expect syntax 'import "dir/file.nim"' to not been removed from language in some future?
23:21:21renesacor not..
23:22:03Araqnueva: I don't dislike it enough to remove it
23:24:47renesacyeah, the optional argument with a non-null value is too evil, and will change the output anyway
23:25:34nuevaAraq: it just don't show up in manual (exact syntax with explicit .nim), so I wanted to be sure...
23:26:17filwitwoohoo, fixed my first compiler bug!
23:26:34*filwit pats his own back
23:30:36Araqfilwit: well done :-)
23:31:14Araqrenesac: echo optarg 1, optarg 2, singlearg 2 is hard to read no matter the defintions
23:32:14renesacyeah, I'm learning how to read those monstruosities as I go along, but indeed it is hard to see what is going on
23:32:55renesacI will avoid those confusing expressions, but I can only pray that others do the same ^^"
23:33:45Araqyeah well maybe I should restrict it somehow
23:34:04Araqbut then some Haskell-Lover comes along and complains ;-)
23:34:18renesacat least it seems consistent
23:34:46Araqsince it's a simple rule in the grammar, I can't see how it can be inconsistent :P
23:34:58filwitgdamnit Kate.. why you add invisible files backup files..
23:34:59EXetoCfilwit: nice. I'll give you a cookie whenever you are in town
23:35:04renesacand some constructions generates errors at compile time
23:35:18renesacAraq, I haven't tried to mix it with "if expressions yet"
23:35:20filwitEXetoC: looking forward to said cookie
23:35:35renesacmaybe those not so regular parts of the grammar may pose problems
23:35:45Araqrenesac: I applaud your attempts to break stuff :-)
23:36:20renesacsorry for the false positives
23:36:50Araqwell now I wonder if you're right and ',' should have lower precedence
23:37:02Araqso foo bar 1, bar 2 is parsed as foo(bar 1, bar 2)
23:37:39renesacthat seems easier
23:37:46Araqso () can only be left out for unary applications
23:37:56Araqthat would work too
23:38:39renesacI think you can make binary using the "echo 1.func 2 , singlearg 2"
23:38:46renesac*you can still make binary
23:38:52Araqyeah of course
23:39:19renesacthat still is rather easy to follow
23:40:05Araqbut then (f a, b) doesn't work anymore
23:40:17Araqthough that's bad style anyway
23:40:23Araqf(a, b) is better
23:40:48vbttf(a b, c) becomes f(a(b), c)?
23:40:50renesaclispers will shed a tear, but it is for the greater good
23:40:51renesacXD
23:41:08Araqvbtt: yes
23:41:17renesacand yeah, I would't like to see lispers coding that way in nimrod
23:41:47renesacwell, actually that is not confusing... yeah, it would even be ok
23:42:21renesacanyway, I think a lower precedence for , will make nimrod easier to read
23:42:28renesacit seems
23:42:46vbttthat's reasonable.
23:43:11Araqrenesac: want to implement it?
23:43:26vbttmy dislike for this reduces *considerably* if it only applies to single argument.
23:43:29renesacAraq, I have no Idea where to start
23:43:35vbttin fact, it's quite acceptable.
23:43:45Araqrenesac: parser.nim, line 675
23:44:06Araqget rid of the 'while' loop and only call 'parseExpr' once
23:44:50Araqupdate the grammar comment in line 645, 646
23:45:12Araqand run 'nimrod c -r compiler/parser.nim' to regenerate the grammar.txt documentation
23:46:08Araqvbtt: I think I agree with you and await/spawn only need the 1 argument version
23:48:33*Varriount|Mobile joined #nimrod
23:49:03vbttcool.
23:49:22filwitAraq: https://github.com/Araq/Nimrod/pull/849
23:49:23renesacAraq: I think I'm not up to the task :/
23:49:39vbttnow, in practice, i'd rarely do await on a single async request
23:50:00vbttwhat i really want is await next(r1, r2, r3, r4)
23:50:12vbttbasically a selector - do you have that?
23:50:26vbttrather, await next([...])
23:51:07vbttso i can do..
23:51:16Araqrenesac: np, but I told you everything you need to do ;-)
23:52:14Araqvbtt: do you mean 'AND' or 'OR'?
23:52:29renesacyeah, the problem is that I don't have the understanding concretely apply what you said
23:54:11vbttAraq:mostly OR, sometimes an AND. when it's OR i want the actual object that's ready.
23:54:51vbttbecause this is a common pattern: fire off a bunch of remote rpcs.. wait for them to come back (order doesn't matter) start processing as soon as possible.
23:55:10Araqvbtt: I never thought about 'OR' in non-parallel setting
23:55:22AraqI use condition variables for 'OR' usually
23:55:46vbttif it's wrapped in a usable stdlib module, that's fine too.
23:55:58vbttOR is very common.
23:56:24vbttmost async servers use that pattern.
23:56:58vbttconsider the latest distributed data stores - they fire requests to N servers and then wait for N-M to respond.
23:57:50Araqinteresting
23:57:59Araqwhy would they do that? that's wasteful
23:58:20vbttthey want low latency and minimum N redundancy.
23:58:45vbttso only if data is saved to N-M servers, they are allowed to consider it durable.
23:58:50Araqfilwit: wait for zahary's code review please
23:59:11vbttbut eventually they want to replicate to N servers.
23:59:14vbttsomething like that.
23:59:25Araqvbtt: I can understand that, but it's wasteful
23:59:26vbttalso I think asyncio features might overlap with the async feature.
23:59:40vbttAraq:how so?
23:59:57vbttwhat other strategy will give you lowest latency and replication to N-M servers?