<< 23-08-2013 >>

00:02:18*OrionPK joined #nimrod
00:33:06*Araq_ joined #nimrod
00:34:14*Araq__ quit (Ping timeout: 256 seconds)
00:36:28*noam_ joined #nimrod
00:36:33*noam quit (Read error: Connection reset by peer)
00:49:09*Boscop joined #nimrod
01:49:24*Boscop quit (Disconnected by services)
02:34:00*Associat0r joined #nimrod
02:34:00*Associat0r quit (Changing host)
02:34:00*Associat0r joined #nimrod
02:47:21*Sergio965 joined #nimrod
02:49:37*Boscop joined #nimrod
03:49:54*Boscop quit (Disconnected by services)
03:56:19*OrionPK quit (Read error: Connection reset by peer)
04:08:09*Associat0r quit (Quit: Associat0r)
04:50:12*Boscop joined #nimrod
05:16:01*Sergio965 quit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
05:50:28*Boscop quit (Disconnected by services)
05:56:13*zahary quit (Ping timeout: 246 seconds)
05:56:19*zahary1 joined #nimrod
06:50:42*Boscop joined #nimrod
07:50:57*Boscop quit (Disconnected by services)
08:51:08*Boscop joined #nimrod
09:20:30*EXetoC joined #nimrod
09:24:30*Associat0r joined #nimrod
09:24:30*Associat0r quit (Changing host)
09:24:30*Associat0r joined #nimrod
09:51:30*Boscop quit (Disconnected by services)
10:10:48*Araq_ quit (Quit: ChatZilla 0.9.90.1 [Firefox 23.0.1/20130814063812])
10:21:24dom96hi
10:24:04EXetoChi
10:51:43*Boscop joined #nimrod
11:05:18*EXetoC quit (Quit: WeeChat 0.4.1)
11:43:51*Araq_ joined #nimrod
12:23:56*BitPuffin joined #nimrod
12:25:30*Boscop quit (Disconnected by services)
12:31:57*rndbit quit (Quit: rand() & 1)
12:38:41*rndbit joined #nimrod
12:43:50NimBotAraq/Nimrod master 3a9eda3 Zahary Karadjov [+1 ±4 -0]: implemented and documented the new typedesc binding rules
12:47:54dom96http://togototo.wordpress.com/2013/08/23/benchmarks-round-two-parallel-go-rust-d-scala-and-nimrod/
12:48:14*dom96 hasn't read it yet
12:48:48dom96oh look, we're 3rd
12:53:25dom96And 1st in regards to SLOC
12:53:34dom96Araq_: ^
13:04:52*Associat0r quit (Read error: Connection reset by peer)
13:05:55*Associat0r joined #nimrod
13:05:55*Associat0r quit (Changing host)
13:05:55*Associat0r joined #nimrod
13:13:14Araq_I still don't know why we lose against D
13:13:32dom96The difference is very small anyway
13:13:40Araq_but I can't reproduce these on my machine anyway
13:13:51Araq_I hope he mentions that
13:14:10dom96sadly, no.
13:15:06dom96For me gcc was faster than clang.
13:16:53Araq_for me my version was both smaller and faster
13:17:15Araq_though the variance was quite high
13:17:21Araq_so it's hard to tell really
13:17:46Araq_but excellent work, dom96
13:18:00dom96thanks
13:18:09Araq_the article is quite in favour of us
13:18:11Araq_:D
13:18:29dom96indeed
13:21:54Araq_well next time I'll check the generated asm for differences
13:22:09Araq_should be interesting
13:22:40Araq_in fact ... it's a bit disappointing that sharing the same backend still produces 2% differences in runtimes
13:23:24Araq_makes me wonder why these optimizers are still so fragile
13:25:48*Boscop joined #nimrod
13:38:04*EXetoC joined #nimrod
13:51:46Araq_dom96: what about some forum post?
13:52:08dom96hrm, good idea.
14:03:10Associat0rdom96: http://www.kickstarter.com/projects/1461411552/elite-dangerous/posts/578089
14:06:47dom96Associat0r: Sounds awesome.
14:26:23Associat0rindeed
14:26:27Associat0rI can't wait
14:50:39*Araq_ quit (Quit: ChatZilla 0.9.90.1 [Firefox 23.0.1/20130814063812])
14:53:42dom96interesting, my HN post was revived even though it got to the second page of /new
15:09:20*mwcampbell joined #nimrod
15:09:42mwcampbellI just noticed that the Nimrod home page describes the GC as "non-tracing". So how does it work? Is it reference counting?
15:11:33dom96mwcampbell: I think so, i'm not sure of the details. http://build.nimrod-code.org/docs/gc.html seems to confirm that it is reference counting.
15:12:28dom96if you stick around until Araq is available he will be able to tell you the details.
15:20:26mwcampbellWhat is the advantage of deferred reference counting over a typical tracing GC? After all, IIUC, a deferred reference counting system doesn't immediately destroy unused objects like typical reference counting.
16:17:43EXetoCI guess you can figure out if the count will remain the same after all the local statements have been executed
16:21:58EXetoCeh, it probably doesn't matter if it's unchanged
16:25:25zahary1nimrod GCs are switchable at compile-time, but yes, the default one used deferred reference counting.
16:26:22dom96used? it doesn't anymore?
16:26:32zahary1the idea of deferred reference counting is that most of the increment/decrement operations actually involve stack variables as the managed objects are passed around functions
16:27:12zahary1so the goal is to eliminate counting for such stack locations (this is not done in any particular smart way, pointers on the stack just don't update the ref count of the allocated object)
16:27:44zahary1then after a while, you decide that it's time to collect and you must scan the stack to find any "active" pointers that may be there at this particular moment
16:27:47zahary1only then you count them
16:28:24zahary1sorry dom96. I meant "use"
16:28:42dom96ahh, alright.
16:32:39EXetoCI tried to call some GC function before, but I got a compilation error. is that to be expected when not specifying --gc?
16:34:49EXetoCmarkAndSweep and gc2 can't be specified apparently
16:36:38zahary1 well, which GC function did you try to call?
16:37:02EXetoCactually, just importing any of the modules fails
16:37:20zahary1they are already sourced as part of system.nim
16:38:04zahary1if the function is not exported it's not supposed to be callable from user space, but if you just want to mess around you can temporary export it (just modify the GC implementation file)
16:39:34EXetoCyeah. it works now
17:20:37EXetoCthe stepping mechanism appears to be usable
17:36:57EXetoCit seems to be able to do its job at a max cycle length of about 0.9ms when stressed, which is nice
17:38:41dom96nice. I think Araq said that in his tests it met a deadline of 2ms
17:39:11zahary1some parts of the GC are not subjected to this stepping mechanism yet (the cycle detection and clean up). . you should be fine as long as you don't create a large cyclic graphs in memory like the compiler does for example
17:40:41zahary1the 2 ms deadline is unfortunately old news. some expensive fixes have been implemented since then that can break it
17:43:59EXetoCdom96: yeah it's stated in the GC documentation
17:44:42dom96well it's certainly good news that you can reproduce it with an even faster time.
17:47:42EXetoCwhat I meant was that it doesn't really recycle any memory below that point, when stressed
17:48:31EXetoC"[GC] missed deadline: 12633000" so it takes a little less than 13ms sometimes
17:50:24EXetoC*1.3ms
17:52:34dom96how are you testing it?
17:55:06EXetoCand a deadline of at least 5ms ought to be good enough for most people
17:56:05*Sergio965 joined #nimrod
17:59:11EXetoCdom96: in a very crude way. I have this "var a = newSeq[int](5000000)" in my newGame function, and then I just call it a couple of times until the memory usage reaches about 3gb :>
18:00:07*Mat2 joined #nimrod
18:00:12Mat2hi all
18:00:31EXetoChopefully I'll have a decent game some time in the future, that can act as a real-world benchmark
18:00:32EXetoChi
18:00:50Mat2hi EXetoC
18:01:38dom96This looks like a lot of code just to get arg[0] and parse it as an int: https://github.com/arnehormann/Levgen-Parallel-Benchmarks/commit/4d23326c97fbb3ef8d01219b636bad2d4707fbae#L0R124
18:03:37dom96Silly Go.
18:07:17EXetoCI'll make it a little more real-world by creating 2k NPC's, which should make the tree a little more complex :>
18:07:37EXetoCor maybe 500. it takes an awfully long time for some reason
18:08:53dom96EXetoC: Ludum Dare starts in ~7 hours! Still not competing?
18:10:17EXetoCok, I did that 5k times apparently :>
18:12:58EXetoCzahary1: when was that dealt with? before this release?
18:14:10EXetoCdom96: nope
18:15:03dom96to be honest, I probably won't compete either
18:16:18Mat2EXetoC: Probably some kind of life game would be a good test (and easy to code)
18:19:54EXetoCdom96: why not?
18:20:39EXetoCMat2: I guess
18:20:55zahary1EXetoC, can't quite remember (if you ask about the GC fixes). but have you already introduced possible pointer cycles in your types? I suspect most simple projects won't have those
18:21:22*OrionPK joined #nimrod
18:21:23dom96EXetoC: I may not have the time over the weekend.
18:23:27EXetoCok
18:24:00EXetoCzahary1: few, if any, I think
18:26:49zahary1it's a matter of whether they are possible or not. the compiler will try to determine at compile-time if a certain type can form cycles or not
18:28:16EXetoCright
18:28:46EXetoCdom96: do you have time for a couple of 0ad games this weekend?
18:29:16*mwcampbell quit (Quit: ircII EPIC5-1.1.2 -- Are we there yet?)
18:29:51dom96EXetoC: All depends on how quickly I can write this blog post :)
18:33:29dom96EXetoC: I'll say 'maybe', but I feel bad for giving you hope and then telling you no the next day :(
18:35:59EXetoCI'm sure you can do it in 5-10 minutes :>
18:37:32dom96I'm getting distracted reading comments about these benchmarks lol
18:38:58EXetoCjust unplug your internets
18:39:29Mat2multitask faster :D
18:39:45dom96But then I can't stream music from spotify :P
18:39:58Mat2*lol*
18:47:17*io2 joined #nimrod
18:47:48dom96hello io2
18:47:56io2hi
18:48:20io2came in after reading http://togototo.wordpress.com/2013/08/23/benchmarks-round-two-parallel-go-rust-d-scala-and-nimrod/
18:48:42Mat2hi io2, dom96
18:48:57*Mat2 is now known as Mat2-coding
18:49:12dom96Cool. Nice to see we are getting new people thanks to it :)
18:55:49io2static typing; compile time metaprogramming and export to C++. What is not to like now that I think about it.
18:56:03dom96precisely :D
18:58:19io2the multiple dispatch feat looks interesting as well, could simplify certain scenarios
19:06:57dom96yes, and so much more: first class iterators, closures, generics, a real-time GC and a brilliant python-style syntax.
19:09:47EXetoCwin
19:14:25EXetoCno curly braces everywhere
19:14:41dom96yes, and no semi-colons!
19:17:15Mat2-codingan IDE
19:17:32dom96and IDE support in the compiler!
19:17:45*dom96 feels like a car salesman lol
19:24:43OrionPKno debugger in the IDE
19:25:10Mat2-codinghi OrionPK
19:25:32OrionPKhola
19:26:11Mat2-codingdo you mean a machine-code debugger (that would be useful) ?
19:26:43OrionPKno source level debugger built into the IDE
19:27:10OrionPKbreakpoints and locals and all that good stuff
19:29:32Mat2-codinghmm, I can not think of a scenario where such a debugger would be needed but anyhow: Who else here wishes a source-level debugger for Nimrod ?
19:30:02OrionPKu never need it until you really do to track down a tricky bug
19:30:33dom96Sure, debugger integration with the IDE would be nice. For now, 'echo' is your friend.
19:38:22Mat2-codingis 'while false:' the correct statement for an endless loop ?
19:38:43EXetoCtrue?
19:39:54EXetoCyes you'd use while
19:40:10Mat2-codingthanks
19:43:12Mat2-codingdom96: My opinion is that the exception mechanism should a sufficient and easy to handle mechanism for all possible debugging tasks- Of course very subjectve viewpoint
19:43:43Mat2-coding^should be
19:50:21EXetoCsome operations are always unintended, and the compiler might throw because of that, but many logic errors will be uncaught
19:51:39Mat2-codingand you find it easier to find out these kind of errors with use of a debugger ?
19:52:12EXetoCrather than what? anyway, echo has been good enough for me, but I've never done anything really complicated
19:54:35*shodan45 joined #nimrod
19:54:45dom96hello shodan45
19:54:46Mat2-codinghmm, I think my current project is somewhat complex but haven't need a debugger so far
19:54:52Mat2-codinghi shodan45
19:55:14dom96To me, echo is good enough too. But I agree with what EXetoC said.
19:59:17Mat2-codingok, exist there any plans for a source-level debugger in Aporia ?
19:59:54shodan45hello
20:00:04dom96I may integrate endb (http://build.nimrod-code.org/docs/endb.html) sometime in the future.
20:00:21shodan45I'm assuming that since there are 31 nicks in here that you don't get many newcomers? ;)
20:01:40dom96yeah. We get newcomers from time to time, there are a lot more during times when we are on the front page of reddit and HN though as you may imagine.
20:04:49shodan45I got here via http://togototo.wordpress.com/2013/08/23/benchmarks-round-two-parallel-go-rust-d-scala-and-nimrod/ via HN
20:05:12dom96indeed, that's what I figured :)
20:05:14shodan45so... first question: OOP?
20:05:24OrionPKdebugger is pretty invaluable for large scale applications
20:05:24shodan45no mention of it on the site
20:05:34OrionPKthere arent that many large scale nimrod applications, other than the compiler itself ;)
20:06:13dom96OrionPK: You can still use endb or gdb from the command line if you're in dire need of a debugger
20:06:20OrionPKyou can do OOP, shodan45, sec
20:06:39OrionPKhttp://nimrod-code.org/tut2.html#object-oriented-programming
20:06:44OrionPKdom96 yeah, I know
20:06:55OrionPKdom96 talking about an integrated debugger in the IDE though
20:08:51shodan45OrionPK: oh ok... cool
20:09:46OrionPKshodan45 it's almost like creating extension methods for types, if you've ever done C#
20:10:27dom96People also created some macros to make OOP nicer in Nimrod: http://forum.nimrod-code.org/t/90
20:13:33shodan45I'm coming from Python, JS, some Go, and PHP (ughhh)
20:13:48OrionPKwell you should enjoy the performance benefits ;)
20:17:11*oal joined #nimrod
20:21:15dom96Definitely. I came from Python too :)
20:21:19dom96hello oal
20:21:19oalNimrod looks super cool
20:21:21oalHi
20:21:34oalPythonista here as well
20:21:54Mat2-codinghi oal
20:22:36dom96Always nice to hear when people call Nimrod cool :D
20:22:54oalI found it because of https://togototo.wordpress.com/2013/08/23/benchmarks-round-two-parallel-go-rust-d-scala-and-nimrod/
20:22:56dom96Araq is missing all this flattery heh
20:23:00oalon HN
20:23:53OrionPKdom96 wrote the nimrod implementation for that benchmark
20:25:50*charles is now known as Guest77535
20:26:11dom96indeed :)
20:27:45*[2]charles quit (Ping timeout: 276 seconds)
20:32:39oaldom96, wow, you're really active in the Nimrod world :)
20:32:53*ltbarcly joined #nimrod
20:33:00oalI'm browsing github, and your nick shows up on every other page :p
20:33:31dom96lol
20:33:38dom96yep, that's me.
20:33:42dom96hello ltbarcly!
20:33:51ltbarclyhello there
20:34:14Mat2-codinghi ltbarcly
20:34:50shodan45hmm, it's friday and I found a new language to learn... I see a fun weekend ahead :D
20:35:37dom96Feel free to ask any questions that you may have here :)
20:36:37shodan45omg nimrod, where have you been all my life?!
20:36:39shodan45xD
20:37:20shodan45hm, interesting comment system
20:37:50dom96hrm, what comment system?
20:38:24shodan45comments are language tokens
20:38:35shodan45you can't just put them anywhere
20:38:51dom96oh hah. For some reason I thought you were talking about comments on some website.
20:40:01dom96yeah, that's because they are part of the AST>
20:40:04dom96*.
20:41:44dom96however, I think soon this restriction may disappear.
20:42:01shodan45it's certainly... unique ;)
20:42:25shodan45of course, I haven't used it yet, so I don't know if I like it or not
20:42:31dom96This seems to suggest that my memory is correct: https://github.com/Araq/Nimrod/blob/master/todo.txt#L59
20:44:04EXetoCchanged how?
20:45:00dom96I would bet that Araq will make the rules more relaxed. Not sure if he would remove the comments from the AST altogether.
20:49:47shodan45oh very slick - the compiler checks case statements to make sure all possible cases are covered
20:54:30*gradha joined #nimrod
20:55:32*Sergio965 quit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
20:55:50gradhabut comments are only available if invoked with "nimrod doc", or can you access them "at runtime"?
20:56:22dom96You mean at compile-time in a macro?
20:56:47gradhacan you write echo foo._doc_?
20:56:54dom96no
20:56:56gradhaI guess docs are simply stripped for performance
20:57:01dom96Indeed.
20:57:40gradhawould be fun to work with dynamic dispatch
20:58:01EXetoCit's just a matter of including only those that are referenced
20:58:27gradhareminds me of C++ template library problem
21:01:47gradhadom96: are you writing that blog post in your new shiny blog generation engine?
21:01:53*Mat2-coding is now known as Mat2
21:01:58dom96gradha: yep
21:02:15dom96Haven't started on that blog post yet though, have other ones to finish first heh
21:03:05Mat2hi gradha
21:03:19gradhahi Mat2
21:03:53dom96gradha: you should check out ipsum genera. The name is just so cool IMO lol
21:05:25Mat2ok, so my Nimrod port seem to work so far, I can compile some test routines. How is the auto-generation of documentation handled ? Does it work like doxygen for example ?
21:05:48gradhadom96: I would like something more fancy like: 天鎖斬月, literally "Heaven Chain Slaying Moon"
21:05:57gradhaMat2: run "nimrod doc2 module.nim"
21:06:13gradhathat creates an HTML with all exported symbols
21:06:20gradhathere's nothing more at the moment
21:06:22dom96gradha: It should support unicode thanks to Nimrod's awesomeness.
21:06:39Mat2gradha: thanks
21:07:17EXetoCyeah, that's how awesome Nimrod is
21:07:29EXetoCunicode, biatch!
21:08:51gradhadom96: I was brainstorming for a next blog post title, how about "30 years later we still can't be friends"
21:09:37dom96http://memegenerator.net/instance/40826287 :D
21:11:21Mat2my all-time star of text encodings is EBCDIC ;)
21:11:23*dom96 hopes someone watches Breaking Bad here and gets the reference
21:11:44dom96gradha: I hope that post is not about me.
21:12:20Araqhey shodan45
21:12:25AraqI love your nick :D
21:12:51gradhadom96: it's about how interprocess cooperation for cpu/memory has stupidly failed, hindering progress, so we have these processes which believe they are alone in the machine and waste resources
21:13:58gradhadom96: and example is running two processes at the same time, each spawning the "optimal" number of threads, one per cpu, and now you have 16 threads fighting for cpu
21:14:06dom96gradha: oh hell yes. I want to read that. And I completely agree. Also, that's a brilliant title for a blog post about that.
21:14:09gradhadom96: on an 8 core machine
21:14:40dom96welcome back Araq. You've missed all the new users!
21:14:52Araqgradha: "optimal" is often 2 threads per CPU due to hyper threading
21:15:07Araqdom96: yeah well I noticed :-)
21:15:13gradhaAraq: only if the OS is not already virtualizing hyperthreading as 2 cores
21:15:17dom96Araq: Also read the reddit/HN discussion.
21:15:21Araqgradha: true
21:16:58Mat2hi Araq
21:18:26Araqdom96: I read it, nice comments
21:20:53dom96indeed
21:21:30Araqhi Mat2
21:22:04gradhathe other day i tried running nimrod gamera under wine and found odd results, it would randomly crash, but running kock again would continue compiling further each time
21:22:53gradhain the end I managed to recompile the git version under wine, but it hinted that either wine is broken, or there's some other nimrod issue is hitting under wine
21:23:26gradhareminds me of open file handles under macosx for the test suite
21:24:45*gradha still unable to write koch properly despite all the attention
21:24:56*Aramur joined #nimrod
21:25:10Araqyeah these 4 letter words are cruel, gradha
21:25:13Araqhi Aramur
21:25:26gradhawho needs dongle jokes with such a build system
21:25:29Aramurhi
21:26:02ltbarclyI can't figure out why this won't compile: https://gist.github.com/justinvanwinkle/6324195
21:26:08ltbarclyit says test.nim(14, 53) Error: undeclared field: 'student_id'
21:26:19ltbarclyI took it right out of the tutorial
21:26:22ltbarclymostly
21:27:18ltbarclyI brew installed nimrod, version 0.9.2
21:27:48Araqltbarcly: you need to do TStudent(student_id: 5, ...)
21:27:55Araqsorry it's a known bug ..
21:27:56ltbarclywhy would the order matter?
21:27:58ltbarclyoh
21:28:00ltbarclygotcha
21:28:03Araqyeah :-(
21:28:10ltbarclyI'll fix it, any idea where the bug is?
21:28:18Araqlol sure
21:28:55ltbarclyI was randomly making something very similar to Nimrod, not knowing it existed
21:29:03gradhaltbarcly: brave soul
21:29:11Araqcompiler/semexprs.nim:1649 following
21:29:12shodan45Araq: hi... you're the one to "blame" for nimrod? ;)
21:29:28Araqshodan45: yes
21:29:28ltbarclyhttps://github.com/justinvanwinkle/mule
21:29:31ltbarclyI was compiling to CL though
21:29:35ltbarcly99% the same ideas
21:29:40ltbarclyso, you know, good work :)
21:29:55shodan45Araq: interesting language you have here
21:29:58Araqwe'll see about the 99% same ideas :P
21:30:00ltbarclyI had spent about 2 weeks on it before I saw your thing
21:30:10Araqwe have some unique features :P
21:30:18ltbarclyyea, there is more than one way to skin a cat
21:30:21shodan45hm, anyone use nimrod on embedded hardware? microcontrollers, etc?
21:30:26ltbarclyunique? like what
21:30:28shodan45or are the binaries to big?
21:30:47gradhashodan45: IIRC reactormonk did some work to make it compile to arduino
21:30:52Araqshodan45: check dom96's toy OS kernel
21:31:00dom96ltbarcly: That looks very similar to plain old python.
21:31:15ltbarclywell, the compiler is plain old python
21:31:22ltbarclyhttps://github.com/justinvanwinkle/mule/tree/master/src/test
21:31:46ltbarclyI was just about to add a package system and now I'm going to play with nimrod awhile instead
21:32:01gradhaAraq: since you are touring the guests around the compiler, where would I hook the ouroboros module for import/include to use it?
21:32:50dom96shodan45: https://github.com/dom96/nimkernel :)
21:33:18Araqgradha: compiler/importer.nim I guess
21:33:46gradhaAraq: ok, thanks
21:33:47shodan45yeah, I'm more curious about bare-metal coding for AVR or MSP430
21:33:58shodan45meaning no kernel at all :)
21:34:28Araqwe used to have an example for the avr, I don't know if it still works
21:34:46AraqI think --os:standalone --cpu:avr does the job
21:35:45ltbarclyhmm, the bootstrapping instructions reference csources.zip
21:35:50ltbarclythey seem to be awol
21:36:04Araqwell we changed that
21:36:16Araqsorry it's still heavily in development
21:36:19Mat2shodan45: take a look at 4e4th for the TI launchpad
21:36:29shodan45Araq: that's amazing... I've only scratched the surface so far - how are you able to do all of this? Go, for example, isn't able to target microcontrollers because it's just too "big".
21:36:29ltbarclysure, not complaining, how do you do it
21:36:56Araqshodan45: the language semantics are defined with the optimizer in mind
21:37:27Araqso we have global dead code elimination and try hard the semantics don't break it
21:38:09shodan45Araq: ok, fair enough... but why isn't everyone else doing that? AFAIK, nimrod is fairly unique in being pretty high level but still being small & fast.
21:38:41Aramurhere's a question... I'm testing Nimrod to build an interpreter for another language, is there any particular reason on why classes seem to be orders of magnitude faster than unions when interpreting an AST?
21:38:54gradhaltbarcly: recently i compiled from git and didn't have problems following the instructions, maybe you are reading the outdated ones?
21:39:06dom96ltbarcly: Which bootstrapping instructions are you referring to?
21:39:07Araqno idea what you mean Aramur, nimrod doesn't have 'class'
21:39:08ltbarclyI just forked like 10 minutes ago :/
21:39:12ltbarclythe ones in install.txt
21:39:21EXetoCdon't languages like D, Rust and C++ satisfy those requirements?
21:39:27AramurAraq: sorry, I mean objects
21:40:03dom96ltbarcly: Ahh yes. Sorry, forgot to update that. Take a look at the readme.
21:40:24EXetoCpossibly with a little bit of work
21:41:28ltbarclyahh, thanks
21:41:43Aramurin particular, this is the code I'm testing: http://pastebin.com/raw.php?i=xp9F1CA5 (trying to decide the best way to represent an AST efficiently)
21:41:54Araqshodan45: well it's hard to answer this question and stay polite to the other language designers at the same time
21:42:38*profmakx joined #nimrod
21:42:42profmakxhi
21:42:47Mat2hi
21:42:50ltbarclyAraq: I heard the other language designers were making fun of you behind the gym, you shouldn't be so nice
21:42:53gradhahello profmakx
21:42:54Aramurhi, profmakx
21:42:54dom96hello profmakx
21:43:59Araqltbarcly: I am not nice, stay here and you'll find out
21:44:13OrionPKyeah he's definitely a mean old sod
21:44:24profmakxheh, what a warm welcome. A colleague of mine mentioned nimrod to me, and i started doing some coding, I really like it so far
21:44:57Mat2shodan45: Which MCU of the MSP430 series have you in mind ?
21:45:01EXetoCgreat
21:45:37EXetoCsoon we'll be able to go on kickstarter and raise a million dollars
21:46:07gradhaEXetoC: we need to build that new gym for Araq without the people who talk behind his back
21:46:28AraqEXetoC: yay. Then I will show my enemies the true meaning of perfection.
21:46:34ltbarclyyea, our own gym. with blackjack. and hookers.
21:46:55EXetoCand a cat circus
21:47:03ltbarclyyou know what? forget the gym
21:47:09EXetoClive lolcats
21:47:09gradhait's going to be the best kickstarter ever
21:47:26dom96woo futurama references ftw
21:48:17ltbarclywow, this channel is just like #python. well, some small differences, like knowing things and having a sense of humor
21:48:41Araqhey the python guys have a nice sense of humor
21:48:57ltbarclynot the ones in #python
21:49:23Araq"explicit is better than implicit" ... speaking about a *dynamically typed* language
21:49:39ltbarclyyou're the one that stole 70% of your syntax from them
21:49:48Araqno I didn't
21:49:58Mat2oO
21:50:01ltbarcly90%?
21:50:12Araqcheck out pascal and modula 3 and Ada to see where it comes from
21:50:13EXetoCyeah stole is the right word
21:50:22gradhaltbarcly: you just haven't read about the syntax naming wars in nimrod yet
21:50:29ltbarclyfine fine
21:50:39dom96he merely borrowed it, he will return it to them once nimrod hits version 1.0.
21:51:06Mat2get some sleep, ciao
21:51:07Araqoh and Oberon
21:51:14gradhabye Mat2
21:51:19dom96cya Mat2
21:51:39*Mat2 quit (Quit: Verlassend)
21:51:42shodan45Mat2: I just have a launchpad from a while back... none in particular, I just meant generally suited for microcontrollers
21:51:48shodan45oops heh
21:52:35gradhaawww, http://forum.nimrod-code.org/t/191 should reference the github issue acumulating all the name calling
21:53:10ltbarclyyea, modula 3 and ada both use indentation rather than block ending tokens, and they use : at the beginning of a block, and they all have exception systems with the syntax try: … except ExClass: … finally: …, and so on for like 2 hours
21:53:39ltbarclyI'm not saying you were wrong, it's quite nice. I mean, you could have made it look like ruby, and that would be sad
21:54:04dom96or like C which all the other new languages seem to be doing :\
21:54:15ltbarclybut its easy to PARSE
21:54:44ltbarclyand that's obviously the most important thing to these guys
21:54:58gradhais there much difference to parsing between using indentation and braces?
21:55:24ltbarclywell, kindof
21:55:33dom96Yeah, of course. Apparently computers are still not capable of determining the end of line based on well, the end of line character, they need a damn semicolon.
21:55:42ltbarclyit's trickier, but in the end it takes maybe an extra 2 hours of work
21:55:42ltbarclygenerally you have to take the token stream and 'fix it up'
21:55:45Araqgradha: not really
21:55:48ltbarclyalthough with something like a Peg you can do it directly
21:55:56zahary1any way you slice it, parsing is one of the easiest problem when implementing a compiler
21:56:02Araqit took me 3 attempts to get it right
21:56:11ltbarclyyea, I found parsing to be the hardest part
21:56:13Araqbut the first attempt is the same as the third so ...
21:56:16ltbarclybut I didn't do it in school
21:56:27gradhadom96: hah, just imagine the pain of using a backslash for line continuations, the horror!
21:56:45Araqand indeed if parsing is a problem for you you shouldn't be designing a language, sorry
21:56:56Araqno offense, ltbarcly
21:57:10*ltbarcly lets spill a single tear
21:57:21gradhawe really need that new gym
21:58:12dom96gradha: I would watch that horror movie.
21:58:21ltbarclyI don't know if 'you shouldn't be' is even relevant, if you want to do something, figure it out, nobody is born shitting EBNF
21:59:02*zahary1 is now known as zahary
22:00:11dom96Araq: why is the bootstrap info in install.txt anyway?
22:00:23AraqI think you wanted it there, dom96
22:00:37dom96Is it because it becomes part of download.html on the website?
22:00:41AraqI didn't include it in the beginning
22:00:58Araqthat's not the reason, download.txt can easily add its own stuff
22:02:13dom96If I wanted it in there I probably would have included it myself. I don't recall telling you to put it in there.
22:02:35Araqwell I recall you telling me exactly that
22:03:00Araqbut just move it to download.txt and be done with it
22:03:22*gradha imagines a gym with posters of manly pink unicorns
22:04:25dom96Araq: Are you still insistent on having both a readme.md and a readme.txt?
22:04:33Araqyeah
22:04:38Araqwindows is important
22:04:51dom96well alright
22:05:50gradhaI've heard rumors you can transmogrify .md files into .txt for releases
22:06:04*brson joined #nimrod
22:06:46dom96Yeah. I attended one week of Hogwarts and learned how to do that.
22:08:17dom96hello brson
22:08:30EXetoChi Rust dude
22:08:38EXetoCit's still difficult to open arbitrary files in a text editor? on a default installation anyway :>
22:14:16NimBotAraq/Nimrod master 814e441 Dominik Picheta [+0 ±3 -0]: Removed outdated bootstrapping info from install.txt
22:14:54EXetoCmaybe he's here because of that blog entry
22:15:36EXetoCbrson: how's the work on 0.8 going?
22:16:16*ltbarcly quit (Ping timeout: 260 seconds)
22:16:25brsondom96: hi
22:16:40brsonEXetoC: it's going the way it usually goes. controlled chaos
22:17:04EXetoCsounds good
22:18:19zaharyhi brson, nice to see you here. are you new to nimrod or you've seen it in the past too?
22:19:42Araqzahary: btw I disagree that nimrod's deferred RC is nothing special; the compiler does location analysis to determine whether it's on the stack or the heap
22:20:21Araqthat may not be beyond state of the art, but it's not simplistic either
22:20:30zaharyI meant that the idea of deferred GC doesn't try any of the "smarter" liveliness analysis and so on
22:20:53zaharywasn't trying to say anything about our implementation
22:21:01Araqoh alright
22:24:00Araqand btw wait until you see my 'writes' effect tracking which does escape analysis as a side effect :P
22:28:24zaharyI'm indeed interested in this. sometimes I even daydream how I'm gonna use in the compiler to pinpoint who is modifying the shared AST of a generic type for example :)
22:28:54Araqwell I'm writing a blog post about it
22:29:26Araqthe algorithm is not too hard, it needs 2 passes over the AST, no fixpoint iteration worries
22:29:55zaharyis this still a proc level granularity for the two passes?
22:30:04Araqyes
22:30:26Araqit's control flow independent
22:30:47AraqI could make it control flow dependent but I don't think this makes any sense
22:30:56gradhaAraq: after you finish writing that blog post, will you make the blog visible?
22:31:12Araqgradha: depends on whether you like it :P
22:31:38*gradha starts to get nervous at the responsability
22:32:11brsonzahary: i don't have any experience with nimrod, but I see it discussed pretty often in stories about systems languages
22:32:14dom96Araq: Just add some kpop in there and gradha will love it.
22:32:36gradhaAraq: yes, I can send you gifs to sprinkle around
22:33:20gradhayou could use this one for the people from the gym http://dl.dropbox.com/u/145894/gifs/crayon_pop_cares.gif
22:33:42dom96lol
22:35:20zaharybrson, do you plan at any point integrating an interpreter in the rust's compiler? for stuff like CTFE and maybe richer macro support
22:39:57brsonzahary: CTFE is likely to happen at some point, not with an interpreter but with some sort of phased compilation. also required for macro exporting, yes.
22:40:22zaharyphased compilation, you mean compiling a DLL module that the compiler will then load?
22:40:33zaharythis idea have been explored here as well
22:40:36brsonyes
22:41:15brsoni think the jit has also been considered for this
22:41:20brsonit's pretty far off at this point though
22:42:52zaharythis is probably the biggest difference between the languages right now. you have serial types, which is nice (the unique pointers), but these are likely to arrive here as well and our generics system is more "soft" (more like C++, where you don't have to specify interfaces)
22:43:34zaharyof course, there are many other differences, but I find them more superficial
22:43:46reactormonkgradha, yeah, and it doesn't really work
22:43:53reactormonktoo complicated
22:45:44*jdpo joined #nimrod
22:46:36Araqhi jdpo, welcome
22:46:48jdpohey
22:47:15dom96Are you jdp?
22:47:38jdpono
22:47:59dom96This could get confusing heh.
22:49:17*gradha wonders how to perform a coup d'état against NimBot
22:50:42dom96You !ping it till it dies :P
22:51:28gradhaneed to find a good replacement though, like the GI Joe movie
22:52:39gradhaNimBot: whistle the nimrod song!
22:53:25gradhahrm... I guess teaching it to high five comes first
22:55:35Araq!lag
22:55:35NimBot110ms between me and the server.
22:55:45Araqthat's the nimrod song for ya
22:55:58jdpois there 1.0 release date?
22:56:24Araqjdpo: my guess: end of 2014
22:56:36io2seriously?
22:56:42Araqquite
22:56:45gradhaeven though 2013 is the year of nimrod?
22:56:52io2that is quite interesting
22:57:17Araqwell ... we only have people working on it in their spare time
22:57:35gradhabtw, it's so weird to import ouroboros from the compiler, it's like... dirty... a language using itself to... ugh...
22:57:58io2Araq: where do I find more info about functional programming style in Nimrod
22:58:28io2meaning, projects using the style in nimrod, code speaks for itself
22:58:53gradhaio2: stuff like using map instead of loops?
22:59:21io2stuff like using monads
23:00:01Araqfowl has a "maybe monad" check out his repositories
23:00:33io2where?
23:00:42dom96https://github.com/fowlmouth/nimlibs/blob/master/fowltek/maybe_t.nim
23:01:07io2thanks dom96
23:01:22dom96np
23:01:26io2is there a planet like aggregator for nimrod blogs?
23:01:43gradhaio2: you are presuming there are nimrod blogs
23:01:57io2or, people who write about nimrod
23:02:03io2indeed
23:02:17*shodan45 quit (Quit: Konversation terminated!)
23:02:43gradhaI have at http://gradha.github.io a single lonely post which barely mentions nimrod
23:03:05dom96I am setting up a blog as we speak.
23:03:07gradhadom96 and Araq are preparing theirs, but they are still beta
23:03:11io2been in yours gradha :)
23:03:19*gradha blushes
23:03:26dom96You can read the forum if you want.
23:03:27io2I'd say they are doing them in nimrod?
23:03:39gradhadom96 should be
23:03:42io2been checking that out actually
23:03:46dom96indeed. I got sick of Jekyll.
23:03:50gradhaI'll convert to dom96's religion whenever he publishes his
23:04:05dom96gradha: Yes. Become a ipsumarian.
23:04:22gradhaipsumarianism sounds good
23:04:31io2jekyll if overcomplicating simple stuff
23:04:34io2is*
23:05:02dom96My static blog generator is already on github btw: https://github.com/dom96/ipsumgenera
23:05:37dom96I wrote it very quickly though, so docs could be improved.
23:05:45dom96And most of the rst AST is still not implemented heh
23:05:52gradhadom96 that's why I'm watiting for the real example
23:06:05*dom96 hopes people will love his design
23:06:22io2thanks for the tips guys, so far it seems an interesting language
23:06:40gradhahow many gods does ipsumarianism pray to? still have a few slots free
23:06:53io2later all
23:06:58gradhaio2: bye
23:06:59*io2 quit ()
23:07:30zaharyAraq, what plans did you have about the "generic" keyword?
23:08:19Araqzahary: quite like rust's "impl" keyword
23:09:02Araqgeneric TTable[TKey, TValue]:
23:09:11dom96hrm, is that like type classes in haskell?
23:09:17Araq proc get(self; k: TKey): TValue
23:09:46*Sergio965 joined #nimrod
23:09:52dom96hrm, I guess not.
23:09:58Araqdom96: no it's only sugar to avoid some typing
23:10:05dom96indeed. I remember suggesting it.
23:10:16dom96How did we end up with the 'generic' keyword for it?
23:10:48dom96hrm, well. I guess it is a bit different to what I suggested.
23:11:01Araqwell some other plan just was:
23:11:11Araqgeneric TKey, TValue:
23:11:25dom96I'm thinking of:
23:11:36Araq proc get(self: TTable[TKey, TValue], key: TKey): TValue
23:12:09Araqand here it's obvious why it's called "generic"
23:12:23dom96with (foo: TObject): proc blah() = # foo is the first param that blah takes.
23:13:03Araqwell thanks to zahary's awesome generics it's not necessary anymore
23:13:12Araqso it's free for anything
23:13:53dom96what's not necessary anymore?
23:13:59zaharyI plan to use it for my user-defined type classes syntax
23:14:28zaharytype Container = generic value
23:14:28zahary value.size is int
23:14:29zahary items(value) is iterator
23:15:03Araqthat's fine syntactically
23:15:20BitPuffinzahary: does the stuffs work yet? :D
23:15:22Araqnot sure if it's the right thing to do :P
23:16:54zaharythe indented block is arbitrary statements that should compile. this is really awesome way to solve the problem because it allows you to encode protocols without committing to certain types
23:17:07dom96hrm, interesting. Does that actually check for the presence of a field of name 'size' and type 'int'?
23:17:17dom96So the type class will match any type with that field?
23:17:36zaharytype Foo = generic value
23:17:36zahary var x = value.getImplementationDetail
23:17:36zahary x.foo(10, 20) is AnotherTypeClass
23:17:57Araqzahary: ah so 'items' can be a fuzzy iterator with default params etc.
23:18:09Araqwell the parameter list can be fuzzy
23:18:16Araqthat's good
23:18:27zaharyeverything can be fuzzy, as I said arbitrary code
23:18:37zaharyit just happens that the is operator is useful for the common case
23:18:57Araqhmm
23:19:13Araqwell you got a list of statements of "bool" then, which is something new
23:19:45Araqcurrently only the last statement of a block may yield a non-void type
23:19:47dom96from your latest example: does that mean that a type can have a field which is in fact a type class?
23:21:51zaharywell, I know the gritty details - it does require a bit special treatment and there will be a semTypeClassMatch(T, StmtList) :)
23:23:03zaharythere are also some other tricks like modifying the input expression (for implementing conversions ala varargs[string, $] and implementing stuff similar to scals's implicit traits)
23:23:13zaharyI'll abuse the return keyword for this
23:23:20Araqhmm
23:23:31AraqI don't know
23:23:44Araqbut in general feel free to introduce a better keyword
23:23:55Araqand also a new tyWhatever in the compiler
23:24:05AraqtyExpr is heavily overloaded now I think
23:24:25zaharyanother feature is that it's possible to modify the error string
23:24:25zaharytype Foo = generic value
23:24:26zahary must "implement a copy constructor":
23:24:26zahary check particularly for this
23:24:31Araqadd it at the end and ensure it doesn't end up in RTTI and it should be fine
23:25:32EXetoCvalue is the right term?
23:25:36*jdpo is now known as jdpo|away
23:25:49zaharydom96, no. the `is` operator checks that a particular value belongs to the type class
23:26:07zaharye.g.
23:26:07zaharyvar x = 10
23:26:07zaharyx is int | string -> true
23:26:07zaharyx is Container -> false
23:27:00dom96yes, and 'x is Container' will return true iff 'x' is an object with a 'size' field and which implements an items iterator?
23:27:08EXetoCwhat about constraints as part of the declaration for procs and templates?
23:27:16zaharyEXetoC, the value name is actually up to the user
23:27:16zaharytype Foo = generic x is also fine
23:27:28EXetoCok
23:27:41zaharywhen you create the type class, it then can be used in implicitly generic procs (and regular generics)
23:27:49zaharyproc foo(x: Container)
23:28:11dom96(and of course when that 'size' field is in fact an int)
23:28:36zaharydom96, yes
23:28:45dom96cool
23:29:09BitPuffinwow a lot of people came by thanks to that HN post lol
23:30:20zaharyBitPuffin, btw the matrix fixes are in
23:30:29dom96Doesn't really feel like a lot. Now if this channel had 100 people by now, that would be a lot :P
23:30:46Araqdom96: steter Tropfen höhlt den Stein
23:30:49EXetoCthis is similar to what D has done with ranges I think, just less tedious
23:31:19zaharyit's very similar to the lite concepts proposal for C++ 14
23:31:30Araq"Constant dripping wears away the stone."
23:31:31EXetoCno need to add "isInputRange!R" everywhere
23:31:50dom96Araq: Lubię jeść gówno krów?
23:31:50zaharyonly they don't have our implicit generic awesomeness
23:32:04dom96aww, I was close.
23:32:05Araqmeh english proverbs are strange
23:32:09BitPuffinzahary: yay!!
23:32:12gradhadom96: graz w piegi?
23:32:36dom96gradha: nie mam pojęcia co to piegi są.
23:32:47EXetoCkurwa
23:32:52dom96mać
23:33:01gradhatwoja?
23:33:23dom96mama?
23:33:35Araqstop it
23:33:40dom96It's funny what that translates to literally, but it isn't actually used that way in Polish.
23:34:05Araq1 german saying per night is allowed, otherwise speak english :P
23:34:19dom96Araq: No, I demand being able to speak Polish in this channel.
23:34:31gradhaI demand to invade Poland
23:34:33Araqcheck out #nimrod-polish then
23:35:03dom96gradha: Go ahead. I live in Ireland anyway.
23:35:23gradhadom96: come on, it will be fun!
23:35:45EXetoClök
23:36:20dom96gradha: ok, lets invade it together.
23:36:32dom96Araq: You have only yourself to blame :P
23:36:34gradhayes, and you know polish, so you could be my personal translator
23:36:38Araqmeh, we've been there, done that
23:36:47dom96I should make NimBot speak Polish.
23:36:56Araqpoor resistance
23:36:58dom96and only polish
23:37:02Araqthe french did somewhat better I think
23:37:08EXetoCsvn co #nimrod-polish?
23:37:25dom96Yet we survived in the end didn't we?
23:37:39Araqyeah but only the Pope was on your side
23:37:43Araq*because
23:38:46dom96In the end practically everyone was on our side.
23:39:04gradhapangea ftw!
23:42:12EXetoCda pope is ugly
23:42:15EXetoCand old
23:42:21*Sergio965 quit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
23:42:28dom96The new pope is cool though, right?
23:42:48EXetoCwho?
23:43:11dom96Dunno. Some guy from argentina or brazil or somewhere.
23:51:23*fowl joined #nimrod
23:51:41Araqhi fowl
23:51:56BitPuffinGuys you forgot to mention that I will also blog about nimrod :(
23:52:11fowlhi
23:52:12fowlwhats new in nimrod land
23:52:17AraqBitPuffin: well that's news to us
23:52:19dom96where have you been fowl?
23:52:20gradhaBitPuffin: do you already have a blog?
23:53:31fowldom96, trying to become un-homeless
23:53:35fowlno, not successful
23:53:58fowli dont have much time these days for computering
23:54:05dom96oh, that sucks.
23:54:53fowlyea and my phone was stolen yesterday
23:54:59EXetoC>.<
23:55:20fowlit was my fault tho, i was drunk
23:55:30Araqfowl: the bugs in the evaluation engine are hopefully gone very soon as we got a new one
23:55:35BitPuffingradha: I do, but I am moving to my own one eventually, and when I have done that I will blog about nimrod
23:55:43BitPuffinAraq: No, dom96 knows about it :)
23:55:54dom96oh no. Now i'll get the blame.
23:56:10BitPuffindom96: yeah seriously wtf, we depend on you for this kind of stuff! >:(
23:56:33dom96You can't expect me to remember everything!!!
23:56:40BitPuffinNO
23:56:45*dom96 :(
23:56:47BitPuffinBUT YOU SHOULD REMEMBER EVERYTHING ABOUT _ME_
23:56:55*BitPuffin has god complex
23:57:10dom96How dare you. I will get NimBot to teach you a lesson.
23:57:18BitPuffinNimBot: bring it!
23:57:32dom96fowl: Did you see the new benchmarks?
23:57:36fowlno
23:58:01dom96http://togototo.wordpress.com/2013/08/23/benchmarks-round-two-parallel-go-rust-d-scala-and-nimrod/
23:58:10dom96oh and reddit discussion: http://www.reddit.com/r/programming/comments/1kxt7w/parallel_roguelike_levgen_benchmarks_rust_go_d/
23:58:46fowlcool
23:59:34Araqdom96 didn't send my version of it :P
23:59:42Araqwhich was faster on my machine
23:59:51dom96it was slower on mine :P