<< 12-05-2015 >>

00:00:15Jehan_... problem is not …
00:00:20Jehan_I clearly cannot type, either. :)
00:00:28Jehan_Ugh, 2 am.
00:00:48Jehan_And again, you really need to talk to Araq about this, not me. :)
00:01:08Jehan_In the end, I'm just an opinionated guy who doesn't have any more influence on the design of Nim than you. :)
00:01:59filwitthey _are_ named constructors, really.. except they don't allow different return types, true.. but you can always used named constructors for that.. I also want to note, in the sake of fairness, there is a way to use named constructors with generics _almost_ as well as obj constructor syntax.. that is: new(t:type Foo, ...)
00:03:15filwitso you still need to know the name of the constructor you're calling 'new'.. but at least you could enforce a more generic overloading specification instead of adhock naming
00:04:31filwit(this is essentially why I do in my Nim code today).. though I still think overloadable object constructors wins here, by a small margin (you don't have to know the name of the constructor, just the params)
00:06:48filwitwhat** I do... jesus brain, get it together
00:07:18filwitanyways, i'll let you sleep if it's 2am your time :)
00:07:24Jehan_The problem with overloading for object constructors is that it's not what overloading is for.
00:07:43Jehan_overloading is for functions that do essentially the same thing for different types.
00:07:54Jehan_print(x: string) vs. print(x: int), for example.
00:08:16Jehan_Constructors can do vastly different things.
00:08:20filwitnot always, eg: print(f:File, s:string) vs print(f:File, i:int)
00:08:42filwitshould be 'var File'
00:09:18Jehan_filwit: Not sure that's any different from my example in principle? They're still doing the same thing.
00:09:20ddsaaaaaaaafi dont see why we need new constructors
00:09:32ddsaaaaaaaafthe current system is perfect
00:09:47ddsaaaaaaaafjust missing the pragma for uninstanciable outside of the module
00:09:55ddsaaaaaaaafwith the base constructor
00:10:17filwityes that is Jehan_'s proposed solution
00:10:26filwitmine is almost the same but slightly different
00:10:57filwitI feel it has more benefits than just locking Obj Constructors from outside the module, that is what we're debating about
00:11:41renesacfilwit: in your proposal, what would calling the constructor in the module itself do?
00:12:20Jehan_If you want to see what kind of constructor I could agree to, see my "make" macro.
00:12:29filwitit would do the same thing in every module: implicitly invoke the 'create' proc (either before or after allocation, depending on a pragma) if it exists
00:12:36filwitrenesac ^
00:13:06Jehan_I'm still not sure that it would be a good idea, but it'd beat overloading-based constructors or exposing internal ones.
00:14:10renesacok, your proposal eliminates the current object constructor
00:14:14filwitJehan_: I'll take a look, but I'm planning on making overloadable constructors soon (I've already done this, but it was done by allowing types/procs to have the same name, and came with other problems, and needs to be redone)
00:14:21renesaceven the create() proc don't need to call it
00:14:23ddsaaaaaaaafthis is madness
00:14:46Jehan_Well, good luck. :) I'm off to bed. :)
00:15:12*Jehan_ quit (Quit: Leaving)
00:15:18filwitJehan_: when i have more to see, I hope to get your feedback then after you try it out a bit (not that you can't invision my solution.. just it might be better for everyone to be able to play around with a working solution to get a handle one what exactly I'm proposing)
00:15:56filwitJehan_: good night
00:17:38filwitrenesac: I'm unaware of othere's proposals to the solution.. so far I've only really heard "don't allow object constructors outside the module.. or ones marked with a special pragma" which I feel my solution is superior too, but am open to argument of course (though i've been talking about this for a little while tonight, and need to move on soon)
00:18:17renesacI'm not suggesting anything new
00:18:26renesacI was only trying to understand your proposal
00:18:29filwitrenesac: here's a gist of the problems my solution is trying to fix: https://gist.github.com/PhilipWitte/0ca58b9655a6f3fd8ff0
00:18:42renesacyep, I read it
00:19:11renesacyour proposal eliminates the current object constructor, even the create() proc don't neeed to call it
00:19:34ddsaaaaaaaafthe thing is this isnt a 0 cost abstraction your proposing
00:19:36renesacand you re-use the same syntax to call the create proc for the given type
00:19:57ddsaaaaaaaafthe current constructor cost nothing
00:20:07filwiti'm not sure exactly what you mean by "eliminates the current object constructor" renesac.. if anything, my solution extends it's functionality a bit.. I'm not sure I'm reading that correctly
00:20:17renesacthat is what I understood
00:20:20*flaviu quit (Remote host closed the connection)
00:20:33filwitddsaaaaaaaf: my solution is zero overhead
00:20:41*flaviu joined #nim
00:20:57renesacI can't call FileStream(path: x, json: y) anywhere now
00:20:59renesacright?
00:21:10renesacthe original one
00:21:15renesacthat just writes the fields
00:21:29filwityes, because that doesn't properly setup a FileStream (it would cause errors only caught at runtime)
00:21:56filwitsorry, brb
00:22:35renesacok, maybe it is not eliminated
00:23:00renesacif you don't define the "create" proc, then the current object constructor is called?
00:23:15ddsaaaaaaaafthat would be way too much obfuscation imo
00:23:33renesacobfuscation?
00:24:06ddsaaaaaaaafi mean you have to know if the type implements a constructor to know if you are allowed to call the standard constructor witouth worrying about errors
00:24:13ddsaaaaaaaafwith his proposal
00:24:41renesacddsaaaaaaaaf: from what I understood, you can always call the standard constructor
00:24:50renesacand it will do the right thing
00:25:09renesacor rather, you can always use the standard constructor syntax
00:25:10ddsaaaaaaaafhow so
00:25:15renesacbut it may call the create proc
00:25:20ddsaaaaaaaafyeh
00:25:25renesacif such a proc is defined
00:25:59ddsaaaaaaaafso you never know if its a simple constructor or something with complex logic inside of it
00:26:18renesacddsaaaaaaaaf: well, just look at the code of the module
00:26:23renesacbut yeah, you don't
00:26:34*filwit quit (Ping timeout: 256 seconds)
00:26:40ddsaaaaaaaafyeh u have to look for every constructor, you cant read the code easy now
00:26:59renesacon the other hand, if there is a change in the module that requires a complicated constructor
00:27:04ddsaaaaaaaafcurrently you know what the constructor does... gives you a type with values in it
00:27:05renesacnow that change can be made transparently
00:27:40renesaccurrently, I don't think you can do such migration w/o deprecating the whole type
00:27:49ddsaaaaaaaafyes but now you dont know if the underlying data matches the constructor
00:27:57renesacso the best practice is to always avoid the default constructor
00:28:08ldlework+1
00:28:24ddsaaaaaaaafand it works fine
00:28:26*filwit joined #nim
00:28:27*brson quit (Quit: leaving)
00:28:36renesacddsaaaaaaaaf: from the syntax in the filwit gist, you know
00:28:51renesacsee the create proc
00:28:56filwitk back, sorry what did i miss?
00:29:07renesaclook at the log
00:29:13filwityeah getting there
00:29:15*vikaton joined #nim
00:30:11ddsaaaaaaaafimo just call create or some named constructor if you need validation
00:30:20ddsaaaaaaaafno need for a special overloading or whatever
00:30:42ddsaaaaaaaafthe current system is clear and theres never any confusion
00:31:24renesacI agree that the current system is less magic, and that is good
00:31:36ddsaaaaaaaafjust use the current standard with ini and new
00:31:39ddsaaaaaaaafinit*
00:31:45renesacbut you also can't change your mind after you decide to use the normal constructor
00:32:03filwitthe current destructor system uses no more magic than the constructor system i'm proposing
00:32:04ddsaaaaaaaafif you think you need validation or invalid states dont use it
00:32:06renesacas the interface for your module
00:32:24ddsaaaaaaaafjust pragma the default constructor with .noinit.
00:32:25ddsaaaaaaaafor whatever
00:32:27ddsaaaaaaaafi mean the type
00:32:43ddsaaaaaaaafthat way you always have to call a named constructor and voila!
00:33:21renesacI'm not sure if I like the constructor syntax at all, actually
00:33:38filwitthis isn't better than my solution, where we get to keep Object Constructor syntax as a unaversal and expected way to construct Objects (including both ref and non-ref ones)
00:33:39renesacI would preffer a normal proc with named parameters
00:33:55filwitrenesac: that isn't as good for generic code
00:34:05renesaclike FileStream(path = x, json = blah)
00:35:04filwiter.. actually i don't know what you're in favor of.. by "it's not as good for generic code" I mean "named procedures as constructors" like 'initPerson'
00:35:08renesacfilwit: well, what I'm saying is that I don't like the current way
00:35:24filwitrenesac: yeah just realized that's what you meant, sorry
00:35:49ddsaaaaaaaafi like the current way
00:36:12renesacbut it would break backwards compatibility to make constructors acccept '=' instead of ":"
00:36:27renesacddsaaaaaaaaf: I was talking about "=" vs ":" now
00:36:37ddsaaaaaaaafo
00:36:38ddsaaaaaaaafok
00:36:38filwitnot really, thought this certainly would be a breaking change
00:36:39renesacthe special syntax constructors have
00:36:42filwitthough*
00:36:43renesacI'm not sure why
00:37:01filwitcurrently T(x = y) is invalid, so it's not sued anywhere
00:37:03ddsaaaaaaaafimo i like it, you know its a constructor and all it does is set memory
00:37:07ddsaaaaaaaafdoesnt do anything else
00:37:10filwitso nothing would break there..
00:37:33filwitddsaaaaaaf: have you see how destructors work?
00:37:41ddsaaaaaaaafso if you just use T() you know all your memory is inizialized as empty
00:37:52ddsaaaaaaaafnew(T,finalizer)
00:37:57ddsaaaaaaaafthats how they work
00:38:01ddsaaaaaaaafthe rest might be removed
00:38:06ddsaaaaaaaaffrom what ive seen
00:38:10filwitexcept empty memory is often invalid
00:38:11ddsaaaaaaaafits setting per instance
00:38:25filwitthis is the entire problem we're trying to fix
00:38:34ldleworkI think I'd agree with ddsaaaaaaaaf if you got a 'zeroed' object.
00:38:46ddsaaaaaaaafno overhead
00:38:47ldleworkwhatever that is
00:38:50ddsaaaaaaaafno checks nothing
00:39:08ddsaaaaaaaafif you dont want to expose it dont, as i said with a pragma
00:39:11filwitddsaaaaaf: my system has no overhead either
00:39:28renesac^
00:39:33ddsaaaaaaaafyou might introduce some
00:39:34ddsaaaaaaaafat anytime
00:39:43ddsaaaaaaaafif im outside of your module
00:39:44ddsaaaaaaaafi dont know
00:39:47ddsaaaaaaaafand i cant enforce it
00:39:53filwitand my system could use a {.noAlloc.} pragma to overload the allocation process as well, which is very useful for memory pools, etc
00:40:29filwitbut that's not a point in it's favor i suppose (named constructors can do that too)
00:41:49filwitbut I can do that "transparently", eg, the end user always has a universal way to "create" a type, eg: T().. it may fail (at compile-time) and say he needs to provide the correct parameters, but it's still a universal syntax pattern every user knows exactly how to use, and the name implies the return type, so you know at-a-glance what you're getting
00:41:50renesacddsaaaaaaaaf: you are against the possibility of introducing overhead silently, you think it should break your compilation to warn you, right?
00:43:02filwitplus, and I've said this a few times, 'newPerson()' is not as good for generic code as 'Person()'
00:43:31filwitsince often libs will be un-idiomatic and use 'makePerson()' or something, while in my system they cannot
00:43:35renesacfilwit: the equivalent wouldn't be 'new Person()' ?
00:44:43filwitrenesac: not sure exactly what you're asking, but you could use 'proc new(t:type Person)' as a slightly better way to use named procs in generic code (overload by typedesc).. but it's still not as ideal as tying the constructor to the type-name directly
00:45:31renesachow do you differentiate between newPerson() and initPerson()?
00:45:39ddsaaaaaaaafi like to think of object first and foremost as structs, not some crazy oop monsters
00:45:50ddsaaaaaaaafand i want them to act as such
00:46:54renesacthe best thing about C is that you can usually see quite well what every line you write will translate in assembly
00:47:13renesacof course, functions can do arbitray things, but except by that
00:47:32*TEttinger joined #nim
00:47:36filwitrenesac: that's not necessarily a good thing in all cases, and often not the case in existing Nim code (eg, procs vs template calls are identical)
00:47:49ddsaaaaaaaafthe current constructors matches the memory layout 1:1
00:47:56filwitso does mine!
00:48:16filwitthese aren't arguments against my system.. it's not some OOP monster
00:48:30ddsaaaaaaaafits a proc you can do whatever you want to do it in
00:48:38ddsaaaaaaaaflook
00:49:02ldleworkddsaaaaaaaaf: why do you want non-initialized instances of your types?
00:49:20filwitthe only caveat I can see with it is if you did "from lib import T and something" (where it 'create' proc doesn't get imported, so in that module not "proper" way to construct a T is found on T() )
00:49:20ddsaaaaaaaafi dont want uninitialized instance
00:49:22renesacddsaaaaaaaaf: you haven't answered my question
00:49:26ddsaaaaaaaafi want to be able to get one if i want
00:49:27renesacddsaaaaaaaaf: you are against the possibility of introducing overhead silently, you think it should break your compilation to warn you, right?
00:49:58ldleworkddsaaaaaaaaf: I'm just wondering what some potential usecases might be
00:50:39renesacbecause you were defending the right of the library writer forbid you from getting one, using a pragma
00:50:45ddsaaaaaaaafyes
00:51:10ddsaaaaaaaafi want to know what gets initialized
00:51:15filwitddsaaaaaaf: you should be forced to go out-of-your way (eg, use cast[]()) to get an "empty" object when the API wants you to use properly constructed ones.. my solution just makes those situations feel very similar to the cases you can just use object constructors to make empty objects (eg, there's not 'create' proc declared)
00:51:16ddsaaaaaaaafnot some magic
00:51:22ldleworkddsaaaaaaaaf: so wont you have to look at some function in the module?
00:51:25ldleworkthe named constructor?
00:51:34ldleworkhow's that different really?
00:51:36ldleworkday to day.
00:52:14ddsaaaaaaaafwith the new system you dont know if you have to look
00:52:20ddsaaaaaaaafwith the current system you know what happens
00:52:38ddsaaaaaaaafthe new system could add +1 to your X param if it wanted to
00:52:43ldleworkyou know to look, when you care
00:52:45ddsaaaaaaaafor whatever it wants
00:53:04ldleworkddsaaaaaaaaf: so could a named constructor
00:53:06ddsaaaaaaaafyoud always have to look
00:53:09ddsaaaaaaaafyes
00:53:12ddsaaaaaaaafthats what im saying
00:53:21filwitmy solution makes leaves object constructors as a "useful default" (much like vars in Nim) where if you don't define a 'create' proc, objects can still be created with T(), and they're 'deafulted'.. but i just give you the ability to override that behavior if your API needs it.. without _much_ mental overhead from the programmer using your API
00:53:24ldleworkit seems in the point you're making, they are equivalent
00:53:25ddsaaaaaaaafif you use a named constructor you know you can get special initialization
00:53:28ldleworkbut I'm probbly just confused
00:53:31ddsaaaaaaaafno they arent
00:53:44ddsaaaaaaaafyou couldnt diferenciate between pure memory allocation
00:53:47ddsaaaaaaaafand initialization
00:53:50ldleworkddsaaaaaaaaf: for all intents and purposes of what I have to know, when I have to know it, and so on
00:54:16ddsaaaaaaaafyour constructor could fetch something from a database or whatever
00:54:23ldleworkAs a nim programmer I will end up using named constructors or object constructors all over the play
00:54:24ddsaaaaaaaafor never initialize something
00:54:26ldleworkand in both cases
00:54:31ldleworkthey will do stuff I don't know about
00:54:32ddsaaaaaaaafyes
00:54:33ldleworkuntil I go look
00:54:35ddsaaaaaaaafbut you arent forced to
00:54:39ddsaaaaaaaafand its explicit
00:54:57ldleworkddsaaaaaaaaf: I'm forced to by right of I'm using library code written with types that have constructors provided for me
00:55:00ldleworkand until I go look
00:55:03ldleworkat either
00:55:05ldleworkI wont know
00:55:14ldleworkthe case where I just want an uninitialized instance is rare
00:55:16renesacI can see the value of what ddsaaaaaaaaf is saying, but I also like the standardization from filwit approach
00:55:20renesacit is a trade-off
00:55:29ldleworkthe convienence far outweighs this very miniscule advantage
00:55:36ddsaaaaaaaafwhat convenence
00:55:46ddsaaaaaaaafto not have to look for the named constructor?
00:55:46ldleworkof knowing how to instantiate a type no matter what
00:55:53ddsaaaaaaaaflol
00:55:55filwitddsaaaaaaaaf: the main point of this argument is you _dont_ want to be able to easily create 'empty' objects with T().. you want the compiler (at compile-time) to tell you you need to constructor something through a specific procedure (or, in the case of my proposal, with a specific set of parameters)
00:56:38ddsaaaaaaaafdont export your basic type constructor with a pragma if you dont want to expose it
00:56:46ddsaaaaaaaafdont magically do it
00:56:56filwitddsaaaaaaaaf: you can still see exactly where 'empty' objects are created in the code cause it'll look something like "newBlank(T, ...)"
00:56:59ddsaaaaaaaafby do it i mean initialize
00:57:35filwitddsaaaaaaaaf: yes, that's one solution, but my solution accomplishes that same benefit, but also has some other pros..
00:57:43ldleworkIt just seems hardly magical
00:57:51ddsaaaaaaaaflol sure
00:57:53ldleworkCouldn't there be a way to get some allocation for a type
00:58:03ddsaaaaaaaafyes there is
00:58:03filwitit's less magical that what is already being done with destructors!
00:58:05ddsaaaaaaaafT()
00:58:12ldleworkso in the rare cases you needed an allocated but uninitialized form of the type
00:58:14ddsaaaaaaaafi dont use destructor
00:58:19ddsaaaaaaaafi use finalizers per instance
00:58:20renesacwell, I do favour the abstraction side more, but I would be fine with the current system + pragma too
00:58:39ldleworkno one likes the golang makeAThing
00:58:44ddsaaaaaaaafnew(T, finalizer) is more versatile
00:58:53ddsaaaaaaaafthan a destructor imo
00:58:59ddsaaaaaaaafper type
00:59:05renesacthough I think the constructor should be hidden by default from other modules, but backwards compatibility...
00:59:20filwitokay, but I'm just saying "magic" isn't exactly a "oh no, it's so confusing compared to the rest of Nim" argument
00:59:47ddsaaaaaaaafim not sure destructor are to stay
00:59:51ddsaaaaaaaafif i read it correctly
01:00:05filwitthey may not, not sure of the situation there
01:00:06ddsaaaaaaaafand i prefer the new(T,finalizer) as i said
01:00:16ddsaaaaaaaafits explicit etc
01:00:16filwiteither way, implicitly invoking a proc is hardly magical
01:00:34ddsaaaaaaaafexplicit is better
01:00:56filwitnot necessarily, as i've stated before, not with generic code
01:01:03filwitand not even with user code
01:01:46filwitoften, it's better to know exactly what syntax to use to "create an object".. you can't do that with 'newPerson" always.. at least, you can't _know_ that's correct.. you have to look at the libary you're using
01:02:57filwitmy system makes it so you know exactly what syntax to create an object, universally. The exact implementation of that is what needs a bit more control.. but at the end of the day, to make user-code easy to read and write, I think T() wins
01:03:00ddsaaaaaaaafyou still have to look at it anyway to know what constructor there is
01:03:04ddsaaaaaaaafwith what params
01:03:04ddsaaaaaaaafetc
01:03:18filwitnot if the params are listed in the compiler error message
01:03:22filwitwhich is my plan
01:03:41filwitso it says, You can't call T() with empty params, here's what you can use: T(path:string), etc
01:04:15ddsaaaaaaaafyou could still do the same with pragmas
01:04:20ddsaaaaaaaaf.constructor.
01:04:22ddsaaaaaaaafdoes nothing
01:04:24filwitthe alternative is: you can't use T().. lookup some function in the module that could construct the type you want.. sure it could list all procs that return a T, but that could get noisy fast
01:04:48filwiti'm not sure how markign a proc as .constructor. is better than what I'm suggesting
01:05:02filwitand it's still not better for generic code
01:05:08ddsaaaaaaaafyours do something, mine would just to mark it as such
01:05:12ddsaaaaaaaafyours would call it
01:05:40ddsaaaaaaaafanyway
01:05:41filwitwell, to avoid confusion, what exactly do you mean by "mark it with .constructor.?"
01:06:07ddsaaaaaaaafthat wouldnt replace the default type constructor we have now
01:06:25ddsaaaaaaaafit would do nothing but work in conjunction with .noinstantiate. or something on the type
01:06:26*Demon_Fox joined #nim
01:06:37ddsaaaaaaaafto help with error messages
01:06:46filwitso basically exactly what I'm saying, only with a pragma vs a proc name to distinguish constructor functionality?
01:07:12ddsaaaaaaaafi mean exactly as we have now
01:07:30ddsaaaaaaaafbut with a .noinstantiate. on the type to not export the default constructor
01:07:45filwitbtw, I was always planning on doing "proc create(f:var Foo) {.noAlloc.}" as a way for the constructor to not defaultly allocate/empty and object (leaving the 'create' to handle that)
01:07:48ddsaaaaaaaafthe .constructor. is just to help to find the constructors
01:08:29filwitokay.. but why do it that way? it's just as confusing and no one will mark their procs as .constructor. half the time
01:08:50ddsaaaaaaaafi dont see why we need to introduce any new contruction magic
01:09:14ddsaaaaaaaafthe current system just need a way to not expose the default constructor and thats it
01:09:19filwitcalling it 'magic' is just a way to demonize the system.. it's pros stand as they are
01:09:34ddsaaaaaaaafits pros are for the library makers
01:09:37ddsaaaaaaaafnot for the users
01:09:46filwitno, i disagree
01:10:11filwitlike i've said, having a universal way to construct and object is better for both user-code and generic user code.. do you have an argument against that?
01:10:20ddsaaaaaaaafwe have a universal way
01:10:25ddsaaaaaaaafT(xxxx)
01:10:56ddsaaaaaaaafif you need state vericiation or something else you can to it in a name constructor
01:11:09ddsaaaaaaaafnamed*
01:11:14ddsaaaaaaaafverification*
01:11:23filwitalmost always you need this.. T() as it stands today is only useful for the most basic of types
01:11:39ddsaaaaaaaafas most types are
01:11:56ddsaaaaaaaafand should be
01:12:22filwitand generic code often needs a way to construct and validate at type, universally.. if you do validation through a named proc, you have the same problem (the validation proc name can be different with each type)
01:12:28ldleworkddsaaaaaaaaf: what are some of your favorite languages?
01:12:56ddsaaaaaaaaftoo many
01:13:11ldleworkwhat have you been writing lately?
01:13:22ddsaaaaaaaafhaskell
01:13:28ddsaaaaaaaafand c
01:13:30ddsaaaaaaaafand nim
01:13:37ddsaaaaaaaafphp
01:13:38ddsaaaaaaaafjavascript
01:13:42ddsaaaaaaaaflol
01:13:54ddsaaaaaaaafi write in those on a daily basis
01:14:30ldleworkalright
01:16:29ddsaaaaaaaafand im not a fan of oop
01:16:42*Jesin quit (Quit: Leaving)
01:21:41ddsaaaaaaaafi just dont see why we need to fix something that isnt broken, the current system is explicit and flexible, the only thing needed is a way to hide the default type constructor if need be.
01:21:50ddsaaaaaaaafand on that, im going to bed
01:23:24*xificurC quit (Remote host closed the connection)
01:25:15filwitjust because something works, doesn't mean it can't be improved. The pros for my solution I feel outweigh the cons, and offer more than just limiting Object Constructor syntax in general (which i feel is an attractive syntax in general, and useful for generic code). The current solution _is_ broken, and we're discussing possible solution. And on that note, good night and thanks for you input. I also need to eat some dinner now, so bbl.
01:25:59ddsaaaaaaaafand i feel the cons outweigght the pro
01:26:44filwiti'll be making a pros/cons list between the two solutions soon, will look forward to hearing your input on that list when I have it
01:27:02filwitanyways, really do need to eat now. later
01:27:05*xificurC_ joined #nim
01:27:06ddsaaaaaaaaflater
01:30:08*gsingh93 quit (Ping timeout: 265 seconds)
01:38:37ddsaaaaaaaafand i dont see how that would work with ADTs
01:39:21ddsaaaaaaaafi prefer to encode most validation into the type system like in haskell, and if you really need a complex constructor name it
01:42:27*Jesin joined #nim
01:51:43*dddddd quit (Ping timeout: 255 seconds)
01:54:36dtscodecan someone point me to the irc module page? i cant seem to find it
01:55:19*BitPuffin|osx quit (Ping timeout: 255 seconds)
02:11:51*darkf joined #nim
02:20:15onionhammerVarriount noice ;)
02:29:21*gsingh93 joined #nim
02:30:26notfowldtscode: nimble package irc
02:30:36dtscodethanks
02:30:48*dalarmmst joined #nim
02:30:55dtscodenow i just need to find a good way to extract links from a string...
02:37:28*dalarmmst quit (Ping timeout: 256 seconds)
02:49:16*ddl_smurf quit (Quit: ddl_smurf)
03:11:40reactormonkdtscode, pretty sure there's a regex for that somewhere
03:12:42dtscodereactormonk: im staying away from regexs. i found a cheap solution
03:14:33dtscode(cheap as in "that was a cheap trick", not cheap as in resource wise)
03:16:52*pigmej quit (Ping timeout: 272 seconds)
03:17:49*profan quit (Ping timeout: 264 seconds)
03:23:28*pigmej joined #nim
03:33:27*vikaton quit (Quit: Connection closed for inactivity)
03:40:14Xein nim, if I have a cstring, how do I get that to be a string?
03:47:11dtscodedoes anyone have a good example of using httpclient to send data over post?
03:48:11dtscodeactually nmd. ill use the curl lib
03:49:38dtscodeactually nmd i need to use http client
03:58:27notfowl$ xe
03:58:36Xederp
04:01:43*endragor joined #nim
04:05:52*gsingh93 quit (Ping timeout: 244 seconds)
04:07:58*endragor quit (Remote host closed the connection)
04:08:55dtscodehttp://forum.nim-lang.org/t/1216/1#7518
04:09:02dtscodeif anyone is interested
04:10:03Quoradtscode: you probably want to use the syncronous IRC implementation
04:10:26dtscodeQuora: eh
04:11:37Quorahttps://github.com/nim-lang/irc/blob/master/src/irc.nim#L464-L475
04:11:52Quorawhat you are doing looks like it is in the use case for the synchronous implementation :P
04:12:25dtscodeQuora: thats not the issue though
04:13:10*filwit quit (Quit: Leaving)
04:14:54*endragor joined #nim
04:15:54*endragor quit (Remote host closed the connection)
04:23:52*endragor joined #nim
04:26:12*dalarmmst joined #nim
04:39:29*wepy joined #nim
04:39:31wepyoi
04:39:44wepywhen you build nim from source..
04:39:51wepyafter ./kock boot -d:release
04:40:01wepywhat do you do/where is the compiler?
04:40:35*dalarmmst quit (Ping timeout: 256 seconds)
04:50:24ddsaaaaaaaafin the bin dir probably
04:51:11ddsaaaaaaaafadd the bin dir to your path and voila , i guess
04:52:36wepywhat was the point of the koch -d:release step.. bin/nim was already there?
04:53:04wepybtw, is nim any good for CGI?
04:58:38*gsingh93 joined #nim
05:17:28wepycan you compile a static nim binary?
05:19:07wepynm got it
05:19:09*wepy quit (Quit: leaving)
05:33:19*dalarmmst joined #nim
05:43:19*gsingh93 quit (Ping timeout: 272 seconds)
05:49:09*zahary1 quit (Ping timeout: 256 seconds)
05:50:52*zahary joined #nim
05:55:28transfuturist>./kock
05:55:30transfuturistkek
06:06:58*yglukhov___ joined #nim
06:07:05*Kingsquee quit (Read error: Connection reset by peer)
06:07:17*pigmej quit (Ping timeout: 256 seconds)
06:07:27*Kingsquee joined #nim
06:09:46*pigmej joined #nim
06:11:16*yglukhov___ quit (Ping timeout: 240 seconds)
06:27:18*BlaXpirit joined #nim
06:27:28*davidhq joined #nim
06:30:08*bjz joined #nim
06:33:22*yglukhov___ joined #nim
06:38:01*yglukhov___ quit (Ping timeout: 265 seconds)
06:40:01*JoshuaT joined #nim
06:40:39*JoshuaT quit (Max SendQ exceeded)
06:42:06*JoshuaT joined #nim
06:48:10*Andris_zbx joined #nim
06:57:54*milosn quit (Ping timeout: 264 seconds)
06:58:19*milosn joined #nim
07:03:59*transfuturist quit (Ping timeout: 245 seconds)
07:04:45*endragor_ joined #nim
07:04:48*JoshuaT quit (Quit: My Mac has gone to sleep. ZZZzzz…)
07:08:40*endragor quit (Ping timeout: 272 seconds)
07:11:49*OnwardEuler quit (Read error: Connection reset by peer)
07:12:22*Ven joined #nim
07:13:06*gokr_ joined #nim
07:16:16*endragor_ quit (Remote host closed the connection)
07:18:46*Ven quit (Quit: My MacBook has gone to sleep. ZZZzzz…)
07:24:55*d3m1gd joined #nim
07:28:30*bjz quit (Read error: Connection reset by peer)
07:29:13*bjz joined #nim
07:29:22*yglukhov___ joined #nim
07:30:02*Ven joined #nim
07:31:12*Trustable joined #nim
07:41:08*xificurC_ quit (Quit: WeeChat 1.1.1)
07:41:29*xificurC joined #nim
07:47:24*davidhq quit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
07:48:50*davidhq joined #nim
07:51:04*Ven quit (Ping timeout: 245 seconds)
07:56:29*miraculix joined #nim
07:59:49*ddl_smurf joined #nim
08:00:49*coffeepot joined #nim
08:01:48*datanoise quit (Ping timeout: 276 seconds)
08:04:52*endragor joined #nim
08:24:46*Ven joined #nim
08:26:29*gokr_ quit (Ping timeout: 245 seconds)
08:27:39*gokr_ joined #nim
08:29:21*bjz quit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
08:37:22*Ven quit (Read error: Connection reset by peer)
08:42:39*BlaXpirit quit (Quit: Quit Konversation)
08:42:40*gokr_ quit (Read error: Connection reset by peer)
08:48:48*Ven joined #nim
08:53:04*davidhq quit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
08:57:53*filwit joined #nim
08:58:05*datanoise joined #nim
09:03:38*filwit quit (Quit: Leaving)
09:06:43*miraculix quit (Remote host closed the connection)
09:06:57*bjz joined #nim
09:14:32*OnO joined #nim
09:16:36*d3m1gd quit (Ping timeout: 272 seconds)
09:16:50*Ven quit (Quit: My MacBook has gone to sleep. ZZZzzz…)
09:19:34*Ven joined #nim
09:20:55*bjz quit (Ping timeout: 252 seconds)
09:22:14*wan quit (Quit: WeeChat 1.1.1)
09:23:12*datanoise quit (Ping timeout: 256 seconds)
09:28:44*filwit joined #nim
09:29:43*d3m1gd joined #nim
09:37:30*Ven quit (Ping timeout: 272 seconds)
09:43:25dom96Quora: dtscode: nope, he needs async IRC.
09:43:59dtscodedom96: i figured. thanks
09:49:25*Ven joined #nim
09:49:34def-dtscode: I did use this to rename all mentions of Nimrod to Nim on Rosetta Code, maybe it helps: https://github.com/def-/nim-unsorted/blob/master/rcrename.nim
09:50:05dtscodethanks def-. Ill have to take a look in the morning.
09:50:16*bjz joined #nim
10:06:03*davidhq joined #nim
10:10:41*TEttinger quit (Ping timeout: 265 seconds)
10:28:50*filwit quit (Remote host closed the connection)
10:44:38*Ven quit (Read error: Connection reset by peer)
10:45:45*Ven joined #nim
10:45:46*dddddd joined #nim
10:46:38*don1731 joined #nim
10:46:44*don1731 left #nim (#nim)
10:50:52*OnO quit (Quit: My iMac has gone to sleep. ZZZzzz…)
10:51:58*Ven quit (Read error: Connection reset by peer)
10:55:56*Kingsquee quit (Quit: Konversation terminated!)
10:58:42*Ven joined #nim
11:09:36*bluenote joined #nim
11:11:13*repax quit (Read error: Connection reset by peer)
11:23:27*cvi joined #nim
11:25:57*ingsoc joined #nim
11:52:30*cvi quit (Ping timeout: 264 seconds)
11:59:17*cvi joined #nim
12:03:20*datanoise joined #nim
12:03:34*cvi quit (Ping timeout: 245 seconds)
12:05:24*cvi joined #nim
12:08:15*datanoise quit (Ping timeout: 256 seconds)
12:19:05*Ven quit (Quit: My MacBook has gone to sleep. ZZZzzz…)
12:23:33*Ven joined #nim
12:25:46*milosn quit (Quit: leaving)
12:54:08*Strikecarl joined #nim
12:55:19StrikecarlGuys, i made a Fibonacci sequence, anything i can improve? http://pastebin.com/raw.php?i=ibZRqHsU
12:56:05StrikecarlShortening it atm. as 'sum' is unnecesary
12:57:36*xet7 joined #nim
12:59:06*vikaton joined #nim
13:04:34*davidhq quit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
13:06:14pigmejStrikecarl: you can countUp instead of this while
13:06:16pigmejthen one line less
13:06:36Strikecarlwith a 'for' loop?
13:06:44pigmejreactormonk: I *should* have time this week for epc + company ;/
13:06:48pigmejStrikecarl: yup
13:10:02Strikecarluh
13:10:03Strikecarl"'sum' cannot be passed to a procvar"
13:10:15Strikecarlreplaced the while stuff with for times in countup(1, x):
13:14:35Strikecarlhttp://pastebin.com/raw.php?i=1fMLZ3xS error = "'sum' cannot be passed to a procvar"
13:18:52*gokr_ joined #nim
13:21:49*BlaXpirit joined #nim
13:30:31*BitPuffin joined #nim
13:31:50*bjz quit (Excess Flood)
13:32:28*bjz joined #nim
13:35:03*gokr_ quit (Remote host closed the connection)
13:35:42*gokr_ joined #nim
13:36:19*Strikecarl quit (Quit: http://www.kiwiirc.com/ - A hand crafted IRC client)
13:38:18*Strikecarl joined #nim
13:46:43*datanoise joined #nim
13:47:32reactormonkpigmej, got it kinda working, but nimsuggest is still bugged. https://github.com/Araq/Nim/issues/2694
13:49:40reactormonkput the code here: https://github.com/reactormonk/nim-mode/tree/epc
13:51:59pigmejreactormonk: yeah I had similar problems, I asked Araq what's the main file in nimsuggest
13:52:06pigmejand he had no clue
13:52:10pigmej;d
13:52:46pigmejreactormonk: afair when I played with it the bests results were with empty main file
13:53:26*gokr_ quit (Quit: IRC for Sailfish 0.9)
13:53:28reactormonkpigmej, so got an idea what to put in there for the compiler?
13:54:28*darkf quit (Quit: Leaving)
13:54:59pigmejno idea at all
13:55:21pigmejaporia puts 'opened file' as main file
13:55:38reactormonkhrm
13:55:42pigmej(afair the first one where completion were triggered)
13:56:03reactormonkI try to use the main project file
13:58:11reactormonkpigmej, the auto-identation is currently kinda broken - if you want you poke the compiler to give you the expected identation
13:59:15pigmejautoindent in emacs rarely works ;p
13:59:51reactormonkthat's why I wanted to poke the compiler for it
14:00:42*endragor_ joined #nim
14:00:59pigmejah
14:01:54*endragor quit (Ping timeout: 276 seconds)
14:03:38*the9to5 joined #nim
14:03:57reactormonkI would say you could tinker something with the lexer... wanna try it?
14:04:47pigmejwhat has indenter to do with company ?
14:05:45pigmejI mean, aren't those 2 separate things /
14:05:46pigmej?
14:06:48reactormonkyup, separate. But I already have the company part kinda running :-)
14:06:51pigmejreactormonk: hmm, have you checked aporia ?
14:07:01pigmejthat autocomplete in aporia ?
14:07:08pigmejmabye there are some undocummented hacks;D
14:07:14pigmejmaybe*
14:07:29reactormonklemme see
14:09:31*ddl_smurf quit (Quit: ddl_smurf)
14:11:28reactormonkpigmej, I only see projectFile, I dunno which one that actually is
14:12:44pigmejtoggle completion
14:14:27reactormonkhuh?
14:14:54pigmejhave you opened aporia ?
14:15:37pigmejsome recent version ? then enable that completion in options and hmm ctrl + tab or something it will spawn nimsuggest automaticaly, with AFAIR opened file as projectFile
14:16:01pigmejand as I checked, it was not stopping giving some suggestions
14:16:16pigmejso I suppose (maybe wrongly?) that there is some hack / workaround or something ;/
14:16:35reactormonkcan't compile it, can't find glib2
14:16:53pigmejwhat distro?
14:17:05reactormonkyeah, it works for the current file. Does it also work inside the compiler?
14:17:10pigmejhmm
14:17:18reactormonkaporia.nim(11, 8) Error: cannot open 'glib2'
14:17:18pigmejwhat do you mean inside compiler?
14:17:33pigmejin compiler path?
14:17:40reactormonkinside the nim compiler.
14:17:49reactormonk0 core/glib2 2.44.0-1 [installed]
14:18:15pigmejI don't have nim compiler on this computer, but I can check in the evening, because I don't remember ;)
14:18:44pigmejreactormonk: it's trunk aporia ?
14:19:01reactormonkyup
14:19:12reactormonkpigmej, just clone it
14:19:32pigmejI don't have nim compille at all ;/
14:20:22*Ven quit (Quit: My MacBook has gone to sleep. ZZZzzz…)
14:20:30pigmejalso last time when I tried to clone from github it took 2hours
14:20:55reactormonkyeah, we fixed that
14:21:06*Strikecarl quit (Quit: http://www.kiwiirc.com/ - A hand crafted IRC client)
14:21:17reactormonkjust open a file inside the compiler with aporia
14:21:38pigmejoh finally github works
14:25:10pigmejreactormonk: compiling nim
14:27:50*JoshuaT joined #nim
14:28:21reactormonkpigmej, no real need for that, just need to see if autocomplete insiside the compiler source works
14:31:20pigmejreactormonk: I don't have nim at all there
14:31:27reactormonkhm.
14:31:29reactormonkok.
14:31:36pigmejbut It just compiled :)
14:31:37pigmejso
14:34:05reactormonkcan you reproduce my issue?
14:34:39pigmejinstalling aporia;)
14:36:20*Ven joined #nim
14:36:40pigmejok what file should I open
14:37:09*MyMind joined #nim
14:37:15reactormonknot suggest.nim
14:37:23reactormonklet's say compiler/ast.nim
14:37:29*Ven quit (Read error: Connection reset by peer)
14:38:50reactormonkjust add a random string somwhere in a proc "foo".<autocomplete>
14:39:41reactormonk... and hit complete a few times
14:39:54pigmejcompiling nimsuggest ...
14:41:30pigmejalwyas works
14:41:32pigmejalways*
14:41:46pigmejtested like 10 times
14:41:52pigmejsuggest is spawned like: Nim/bin/nimsuggest --port:6000 /tmp/aporia/suggest/ast.nim
14:42:02reactormonkyargh
14:42:11reactormonkdoes it work in nim.nim too?
14:42:19*cvi quit (Quit: leaving)
14:42:38pigmejnope
14:42:43pigmejsecond complete crashes
14:42:57pigmejbut on ast it's fine
14:43:16reactormonkhum. I would like it to work on nim.nim
14:43:26pigmej;d
14:43:28reactormonkmind testing a few other files? also suggest.nim, because that one's included?
14:44:25pigmejhmm
14:44:31pigmejit seems that it works always on opened fine
14:44:34pigmejnever on other
14:44:57*Ven joined #nim
14:45:09reactormonkso it does work on nim.nim?
14:45:40reactormonk... if you restart aporia
14:46:29pigmejyes
14:46:36pigmejONLY if it's the opened file
14:46:57reactormonkwell, fuck
14:47:03pigmejI mean, it works for nim.nim ONLY if that was the file where the completion was triggered at first
14:47:09pigmejquite sucky ;/
14:47:22reactormonkso I need one completion process per buffer? each of those wants like 200MB
14:47:45reactormonkeven ensime wants less than that
14:47:54pigmejwhen I talked with Araq like month ago
14:48:04pigmejhe said that nimsuggest SHOULD be able to handle one completion per project
14:48:31reactormonkit apparently doesn't
14:48:36pigmejyeah
14:49:02pigmejweird
14:50:29*miraculix joined #nim
14:52:37pigmejreactormonk: one completor per buffer sounds very strsange
14:53:56reactormonkyup
14:55:41*arnetheduck quit (Ping timeout: 252 seconds)
14:58:41reactormonkwanna go dig for it?
14:58:54pigmejwriting reproduce steps with aporia in your issue
14:59:25*miraculix quit (Remote host closed the connection)
15:00:28reactormonkhttps://github.com/Araq/Nim/issues/2694
15:00:35*davidhq joined #nim
15:00:39reactormonkit's a nimsuggest issue, not aporia
15:01:44pigmejyaeh
15:01:54pigmejbut aporia uses nimsuggest with 'recommended' way
15:02:05pigmejand Araq said if it not works +> check with aporia
15:02:42*TEttinger joined #nim
15:03:24synthmeatanyone likes any color variant of the following as nim logo? https://www.dropbox.com/s/n1sikkkwz9254gm/Screenshot%202015-05-12%2017.02.24.png?dl=0
15:04:07r-kuwhatever that is its weird
15:04:22reactormonkpigmej, hm, ok.
15:04:54reactormonksynthmeat, a new logo?
15:04:55synthmeatr-ku: yeah, have about 20 variants around to flesh out, this is the first
15:05:17synthmeatreactormonk: i'm no way associated with the design of anything nim, just playing with it
15:05:31synthmeatthe name is interesting for logotype play
15:06:15reactormonksynthmeat, ah, feel free to keep going, we have our share of haters here, just ignore them
15:06:28*Andris_zbx quit (Remote host closed the connection)
15:06:43synthmeatreactormonk: oh, i don't mind at all. plenty of feedback to parse out of haters too
15:06:54reactormonksynthmeat, for colors, maybe go with one or two from http://nim-lang.org/ ?
15:06:55synthmeati don't like it much either, it's too playful in shape and color
15:07:43reactormonkthe orange or the blue... just call it brand recognition :-)
15:08:29synthmeatyou mean, like python? :)
15:09:19reactormonkyup... didn't even see the similarity of the colors
15:10:35*ddl_smurf joined #nim
15:11:38*the9to5 quit ()
15:14:29reactormonkpigmej, ah neat, thanks
15:15:43synthmeatwhat programming language has the best logo, in your oppinion?
15:15:59synthmeati like haskell's very much
15:16:31synthmeatpython is pretty fine too
15:17:36reactormonkI'd have to pull that one out of my arse, let's see...
15:18:05reactormonkhttp://progopedia.com/static/upload_img/2011/02/16/logo.png ^^
15:18:13synthmeat:D
15:19:02reactormonkruby's is pretty obvious, but haskell has style
15:20:20*endragor_ quit (Remote host closed the connection)
15:23:59*ddl_smurf quit (Quit: ddl_smurf)
15:35:50coffeepothey guys, got a quick question. What's going on with the following fragment - it seems like the & concatenator cuts off the next string to be concatenated?
15:35:52coffeepotvar
15:35:52coffeepot s1: string = "hello"
15:35:52coffeepot s2: string = ""
15:35:52coffeepots2="\0\0\0\0\0"
15:35:52coffeepotecho s1 & s2 & "end"
15:36:03pigmejsynthmeat: elixir have quite cool logo too
15:36:16pigmejhttp://upload.wikimedia.org/wikipedia/en/a/a4/Elixir_programming_language_logo.png
15:36:29synthmeatyup, that looks cool too
15:36:39coffeepotbtw my output is "hello" where I'm expecting "helloend", nim 0.11.2
15:37:21coffeepotecho s1,s2,"end" outputs "helloend" as expected
15:38:35coffeepotI guess it's just adding the zeros to signify string termination and then adding the "end" doesn't get displayed 'cos the string is terminated?
15:39:53*endragor joined #nim
15:40:05coffeepotI guess this is something obvious. I kind of expected "\0" to act like an empty string
15:41:47bluenotecoffeepot: afair this is just he behavior of echo
15:41:55BlaXpirityeah..
15:42:03BlaXpiritor stdout
15:42:06bluenotewhat do you get for (s1 & s2 & end).len
15:42:14BlaXpirit^this
15:42:30coffeepothmm good pt
15:42:38bluenoteNim actually stores the lenght separately, and I guess your string is okay, but echo stops at '\0'
15:43:22coffeepotwell if you do var s3 = s1 & s2 the length == 6
15:43:25*ddl_smurf joined #nim
15:43:29*JoshuaT quit (Quit: My Mac has gone to sleep. ZZZzzz…)
15:43:51coffeepotvar s3 = s1 & s2; echo s3 == "hello"
15:44:27coffeepotso it seems as though & with '\0' cuts the string
15:45:30coffeepothmm does look like it's just echo, var s3 = s1 & s2 & "end" has a length of 9
15:45:59coffeepotrepr(s3) now gives "hello\0end"
15:46:36bluenoteexactly
15:46:52bluenoteBlaXpirit: Another improvement I'm thinking of regarding optionals:
15:47:34bluenoteit would be great of my getOrElse and getOr would not take actual values but expr instead
15:47:39*endragor quit (Remote host closed the connection)
15:47:42BlaXpiriti was gonna reply on github
15:47:51BlaXpiritbut then got distracted midway :|
15:48:05bluenotei.e., if creating a "default" is costly we would only compute it in case it is necessary
15:48:13*endragor joined #nim
15:48:22BlaXpiritdon't get it
15:49:06bluenoteopt.getOrElse(<compute default value here>)
15:49:15*OnO joined #nim
15:49:29*OnO quit (Client Quit)
15:49:34bluenoteif getOrElse is a regular proc, we would compute the default even if we will not use it (opt has a value)
15:50:10BlaXpiriti think that was said by fowl
15:50:26bluenotewe could use a closure, i.e. default: proc (): B but this is ugly
15:50:41bluenotea template taking a `default: expr` would be great
15:50:46BlaXpiritjust a template........... right
15:51:37bluenotenot sure if this has any drawbacks though
15:51:54bluenoteif the template does not work we could at least overload by the above closure approach
15:52:09BlaXpiritno :|
15:52:31bluenoteyou think template should work?
15:52:50BlaXpirityes
15:52:59bluenoteawesome
15:53:08BlaXpiritand no, the name getOrElse is ugly :|
15:53:20reactormonkBlaXpirit, comes from scala, got any other idea?
15:53:22BlaXpiritI don't want people to hate me when they use that lib
15:53:22bluenoteyes, I admit that
15:53:54BlaXpiritthe good old idea is to name it `get`
15:54:39bluenotebut do you see the point why it would be important to see difference between a.getOr(b) = still optional, and a.getOrElse(b) = definitely a concrete value here
15:54:58*milosn joined #nim
15:55:10BlaXpiriti don't think a.getOr(b) = still optional, is useful
15:55:11bluenotewhen chaining many `get` its just not clear where a default is injected
15:55:21BlaXpirithow often would you do that??
15:56:05bluenotewhen using the full power of chaining optional computations this is pretty common I think
15:57:15BlaXpiritthis is not haskell
15:57:25BlaXpiritoptionals are gonna be rare as heck
15:57:31bluenotehm, I think it is very useful to look at (a get b) and tell whether I have somethin to work with, or not -- such a fundamental difference
15:58:05bluenotenot necessarily
15:58:25bluenoteHaskell/Scala users trying Nim
15:58:30*milosn quit (Client Quit)
15:58:34*milosn_ joined #nim
15:59:04*Ven quit (Ping timeout: 255 seconds)
16:00:23*ddl_smurf quit (Quit: ddl_smurf)
16:02:15Senketsuso, i wanted to try openArray but if i make var x: openArray[string] compiler throws Error: invalid type: 'openarray[string]' , am i missing something ?
16:02:40bluenoteopenArray is for proc parameters only
16:02:40Senketsuand it bugs me it reports it with low case 'a'
16:02:45Senketsuooh
16:02:48reactormonkSenketsu, yeah, an openarray is just varargs
16:03:05Senketsuwelp, had a feeling it would be like that
16:03:15bluenoteuse either array[0..fixedSize, string] or seq[string] for dynamic size -- both can be passed where openArray is required
16:03:29Senketsuaight thanks
16:03:34reactormonkSenketsu, your goal?
16:03:52*milosn_ is now known as milosn
16:03:54Senketsunothing really, wanted to jsut try
16:04:50BlaXpiritjust don't use openarray
16:05:03BlaXpiritit should be made obsolete
16:05:11BlaXpiritbleh, i'm going too far
16:05:23BlaXpiritsometimes there is no easy way to avoid it for now
16:05:48*ddl_smurf joined #nim
16:06:50bluenoteBleXpirit: Regarding the benefit of differentiating the gets, maybe an example:
16:07:37Senketsunah i'm the seq[] lover anyway, didnt have a use for openarrays so far, just wanted to try
16:07:55bluenotein Scala, when I see long chaning of optionals like `val x = a getOr b getOr c getOrElse d` I immediately know that I have a value
16:09:06bluenotealso I can see that (a getOrElse b get c) either does not make sense (because we have injected a default at b) or calls a member c on this result
16:09:25bluenoteif I only see getOr, I also know that my result is still optional
16:09:57bluenotewith only one "get" all this information is lost
16:10:02BlaXpiritok but this is rare
16:10:10*JoshuaT joined #nim
16:10:23*coffeepot quit (Quit: http://www.kiwiirc.com/ - A hand crafted IRC client)
16:10:31BlaXpiritchains are not worth considering.
16:10:40bluenoteno, not in functional programming
16:10:48*JoshuaT quit (Max SendQ exceeded)
16:10:54*coffeepot joined #nim
16:11:23bluenoteand since optionals should address the needs of functional programmers, it would make sense to follow such common patterns
16:11:25*JoshuaT joined #nim
16:11:57BlaXpiritno
16:12:27BlaXpiritthe only purpose is to avoid multiple incompatible reimplementations
16:12:28bluenotethe whole point of the option monad is the chain optional results in the first place
16:12:31BlaXpiritwe have like 5 of them now
16:12:38*coffeepot quit (Client Quit)
16:12:47BlaXpiritthe whole point is to have optional return values in functions
16:13:00bluenotebut then it should be done right
16:13:05BlaXpiritinstead of nil or -1 or tuple-with-bool
16:13:16BlaXpiritit should be done simply
16:13:42bluenotehaving two gets will not kill simplicity
16:14:02BlaXpiritthen make such a function in your own code
16:14:24BlaXpiritcompatibility, which is the main point, will be accomplished
16:14:35BlaXpiritbloat it with whatever you want in your code.
16:14:43BlaXpirit(sorry if i seem rude, i'm always like that)
16:14:44*ddl_smurf quit (Quit: ddl_smurf)
16:14:58bluenotewell, there is no standard yet
16:15:24bluenotethis would be the time to make it right, and also the reason why I think this is worth arguing
16:17:35*profan joined #nim
16:27:24*endragor quit (Remote host closed the connection)
16:28:35*ddl_smurf joined #nim
16:29:53reactormonkI think the main part about functional programmers would be to stick the whole stdlib into concepts
16:30:29BlaXpiritmore like sane programmers
16:32:22*ddl_smurf quit (Client Quit)
16:41:47*ddl_smurf joined #nim
16:42:14*the9to5 joined #nim
16:43:34*yglukhov___ quit (Ping timeout: 245 seconds)
16:45:02renesachttp://forum.nim-lang.org/t/1211 <-- table operations returning optionals would solve this issue?
16:46:25BlaXpiritnot really
16:46:42BlaXpiriti wouldn't want to use tables that return optionals by default
16:46:49BlaXpiritpython's design should just be copied
16:47:09BlaXpirit[] should throw
16:47:13BlaXpiritraise*
16:47:57renesacI was never 100% happy with python way to handle dicts
16:48:18*dalarmmst quit (Ping timeout: 276 seconds)
16:48:20renesacbut them, I never used a table that returns optionals to know how annoying it is
16:48:24renesac*then
16:49:26BlaXpiritwell, with the awesome `?=` template it would potentially be even better than normal
16:50:22renesacwhat would be the equivalent in python?
16:50:24*ddl_smurf quit (Quit: ddl_smurf)
16:50:27renesacan if statement?
16:50:37BlaXpiritno equivalent to `?=`
16:50:51BlaXpiritclosest is exception
16:51:36reactormonkBlaXpirit, nope, I don't like throws. they are expensive. optionals are cheaper.
16:51:54BlaXpiritif value ?= table[key]: a(value) else: b try: value = table[key] except: b else: a(value)
16:52:09BlaXpirit(right side is python)
16:53:20BlaXpiritaaand it should be except KeyError
16:53:49*ddl_smurf joined #nim
16:54:06BlaXpiritheck, if the `?=` template is embraced, then maybe one could reimplement it for their type to avoid optionals overhead
16:54:39renesachow so?
16:54:44renesacfor tables?
16:54:51BlaXpirittables are an example
16:55:20renesacI don't see how ?= would work w/o tables returning an option
16:55:36*ddl_smurf quit (Client Quit)
16:55:42BlaXpiritproblem is, Arаq would never let optionals too deep into the standard library
16:56:00BlaXpiritthis talk is pointless
16:56:47*mal`` quit (Ping timeout: 248 seconds)
16:57:09*mal`` joined #nim
16:57:38renesacI dunno
16:58:10renesacit also could be an additional function, like 'table.optGet(key)'
16:58:22renesacfor it to return an optional
16:58:32BlaXpiritman, i still cringe from uglyCase every time
16:58:47*JoshuaT quit (Quit: My Mac has gone to sleep. ZZZzzz…)
16:59:32renesacheh, I like it for functions, but not really for variables
16:59:53renesacwhat I cringe is constants looking like types
17:00:31renesacALL_CAPS isn't pretty either...
17:00:45*dalarmmst joined #nim
17:01:12renesacbut returning to the conversation, I don't understood what you meant by reimplementing ?=
17:01:53BlaXpiritspecifying
17:02:03renesacwhat is there to specify?
17:02:19*TEttinger quit (*.net *.split)
17:02:20*MyMind quit (*.net *.split)
17:02:20*Jesin quit (*.net *.split)
17:02:20*no_name quit (*.net *.split)
17:02:20*federico3 quit (*.net *.split)
17:02:20*heinrich5991 quit (*.net *.split)
17:02:26BlaXpiritlet me think, my thoughts are jumbled
17:03:02*heinrich5991 joined #nim
17:03:10*federico3 joined #nim
17:03:11*MyMind joined #nim
17:04:38*gsingh93 joined #nim
17:04:39renesachide a try/except block behind ?= in case of tables?
17:05:01*thotypous quit (Quit: WeeChat 1.1.1)
17:05:03*banister quit (Quit: My MacBook has gone to sleep. ZZZzzz…)
17:05:13renesacI'm not sure how efficient is it
17:06:43*TEttinger joined #nim
17:07:34BlaXpiriti dunno... term rewriting template for ?=(expr, table[T]) that would bypass the creation of optional
17:07:53BlaXpiriti dunno... term rewriting template for ?=(expr, [](table[T], T)) that would bypass the creation of optional
17:08:27*no_name joined #nim
17:08:28renesacdoes that second syntax work?
17:08:50BlaXpiritnot literally this syntax
17:08:55BlaXpiritor maybe this wouldn't work at all
17:08:56*brson joined #nim
17:09:28BlaXpirithow do i know, there is no information on term rewriting things
17:10:42BlaXpiritwhich reminds me something i wanted to try
17:12:10renesacand it changes the semantics of the table[key], as it usually would throw if there was no key
17:12:26BlaXpiritrenesac, it does not throw
17:12:30renesacI think it would be too much magic
17:12:37BlaXpirityou don't understand
17:12:52BlaXpiriti'm just hypothesising what could be if table[key] returned optional
17:13:21reactormonkBlaXpirit, why no optionals in the stdlib? Sounds good to me
17:13:22renesacoh, indeed
17:13:42BlaXpiritreactormonk, 1. backwards compatibility 2. political reasons
17:14:13BlaXpiritgood in all other aspects, sure
17:14:21renesactable.optGet() or table.getOpt() would not break backwards compatibility
17:14:35BlaXpiritsure
17:14:48renesacbut not too nice to write
17:15:16renesacwell, away
17:15:41reactormonkwe need return type overloading ;-)
17:17:31reactormonkBlaXpirit, could you somehow engineer a converter such that options are transparent but deprecate said converter?
17:18:06BlaXpiriti dont care.
17:19:32*davidhq quit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
17:19:34BlaXpiritwell that was kinda harsh :|
17:19:43BlaXpiriti'm tired and distracted
17:28:09*gsingh93 quit (Ping timeout: 240 seconds)
17:37:16*bluenote quit (Ping timeout: 246 seconds)
17:39:25*yglukhov___ joined #nim
17:42:10*yglukhov___ quit (Client Quit)
17:51:28*vikaton quit ()
17:56:04*vendethiel joined #nim
18:04:59*bluenote joined #nim
18:15:39*davidhq joined #nim
18:17:48*OnO joined #nim
18:18:01*banister joined #nim
18:22:38*BlaXpirit quit (Remote host closed the connection)
18:24:31*BlaXpirit joined #nim
18:27:07*JoshuaT joined #nim
18:27:12*yglukhov___ joined #nim
18:28:39*milosn quit (Read error: Connection reset by peer)
18:29:13*jholland joined #nim
18:30:52*otirc joined #nim
18:34:21*milosn joined #nim
18:35:36*otirc left #nim ("WeeChat 1.0.1")
18:40:04*fizzbooze joined #nim
18:42:05*filcuc joined #nim
18:47:24*fizzbooze quit (Ping timeout: 252 seconds)
18:48:03*the9to5 quit ()
18:51:01*buupisaway is now known as buup
18:56:06*filcuc quit (Ping timeout: 272 seconds)
18:57:20BlaXpiritno matter how many times i try term rewriting macros, they never work
18:57:33BlaXpiritcompiles fine, sure
18:57:36BlaXpiritbut no effect, ever
18:57:50BlaXpiritthe only thing that works is the example in manual
18:57:55BlaXpiritthe only piece of information on it
19:04:20BlaXpiritdoes it require at least one constant or what
19:04:41BlaXpiritcanonMul indicates otherwise
19:06:05*strcmp1 joined #nim
19:08:09*BitPuffin quit (Ping timeout: 256 seconds)
19:08:56*Jehan_ joined #nim
19:13:11def-BlaXpirit: I use them in my bigints module, they seem to work for me: https://github.com/def-/nim-bigints/blob/master/src/bigints.nim
19:13:40BlaXpiritwell these are trivial
19:18:13BlaXpirittemplate optDivMod*{w = y div z; x = y mod z}(w,x,y,z: BigInt) =
19:18:23BlaXpiritok this sure looks interesting but i have no idea
19:18:46BlaXpiritprobably just a sequence of 2 statements
19:18:55BlaXpiritjust detects a
19:22:36*Perelandric joined #nim
19:26:07BlaXpiritok so why doesn't this work? https://bpaste.net/show/193da406c037
19:27:19BlaXpirittried with `[]` `..` etc
19:28:13def-Weird, a bug?
19:28:59BlaXpiritwell sure, it's probably a bug that barely anything works
19:30:45BlaXpiritalso tried optFind{find(`[]`(s, a), sub)}(s, sub: string, a: Slice[int])
19:36:41*grncdr joined #nim
19:37:53*BlaXpirit_ joined #nim
19:42:51synthmeathow about this for a logo? out of 30 variants today, i like this the best https://www.dropbox.com/s/0knw3guzss7dmgb/2015-05-12%2021.39.39.jpg?dl=0
19:43:33synthmeatcolors are variable, as long as the middle one (on "I") is stronger
19:44:16*the9to5 joined #nim
19:44:55synthmeat(and it's just a sketch, obviously)
19:46:41Jehan_Doesn't Nim already have a logo?
19:46:46*grncdr quit (Ping timeout: 272 seconds)
19:47:02flaviuThat looks great, but Nim does have a logo already.
19:47:13*the9to5 quit (Client Quit)
19:47:16flaviuhttps://github.com/nim-lang/assets/tree/master/Art
19:47:35synthmeati know it does, i'm just playing
19:49:27*RegisterOn left #nim (#nim)
19:49:28synthmeat"NIM" word is pretty interesting typographically, is all
19:51:16renesacI don't like the I not slanted the same way as the other letters
19:51:44renesacthe idea is interesting, but don't looks good for me
19:51:52synthmeatrenesac: good catch, tbh
19:51:52renesacjust my 2 cents
19:55:31*the9to5 joined #nim
19:57:33synthmeatrenesac: i'll do a version with slanted "I" for ya and call it a day :)
19:58:36*dddddd quit (Ping timeout: 244 seconds)
20:02:09*MyMind quit (Ping timeout: 240 seconds)
20:03:18*xender joined #nim
20:04:05flaviusynthmeat: I really like your color choice btw.
20:04:22xenderHi. Is Nim compiler available as a library, usable as JIT?
20:04:23synthmeatflaviu: it's the only colors i have :D
20:05:19*bluenote quit (Ping timeout: 246 seconds)
20:05:30*the9to5 quit ()
20:06:06flyxhow do I properly use "not nil"? I get the error "cannot prove [var] is not nil" at a place where it cannot be nil
20:06:45reactormonkxender, not really. You could use the nim vm, but it's rather limited.
20:07:34xenderreactormonk: Hm, I'm quite new to Nim. So there is a VM too?
20:07:50reactormonkxender, yup, for the macros
20:07:59flaviua.pomf.se/jschqj.svg a.pomf.se/ztafet.svg
20:08:01xenderreactormonk: I've read that it's compilable to C and JavaScript, is it right too?
20:08:47flaviuActually, that second link is wrong. Give me a few moments of fix it.
20:09:11reactormonkxender, it compiles to C and javascript
20:09:20flaviua.pomf.se/ksxltj.svg fixed
20:09:39BlaXpirit_so i guess that's that, nobody knows about term rewriting macros
20:09:59*ddl_smurf joined #nim
20:10:20xenderreactormonk: I see. So no luck with JIT-ing, even with Clang/LLVM to handle C JIT?
20:10:51flaviuxender: Why do you want JIT?
20:11:05dtscodenim doesn't jit?
20:11:11BlaXpirit_-_-
20:11:26reactormonkxender, you could JIT the generated C code but I don't see why you would
20:11:28synthmeatreactormonk: i think you were *spot on*...
20:11:29dtscodeOh wait... Sorry... Was thinking of a different language :3
20:12:03synthmeatlogo with slanted "I" - https://www.dropbox.com/s/2z7c6cu34cpll00/2015-05-12%2022.09.37.jpg?dl=0
20:12:10*dddddd joined #nim
20:12:32renesachumm, yeah, that is better
20:12:39flaviuHmm, that's not what I was thinking, but it looks better than what I came up with: http://a.pomf.se/xzzhpz.svg
20:13:03renesacflaviu: in your version the N is strange
20:13:09BlaXpirit_ok i'm done -_-
20:13:19flaviuIt sort of looks like http://www.scala-lang.org/resources/img/smooth-spiral.png
20:13:21synthmeatflaviu: ah, you did the slant on other side. cool
20:13:22renesacBlaXpirit: I think only Araq knows about it
20:13:43*BlaXpirit_ quit (Quit: Quit Konversation)
20:13:56synthmeatrenesac: i like the three stripes in the middle now. it's less boring than the original one!
20:14:16xenderreactormonk, flaviu: just got a crazy idea about writing Python with Nim fragments (for speedups), but without separate pre-compilation step and wanted to look around whether such a thing would be feasible at all.
20:14:36synthmeatrenesac: not only that, but i think this might even work in monochrome now
20:14:37reactormonkxender, nim-borg for python integration
20:15:03reactormonkxender, and nim compiles fast. So there's something.
20:15:22renesacsynthmeat: yeah, and it would be cool 3D printed too, or sculpted with metal, whatever
20:15:23renesacXD
20:15:37synthmeat:)
20:16:00flaviuxender: Interesting. You could create an executable for each function, and use the same sort of strategies as AFL to speed up execution.
20:16:01synthmeatrenesac: yeah, but mono is kinda important for cheap printed stuffs, dunno :)
20:16:30flaviuYou should also be able to do a shared lib and mess around with the linker to interface it with python.
20:17:00flaviuBut you definitely don't need JIT in the "fast initial compile, optimize later" sense of the word.
20:18:17renesacI can't find that new interpreter for nim, that uses the compiler + tcc
20:18:17xenderreactormonk: Also, my first crazy idea was a bit different. Do you maybe know PyPy? They've made a limited retrosection-based Python-to-C compiler, called RPython. The strageness lies in that the Python code to be compiled is analyzed in Python runtime using retrospection features, so that existing Python interpreter handles the parsing. I was thinking if it would be feasible to compile Python to Nim in a
20:18:19xendersimilar way.
20:19:04renesacxender: cython is what you want, probably
20:19:15renesacbut see nimborg
20:20:09xenderflaviu: Executable per function would have a hell of overhead, but I was thinking about compiling to a shared library, yeah.
20:20:20renesacand someone was to write a blog post on how to create python functions with nim
20:20:31flaviuxender: Not with AFL's strategies :)
20:20:34xenderrenesac: Cython doesn't compile to JS. ;)
20:20:48flaviubut 5000 execs/sec isn't too good, yeah.
20:20:59renesacright, not even with emscripten?
20:21:40renesacwell, you basically can create python libs in the same way you create them using C
20:22:27renesacbut then I don't know how JS enters in this conversation
20:22:50xenderrenesac: Hm, I don't know TBH. But I have somehow bad feeling about Emscriptening the Cythoned code. Well, it still depends on CPython internals and standard library. Some of it is actually ported to Emscripten (Empythoned project), but it becomes a sandwich of transpilation.
20:23:11renesacheh
20:24:26xenderCome to think of it, how does JS backed of Nim behave? It compiles to something like asm.js, tried to stay higher-level, or maybe it uses Emscripten too?
20:24:58*Matthias247 joined #nim
20:25:31xenderflaviu: I'm trying to search, but no success. What are those AFL strategies you've mentioned?
20:25:58renesacI don't know actually, but you can also use emscripten with the nim's C backend
20:25:59renesachttp://hookrace.net/blog/porting-nes-go-nim/
20:26:29flaviuxender: http://lcamtuf.blogspot.com/2014/10/fuzzing-binaries-without-execve.html
20:26:36flaviuHorrible hack :)
20:27:36xenderOh, lcamtuf :)
20:27:58xenderHe's somehow famous on Polish scene. Heh.
20:29:45*dalarmmst quit (Ping timeout: 256 seconds)
20:30:10*Kingsquee joined #nim
20:30:45*davidhq quit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
20:33:09xenderflaviu: Heh, that hack is cute indeed, but still, I'd just compile to shared library. Very interesting link, thank you. ^ ^
20:34:55gokrxender: I am actually playing with a "transpiler" toy right now - from Squeak (Smalltalk) to Nim.
20:35:19*filcuc joined #nim
20:35:22xendergokr: Hm, interesting. Do you have any experiences to share?
20:35:46gokrYeah, but ... Smalltalk is different, so it may be hard to compare.
20:35:52xenderUnfortunately, I don't know Smalltalk, but any advice would be nice.
20:36:08gokrBut the general idea was to reuse most of the existing compilation pipeline in Smalltalk.
20:36:34gokrSo in Squeak you have a Scanner, Parser, Compiler, bunch of AST nodes etc etc. All in Smalltalk.
20:36:46*filwit joined #nim
20:37:10gokrWhat I am doing is that I am making a visitor basically over the AST nodes of the compiled Smalltalk methods.
20:37:18*redwyn joined #nim
20:37:25gokrAnd generating Nim source code.
20:37:49xenderMhm. Anything interesting about the generation phase itself?
20:38:11gokrAt the moment - since Smalltalk is dynamically typed like Python - I am using an object variant trying to work as a universal "type".
20:38:18*fizzbooze joined #nim
20:38:33xenderMhm
20:38:52gokrWhat I am hoping to achieve (apart from having fun) is enough of a transpiler that I can actually transpile the compiler classes themselves.
20:39:00gokrAnd thus bootstrapping a Smalltalk compiler in Nim.
20:39:43xender:)
20:40:06gokrI have a bunch of "prior art" though, and Smalltalk is "smaller" than Python.
20:40:54xenderBy smaller you mean the core of the langueage or the standard library?
20:41:10gokrCore language. Very small.
20:41:15gokr5 keywords.
20:41:17xenderMhm
20:41:25xenderOh, that's interesting
20:41:39gokrThe AST is very small and the grammar fits on a postcard
20:41:55renesacxender: try to guess what those keywords are
20:41:56renesacXD
20:41:57gokrFor a "wow" take a look at http://devblog.avdi.org/2015/05/11/in-which-i-make-you-hate-ruby-in-7-minutes/
20:42:08gokr(sorry for the blurb)
20:43:54xenderrenesac: I guess it would be "class", some kwyword for defining functions/methods and basic data types? But I have no idea really.
20:45:00gokrThe 5 keywords are hard to guess.
20:45:50gokrThey are "nil, true, false, super, self". And oh, I always forget - they are actually 6 - "thisContext" too.
20:46:28gokrFunny enough all 6 are references to "known objects".
20:46:44Jehan_Class definitions are actually method calls in Smalltalk.
20:47:20Jehan_E.g.: Object subclass: #Foo.
20:49:21gokrYeah, the quick video there shows that and much more.
20:49:50*gokr crawls back under his Smalltalk stone...
20:51:04xenderWhat is that magic at 5:48?
20:51:50*redwyn quit (Quit: leaving)
20:52:13xenderDoes it just make a text search through examples, or somehow explores the space of "what function would take the first given expression and return the second one"?
20:52:26xenderOr is it something entirely different?
20:52:51gokrIt does a brute force "test" of a known set of methods
20:53:12gokrSo yes, the second description you made is correct.
20:54:08*buup is now known as buupisaway
20:54:11gokrSo from this list of known methods - it selects out those that take one argument (in this case), and in fact, here we know the type of the receiver (a String duh) so the set of methods to run is smaller.
20:54:50gokrI haven't looked at the code in detail, but its quite effective when it comes to simpler stuff like String, Collections and so on
20:54:51*buupisaway is now known as buup
20:54:59xenderInteresting
20:58:27gmpreussner|workgokr: thx for the link :)
20:59:35gokrHehe, well... I just think Smalltalk (just as Lisp and Forth) is something every programmer should have seen once at least.
21:00:14gokrSteve Jobs did, and look where that went. ;)
21:00:16gmpreussner|worki usually only stumble upon Smalltalk when reading ancient books on compiler design
21:00:25gmpreussner|workmaybe i'll spend some more time with it
21:00:41gokrIf you want, just holler and I can give some hints on what to look at.
21:00:45gmpreussner|workseems interesting from an IDE usability point of view
21:00:50gokrOoooh, yeah.
21:00:58gmpreussner|work*holler*
21:01:00gmpreussner|work^_^
21:01:11gokrWe can go private
21:01:27*OnO quit (Quit: My iMac has gone to sleep. ZZZzzz…)
21:04:17xenderHm, his second video is interesting too
21:04:23xenderhttps://www.youtube.com/watch?v=Cy-dbodBEDI
21:06:51xendergokr: Hm, what's the deal with Forth? I've just seen Smalltalk and I have a friend who writes Elisp, so I kinda know what's it about, but I don't know yet what's so special about Forth. I only know that it's stack-based...
21:07:49gokrYeah, I saw that video too - and I know all about what he is doing since I am a long time Squeaker/Pharo guy.
21:09:04gokrForth is stack based yes, a so called "concatenative" language. It was an eye opener for me when I was like 12 years old.
21:12:22xenderConcatenative?
21:14:02*vendethiel quit (Quit: q+)
21:22:33*fizzbooze quit (Ping timeout: 240 seconds)
21:30:37gokrxender: https://en.wikipedia.org/wiki/Concatenative_programming_language
21:31:45xendergokr: Hm, interesting
21:33:24gokrxender: For a trip on that stuff: http://factorcode.org
21:40:05*gokr quit (Read error: Connection reset by peer)
21:40:58*gokr joined #nim
21:48:29*filcuc quit (Quit: Konversation terminated!)
21:49:28*filcuc joined #nim
21:49:40*filcuc quit (Client Quit)
21:51:01*Jesin joined #nim
21:56:33*yglukhov___ quit (Quit: Be back later ...)
22:02:38Varriountonionhammer: Still working on the release of NimLime, it appears I lost some local changes I made.
22:04:32Varriountonionhammer: Also, take a look at this - https://github.com/cryzed/Sublime-Text-3-Pulse-Plugin
22:05:11Varriountdom96: Is there a nimble command to list packages currently installed on the system?
22:05:20onionhammerol
22:05:26onionhammervarriount pulse?
22:08:05*notfowl- joined #nim
22:08:44Jehan_Varriount: nimble list --installed
22:09:30Jehan_That pulse thing looks like a usability nightmare.
22:10:22VarriountJehan_: Thanks.
22:10:59*notfowl quit (Excess Flood)
22:11:00dom96Varriount: I think there is a flag you can pass to 'list'
22:11:18*buup is now known as buupisaway
22:15:35*Matthias247 quit (Read error: Connection reset by peer)
22:16:08cryzedJehan_, onionhammer: It was just a little experiment to become more familiar with the ST3 API back then. Varriount mentioned possibly using a quick pulse (once) as a visual indication for a notification, such as the finishing of a long-running process
22:16:33Jehan_Ah, I see.
22:16:36cryzedI don't really have it running non-stop, however cool that might make me look
22:16:40cryzed;)
22:30:46*Trustable quit (Remote host closed the connection)
22:37:03*ingsoc quit (Quit: Leaving.)
22:53:03onionhammer;)
22:54:30*BitPuffin|osx joined #nim
22:54:35onionhammercryzed varriount can we add actual visual studio style intellisense yet? :)
22:54:38onionhammerwith nimsuggest
22:54:54*milosn quit (Ping timeout: 246 seconds)
22:56:24*BlaXpirit quit (Quit: Quit Konversation)
23:06:01*bjz quit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
23:09:49*thotypous joined #nim
23:10:00cryzedthere are themeable tooltips
23:10:01cryzedso yes
23:10:04cryzedwith a bit of work it can be done
23:10:15cryzedping onionhammer
23:11:56*thotypous quit (Client Quit)
23:12:11*thotypous joined #nim
23:15:31*kor joined #nim
23:15:39korhello
23:15:54korcan someone please kick me from this channel?
23:16:06Xewhy?
23:16:17kori need to see what it looks like from the client side
23:16:20korresearch purposes
23:16:39korcan someone please kick or ban me?
23:16:41Xe:kicker!user@host KICK #channel kor :reason
23:16:48Xethere
23:17:08kori'm still here
23:17:50korXe: can you kick me off this channel?
23:17:55*Jehan_ quit (Quit: Leaving)
23:18:00Xeno, see PM
23:23:38*kor left #nim (#nim)
23:24:34*Jesin quit (Quit: Leaving)
23:26:26*Jesin joined #nim
23:49:02*flaviu quit (Read error: Connection reset by peer)
23:50:04*brson quit (Quit: leaving)
23:57:47*flaviu joined #nim