<< 13-10-2015 >>

00:02:14*Kingsquee joined #nim
00:04:03*strcmp1 joined #nim
00:05:57*strcmp2 quit (Ping timeout: 255 seconds)
00:19:16*OnO quit (Quit: ZNC - 1.6.0 - http://znc.in)
00:21:22*strcmp2 joined #nim
00:23:18*strcmp1 quit (Ping timeout: 246 seconds)
00:23:50*ozra quit (Quit: Page closed)
00:30:11*OnO joined #nim
00:32:19*Kingsquee quit (Quit: http://i.imgur.com/EsXzoum.png)
00:35:19*strcmp1 joined #nim
00:38:21*strcmp2 quit (Ping timeout: 255 seconds)
00:45:30*tmm1 quit (Read error: Connection reset by peer)
00:49:33*opal joined #nim
01:00:42*opal left #nim (#nim)
01:08:18*chemist69 joined #nim
01:11:06*chemist69_ quit (Ping timeout: 240 seconds)
01:18:57*strcmp2 joined #nim
01:21:11*brson quit (Ping timeout: 264 seconds)
01:21:39*strcmp1 quit (Ping timeout: 252 seconds)
01:22:17*ano joined #nim
01:24:25*barosl joined #nim
01:33:42*CryptoToad quit (Quit: Leaving)
01:49:32*strcmp1 joined #nim
01:52:50*strcmp2 quit (Ping timeout: 272 seconds)
02:04:06*strcmp2 joined #nim
02:08:06*strcmp1 quit (Ping timeout: 244 seconds)
02:34:26*strcmp1 joined #nim
02:35:22*tmm1 joined #nim
02:37:36*strcmp2 quit (Ping timeout: 264 seconds)
02:50:02*strcmp2 joined #nim
02:52:34*strcmp1 quit (Ping timeout: 250 seconds)
03:04:41*strcmp1 joined #nim
03:08:35*strcmp2 quit (Ping timeout: 264 seconds)
03:15:28*nchambers is now known as SpruceZeusWhos
03:16:21*SpruceZeusWhos is now known as SprucePooseZeus
03:17:49*SprucePooseZeus is now known as nch
03:23:24*strcmp1 quit (Ping timeout: 272 seconds)
03:36:19*darkf joined #nim
03:40:05*nch is now known as nchambers
04:30:10*mal`` quit (Read error: Connection reset by peer)
04:38:30*mal`` joined #nim
04:52:07*vendethiel joined #nim
05:02:19*opal joined #nim
05:14:02*opal left #nim (#nim)
05:33:23*barosl quit (Quit: Leaving)
05:33:49*barosl joined #nim
05:34:07Varriount_Araq: Now that we have an installer generation build for the buildbots, what should I focus on next?
05:34:29*Varriount_ is now known as Varriount
05:37:23*vendethiel quit (Ping timeout: 264 seconds)
05:47:04*vendethiel joined #nim
06:07:50*vendethiel quit (Ping timeout: 260 seconds)
06:12:41*tmm1 quit (Quit: My MacBook has gone to sleep. ZZZzzz…)
06:25:33*onionhammer quit (Ping timeout: 250 seconds)
06:25:34*silven quit (Ping timeout: 250 seconds)
06:25:43*silven joined #nim
06:27:24*onionhammer joined #nim
06:27:47*nande joined #nim
06:29:00*bjz joined #nim
06:39:13*Ven joined #nim
06:40:47*bjz quit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
06:55:50*bjz joined #nim
06:58:06*Ven quit (Read error: Connection reset by peer)
06:58:39*Ven joined #nim
06:59:20*Kingsquee joined #nim
07:01:15*Ven quit (Read error: Connection reset by peer)
07:01:29*Ven joined #nim
07:03:18*Ven quit (Read error: Connection reset by peer)
07:03:25*Ven joined #nim
07:05:36*Ven quit (Read error: Connection reset by peer)
07:05:37*Ven_ joined #nim
07:07:33*Ven_ quit (Read error: Connection reset by peer)
07:08:04*Ven joined #nim
07:13:32*xaai joined #nim
07:13:44xaaihello?
07:16:22*Ven quit (Quit: My MacBook has gone to sleep. ZZZzzz…)
07:16:39*Ven joined #nim
07:25:03*xaai quit (Quit: Page closed)
07:29:19*Ven_ joined #nim
07:29:31*Ven quit (Read error: Connection reset by peer)
07:31:31*Ven_ quit (Read error: Connection reset by peer)
07:31:41*Ven joined #nim
07:33:07*Ven quit (Read error: Connection reset by peer)
07:33:38*Ven joined #nim
07:35:09*Ven quit (Read error: Connection reset by peer)
07:35:35*Ven joined #nim
07:36:37*Ven quit (Read error: Connection reset by peer)
07:40:01*Ven joined #nim
07:58:55*Ven quit (Read error: Connection reset by peer)
07:59:02*Ven_ joined #nim
07:59:33*Trustable joined #nim
08:02:22*Ven_ quit (Read error: Connection reset by peer)
08:02:29*Ven joined #nim
08:04:10*Ven quit (Read error: Connection reset by peer)
08:04:33*Ven joined #nim
08:06:25*bjz_ joined #nim
08:06:51*bjz quit (Ping timeout: 250 seconds)
08:21:54*bjz_ quit (Ping timeout: 250 seconds)
08:22:49*bjz joined #nim
08:22:51Araq"The ``ftpclient`` module is now deprecated in favour of the ``asyncdispatch`` module."
08:23:31Araqer ... I don't think so. but maybe in favour of asyncftpclient?
08:27:36*coffeepot joined #nim
08:40:57*Ven quit (Read error: Connection reset by peer)
08:41:20*Ven joined #nim
08:43:24*Ven quit (Read error: Connection reset by peer)
08:43:25*Ven_ joined #nim
08:45:06*Ven_ quit (Read error: Connection reset by peer)
08:45:29*Ven joined #nim
08:50:12cncli found a bug in pasecfg but i haven't yet built nim from source for myself, so i can run any tests to see if i'm breaking something else by fixing it
08:50:17cnclsorry, parsecfg
08:51:56cnclhttps://github.com/nim-lang/Nim/blob/devel/lib/pure/parsecfg.nim#L260
08:52:17cnclit will fails to parse something like MyNumber=-500
08:54:06Araqworkaround: mynumber="-500"
09:32:14*Ven quit (Quit: My MacBook has gone to sleep. ZZZzzz…)
09:37:40dom96Araq: where do you see that?
09:39:46*coffeepot quit (Quit: http://www.kiwiirc.com/ - A hand crafted IRC client)
09:41:06Araqalready update it. in news.txt
09:41:10Araq*updated it.
09:41:13*Ven joined #nim
09:41:20*Arrrr joined #nim
09:41:38*coffeepot joined #nim
09:42:50AraqI also patched nimble to compile with "nim devel"
09:43:19NimBotnim-lang/Nim devel 4548c1a rbmz [+0 ±1 -0]: added all/any/allIt/anyIt with tests and inline documentation... 2 more lines
09:43:19NimBotnim-lang/Nim devel 61df6dd Dominik Picheta [+0 ±1 -0]: Merge pull request #3440 from rbmz/sequtils... 2 more lines
09:43:55NimBotnim-lang/Nim devel c6d653f Adam Strzelecki [+0 ±1 -0]: readme.md: Open builder page from its status icon... 3 more lines
09:43:55NimBotnim-lang/Nim devel 8e0a103 Dominik Picheta [+0 ±1 -0]: Merge pull request #3438 from nanoant/patch/readme-link-to-builders... 2 more lines
09:44:19dom96Araq: yeah, I saw that, thanks.
09:45:10Araqalso I'm breaking tables.[]
09:45:27Araqwill write a forum post about it once the tests pass
09:52:17*strcmp1 joined #nim
10:13:08*Ven quit (Quit: My MacBook has gone to sleep. ZZZzzz…)
10:15:56*ibeex joined #nim
10:22:47*nande quit (Remote host closed the connection)
10:27:25Araqhi ibeex welcome
10:27:45VarriountAraq: How is tables.[] being broken?
10:28:03Araqraises KeyError exception
10:28:12Araquse getOrDefault for the old behaviour
10:28:47Araqcompile with -d:nimTableGet to make the compiler list where you used tables.[]
10:29:16Araqworks really well. I'm updating the stdlib and once the tests pass, will merge it into devel
10:34:29*Kingsquee quit (Quit: http://i.imgur.com/EsXzoum.png)
10:49:38*elrood joined #nim
11:08:56*strcmp1 quit ()
11:11:24*Ven joined #nim
11:20:15*cryzed quit (Ping timeout: 246 seconds)
11:23:10*cryzed joined #nim
11:28:56*razaaa joined #nim
11:47:16*chemist69 quit (Quit: WeeChat 1.3)
11:54:27ArrrrCould not be added a proc to get Option[T] ?
12:01:49AraqI still don't like Option[T] and still see no benefit.
12:14:18reactormonkArrrr, got some code here that would do it but it's still slightly buggy...
12:14:50reactormonkAraq, Option is basically C-style error handling, so without overhead, but enforced by the type system.
12:16:10Araqno. it has more overhead, both at runtime and syntactically
12:17:40Araqand at the end of the day an empty string is just as invalid as the None branch and so you end up doing something like:
12:18:16Araqif a.get("key").isnone or a.get("key").access == "": ...
12:18:36reactormonka try/except is even more overhead
12:19:28Araqyes, but I got reports that [] returning a default value is error prone and it departs from how the scripting languages do it
12:20:13Araqso now [] does what the scripting languages do and as a nice bonus we can have a var version of [] that behaves identically
12:20:42Araqthis means we also get rid of 'mget', so be happy.
12:21:54reactormonkSo there's the choice between Option or an exception?
12:22:19Araqno [] always raises an exception, getOrDefault is the old []
12:22:27*golak joined #nim
12:22:55ArrrrFor primitives or structs i'd rather have option
12:23:46reactormonkI'm talking about design - either have it throw an exception or Option. And I assume Option is cheaper runtime than exceptions.
12:23:55reactormonkProbably compiletime too.
12:24:14Araqexception is more convenient to use, that's why we have them.
12:24:38Araqarray[idx] doesn't return an Option either, it raises IndexError instead.
12:26:10AraqArrrr: tell me a good name and we can easily add it to options.nim
12:26:53Arrrrfor proc(table, key): Option ?
12:26:58Araqyes
12:27:18reactormonkget ?
12:27:50Araqa bit too generic.
12:27:55ArrrrYeah, i would say get unless you want it to be more explicit
12:28:16Arrrr'optionOf'
12:29:07Araqtab.choose("key") ?
12:29:10reactormonkget is what's used in scala
12:29:27reactormonk"choose" means one random element - ruby
12:29:38Arrrri'd say choose is not less generic than get, but more rare
12:29:38Araqyeah, choose ain't good.
12:29:56Arrrr'getOption'
12:30:03Araq'asOption'
12:30:14reactormonkasOption is basically Some(x)
12:30:18Araq'optional'
12:30:25Araqtab.optional"key"
12:30:36Arrrrok
12:31:06reactormonktab.maybe("key") ?
12:31:35Arrrrthat's ok too
12:37:19reactormonkI still don't see why exceptions are more convenient to use. a) you don't handle them, then they might crash your whole programs b) you handle them with three more lines of code
12:40:40ArrrrI can see a exception block is more readable, but i dont know about the performance cost.
12:43:50coffeepottab.select ?
12:44:12reactormonkAn exception breaks the type checking to a certain degree - the java people tried to solve that with checked exceptions and you know the results
12:46:44ArrrrThe optimal approach would be the functional one, you pass two functions, one in case there is a result, and the other in case there is not.
12:46:57ArrrrBut of course, is not cheap
12:47:03Arrrror at least free
12:55:58onionhammerhey araq
12:56:02onionhammeri got a fun one for you
12:56:17onionhammerhttps://www.reddit.com/r/programming/comments/3ofxy6/nim_programming_language/cvxub5c?context=3
12:56:19onionhammer:P
13:05:09*Ven_ joined #nim
13:06:01*Ven quit (Read error: Connection reset by peer)
13:06:02*BitPuffin joined #nim
13:13:06reactormonkArrrr, I guess I should have pushed my tables update for "get", eh, tool ate.
13:13:09reactormonks/ate/late/
13:16:43*Jesin joined #nim
13:18:22*Ven_ quit (Ping timeout: 265 seconds)
13:24:21Araqreactormonk: we solve it with our effect system and you don't seem to be aware. it works really well. IMO.
13:25:25*ibeex quit (Read error: Connection reset by peer)
13:25:54Araqalso handing an exception is O(1) lines of code vs O(function call depth) for the return type handling.
13:25:59*ibeex joined #nim
13:26:10OnOwhat is this AppVeyor thing? 3rd CI?
13:26:21AraqCI for Windows.
13:26:57OnOahh.. coz it doesn't work
13:27:19Araqyeah, not sure. worked for a short amount of time.
13:27:29Araqneed to ask tmm when he's back
13:29:44Araqoh yay. more merge conflicts...
13:30:41*golak quit (Quit: Lost terminal)
13:31:22OnObtw. I made PR for defaulting to stderr and extending terminal module to work with both stdout & stderr https://github.com/nim-lang/Nim/pull/3441
13:31:30OnOdoing final testing of it
13:33:23Araqoh ffs, git is stupid. can I tell it to use *my* version of this thing?
13:34:49OnOgit checkout --theirs or --ours
13:35:10OnOit is basically reversed, --ours is the one in the repo, --theirs is the one you are merging
13:35:54Araqlike server/client for X11, huh?
13:36:48OnOyeah, depends what side of the fence you are at
13:37:21OnOI guess, --ours is "ours" in your case if you are merging foreign PRs
13:37:57Araqwell I surely know what 'mine' is.
13:39:39OnOhaha
13:41:12OnOVarriount, Araq, tmm1: you know that Travis CI works both on Linux and OS X and this AppVeyor thing on Windows, so basically we can drop whole buildbot custom infrastructure and use these 2 directly integrated with GitHub
13:41:32OnOI checked Travis is supposed to have ARM gcc too
13:42:15*Sornaensis quit (Excess Flood)
13:43:07*Sornaensis joined #nim
13:43:30Araqoh god ... now nothing works -.-
13:44:21Araqgit merge undid all my changes.
13:44:31OnObtw. I recommend doing rebase rather than normal merge, it is easier and makes history linear
13:44:42AraqI did rebase.
13:44:48OnOhmm... then weird
13:46:00Araqwell I still have the other branch that works
13:46:31AraqI merged my working branch into devel
13:46:39Araqand then did 'git pull --rebase'
13:46:50Araqand now it's all gone
13:47:20reactormonkAraq, I see your point about the effects system. I assume you can remove a raises from the callstack via exception handling. O(function call depth) is more like O(data structure depth). That's where flatMap comes in, but I think the effects should handle it.
13:51:04Araqgit branch
13:51:06Araq* (no branch, rebasing devel)
13:51:09Araqaha
13:52:10reactormonkAraq, git reflog
13:52:30Araqgit snowden?
13:53:49reactormonkmore like git nsa
13:54:00reactormonkIt knows everything you've done.
13:55:31Araqwell I did git rebase --abort and git pull origin devel
13:55:44reactormonkthat should kill a lot.
13:55:49Araqand now it's "green" again with god knows what version of these files
13:57:22reactormonkgit show HEAD should tell you what the last commit changed
13:57:30reactormonkI've heard sourcetree isn't too bad either
14:17:09*saml joined #nim
14:18:57*pregressive joined #nim
14:32:13NimBotnim-lang/Nim devel 63f9385 def [+1 ±11 -0]: Rename mget to `[]`... 7 more lines
14:32:13NimBotnim-lang/Nim devel 4a471d8 def [+0 ±1 -0]: Don't use deprecated intsets.empty
14:32:13NimBotnim-lang/Nim devel d8b0edc Araq [+1 ±11 -0]: Merge branch 'mget' of https://github.com/def-/Nim into def--mget... 8 more lines
14:32:13NimBotnim-lang/Nim devel 2fda95a Araq [+0 ±9 -0]: added getOrDefault; bootstrapping works again
14:32:13NimBot3 more commits.
14:57:11*jaco60 joined #nim
15:05:12*ibeex quit (Quit: Textual IRC Client: www.textualapp.com)
15:10:33*joelmo joined #nim
15:26:22*strcmp1 joined #nim
15:28:00*BitPuffin quit (Ping timeout: 255 seconds)
15:30:51*cryzed quit (Ping timeout: 246 seconds)
15:32:37*cryzed joined #nim
15:36:33*razaaa quit (Ping timeout: 255 seconds)
15:41:23*xet7_ joined #nim
15:43:35*xet7 quit (Ping timeout: 250 seconds)
16:08:07*Ven joined #nim
16:10:13*strcmp2 joined #nim
16:11:19*xet7_ is now known as xet7
16:12:34*brson joined #nim
16:13:00*strcmp1 quit (Ping timeout: 264 seconds)
16:15:20*Jesin quit (Quit: rebooting)
16:19:49*Jesin joined #nim
16:21:18*Ven quit (Read error: Connection reset by peer)
16:21:55*Ven joined #nim
16:22:58*coffeepot quit (Quit: http://www.kiwiirc.com/ - A hand crafted IRC client)
16:25:37*Ven quit (Client Quit)
16:31:24*pregressive quit (Remote host closed the connection)
16:31:48*pregressive joined #nim
16:32:42*xet7 quit (Remote host closed the connection)
16:33:10*xet7 joined #nim
16:33:57*tmm1 joined #nim
16:35:36*cryzed quit (Ping timeout: 246 seconds)
16:36:43tmm1good morning
16:38:14*cryzed joined #nim
16:47:21*Ven joined #nim
16:49:31*Ven quit (Client Quit)
16:50:06*Ven joined #nim
16:57:59*Matthias247 joined #nim
16:58:53*Ven_ joined #nim
16:58:57*Ven quit (Read error: Connection reset by peer)
17:04:26*silven quit (Ping timeout: 240 seconds)
17:04:41*silven joined #nim
17:05:58*Ven_ quit (Quit: My MacBook has gone to sleep. ZZZzzz…)
17:18:08*boopsiesisaway is now known as boopsies
17:18:48*iamd3vil joined #nim
17:23:40*iamd3vil left #nim (#nim)
17:26:39*cryzed quit (Ping timeout: 240 seconds)
17:28:49*cryzed joined #nim
17:34:46*vendethiel joined #nim
17:35:53Araqtmm1: hey.
17:36:51AraqAppVeyor is red. what's up with that?
17:37:12*pregressive quit (Remote host closed the connection)
17:58:35tmm1red where?
17:58:36*vendethiel quit (Ping timeout: 264 seconds)
17:59:04tmm1the config isn't merged yet so its only running tests on the one branch
17:59:10tmm1all the other branches will fail right away
18:02:09*joelmo quit (Quit: Connection closed for inactivity)
18:04:44*vendethiel joined #nim
18:04:51*BitPuffin joined #nim
18:09:03tmm1Araq: how do i fix this failure https://ci.appveyor.com/project/Araq/nim/build/1.0.33#L2667
18:13:27OnOtmm1: I am thinking we could enable Travis for OSX and try to use Linux ARM, how do I test that? you just enable Travis CI on your fork? or there's anything else
18:14:02tmm1i had osx enabled before, it's not hard to do
18:14:16tmm1just need to customize the build instructions and make them handle both platforms
18:14:25tmm1you can create a branch, edit the travis.yml and open a PR
18:14:31tmm1the PR will kick off the builds using your new config
18:14:45*irrequietus joined #nim
18:15:22OnOsounds good, can travis be used to build binary packages as well? (eg. tar.bz)
18:17:13tmm1you can do whatever but you'll need to figure out where to upload them
18:20:12OnOmaybe straight back to GitHub releases? https://developer.github.com/v3/repos/releases/#upload-a-release-asset
18:22:46tmm1don't think you want a new release for every single build
18:22:53tmm1esp for those on random forks and branches
18:25:40Araqtmm1: strange, how come it works on linux?
18:25:45Araqseems to be a regression
18:25:47tmm1*shrug*
18:28:54*strcmp2 quit (Ping timeout: 260 seconds)
18:32:36OnOtmm1: http://docs.travis-ci.com/user/deployment/releases/ it can be programmed to upload only for tags, and that really makes sense to me, since tagging version will automatically trigger builds and upload for all platforms
18:32:55tmm1yea that would work, appveyor can do that as well
18:34:35OnOokay let's ditch then the external buildbot :)
18:34:56OnOtmm1: is appveyor comaptible with .travis.yml ?
18:35:18*pregressive joined #nim
18:35:24tmm1no
18:35:41*irrequietus quit ()
18:35:55*irrequietus joined #nim
18:35:58tmm1there's a PR open with a appveyor.yml
18:36:04*irrequietus quit (Remote host closed the connection)
18:36:12OnOI can't see any configuration file inside a repo, is it stored somewhere outside?
18:36:31OnOahhh... okay, I though it was merged already coz I can see failing appveyor on some of my PR :)
18:37:52tmm1there's still a bunch of failing tests on windows, and i don't have experience with or access to a windows machine to fix them
18:38:45*strcmp1 joined #nim
18:39:59*strcmp1 quit (Remote host closed the connection)
18:40:41*strcmp1 joined #nim
18:41:38dom96OnO: better to upload them to our server IMO
18:46:48*brson quit (Ping timeout: 272 seconds)
18:48:19*strcmp2 joined #nim
18:50:01*strcmp3 joined #nim
18:52:05*strcmp1 quit (Ping timeout: 250 seconds)
18:52:14VarriountAraq, dom96: Are we switching entirely to cloud-based solutions? If so, then there's little reason for me to be working on the buildbots
18:53:32*strcmp2 quit (Read error: Connection reset by peer)
19:01:14AraqVarriount: well I'm skeptical of these cloud based solutions
19:06:27VarriountAraq: Howso?
19:11:11OnOIMHO maintaining 2 CI solutions that do essentially the same is waste of effort, or maybe there's any benefit of that?
19:12:23*BitPuffin quit (Read error: Connection reset by peer)
19:13:37*darkf quit (Quit: Leaving)
19:16:41*Arrrr quit (Quit: WeeChat 1.2)
19:19:36VarriountWhile I don't mind a simple Travis CI instance for testing pull requests (which is something buildbot can't do yet), there doesn't seems to be any single CI service that offers all the platforms we currently target.
19:20:28*ozra joined #nim
19:22:34OnOsingle not, but Travis covers all Linux + OSX, and appveyor does Windows
19:22:58tmm1that still leaves arm, and 32-bit linux
19:23:01dom96I would say that having both build bots and CI solutions can't hurt.
19:23:18tmm1i think it makes sense to continue to use buildbot for the other platforms
19:23:21dom96would be nice if we could just host our own builders for travis
19:23:28dom96I have access to lots of platforms
19:23:34VarriountNot to mention FreeBSD (Once we actually get the build process running for that running)
19:23:53OnOtmm1: Travis has gcc arm cross compilers, but yes there's no arm testing
19:24:08OnOthis is a weakness
19:24:34*nim-buildbot quit (Quit: buildmaster reconfigured: bot disconnecting)
19:26:38tmm1why does buildbot say everything is green when tests are failing on windows?
19:26:42*nim-buildbot quit (Client Quit)
19:27:03*smodo joined #nim
19:27:13OnOnow it looks kinda dead
19:27:23tmm1i'm getting 502s http://buildbot.nim-lang.org/test-data/windows-x32-builder/7f4f37eaa20ea8aa5cf8c34e497aaa8245c590b3/testresults-651.html
19:27:38VarriountThat's because I'm updating the buildbot
19:27:47Varriount-_-
19:27:55OnOVarriount: omg I thought you decided to tear it down ;P
19:28:03VarriountNot yet.
19:28:20Varriounttmm1: If I made it so that the buildbot failed on broken tests, there would never be any successes.
19:28:26VarriountEr, successful builds
19:28:50tmm1the tests should all be passing on linux
19:29:18VarriountAraq: Should I have builds fail if there are non-passing tests?
19:29:24OnOyeah, I am just debating, I am neither convinced we should ditch it
19:29:52tmm1imho that's the whole point of tests, if there's regressions they should be bright red and in your face and prevent you from merging any code that breaks them
19:30:00AraqVarriount: eventually.
19:30:00tmm1but that requires they be green in the first place
19:30:38*brson joined #nim
19:30:43tmm1Varriount: you could do it for the linux builds atleast
19:32:38AraqIMO the testing should just look at the diff to figure out regressions. there is no reason to have 100% green tests all the time. that's just a burden on everybody
19:33:05Araqright now we have a threading test that occasionally does fail because of buffering races
19:33:37Araqso sometimes a \n is at the wrong place. now what? stop working on the important stuff and disable this test?
19:33:54Araqbut then it is disabled for good
19:34:09VarriountI do have a script that buildbot can run to compare test results, however I'm trying to figure out how to integrate it with the IRC bot.
19:35:19VarriountOnO: The buildbot site is back up.
19:36:50tmm1if there's one known failure you can re-run the tests, or merge despite it being red because you know better
19:37:08tmm1but atleast it should be red so you know something failed
19:37:15tmm1instead of regressions building up without anyone noticing
19:38:14Araqwell detecting regressions is important. but why don't our tools do that?
19:38:41Araqinstead they are all based on the idea that the previous state was 100% green which is totally arbitrary.
19:38:52Araqso track the previous state properly.
19:38:57Araqproblem solved.
19:39:20reactormonkAraq, but every test's gotta run111!!!!
19:42:21tmm1while we're at it the tools should fix our bugs and write our features for us too
19:45:33*Sembei quit (Quit: WeeChat 1.4-dev)
19:49:55Araqtmm1: but it's not science fiction what I'm talking about. testament already does exactly that, that's why it uses a database...
19:51:03VarriountI will say that using a more... lightweight configuration system would be nice.
19:51:30*Varriount looks at the ~600 line configuration file for buildbot
19:51:58AraqVarriount: that's why you should write Nim programs, not "configurations"
19:52:24VarriountAraq: I do. Well, I write Python scripts.
19:52:31reactormonkVarriount, or nimscript.
19:53:15VarriountAraq: Using scripts dependant on the program that your trying to test is as bad as circular dependancies.
19:53:38VarriountFor one thing, it means keeping a second, stable copy of Nim in the environment.
19:53:47*brson quit (Quit: leaving)
19:54:01*brson joined #nim
19:54:32AraqI don't get your point. I don't remember a regression that kept testament from compiling
19:55:19Araqand keeping a stable Nim around is as much effort as keeping a stable Python around.
19:55:40Araqexcept for the fact that Nim is not even 1.0 yet, ok.
19:56:22*strcmp1 joined #nim
19:58:21VarriountAraq: Except that if there's a second Nim in the environment, you get all sorts of fun with having to switch between executables, PATH variable trickery, and module dependancies.
19:59:21*strcmp3 quit (Ping timeout: 255 seconds)
19:59:34Araqwell you can rename your stable nim.exe to python4.exe
20:00:12Araqnim.exe doesn't care what it is called.
20:01:31VarriountAraq: Here. After this Saturday (which is when my Cisco certification exam is) I'll work on simplifying the buildbot configuration via Nimscript
20:02:20VarriountOr wait, can Nimscript run subprocesses?
20:02:26Araqyes
20:05:08*SianaGearz joined #nim
20:05:22SianaGearzohai nimmers. sup?
20:06:07*nim-buildbot quit (Quit: buildmaster reconfigured: bot disconnecting)
20:06:20Araqworking on 0.12.0
20:07:54SianaGearzthanks, benevolent dictator. just decided to check out nim for the first time, and was curious whether nim has a mechanism to deal with iterator invalidation, use-after-free, and similar kinds of typical c++ codebase faults.
20:09:16VarriountSianaGearz: I think it's called "garbage collection"
20:09:19SianaGearzi mean obviously nobody writes faulty code in the first place... except sometimes... but it has the propensity to become such with time.
20:10:43Araqso why haven't you moved to Ada four decades ago then?
20:11:09VarriountAraq: ?
20:11:36SianaGearzi wasn't alive 4 decades ago. 3 decades ago, spectrum basic and assembler was all i could have -.-
20:12:00SianaGearzVarriount: garbage collection would be roughly 1/3rd of a solution. it stops things from crashing, but if you're modifying something that you think you have a reference to but the owner no longer has, the garbage collector keeping it alive removes the crash...
20:12:07SianaGearzbut doesn't alert to an underlying bug.
20:16:12SianaGearzi was being sarcastic in the statement "nobody writes faulty code" :) because fact of the matter is, 10 years in, the bugs are definitely there, and they have to have come from somewhere -.-
20:16:34Araqwell iterators work differently. memory management works differently. the synax is different too.
20:16:59Araq'var T' works differently from 'T&'
20:17:51AraqNim is not D. we don't improve C++. we know Modula 3 always was the saner design to start with.
20:19:00SianaGearzi am not familiar with ada and modula. i used to be very familiar with Delphi a couple decades back, but it was anything but sane really apropos memory management.
20:19:31SianaGearzit was easy to create temporaries in expressions that couldn't be cleaned up at all and would leak.
20:21:20Araqyup. hence we have a GC.
20:21:52SianaGearzi AM familiar with D, i am excited for Rust approach to lifetime and memory management, and i was considering making something in either Rust or Nim.
20:23:02SianaGearzthat something being a prototype open-world racing game engine with about a few hundred megabytes of stuff in RAM, and 99.9% 60fps and never more than single frame drops.
20:24:13SianaGearzif i did it in D, i would have a really hard time avoiding GC and GC kicking in would mean 100ms thereabouts, with their current improvements. with boehm, it would be a lot more.
20:24:49Araqwith Nim it would be 0.5ms or something.
20:25:28SianaGearzwhich is really, really good. indeed reported high GC performance is what made me interested in the first place.
20:26:44SianaGearzanother thing that keeps me interested is that it compiles via C or C++ compiler, and has potentially small RAM footprint even with GC, which means i could even use it for Dreamcast (Renesas SH-4 CPU) for which i have gcc, but no llvm port.
20:27:16Araqdepends on what you do to it though, but I always thought people who can create an AAA game can pay me to make the cycle detector incremental. which currently can kill your framerates.
20:28:36SianaGearzi'm not AAA, i won't have any publishing money behind me, things will look like crap and will probably be open-sourced.
20:29:41SianaGearzlook like crap, play like crap, no matter, if it runs fast enough while putting enough crappy crap on screen, i'm happy enough.
20:31:17SianaGearzwell since you're apparently in a snarky mood, i'll let you work Araq. don't really want to distract you.
20:31:22VarriountOr you can just avoid cyclic references.
20:31:35SianaGearzthat is mostly the plan, Varriount.
20:31:41VarriountSianaGearz: He's usually like this at this time of day.
20:31:41AraqI'm annoyed by the latest regression.
20:36:50AraqSianaGearz: I wouldn't worry about D's GC or Nim's or Rust's lack of a GC. I would try out all three and see where it gets me. At the end of day you need to avoid allocations for all 3 to get really good performance out of your system.
20:37:43Araqand if you avoid allocations, you have to reuse your objects. and to reuse it needs to be mutable ...
20:39:51Araqand sometimes wonder whether Nim's Natural and subrange data types help software quality moreso than Rust's lifetime annotations
20:40:00reactormonkAraq, couldn't you use the effects system to optimize a map T -> T to mutate the objects instead?
20:40:53SianaGearzProblem with "try out all 3" is that it'll take 9 months instead of 3 :)
20:40:54*strcmp2 joined #nim
20:41:23SianaGearzsubstitute random numbers here, i think i'm off by an order of magnitude.
20:41:53SianaGearzbut i think i'll end up with about 200 000 lines of code thereabouts.
20:42:11Araqreactormonk: that's an optimization that's only available for Haskell right now.
20:42:25Araq(as far as I know, anyway)
20:43:24AraqSianaGearz: that's a fair point but Unreal 4 uses a GC and at least Quake 2 had the same performance with Boehm.
20:43:46*strcmp1 quit (Ping timeout: 260 seconds)
20:44:21Araqnow Q2 doesn't allocate much each frame.
20:44:50reactormonkAraq, ah neat, didn't know they can do that.
20:45:24SianaGearzAraq: if you bolt Boehm onto a C or C++ codebase which is correct and stays within memory bounds, Boehm will NEVER kick in, thus its performance is irrelevant.
20:45:41Araqexactly.
20:45:47SianaGearzi mean a codebase which actually eventually frees all it allocates.
20:46:20Araqwell my point is: they optimized the heck out of it and afterwards the GC was meaningless anyway
20:47:11Araqso you can say "ok, there was no advantage to having a GC"
20:47:28Araqbut also "ok, no harm was done having a GC"
20:47:41SianaGearzyou could use GC in those cases as leak detector essentially. but not as a solution to any given fundamental issue.
20:49:05SianaGearzand i'm not a team of people who will "optimize the heck out of everything". if i was superhuman, i could have just stuck to C++ like i did the last 12 years :)
20:51:31Araqwell you can start with a streamlined design and save a couple of optimization iterations. "streamlined" design here means: modern hardware hates you and your allocations. do not allocate, reuse your stuff.
20:52:00*strcmp1 joined #nim
20:53:23SianaGearzwell this is how games used to be written, with fixed size pools. but it is an extra effort because it hampers reuse of existing code that was written outside such considerations. Bullet physics library is going to allocate, certainly. and in some cases you're trading allocations for copying.
20:53:25*smodo quit (Ping timeout: 250 seconds)
20:53:40*strcmp2 quit (Ping timeout: 265 seconds)
20:53:43SianaGearzand it was before you had to dynamically load your objects and land tiles.
20:54:19SianaGearzanother impediment is that if my project is to have any (limited form of) success at all, it needs in-game editor.
20:54:28SianaGearzagain not exactly something you write without allocations.
20:54:56SianaGearzyer olde games relied on baked memory images where they'd just walk pointer offsets and fix them up.
20:55:19AraqI'm talking about the difference of
20:55:25Araqwhile true:
20:55:38Araq let a = returnsSomethingNew()
20:55:40Araqand
20:55:48Araqvar a = returnsSomethingNew()
20:55:51Araqwhile true:
20:55:56Araq reuse(a)
20:56:21Araqit doesn't mean you have to avoid allocations in your code altogether.
20:56:54Araqit's essentially loop invariant code motion that the compilers still cannot do for you
20:57:17AraqRust cannot do it, Nim cannot do it, D cannot do it.
20:57:31Araqunfortunately, of course.
20:58:00*nim-buildbot quit (Quit: buildmaster reconfigured: bot disconnecting)
20:58:08SianaGearzI am very well aware of that, thank you.
20:58:27SianaGearzi am very aware. but libraties are not very helpful to reducing allocations. STL isn't, Boost isn't. They all allocate.
20:58:45cazov_but with stl you can write your own allocator!
20:59:15Araqok, I'm sorry then.
20:59:18*Varriount pushes cazov_ back into his box.
21:00:09Araqfeels very good though. usually it's the other way round and people tell me things I already know.
21:01:22Araq(and there are few things that I dislike more ;-) )
21:01:36SianaGearzWhen two people tell each other things they both already know, it usually means they talk past each other.
21:01:56SianaGearzi bet you didn't think of that before?
21:04:10Araqno, I consider it a deep lack of respect.
21:05:17SianaGearzHave i displayed any lack of respect towards you? Well except that one time i called you "snarky".
21:05:58Araqno, not you. but just today reactormonk explained to me what an Option[T] is ... *cough*
21:06:40reactormonk>:)
21:07:52SianaGearzAraq: do you want me to tickle reactormonk for you?
21:09:00SianaGearzhe will rue the day when he experiences my tickle of ultimate TORTURE.
21:09:09strcmp1lol
21:09:22SianaGearzMwahahahahah.
21:09:51*yglukhov joined #nim
21:09:53AraqSianaGearz: back to Nim. we have TR macros and I'm working on making the effect system eliminate the GC at compile-time to a large extend, but don't hold your breath
21:10:45Araqthe loop invariant code motion I'd like to have is still science fiction...
21:11:32*Gonzih joined #nim
21:11:59*Gonzih quit (Remote host closed the connection)
21:12:04SianaGearzi heard of Nim's term rewriting, but so far i have a hard time imagining how i should find them helpful. i'll think more about them.
21:16:58*Varriount_ joined #nim
21:18:04*CryptoToad joined #nim
21:18:33*Varriount quit (Ping timeout: 255 seconds)
21:19:06Araqwell it can rewrite x.toLower == y.toLower into compareIgnoreCase(x, y) for example, saving you allocations
21:24:02SianaGearzWhich begs the question, why would i write the former in the first place. Right, because i was absent minded or forgot.
21:24:20SianaGearzBut if i was absent-minded, what are the odds that i find that i tend to do that and introduce a rewriter later?
21:25:19SianaGearzAnd if i do, why don't i simply rewrite all those occasions?
21:26:12SianaGearzI don't actually mind malloc, there are plenty of REALLY fast malloc implementations. jemalloc is awesome, tcmalloc is good, and tbb malloc is supposed to be swift too.
21:26:47SianaGearzWhen things are freed quickly upon allocation, no sane malloc worth its salt fragments either.
21:28:25SianaGearzIf i have a 200 000 line codebase, how do i comb it with a fine toothed comb to find that i'm not triggering a mark-and-sweep cycle and fix every potential occasion?
21:28:46SianaGearzI know that i probably shouldn't be particularly scared of M&S in Nim.
21:29:02SianaGearzIt's more of a general observation.
21:31:34SianaGearzMost of the code will (unfortunately) almost never be read once it is written, or only skimmed over, unless a very tiresome analysis of some dependent code demonstrates that that code has an issue to be investigated.
21:31:59SianaGearzAt which point, a lot of hours would be lost.
21:32:45Araqsorry but it doesn't "beg the question" at all. optimizers are specializers. you expose some simpler interface with fewer core constructs to the user and then optimize the special cases rather than burdening the user with it.
21:33:24Araqthe example TR rule would be added to our stdlib
21:33:54Araqand speed up *your* code.
21:36:38Araqregarding your "very fast mallocs exist now". I disagree. they are all quite bad because they have to support a fine-grained 'dealloc' operation
21:37:06*boopsies is now known as boopsiesisaway
21:37:58Araqrather than focussing on bulk operations
21:38:16SianaGearzYou speak of performance, but performance issues are somewhat easy to detect using a profiler. The problem that i find most frustrating in big software is maintaining correctness, even across somewhat absent-minded edits where the rest of the codebase hasn't been carefully considered.
21:39:44SianaGearzAlso i don't even care about average performance very much as much as i care about worst-case performance. And when M&S cycle takes 100ms, that makes every line of code suspicious instead of any given section. So how would i deal with that?
21:40:53SianaGearzYou tell me to be vigilant up front and throughout, but i'm not that perfect.
21:41:02AraqI speak of performance because that's what you brought up. now it's suddenly "correctness".
21:41:15Araqand now it's also WCET
21:42:30SianaGearzMy apologies, it has always been WCET. I haven't worded myself clearly enough.
21:44:21Araqwhen a M&S cycle takes 100ms that's bad, but it can also mean it only takes this long every 5 minutes which might be acceptable for a game. I'm not saying it's a good thing, but productivity advantages can justify it.
21:45:53AraqIMHO games are not about WCET at all.
21:45:58SianaGearzAnd perhaps malloc isn't as optimal as better allocation strategies. but i ship a TERRIBLE malloc abusing application with TCmalloc, one which is universally not quite fast enough at what it's trying to do, and malloc ends up not being as much as a blip on my profiles at all.
21:46:58SianaGearzOf course with Windows allocator, 10% of time would be spent in malloc/free, so there's that :)
21:48:51SianaGearzi think it depends on the genre. i mentioned racing games because 1- or 2-frame stalls end up being very decisive and painfully noticeable if they happen at just the wrong moment.
21:49:28SianaGearzthat actually goes for any sufficiently twitchy genre.
21:50:06Araqwell real WCET is about "missed a dealine? - people die." ;-)
21:50:40SianaGearzyeah well when shipping on Windows you can't have REAL REAL WCET anyway, so i'm not going to be that anal.
21:50:48Araqnot about "missed a deadline in 1 out of 1000 cases? some gamer is annoyed"
21:51:48Araqthere is a reason why most people don't develop software pretending they are NASA
21:54:55SianaGearzSo... you're telling me that i should just accept GC stalls? Why don't i ship with Mono compiled against Boehm! Half a second every minute is alright, i'm going to ba annoyed, users are going to be annoyed, but it's OK because nobody really died.
21:55:31*bjz quit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
21:55:58Araqno, I'm asking you for realistic requirements.
21:56:53*Trustable quit (Remote host closed the connection)
21:57:18Araqit's not about worst cases when it's really about statistical acceptable performance.
22:01:19Araqhonest question: how do you deal with network latencies in a racing game?
22:02:40*pregressive quit ()
22:02:57SianaGearzdead reckoning. you create an illusion that when two people start at the same time and move at the same speed, that they are at the same position.
22:03:59SianaGearzyou can use current lateral offset of other players that you received (but which obviously lies in the past) but you can dead reckon their position along the track.
22:06:38SianaGearzthe player predominantly concentrates on making his racing line (this part depends on local performance) and he adjusts his racing line to positions and actions of other players.
22:08:45SianaGearzwhen there's latency spikes, collisions should probably be disabled, and the other player can be adjusted visually to be really close but not colliding. it's fakery.
22:08:56SianaGearzbecause if you don't, the players will see unforeseen collisions.
22:15:57Araqargh.
22:16:02*Araq found the bug.
22:16:22SianaGearzhuggies!
22:16:32Araqno idea why this works on linux, makes no sense. tmm1 are you sure this thing is setup properly?
22:17:01tmm1yea pretty certain
22:17:14tmm1that test passes for me locally on my mac too
22:17:14Araqit is really nothing OS specific.
22:17:25*vendethiel quit (Ping timeout: 256 seconds)
22:17:50SianaGearzi'm curious too!
22:20:56*elrood quit (Quit: Leaving)
22:21:39Araqtobjconstr2.nim?
22:21:50Araqjust to be sure, it's the 2, not the 1.
22:22:46tmm1yep
22:23:53tmm1hmm i tried again just now and its failing
22:25:34*bjz joined #nim
22:25:39Araqwell it has no 'output' specification, so it only tests that it compiles
22:25:59Araqand compilation results are cached
22:26:48Araqhowever, the cache shouldn't be active when the produced C code changed
22:28:11Araqbut a misbehaving cache would explain it, cause it's a recent regression
22:28:41tmm1i see it failing on the travis build too, and its still green
22:28:51tmm1so i guess --pedantic is indeed broken on linux as well
22:28:57tmm1or its intermittent somehow
22:29:12tmm1both travis and appveyor should be starting from a clean cache, since its a fresh vm
22:29:47tmm1`nimble update` is also breaking now, with key not found: Transfer-Encoding
22:30:01tmm1httpclient issue it seems
22:30:21Araqthat's my changes to tables.[] :-(
22:30:36Araqbut indeed I didn't touch httpclient
22:30:48*bjz quit (Ping timeout: 250 seconds)
22:32:28SianaGearzIt helps to have turning be REALLY slow and cumbersome at high speed, so players have to slow down a lot in corners and latency issues become minor.
22:35:17*bjz joined #nim
22:39:03Araqtmm1: does the travis testing build run in parallel already?
22:43:06tmm1no
22:43:20tmm1it just runs koch test all --pedantic
22:44:35Araqer ...
22:44:43Araq'koch tests' is really weird
22:46:08Araqanyway, you're doing it wrong.
22:46:17Araqkoch test --pedantic all
22:46:23Araqit the right command.
22:46:42AraqUsage:
22:46:44Araq tester [options] command [arguments]
22:46:56Araqthe arguments are passed over to the nim compiler...
22:47:13Araqor to the final test program? who knows
22:47:44*bjz quit (Ping timeout: 265 seconds)
22:48:07tmm1that explains the strange behavior
22:50:16Araqah, the options are passed to the spec section and can be accessed via $options. how useful. (not!)
22:51:11Araqwhy does 'koch test' build yet another version of the compiler?
22:51:45Araqmakes little sense.
22:52:12Araqcan travis do what I do and call testament directly?
22:57:20NimBotnim-lang/Nim devel f4bfa07 Araq [+0 ±1 -0]: updated httpclient to use tables.getOrDefault
22:57:20NimBotnim-lang/Nim devel a40ace6 Araq [+0 ±2 -0]: fixes regression: tobjconstr2 test works again
22:57:56*NimBot joined #nim
22:58:58tmm1Araq: it could, but wouldn't it be better to fix koch
22:59:01tmm1since buildbot uses that too
22:59:13tmm1currently we build the compiler ~7 times per CI run
22:59:15tmm1it makes no sense
23:02:01Araqok, but I don't know who relies on this koch behaviour.
23:02:38Araqseems to have been done on purpose so that it tests the fresh compiler and not the one /usr/bin
23:03:11*Varriount_ quit (Ping timeout: 264 seconds)
23:04:24tmm1the comment is pretty confusing
23:04:31tmm1i guess it passes -opt:speed which might be good but i dunno
23:05:09*Varriount joined #nim
23:08:30tmm1i don't care, what do you want me to change the command to?
23:08:31Araq-d:release does that too
23:08:59Araqtests\testament\tester --pedantic all
23:09:29tmm1ok but i have to compile tester first
23:09:48*Varriount quit (Ping timeout: 250 seconds)
23:10:01tmm1so should i just use nim c -r tests/testament/tester --pedantic all
23:12:08AraqI'd use 2 steps.
23:12:14Araqtakes up less RAM then
23:12:33tmm1do i need this taintmode or to use cc
23:12:35tmm1like koch does
23:13:35Araqtaintmode is good, 'cc' doesn't matter
23:13:59AraqI don't think 'c' will mean anything but 'cc' anytime soon
23:14:42Araqbut fyi 'cc' means "compile to C" and 'c' means "compile with the default codegen"
23:20:11tmm1got it
23:20:18tmm1is it necessary to run both koch boot and koch boot -release
23:20:28tmm1each boot invocation does 3 compiles
23:21:14Araqit's not necessary but I don't know what we should do instead
23:21:28Araqit's certainly a good stress test
23:21:38tmm1ok
23:22:04Araqbootstrapping requires 3 runs and we want both a debug and a release build
23:27:14*saml_ joined #nim
23:31:25tmm1undeclared routine: 'actionTable
23:31:28tmm1new regression as well
23:33:08Araqha, just noticed it too.
23:36:10Araq[] now returns the 'proc' by var which is uncommon
23:37:31*brson quit (Ping timeout: 265 seconds)
23:45:27*rollo joined #nim
23:48:26*strcmp2 joined #nim
23:49:18*strcmp2 quit (Client Quit)
23:50:06*strcmp1 quit (Ping timeout: 244 seconds)
23:51:34*brson joined #nim
23:57:03*yglukhov quit (Remote host closed the connection)