<< 07-03-2020 >>

00:04:53*Tanger quit (Ping timeout: 272 seconds)
00:06:27*disbot joined #nim
00:07:22*disruptek joined #nim
00:07:42*bunbunbunbunny quit (Ping timeout: 256 seconds)
00:09:37*tane quit (Quit: Leaving)
00:10:32FromDiscord<exelotl> https://play.nim-lang.org/#ix=2dAd
00:11:16FromDiscord<exelotl> bunbunbunbunny: basically made my own container where the length is derived from the enum, and you can't change it.
00:12:14*letto_ joined #nim
00:12:20FromDiscord<exelotl> maybe you could do `type VariantList* = distinct seq[Option[CmpVariant]]`
00:12:21FromDiscord<Elegant Beef> any clues why replace isnt working on `\n\e`?
00:12:45FromDiscord<exelotl> (if you don't care about storing the `ann` alongside the list)
00:13:41*letto quit (Ping timeout: 265 seconds)
00:13:57FromDiscord<exelotl> if you were to do it with a distinct type it might be easier cause you could {.borrow.} most of the procs such as `len`, `[]` and `[]=`
00:14:48FromDiscord<exelotl> to save implementing them yourself
00:16:52FromDiscord<exelotl> but yeah basically: if you want arrays of different lengths, you're best off using seqs. if you want to enforce some rules such as "length stays fixed at runtime and it can only be certain lengths", you're best off making a custom type for it.
00:31:58*filcuc quit (Quit: Konversation terminated!)
00:52:20*rockcavera quit (Remote host closed the connection)
00:58:44*zahary quit (Quit: Leaving.)
00:58:47FromDiscord<flywind> I find why get overflow error yesterday.My line is too long.Though I don't know why so many empty space maybe owe to vscode.
00:59:14FromDiscord<flywind>
00:59:14FromDiscord<flywind> https://cdn.discordapp.com/attachments/371759389889003532/685652746103423108/unknown.png
01:39:41*sealmove quit (Quit: WeeChat 2.7.1)
01:52:49*rockcavera joined #nim
01:55:08*jjido quit (Quit: Connection closed for inactivity)
01:58:50*Zectbumo quit (Remote host closed the connection)
02:08:38*NimBot joined #nim
02:28:39*krux02 quit (Remote host closed the connection)
02:40:00*Hideki_ joined #nim
02:44:26*Hideki_ quit (Ping timeout: 258 seconds)
02:47:55*Zectbumo joined #nim
02:49:39*abm quit (Quit: Leaving)
02:55:15*chemist69 quit (Ping timeout: 272 seconds)
02:56:51FromDiscord<mfiano> How do I pass an object by reference?
02:57:08*chemist69 joined #nim
02:58:24disruptekanything that consumes more than 3*float bytes is by-reference automatically.
02:59:07disruptek3*sizeof(float), i should say.
03:00:05FromDiscord<exelotl> huh I remember hearing about that... but semantically it always has to act like a copy though right, so what trickery is used?
03:01:17FromDiscord<exelotl> oh wait, I'm being dumb, you can't mutate arguments
03:01:36FromDiscord<exelotl> I should be talking about code at 4am
03:02:09disrupteki mean, you're not dumb. there be dragons from time to time.
03:02:28FromDiscord<exelotl> *I shouldn't
03:02:47disruptekar4q says not to use refs. i tend to say, "have you tried using a ref?"
03:03:15disruptekbecause i've hit too many scenarios where it magically solves subtle problems like with inheritance, etc.
03:03:34disruptekit's a simply fear of the unknown on my part.
03:04:01disruptekbut certainly, the intention is for non-refs to replace refs in most cases.
03:04:12FromDiscord<mfiano> I can't get an object with 4 f64's to pass by reference
03:04:25FromDiscord<mfiano> keep getting type mismatch
03:04:37disruptek!paste
03:04:41disruptek~paste
03:04:42disbotpaste: 11a frowned-upon behavior in chat; please use a service such as https://play.nim-lang.org/ or http://ix.io/ or https://gist.github.com/ and supply us a URL instead. -- disruptek
03:05:08FromDiscord<mfiano> I'm just trying stuff randomly on stream with a couple other people right now...no real code
03:05:35disruptekare you mfiano there?
03:05:48FromDiscord<mfiano> mfiano where?
03:05:49disrupteki'm just about to stream but i'll watch you instead.
03:06:01disruptektwitch?
03:06:14FromDiscord<mfiano> I don't use that really
03:06:21disruptekoh, what do you use?
03:06:24FromDiscord<mfiano> Are you on irc or gitter?
03:06:30disruptekyep.
03:06:37FromDiscord<mfiano> which?
03:06:40disruptekirc.
03:07:00*mfiano joined #nim
03:07:38FromDiscord<Varriount> He's actually a hallucination embedded in your mind.
03:11:14FromDiscord<exelotl> @mfiano right so your problem most likely is, your regular object is allocated on the stack, but ref objects are allocated on the heap
03:12:52FromDiscord<exelotl> you can't pass a non-ref object to a procedure that expects a ref. Because the object will be deallocated as soon as it goes out of scope. Which would be disastrous if the procedure tried to (for example) store the ref somewhere for later.
03:13:49FromDiscord<exelotl> so the solution is to create a ref object, allocate it, and then pass the newly allocated object to the procedure
03:14:15*muffindrake quit (Ping timeout: 272 seconds)
03:14:57FromDiscord<Elegant Beef> So im using GLFW and the setKeyCallback takes in a GLFWKeyFun which is a type that equals a proc, doesnt that mean it should take any proc that matches that signature?
03:16:33*muffindrake joined #nim
03:19:56FromDiscord<Elegant Beef> ah the pragmas also had to match
03:24:18*dadada quit (Ping timeout: 258 seconds)
03:26:12*dadada joined #nim
03:26:36*dadada is now known as Guest11315
03:32:51*Zectbumo quit (Remote host closed the connection)
03:48:25leorizeshashlick: did you manage to make a docker image?
03:52:45disruptek~stream
03:52:45disbotstream: 11https://twitch.tv/disruptek (live video/audio) and mumble://uberalles.mumbl.io/ (live voice chat) -- disruptek
04:06:51FromDiscord<mfiano> Why is the compiler throwing away line 24 on the assumption that it is not mutating `v`? Works if a bind it to `result`, but not like this? https://play.nim-lang.org/#ix=2dAR
04:07:00FromDiscord<mfiano> Why is the compiler throwing away line 24 on the assumption that it is not mutating `v`? Works if I bind it to `result`, but not like this? https://play.nim-lang.org/#ix=2dAR
04:08:57*Guest11315 is now known as dadada
04:09:35dadadawhen trying to write a brand new macro I hit this error early on
04:09:45dadadahttps://play.nim-lang.org/#ix=2dAS
04:09:55dadadaError: internal error: getTypeDescAux(tyProxy)
04:10:07dadadais this a bug in the compiler, or did I do something wrong there?
04:11:34dadadawhen you put dumpTree: around it, there's no error, so it should be possible to parse this
04:18:58dadadanevermind, this was my fault
04:19:54dadadaalthough I think this shouldn't be labeled as an "internal error" maybe?!
04:23:20dadadadisruptek: /me is watching you all the time now!
04:32:01*rockcavera quit (Remote host closed the connection)
04:38:31shashlick@leorize nope not yet
05:05:48FromDiscord<mfiano> I'm not sure why this is segfaulting
05:05:53FromDiscord<mfiano> Maybe a bug in the compiler...
05:19:05FromDiscord<Varriount> @mfiano feel free to post a link to the code
05:21:00FromDiscord<Elegant Beef> @mfiano the original issue is the proc has a return type, in what you posted it was returning a vec2 but not discarding
05:40:14*okcy joined #nim
05:40:31*okcy quit (Client Quit)
05:40:48*okcy joined #nim
05:42:30FromDiscord<mfiano> https://play.nim-lang.org/#ix=2dB3
05:51:56*silvernode joined #nim
05:55:28FromDiscord<Elegant Beef> For what you're doing something like this makes more sense
05:55:28FromDiscord<Elegant Beef> https://play.nim-lang.org/#ix=2dBc
05:55:28FromDiscord<Elegant Beef> @mfiano
05:56:29kungtotteWhy bother with making it a pointer and dereferencing it? You'll accomplish the same thing with a var parameter
05:56:36FromDiscord<Elegant Beef> Oh i know
05:57:06FromDiscord<Elegant Beef> What they were doing is quite weird so i just solved it one wacky way πŸ˜„
05:58:49kungtotteI think this is more along the lines of what they were trying to accomplish: https://play.nim-lang.org/#ix=2dBd
05:59:19FromDiscord<Elegant Beef> Yea but doesnt change the "but why" aspect
06:00:07kungtotteThat's an issue we can't solve in code ;)
06:00:17FromDiscord<mfiano> I'm trying to mutate a var with a chain of mutating procs using UCS
06:00:26FromDiscord<mfiano> it works for the first one, but not with a chain
06:00:31FromDiscord<Elegant Beef> Ah the vect is just a placholder
06:09:46leorizeshashlick: do you still want me to build you a version?
06:12:02FromDiscord<mfiano> So if I change the return type of `rand()` to `Vec2` instead of `var Vec2`, it doesn't segfault, but only works if I call `echo rand(v2, 2f32, 5f32)` and it fails with a chain such as `echo rand(v2, 2f32, 5f32).rand(0f32, 5f32)`. It's trying to get chaining working without using unsafe pointers or compiler segfaults that I'm trying to figure out.
06:12:14FromDiscord<mfiano> @Elegant Beef
06:12:52FromDiscord<Elegant Beef> kungtotte had a solution for you
06:13:38FromDiscord<mfiano> Oh sigh...I missed that whole message. Let me inspect
06:16:47FromDiscord<mfiano> I see, so he is mutating the vec instead of `result` in `rand()`. Can someone explain to me why it segfaults if you don't do this? I'm new and hoping to avoid the problem in the future
06:17:14FromDiscord<Elegant Beef> well in your last example you dont intialize the result which is one problem
06:17:20shashlickIf you get time, will certainly appreciate it
06:17:51shashlickI don't know if users downloaded v0.5.1 but never know
06:20:13FromDiscord<Elegant Beef> Yea, i dont know why the one way works but not the other
06:21:35FromDiscord<mfiano> Would it be a compiler bug to report that it segfaults?
06:21:59FromDiscord<Elegant Beef> Uhh im too much of a twit to answer that
06:22:00FromDiscord<mfiano> I wouldnt expect a segfault without unsafe code anyway
06:22:06*narimiran joined #nim
06:22:47kungtotteIt will segfault whenever you muck around with references as well, even though they're safe (unlike pointers)
06:23:25FromDiscord<Elegant Beef> How the hell does one call builtin commands like "compgen"
06:23:40FromDiscord<Elegant Beef> built in shell commands*
06:23:58kungtotteI don't know a whole lot about the compiler internals but I think that if you make the return value a var type it needs to set aside some memory for it which doesn't happen unless you do it like I do (reference the original vec which was already there)
06:24:36FromDiscord<mfiano> Ok thanks
06:25:31kungtotteI don't really understand why you're making the code so complicated though :)
06:26:10FromDiscord<Elegant Beef> I guess doing `a.b().c().d().e()` is more functional like, but still weird to me
06:26:11leorizeshashlick: how can I build it?
06:26:19leorizejust clone latest master?
06:26:51FromDiscord<mfiano> Right, I forgot we live in an age where "worse is better" has ruined us
06:28:39kungtotteYou don't need the 'var' qualifier in your procedure definition. This works too: https://play.nim-lang.org/#ix=2dBi (also swapped the first parameter to be called _ since you're explicitly not doing anything with it)
06:29:55kungtotteAlso if you swap it from float32 to just 'float' you don't need the ugly f32 suffixes to make Nim understand what to do: https://play.nim-lang.org/#ix=2dBj
06:30:31FromDiscord<mfiano> Ok thanks!
06:31:05FromDiscord<mfiano> So this isn't passsing by value?
06:32:20FromDiscord<mfiano> Because it sure seems like it now.
06:32:23kungtotteIt passes some things by value and others by reference, but it passes things immutably by default. You only add the 'var' declaration if you need to mutate the thing
06:32:51FromDiscord<mfiano> `echo v2` returns 0,0. I specifically want to mutate that allocated memory as it was before.
06:34:07kungtotteOK, then you need the var qualifiers on both the input and the output Vec2
06:34:22kungtottehttps://play.nim-lang.org/#ix=2dBk
06:35:04*dadada quit (Ping timeout: 255 seconds)
06:35:55*dadada joined #nim
06:36:16FromDiscord<mfiano> That's what I thought. Sorry for being such a newb. This is the first time I'm actually trying to write Nim code after just reading NIA for a couple months. I never had to distinguish between values and references in any language before. Appreciate all the help
06:36:19*dadada is now known as Guest60452
06:36:39FromDiscord<Elegant Beef> What language are you from?
06:36:48FromDiscord<mfiano> So, I suppose I wasn't too far off in my original paste. Just forgot to assign the slots of vec in the function and set the result
06:36:52FromDiscord<mfiano> Common Lisp
06:37:47*actuallybatman quit (Ping timeout: 260 seconds)
06:38:41*actuallybatman joined #nim
06:41:45*Hideki_ joined #nim
06:45:34shashlick@leorize: yep - just checkout latest master, nimble test - should run all tests as well and give you a binary as well
06:46:38*Hideki_ quit (Ping timeout: 265 seconds)
06:53:25silvernodeIs there a way in nim to listen for a key to be pressed? Like if I had a menu that said Press 1?
06:53:35silvernodeinstead of typing the key and then pressing enter
06:53:46FromDiscord<Elegant Beef> Could use something like SDL or GLFW
06:53:54silvernodeBasically Event handling
06:54:10FromDiscord<Elegant Beef> Yea both those can easily handle inputs
06:54:26FromDiscord<Elegant Beef> Be it mouse,keyboard or gamepad
06:54:50silvernodebut can nim do this on it's own?
06:55:36FromDiscord<Elegant Beef> I think so, it requires either reading from the file that is keyboard on mouse, or doing something with the stdin
06:55:46FromDiscord<Elegant Beef> keyboard or mouse*
06:56:06FromDiscord<Elegant Beef> Assuming you're on linux, the file thing would work
06:56:13*SunDwarf quit (Ping timeout: 255 seconds)
06:57:47leorizesilvernode: you're doing it on the terminal, right?
06:57:52leorizeterminal.getch()
07:00:14*silvernode quit (Ping timeout: 256 seconds)
07:00:21*SunDwarf joined #nim
07:07:40leorizeshashlick: do I have to update my nimterop?
07:14:24*solitudesf joined #nim
07:21:15shashlickdon't think so
07:25:41leorizethe answer was yes :P
07:25:52leorizemy nimterop got a ton of assertions error
07:26:16leorizeso I decided to do what a sensible nimble user would do: wipe their nimble dir because you can't trust it
07:26:30leorizegot everything working now, running the tests atm
07:31:34*s4mu3lbk joined #nim
07:32:03shashlickawesome
07:32:27shashlickjust completed a major refactor of the plugin system
07:32:50shashlicklqdev should perhaps like it a bit more
07:33:01*circ-user-tbRTC joined #nim
07:33:09shashlickand now plugins are much smaller in size since code isn't duplicated
07:54:19leorizeshashlick: pm-ed
07:59:13*solitudesf quit (Ping timeout: 255 seconds)
08:00:00*gmpreussner_ quit (Quit: kthxbye)
08:04:29*nsf joined #nim
08:04:52*gmpreussner joined #nim
08:10:05FromDiscord<Rika> what's the termios of nim?
08:11:42leorizeterminal.nim?
08:12:16FromDiscord<Rika> wait, theres a termios.nim too in stdlib
08:12:17FromDiscord<Rika> lmao
08:12:20FromDiscord<Rika> okay thanks
08:13:01*Trustable joined #nim
08:24:02*Trustable quit (Remote host closed the connection)
08:26:41*narimiran quit (Ping timeout: 265 seconds)
08:28:22*okcy quit (Quit: Quit)
08:49:36*zahary joined #nim
09:19:20*zahary quit (Quit: Leaving.)
09:22:11*zahary joined #nim
09:33:16*alexander92 joined #nim
09:33:56alexander92morning!
09:39:47*dddddd quit (Ping timeout: 260 seconds)
09:41:27*lbart quit (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
09:51:34*krux02 joined #nim
09:52:13*lbart joined #nim
09:52:17*jjido joined #nim
10:06:47*nsf quit (Quit: WeeChat 2.7)
10:08:04*jjido quit (Quit: My MacBook has gone to sleep. ZZZzzz…)
10:08:06*narimiran joined #nim
10:09:43*chemist69 quit (Ping timeout: 272 seconds)
10:10:27*chemist69 joined #nim
10:19:44FromDiscord<Rika> is there a point of me trying to rewrite linenoise in nim xd
10:19:56alexander92wow
10:19:59alexander92why :)
10:20:15FromDiscord<Rika> dunno really
10:20:19FromDiscord<Rika> wanted to extend it
10:20:27FromDiscord<Rika> but it's pretty complicated to understand
10:22:48alexander92hm, but do you target only linux?
10:23:16alexander92i am all for it if you find it a cool exercise
10:23:46alexander92but you'll probably need to understand much of https://github.com/antirez/linenoise after that anyway :) or to limit a bit your scope
10:24:08alexander92but it could be a good purely learning thing
10:25:19FromDiscord<Rika> so far i've written up to completions
10:25:38FromDiscord<Rika> but i'm unsure of how to read stdin w/o needing an enter
10:26:46alexander92hm, what kind of app do you write
10:27:02*Zectbumo joined #nim
10:27:10FromDiscord<Rika> still the linenoise port
10:27:20*jjido joined #nim
10:30:53alexander92but what i mean is
10:30:56alexander92what do you use it for
10:31:11alexander92like, do you wrtie a repl or other console app
10:31:24FromDiscord<Rika> i'm just writing it
10:31:36FromDiscord<Rika> i have no use for it yet, i'm just gonna extend it (maybe)
10:31:54alexander92okk
10:34:52*clemens3 quit (Quit: reboot)
10:35:07FromDiscord<Rika> ah, it's the linenoiseRaw thing that allows for reading stdin w/o pressing enter or smth
10:36:31FromDiscord<mfiano> Where in the manual are the semantics of module imports described?
10:38:57*lritter joined #nim
10:41:59FromDiscord<Rika> ;; wtf is cvec in linenoise completions struct ;;;;;
10:42:04FromDiscord<Rika> sorry, rambling
10:42:28FromDiscord<Rika> @mfiano https://nim-lang.org/docs/manual.html#modules ?
10:43:08FromDiscord<mfiano> Thanks. searching for "modules" just returned results of different modules 😦
10:43:21*Hideki_ joined #nim
10:45:50*sealmove joined #nim
10:46:56FromDiscord<Rika> ctrl+f πŸ˜„
10:47:55*Hideki_ quit (Ping timeout: 260 seconds)
10:48:08FromDiscord<mfiano> Yeah i searched throw a couple results until I gave up and checked the index to find `import` not even listed lol
10:48:15FromDiscord<mfiano> err through
10:48:54FromDiscord<mfiano> Manual is definitely not the easiest to navigate compared to some other languages, but I like Nim too much to stop learning from something that will inevitably change given its current state πŸ™‚
10:49:30Araqdisruptek: can you create a PR for the fix/progress on IC?
10:55:11sealmovemfiano: what do you dislike about it? the fact that it's single-paged?
10:56:54FromDiscord<Recruit_main70007> @mfiano ^
10:57:00*Zectbumo quit (Remote host closed the connection)
10:58:02FromDiscord<Rika> i'm guessing its that you cant collapse the sidebar tree?
10:58:29*hax-scramper joined #nim
10:59:36*hax-scramper quit (Client Quit)
10:59:51*hax-scramper joined #nim
11:17:08*jjido quit (Quit: My MacBook has gone to sleep. ZZZzzz…)
11:25:50*nsf joined #nim
11:30:52*circ-user-tbRTC quit (Remote host closed the connection)
11:30:52*s4mu3lbk quit (Remote host closed the connection)
11:36:38*narimiran quit (Ping timeout: 265 seconds)
11:45:16*s4mu3lbk joined #nim
11:46:12Zevvoi sealmove
11:48:03*Trustable joined #nim
11:48:14*Vladar joined #nim
11:50:14*Vladar quit (Read error: Connection reset by peer)
11:50:40*Vladar joined #nim
11:52:33*zahary quit (Quit: Leaving.)
12:00:46*filcuc joined #nim
12:02:52*solitudesf joined #nim
12:04:11lqdev[m]the rust docs are a breeze to navigate, compared to nim
12:04:24lqdev[m]but if you know where to look it's not that bad
12:06:58*Vladar left #nim ("Leaving")
12:10:14*filcuc quit (Ping timeout: 258 seconds)
12:10:28*filcuc joined #nim
12:29:09*Kaivo quit (Quit: WeeChat 2.7.1)
12:38:31sealmoveyo Zevv
12:40:56*jjido joined #nim
13:16:29Zevvtell me, why do you keep insisting to parse yaml with npeg? :)
13:16:46Zevvlife is so full of other things that are more fun then that
13:17:07Zevvlikem putting a stapler against the forehead, for example
13:18:32Zevvone of the large ones, the pneumatic type
13:19:26*xet7 quit (Remote host closed the connection)
13:20:32*xet7 joined #nim
13:20:32FromDiscord<Rika> why a stapler
13:20:43FromDiscord<Rika> why not a nail gun or something
13:23:29sealmovexD
13:23:37*theelous3 quit (Read error: Connection reset by peer)
13:24:11sealmovewell, I don't know any better options
13:25:08sealmoveif I hand-write it then I would essentially make a parser combinator on the way, which npeg is similar to
13:25:37*clyybber joined #nim
13:30:00Zevvand why does the yaml nimble lib not help you again?
13:30:54sealmovedoesn't work at CT
13:34:17Zevvoh yeah right. Shouldn't we just fix that instead
13:35:52*clemens3 joined #nim
13:37:50sealmovesure
13:39:02clyybberwhy would npeg not be able to parse yaml?
13:40:57sealmovehttps://github.com/flyx/NimYAML/issues/70
13:41:26*clemens3 quit (Quit: reboot)
13:42:55sealmoveI don't know if it's easier to build it from ground, or understand NimYAML's codebase and make it work at CT.
13:43:53*hax-scramper quit (Quit: Quit)
13:44:07*hax-scramper joined #nim
13:49:07Araqwhy do you need to parse yaml at compile-time?
13:50:16*rockcavera joined #nim
13:50:33*clemens3 joined #nim
13:55:10sealmoveKaitai Struct grammar input file format is a subset of YAML, then I want to make something like this possible:
13:55:17sealmoveimport nimitai, kaitai_struct_nim_runtime
13:55:20sealmoveinjectParser("gran_turismo_vol.ksy")
13:55:22sealmovelet x = GranTurismoVol.fromFile("vol1.bin")
13:56:45sealmoveessentially injecting in your binary a parser for any file format, given a file format grammar in Kaitai Struct syntax (which again, is a subset of YAML)
13:58:06sealmoveexamples here: https://formats.kaitai.io/
14:03:01*dddddd joined #nim
14:10:37*nsf quit (Quit: WeeChat 2.7)
14:12:23*xet7 quit (Quit: Leaving)
14:14:11Araqah I remember, ok
14:17:36*narimiran joined #nim
14:18:50*hax-scramper quit (Ping timeout: 240 seconds)
14:19:03*manuel quit (Client Quit)
14:30:00*okcy joined #nim
14:33:01dom96It's pretty bad that I can't build choosenim on my computer anymore
14:33:43clyybberdom96: Why is that?
14:34:29dom96https://gist.github.com/dom96/8e96ea883a32ab9ff00f3fb0cf476828
14:35:25dom96Guessing that nimarchive is downloading and extracting the bzip source code...
14:35:49dom96or rather, looks like this is how nimterop works
14:36:34*okcy quit (Ping timeout: 255 seconds)
14:36:39dom96hilarious https://gist.github.com/dom96/9ed87b496c0301267a399de32f3de165
14:38:15clyybberlol
14:38:54dom96this is really bad for reproducible builds
14:39:42Araqping shashlick about it
14:40:44Araqmy cycle breaker works for hamming.nim
14:40:46*okcy joined #nim
14:41:02Araqand that's pretty exciting because nothing else worked before
14:41:54clyybberAraq: but its manual. It's not a solution to cyclic graphs in general
14:42:06clyybberjust in cases where you already know you don't need them anymore
14:42:17clyybberwhich you usually don't with arbitrary cyclic graphs
14:45:03*Hideki_ joined #nim
14:46:01*hax-scramper joined #nim
14:47:27dom96https://github.com/nimterop/nimterop/issues/170
14:47:43dom96So, how can I disallow a package that can shell out to access the internet?
14:49:08Araqthat's like saying "well, but you only managed to turn lead into gold, not into platinum"
14:49:14*Hideki_ quit (Ping timeout: 240 seconds)
14:50:16dom96I'm sorry to single out shashlick's package, but IMO what it does is exactly what will cause Nimble's complexity to spiral out of control and the only way I can think of to prevent this is to disallow any and all downloads by packages.
14:50:33FromDiscord<Varriount> I thought cycle breaker was automatic?
14:50:57disruptekdom96: the problem is the power of nimscript itself. if you run it at all, you're opening up these issues.
14:51:07dom96disruptek, I agree
14:51:14Araqnimscript cannot download stuff
14:51:20clyybberVarriount: A cycle collector is.
14:51:28clyybberBut Araq changed his approach
14:51:30dom96the problem is that nimscript can shell out to anything
14:51:31disruptekit can run an external command, eg. a script that is part of the repo.
14:51:45Araq'nim check' cannot for example
14:51:56Araqas 'nim check' doesn't run staticExec
14:51:57disrupteknimph originally did not run nimscript at all, but people want this behavior.
14:52:06clyybberAraq: It is, but a cycle collector can deal with that, while the cycle breaker cant :)
14:52:17Araqnimscript is well prepared to prevent this from happening
14:52:18disruptek"people that cry `security` are trolls" -- paraphrased araq
14:53:01dom96Allowing nimscript in Nimble gives people a lot of flexibility, but indeed, it's at a massive cost in complexity
14:53:17*Araq sighs
14:53:34disrupteki have come around on this.
14:53:36Araqinsufficient problem analysis here we come
14:53:42disrupteki think you let nimscript do whatever it wants.
14:53:56disruptekthis is the wrong place to solve this "problem".
14:54:29Araqso what's this "massive cost in complexity"?
14:54:53clyybberIts nimterops problem, not ours
14:54:54Araqand what exactly is the alternative? makefiles can run curl too
14:55:12Araqok, so never run makefiles
14:55:30dom96yeah, and that's why makefiles suck
14:55:53Araqfeel free to disable staticExec for Nimble, it's like one line of code
14:56:09AraqI won't mind
14:56:13dom96sure, I might do that, but ideally I would like some way to allow staticExec with no network
14:56:58dom96and maybe provide an API in Nimble for downloading archives
14:57:06clyybberugh
14:57:12clyybberstaticExec with no network?
14:57:16clyybberhow would that work
14:57:50clyybberdom96: I agree that it sucks here, but thats nimterops fault and not nimscripts
14:57:52Araqnot at all, rename curl to lruc temporarily and staticExec lruc instead
14:58:14dom96afaik on Linux at least you can set up a sandbox without a network and exec stuff in that
14:58:44Araqso then Nimble would download https://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz. instead, what's the point?
14:58:44clyybberdom96: That is "massive complexity" :)
14:58:56dom96clyybber, indeed :)
14:59:21clyybberdom96: Solution: Pull bzip into the repo or use submodules
14:59:28Araqdo you complain about the download or that your precious Nimble doesn't do the download?
14:59:38dom96Araq, lol?
14:59:39Araqbecause it feels like the latter
15:00:02dom96yes, I only care that my precious application does everything
15:00:22dom96that's why I have created nimkernel, why is nobody running all their code on that yet?!
15:00:40Araqwell ok
15:00:51Araqso why would Nimble offer an API for it?
15:01:58dom96Because Nimble could do things like only allow downloads from trusted domains
15:02:17dom96and make it very clear that a download failed
15:02:48dom96In this case I had to dig really deeply to understand that the website returned a 403, the niminterop script happily attempted to extract it
15:03:18dom96I would only offer this if there really was a clear use case for it though
15:03:29clyybberdom96: Its not better though
15:03:41*xet7 joined #nim
15:03:49dom96Just an option in case a use case presents itself after I disable all networking in Nimble
15:03:49clyybberIn fact I think ideas like, package manager requirement/lockin and trusted domains are really bad
15:04:20disruptekagree.
15:04:59disrupteksomeone wrote recently "Downloading archives in general during build times is flaky. The user has no control over the download and may not want the internet to be accessed at all."
15:05:44AraqI agree completely but don't blame Nimscript, blame staticExec
15:05:53clyybberblame shashlick :p
15:06:04disruptekthe irony is that nimterop has been a blessing and a curse not because of downloads but because of its staticExec of `nimble path`.
15:06:33dom96clyybber, no, don't blame singular people please, it's not nice. Most of us are volunteering our time for these projects and we do our best :)
15:06:40disrupteki say make nimscript more powerful and use it in more places.
15:06:48AraqNimscript doesn't even allow the FFI and has a limit on the number of iterations to prevent endless loops, it's a quite capable sandbox
15:07:12Araqin fact, people complain about these limitations all the time.
15:07:20clyybberdom96: It was tongue in cheek :)
15:07:21dom96Araq, sure, I shouldn't have said that I blame nimscript. You're right, staticExec is to blame.
15:07:24disruptekshashlick's stuff is central to everything i write. i'd be nothing without his shoulders.
15:08:08dom96Araq, but actually, disabling it in nimscript won't help.
15:08:15dom96Nim source code can still staticExec :(
15:08:39dom96and this could then download things at build time, in fact this might be how nimterop does it
15:08:40Araqyeah
15:09:12Araqas I said, 'nim check' and 'nimsuggest' don't run it
15:09:29Araqmaybe it's time to make it opt-in during compiler runs
15:10:02Araqlike --enable:staticExec
15:10:20disruptek--trust --notrust
15:10:27Araqnot sure if it helps, Ormin and Lexim need it too
15:10:38Araqand they don't use nimterop
15:10:43disruptekit shouldn't be limited to staticExec; there are likely other taints, right?
15:10:47dom96again, the ideal would be if we could sandbox it, but that's definitely not trivial
15:11:04disruptekit's not as hard as you think.
15:11:07clyybberand its not our business
15:11:13disruptekthis stuff is in the vm.
15:11:23Araqwe can sandbox it quite a bit but it's kind of reinventing the OS's mechanisms to do that
15:11:28clyybberexactly
15:11:48dom96I doubt there is a cross-platform mechanism for this that works on Windows/Mac/Linux
15:11:51*aeverr joined #nim
15:11:53disruptekbut a taint mode could be a middle ground.
15:12:30clyybberand what would that be?
15:13:49disrupteki'll make a pr to cherrypick the two important fixes, but the ic approach i have now is temporary, hopefully. i hate it.
15:14:05Araqdisruptek: thanks
15:14:14clyybberdisruptek: Did you get it working last night?
15:14:38disrupteki dunno. i think it has been working for a day or two.
15:14:48disruptekbut, y'know, not for recompilation of generics.
15:14:56clyybberdisruptek: I mean the toplevel statements
15:15:04disruptekoh, yeah.
15:15:08clyybbernice
15:15:17disruptekno, it's a terribly ugly approach.
15:15:23clyybbernope
15:15:30clyybberok lets ask Araq
15:15:39disruptektoo early even to review anything, honestly.
15:15:50clyybberAraq: Is it bad to use the module as a sym for toplevel statements?
15:16:09disruptekthat's not the problem.
15:16:33Araqclyybber: sounds like good idea
15:16:50clyybberdisruptek: boom! :p
15:16:54disruptekit's the litter across the codebase that i don't like.
15:17:00clyybberdisruptek: fair enough
15:17:18disruptekand i don't want to stuff data into sqlite and then pull out an id and use it to construct a nim obj.
15:17:35disruptekleaky.
15:19:45*dom96 considers implementing lock files for Nimble today
15:20:54clyybberAraq: I want to fix the link cmd spam. I'm thinking of adding an argument to execWithEcho or the like so that we can run a command but hide it.
15:21:00clyybberOr should I just revert https://github.com/nim-lang/Nim/pull/13056 ?
15:21:08*clemens3 quit (Quit: boottesting)
15:21:10shashlickYawn, couldn't you all let me sleep in on Saturday?
15:21:35dom96shashlick, no better way to start a Saturday :D
15:21:55shashlickIf you don't want nimterop to download from the internet, there's hundred other ways to get bzip
15:22:21shashlickWhy take a bug in download so far?
15:22:37dom96nimterop shouldn't allow downloading the source from the internet
15:22:49dom96you should force its users to include it in the git repo or as a submodule
15:23:34*sealmove quit (Quit: WeeChat 2.7.1)
15:24:48*abm joined #nim
15:25:04shashlickAraq made the make file comment a while ago
15:25:20shashlickPart of nimterop is doing build related stuff
15:25:30shashlickWhy should that be prohibited
15:25:49dom96Did you see https://github.com/nimterop/nimterop/issues/170?
15:26:09Araqclyybber: I dunno
15:26:27AraqI added hint[Link]:off to my config
15:26:41clyybberYeah, I know.
15:26:56clyybberBut link hint shouldn't show the comand by default
15:27:02clyybberthats just insanely annoying
15:27:12Araqhmmm
15:27:36Araqthe default config should have this too then
15:27:57clyybberBut its still valuable to know that its linking, I guess
15:28:10Araqis it? who cares
15:28:12shashlickIt only downloads the first time, after that, it is cached
15:28:34clyybberAraq: I dunno, but I had gcc hang up during linking sometimes
15:28:39clyybberthat were gcc bugs tho
15:29:10Araqin an ideal world we could show "Linking" if it takes longer than 0.5s
15:29:12clyybberAraq: Or we remove linkHint and make it use hintExec?
15:29:31shashlickBy your logic, we shouldn't use nimble to download dependencies during build either
15:29:42*okcy quit (Ping timeout: 268 seconds)
15:29:59Araqclyybber: just do something you consider wise
15:30:30clyybberok
15:32:25*xet7 quit (Quit: Leaving)
15:32:33Araqshashlick: I've said it before, the whole setup is messy, ideally there is a bunch of .nim files that interface to a DLL, I don't care about C header files and their #define junk
15:32:56Araqif the .nim files are generated code, so be it
15:32:59FromGitter<melMass> Does anyone heard of a threejs wrapper for nim ?
15:33:23Araqstill I want to read them, have them in the git repo and treat them as other Nim code
15:33:53shashlickAraq: nimterop isn't just about wrapping
15:34:06shashlickThere's hundreds of lines of code related to build
15:34:07Araqand I want the Nim code to have 'when defined(windows)' sections, not Nim code tied to an OS
15:34:07dom96shashlick, yes, Nimble downloading dependencies can also be flaky if github (or some other git host) fails which is why we need a central package repo eventually.
15:34:26dom96Downloading archives from third-party websites adds to the risk
15:34:35Araqor Nim code tied to the current Gtk installation
15:34:58clyybbershashlick: Unrelated, but WDYT about seperating nimterop into different packages?
15:35:05Araqto name a different, realworld example
15:35:39clyybbers/different/multiple
15:35:54shashlickclyybber what's the point, users now have to depend on two things and nimble will have to download both
15:35:58AraqmelMass: no but interfacing to JS is quite simple
15:36:09clyybbershashlick: I can only speak from my experience
15:36:19clyybberI avoid nimterop because its big and complicated to me
15:36:23clyybberAnd does so many things
15:36:31clyybberwhile I want it to just make a wrapper and be done
15:36:41shashlickdom96: if you want to install bzip2 on you system yourself, nimterop will be happy to use that
15:36:42*clemens3 joined #nim
15:36:50FromGitter<melMass> @Araq thanks I'll be the one making it then :)
15:36:58FromDiscord<Recruit_main70007> i dont know if u remember, but i asked for DllExport function in nim, does anyone remember the steam related project they sent me that used it?
15:37:13shashlickClyybber: you can readily do that today
15:37:14clyybberRecruit_main70007: It was me
15:37:28clyybberhttps://github.com/xomachine/SteamForwarder
15:37:54clyybbershashlick: Generating a single wrapper file thats standalone?
15:38:09shashlickHonestly nimterop is a drop in the bucket in terms of size, if you compare with the compiler
15:38:11dom96shashlick, why don't you include it in nimarchive as a git submodule?
15:38:46clyybbershashlick: Yeah, but I know I had a bit of a hard time getting it to work without nimble
15:39:00FromDiscord<Recruit_main70007> thanks clyybber
15:39:01shashlickLike I said, nimarchive and nimterop first use the standard install of bzip2 and other deps
15:39:10shashlickThis isn't available on things like windows
15:39:28shashlickClyybber you don't need to do it at compile time
15:39:30*melMass joined #nim
15:40:20dom96shashlick, that in itself seems unreliable. What if the system has an old bzip2 version?
15:40:30shashlickI'm not an advocate of my way only - I've tried to make it possible to wrap like c2nim as well
15:41:08shashlickSure then you as a user can decide to build it yourself and install it system wide
15:41:19dom96but whatever, it still doesn't explain why using a submodule won't be possible. Just ignore it if the system already has bzip2 installed?
15:42:23shashlickThat's like arguing with Stefan about using nimble instead of shell scripts and git submodules
15:42:39*hax-scramper quit (Ping timeout: 265 seconds)
15:42:51melMassSorry if it was answered already but I had update troubles in Nim Gitter: Is it possible to use C++ namespaces with dynlib ? `dll.symAddr("MTB::loadShaders")` is not accepted
15:42:52*hax-scramper joined #nim
15:43:01shashlickWhat's wrong with downloading an archive versus some repo with git
15:43:05dom96shashlick, no it isn't. Stefan's deps were Nim pckages.
15:43:12AraqmelMass: beyound our control
15:43:20dom96shashlick, what's wrong is that the HTTP server returns a 403 and the package is broken
15:43:43dom96i just want to build choosenim, that's all, it shouldn't be this hard
15:43:48melMass@Araq so I can't use namespaces in C++ ?
15:44:02shashlickThat doesn't explain away the comparison
15:44:02melMassif I want to call it from nim
15:44:07AraqI don't know, never tried to use namespaces for C++ DLLs
15:44:19shashlickAnyway, point is that you can avoid it if you want
15:44:24Araqif DLLs generally support that, so should Nim
15:44:28Araqif not then not.
15:44:30shashlickBut nimterop is about making life easier for users
15:44:58shashlickIs this is a problem, it can be solved instead of telling the user, hey go and figure out the dependency yourself
15:45:04melMass@Araq it should at least using the mangled name but I failed, I'll try harder, thanks
15:45:10Araqwell it hasn't made it easy for dom
15:45:44shashlickBugs don't justify throwing everything away
15:45:45dom96I literally cannot build this, and have no idea how to fix it.
15:45:53shashlickWe routinely fix stuff
15:46:01shashlickAnd improve stuff
15:46:14dom96That's true, so it seems we disagree how to fix this
15:46:24dom96What do you propose?
15:46:27clyybberMaybe submodules are the way here
15:46:36Araqwell I'm concerned about the architecture fwiw
15:46:41clyybberAnd nimterop can just init them if they are needed
15:46:47clyybberand if not, then not
15:46:49shashlickYou are telling me to throw out a convenience cause it didn't with in one case
15:46:49Araqbut I've raised my concerns before so I can shut up
15:46:54dom96clyybber, nimble will already do that
15:47:14Araqbugfixes never fix problems in the architecture
15:47:25clyybberdom96: But nimterop has additional logic. It may not need the submodule when bzip is on the system
15:47:42dom96clyybber, that's fine, it doesn't need to use it
15:47:43FromGitter<melMass> @Araq that't a perfect sentence to put on a tshirt
15:48:11shashlickNimterop also supports git by the way
15:48:32dom96Please, answer my question, how do you propose we fix this?
15:48:34shashlickBut not as submodules - that would fall outside its purview
15:48:43dom96You know my view, so tell me yours
15:49:04shashlickWe find out why that url is breaking and find another reliable way to get the source
15:49:51dom96Okay, well to me that isn't good enough
15:50:53dom96I am effectively blocked from building choosenim because of this. If you weren't around I could be waiting for days to know how to resolve this, or worse have to dig into nimterops source code to see that I can install bzip2 myself (somehow, I would have to find out how to do so myself too)
15:51:54Araqdom96: now imagine this happens to me with 'brew' and 'apt-get' and ... do you see why I don't like package managers?
15:52:01Araq;-)
15:52:41shashlickYou all seem to make it seem like using automated tools is bad and doing things manually is better
15:52:47Araqnot that it matters though, brew stopped to support my version of OSX
15:53:36shashlickIt's not any more reproducible
15:53:56shashlickUsing git or some central repo or any other solution
15:54:21clyybberIt is more reproducable using git.
15:54:36shashlickOn what basis
15:55:00clyybberon the basis, that when I clone it it works
15:55:15*clemens3 quit (Read error: No route to host)
15:55:17dom96Araq, yes, and perhaps there is no way to avoid these problems.
15:55:25shashlickI've had many build failures where github is out to lunch
15:55:47*okcy joined #nim
15:55:54clyybbershashlick: And then you can ask every other person who has that repo cloned to give it to you
15:56:47shashlickAnd they will tar gz it and send it to you right
15:56:58shashlickAnyway, let me think for some time
15:56:58*okcy quit (Remote host closed the connection)
15:57:03Araqshashlick: I can follow a recipe to make cake and in the end I'll have a cake. Yet I cannot operate your cake factory.
15:57:21*clemens3 joined #nim
15:57:24dom96Most of our packages are already in GitHub
15:57:25Araqwe had the same story with build_all.sh
15:57:59Araqwe had 6 instructions how to get a Nim, now we have a build_all.sh
15:58:06*okcy joined #nim
15:58:09clyybberAraq: Are you some kind of quote generator? I don't have so many walls to hang all that up
15:58:20dom96grabbing dependencies from other websites increases the chances that something can go wrong.
15:58:49shashlickI am not married to any one approach but debating like there's only one ideal perfect way is what's wrong with the world today
15:59:12disrupteki have to take shashlick's side here, because again we're bikeshedding solutions that don't exist.
15:59:25disruptekif you have a problem with it, you know what to do.
15:59:53dom96disruptek, huh? solutions do exist. I suggested one.
16:00:02disruptekprs welcome.
16:00:22dom96Have nimterop enforce git submodules and disallow downloads from arbitrary URLs
16:00:28Araqshashlick: ok, fair enough, it's a valid view
16:00:46dom96This isn't about perfection, this is about solving a very real problem that I faced today
16:00:54dom96Which makes all of our lives easier
16:01:04clyybberno, don't enforce it
16:01:07Araqdom96: yet the problem could be the same, unclear error message, no idea how to proceed.
16:01:29disruptekwrite the "fix". then we can debate apples to apples.
16:01:29Araqwhen git submodules fail I know I'm lost too.
16:02:11*nixfreak joined #nim
16:03:09okcybecause the parent repository has moved too?
16:03:33clyybbergit submodules rarely fail and if they do, it tells you where
16:03:48clyybberand then you can just download some snapshot or some archive of that repo
16:03:51clyybberand put it there
16:04:06clyybbermaybe thats all that needs fixing here
16:04:16AraqI had to use them in the past, I'll never use them again. That's all I know
16:04:22clyybbershashlick: Just printing out the folder where it failed to download it to?
16:04:39clyybberAraq: lol. git has been buggy with them before
16:04:42clyybberbut its fine now
16:04:43disruptekAraq: at least your experience is easy to express. 😁
16:04:46clyybberbut it used to suck
16:05:07shashlickNimterop cannot get into the submodules business because the repo is already checked out by nimble
16:05:34clyybberAraq: OTOH mercurials subrepositories always just worked TM
16:05:36shashlickIt already supports pulling from git though
16:06:03Araqclyybber: I view git like I view an OS. The less you use of it, the fewer problems you will have.
16:06:09dom96Nimble will check out the submodules for you
16:06:24clyybberAraq: Yeah, thats fair
16:06:53Araqthe alternative is to care about "signal handler safety" and symlinks pointing themselves for every single program you write.
16:07:25shashlickYes but nimble has already checked out the repo for you
16:07:33shashlickAnd now nimterop is running
16:08:00shashlickYou are suggesting adding submodules setup to nimterop when nimble should be the one doing it
16:08:03dom96But you're right, a git submodule could just as easily point to a URL which does not exist or returns a 403
16:08:21shashlickWhich means it's the user's problem to do that from nimterop perspective
16:08:33dom96yes, the user should set up a submodule
16:08:46*Vladar joined #nim
16:10:17*okcy quit (Quit: Quit)
16:10:38dom96so yeah, we have no "solution", disruptek was right all along
16:11:05Araqwe could still fix nimterop's architecture though
16:11:20Araqand with 'we' I mean 'you'
16:12:47dom96Do you have ideas on how it could be fixed? Because I can't think of anything
16:14:01dom96I suppose you propose that the wrapper should be generated by nimterop and then committed into git?
16:14:06clyybberShould we always show the run command with `-r` ? Or only with `--listCmds` ?
16:14:08*zahary joined #nim
16:14:30Araqdom96: exactly
16:14:43shashlicknimterop already allows you to just point to an existing source location
16:14:58shashlickso if you want to set it up some other way, it is already possible
16:15:30disruptekas i understand it, the problem nimterop solves is that it builds the wrapper on the target platform.
16:15:31dom96shashlick, can you set up nimarchive that way so that I don't have to worry about it when building choosenim?
16:17:27Araqwhat existing source location? I want to do 'nimble install gtk6' and 'import gtk6' and then have Nim code that is as good as a hand written wrapper, gtk6's author might have used nimterop to build the wrapper
16:17:45disruptekbut on which platform was the wrapper built?
16:18:24shashlickdisruptek: wrapper author would have to check in the generated wrapper for each OS
16:18:28Araqwhy does it matter? c2nim translates #ifdef into 'when'
16:18:44disrupteki'm just trying to explain why nimterop works the way it does.
16:18:44shashlickAraq: you know nimterop doesn't work in that way
16:18:51Araqsee that's the problem with the approach, you made it platform specific
16:19:01shashlickit is and I've argued about that as well
16:19:09dom96if platforms are a problem then you could run nimterop for each os/cpu and then create dummy modules with `when defined(windows): import windows_gtk6 ...` etc
16:19:26shashlicksomehow it is okay to run Nim and gcc at compile time but not a wrapper generator
16:19:28Araqor you diff the results and re-introduce a 'when'
16:19:51Araqshashlick: not the point
16:19:57Araqthe point is this:
16:21:31Araqto generate Y.nim you need Y.h in the right version plus its deps plus nimterop in the right version. Afterwards Y.nim is self-contained. so what do you ship to your users? Y.nim, not all the stuff you needed to have around for generating Y.nim
16:22:17clyybberAraq: AFAI understood nimterop doesn't ship the Y.nim
16:22:28Araqminimize the complexity, not maximize it.
16:22:31clyybberbut instead nimterop and all thats needed to make Y.h
16:22:37clyybberand that is my problem with it
16:22:40*zahary quit (Quit: Leaving.)
16:22:59clyybberbut I gotta look into doing what shashlick said (using it like c2nim) before I continue talking
16:23:05leorizedom96: ah so you have to download bzip2
16:23:16leorizethat's why my nimterop crashed when I built choosenim for shashlick
16:23:34shashlickAraq: I would do that if it were possible to automate but it is not
16:23:40leorizethough I just wipe my nimble dir and carry on :P
16:23:48shashlickunless you write a full preprocessor parser yourself
16:23:49dom96leorize: why were you building choosenim for shashlick?
16:24:01shashlickeven clang does not provide access to this info
16:24:06leorizehe need a musl libc-based static version
16:24:14shashlickso your only alternative is to manually do that like you have with c2nim
16:24:22shashlickthat alternative already exists and is well known
16:24:28shashlicknimterop takes a different approach
16:24:39shashlickit delegates the preprocessor to the preprocessor
16:24:47dom96leorize: huh, what for?
16:25:00shashlickthat does make it platform specific, it is also compiler specific
16:25:03leorizedom96: well ask the man shashlick :P
16:25:32shashlickdom96: for people who live on musl systems
16:26:05dom96shashlick, is this what we ship?
16:26:09Araqnow let's see if it would have prevented dom96's problem. Yes, it would. he would have libbizkid.nim interfacing to libbizkid.so which happens to exist on his machine. and if not, he knows how to get it
16:27:58shashlickno the CI builds all the regular binaries
16:28:15shashlickthere's just one musl binary that I've not added to the CI yet
16:28:27dom96shashlick, okay, good. So it was just for testing I assume.
16:28:47leorizeshashlick: afaict the void docker image you linked could be used as a base
16:28:48shashlickAraq: dom96 is not okay with using bzip2 installed by the PM
16:28:55shashlickleorize: will do
16:29:43Araqshashlick: the complex setup would have shifted to a selected set of people, those who wrote the wrapper
16:30:09Araqnow the complex setup is on every user.
16:30:58Zevvsealmove: it is an utter mess of ad hoc garbage, I'm not doing it
16:30:59Araqat the same time you're more important than ever to the Nim community so that nimterop keeps working
16:32:01AraqI mean, it's awesome you're part of the Nim community, don't get me wrong
16:32:18shashlickdom96: I posted the musl build leorize created for v0.5.1 on the releases page - did you not want to do that?
16:32:27Araqbut I don't understand why you don't see how fragile your solution really is?
16:32:53shashlickAraq: I am aware of the compromises, we have discussed these before
16:33:14shashlickbut it is a different approach that also allows for the c2nim style if you really want it
16:33:28leorizewell I gotta say nimterop just works once you got your nimble properly setup
16:34:03dom96shashlick, generally I would prefer to avoid having people I don't know building choosenim, it adds risk :)
16:34:51shashlickthe c2nim style just isn't built in yet to run in a standalone mode seamlessly but it is possible
16:34:55shashlickit is manual work today
16:35:03shashlickand you have to do it for every single platform you want to support
16:35:25shashlickbut you have to build over time, it cannot be ideal today
16:35:49Araqthere is a compromise so please listen carefully
16:35:52shashlickdom96: ok will get the CI to do it
16:35:58shashlickleorize: sorry buddy
16:37:54leorizeits alright :)
16:39:20Araqshashlick: how about you really ship windows/y.nim, linux/y.nim, osx/y.nim chances are high I can adapt the osx version to BSD, for example.
16:41:09Araqit's not like you really support BSD with the current approach, it's mostly "we claim it works since nobody ever tried it"
16:43:15Araqthen I can 'import y', y.nim is platform specific Nim code but at least it's Nim code some other soul might have imported too
16:43:40Araqand not Nim code specific to my local machine
16:45:05*narimiran quit (Ping timeout: 258 seconds)
16:46:12AraqI mean ... how do I then do cross builds? say I build it my stuff on Linux, then I collect the .nim files my project consists of, I move to Windows, kaboom, cannot compile it on Windows
16:51:01shashlickDriving, will check soon
16:55:11clyybberwhy tf can't you reopen a pr you forced push to ...
16:55:54zedeushttps://lwn.net/SubscriberLink/813827/5a28c7fcd5ffadbb/
16:58:33leorizeAraq-wisdom is always correct, just use less of your OS and you get less problems
16:58:45shashlickAraq: that's the beauty of the nimterop method, it will work on BSD since it is running on the target machine with the target compiler
17:00:16shashlickAt the same time, it is a big claim since I've not tested it and there surely will be bugs
17:00:39shashlickBut in principal, it runs the local preprocessor, local compiler, etc
17:01:48*abm quit (Quit: Leaving)
17:02:14shashlickI am not able to support cross compilation because all Nim os procs run based on the target os at compile time instead of the host os
17:03:11shashlickSo your separator becomes \ on Linux when --os:windows at compile time
17:05:20shashlickI agree there's issues with reproducibility and concerns with keeping all deps together but besides vendoring everything into your own repo including nimterop, there's no way to solve it
17:05:42shashlickThen vendor Nim as well and gcc and where does it end
17:07:07shashlickThese are real problems and large established communities are struggling with it
17:11:36shashlickI also see your point that compile time generated code is unique to your setup but the time and effort required for the manual editing c2nim method or the effort to setup a framework that generates N wrappers by OS x C compiler is not trivial and does not scale
17:12:43shashlickSome day perhaps we can build that - I'm not averse to it but it's time bound
17:14:35*clemens3 quit (Quit: WeeChat 2.7)
17:18:09Araqbut in the meantime we get more and more machine specific Nim code... :-/
17:19:29clyybberI find c2nim + shell scripts to work quite well
17:19:34clyybbereven for huge wrappers
17:20:52shashlickSo there's still c2nim for those who want it, and for those who dare, folks who want to port libs to Nim wholesale
17:21:01disruptekftp is back, baby.
17:21:02shashlickNothing is gating that
17:21:21shashlickI'm just moving as fast as I can and shipping a viable product as I go
17:22:00disruptekthe critics are free to wrap stuff however they please.
17:23:37FromDiscord<Rika> ~~no idea why im still doing this but i'm trying out handporting linenoise to nim~~
17:23:48FromDiscord<Rika> right now i am crying
17:23:54shashlickWrapping libarchive such that you can nimble install it was a huge effort
17:24:07clyybberhow big is libarchive?
17:24:12clyybberas in lines
17:25:31shashlickToo big since it uses a whole bunch of C libraries behind the scenes
17:26:16shashlickAnd nimarchive only includes bzip2, zlib and liblzma
17:26:28dom96btw does nimarchive link statically with bzip2?
17:27:20*tane joined #nim
17:27:31shashlickIt builds all those libraries, if not present, and includes the .a files in the link step
17:28:22shashlickSo ya static
17:32:09dom96that is definitely a benefit
17:33:03dom96so how can I download/install the bzip2 source on macOS?
17:33:06FromGitter<mantielero> In FFI, how should I cast from "ptr cdouble" to seq[float]? I know c pointer and the length of the array.
17:34:18shashlickJust edit nimarchive bzlib.nim and switch http to ftp
17:34:21shashlickhttps://github.com/genotrance/nimarchive/blob/master/nimarchive/bzlib.nim#L23
17:34:30shashlickftp://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz
17:34:58*NimBot joined #nim
17:35:13shashlickThen we can look at maintaining these sources as submodules in choosenim and ensure nimarchive uses that
17:38:34shashlickIn fact nimarchive is too choosey perhaps so maybe we should give the user more power there
17:38:39shashlickhttps://github.com/genotrance/nimarchive/blob/master/nimarchive/archive.nim#L11
17:38:54shashlickNo reason why nimarchive should be picking versions and the download method
17:39:12FromDiscord<exelotl> uuh I have a question about basic terminology
17:39:20FromDiscord<exelotl> type Foo = object
17:39:32FromDiscord<exelotl> if "Foo" is a type, what is "object" ?
17:41:05FromDiscord<Rika> object is a keyword
17:41:06FromDiscord<Rika> is it not?
17:41:08FromDiscord<exelotl> reason being, I'm making a table like this:
17:41:08FromDiscord<exelotl> https://cdn.discordapp.com/attachments/371759389889003532/685904882011602977/unknown.png
17:41:33FromDiscord<Rika> what do you mean
17:41:43FromDiscord<Rika> kind is a good word for that table
17:42:04FromDiscord<exelotl> ok, I was just wondering if there was a better word xD
17:42:21FromDiscord<Rika> are you doubting ar_q???
17:42:31FromDiscord<Rika> wait i dont think ar_q wrote that table
17:42:40FromDiscord<exelotl> I wrote that table lol
17:42:48FromDiscord<Rika> darn
17:43:07FromDiscord<Rika> a better name for what is currently "Type" will be name
17:43:14FromDiscord<Rika> then "Kind" becomes "Type"
17:43:34FromDiscord<Rika> then the name of the TABLE would be "Types" or so
17:44:56*jjido quit (Quit: Textual IRC Client: www.textualapp.com)
17:45:07FromDiscord<exelotl> I'm pretty much happy with what I have, it's just that nim uses `kind` for any type of anything (since `type` is a reserved word and such)
17:45:18lqdev[m]@exelotl imo Type β†’ Name, Kind β†’ Type
17:45:31FromDiscord<exelotl> oh that works
17:45:46FromDiscord<exelotl> yeah that's perfect, thanks
17:46:08shashlicklqdev: not sure if you saw my message last night - refactored the plugin system - ptal
17:46:14*Zectbumo joined #nim
17:46:59shashlickStill need to add the ability to store user info in the plugin manager
17:52:03*krux02 quit (Remote host closed the connection)
17:52:19FromDiscord<Rika> exelotl didnt notice what i said :/
17:56:32disruptek~stream
17:56:33disbotstream: 11https://twitch.tv/disruptek (live video/audio) and mumble://uberalles.mumbl.io/ (live voice chat) -- disruptek
17:59:50FromDiscord<exelotl> @Rika dang sorry, I misread
18:00:27FromDiscord<exelotl> i thought you were saying to swap the "type" and "kind" headings πŸ˜…
18:03:43*filcuc quit (Quit: Konversation terminated!)
18:07:18clyybberAraq: Can I merge https://github.com/nim-lang/Nim/pull/13603 ? Its not beautiful but its the best I came up with
18:07:18disbotβž₯ Only print the link command when listCmd is active and fix the docs
18:09:32clyybberBasically I moved the check that timothee removed into execCmd
18:10:17clyybberAnd limited it to hintLinking, since doing the same for hintExecuting is a bit more controversial
18:14:46*rockcavera quit (Remote host closed the connection)
18:27:59*jholland__ joined #nim
18:29:23*nsf joined #nim
18:32:03*clemens3 joined #nim
18:39:46*gangstacat quit (Quit: Ĝis!)
18:42:12*gangstacat joined #nim
18:46:43*Hideki_ joined #nim
18:51:16*Hideki_ quit (Ping timeout: 255 seconds)
18:52:37*clyybber quit (Ping timeout: 255 seconds)
18:53:54*clyybber joined #nim
18:53:57*clyybber quit (Client Quit)
18:54:10*clyybber joined #nim
18:54:23*zahary joined #nim
18:54:23disruptekmeth is a helluva drug.
19:04:25shashlickAraq: I think an important point you aren't aware of with nimterop and nimarchive is that it also builds all the libraries if they aren't present
19:04:42shashlickThis includes cmake, configure support, build flags and other nonsense
19:05:08shashlickSo it isn't just wrapping, it is also getting working c dependencies on the system
19:05:47shashlickWhen you want latest or a particular version cause the package manager has an older version or there's no pm like on windows installing libraries
19:06:18FromDiscord<Recruit_main70007> #offtopic discord -> bridge is dead again
19:06:41shashlickSo we have to get the C headers and source to do all that anyway
19:07:40clyybberRecruit_main70007: It has been for the last few months
19:07:48FromDiscord<Recruit_main70007> oof
19:08:19disruptekzevv.
19:08:22disruptekstop cursing in nim.
19:08:23Zevvdisruptek
19:08:42Zevvone can best curse in perl
19:12:48FromDiscord<Rika> How does one curse in nim
19:13:04ZevvNo clue where he got that from. I typed I curse *at* nim, not *in* nim.
19:13:25clyybberRika: Like this:
19:13:26clyybberimport v
19:13:32Yardanicoclyybber: xddd
19:13:37clyybberv vv v vvvvv vvv vvv vvv vv vvvvv vvvvvv
19:13:47clyybbervvv vv vvvv "uck"
19:13:50Yardanicoclyybber: or emojis
19:13:56Zevvin perl it's trivial. You go like $!&@*^!
19:14:04Zevvbut that joke got old fast
19:14:18clyybberYardanico: You are joking, but there is a certain cursed fella here that uses emojis in their code
19:14:28Yardanicoclyybber: I'm not, I did it myself (it's based on v lib)
19:14:36Yardanicoi posted it on the forum, lemme find it
19:14:40Zevv!eval ☠="πŸ’£"
19:14:42NimBotCompile failed: /usercode/in.nim(1, 1) Error: undeclared identifier: '☠'
19:14:45clyybberYardanico: wtf
19:14:48Zevv!eval let ☠="πŸ’£"
19:14:51NimBot<no output>
19:14:53clyybberwhat did you bring upon this cursed land
19:15:17ZevvI wrote curses-code last week, really true
19:15:23Zevvand only old people know what that means
19:15:54clyybberwell ncurses is just curses plus the n word
19:16:00Zevvooooh
19:16:03clyybberso at least your code is not racist
19:18:14Yardanicoclyybber ah wait I didn't post in on the forum sadly, but only did it locally
19:18:26Yardanicobasically I replaced different number of "v" with 10 emojis
19:18:51clyybberyeah, i don't even want to see it
19:18:54clyybber:p
19:19:35clyybberYardanico: but I'm also a bit curious
19:19:39clyybberis it a snippet?
19:20:00Yardanicooh I think I have it locally
19:20:05clyybberah ok
19:20:10disruptek~stream
19:20:10disbotstream: 11https://twitch.tv/disruptek (live video/audio) and mumble://uberalles.mumbl.io/ (live voice chat) -- disruptek
19:20:13clyybbermaybe its better this way
19:20:16clyybberlol
19:20:38Yardanicoclyybber: one thing is that I couldn't get imports to work (when they're written the v-way or emoji-way)
19:21:14clyybberhmm
19:24:23Yardanicoclyybber: https://github.com/Yardanico/nim-emojify
19:24:30Yardanicoinstead of vify proc I have emojify proc
19:24:34Yardanicoand the module is called "emojify"
19:25:15Yardanicohttps://i.imgur.com/Prllle3.png
19:25:16disruptekis leorize asleep?
19:25:39leorizei'm here disruptek, being busy
19:25:52disruptekokay 😁
19:35:44FromDiscord<Bawbby> that emojify is cool and cursed
19:41:49clyybberYardanico: I am bound to make an issue
19:41:58clyybberI am sorry. Don't actually delete it tho
19:43:00clyybberdammit
19:43:11clyybbernow I opened the most stupid issue on the original repo
19:43:30clyybberdammnit, there are no issues
19:44:21Yardanicoclyybber: i've enabled them in the repo
19:44:29Yardanicothey're not enabled by default in forks on github
19:46:16clyybberah
19:46:18clyybberI see
20:00:10Yardanicohmm, is it a bug that "$+:$+:$+$." doesn't work with scanf?
20:00:24Yardanico(it's supposed to match a string like "0xasd:0xgdg:0xfggd"
20:08:26disruptek~stream
20:08:26disbotstream: 11https://twitch.tv/disruptek (live video/audio) and mumble://uberalles.mumbl.io/ (live voice chat) -- disruptek
20:08:41*shadwick joined #nim
20:08:49*Vladar quit (Quit: Leaving)
20:09:49shadwickHi all -- When using `nim doc ..`, is there a syntax to link to a standard lib module? I.e. "See `streams <streams.html>`_.", but specifically generating it to nim-lang.org as it's not a project module?
20:14:27*zahary quit (Quit: Leaving.)
20:38:49*lritter quit (Ping timeout: 255 seconds)
20:42:22*nsf quit (Quit: WeeChat 2.7)
20:46:35*zahary joined #nim
20:47:26*narimiran joined #nim
20:49:06leorizeshadwick: substitute streams.html with the full link to it
20:49:14leorizethe documentation syntax is RST
20:49:38shadwickAh ok. I just wasn't sure if there was a shorthand syntax instead of pasting the full URL
20:49:41shadwickThanks
20:52:36FromDiscord<Kiloneie> Is Patreon asking an actual picture of me or the hell is the cover picture supposed to be ?
20:53:23Yardanico@Kiloneie if you only plan to use it to donate to other people it doesn't matter I think
20:53:29Yardanicoactually I think it doesn't matter at all
20:54:02FromDiscord<Kiloneie> imma just strech a thumbnail D:
20:54:09FromDiscord<Kiloneie> no time right now xD
20:56:46*shadwick quit (Remote host closed the connection)
21:05:11FromDiscord<Kiloneie> where is nim's official logo located it's source ?
21:05:33YardanicoYou mean https://github.com/nim-lang/assets ?
21:06:44FromDiscord<Kiloneie> yes thank you
21:07:16*abm joined #nim
21:13:32FromDiscord<Kiloneie> https://youtu.be/uZ7jdkx4pKE
21:14:02FromDiscord<Kiloneie> Here is my just made Patreon page for everyone to ignore :P: https://www.patreon.com/Kiloneie?fan_landing=true
21:17:05FromDiscord<Kiloneie> Now im off to get wasted
21:21:57FromDiscord<Elegant Beef> Briefly watching that video, i think you need to up your voice volume whilst no longer recording keystroke audio
21:28:01FromDiscord<Elegant Beef> or do the voice over after recording
21:28:17*krux02 joined #nim
21:29:33*xet7 joined #nim
21:32:01*muffindrake quit (Quit: muffindrake)
21:47:25FromDiscord<Kiloneie> Imma use my spare membrane keyboard for the next one i guess
21:50:50FromDiscord<Kiloneie> Adding 2 books to elevate my mic didnt do a thing..., my settings in obs are the same as last time and yet i had to up the volume by 10 db in post...
21:51:02FromDiscord<Elegant Beef> What's your mic?
21:53:22*narimiran quit (Ping timeout: 265 seconds)
21:55:24*muffindrake joined #nim
21:56:44*Trustable quit (Remote host closed the connection)
21:57:45*dddddd quit (Remote host closed the connection)
22:04:04FromDiscord<Kiloneie> A 110€ usb mic from like 10 years ago, mc crypt usb-s1
22:05:05FromDiscord<Elegant Beef> Yea i've also got a usb mic, got a monitor arm though, so it's fairly good quality assuming i drop the volume of it and put it a few cm from my face
22:05:13FromDiscord<Elegant Beef> Samson meteor, it's pretty good
22:05:25FromDiscord<Elegant Beef> Extremely sensitive though
22:08:38*clyybber quit (Quit: WeeChat 2.7.1)
22:08:47FromDiscord<Kiloneie> Yeah, i wanted to get a mic arm a while ago but i couldnt find anything cheap that would fit my mic
22:25:45lqdev[m]disruptek: how do you display a notification using dbus?
22:26:01disrupteksee my xs repo for examples.
22:26:03disruptek!repo xs
22:26:04disbothttps://github.com/disruptek/xs -- 9xs: 11xstreamstartup.com 15 1⭐ 0🍴
22:26:15disruptekie. the bot.
22:26:23disruptekit's solitudesf's code, basically.
22:27:02*s4mu3lbk quit (Read error: Connection reset by peer)
22:27:46disrupteka simplified example that is arguably more instructive: http://ix.io/2dGG/nim
22:31:49FromDiscord<exelotl> Man reStructured tables are horrible... Found myself writing HTML tables instead
22:33:07*letto_ quit (Ping timeout: 255 seconds)
22:35:08*zahary quit (Quit: Leaving.)
22:35:25*solitudesf quit (Ping timeout: 265 seconds)
22:38:31*letto_ joined #nim
22:38:49Araqno idea what you mean, they are fine
22:38:57Araqsame as markdown tables iirc
22:46:57FromDiscord<exelotl> I want to put some URLs in a cell in the first column
22:48:25*Hideki_ joined #nim
22:50:02*clyybber joined #nim
22:51:11clyybberAraq: Can I merge https://github.com/nim-lang/Nim/pull/13603 ?
22:51:12disbotβž₯ Only print the link command when listCmd is active and fix the docs
22:53:18*Hideki_ quit (Ping timeout: 265 seconds)
22:53:32Araqok
22:55:26*dwdv joined #nim
22:56:28disruptek~notes is https://gist.github.com/disruptek/41100bf20978de9a3cff55b23fcfe44e
22:56:29disbotnotes: 11https://gist.github.com/disruptek/41100bf20978de9a3cff55b23fcfe44e
22:59:48lqdev[m]leorize: this file doesn't want to be highlighted at all with nim.nvim https://github.com/liquid600pgm/pomod/blob/master/src/pomod.nim
23:00:05lqdev[m]all I get is the error message `nimsuggest instance for project /home/daknus/Coding/Nim/pomod/src stopped with exitcode: 1`
23:07:24*lbart quit (Read error: Connection reset by peer)
23:07:31*lbart joined #nim
23:07:53*disruptek quit (Quit: Bye)
23:07:58*nsf joined #nim
23:08:14*disruptek joined #nim
23:11:26leorizelqdev[m]: does nim check crashes on it?
23:16:34lqdev[m]yes
23:16:35lqdev[m]or, it fails
23:16:50lqdev[m]because my lib uses nimterop to pull the header and staticExec is forbidden in the vm
23:17:07lqdev[m]the same thing, however, does not happen with euwren.nim
23:18:31leorizewell if it crashes, open an issue on the compiler tracker
23:18:35leorizenim check crashes
23:18:44leorizeusually get things fix faster than telling that it's a nimsuggest bug, sadly
23:19:01shashlicklqdev: highlighting should work if you compile once
23:19:03*mal`` quit (Quit: Leaving)
23:19:15shashlickCause nimterop caches it for nimsuggest or check mode
23:19:36lqdev[m]shashlick: problem is, it doesn't work after compiling once
23:20:00lqdev[m]I can compile it all day I want but nim check always fails
23:20:10shashlickYa then the code generated is broken in some way
23:20:43shashlickWhat does Nim check complain about
23:20:58lqdev[m]tons of undeclared identifiers for symbols imported from C
23:21:55shashlickHow can I reproduce - which os
23:22:13shashlickPresume you compiled once before running Nim check
23:22:27shashlickAnd have the latest version blah blah
23:23:11lqdev[m]yes
23:23:15lqdev[m]os: linux
23:23:18*actuallybatman quit (Quit: Lost terminal)
23:23:30lqdev[m]might not be the lastest version of nimterop, let me update
23:24:42lqdev[m]naw updating nimterop did not help
23:24:52lqdev[m]so it's latest installed via `nimble install nimterop`
23:24:56lqdev[m]nim 1.0.6
23:27:52shashlickWhich wrapper file is erroring
23:30:54disruptekleorize: what should i add to the bot's radio feature tonight?
23:30:59lqdev[m]it's coming from 2 files, https://github.com/liquid600pgm/rapid/blob/master/src/rapid/lib/soundio.nim and https://github.com/liquid600pgm/rapid/blob/master/src/rapid/lib/oggvorbis.nim
23:31:35*mal`` joined #nim
23:32:48FromDiscord<mfiano> Is there a way to not have the compiler discard code that is not assigned to anything and is purely for side-effects. I get expression `'foo' is of type 'var bar' and has to be discarded` unless i echo it or assign it to a variable. it's a proc that takes in a var to mutate it, and i want to just use the mutated var later, but the compiler errors here and it doesn't get any farther.
23:33:05disruptekno. use `discard`.
23:33:25FromDiscord<mfiano> discard what?
23:33:38lqdev[m]`discard someCallOrExpression`
23:34:13lqdev[m]it's a statement.
23:34:16shashlickLqdev just tried and both wrappers compile and check fine
23:34:19lqdev[m]https://nim-lang.org/docs/manual.html#statements-and-expressions-discard-statement
23:34:47FromDiscord<mfiano> oof
23:35:11FromDiscord<mfiano> Looks like I'm going to have to macro out of this then. Writing performance sensitive code so lots of mutation
23:35:24disruptekthen don't return anything.
23:35:27lqdev[m]shashlick: wait. so you're telling me I have to compile the wrapper itself, and not my project?
23:36:02lqdev[m]but running `nim check` on the wrappers is fine
23:36:09lqdev[m]even when not compiled
23:36:11shashlickno that's not needed
23:36:20FromDiscord<mfiano> disruptek, not an option if I want to chain mutations i don't think
23:36:22shashlicknim check without compile is checking nothing
23:36:22clyybbermfiano: Don't return a thing then. Modifiy the var parameter. Or use {.discardable.}
23:36:30shashlickwith compile, it is checking the cached code
23:36:33lqdev[m]this only occurs on files that use the wrappers
23:36:59*mal`` quit (Ping timeout: 260 seconds)
23:37:00disruptekplease don't use .discardable.
23:37:07disruptekdiscard is a great feature that prevents bugs.
23:37:35lqdev[m]shashlick: try to `nim check` this https://github.com/liquid600pgm/rapid/blob/master/src/rapid/audio/device.nim
23:37:42shashlickOk I need to head out but which files are erroring
23:38:01shashlickAlso, enable cDebug to see what the wrappers are generating
23:38:36shashlickMaybe some stuff is missing and the symbols are getting flagged in the consuming module
23:38:52clyybberdisruptek: Some people *want* to shoot themselves
23:38:56clyybberin the foot that is
23:39:35disrupteki *want* to shoot some people, too.
23:39:46disrupteki mean, let's face it.
23:39:51disrupteksome people /need/ to be shot.
23:40:02lqdev[m]shashlick: no code except some .compile pragmas is generated during `nim check`, it seems
23:40:19disrupteki think bot hackery tonight.
23:43:17disruptekclyybber: btw, there are several kinds of toplevel stmts that aren't stmtlists. fun.
23:43:53clyybberoh
23:44:31FromDiscord<mfiano> How can I check if 2 instances of an object have identical values for all of their members?
23:44:39disruptekx == y
23:46:33FromDiscord<mfiano> How can I check if an instance is the same object in memory as another var?
23:47:28lqdev[m]`addr x == addr y`
23:48:28FromDiscord<mfiano> Thanks
23:49:56lqdev[m]if the objects are `ref` then you can just do `x == y`, and compare whether fields are the same using `x[] == y[]`
23:54:48clyybberdisruptek: Whats your opinion on: https://github.com/nim-lang/Nim/pull/13603
23:54:49disbotβž₯ Only print the link command when listCmd is active and fix the docs
23:55:16clyybberIMO the link command should only be shown when --listCmd is used
23:56:12*Zectbumo quit (Remote host closed the connection)
23:56:25clyybberBut do you think its useful to show that its linking without showing --listCmd ?
23:56:32clyybberLike before timothees PR
23:57:08clyybberjust showing `Hint: [Link]` or something
23:57:23clyybberOr should it just not be shown normally.
23:57:25*mal`` joined #nim
23:59:14leorizedisruptek: the `!tune` thing doesn't seem to work :(
23:59:39*tane quit (Quit: Leaving)
23:59:42shashlicklqdev is the wrapper generating anything in Nim c