<< 13-04-2015 >>

00:03:12cazovahh, yeah, they were introduced in vista and they do look to be C++. pretty unfortunate but not very surprising
00:03:53cazovMS doesn't really seem to care much about people who develop for windows and don't use VS
00:04:07Varriountcazov: Although, that's the only occurence of a C++ api set that I've seen
00:04:33VarriountI can only hope that someone realized the folly of creating a C++ API for an operating system
00:04:34*HakanD___ quit (Quit: Be back later ...)
00:05:30cazovyeah, i dunno. hopefully
00:08:49cazovit looks like they have some other stuff that's c++ -or- CLR, like the iTV api and GDI+
00:09:09VarriountUgh
00:13:51*bcinman quit (Quit: My Mac has gone to sleep. ZZZzzz…)
00:27:00*bcinman joined #nim
00:31:49*pregressive joined #nim
00:37:47*saml_ joined #nim
00:39:41*brson joined #nim
00:43:47*Varriount quit (Ping timeout: 276 seconds)
00:44:04*Varriount joined #nim
00:55:45*lepot joined #nim
00:57:20lepotcan someone please give me a hint as to why I can't assign to self.drinks in this example? https://dpaste.de/wJPO/raw
01:02:55lepotanyone used nim before?
01:04:46flaviulepot: Parameters are immutable.
01:05:24lepotflaviu: thanks for replying. so I can't have something like an instance variable?
01:05:45flaviuIn lots of languages, every type is a pointer, but in Nim you have to explicitly make it a pointer.
01:06:01flaviulepot: Sure. `type Person = ref object`.
01:06:32lepotflaviu: oh! awesome! thanks!
01:06:46lepotflaviu: I'll go back and give the docs a closer read
01:10:28*bcinman quit (Quit: My Mac has gone to sleep. ZZZzzz…)
01:15:56*lepot left #nim (#nim)
01:20:16*MightyJoe quit (Ping timeout: 240 seconds)
01:24:25*MightyJoe joined #nim
01:24:27*vendethiel joined #nim
01:32:56*TEttinger quit (Ping timeout: 240 seconds)
01:33:40*bcinman joined #nim
01:36:47*MightyJoe quit (Ping timeout: 250 seconds)
01:37:15*HakanD___ joined #nim
01:40:15*MightyJoe joined #nim
01:42:00*HakanD___ quit (Ping timeout: 256 seconds)
02:00:30*brson quit (Ping timeout: 252 seconds)
02:02:53*brson joined #nim
02:14:46*brson quit (Quit: leaving)
02:35:11*BitPuffin quit (Ping timeout: 252 seconds)
02:36:24*darkf joined #nim
02:42:04*pregressive quit ()
03:11:56*onionhammer joined #nim
03:26:10*HakanD___ joined #nim
03:30:51*saml_ quit (Remote host closed the connection)
03:31:01*HakanD___ quit (Ping timeout: 264 seconds)
03:36:20*gsingh93 joined #nim
03:58:41*endragor joined #nim
04:08:04*vendethiel quit (Ping timeout: 272 seconds)
04:08:38*Senketsu quit (Quit: Leaving)
04:09:33*vendethiel joined #nim
04:14:30*Senketsu joined #nim
04:30:31Joe-Tis there a built in iterator for
04:30:36Joe-Tstrings to chars?
04:32:53*ChrisMAN quit (Ping timeout: 248 seconds)
04:36:02fowlJoe-T, items
04:37:07Joe-Tah thanks, that worked
04:37:26Joe-TI assumed it didn't as I tried to echo it and syntastic complained
04:38:26MagusOTBhow do I make a generic that takes an array?
04:40:45MagusOTBI have this http://pastebin.com/vnYSJqNh and I don't know how to make a generic proc that the last line will call.
04:41:58*HakanD___ joined #nim
04:46:14*HakanD___ quit (Ping timeout: 252 seconds)
04:55:59*vendethiel quit (Ping timeout: 276 seconds)
04:57:52fowlMagusOTB, proc test[T: not openarray](val: T)
04:59:05MagusOTBoh cool, thanks
04:59:22MagusOTBis there docs on other thing syou can do to constrain types in generics?
05:02:08fowlhttp://nim-lang.org/manual.html#type-classes
05:38:46*gsingh93 quit (Ping timeout: 244 seconds)
05:39:27*wink-s quit (Quit: Page closed)
05:42:46*HakanD___ joined #nim
05:46:56*bcinman quit (Quit: My Mac has gone to sleep. ZZZzzz…)
05:47:04*HakanD___ quit (Ping timeout: 250 seconds)
06:25:31*bcinman joined #nim
06:31:07*awesomo4000 joined #nim
06:35:26*bcinman quit (Quit: My Mac has gone to sleep. ZZZzzz…)
06:38:13*bcinman joined #nim
06:38:42awesomo4000anyone know how to compile nim itself against musl-libc
06:49:27fowlawesomo4000, i guess you would do it similar to this http://www.schipplock.software/2015/02/static-linking-with-nim.html
06:49:46fowltry passing those options to koch
06:49:58*endragor quit (Ping timeout: 245 seconds)
06:50:35*adam12 quit (Ping timeout: 244 seconds)
06:51:53*adam| joined #nim
06:55:04*endragor joined #nim
06:55:55*Kingsquee quit (Quit: Konversation terminated!)
07:02:39*Ven joined #nim
07:03:23*vendethiel joined #nim
07:05:30*endragor_ joined #nim
07:05:41*HakanD___ joined #nim
07:07:49*Ven quit (Quit: My MacBook has gone to sleep. ZZZzzz…)
07:08:37*endragor quit (Ping timeout: 248 seconds)
07:14:37*Ven joined #nim
07:18:52*HakanD___ is now known as HakanD
07:21:46*bcinman quit (Quit: My Mac has gone to sleep. ZZZzzz…)
07:24:31*endragor_ quit (Remote host closed the connection)
07:26:16*vendethiel quit (Ping timeout: 240 seconds)
07:26:56*Trustable joined #nim
07:29:18*bjz joined #nim
07:39:58*Ven quit (Quit: My MacBook has gone to sleep. ZZZzzz…)
07:40:32*BlaXpirit joined #nim
07:46:06*Ven joined #nim
07:48:34*HakanD_ joined #nim
07:51:37*HakanD quit (Ping timeout: 256 seconds)
08:07:52*coffeepot joined #nim
08:08:37*bjz quit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
08:09:36*awesomo4000 left #nim (#nim)
08:15:13*Arrrrrrr joined #nim
08:15:21ArrrrrrrHello Nimrod.
08:15:45coffeepotGood morning :)
08:16:08ArrrrrrrHow is your game going on coffeepot ?
08:16:50coffeepotright now, slowly - haven't had time to do anything on it for the past few days
08:17:02coffeepotworking on physics atm tho
08:17:35ArrrrrrrI made this http://i.imgur.com/h2V0o7c.gif
08:17:43coffeepothow's your stuff going? What are your thoughts of nim so far?
08:18:17coffeepotawesome :)
08:19:17ArrrrrrrGood, i get a lot of help here. For now i'm just trying to settle down everything that i learned. But there's so much.
08:21:43*Ven quit (Quit: My MacBook has gone to sleep. ZZZzzz…)
08:22:27ArrrrrrrBtw, is 'generic' and 'constraint' the 'interface' of nim?
08:25:01coffeepotyeah I'm still really just getting my feet wet in nim - still a lot to learn for me, especially macros and things
08:25:27coffeepotas for your question, I don't know. Hoepefully someone else with more knowledge can answer
08:25:48HakanD_Arrrrrrr: No, no, hell no
08:25:52HakanD_Don't go that way (:
08:26:39ArrrrrrrHah, so?
08:26:43HakanD_They look like interfaces, but sadly they don't work that way, they are a different thing all together, at least in it's curren state
08:26:57Arrrrrrrwill they evolve then?
08:27:07HakanD_No idea.
08:27:32HakanD_Maybe, if enough people bugs Araq :P
08:27:45coffeepotwhat's the intended purpose of constraints?
08:27:55coffeepotto constrain generics?
08:28:11coffeepotfor params, etc?
08:28:22HakanD_constraints for generics
08:28:35coffeepotah
08:28:43*bjz joined #nim
08:29:23HakanD_They are awesome, and opens of lots of interesting options. I really wish they also worked like Go's interfaces tho.
08:30:22coffeepoti'm sure someone is working on adapting constraints to be interfaces, I think there was a discussion about it the other day
08:30:37HakanD_some topics if you are interested: http://forum.nim-lang.org/t/673 http://forum.nim-lang.org/t/282 http://forum.nim-lang.org/t/754/1 http://forum.nim-lang.org/t/278/1
08:31:37*Ven joined #nim
08:31:51HakanD_there is something fowlmouth posted here: https://gist.github.com/fowlmouth/ac51baef7956af1ebdf8
08:32:20ArrrrrrrThanks HakanD_
08:32:26coffeepothakenD_ that's what I was thinking of :)
08:36:15*bjz quit (Ping timeout: 250 seconds)
08:37:27coffeepotwhat Araq mentions in one of your links is pretty interesting - using closures. I guess that'd be much more adaptable than interfaces
08:38:58*milosn quit (Ping timeout: 255 seconds)
08:41:22HakanD_As lots of people are looking for interfaces in Nim, I'm sure some proper way to do them will emerge, either baked in to the language or in userland
08:41:52HakanD_bbl
08:41:54*HakanD_ quit (Quit: Be back later ...)
08:42:11coffeepotyeah I was looking at the closures equivalent and thinking that someone will macro-ise this sooner or later
08:42:42coffeepotone of the reasons why I chose nim out of the newer languages was because it's so extensible
08:42:55coffeepotsome degree of future proofing
08:44:11coffeepottbh tho nim kinda ruins me for other languages for simple things like templating. Kind of like super-inlining really, saves bugs, increases run time speed and reduces reading complexity
08:45:42coffeepotas an aside from game programming I'm looking at a native sql library
08:46:45coffeepotsince I do a lot of sql server at work. Actually that reminds me, must look at nim's rtti capabilities to see how easy it'd be to create a simple ORM framework
08:49:15reactormonkcoffeepot, what would you like the API to look like?
08:49:32coffeepotwell you know, that's what i was wondering
08:50:25coffeepoti wonder if it'd be possible to attach some kind of trait to an object's fieldname that represents the fieldname in the db and uses that access things
08:50:36coffeepotit depends how flexible and fast the rtti is
08:50:41reactormonkrtti?
08:50:47coffeepotrun time type information
08:50:52reactormonknone.
08:50:53coffeepotreflection
08:51:15reactormonknim doesn't have a VM, so you can't do reflection.
08:52:10coffeepotideally i'd like to be able to define an object and tag each field with it's db fieldname, perhaps tag the object as a table, and be able to query the db by making a seq of clauses
08:52:24coffeepotnot even static reflection?
08:52:31reactormonkthat's macro.
08:52:49coffeepoti thought it might involve some macro wizardry :)
08:53:41coffeepotqueryseq.addclause(myobject.id, clauseEquals, 17) or something
08:54:21coffeepotand queryseq.addclause(myobject.description, clauseLike, "%test%")
08:54:31reactormonkI'd prefer something like select[Foo].where(bar == 2))
08:54:45coffeepotyeah that's nice
08:55:32coffeepothow would you do multiple clauses though?
08:55:38coffeepotin that syntax
08:55:50BlaXpiritchain more onto it
08:55:58reactormonkselect[Foo].where(bar == 2).group_by("baz")
08:55:59coffeepotfair enough :)
08:57:19reactormonkjust make sure to handle TaintedString correctly
08:57:23coffeepothow would you pass "bar == 2" as a parameter and have it be equate to the field bar - pass as an expression?
08:57:45reactormonkpretty much
08:58:00coffeepotyeah I remember seeing this http://nim-lang.org/manual.html#avoiding-sql-injection-attacks
08:58:00emilsparen't there predicates in nim ?
08:58:11reactormonkemilsp, what's a predicate?
08:58:17*endragor joined #nim
08:58:21*endragor quit (Remote host closed the connection)
08:59:06*endragor joined #nim
09:00:36Arrrrrrr(x: T) -> bool
09:00:38Arrrrrrri believe
09:01:22coffeepotI guess with expression parameters you don't need reflection, and there's no speed penalty. However not sure if that would work if you wanted to dynamically query at runtime, would it? As in, if a user gets to select the field and data to search on
09:02:47*bjz joined #nim
09:04:02reactormonkyou can't go for dynamic queries anyway on an ORM
09:04:07*Demon_Fox quit (Quit: Leaving)
09:04:15coffeepotwhy not?
09:04:38reactormonkdepends on your ORM I guess. but when the select return type is typed, you're kinda set
09:05:39coffeepoti wrote a simple orm that does dynamic user queries in delphi for an app at work, I'm sure nim can do it better
09:05:54BlaXpirit.eval macro test(e: varargs[expr]): expr = e; discard test(a)
09:05:55reactormonkyup, but you probably can't type them in an ORM way
09:05:56MimbusBlaXpirit: eval.nim(4, 13) Error: undeclared identifier: 'a'
09:05:59BlaXpiritwhy?
09:07:15BlaXpiritwell that's actually a bad example
09:07:48BlaXpirit.eval import macros; macro test(e: expr): expr = bindSym"true"; echo test(a)
09:07:50MimbusBlaXpirit: true
09:07:55BlaXpirit.eval import macros; macro test(e: varargs[expr]): expr = bindSym"true"; echo test(a)
09:07:56MimbusBlaXpirit: eval.nim(5, 10) Error: undeclared identifier: 'a'
09:09:19*akiradeveloper joined #nim
09:11:11coffeepotIn delphi I just parsed the object fields at start up (using traits on the fields to associate the object fields with the DB fieldnames) and allowed users to select from this list, then I just construct the sql myself
09:17:51*HakanD_ joined #nim
09:22:36*vendethiel joined #nim
09:26:29ArrrrrrrI read the links about type classes and i have a light idea of what they are, but still can't see what do people when they want interfaces. Real scenarios. I'm so used to them i cannot think without them
09:27:27reactormonkArrrrrrr, a typeclass is basically a definition of an interface, except you don't attach the implementation to the object.
09:28:45HakanD_Arrrrrrr: tuple of closures work, but they require a slightly different type of thinking
09:29:37HakanD_https://gist.github.com/fowlmouth/ac51baef7956af1ebdf8 this might give some ideas
09:31:29HakanD_it took me a few days to grok nim way of thinking regarding to interfaces.
09:32:00HakanD_still not sure if i really understood totally tho. still hacking on stuff.
09:32:06ArrrrrrrBut does it reduce the number of lines one needs to produce interfaces?
09:32:22Arrrrrrror it is more like "better than nothing"
09:32:41*Ven quit (Quit: My MacBook has gone to sleep. ZZZzzz…)
09:33:05HakanD_not an expert, but it looks to me is the way forward regarding interfaces
09:33:14HakanD_I still haven't dived into macros and stuff
09:33:44ArrrrrrrI haven't seen anythig about concepts
09:34:40reactormonkI think we need some more concepts in the stdlib
09:35:20BlaXpirityes
09:35:34BlaXpiritdown with openarray
09:35:40coffeepothaha
09:35:40HakanD_btw, 'MyConcept: generic x' is now 'MyConcept: concept x'
09:36:43ArrrrrrrAh, ok ok
09:36:48ArrrrrrrNow i see it
09:36:55fowlthe idea is that we can get an interface type from a concept that defines functions like draw(obj); shouldDelete(obj) is bool; ...
09:37:33ArrrrrrrSo, does your example work out of the box with 0.10.3 ?
09:38:08BlaXpiritfowl, why is such a type needed?
09:38:24fowlArrrrrrr, it does
09:40:11fowlBlaXpirit, i dunno, kind of cool to show that it can be implemented without a compiler extension, working at compile time and run time to provide polymorphism
09:40:37coffeepotdo concepts have any overhead?
09:40:47*milosn joined #nim
09:41:45BlaXpiriti bet they do have a considerable compile time overhead
09:42:08fowlcoffeepot, if you have a large generic library and it gets instantiated a couple times your exe would be bigger
09:42:31coffeepotcompile time or file size i'm not bothered about, just wondering if i could refactor my gaming stuff to use them
09:43:21fowlthey would come in handy in places where you would use multiple inheritance in c++
09:43:24*milosn quit (Read error: Connection reset by peer)
09:44:04fowlin fact you can use generics in place of multiple inheritance in cpp wrappers
09:44:11coffeepotthe example you give fowl is actually the one i was thinking of: drawable (also has physics etc)
09:44:17*vendethiel quit (Ping timeout: 250 seconds)
09:45:50*milosn joined #nim
09:47:07ArrrrrrrI can only pray for a simpler way to introduce interfaces in the future.
09:47:41BlaXpiritthis is the simplest way
09:48:03HakanD_fowl: the geninterface macro still doesn't work on its own tho
09:48:05ArrrrrrrI will pray harder
09:48:12HakanD_(:
09:48:51fowlHakanD_, i know, when i print out the code and paste into the file it works, need to examine the ast
09:54:36*akiradeveloper quit (Read error: Connection reset by peer)
10:01:59*irrequietus joined #nim
10:02:47BlaXpiritI have tried to implement this bottom example here https://github.com/flaviut/nre/issues/11#issuecomment-92144985 but have run into a problem that you can't pass unexisting identifiers to varargs macro, although without varargs/commas it works.
10:02:55BlaXpirit.eval import macros; macro test(e: varargs[expr]): expr = bindSym"true"; echo test(a)
10:02:56MimbusBlaXpirit: eval.nim(5, 10) Error: undeclared identifier: 'a'
10:03:05BlaXpiritfowl, maybe you know something about this?
10:03:06*milosn quit (Write error: Connection reset by peer)
10:07:20*milosn joined #nim
10:08:06fowlBlaXpirit, i think its a bug because expr is supposed to be untyped
10:08:29fowlso it doesnt need to be semantic'd
10:08:51BlaXpirithow would you name such a bug?
10:09:11fowlyou can just make the macro immediate
10:09:29BlaXpiritno, actually i can't
10:09:52fowli dunno
10:09:54BlaXpiritactually is macro `{}`*(pattern: Regex, options: varargs[expr]): expr =
10:09:57fowlnaming is half the battle
10:17:22*milosn quit (Read error: Connection reset by peer)
10:17:41*milosn joined #nim
10:21:54*milosn quit (Ping timeout: 244 seconds)
10:30:01*milosn joined #nim
10:32:15*BitPuffin joined #nim
10:40:29*banister quit (Quit: My MacBook has gone to sleep. ZZZzzz…)
10:48:23*Ven joined #nim
10:49:19*Ven quit (Client Quit)
10:51:19*milosn quit (Read error: Connection reset by peer)
10:51:42*milosn joined #nim
10:56:08*coffeepot quit (Quit: http://www.kiwiirc.com/ - A hand crafted IRC client)
10:57:17*coffeepot joined #nim
10:58:29*milosn quit (Read error: Connection reset by peer)
10:58:55ArrrrrrrRight now, are contributors working into introducing a 'major' feature? or just bugs fixing?
10:59:01*milosn joined #nim
10:59:36BlaXpiritright now is the worst time for major features
11:04:33ArrrrrrrAnd is something planned for the future?
11:04:46Arrrrrrr*anything
11:05:27*milosn quit (Read error: Connection reset by peer)
11:05:59dtscodeBlaXpirit, why is that?
11:06:26BlaXpiritnext release is sorely needed
11:06:31*bogen joined #nim
11:06:45*milosn joined #nim
11:06:55BlaXpirita low percentage of my code compiles in 0.10.2
11:08:27*untitaker quit (Ping timeout: 276 seconds)
11:13:08BlaXpiritbtw maybe 0.11.0 is warranted
11:14:15*untitaker joined #nim
11:18:49*milosn quit (Read error: Connection reset by peer)
11:20:44coffeepotyeah current version on website is well old now, in nim terms
11:21:23HakanD_well, new release also means updating the docs
11:22:21*nulpunkt left #nim (#nim)
11:35:26*Ven joined #nim
11:36:50*saml_ joined #nim
11:43:25*milosn joined #nim
11:52:32Arrrrrrr"in nim terms" haha
11:54:17*milosn quit (Read error: Connection reset by peer)
11:55:22*milosn joined #nim
12:02:37*milosn quit (Read error: Connection reset by peer)
12:03:01*milosn joined #nim
12:03:58ArrrrrrrIt is possible to breakthrough in case statements?
12:04:18BlaXpiritArrrrrrr, i remember something like that
12:04:45BlaXpiritmight have been from a different language :p
12:05:00ArrrrrrrHah, no wonder
12:05:02def-go has an explicit fallthrough
12:05:30BlaXpiritwow, nim doesn't
12:05:30def-in nim you can list multiple cases, but i don't think we have a fallthrough
12:05:39def-case 2, 5, 10..20:
12:05:45ArrrrrrrI see.
12:05:59ArrrrrrrThat is quite usefull, but not the same.
12:06:39*milosn quit (Read error: Connection reset by peer)
12:08:02*milosn joined #nim
12:08:09coffeepothad too look up what case fallthrough was :D why would you even want this?
12:08:18coffeepotor rather why would people want this
12:08:46*BitPuffin quit (Ping timeout: 272 seconds)
12:09:47coffeepotaside from the duff engine thing that more or less sounds like a hack
12:09:51BlaXpirithttp://programmers.stackexchange.com/questions/116221/appropriate-uses-of-fall-through-switch-statements
12:10:01dom96duff's device mainly benefits from it
12:10:27coffeepotthanks BlaXpirit that explains it quite well :)
12:11:14Arrrrrrrcould be done with an "and": http://pastebin.com/VEiuTg7C
12:11:30BlaXpiritnaaaaah
12:11:33coffeepotok so i only read about duffs device today but sounds like it wouldn't provide much performance with modern hardware
12:11:38BlaXpiritcase 2..10 {.fallthrough.}
12:11:47BlaXpiritmuch more in the spirit of the language
12:12:14Arrrrrrrbut that's longer.
12:12:23dom96yeah, it's a pity that most languages optimise their syntax for the edge case here.
12:12:25Arrrrrrrand "and" is there.
12:12:27BlaXpiritwell it should be as long as reasonably possible
12:12:34BlaXpiritArrrrrrr, you don't get it :|
12:12:59Arrrrrrrsorry
12:13:17BlaXpirit{.intentionalFallthough.} is pretty good too
12:13:30BlaXpiritwell ok it's not
12:14:13Arrrrrrrc# has goto if i recall well
12:14:29BlaXpiritthat can't be right
12:14:43*milosn quit (Read error: Connection reset by peer)
12:14:46BlaXpiritoh it does :|
12:15:17ArrrrrrrHah, "goto case x"
12:15:18*milosn joined #nim
12:15:40BlaXpiritis actually pretty good
12:15:58coffeepoti'm now in two minds about duffs device - on the one hand it is really slick, on the other hand it makes me recoil in buggy terror
12:16:20BlaXpiritgeez, i'll have to google this
12:16:55*saml_ quit (Quit: Leaving)
12:26:20*milosn quit (Read error: Connection reset by peer)
12:26:43*milosn joined #nim
12:33:20ArrrrrrrBlaXpirit: in which languages have you programmed before?
12:35:25*vendethiel joined #nim
12:38:13*milosn quit (Read error: Connection reset by peer)
12:40:44*Arrrrrrr quit (Quit: Page closed)
12:45:13coffeepotis nim's approach to GC unique in the programming world? Seems most languages that use GC use the boehm type. Also: is nims GC kind of like what swift calls ARC?
12:49:33*milosn joined #nim
12:52:55emilspisn't sphinxs GC more like C++ shard_ptr approach?
12:53:19emilsptfu, not sphinx's but nim's
12:53:56coffeepoti didn't think it was, as the gc runs thread local and you need to put extra work in to share GC'd objects across threads.
12:54:37coffeepotas i understand it shared_ptr has more overhead as it has to be shared between threads?
12:54:49emilspyes
12:55:11*milosn quit (Read error: Connection reset by peer)
12:55:19coffeepotthe reason i ask is because i was reading this http://sebastiansylvan.com/2015/04/13/why-most-high-level-languages-are-slow/
12:55:36coffeepotand thought that his comments might not apply to nim's GC
12:55:54*milosn joined #nim
12:57:03coffeepoti assume he hasn't heard of nim since he comments "I’m relatively convinced that you could write a GC more suitable for high performance and low latency applications (e.g. an incremental GC where you spend a fixed amount of time per frame doing collection)" which AIUI is what you can do with nim's GC
12:58:02coffeepotanyway, it's a common comment for some people "GC = slow" without considering that there's different types of GC - though I'm sure the writer knows more about this than I do
12:59:37*vendethiel quit (Ping timeout: 248 seconds)
13:01:33*Ven quit (Quit: My MacBook has gone to sleep. ZZZzzz…)
13:04:02*vendethiel joined #nim
13:07:42emilspto be honest, nims memory model doesn't make allocating stuff cheap either, does it ?
13:08:26Varriountemilsp: Not as cheap as, say, Java's allocator
13:08:29coffeepotemilsp, i'd be interested to know this
13:09:08VarriountJava (and other languages) can move objects around in memory
13:09:20VarriountWhich enables them to use a slab allocator
13:09:52VarriountThe cost comes in the form of GC and runtime complexity.
13:10:16emilspyes, indeed. How would one deal with the cost of allocations in nim ? Construct used stuff as far top as possible ?
13:11:31Varriountemilsp: Huh? What do you mean?
13:12:18emilspWell, do stupid stuff such as use a massive object to hold intermediate strings in ?
13:12:43Varriountemilsp: Well, try to reuse memory.
13:13:10emilspyes
13:13:26Varriountemilsp: You'll have to ask Araq about the particulars of memory allocation.
13:13:44emilspI wish I had more time on my hands to do something awesome in nim
13:14:24VarriountI know very little concrete information. I know that it uses memory maps, it's primarily refcount based, and it hasn't been much of a problem
13:16:27Varriountemilsp: Also, though Java might have faster allocation times, it's still very memory hungry.
13:17:19emilspVarriount, java is memory hungry and slow until you warm it up. But don't worry, I'd never use Java if I don't have to
13:17:48*Varriount looks at the 1.5 GB of ram taken up by IntelliJ Idea
13:18:34*milosn quit (Ping timeout: 245 seconds)
13:18:47emilsp>not using vim
13:18:55Varriountemilsp: And (although this a completely uninformed guess) I'd wager that the cost of allocations isn't too much higher than that of standard malloc in C/C++
13:19:52*Ven joined #nim
13:20:16emilspVarriount, I'd guess there should be no oberhead when compared to c/c++
13:24:40*vendethiel quit (Ping timeout: 256 seconds)
13:33:50*vendethiel joined #nim
13:33:59coffeepoti've been very impressed by the speed of nim without having to do anything particularly optimise-y
13:35:14coffeepotto be honest I'm always amazed by how fast java is for an 'interpreted' language
13:35:51repaxJava is commonly jitted
13:36:01coffeepotbut you know, there's the joke about "enterprise fizzbuzz" that seems to apply to most java
13:36:38coffeepoti find it impressive how effective on the fly jitting is
13:37:37*milosn joined #nim
13:38:03repaxI don't dare guess how many hundreds of man-years have gone into the development of Java
13:38:23coffeepotyeah it's a pretty huge language
13:39:15repaxI think nim has found a sweet niche, though
13:39:19coffeepotdefinitely
13:39:34*BitPuffin joined #nim
13:40:27coffeepoti was looking for ages for a new language and before nim it was "fast, powerful, sane - choose two"
13:40:40HakanD_^
13:40:52coffeepoti think nim *finally* provides all three
13:41:01repaxIndeed
13:41:29repaxAlso, productive
13:41:33coffeepotyeah
13:41:54coffeepoti've heard it said many times with regard to nim and I agree: "nim makes me love programming again"
13:42:14repax:)
13:43:01a5iCrystal and Nim are the only 2 languages that provide those traits as of now
13:43:37*ChrisMAN joined #nim
13:43:48coffeepoti remember the first time I tried to write something with python at work and it was fairly productive, then I realised in order to distribute it to collegues they would have to carry around a python interpretter o_O Eventually got it compiles into one file but it was just so disappointing
13:44:10coffeepotcrystal is definitely on my radar but it's a bit of a case of nim got there first and is further along
13:44:41a5iYeah
13:44:43repaxHaven't had the time yet to look at crystal
13:45:12repaxAnything in particular it does better than nim?
13:45:14coffeepotalso I really like Araq's focus on efficiency and elegance
13:46:06coffeepotcrystal: "Ruby-inspired syntax" that's actually a turn off fo rme
13:46:08coffeepotfor me
13:46:50a5iNim and Crystal are roughly the same, one compiles to C and the other to LLVM
13:47:54a5iThey both have amazing native speed, syntactic sugar and low-level functionalites
13:48:00a5ilike C bindings
13:48:04repaxI used to like C++ for its goal of zero-cost abstractions. In the end any large piece of software is a heap of abstractions. Writing in c++ is not productive though
13:48:43repaxNim might someday go straight to llvm
13:49:36a5iI'm myself love Ruby syntax, the better thing is that they fix some of Ruby's issues
13:49:53coffeepotrepax: totally agree. in C++ I feel drunk with power at the freedom, but then fall down drunk with freedom
13:49:54repaxI don't see that as important right now though because the C and C++ back ends are both powerful and portable
13:50:45coffeepotmy time with nim has left me wondering why do we need all these pointless symbols everywhere in most languages
13:52:33*detox joined #nim
13:53:46a5idetox is an irc bot written in crystal, it has an eval function I would use to compare behaviors between Mimbus and detox
13:54:06a5i!eval p "test"
13:54:07detox"test"
13:54:32a5i.eval "tesT"
13:54:34Mimbusa5i: eval.nim(3, 0) Error: value of type 'string' has to be discarded
13:54:41a5i.eval echo "tesT"
13:54:42Mimbusa5i: tesT
13:55:09BlaXpirita5i pls
13:55:28BlaXpiritnot cool
13:55:31a5iD:
13:56:01BlaXpiriteven Mimbus is not really welcome here, and this...
13:56:05emilsprepax, but crystal isn't even typed
13:56:30repaxI like typed languages though
13:56:45a5iemilsp: What do you mean it isnt typed ?
13:57:07emilsp>Never have to specify the type of a variable or method argument.
13:57:20emilspthis is why I am starting to get sick of python
13:57:34a5iYou don't have to, but you can
13:57:36coffeepoti was trying to find more info on crystals type system myself...
13:57:54coffeepoti have developed a real aversion to dynamic typing
13:58:12coffeepotthanks to python
13:58:24a5i!eval x = 35.to_i64; p x.is_a?(Int64)
13:58:25detoxtrue
13:58:33a5iTypes ^
13:58:37repaxIt's too easy to mess things up with dyn typing
13:59:01a5iIt's type inferencing, you can declare it if you want to
13:59:42*bcinman joined #nim
14:00:09coffeepotyeah i remember the first time i started db access in python and was like "wait wtf is this returning, how does any of this work?" and the answer seems to be "you just hope the caller sends you the right bindings"
14:00:10repaxBut worse than that are languages with automatic var declarations, i.e. no declarations
14:00:31*clynamen_ joined #nim
14:00:43coffeepotrepax: like old BASIC? :D
14:00:49a5i!eval p StringIO{1,2,3}
14:00:50detox#<StringIO:0xCACFC0 @buffer=Pointer(UInt8)@CADFA0, @bytesize=3, @capacity=64, @pos=0>
14:01:05repaxYeah, or just php
14:01:05*bcinman quit (Client Quit)
14:01:17BlaXpirita5i, seriously, please stop
14:01:37coffeepotthankfully never done any php. Was going to learn a few years back. Feel like I've saved myself some sanity!
14:01:42BlaXpirit(i'm not any kind of authority here, but whatever)
14:01:53*Jehan_ joined #nim
14:01:57*bcinman joined #nim
14:02:11coffeepotwhat is this !eval business anyway?
14:02:18coffeepotwhat's it calling?
14:02:37repaxAnything determined at runtime is a liability, imho
14:02:38*clynamen quit (Ping timeout: 246 seconds)
14:03:45coffeepotrepax: totally agree - was astounded when i learnt how python objects are basically just collections of things set up at runtime. Then came the __init__ and I was checked out
14:04:39repaxcoffeepot: yeah dreadful
14:05:21repaxBut I like its syntax, and nim'so
14:05:32coffeepotyeah same, the syntax is great up to a point
14:05:33repaxnim's
14:05:43coffeepotnim does it cleaner in my opinion
14:06:53repaxOk. I'm just glad to not seeing all the brackets and semi-colons :)
14:07:20coffeepotyeah
14:08:19a5iThe eval is evaluating another file and read the output in yet another file
14:08:40a5isince there is kno eval() in compiled languages
14:08:46a5ino*
14:08:51repaxAt some point a almost wanted to write a c++ preprocessor just to insert those for me ;)
14:10:03Jehan_a5i: Huh?
14:10:17repaxa5i: haven't really ever needed one
14:10:51a5iWrite given Crystal code to file -> run file and save output to file -> read from file and return
14:10:57repaxOne can accomplish a lot with compile-time eval
14:11:01Jehan_Nevermind that being compiled or not is not a property of the language, but there are languages with compilers and eval capability.
14:11:20a5ioh well Crystal doesn't have one, so that's the process
14:11:32a5iI mean run-time eval
14:11:38Jehan_Not to mention that the difference between interpreters and compilers can get pretty blurry these days.
14:11:43Jehan_a5i: So did I.
14:11:46a5itrue
14:11:58a5ioh well, I take that back
14:13:27*Arrrrrr joined #nim
14:13:50a5ihow does mimbus eval code form the bot ?
14:14:01repaxAhoy, Arrrrrr!
14:14:18coffeepotwell I don't know if Araq still feels this way but here http://forum.nim-lang.org/t/787 he mentions the tantalizing prospect of having dynamic code changes at runtime
14:14:27Jehan_Speaking of crystal, is there any reason why `for` doesn't work and why `if` doesn't take a `then` keyword after the condition?
14:14:52ArrrrrrHello repax, hello nimrods
14:15:00coffeepothello arrrrr
14:15:08coffeepot:)
14:15:09a5iThey dumped for loops in favor for times loops and other variants
14:15:22a5iyou can write a macro though for a for loop
14:15:35Jehan_a5i: O…kay.
14:15:50a5iI have a better way od explaining
14:15:54a5iof*
14:16:12a5iJehan_: http://www.reddit.com/r/crystal_programming/comments/31hjtg/crystal_loops/
14:16:25Jehan_It's just weird. One of the attractions of crystal would be to port Ruby code fairly easily, but then this stuff puts obstacles in your way.
14:16:55a5iWe didnt just want to port Ruby, we wanted to make it better
14:17:03a5ireplace "we" with "they"
14:17:15coffeepot"10.times do |i|" wow that syntax does not parse well for my eyes
14:17:17a5iI;m just a 16 year old interested in experimental languages
14:18:04*detox quit (Quit: Crystal)
14:18:17coffeepota5i: good to get started early :)
14:18:18Jehan_a5i: Fair enough, though one could argue about what is better. :)
14:18:49a5iYeah, but then again you could just use that macro that user provided and problem solved
14:18:58a5iJehan_: thanks :)
14:19:04emilspa5i, how does crystal differentiate itself from Julia ?
14:19:06a5icoffeepot*
14:19:22a5iemilsp: I havent looked into Juila, so I cannot say
14:19:39coffeepotcan't you do this in nim btw? for i in 0.countup(10):
14:19:53emilspcoffeepot, you can
14:20:11emilspas far as I remember, at least ;)
14:20:27coffeepotmacros are great but personally I am wary when they're used as an excuse for more work
14:20:42a5ithere was this: http://www.reddit.com/r/programming/comments/31mzu1/go_vs_rust_vs_d_vs_crystal_etc_perlin_noise/
14:21:27coffeepotI still don't understand what this is doing in crystal:def foo
14:21:27coffeepot # -1 becomes the default scope where methods
14:21:27coffeepot # are looked up in the given block
14:21:27coffeepot -1.yield(2)
14:21:27coffeepotend
14:21:31Arrrrrrwhat is crystal and why is faster than nim
14:21:39coffeepot-1.yeild(2) wat
14:22:05a5iArrrrrr: Crystal is a Ruby-Inspired compiled language
14:22:07repaxI'm not convinced it is any faster
14:22:45Arrrrrrso crystal is to ruby what nimrod is to pythong
14:22:49Arrrrrr*python
14:22:57coffeepoti don't get the impression that crystal is built for speed as such - at least it's not mentioned, whereas Araq is always mentioning efficiency, which personally makes me feel he has the best approach in mind
14:23:24emilspthat's just subjective, though, coffeepot
14:23:33a5iIt says it wants "Efficiency of C"
14:23:57a5ithere is also this: https://github.com/kostya/benchmarks
14:24:02ArrrrrrThat 'end' tho
14:24:12coffeepotyes, definitely, but bringing efficiency into mind all the time is a great practice
14:24:17a5iend is only forced on a few things
14:24:26a5iyou can use braces too, but u guys hate both :P
14:24:37Jehan_Sometimes I wonder if I'm the only person left on earth who is not obsessed with speed at all costs. :)
14:24:41a5iI dont mind it at all personally
14:25:34Arrrrrri want speed without having to use c/c++
14:25:53a5iWell then Rust,Nim and Crystal are for you !
14:25:58Jehan_Personally, I consider productivity and correctness competing goals.
14:26:05coffeepoti found it amusing to read the the comment here http://nim-lang.org/manual.html#avoiding-sql-injection-attacks saying "we need a temporary type for the type conversion :-("
14:26:21coffeepotas if that is a real pain to the elegance of it
14:26:27Jehan_Which is why people who run with -d:release all the time baffle me.
14:26:40coffeepotthings like that make me trust in the direction it's going for performance and efficiency
14:26:44emilspJehan, you do need the speed for release, though
14:26:48a5iNim and Crystal are both elegant with speed
14:27:04a5iRust isnot so elegant but performant nonetheless
14:27:37coffeepotjehan_ yeah premature optimisation and all that but compare that with c# with it's allocation happy approach.
14:27:42Jehan_Rust has different goals.
14:28:16Jehan_coffeepot: I've done a fair amount of work in C#/Mono. It's plenty fast for most purposes.
14:28:27Arrrrrrhow does crystal only has 90 issues. When did the development started
14:28:28Jehan_My issues with Mono were related to stability, not speed.
14:28:39coffeepotcorrect first, performant second maybe. I think it's because I started coding on the old amstrad and BBC computers where performance was #1 concern
14:29:24Jehan_Oh, and C# and allocation-heavy? Is that about this cringeworthy blogpost?
14:29:47Jehan_coffeepot: I started programming on a Z80 myself. In assembler.
14:30:06Jehan_Thing is, modern processors are just a tad more powerful than the Z80 or 6502.
14:30:11Jehan_By several orders of magnitude.
14:30:21coffeepoti feel like we went through a period where languages just went "ahhh computers are fast enough to handle me farting out any allocations I want! Muhahaha!" and now we're perhaps realising that we could reclaim some ground on the performance of our current hardware
14:30:34coffeepotjehan_ yes! That cringeworthy blog post indeed! XD
14:30:41*detox joined #nim
14:30:53coffeepotto be fair though, c# is a big sluggish, but not too bad
14:30:57Jehan_People who don't understand how garbage collectors work just shouldn't write about them.
14:31:18emilspJehan, the key to the efficiency of modern cpus is the cache, which gets absolutely destroyed by garbage collectors
14:31:26coffeepotif that happened we wouldn't have any programming blogs!
14:31:27Jehan_emilsp: False.
14:31:42emilspwell, yes, that is false
14:32:03emilspbut I can't reall code with cache in mind in most managed languages
14:32:08a5idoes Nim have automatic Type conversion with Int literals?
14:32:15Jehan_Pretty much any modern GC has a bump allocator and works with a compiler that does escape analysis.
14:32:49Jehan_See also Chicken Scheme, where the stack IS the nursery and the nursery IS the stack.
14:32:49ArrrrrrWell, people doing gamedev dont relay on GC
14:32:53coffeepotyou're right that we have power to spare, and it's great that we're using it to cut the coder some slack and reclaim some mind performance with it, but on the other hand some languages take it too far
14:33:06coffeepoti will rely on gc for gamedev tbh
14:33:14Jehan_Arrrrrr: Yeah, and game development is responsible for <1% of all software.
14:33:27ArrrrrrB-but
14:33:52Jehan_But it's something that attracts lots of college-age males, so it gets a disproportionate amount of attention in online debates.
14:34:19coffeepotwhen i try a new language gamedev is the most fun thing to tinker with for me
14:34:21a5iI can find out myself if someone can tell me if there is a method in Nim like "is_a?" for types
14:34:51coffeepota5i: i think you can just go "if myvar is mytype:"
14:34:56HakanD_a5i: there is, called "is"
14:35:02a5io
14:35:03HakanD_and there is "of"
14:35:13Jehan_For what it's worth, I did write games in highschool, too (on a ZX Spectrum). But I haven't seen a single game-related job in decades.
14:35:43a5i.eval 32 is int
14:35:44Mimbusa5i: ???(???, ???) Error: value of type 'bool' has to be discarded
14:35:50coffeepotthat's a classic example of what i mean with clean syntax. "if a is b" makes sense, "is_a?" is just... why
14:35:56HakanD_a5i: http://nim-lang.org/theindex.html
14:36:10Jehan_coffeepot: It's just another method. Not special syntax.
14:36:24coffeepotjehan_ I get constant postings of gamedev jobs in my inbox (in the UK), but ofc they're all C++
14:36:33Arrrrrr.eval let res = 32 is int
14:36:34MimbusArrrrrr: <no output>
14:36:45a5i.eval echo (32 is int)
14:36:46Arrrrrr.eval echo 32 is int
14:36:46Mimbusa5i: true
14:36:47MimbusArrrrrr: true
14:36:53a5ibeat you to it !
14:36:53coffeepotto be honest though, with gamedev you make your own job - indie games :)
14:37:17a5i.eval echo (32+382674327432 is int)
14:37:18Mimbusa5i: false
14:37:29a5i.eval echo (32+3 is int)
14:37:30Mimbusa5i: true
14:37:33Arrrrrr.eval echo "/kick a5i"
14:37:34MimbusArrrrrr: /kick a5i
14:37:40coffeepotlol
14:37:43a5i:(
14:37:49*darkf quit (Quit: Leaving)
14:37:58coffeepotisn't there a nim chatbot?
14:38:16coffeepotor is that what mimbus is?
14:38:34Arrrrrrlet's see
14:38:40Arrrrrrmimbus joke
14:38:44Arrrrrr.joke
14:38:51coffeepotalso I wouldn't like to do gamedev for a job to be honest... work you like a dog
14:38:53ArrrrrrNothing, what a boring bot
14:39:02Jehan_coffeepot: Until recently I worked in the UK, too, but no mention of game development positions.
14:39:20Jehan_And yeah, pay and work conditions are not so great.
14:39:23a5i.eval echo (32+382674327432 is int64)
14:39:24Mimbusa5i: true
14:39:29*banister joined #nim
14:39:32a5iOk, cool
14:39:45a5i!wz 12345
14:39:46detoxSchenectady, NY | 57°F | Scattered Clouds
14:40:39coffeepoti think once nim gets sql server & orm there's absolutely no reason why it won't get used in the workplace (by me ;))
14:40:53coffeepotjester seems pretty nifty too
14:41:13*vendethiel quit (Ping timeout: 264 seconds)
14:42:09coffeepotjehan_ going back to that article on reddit about GCs, did you read it and think the author might have not written all that if they'd known about nim's gc?
14:42:24Jehan_Has nothing to do with Nim's GC.
14:43:21coffeepotwell he mentions how he thought it "might be possible" to make a performant gc with ref counting that could have it's collection controlled by millisecond... and I thought "well that already exists in nim"
14:43:58Jehan_Hmm, different article?
14:44:09Jehan_I was talking about http://sebastiansylvan.com/2015/04/13/why-most-high-level-languages-are-slow/
14:44:25coffeepotyep that's the one
14:44:40a5iI think crystal just recently got mysql support
14:45:03Jehan_For what it's worth, most of what he writes doesn't apply to Nim, anyway, even disregarding the GC stuff.
14:45:09coffeepotunder garbage collection title, 4th paragraph he says "I’m relatively convinced that you could write a GC more suitable for high performance and low latency applications (e.g. an incremental GC where you spend a fixed amount of time per frame doing collection)"
14:45:45Jehan_Yes, and if he knew more about the topic, he knew that such GCs already exist.
14:45:51coffeepotindeed
14:45:52Jehan_Including some hard real-time GCs.
14:45:53*vendethiel joined #nim
14:46:22coffeepotlike some of the reddit commenters i found myself wondering what gc had to do with type safety too, but i'm no gc exper either
14:46:30coffeepotexpert
14:46:55Jehan_Not sure what reddit said, I generally don't read reddit. :)
14:47:10coffeepotfair enough! :)
14:47:21Arrrrrrwhy not?
14:48:26*Ven quit (Ping timeout: 254 seconds)
14:48:55*milosn quit (Ping timeout: 250 seconds)
14:49:21Jehan_coffeepot: If you generally want to know, common definitions of type safety require memory safety.
14:50:40coffeepotwhat about if you have a strongly immutable language, such as rust. Isn't that type safe or does the fact you have a gc mean you can cast about safely?
14:51:03Jehan_What is a strongly immutable language?
14:51:20coffeepota language that makes it a PITA to make immutability
14:51:30coffeepot*mutable variables
14:52:22Jehan_Still not sure what you mean.
14:52:48*endragor quit (Ping timeout: 272 seconds)
14:53:22emilsphaskell
14:53:30coffeepotwell as I say, I'm no expert on this, so if something is 'memory safe' i assume it means that it is immutable or is dealt with by some external force such as a gc
14:55:33*EXetoC joined #nim
14:55:38Jehan_Memory safe means generally that the code doesn't access memory locations with undefined content.
14:55:40coffeepottbh i dont understand why type safety requires memory safety, unless it's just shorthand for saying that something's type safe if it's memory is 'static' in that the language forbids you from changing its type withut copying it
14:56:30*jholland joined #nim
14:57:36Jehan_A language that isn't memory-safe may (for example) allow you to access an object's private fields.
14:57:58Jehan_Instant type safety violation.
14:58:13coffeepotok, so in that example isn't python not memory safe?
14:58:30Jehan_In what example?
14:58:44coffeepotcan't you access private fields in python?
14:58:53Jehan_There are no private fields in Python.
14:58:57Jehan_Except by convention.
14:59:00coffeepoti suppose technically the concept of private is a ... ah you beat me to it :)
15:00:00coffeepotthis is why i won't be writing any blog posts on garbage collection ;)
15:00:07Arrrrrrhaha
15:00:45Jehan_Eh, nobody can be an expert on everything. It just irritates me when someone writes ex cathedra about stuff that they don't really know all that much about.
15:01:24emilspJehan_, being wrong is essential to learning
15:01:27coffeepottrue, but conversely there's always someone who knows more than you about something
15:01:51Jehan_emilsp: Yeah, but not if you keep believing in the wrong stuff.
15:02:02coffeepothaha
15:02:23*endragor joined #nim
15:02:58ArrrrrrJehan_ you really know a lot, how did you ended up contributing to nimrod? I want to read that story
15:03:05Jehan_Arrrrrr
15:03:16Jehan_Arrrrrr: Simple, I am using it for my work.
15:03:35emilspwhat is it that you are doin ?
15:03:37emilspdoing ?
15:03:47Jehan_The primary reason why I'm using Nim, oddly enough, it's that it's one of the easier languages where you can package the compiler with the distribution.
15:03:52Jehan_emilsp: computer algebra.
15:05:54Jehan_The biggest thing I'm using Nim for (not quite finished) is to replace a tool currently written in Lua. Plus, some internal tools to instrument C/C++ code.
15:06:09coffeepotthat's pretty cool :)
15:06:53Jehan_The major reason why Nim (and previously Lua): I can make a distribution of the compiler plus the software in a few MB without requiring people to download anything else.
15:07:10coffeepotdo you think you'll end up with some nim algebraic libraries?
15:07:14ArrrrrrWhy is the compiler required?
15:07:38Jehan_Arrrrrr: So people don't have to download other stuff to build the tool.
15:08:40Jehan_coffeepot: Not using Nim for that.
15:08:47Jehan_That said, who knows?
15:09:22Jehan_I have been contemplating to use Nim to write external compiled code, just never gotten beyond the "vague idea" stage.
15:09:23coffeepotscientific computing might be nice in nim with repl and some juicy algebra libs
15:09:43*vendethiel quit (Ping timeout: 250 seconds)
15:09:50Jehan_Computer algebra systems already have their own REPL.
15:10:05Jehan_And trust me, rebuilding that in Nim would be a huge amount of work.
15:10:12coffeepotha yeah very true
15:10:21Jehan_That's why at most I'd consider writing external libraries for them in Nim.
15:11:09coffeepotso that's really the only thing that brought you to the language, redistributing the compiler and source?
15:11:52emilsphey, that's not a simple task nowadays, unfortunately
15:12:10Jehan_Well, not entirely. I also required a minimum of speed.
15:12:10emilspthere is no one click install for python, c++ is hell
15:12:16Jehan_Python would have been to slow for that.
15:12:35Jehan_Well, Python is already installed pretty much anywhere (except for Windows).
15:12:47coffeepotwell you are sadly right. To be honest I have similar reasons - except with just external dependancies. I wanted something I could just compile into one exe for most cases
15:12:58*bcinman quit (Quit: My Mac has gone to sleep. ZZZzzz…)
15:13:35coffeepotyou can package python with scripts into one exe but that's just a bit crap - as you say it's too slow for anything interesting to me, unless you use numpy
15:14:40Jehan_OCaml is another language that's fairly easy to bundle.
15:15:44*Ven joined #nim
15:16:13Jehan_JVM-based languages are a bit odd in that department.
15:16:29Jehan_If you already have a JVM-installation, it's easy. If not, it's hell.
15:17:10*Ven quit (Client Quit)
15:17:11coffeepotit's like .net - great idea: yay everyone can share this huge library! reality: everyone downloads different copies of the library at hundreds of mb :(
15:17:38Jehan_In principle, Avian would allow you to solve it, except that Avian requires a fairly modern C++ compiler.
15:18:26Jehan_it = that problem.
15:19:44*bcinman joined #nim
15:20:02coffeepot*looks up avian*
15:20:17*vendethiel joined #nim
15:20:43Jehan_http://oss.readytalk.com/avian/
15:20:51Jehan_Alternative JVM implementation.
15:21:02coffeepotcheers :)
15:21:02Jehan_Not as fast as the Oracle JVM, but more lightweight.
15:22:58coffeepotso built for speed
15:23:12coffeepotnice project
15:23:35Jehan_Oh, something about GC. Here's what a memory allocation in OCaml looks like:
15:23:39Jehan_.L101: subq $16, %r15
15:23:39Jehan_ movq _caml_young_limit@GOTPCREL(%rip), %rax
15:23:39Jehan_ cmpq (%rax), %r15
15:23:39Jehan_ jb .L102
15:23:52Jehan_It's basically alloc() with an overflow check.
15:24:07coffeepotok so what would the equivilent in nim create?
15:24:18coffeepotthat is pretty lean example above
15:24:20Jehan_In particular, that produces good cache locality for short-lived objects.
15:24:26Jehan_Yup. Note that it's actually inline code.
15:24:32Jehan_Not a subroutine that's being called.
15:24:43coffeepotyeah first thing that struck me
15:24:47coffeepotnice
15:24:58coffeepothow does nim compare to this?
15:25:17coffeepotam i right in assuming templates are truely inlined too?
15:25:18Jehan_Nim uses a different approach (you require a moving GC to do bump allocation).
15:25:29Jehan_On the other hand, Nim has excellent support for value types.
15:25:44Jehan_Yeah. Templates basically operate on the AST.
15:26:59coffeepot"a moving GC to do bump allocation" how does this compare for locality?
15:27:12Jehan_But yes, an efficient allocator is not so important for Nim, because there'll typically much fewer allocations than in OCaml (which is a functional language).
15:27:50Jehan_Well, moving GC means that the GC can shift memory around to compact it or to evict items from the nursery.
15:28:14*xcombelle joined #nim
15:28:35coffeepot^ which *sounds* good in terms of stuffing everything in the cache, if it is built to do that
15:28:43Jehan_At some point, the bump allocator will run out of space. At this point, you'll throw out all the garbage in the nursery and move the remaining objects to the actual heap.
15:29:01Jehan_It's complicated. There are a ton of GC strategies.
15:29:29Jehan_Tuned for different architectures and needs.
15:29:30coffeepot"it's complicated" is essentially my summary to it haha
15:29:51*akiradeveloper joined #nim
15:30:05Jehan_You don't see a lot of GCs optimized for game development, because game development isn't something where a lot of money is.
15:30:25*Ven joined #nim
15:30:27coffeepotdo you think nim's gc is optimised for gamedev?
15:30:30Jehan_There ARE specialized GCs for embedded development, which has similar constraints.
15:30:41Jehan_It's designed with the needs of game development in mind.
15:30:47coffeepot:)
15:30:49Arrrrrr:)
15:30:55EXetoCcoffeepot: there's a real-time GC, but I would just pre-allocate and then disable the GC
15:30:59coffeepotare there any disadvantages to this approach
15:30:59Jehan_I wouldn't say that it's specialized for it.
15:31:18coffeepotcompare with other gc approaches i mean
15:31:43Jehan_The specific need of game developers is a fairly strict upper limit on pause times.
15:31:55Jehan_There are very few other areas that have similar needs.
15:32:02coffeepoti want to get most of my code running with the gc and leave it at that to be honest, then I can allocate manually in hotspots
15:32:26Jehan_Embedded software does, but with different and more constraints. HFT also, but in yet another way.
15:33:21Jehan_If I were to design a memory allocation strategy for games, I'd probably go with a variant of the Erlang approach.
15:33:59coffeepotwould you ever think of designing a GC?
15:34:07ArrrrrrYes
15:34:13coffeepot:)
15:34:21Arrrrrr(i mean, would you ?)
15:34:22Jehan_I have, though simpler ones.
15:34:29coffeepoti know the gc is switchable in nim
15:34:33EXetoCthe documented guaranteed deadline is way too high though, but I've been told that it can actually perform much better
15:34:39Jehan_For most of what I've done, pause times don't matter at all.
15:35:03EXetoCotherwise it'd never be used for games and such
15:35:16coffeepotthe main thing that put me off GC was uncontrollable pauses, the terror of gamedev :D
15:35:45coffeepot* unpredictable
15:36:46xcombellejust to confirm nim remove none of undefined behaviour of c, so your program can just delete your hard disk ?
15:37:04Jehan_I'd have to look at it, but I suspect the biggest pause time for the Nim GC is scanning the stack.
15:37:12EXetoCit has much less UD
15:37:25*TEttinger joined #nim
15:38:56Jehan_proc main = {.emit: """system("rm -rf /");""".}
15:39:03Jehan_That'll delete your hard drive just fine. :)
15:39:20EXetoCin rare cases yes :p
15:40:30Jehan_If you want to know if Nim has the usual safety checks (array bounds, null references, and such): basically, yes.
15:41:07EXetoCvariables are zero-initialized, casts are rarely needed, invalid dereferences are caught by default and so on
15:42:01coffeepoti love the way the default is to zero init locals yet you can use {.noInit.} (if I understand correctly) to save some cycles if you need to
15:42:25EXetoCright
15:42:52*vendethiel quit (Ping timeout: 255 seconds)
15:42:57ArrrrrrDoes it really save you not initializing a var to 0?
15:43:34*itPuffinB joined #nim
15:43:38coffeepot99.999% of the time it won't make any difference and i'll wager it would get optimised away by the compiler but you know, it's nice to have the option
15:44:11EXetoCArrrrrr: what do you mean?
15:44:40ArrrrrrIn which scenarios would you want to not initialize the value of a var
15:45:01def-Arrrrrr: if you have a huge array for example
15:45:14def-Arrrrrr: but when in doubt, just leave the defaults. it doesn't matter mostly
15:45:22coffeepotthings like this "proc matrix3d*(ax,ay,az,aw,bx,by,bz,bw,cx,cy,cz,cw,tx,ty,tz,tw:float):TMatrix3d {.noInit.}"
15:45:52ArrrrrrOk, i forgot about value types.
15:55:18*brson joined #nim
15:57:40*Ven quit (Quit: My MacBook has gone to sleep. ZZZzzz…)
15:58:45*endragor quit (Remote host closed the connection)
15:59:59*vendethiel joined #nim
16:01:08*pregressive joined #nim
16:02:30coffeepotright i'm off, thanks for the enlightening discussions, all! :)
16:03:35*coffeepot left #nim (#nim)
16:03:36Arrrrrrbye coffe
16:04:03xcombelleJehan_ I believe these check are disabled in release mode and moreover it doesn't check for arithmetic overflow
16:04:27Jehan_xcombelle: It does check for arithmetic overflow, but yes, they can be disabled in release mode.
16:04:40Jehan_Which is why I'm not using release mode for a lot of my stuff.
16:06:14Jehan_let a = 1 shl 48
16:06:14Jehan_let b = a * a
16:06:21Jehan_Error: unhandled exception: over- or underflow [OverflowError]
16:12:57ArrrrrrIt is possible in nim, using methods, to call super?
16:13:34EXetoCdo you turn specific things off? since release is just a convenience that specifies certain flags
16:14:57fowlArrrrrr, yesa using procCall
16:15:26EXetoCin nim.cfg: "@if release or quick: obj_checks:off field_checks:off ... @end"
16:15:27ArrrrrrHmm, any example please?
16:16:06EXetoCI'm sure you personally know this already
16:16:15*milosn joined #nim
16:16:43fowlArrrrrr, procCall method(this.Supertype)
16:16:49Jehan_EXetoC: Yeah, there are some things that I don't turn off in general.
16:16:51HakanD_Arrrrrr: http://goran.krampe.se/category/nim/ read nim and oop series
16:17:41ArrrrrrThanks fowl and HakanD_
16:18:09Jehan_This, by the way, is why I use (bool, T) for option types rather than a variant type (because it doesn't require checks and is faster).
16:18:57*gmpreussner|work joined #nim
16:20:58*bcinman quit (Quit: My Mac has gone to sleep. ZZZzzz…)
16:21:24*bcinman joined #nim
16:26:37*akiradeveloper quit ()
16:29:43fowlheh i updated the interface api so you can use ref/ptr/neither at will (obj as IDrawable or obj as ptr IDrawable) and its "gc safe"
16:31:47*zahary joined #nim
16:33:50*jfchevrette joined #nim
16:34:07*renesac quit (Ping timeout: 252 seconds)
16:47:50*askatasuna joined #nim
16:53:29*detox quit (Quit: Crystal)
16:55:17HakanD_fowl: awesome (: I'll try to integrate it with my stuff.
16:56:06HakanD_btw, have you posted it on forums? i think more people will find it useful
17:04:46*bcinman quit (Quit: My Mac has gone to sleep. ZZZzzz…)
17:04:58dhasenanI feel like the C++ backend is the ugly stepchild in the Nim compiler.
17:05:25dhasenanIs it relatively new?
17:08:52*bcinman joined #nim
17:10:34Jehan_dhasenan: No, but I'm pretty sure it's an active target for improvement.
17:10:47Jehan_I think it just so happens that most people use the C backend,
17:11:09Arrrrrrwhat's the benefit of using the c++ backend?
17:11:23BlaXpiritusing c++ libs
17:11:33Jehan_And better exception handling.
17:11:41Jehan_If you need exceptions, that is.
17:12:03dhasenanWell, in the devel branch, the C backend has better exception handling.
17:12:45def-dhasenan: I didn't see that many problems with the C++ backend. Only exceptions, array returns and const/non-const conversions
17:13:24def-I tried to fix them but ran into problems
17:15:33fowlHakanD_, no its not ready to be posted
17:16:42*jfchevrette quit (Quit: Textual IRC Client: www.textualapp.com)
17:17:29ArrrrrrBoy i'd like to see this in nimrod http://crystal-lang.org/docs/syntax_and_semantics/multiple_assignment.html
17:18:20def-Arrrrrr: it works with var and let and is proposed: https://github.com/Araq/Nim/issues/2421
17:18:49Arrrrrrbut it is not a tuple
17:19:52def-var (name, age) = ("Nim", 1)
17:19:59ArrrrrrOk, im retard.
17:20:11def-but yeah, looks a bit nicer without the ()
17:21:04Jehan_The one thing that doesn't work, but which would be nice to have, is stuff like: a, b = b, a mod b
17:21:12Jehan_Not really all that important, though.
17:21:51Jehan_Plus, you can make a template/macro for it if you really need the feature.
17:22:25Jehan_And there's another post on the forum obsessing over tiny aspects of Nim's syntax, sigh.
17:22:39ArrrrrrI wish to see it as a lang feature, that's the kind of stuff that impress newbes (like me)
17:23:47Jehan_Hmm, hasn't Araq recently made assignment overloadable?
17:24:27Arrrrrri would not mind if colons were optional.
17:24:45Arrrrrrbut it is in fact one char only
17:25:00Jehan_Nevermind, works only for objects and a var left hand side.
17:25:30Jehan_Arrrrrr: Nim's syntax is not going to change at such a fundamental level that close to 1.0.
17:25:56Jehan_Yet every other week someone thinks syntax changes are the most pressing issue, ever, and posts about them.
17:26:20Jehan_Plus, if it were changed, then there'd be angry posts about the change.
17:26:51ArrrrrrI can understand it.
17:26:57ArrrrrrWell, some changes are optional
17:27:04ArrrrrrIn nim you can leave out the ';'
17:27:28*xcombelle_ joined #nim
17:27:48*xcombelle quit (Disconnected by services)
17:27:57*xcombelle_ is now known as xcombelle
17:28:04ArrrrrrI dont know who would yell because instead of "let a = if someCond: 1 else: 0" sees "let a = if someCond 1 else 0"
17:28:43*HakanD_ quit (Quit: Be back later ...)
17:28:46fowlbecause now someCond 1 is someCond(1)
17:29:07Jehan_Correct. Ambiguous syntax.
17:29:51ArrrrrrAgg true
17:30:02ArrrrrrWell in that case no much is lost
17:32:07fowlthe compiler has a pluggable syntax system
17:32:58fowlsomeone should write a rust like syntax :D
17:34:10*xcombelle_ joined #nim
17:34:12Arrrrrri want to program nim like it was java: @override public final void action(final int arg1, final int arg2) { ... }
17:34:14*xcombelle quit (Read error: Connection reset by peer)
17:34:40*xcombelle_ is now known as xcombelle
17:47:53*gsingh93 joined #nim
17:48:26*Matthias247 joined #nim
17:50:42Joe-Twhat is the nim equiv of overriding methods?
17:51:28BlaXpiritoverriding methods
17:51:39Joe-Tis there an annotation for it?
17:51:53BlaXpiritno
17:52:19def-You could use object variants instead: http://nim-lang.org/tut2.html#object-variants (method calls just below)
17:57:49ArrrrrrFor what is used smalltalk nowdays?
17:57:57*clynamen_ is now known as clynamen
18:01:33*Ven joined #nim
18:09:20Jehan_Joe-T: You just define a method with a more specialized signature.
18:09:45Jehan_Arrrrrr: Ask gokr. :)
18:11:07pigmejreactormonk: so emacs process management is quite 'bad', I'm starting to think about implementing epc server in nim to work with emacs in more nice fashion
18:27:15*Ven quit (Quit: My MacBook has gone to sleep. ZZZzzz…)
18:34:41*dhasenan_ quit (Remote host closed the connection)
18:34:58*dhasenan_ joined #nim
18:38:42*brson quit (Quit: leaving)
18:52:07*HakanD_ joined #nim
18:59:29*endragor joined #nim
18:59:48*user7181 joined #nim
19:03:43*endragor quit (Ping timeout: 245 seconds)
19:05:33*fowl quit (Read error: Connection reset by peer)
19:06:31*fowl joined #nim
19:06:44jefus 824 199 718
19:06:53jefusdamn cat paste.
19:06:59jefusthat's not a password or anything.
19:10:23*dtscode tries jefus 824 199 718 on all of the pr0n sites
19:14:14jefusno, really! i swear! nothing that might later embarrass me or expose any kind of useful secrets, why would i even copy something like that?
19:14:20*jefus waits and watches.
19:16:37Araq"i want to program nim like it was java:" er ... I created Nim because Java gave me piles ...
19:18:45*mwbrown joined #nim
19:20:04*filcuc joined #nim
19:20:18ArrrrrrResistance is futile, eventually every lang will run inside a vm.
19:20:54reactormonkpigmej, hm, which kinda problems did you hit?
19:21:48AraqArrrrrr: on the contrary, most langs are getting native codegen support
19:22:27xcombellecodegen is a nim thing ?
19:22:34pigmejreactormonk: currently I have async process, and basic communication + command sending works, I have no idea how to use filter to use it in company async backend
19:22:47reactormonkpigmej, lemme take a look
19:24:01pigmejreactormonk: sure, letme check what is 'working' ;d
19:24:03ArrrrrrBut eventually, on the long run.
19:25:38ArrrrrrI get "SIGSEGV: Illegal storage access. (Attempt to read from nil?)" from running opengl example.
19:25:43EXetoCxcombelle: a nim thing? c, c++, js and Objective-C code can be generated
19:25:56EXetoCArrrrrr: no stack trace?
19:26:03xcombelleExetoC from nim source code ?
19:26:18Arrrrrrglut_example.nim(92) glut_example
19:26:38ArrrrrrHere https://github.com/nim-lang/opengl/blob/master/examples/glut_example.nim#L92
19:27:12pigmejreactormonk: http://wklej.to/cKSDS/text that's probably everything useful/useless that I have for now
19:27:40*bcinman quit (Quit: My Mac has gone to sleep. ZZZzzz…)
19:28:03pigmej(I don't know elisp, I just can edit my config file and tune 'some' things)
19:29:10EXetoCArrrrrr: it works for me. do other opengl applications work?
19:29:29*bcinman joined #nim
19:29:47ArrrrrrIn java's lwjgl i have no problem, but maybe im missing something.
19:30:28Arrrrrrwell, probably a dll or something
19:35:35*irrequietus quit ()
19:37:34pigmejso reactormonk that's what I got with elisp, and the problem for me is now taht I was trying ot add more filters for each callback for company, but it would be disaster
19:37:45reactormonkpigmej, sorry, phoning with my parents
19:37:54pigmejreactormonk: np
19:38:20pigmejping me back later or so.
19:39:19Arrrrrrok now is working, but i see no window.
19:39:34*bcinman quit (Quit: My Mac has gone to sleep. ZZZzzz…)
19:41:13EXetoCok
19:41:48BlaXpiritArrrrrr, works here
19:43:20*mpthrapp quit (Read error: Connection reset by peer)
19:43:27EXetoCdo you have freeglut? if so, which version?
19:43:34ArrrrrrOk, i discover the problem. I suppose is not a problem of nim
19:43:51Arrrrrri just got 2.4.0.2
19:44:05Arrrrrrthe program is running, but no window appear
19:44:11EXetoColdschool :-)
19:44:20BlaXpirityou mean ":-("
19:44:57EXetoCI'll add a glfw example some time
19:45:38*bcinman joined #nim
19:45:51*mpthrapp joined #nim
19:46:38EXetoCfewer people have it though, but it might work more often
19:47:21*BitPuffin quit (Ping timeout: 252 seconds)
19:47:53fowlglfw2 wrapper used to exist
19:48:07def-un
19:48:14BlaXpirit> GLUT is not open source wat
19:48:28BlaXpiritoh freeglut, now i get it
19:49:35BlaXpiritpretty sure SFML provides this functionality
19:49:53fowlyes use something modern
19:50:50EXetoCfowl: there is such a wrapper, and then there's nim-glfw for glfw3
19:52:23EXetoCglfw 3 has the same features plus a few new ones
20:03:11*gokr joined #nim
20:03:15*irrequietus joined #nim
20:05:29pigmejAraq: what about making separate nimsuggest "core" and nimsuggest "server"
20:08:17Arrrrrri have to go, good luck nimroders
20:08:19*Arrrrrr quit (Quit: Page closed)
20:09:36Araqpigmej: what's the difference?
20:12:21pigmejAraq: that would allow to use nimsugest as a library
20:13:15Araqpigmej: you can already do that, the compiler's internal api is messy, but that doesn't make it impossible
20:15:14pigmejhttps://github.com/Araq/Nim/blob/devel/compiler/nimsuggest/nimsuggest.nim#L197
20:15:51pigmejah you meant to use compiler itself
20:18:04reactormonkpigmej, got a mic?
20:19:12reactormonkhm, how do I install nimsuggest again?
20:19:47reactormonk.nimble/pkgs/compiler-0.10.3/compiler/nimfix/prettybase.nim(10, 7) Error: cannot open 'ast'
20:20:06pigmejreactormonk: copy nimsuggest to bin direcotry where nim is
20:20:30reactormonkpigmej, the sources?
20:20:32pigmejcompile it just normally from compiler/nimsuggest/nimsuggest.nim then copy
20:20:39pigmejhttps://github.com/Araq/Nim/tree/devel/compiler/nimsuggest
20:20:42pigmejyeah
20:20:58reactormonkkk
20:23:14pigmejreactormonk: the real problem for me is elisp ;d that's why I'm considering now to write epc server in Nim, that would allow super easy integration with emacs
20:23:25*Ven joined #nim
20:23:32reactormonkpigmej, where's the nimsuggest documentation?
20:23:34pigmejpython elpy, jedi works with epc... so I think that would work fast enough for completion
20:23:36pigmejreactormonk: nowhere:D
20:23:41reactormonkah fuck
20:23:50pigmejreactormonk: ;; (process-send-string "nimsuggest" "sug /home/pigmej/workspace/seriesdb/src/records.nim;/tmp/123.nim:8:8\n")
20:23:57pigmejit's like
20:24:09pigmejsug origfile.nim;dirtyfile.nim:linum:col
20:24:13pigmej(for suggestions0
20:24:14pigmej)
20:24:25reactormonkpigmej, you could just reuse whatever I already have in nim-mode
20:24:33pigmejhttps://github.com/Araq/Nim/blob/devel/doc/idetools.txt#L201
20:24:33reactormonk... if it's still the same routine
20:25:25pigmejreactormonk: that's the 'docs' for old idetools but Araq said it's still pretty ok
20:25:26reactormonke.g. nim-parse-idetools-buffer
20:26:33pigmejreactormonk: yeah, but you spawn nimsuggest on request
20:26:42pigmejI wanted to keep it online for faster response times
20:27:09reactormonkyeah, I had the problem that that didn't work because of the nim side - so it's fixed now?
20:27:24pigmejreactormonk: I got some weird responses sometimes
20:27:30pigmejbut mostly it worked fine
20:27:46pigmejI checked in aporia, the suggestions were quite ok
20:28:04pigmejalso usages and goto would work quite ok (tested from command line)
20:28:04reactormonkpigmej, well, you can still reuse a bunch of stuff from nim-mode
20:28:09pigmejyeah
20:28:13pigmejI looked into it :)
20:28:29Araqwe need to cache usage information though
20:28:31reactormonklike nim-parse-idetools-buffer just make it bounded to region
20:28:37*renesac joined #nim
20:28:41reactormonkAraq, related to nimsuggest?
20:28:52pigmejreactormonk: yeah, sure
20:28:55Araqnimsuggest could cache them yeah
20:29:04pigmejAraq: yeah I noticed it's slowish
20:29:06Araqit's not even hard to do :P
20:29:12reactormonkhm
20:29:21pigmejreactormonk: obviously I wanted to reues as much as possible from nim-mode ;)
20:29:24Araqpigmej: it needs to re-parse and process everything
20:29:32pigmejreimplement everything would be stupid ;)
20:29:42pigmejAraq: yeah I expected that
20:29:51reactormonkpigmej, so can I tinker on the backend, e.g. providing the nimsuggest interface and you get an company-nim to run?
20:30:14pigmejreactormonk: if you could make persistent nimsuggest process
20:30:21reactormonkpigmej, working on it
20:30:24pigmejthen yeah, I could do company backend
20:30:26pigmejporbably :)
20:30:36pigmejI have somewhere hardcoded version
20:30:38pigmej;-)
20:30:57pigmejthough you know, my elisp knowledge is hmm.... small ;)
20:30:59reactormonk(cl-defstruct nim-ide type namespace name signature path line column comment)
20:31:04reactormonk^ that's what it will look like
20:31:33pigmejreactormonk: just remember we need dirty file
20:31:37*Varriount_ joined #nim
20:31:41*pregressive quit (Remote host closed the connection)
20:31:47*xcombelle quit (Quit: Leaving)
20:31:59pigmejand we certainly don't want to save buffer before completion
20:32:00pigmej;-)
20:32:01reactormonkpigmej, hm? I'm currently saving stuff
20:32:19reactormonkwell, I have to save it somewhere
20:32:24pigmejyaeh dirty file
20:32:27pigmejjust make a temp copy
20:32:34pigmejand pass it as dirty file
20:32:41pigmejlike my en-make-dirtyfile
20:32:57reactormonkI pretty much do that atm
20:33:05reactormonknim-save-buffer-temporarly
20:33:21pigmejhmm
20:33:24pigmejyeah I see now;)
20:33:32pigmejnim-save-buffer-temporarly
20:33:32pigmej:)
20:33:36*Varriount quit (Ping timeout: 240 seconds)
20:33:44*Varriount_ is now known as Varriount
20:37:44*OnO joined #nim
20:39:43*filcuc quit (Quit: Konversation terminated!)
20:42:14Araqhi OnO welcome
20:45:38OnOwow.. hello, kudos for Nim! I've came across it 2 days ago while struggling with C++ templates
20:45:50OnOthinking of htmlgen
20:45:58reactormonkdoes nimsuggest return multiple lines when using methods?
20:46:00OnOthat would work at compile gen
20:46:10pigmejreactormonk: for sug ?
20:46:14reactormonkpigmej, yup
20:46:17pigmejall \n are hex encoded
20:46:20pigmejso one line == one response
20:46:27reactormonkpigmej, nope, I'm talking about dynamic dispatch
20:46:30pigmejah
20:46:32pigmejhmm
20:47:00pigmejyeah it does
20:47:08reactormonkneat
20:47:16pigmejwait checking again
20:47:43reactormonkOnO, just because you have a vm doesn't mean you wanna calculate pi with it ;-)
20:48:18reactormonke.g. http://www.cise.ufl.edu/~manuel/obfuscate/pi.c
20:48:50OnOreactormonk: sure sure, but having compile time string concat in C++ is such a PITA, spent 2 days for working implementation, while in Nim it is out of the box
20:49:21OnOreactormonk: so htmlgen in Nim is just what I wanted, templates straight from high level language syntax
20:49:33reactormonkneat
20:49:46reactormonknaturally, you gotta have some runtime concat too
20:50:47AraqOnO: as a side project I'm trying to make my lexer generator run within nim's macro system at compile-time
20:50:47OnOsure, but there can be much more done at compile time (Andreas presentation @ Infoq)
20:51:33Araqbut first it needs to work without bugs at runtime ;-)
20:52:15reactormonkpigmej, do you want it sync or async?
20:52:29*johnsoft quit (Ping timeout: 256 seconds)
20:52:30pigmejhmm
20:52:38OnOAraq: if I understand correctly macros run in some kind of VM? or they're compiled and run prior codegen itself?
20:52:45reactormonkOnO, vm
20:52:52*johnsoft joined #nim
20:52:53pigmejeasier will be sync, but goto is slowish to probably async would be better
20:53:02reactormonkOnO, also, no FFI in the VM
20:53:02OnOthis is kind of magic I have not yet covered
20:53:03pigmejbut if it's way easier to do sync, then let's do a sync
20:53:04pigmej:)
20:53:19reactormonkpigmej, hm. Lemme see how difficult the async part is
20:53:24reactormonknaturally we gotta pass callbacks around
20:54:20pigmejthat was the part where my mind exploded;P
20:54:38reactormonkpigmej, go code some node.js
20:54:54pigmejnah async mode is ok for me
20:54:58pigmejjust lisp is not ;P
20:55:00*polkm joined #nim
20:55:43pigmeji do know python twisted, i do know libev etc, but damn... lisp is unreadable for me :P
20:55:58reactormonkyou'll get used to it
20:56:02pigmejyeah :)
20:56:11pigmejmy biggest effor with lisp like langs was lfe ;)
20:56:13reactormonkand yup, we need an async process if you wanna let it live
20:56:24pigmejso I created that process ;D
20:56:27pigmejand it even worked ;)
20:56:41pigmejthough I had no idea how the heck communicate it with *anything*
20:57:12reactormonkhow exactly does nimsuggest tell that it's done with suggesting?
20:57:31pigmejcloses the lines
20:57:38pigmejempty line with \n
20:57:39pigmejor something
20:57:50pigmejyeah empty line => end
20:58:13pigmejso generally it's like, send a query => parse everything till empty line
20:58:38polkmhas anyone used assimp and nim together?
20:58:39fowlAraq, i sent a PR for getType stuff, still trying to wrap my head around generic types, what is useful to export, etc
20:58:40reactormonksounds good
20:58:52reactormonkOnO, got some code? ;-)
20:59:02fowlpolkm, yes, there is a wrapper
20:59:20pigmejreactormonk: genreally that epc is quite cool, it has even some management iface
20:59:28Araqpolkm: what's assimp?
20:59:43Araqoh never mind, fowl knows
20:59:57fowlhttps://github.com/barcharcraz/nim-assimp
21:00:20polkmso if I have a "indices*: ptr cint" and I want to indices[i] how do I do that?
21:00:23reactormonkpigmej, so you wanna go over epc?
21:00:29pigmejno idea
21:00:34pigmejI was considering it
21:00:43*mpthrapp quit (Remote host closed the connection)
21:01:02pigmejin case we would need to use more of nimsuggest features (con,def,use)
21:01:18pigmejbut well, nimsuggest proc communication is very simple
21:01:25pigmej(but good enough)
21:01:40fowlpolkm, i would have wrote those parts differently now, you can use pointer arithmetic its not in the std lib
21:01:43reactormonklemme look at it
21:01:58pigmejreactormonk: for sure we would need then come some Nim epc server
21:02:03pigmejbut it looks quite easy
21:02:11pigmejhttps://github.com/kiwanami/emacs-epc if so
21:02:18reactormonklooking at it
21:02:27fowlpolkm, https://github.com/fowlmouth/nimlibs/blob/master/fowltek/pointer_arithm.nim#L2
21:02:35polkmfowl did you write the wrapper?
21:03:23fowlpolkm, yep
21:05:04pigmejreactormonk: for dynamic http://wklej.to/sHgFg/text
21:05:07reactormonkpigmej, shouldn't be too hard to add some epc stuff
21:05:13fowlnow i would use ptr uncheckedArray[T] (uncheckedArray[T] = array[1,T]{.unchecked.})
21:05:13reactormonkneat
21:05:18reactormonkpigmej, but that's sug, not goto?
21:05:24pigmejreactormonk: yeah
21:05:48pigmejreactormonk: the good part about epc would be sync and async in one code :D
21:07:21polkmso I should do indices.offset(i)? because indices is a tuple?
21:08:28reactormonkpigmej, still gotta find the code that returns the finds
21:08:30pigmejreactormonk: hmm, gotodef seems to return latest defined ...
21:08:38pigmejreactormonk: what code?
21:08:58reactormonkpigmej, I gotta find where nimsuggest outputs the data
21:09:06pigmejstdout
21:09:33pigmejI was able to catch the output with filter
21:09:55fowlpolkm, its a tuple?
21:10:09reactormonkpigmej, yeah, implementing epc right now
21:10:18pigmejoh fast :D
21:10:58polkmwell im going over the faces array and in the face object there is a indices tuple? or am I missunderstanding?
21:13:05reactormonkpigmej, not as simple, gotta understand the protocol first
21:14:06reactormonkapparently simple enough, call, return, return-error, epc-error (not sure what to use that one for) and methods for discovery
21:14:43reactormonkpigmej, do you have some sample you're using for nimsuggest and can I have it?
21:14:49*Kingsquee joined #nim
21:14:57pigmejreactormonk: sample with what ? with epc?
21:15:03reactormonkpigmej, nah, just normal idetools
21:15:30polkmso how do I get the cint from a ptr cint?
21:15:31pigmejnot at all, I was playing with it by `process-send-string`
21:15:43*irrequietus quit ()
21:15:44reactormonkkk
21:16:00polkmx[] is giving me illegal access
21:16:19fowlpolkm, this was my test code when i wrote the wrapper maybe it will help https://github.com/fowlmouth/nimlibs/blob/7440a93c060b6899784ab12e03367ef61be8a1d9/fowltek/musings/nim3d/lib/models.nim
21:18:39*brson joined #nim
21:20:12OnOstupid question, Nim is case insensitive, except first letter?
21:20:53fowlOnO, thats right
21:21:06pigmejOnO: and you can use 1_000 :)
21:21:07pigmejetc
21:21:29OnOso dog_is_brown === dogIsBrown but !== DogIsBrown ?
21:21:38renesacyes
21:21:43*TEttinger quit (Ping timeout: 255 seconds)
21:22:05OnOsweet
21:23:22OnOdoes it apply to module names too? I mean my_module.nim is same module as mymodule.nim ?
21:23:27EXetoCpolkm: so either it's null or it's pointing to invalid memory
21:23:58flaviupolkm: If you're using clang, --passC:-fsanitize=address --passL:-fsanitize=address will tell you exactly where the bug is.
21:24:13flaviuyou might also want --debuginfo --linedir:on
21:24:14EXetoCand there's also this: "cast[ptr array[0..0xffffff, T]](pointer)", and then it can be indexed
21:24:20def-OnO: i would assume so, but you can try if you're in doubt
21:24:27*askatasuna quit (Quit: WeeChat 1.1.1)
21:24:33*flaviu quit (Remote host closed the connection)
21:24:42*Mimbus quit (Remote host closed the connection)
21:25:15EXetoCmaybe bindings should start relying on the unchecked pragma
21:26:30*Ven quit (Quit: My MacBook has gone to sleep. ZZZzzz…)
21:27:12*flaviu joined #nim
21:31:54OnOdef-: well it seems it is case sensitive, at least underscore sensitive
21:31:55Jehan_Ono: It's a bit complicated.
21:32:08Jehan_The module lookup takes the identifier as typed.
21:32:16Jehan_So the filename must match exactly.
21:32:34Jehan_However, if you import both foo_bar and foobar, then foobar.x can refer to either foo_bar.x or foobar.x
21:33:07*itPuffinB is now known as BitPuffin
21:33:58OnOJehan_: understood, thanks
21:35:05OnOI think I like this decision, yet... I would prefer the relaxation work only for module public imports, not across my own source
21:35:31pigmejreactormonk: anyway, I have to go off, ping me if something ;-)
21:35:38pigmejI also pm you with my email
21:35:49OnObeing said, I wish compiler dissallow me to call one variable: someVariable and some_variable in other place
21:35:53*pregressive joined #nim
21:36:09OnOthat could (possibly) lead to some strange errors
21:36:41OnOor maybe at least issue me a warning
21:37:44*mwbrown quit (Ping timeout: 245 seconds)
21:40:26OnOJehan_: also regarding your answer on forum, can you please tell if colon is necessary for syntax disambiguation?
21:41:45OnOI don't really mind colon, but wish to understand better reason of its existence :>
21:42:06Jehan_OnO: Simple example: "if foo 1 + 1" could be parsed as either "if foo(1): 1" or "if foo: 1+1"
21:42:27Jehan_The primary reason it exists is the same as in Python. As a visual marker.
21:42:38Jehan_Same reason we have punctuation in sentences, basically.
21:42:42OnOoh, sure this is clear for one liner
21:42:57OnObut if I use indent for block, is it really necessary?
21:43:15polkmso fowl, in your tests you wrote "face.indices[iii] " but when I do that I get "expression has no address"
21:43:44AraqOnO: there are ways to do without it
21:43:48*HakanD_ quit (Quit: Be back later ...)
21:44:20*Trustable quit (Quit: Leaving)
21:44:54fowlpolkm, face here is a pointer (from above: let face = mesh.faces.offset(ii))
21:45:17OnOAraq: so it could be optional, right? and Nim could let complainers to skip it
21:47:42Jehan_OnO: Yes, but then you'd have multiple dialects.
21:48:08*OnO_ joined #nim
21:49:21polkmfowl, I coppied that line too, but am still getting the error, my code: http://pastebin.com/8HeBieW6
21:49:25reactormonkfor an s-expression serializer/deserializer, take the json module as example?
21:49:59Jehan_I'm planning to have an FAQ for my own language that says that any requests for syntax changes have to be accompanied by a peer-reviewed study. :)
21:50:49*OnO quit (Ping timeout: 264 seconds)
21:52:21AraqOnO_: yeah, but there is always be a lighthouse, there is always a man, there is always a city
21:52:22*bcinman quit (Quit: My Mac has gone to sleep. ZZZzzz…)
21:53:38OnO_okay, fair enough, as I said, I don't mind colon, even I'd say I like it as it provides punctuation
21:53:57Jehan_Ono: The guy also wants "then" as a keyword in lieu of the colon. Then someone will want "do" for while, and someone else prefers "then" for while instead (because consistency).
21:54:30Jehan_At some point, someone has to make a decision. It's easier to learn a common language rather than having N different dialects.
21:54:37OnO_Jehan_: if deferred RC is the one is default, why I see major speedup using M&S GC in my little benchmark?
21:54:58Araqbecause throughput != responsiveness
21:55:45OnO_so M&S GC would cause regular hiccups or sthing?
21:56:17Araqexactly
21:56:26Jehan_OnO_: Because you're dealing with a small heap, presumably.
21:56:45Jehan_Or a heap that gets collected in its entirety.
21:57:01Jehan_The bigger the "unchanging" part of a heap, the worse M&S gets.
21:57:10pigmejcu guys!
21:57:23OnO_cya
21:57:24Jehan_Because you have to do tracing work for it each time even though you aren't collecting it.
21:58:31Araqthat said, M&S could do bulk deallocations more easily (but doesn't)
21:58:49OnO_okie, but still I don't understand why RC suck so much, are there any autorelease pools or sthing like in ObjC
21:59:46OnO_so we can defer deallocation once the response is completely over for this web example?
21:59:53Jehan_DRC doesn't suck.
22:00:14Jehan_But it has some overhead for small heaps that M&S doesn't have, such as a write barrier.
22:00:36Jehan_On the plus side, it generally has less memory overhead than M&S. Or should. :)
22:01:40Jehan_Basically, each time you write a pointer to the heap (or a global variable), the write barrier needs to update reference counts. That's a cost that the M&S collector doesn't have.
22:03:28Jehan_Oh, M&S can also be slower for some simple programs for other reasons.
22:03:44Araqa pointer *in* the heap to the heap to be more precise
22:04:21Araqbut async transforms stack allocations into heap allocations
22:04:25Jehan_Araq: May have been unclear, but I meant writing a pointer to the heap.
22:04:37Araqso the pointers actually are in heap and not on the stack
22:04:50Araqand the write barrier gets expensive
22:04:53Araqfor async
22:05:50Jehan_Incidentally, if you build the Boehm GC for parallel mark and sweep, you can sometimes outperform both the built-in M&S collector and deferred reference counting.
22:06:01Jehan_Pauses are still going to be long for multi-GB heaps.
22:06:10*bcinman joined #nim
22:06:20Jehan_But it's useful for certain kinds of batch processing of data.
22:07:05Araqwhen we decided on this async implementation we had 2 ideas of how to do it
22:07:06OnO_Jehan_: I just wonder if multi GB heaps will be a case for web service
22:07:36Jehan_OnO_: It's what the Azul GC optimizes for, for example.
22:07:45OnO_Jehan_: I don't see why you should handle more than N x CPU cores, where N is not so high constant
22:08:06Araq1. do a continuation passing transformation in the compiler and don't touch the GC
22:08:15Jehan_Depends on what you are doing in your backend.
22:08:16OnO_just let other request wait till I finish what I am doing now
22:08:34Araq2. implement a stack switching primitive and tell the GC a thread can have different stacks
22:08:58*transfuturist joined #nim
22:08:59Araqwe picked (1). in retrospect (2) is likely to be much faster ... ;-)
22:09:23transfuturistdoes the dynlib pragma look up symbols at compile time?
22:09:39Araqtransfuturist: no it does not
22:10:06OnO_Jehan_: true, that can be many requests that will stall on IO in some services.. and can grow stack
22:10:15transfuturistso you can unload and reload the library, call the proc, and it'll use the new library?
22:10:22*polkm quit (Ping timeout: 246 seconds)
22:10:31Araqtransfuturist: yep
22:10:39transfuturistnot what i'm getting...
22:10:43Araqwell with a little codegen patch, it can
22:10:48Jehan_Araq: Well, stack switching might be painful with non-C backends.
22:11:15Jehan_Depending on how C++ compilers implement exceptions, for example.
22:12:44transfuturistAraq: but the pragma has to be given a non-nil LibHandle?
22:13:11Jehan_Also, it's worth keeping in mind that Stackoverflow/Stackexchange runs on some pretty modest hardware and is written in C#.
22:13:13Araqtransfuturist: the pragma doesn't get any libhandles from your code
22:13:43transfuturisti was using symAddr/checkedSymAddr like in the opengl package
22:13:54OnO_or have thread-groups with single GC and GIL?
22:14:23Jehan_There are very few things that you need hyperoptimized code for.
22:14:50transfuturist{.pragma: ogl, dynlib: glGetProc(oglHandle, "0").}
22:15:05transfuturistwhere glGetProc boils down to symAddr
22:16:01Jehan_Speaking of which, with the open-sourcing of Microsoft's .NET implementation, that may become an interesting alternative backend for Nim.
22:17:02Araqtransfuturist: the openGL package uses undocumented DLL loading features and is nothing you should do in your code :P
22:17:07transfuturist>>
22:17:25OnO_Jehan_: honestly I think LLVM would be nicer, at least if you want then to run code on GPU or sthing using LLVM numerous backends
22:17:59Araqnot that much is lost in the C interim step. Nim -> C -> LLVM (clang)
22:18:07Araqvs Nim -> LLVM
22:18:28Araqthe benefits of Nim -> LLVM are overrated
22:18:53transfuturistbut does that mean that since the dynlib pragma uses a library path, it loads the library each time the proc is called?
22:19:14Araqtransfuturist: no, it's loaded once on program startup for you
22:19:20OnO_yeah I know, the only one I can imagine is better native debugging, or maybe handling multiple return values
22:19:25Araqand even the proc calls are resolved at startup
22:19:35transfuturistbut, uh... then i can't load it or unload it at runtime
22:19:40Araqcalling works by calling a global function pointer
22:19:41flaviuAraq: Proper exceptions and devirtualization are lost.
22:20:14Araqflaviu: we do devirt on our own, proper exceptions work with the C++ backend
22:20:24renesacAraq: talking abou the GC/allocator, would something like this be useful for Nim: http://stackoverflow.com/questions/23044153/sized-deallocation-feature-in-memory-management-in-c1y
22:20:25renesac?
22:20:43flaviuAraq: does Nim do speculative devirtualization?
22:20:45renesacthe dealloc funciton don't seem to take a size currently
22:21:03transfuturisthow could hot swapping be implemented, in that case?
22:21:22OnO_Araq: but LLVM would definitely make easier to have interactive REPL
22:21:28Araqtransfuturist: by a codegen patch. not hard.
22:21:43renesacOnO_: people are making do with TinyC
22:22:00AraqOnO_: how so? the problems largely remain the same
22:22:19renesac*TCC
22:22:38flaviuhttp://blogs.msdn.com/b/oldnewthing/archive/2011/09/21/10214405.aspx is interesting.
22:22:42Araqflaviu: no. but then speculative devirt can also be done for function pointers, c++ methods have no advantage afaict
22:22:57Araqrenesac: no benefit.
22:23:00renesacand yeah, "nim i" was implemented with the nim VM, but couldn't handle imports
22:23:14renesacor FFI
22:23:16flaviuAraq: But instead of Nim having it's own VM, it can use the known-correct and fast LLVM VM.
22:23:48Araqflaviu: that's only possible when you have no idea how we use our VM :P
22:25:20Araqhow does LLVM's VM builds Nim's ASTs for consumption of the Nim compiler? that's the primary feature of Nim's VM. and of course little details like that are always happily ignored when you propose yet again the "tried and proven solutions"
22:25:47EXetoCyou and your details :p
22:26:07transfuturistAraq: could you give me a couple more keywords? where is dlsym used?
22:26:27transfuturistlike, cgen?
22:26:40flaviuAraq: Bytes are bytes. The compiler could be run as a library in the VM.
22:28:28flaviuOf course, the LLVM VM does have other issues, like performance.
22:28:45flaviuIIRC Julia has it's own interpreter because LLVM is too slow.
22:29:10transfuturist>known-correct and fast LLVM
22:29:10OnO_you mean LLVM codegen being to slow?
22:29:14transfuturist>too slow
22:29:19Araqtransfuturist: compiler/cgen.nim
22:29:28OnO_because LLVM has no VM ;)
22:29:35EXetoCtransfuturist: yeah, some people will want to do selective loading and querying
22:29:47gokrI would also guess Julia doesn't use LLVM since (again a little guess) its dynamically typed and LLVM doesn't seem too targeted at that.
22:29:57EXetoCactually, you could just omit that call then I think
22:30:00renesacAraq: what was the paper that you based nim's allocator?
22:30:09OnO_gokr: no it is not dynamically typed
22:30:32renesacI remember you linking it to me, but I can't find anymore
22:30:34Araqflaviu: ah I see, so *if* Julia implements its own interpreter that's because of valid reasons, but if Nim does it, it's all wrong because you happen to know Nim's creator.
22:30:39OnO_it is just functions are templates by default that get concretized before generating call instruction
22:30:56transfuturistkek
22:31:03gokrOnO_: Care to elaborate?
22:31:10flaviuAraq: Perhaps Julia's decision is wrong, I don't know enough.
22:31:24Araqyour double standards are so annoying that I'm about to /ignore you.
22:31:59OnO_gokr: if you define method with no types it behaves like a template, it does not emit any code, until it encounters a call with solid type
22:32:25OnO_gokr: but in the end you have several "versions" for a method based on given parameters type
22:32:38OnO_gokr: so it works exactly like in Nim
22:32:45Varriountflaviu: On the subject of that oldnewthing article, Yeah, quite interesting.
22:33:04VarriountIt's one of the few things windows has that linux didn't
22:33:08gokrOnO_: http://stackoverflow.com/questions/28078089/is-julia-dynamically-typed
22:33:19gokrI would argue its dynamically typed.
22:35:03gokrOr just read here: http://docs.julialang.org/en/release-0.3/manual/types/
22:35:59*johnsoft quit (Ping timeout: 265 seconds)
22:36:56Jehan_If there's genuine interest, I can ask my officemate tomorrow, he's pretty deeply invested in Julia.
22:37:38flaviuVarriount: Just wait for kpatch :)
22:37:50gokrJehan_: Its not hard to read the page I pointed at.
22:37:57gokrIts dynamically typed, period.
22:38:13Jehan_gokr: Yeah, but from what I recall, that's not really the story of the implementation.
22:38:29Jehan_Which I think is what people were talking about.
22:38:30OnO_gokr: well... okay, you are right Julia as language is dynamically types, but the execution model uses static typing
22:38:34Varriountflaviu: There's a reason I used the word "didn't"
22:39:03OnO_gokr: I mean machine code gets concretized for particular arguements
22:39:37*johnsoft joined #nim
22:39:44gokrOnO_: But you know, that's what a JIT does.
22:39:45OnO_gokr: so... in many places Julia tend to use static typing, to avoid dynamic paths
22:40:35OnO_gokr: not only JIT, in many places and many Julia libraries you prefer naming types or your method arguments explicitly
22:40:47transfuturistwas the entire point of the dynlib package to provide support to opengl and similar?
22:41:34OnO_gokr: I think Methods section describe it better http://julia.readthedocs.org/en/latest/manual/methods/
22:43:11OnO_so Julia's function are dynamic, where Julia methods are statically typed materializations of these dynamic functions
22:44:19OnO_what is most sexy about Julia is that you can actyally dump machine code of such methods
22:45:43gokrMy guess was that the "type specific" methods was simply a way to help the JIT to be able to generate more efficient code.
22:46:30gokrTheir manualy clearly states only values have types and there is no meaningful concept of a "compile-time type".
22:47:08gmpreussner|workVarriount: i will update the PR when i get home tonight. thanks for taking a look!
22:47:18OnO_but "compile-time" refers to time of compiling script, not the time when final machine code is generated
22:47:44gokrBut anyway, Eliot Miranda who implements the Cog VM for Smalltalk has looked at LLVM and also came to the conclusion that its not really fitting for making a JIT for dynamically typed languages.
22:47:55OnO_http://www.evanmiller.org/why-im-betting-on-julia.html
22:48:27Varriountgmpreussner: What version of Sublime Text do you use?
22:48:30OnO_quite similar to LuaJIT with its tracing compiler
22:48:51OnO_erm... tracing JIT compiler
22:48:55*bjz quit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
22:49:46flaviuHuh, julia might be quite nice for learning assembler.
22:51:08gokrOnO_: Humhum, Julia does use LLVM. I thought someone said it didn't?
22:52:49OnO_gokr: I am bit sleepy, but I think someone said that it has it's own interpreter which at some points generates LLVM then machine code
22:52:56gokrflaviu: Ah, it was you.
22:53:04OnO_but it still needs interpreter to handle dynamic types
22:53:07renesacflaviu: I think I might make a feature request for the nim repl
22:53:09renesacXD
22:53:40onionhammerVarriount what was it you mentioned the other day about syntax
22:54:11gokrOnO_: As I have said all along - its a JIT. That uses LLVM for the final assembly generation.
22:54:23renesacit shouldn't be too difficult to do an objdump on the generated executable for a new function
22:54:59*fowl quit (Quit: Leaving)
22:55:04OnO_gokr: yup
22:55:17*vendethiel quit (Ping timeout: 248 seconds)
22:56:25OnO_renesac: you can do it with most compilers with -c -S -o -, would be easier than translating back from binary
22:56:43renesacindeed
22:58:29OnO_okay guys, I am going sleep, that was great discussion, still lot of new things to learn about Nim... see you tommorow
22:58:46gokrcya
22:58:57*OnO_ quit (Quit: Textual IRC Client: www.textualapp.com)
22:59:05Varriountonionhammer: ST3 is getting new syntax definition format
22:59:48Varriountonionhammer: http://www.sublimetext.com/docs/3/syntax.html
23:00:10Jehan_Varriount: I saw that, too. Can't be worse than the TextMate format. :)
23:00:22Jehan_And I'm saying this is as someone who really likes TextMate.
23:00:54VarriountJehan_: Well, the context mechanism should really help cut down on repetitive regexes
23:01:32Jehan_Varriount: I may have to give Sublime Text a closer look after all.
23:02:45*Mimbus joined #nim
23:03:30VarriountThough, a built-in parsing feature might be better. :/
23:09:42*buMPnet quit (Read error: Connection reset by peer)
23:10:41*buMPnet joined #nim
23:12:03*Matthias247 quit (Read error: Connection reset by peer)
23:28:29gmpreussner|workJehan_: sublime with NimLime is awesome
23:28:53gmpreussner|worki use it on all platforms now
23:29:32Jehan_gmpreussner|work: I believe you, but I'm still heavily invested in Vim.
23:29:44BlaXpiritI'm heavily invested in Kate.
23:30:01Jehan_Oddly enough, one of the major reasons is that on OS X that's one of the ways I can have focus-follows-mouse. :)
23:30:07VarriountAraq: Have you tried Arak? (The drink)
23:31:45Araqhrm ... I don't think so
23:34:01gmpreussner|workBlaXpirit: i stopped using Kate, because their GDB plug-in does not work with Nim (because of the way it communicates with GDB - the author is aware)
23:34:10gmpreussner|workeven then, sublime is a better editor than kate, imho
23:34:20BlaXpiritwhy does it have to be GDB o.o
23:34:30BlaXpiriti mean, why is Kate even supposed to support it
23:34:53BlaXpiriti'm probably missing out.
23:35:32gmpreussner|worki like to step through my programs within the editor :)
23:35:49BlaXpirityup, i'm missing out
23:36:08gmpreussner|workto be fair, i haven't tried it with sublime yet either, but i looked at their code, and i think it will work
23:36:33Jehan_Hmm, does NimLine work with ST2 or do you have to get ST3?
23:36:44Jehan_NimLime*
23:37:23BlaXpiritJehan_, it can't not work with 2
23:37:43gmpreussner|worki'm using 2.0.2
23:37:49BlaXpiritpretty sure it's much older than any alpha version of sublime 3
23:37:58Jehan_I'm honestly not at all familiar with the ST ecosystem, and I know some stuff requires ST3.
23:51:06*TEttinger joined #nim
23:54:39*fungos joined #nim
23:55:42transfuturistAraq: is there more documentation on the compiler source besides http://nim-lang.org/intern.html ?