00:11:31 | disruptek | but nimdeps makes my elbows itch. |
00:18:55 | * | macsek1911[m] quit (*.net *.split) |
00:18:55 | * | Asbrn[m] quit (*.net *.split) |
00:18:55 | * | nc-x[m] quit (*.net *.split) |
00:18:56 | * | Manny8888 quit (*.net *.split) |
00:18:56 | * | leorize[m] quit (*.net *.split) |
00:18:56 | * | LyndsySimon quit (*.net *.split) |
00:18:56 | * | surma quit (*.net *.split) |
00:19:40 | * | leorize[m] joined #nim |
00:19:41 | * | Manny8888 joined #nim |
00:20:23 | * | macsek1911[m] joined #nim |
00:20:25 | * | Asbrn[m] joined #nim |
00:20:25 | * | nc-x[m] joined #nim |
00:22:02 | * | GordonBGood quit (Ping timeout: 240 seconds) |
00:23:12 | * | GordonBGood joined #nim |
00:24:41 | * | LyndsySimon joined #nim |
00:24:41 | * | surma joined #nim |
00:47:48 | * | krux02_ joined #nim |
00:50:28 | * | krux02 quit (Ping timeout: 264 seconds) |
00:55:48 | * | nextloop joined #nim |
01:24:06 | skrylar[m] | alright. there's a couple headers left out because of tweaks, but https://git.sr.ht/~skrylar/sknGLIB is almost a thing. gonna boop off for the night tho |
01:52:33 | FromDiscord | <treeform> dom96, I had code to load resource files. |
01:52:44 | FromDiscord | <treeform> dom96, I am glad you like my iOS docs. |
01:53:09 | FromDiscord | <treeform> I found that `macosx` makes `ios` build not work. |
01:55:15 | FromDiscord | <treeform> dom96, you can get the root of your iOS bundle with this code: `NSString* filePath = [NSBundle mainBundle].resourcePath;` |
01:55:20 | FromDiscord | <treeform> See more here: https://github.com/treeform/glfm/search?q=glfmBundleDir&unscoped_q=glfmBundleDir |
01:57:04 | FromDiscord | <treeform> This repo has more instructions: https://github.com/treeform/glfm |
01:57:46 | FromDiscord | <treeform> SSL on iOS has to be statically linked ... i have not tried ... but I feel it will be a major pain. |
02:12:27 | * | Guest89904 joined #nim |
02:14:57 | * | krux02_ quit (Remote host closed the connection) |
02:25:14 | * | Romanson joined #nim |
02:55:26 | * | rockcavera quit (Remote host closed the connection) |
03:50:59 | * | Hideki_ joined #nim |
03:54:47 | stefantalpalaru | HN is for filthy casuals fishing for VC money. The real tech talk is on Reddit: https://old.reddit.com/r/nim/comments/dpdsh7/nim_is_the_friendliest_language_to_start/ ;-) |
03:55:31 | * | Hideki_ quit (Ping timeout: 268 seconds) |
04:04:45 | * | ponyrider joined #nim |
04:20:02 | * | Guest89904 quit (Ping timeout: 240 seconds) |
04:47:59 | * | nsf joined #nim |
04:51:57 | * | cyraxjoe joined #nim |
04:59:39 | * | chemist69_ quit (Ping timeout: 250 seconds) |
05:01:19 | * | cyraxjoe quit (Quit: I'm out!) |
05:01:30 | * | cyraxjoe joined #nim |
05:01:45 | * | chemist69 joined #nim |
05:18:05 | * | ponyrider quit (Quit: WeeChat 2.6) |
05:18:37 | * | ponyrider joined #nim |
05:19:21 | FromDiscord | <Winton> HI |
05:39:25 | * | narimiran joined #nim |
05:46:13 | FromDiscord | <Rika> hello |
05:52:03 | * | cyraxjoe quit (Ping timeout: 240 seconds) |
05:53:15 | * | ponyrider quit (Quit: WeeChat 2.6) |
05:53:40 | * | ponyrider joined #nim |
05:58:31 | FromDiscord | <Winton> how are you |
05:58:48 | FromDiscord | <Winton> I am new to this programming language and I think it's great |
05:59:16 | * | cyraxjoe joined #nim |
05:59:33 | FromDiscord | <Rika> well im just here trying to figure out how the master branch is supposed to work |
06:00:32 | FromDiscord | <Rika> also i think no one is here because its night time for those in americas or evening in europe |
06:01:12 | narimiran | @Rika what master branch? |
06:01:36 | FromDiscord | <Winton> Exactly I am from the Dominican Republic, I really knew this language today and the only thing that is theory is that since I read quite according to the opinions it is a good language to program almost everything |
06:03:10 | FromDiscord | <Rika> narimiran, master branches in general |
06:03:34 | FromDiscord | <Rika> do i commit directly to it? is it always supposed to be by PR? etc etc |
06:03:43 | FromDiscord | <Rika> still figuring out git in general basically |
06:04:12 | narimiran | ah, ok. i thought you were talking about nim-lang/Nim's master branch, which is deprecated and not used. nim's "main branch" is called `devel` |
06:04:26 | FromDiscord | <Rika> oh really? why? |
06:04:51 | narimiran | why is deprecated or why is devel our main thing? |
06:05:27 | FromDiscord | <Rika> both, i guess? i thought they'd have similar reasons |
06:05:51 | narimiran | in short: our `master` is a relict of past where we released stable versions differently. `devel` is where the action was and is happening, and you should send PRs against it |
06:06:32 | narimiran | when you go to https://github.com/nim-lang/Nim you will by default see `devel`, and PRs will be based on that |
06:06:43 | * | cyraxjoe quit (Quit: I'm out!) |
06:09:28 | * | cyraxjoe joined #nim |
06:11:39 | * | cyraxjoe quit (Client Quit) |
06:14:26 | * | cyraxjoe joined #nim |
06:15:10 | * | LargeEpsilon joined #nim |
06:16:55 | * | theelous3 joined #nim |
06:20:24 | * | kevin joined #nim |
06:20:48 | * | kevin is now known as Guest82626 |
06:21:18 | * | cyraxjoe quit (Quit: I'm out!) |
06:24:09 | * | Guest82626 👑 |
06:25:58 | * | dddddd quit (Read error: Connection reset by peer) |
06:27:41 | Araq | God mode on. |
06:29:41 | * | cyraxjoe joined #nim |
06:29:59 | FromDiscord | <Rika> ._. time to take cover then |
06:35:40 | * | LargeEpsilon quit (Ping timeout: 265 seconds) |
06:36:39 | * | solitudesf joined #nim |
06:38:15 | Araq | Guest82626 enabled the cheat. |
06:47:33 | * | cyraxjoe quit (Quit: I'm out!) |
06:51:16 | * | cyraxjoe joined #nim |
07:00:00 | * | gmpreussner_ quit (Quit: kthxbye) |
07:05:02 | * | gmpreussner joined #nim |
07:09:25 | * | Romanson quit (Quit: Connection closed for inactivity) |
07:13:16 | * | cyraxjoe quit (Quit: I'm out!) |
07:16:01 | * | cyraxjoe joined #nim |
07:21:31 | * | PMunch joined #nim |
07:27:46 | * | nif quit (Quit: ...) |
07:27:56 | * | nif joined #nim |
07:29:19 | * | cyraxjoe quit (Quit: I'm out!) |
07:29:27 | * | LargeEpsilon joined #nim |
07:32:11 | * | cyraxjoe joined #nim |
07:36:19 | Zevv | can someone just delete master than? I find myself checking it out and failing to build it twice a month at least |
07:42:50 | * | tklohna joined #nim |
07:47:23 | narimiran | Zevv: i've put a large warning to master's readme. (but who reads that, right?) i'm afraid to delete it if there is somebody using some pre-0.19 stuff which might depend on master branch |
07:49:52 | Zevv | fair enough |
07:49:56 | Araq | pre-0.19 should die though, I'm for deleting the master branch |
07:50:14 | Araq | or maybe we can rename it |
07:50:37 | Araq | to "legacy" |
07:51:03 | * | filcuc joined #nim |
07:52:49 | * | Hideki_ joined #nim |
07:53:17 | narimiran | more people stumble on `Tables.add` ;) |
07:54:34 | narimiran | i'd much rather remove that one or put it behind some `-d:iKnowWhatImDoing` flag |
07:56:15 | Araq | in what world should 'add' not 'add' though? |
07:56:55 | Araq | we can deprecate 'add' and introduce 'addAnother' |
07:57:20 | narimiran | i am not confused by it, i'm ok with having it, i don't touch it. but i've seen numerous times people using it, thinking they're doing what `[]=` does |
07:57:21 | Araq | if you want to 'add' a key, value pair that's what 'add' does, not sure why people stumble upon it |
07:57:32 | * | Hideki_ quit (Ping timeout: 276 seconds) |
07:57:53 | narimiran | it is like caSe_inSeNSitiviTy. |
07:58:05 | Araq | no, it's different |
07:58:39 | Araq | case_insensitivity is what you bring up when you have no clue about programming (hint: to obfuscate your code every PL offers plenty of opportunity already) |
07:58:40 | narimiran | i meant in the sense that it just produces meaningless discussion about it |
07:59:10 | Araq | whereas 'add' seems to be really bug-prone |
07:59:17 | Araq | totally different things |
07:59:54 | narimiran | "we can deprecate 'add' and introduce 'addAnother'" -- this might do the trick |
08:00:32 | Araq | void caSe_inSeNSitiviTy() { caSe_inSeNSitiviTy(); } // I can do the same in C++ btw |
08:01:05 | Araq | and then in C++ I can introduce |
08:01:18 | Araq | caSe_inSeNsitiviTy and it's something different, the horror |
08:01:47 | Araq | Python: AttributeError: 'dict' object has no attribute 'add' |
08:02:23 | Araq | same for 'append' |
08:02:38 | Araq | so why does it come up? Python uses []=, Nim uses []= |
08:02:52 | narimiran | people coming from some other language, i guess? |
08:03:23 | * | gmpreussner_ joined #nim |
08:04:41 | * | gmpreussner quit (Ping timeout: 276 seconds) |
08:05:05 | * | krux02 joined #nim |
08:05:55 | Araq | / The Add method throws an exception if the new key is |
08:05:55 | Araq | / already in the dictionary. |
08:06:09 | Araq | C# |
08:06:14 | Araq | so that's why... |
08:07:10 | PMunch | I just always assumed they were the same, so I probably have some macro out there that creates an add call instead of `[]=` simply because it's easier to do.. |
08:10:58 | PMunch | And I guess that's the issue, `add` simply isn't descriptive enough because it's been mis-used in other languages |
08:11:41 | PMunch | `assign` would probably be a better word to use for what `[]=` does, but I think it's easier to change Nim than to change every other language. |
08:11:59 | PMunch | Do we know how many bugs this have caused? Never really ran into it myself. |
08:40:55 | * | floppydh joined #nim |
08:44:17 | * | Vladar joined #nim |
08:47:36 | FromDiscord | <Lantos> hey guys, new to nim! |
08:47:36 | FromDiscord | <Lantos> any thoughts on optimizing this code? |
08:47:36 | FromDiscord | <Lantos> https://github.com/LantosTG/write_file_test/blob/master/src/main_nim.nim |
08:48:20 | FromDiscord | <Rika> ~~use a rope maybe~~ but araq said ropes should die so i dont know tbh |
08:50:03 | FromDiscord | <Rika> @Lantos ^ (link here https://nim-lang.org/docs/ropes.html) |
08:51:15 | FromDiscord | <Rika> (or if you dont want to import, make a seq[string] then add to that, then at the end call `{the seq}.join('')` |
08:51:29 | * | solitudesf quit (Ping timeout: 265 seconds) |
08:52:55 | * | ng0 joined #nim |
08:53:12 | narimiran | @Rika nim is not python. no need to have seq and then convert back to string. strings are mutable in nim |
08:53:26 | FromDiscord | <Rika> oops, char cant be empty |
08:53:46 | FromDiscord | <Rika> narimiran, but from my experience concat'ing a string that long took ages |
08:54:44 | FromDiscord | <Rika> hmm took longer on the seq anyway |
08:54:54 | FromDiscord | <Rika> guess it needs a longer string to show slowdowns |
08:58:26 | PMunch | Lantos, since you're completely new to Nim I'll mention this: turn on -d:release |
08:58:43 | PMunch | On my machine that made it drop from taking 395ms to 48ms |
09:09:45 | GordonBGood | Araq, I see your latest devel commit merging refcounting in --gc:destructorss... |
09:10:36 | GordonBGood | Glad to see you are working on repr.nim as it wasn't disabled with --gc:destructors before and didn't work for seqsv2, I was going to report it |
09:11:06 | GordonBGood | But I still can't seem to get refcounting working with my test program: https://wandbox.org/permlink/vZIUDOyygNxh7FOb |
09:11:28 | PMunch | @Lantos, some minor tweaks, got it down to 60ms on my machine now: http://ix.io/20oz/nim |
09:11:44 | GordonBGood | As noted, it's functional with lots of small allocations/deallocations so pushes the MM system |
09:12:14 | GordonBGood | As you can see, it works pretty good with Boehm, even with threading turned on (which it doesn't need) |
09:12:49 | GordonBGood | But it won't work with --gc:destructors on my machine after getting the latest devel branch |
09:13:57 | GordonBGood | I'm curious to see how straight refcounting compares to using Boehm and others |
09:14:24 | GordonBGood | It won't work with newruntime because of not being able to share ownership |
09:15:36 | GordonBGood | Also, unrelated, I'm trying to test my seqsv2 project across all GC'd but can't run --gc:go due to lack of the library file on both Linux and Windows? |
09:15:40 | * | theelous3 quit (Ping timeout: 264 seconds) |
09:16:12 | GordonBGood | ^all GC's |
09:17:52 | GordonBGood | The go GC library file isn't in the windeps download either |
09:18:53 | GordonBGood | One could likely produce it using the GCC/go repo, but thats a pain :( |
09:20:30 | * | floppydh quit (Quit: WeeChat 2.6) |
09:22:56 | * | Ven`` joined #nim |
09:23:56 | PMunch | @Lantos, down to 54ms now: http://ix.io/20oC/nim |
09:27:11 | * | floppydh joined #nim |
09:34:27 | Araq | GordonBGood, it's fine to ignore the Go GC for now |
09:35:05 | * | luis__ joined #nim |
09:35:22 | * | tamago324 joined #nim |
09:35:39 | * | Ven`` quit (Quit: My MacBook has gone to sleep. ZZZzzz…) |
09:35:50 | Araq | I don't know why your program doesn't work with --gc:destructors but --gc:destructors is in development |
09:36:22 | Araq | it worked for me for the couple of tests I did manage to do yesterday |
09:37:22 | GordonBGood | Araq: yes, I've set --gc:go tests aside for now |
09:39:14 | GordonBGood | Araq: yes, I recognize that refcounting is a WIP; just submitting this little hamming numbers test to that can maybe serve as a "macro" benchmark; when it works then it must be getting close |
09:40:27 | GordonBGood | There are faster ways to find an iteration of Hamming numbers, but this serves as a good test due to all the allocations and deallocations |
09:41:37 | GordonBGood | It tests on a lot of levels, including using closures in the LazyList's |
09:42:01 | Araq | looks like a decent test, yes |
09:42:44 | GordonBGood | and it should work the same whether threading is turned on or not even though it doesn't use threading, and thus shows the slow down due to shared alloc/dealloc |
09:42:45 | * | Ven`` joined #nim |
09:43:02 | GordonBGood | and will show the slow-down due to atomic refcounting |
09:43:45 | Araq | well I haven't ported the threading subsystem and I don't want to |
09:44:04 | Araq | prefer to write a new one |
09:44:46 | GordonBGood | No, I understand no porting threading as it's a mess, but I assume that your allocs/deallocs are shared when threading is on and... |
09:45:05 | GordonBGood | that you use atomic ref counts when threading is on? |
09:45:06 | Araq | you need -d:useMalloc with --threads:on |
09:45:38 | * | Hideki_ joined #nim |
09:45:46 | Araq | likewise I don't want to have the old RTTI, 'repr' should be in a library |
09:45:57 | Araq | and not depend on RTTI |
09:46:36 | GordonBGood | I've been having problems with -d:useMalloc; you can turn it on for the wandbox link, but that's running the Oct 15 head currently, not the latest |
09:46:46 | Araq | ideally we only have --gc:boehm and --gc:destructors, both supporting =destroy in the core data structures (seqs, tables, etc) |
09:46:56 | Araq | both supporting shared memory |
09:47:29 | Araq | one is for throughput and one is for latency and interop with webassembly, Python etc |
09:47:56 | * | luis__ quit (Quit: luis__) |
09:48:25 | * | luis__ joined #nim |
09:48:45 | FromDiscord | <mratsim> what about araqsgc and newruntime? |
09:48:48 | GordonBGood | Araq: yes, that's my thinking, and after you telling us on the forum how well Boehm works, I've been testing with it - it's quite good |
09:49:22 | Araq | mratsim: newruntime evolved into --gc:destructors as far as I'm concerned |
09:49:34 | FromDiscord | <mratsim> ah I thought that was the other way around but OK |
09:49:52 | Araq | ask me again next Monday :P |
09:49:52 | GordonBGood | Araq: your're dropping devel on B/D? |
09:49:55 | FromDiscord | <mratsim> so the idea is that for builtin types, both uses the destructors, and they differ only for ref types right? |
09:51:00 | Araq | mratsim: yes but we have some implementation freedom, we don't have to have =destroy for seqs we know only contain "Collectable data" |
09:51:49 | Araq | GordonBGood, B/D is for version 2.0, cleaning up the GC solutions is for 1.2 |
09:52:07 | GordonBGood | Araq: Ah, okay |
09:52:09 | FromDiscord | <mratsim> As long as whatever the --gc:MyGC used supports the following (move-only types) I think I can progress on a nicely done threading library: https://github.com/mratsim/weave/blob/master/picasso/memory/object_pools.nim#L72-L78 |
09:53:39 | * | tamago324 quit (Remote host closed the connection) |
09:54:18 | Araq | move-only types are totally fine |
09:55:22 | Araq | GordonBGood, but we also need to teach people how to write code with =destroy ;-) as the 'ref' types don't get faster... |
09:55:42 | FromDiscord | <mratsim> so `result = move pool.stack[pool.remaining]` is still the proper syntax to enforce moving? |
09:55:58 | Araq | yes |
09:58:21 | GordonBGood | Araq: yes, we need to get people always thinking about using =destroy and what sink and lent do but what do you mean 'the "ref" types don't get faster'? |
09:58:21 | Araq | and if we remove the RTTI we need a new marshal.nim, we could embrace Status's serialization library but we don't have a process for moving things into the stdlib nor do we have the "distribution"... |
09:59:11 | Araq | well they produce atomic RC ops, that's slow |
09:59:29 | GordonBGood | I recognize that ref counted ref's even backed by destructors aren't going to be that fast |
09:59:53 | GordonBGood | when threading is turned on, the reference counts will be atomic operations |
09:59:59 | FromDiscord | <mratsim> that's why I said before 1.0 that it would be nice to document a way for improving the stdlib :/ |
10:00:34 | Araq | mratsim: I wrote the document afterwards, so what |
10:00:45 | * | jjido joined #nim |
10:01:08 | FromDiscord | <mratsim> to manage expectations of stability guarantees |
10:01:52 | FromDiscord | <mratsim> anyway, not really important, just my "I told you so" moment 😉 |
10:02:45 | Araq | queue up. |
10:03:26 | * | Ven`` quit (Quit: My MacBook has gone to sleep. ZZZzzz…) |
10:04:22 | Araq | GordonBGood, in a nutshell: We need to teach that 'Node' is the wrong granularity, it should be Tree or Graph |
10:05:23 | GordonBGood | Araq: Ah, you are talking runtime metadata or AST manipulations? |
10:05:50 | * | EvilKhaosKat joined #nim |
10:06:04 | Araq | neither, I am talking about we need examples how to design parse trees and the like |
10:06:33 | GordonBGood | Are Tree and/or Graph already exist that we can build examples against? |
10:06:47 | Araq | nah |
10:07:26 | FromGitter | <alehander42> but whats the difference with node and tree |
10:07:29 | FromGitter | <alehander42> parent links? |
10:08:18 | GordonBGood | Araq: I'd like to help, but it sounds like it's at a level of abstraction beyond my level of expertise; I'm a specialist in low level things |
10:08:41 | Araq | don't worry, it means I can sell more books... :P |
10:09:20 | GordonBGood | But if I see a different better way suggested by you "high-level" guys, I can grab onto it and run with it if it's better |
10:10:51 | GordonBGood | Araq: With the amount of the time you spend here on IRC, following up on the forum, writing actual code, and managing the repo, I don't know when you are going to find time to write books :) |
10:11:13 | Araq | btw if you 'move' refs around, you only have the atomic read operation which is free on x86 |
10:11:14 | * | Guest82626 quit (Ping timeout: 265 seconds) |
10:11:35 | leorize | if I know that I'll throw an error frequently, then should I use a Result type or exceptions are performant enough? |
10:11:36 | Araq | check the code :P |
10:12:10 | Araq | leorize, you are probably better off with the Result type |
10:13:47 | FromGitter | <alehander42> PMunch https://github.com/NimParsers/parsetoml |
10:14:01 | FromGitter | <alehander42> seems nice, but it needs to show in the readme that it can actually generate toml back |
10:14:06 | PMunch | alehander42, huh? |
10:14:25 | FromGitter | <alehander42> well, from the readme i thought it can only parse toml |
10:14:36 | FromGitter | <alehander42> i found some random example of toTomlString in a issue :P |
10:14:40 | PMunch | Ah yeah.. The create TOML is a bit experimental.. |
10:14:43 | PMunch | IIRc |
10:15:04 | FromGitter | <alehander42> so i'll probably create very simple seq with objects |
10:15:08 | FromGitter | <alehander42> i guess it should work for that |
10:15:30 | PMunch | Maybe, try it :) |
10:18:29 | Zevv | how widespread is this toml? |
10:19:31 | PMunch | Used quite a bit in Ruby land I think |
10:19:41 | PMunch | I just like it because it's so readable |
10:20:02 | Zevv | I made the mistake to consider yaml again the other day |
10:20:18 | Zevv | I should make this post it note saying "DONT DO YAML" and staple it to my forehead, maybe that helps |
10:20:18 | FromGitter | <Vindaar> and toml is simple, which is nice for a change. not like yaml.. |
10:22:50 | * | kevin_ joined #nim |
10:26:37 | Zevv | I think I like the dotted-keys thingy, but I also might not |
10:27:51 | PMunch | I mean it certainly has its limitations, but that means it is easier to reason about |
10:27:57 | PMunch | Both for humans, and for parsers |
10:28:05 | Zevv | and it has comments :) |
10:28:36 | * | Ven`` joined #nim |
10:29:18 | * | EvilKhaosKat quit (Quit: Leaving) |
10:29:41 | FromGitter | <alehander42> i use submodules |
10:29:46 | FromGitter | <alehander42> for my nim packages currently |
10:29:49 | FromGitter | <alehander42> so AMA |
10:30:01 | FromGitter | <alehander42> clyybber |
10:30:11 | FromGitter | <alehander42> yaml is nice |
10:30:21 | FromGitter | <alehander42> if you use a subset but i decided to try toml this |
10:30:57 | * | LargeEpsilon quit (Ping timeout: 276 seconds) |
10:31:51 | FromGitter | <alehander42> oh man it doesnt accept a random structure PMunch |
10:32:23 | Araq | GordonBGood, one thing that I'm thinking about it shared memory + non-atomic RC ops |
10:32:43 | Araq | to pass stuff to a different thread a 'move' is good enough |
10:32:54 | FromGitter | <alehander42> PMunch one idea is to just reuse the https://github.com/status-im/nim-serialization lib |
10:32:55 | PMunch | alehander42, what do you mean? |
10:33:10 | FromGitter | <alehander42> and to just add a reader (parser) / writer similar to https://github.com/status-im/nim-json-serialization |
10:33:21 | FromGitter | <alehander42> so we can get all the type stuff automatically |
10:33:33 | FromGitter | <alehander42> and do Toml.decode(stuff, mytype) |
10:33:50 | FromGitter | <alehander42> PMunch well i wanted to directly encode my own type |
10:34:14 | FromGitter | <alehander42> working with low level toml values overally feels unnecesary for me in language like nim where usually its easier to type your schema |
10:34:23 | FromGitter | <alehander42> but its best to have both options |
10:34:31 | PMunch | Did you try `?` |
10:34:54 | PMunch | Decoding would be nice though.. |
10:35:10 | PMunch | Feel free to PR :) |
10:35:25 | FromGitter | <alehander42> PMunch but my point is: it doesnt make sense to reinvent it |
10:35:50 | FromGitter | <alehander42> so a lib like nim-serialization where all the from/to type stuff is already written and one have to mostly implement the low level reading/writing procs |
10:35:54 | FromGitter | <alehander42> seems easier to me |
10:36:37 | FromGitter | <alehander42> hm, `?` is cool, but i dont want to work with toml values at all: i want to work with normal nim types |
10:37:10 | PMunch | You should be able to write the serialisers for nim-serialization |
10:38:08 | * | Ven`` quit (Quit: My MacBook has gone to sleep. ZZZzzz…) |
10:38:25 | * | jjido quit (Quit: My MacBook has gone to sleep. ZZZzzz…) |
10:42:50 | FromGitter | <alehander42> well, its not a trivial amount of work i admit |
10:43:25 | FromGitter | <alehander42> but if i really find the need of toml more i can try to map some of your code to such a deserializer |
10:43:51 | FromGitter | <alehander42> i'd put it in the nimparsers org tho |
10:44:01 | * | Ven`` joined #nim |
10:45:18 | PMunch | That would be great! |
10:45:34 | PMunch | I'd probably do it myself if I actually used parsetoml for any larger project |
10:45:41 | PMunch | The interface is a bit clunky |
10:46:13 | * | Ven`` quit (Read error: Connection reset by peer) |
10:47:00 | GordonBGood | Araq: sorry, was away looking at the why my test porgram doesn't work with your ref counting - it's to do with generating a closure in a nested closure - line 71 on the test program |
10:48:01 | * | luis__ quit (Quit: luis__) |
10:48:03 | GordonBGood | and there are comments in the lambdalifting file at line 696 that it will find it and doesn't like nested closures much! |
10:48:23 | GordonBGood | The "up" field is nil... |
10:48:31 | * | luis__ joined #nim |
10:48:56 | * | Hideki_ quit (Ping timeout: 240 seconds) |
10:49:04 | FromGitter | <alehander42> PMunch awesome: i'll thik about it, but not having a lot of time and prefer to try one other idea |
10:50:03 | GordonBGood | Araq: re: "shared memory + non-atomic RC ops" and "to pass stuff to a different thread a 'move' is good enough"... |
10:51:12 | GordonBGood | I've been thinking about it, too - a move is good enough when ownership doesn't have to be retained in the calling thread... |
10:51:55 | GordonBGood | and we can maybe eliminate atomic ref counting or any ref counting when within the same scope by DFA... |
10:52:42 | GordonBGood | Leaving atomic ref counting maybe only necessary when there are multiple owners across threads... |
10:53:18 | * | clyybber joined #nim |
10:53:32 | GordonBGood | And speed isn't really a concern much then as the overheads of context switching even from a thread pool will be much greater than the cost of atomic ref counting |
10:54:04 | clyybber | alehander42: Ha, how comes? |
10:56:10 | FromGitter | <alehander42> well i do it for a long time |
10:56:29 | FromGitter | <alehander42> just our project uses several patches of the compiler |
10:56:35 | FromGitter | <alehander42> or other projects |
10:56:41 | FromGitter | <alehander42> 1) some lib forks |
10:56:48 | FromGitter | <alehander42> so i guess it just made sense |
10:57:09 | FromGitter | <alehander42> 1) some closed source deps |
10:57:21 | GordonBGood | brb |
10:57:33 | FromGitter | <alehander42> i think it was more because of the reproducability, i didnt take decision |
10:58:09 | FromGitter | <alehander42> but i still use nimble with almost all my other nim projects |
11:05:07 | * | jjido joined #nim |
11:15:59 | Araq | GordonBGood, if you actually *share* the ownership on mutable data it's unlikely you will have it correct just because Nim used atomic ops for you |
11:16:30 | Araq | but if you don't mutate it concurrently it will work out, so *shrug* |
11:17:21 | Araq | still the design doesn't strike me as particularly elegant, paying the costs for what is done in some half-assed way |
11:17:45 | * | letto quit (Quit: Konversation terminated!) |
11:19:17 | * | letto joined #nim |
11:25:56 | * | letto quit (Quit: Konversation terminated!) |
11:26:35 | GordonBGood | Araq: shrug, most of it has been done before by somebody for some PL; I had hopes the by somehow using the ideas from B/D we would end up with something different... |
11:27:52 | GordonBGood | A lot of algorithms can get away with just moving ownership to the other thread and getting ownership back with the result if necessary, so moving would work... |
11:28:49 | GordonBGood | And a lot of the rest only mutate the data in one thread, so shared ownership would work |
11:30:12 | GordonBGood | Unless in continually going back to stir the pot someone comes up with some brilliant break-through idea |
11:30:45 | * | abm joined #nim |
11:39:37 | * | kevin_ quit (Quit: leaving) |
11:44:51 | Araq | > And a lot of the rest only mutate the data in one thread, so shared ownership would work |
11:45:04 | Araq | exactly but then it uses atomics and it doesn't have to |
11:46:36 | Araq | here is what you can do: you use bit 0 or the RC to mean "shared between threads" |
11:46:44 | Araq | *of the RC |
11:46:45 | GordonBGood | Araq: Yes, unless DFA can eliminate some of the ref counts as it was said to do in the |
11:47:02 | GordonBGood | ""Biased ref counting" article about Swift |
11:47:18 | Araq | and then when we move x to a different thread and if RC == 1 the bit remains unaffected |
11:47:34 | Araq | but if we have RC > 1 we set the bit to enable atomics |
11:47:39 | GordonBGood | Yes, something like that |
11:47:50 | Araq | biased refcounting is different |
11:47:58 | Araq | than that. very different. |
11:49:38 | Araq | here is the problem with my idea: only the outer 'ref' is moved to a different thread, it can contain other refs and they could be shared wildly |
11:50:07 | Araq | we would need a deepMove() operation :P |
11:50:27 | Araq | however, here is where B/D could help us, it enforces deep uniqueness |
11:52:25 | * | clyybber quit (Read error: Connection reset by peer) |
11:53:02 | * | LargeEpsilon joined #nim |
11:53:40 | * | clyybber joined #nim |
11:55:41 | GordonBGood | Yes, I understand that bias ref counting is different, I was just talking about that they stated that Swift already elides many ref counts away... |
11:55:45 | * | Vladar quit (Quit: Leaving) |
11:55:59 | * | lritter joined #nim |
11:57:02 | GordonBGood | The only problem with shared ownership of some sort of shared data with inner ref's is mutation (may) need to have locks, but not always |
11:57:24 | GordonBGood | I've looks into deepMove and don'e like it - it stinks of deepCopy |
11:57:27 | * | rockcavera joined #nim |
11:58:35 | GordonBGood | Oh, I suppose you mean inc all internal ref counts and then deepDestroy dec's them when the outer ref is destroyed, I don't think that's actually necessary |
11:58:45 | FromDiscord | <mratsim> we should defer shared data structures to library |
11:59:33 | GordonBGood | mratsim, in my current thinking, I agree that everything other than ref handling should be somewhere else |
11:59:34 | FromDiscord | <mratsim> that's what C++ did for a very ong-time, it's only very recently that they have parallel STL |
12:00:49 | GordonBGood | Araq: yes, I still like B/D in the long term if we can figure oot some sort of shared ownership angle on top of it |
12:02:16 | * | tklohna quit (Ping timeout: 240 seconds) |
12:02:25 | * | letto joined #nim |
12:02:53 | PMunch | Sorry, I was trying to clean up the playground and unfortunately managed to delete all the images.. I'm rebuilding them now, but it takes a while.. |
12:04:00 | Araq | mratsim: the default allocation for C++ always was 'shared memory' though |
12:04:22 | Araq | so you could get away with locks on top of std::vector |
12:04:49 | Araq | and you don't get away with this in Nim v1 |
12:05:27 | FromDiscord | <mratsim> I don't know, Arraymancer and neo gets away with using seqs as a backend and multithreading on top 😛 |
12:09:11 | * | jjido quit (Quit: My MacBook has gone to sleep. ZZZzzz…) |
12:21:50 | * | tklohna joined #nim |
12:28:30 | * | clyybber quit (Quit: Quit) |
12:28:41 | * | clyybber joined #nim |
12:28:41 | * | clyybber quit (Client Quit) |
12:30:09 | * | tiorock joined #nim |
12:30:09 | * | tiorock quit (Changing host) |
12:30:09 | * | tiorock joined #nim |
12:30:09 | * | rockcavera is now known as Guest28913 |
12:30:09 | * | Guest28913 quit (Killed (cherryh.freenode.net (Nickname regained by services))) |
12:30:09 | * | tiorock is now known as rockcavera |
12:38:28 | * | luis__ quit (Ping timeout: 264 seconds) |
12:38:38 | * | clyybber joined #nim |
12:41:22 | FromDiscord | <Lantos> I was running with nim c --opt:speed --d:release |
12:41:22 | FromDiscord | <Lantos> I couldn't seem to get the one PMunch going any faster |
12:42:57 | clyybber | GordonBGood: Whats B/D standing for? |
12:43:40 | PMunch | Lantos, --opt:speed is implied with -d:release :) |
12:44:02 | PMunch | Did you try --gc:markandsweep? |
12:44:07 | PMunch | That gave me a nice speedup |
12:44:14 | * | ertp07 joined #nim |
12:45:02 | * | nsf quit (Quit: WeeChat 2.6) |
12:45:35 | clyybber | boehm/destructor?? |
12:45:56 | FromDiscord | <Lantos> oh ahah sure not keeping --opt:speed and -d:release makes it 2x fast 😉 |
12:46:19 | FromDiscord | <Lantos> I'll try nim c --d:release --gc:markandsweep |
12:47:30 | PMunch | Did you see the paste I made? That was the fastest I got it |
12:47:39 | PMunch | In includes the flags I used to compile with |
12:48:05 | FromDiscord | <Lantos> mark sweep gives a nice bump |
12:52:35 | FromDiscord | <Lantos> ``` |
12:52:35 | FromDiscord | <Lantos> dell:~/Documents/nim/write_bench/src$ cat main_nim.nim |
12:52:35 | FromDiscord | <Lantos> import times |
12:52:35 | FromDiscord | <Lantos> |
12:52:35 | FromDiscord | <Lantos> let time = cpuTime() |
12:52:35 | FromDiscord | <Lantos> let f = open("test_nim.txt", fmWrite) |
12:52:35 | FromDiscord | <Lantos> |
12:52:37 | FromDiscord | <Lantos> var data: string |
12:52:39 | FromDiscord | <Lantos> for i in 0..1000_000: |
12:52:40 | FromDiscord | <Lantos> data.add("line ") |
12:52:41 | FromDiscord | <Lantos> data.add($i) |
12:52:43 | FromDiscord | <Lantos> data.add("\n") |
12:52:44 | FromDiscord | <Lantos> |
12:52:45 | FromDiscord | <Lantos> f.write(data) |
12:52:47 | FromDiscord | <Lantos> f.close() |
12:52:48 | FromDiscord | <Lantos> echo "Time taken: " & $((cpuTime() - time)*1000.0'f32) & "ms" |
12:52:51 | FromDiscord | <Lantos> dell:~/Documents/nim/write_bench/src$ nim c -d:release --gc:markandsweep -r ../src/main_nim.nim |
12:52:52 | PMunch | Please don't post long things directly to Discord.. |
12:52:53 | FromDiscord | <Lantos> Hint: used config file '~/.choosenim/toolchains/nim-1.0.0/config/nim.cfg' [Conf] |
12:52:55 | FromDiscord | <Lantos> Hint: operation successful (300 lines compiled; 0.046 sec total; 6.004MiB peakmem; Release Build) [SuccessX] |
12:52:57 | FromDiscord | <Lantos> Hint: ~/Documents/nim/write_bench/src/main_nim [Exec] |
12:52:58 | PMunch | Use a paste service.. |
12:52:58 | FromDiscord | <Lantos> Time taken: 142.021312ms |
12:53:00 | FromDiscord | <Lantos> dell:~/Documents/nim/write_bench/src$ |
12:53:00 | narimiran | yay, code paste from discord |
12:53:02 | FromDiscord | <Lantos> dell:~/Documents/nim/write_bench/src$ cat main_nim.nim |
12:53:03 | FromDiscord | <Lantos> import times |
12:53:04 | FromDiscord | <Lantos> |
12:53:06 | FromDiscord | <Lantos> proc main() = |
12:53:07 | FromDiscord | <Lantos> let time = cpuTime() |
12:53:09 | FromDiscord | <Lantos> let f = open("test_nim.txt", fmWrite, high(cint)) |
12:53:10 | FromDiscord | <Lantos> |
12:53:11 | FromDiscord | <Lantos> const l = "line " |
12:53:13 | FromDiscord | <Lantos> for i in 0..1_000_000: <message clipped> |
12:53:15 | FromDiscord | <mratsim> @Clyybber: Bacon and Dingle paper |
12:53:16 | FromDiscord | <Lantos> oh |
12:53:17 | FromDiscord | <Lantos> sure |
12:53:19 | FromDiscord | <Lantos> does it kill irc? |
12:53:24 | PMunch | Can someone please fix the Discord bot.. |
12:53:32 | PMunch | It doesn't kill it, it's just massively spammy |
12:53:36 | FromGitter | <Vindaar> nah, it just fills up my whole main screen with blue messages :) |
12:53:50 | FromDiscord | <Lantos> https://pastebin.com/Vqet46Tu |
12:53:54 | FromDiscord | <Lantos> 🙂 |
12:54:01 | FromDiscord | <mratsim> Maybe we should bridge Discord to Gitter, instead of brdigning to IRC |
12:54:21 | FromDiscord | <mratsim> discord <-> Gitter supports properly Discord code paste |
12:54:27 | PMunch | Wouldn't that give us double nick wrapping? |
12:55:24 | FromDiscord | <mratsim> you can adjust that in the from gitter bot I think |
12:57:05 | FromDiscord | <mratsim> the discord <-> IRC bot is also awful on the Discord side because there is no proper text separation |
12:57:05 | FromDiscord | <Lantos> I'm off lunch but I will try this rope method when. I get home. |
12:57:43 | PMunch | Text separation? |
12:58:10 | FromDiscord | <mratsim> yeah, if you then another irc people talks, it all seems like new lines |
12:58:26 | FromDiscord | <mratsim> you don't have the same separation as one someone on discord talks |
12:59:18 | FromDiscord | <mratsim> |
12:59:18 | FromDiscord | <mratsim> https://cdn.discordapp.com/attachments/371759389889003532/639448312423907334/DeepinScreenshot_select-area_20191031135847.png |
12:59:42 | PMunch | Oh right |
12:59:52 | PMunch | Because they are all messages by the same "person" |
13:00:03 | FromDiscord | <Lantos> It's kind of confusing at first didn't realize what was going on for a minute |
13:00:34 | FromDiscord | <mratsim> actually the Gitter-Discord bridge that we used for Status channels properly separates |
13:01:07 | narimiran | quick question (i haven't tried it yet): is it possible to have recursive iterators? |
13:01:45 | FromDiscord | <mratsim> apparently it shouldn't be possible but I have one specific case where it works |
13:02:07 | FromDiscord | <mratsim> not sure if the discussion was on github or IRC though |
13:02:28 | Araq | narimiran: no. |
13:02:53 | FromDiscord | <mratsim> ah yes mine were recursive at compile time |
13:05:52 | narimiran | ah, ok. i'll try to think of some workaround (which hopefully won't be too slow and inefficient) |
13:07:08 | * | jjido joined #nim |
13:08:17 | Araq | for some reason my first gist ever is 'proc parseBool(s: string): bool = ...' |
13:08:35 | FromDiscord | <Rika> is there an issue with that being your first gist |
13:09:23 | Araq | I think it's a gist because I switched between computers and needed this piece of code |
13:09:56 | FromDiscord | <mratsim> My first fist is upgrade-python-3 😛 - https://gist.github.com/mratsim/8135b4f6824b61955122fdf828652298 |
13:10:36 | FromDiscord | <mratsim> omg the things that python package management forces you to do |
13:11:45 | Araq | but but but ... it's better than having useful stuff in Python's stdlib |
13:12:16 | * | ertp07 quit (Ping timeout: 240 seconds) |
13:12:23 | Araq | we all know package management is easy to do perfectly and the internet connections never fail. |
13:13:18 | clyybber | mratsim: Thanks |
13:13:56 | * | LargeEpsilon quit (Ping timeout: 265 seconds) |
13:15:16 | clyybber | mratsim: Didn't you succees in doing a recursive iterator? |
13:15:23 | clyybber | With : auto ? |
13:15:47 | FromDiscord | <mratsim> that was a recursive with fixed depth known at compile time |
13:16:01 | clyybber | Ah. |
13:16:08 | FromDiscord | <mratsim> https://github.com/mratsim/Arraymancer/blob/master/src/private/nested_containers.nim#L22-L30 |
13:16:54 | FromDiscord | <mratsim> that was because the iteration depth depended on the types |
13:17:14 | clyybber | Pretty cool |
13:17:43 | FromDiscord | <mratsim> there was a thread were people tried several stuff and had a iterator cannot be recursive error or something like that otherwise |
13:20:24 | * | Vladar joined #nim |
13:20:54 | shashlick | @dom96 the choosenim PR is done, hope you can merge it |
13:21:31 | shashlick | Native 7z and xz support so we can stop the gz duplicate archives going forward |
13:21:41 | shashlick | Install Linux binaries |
13:21:54 | * | ertp07 joined #nim |
13:22:06 | shashlick | Windows CI |
13:23:07 | * | ertp07 quit (Read error: Connection reset by peer) |
13:25:18 | * | ertp07 joined #nim |
13:25:29 | * | Hideki_ joined #nim |
13:26:07 | FromDiscord | <mratsim> .xz is super slow to compress though :/ |
13:26:13 | FromDiscord | <mratsim> (benches: https://community.centminmod.com/threads/round-3-compression-comparison-benchmarks-zstd-vs-brotli-vs-pigz-vs-bzip2-vs-xz-etc.17259/#post-73060) |
13:26:23 | * | Hideki_ quit (Remote host closed the connection) |
13:27:01 | * | Hideki_ joined #nim |
13:27:48 | * | sagax joined #nim |
13:27:56 | * | Hideki_ quit (Remote host closed the connection) |
13:28:14 | shashlick | Yep but that's what we post today for all posix archives |
13:28:40 | shashlick | Nightlies pay the price but they extract quite fast |
13:29:37 | federico3 | fast? not really |
13:30:49 | shashlick | Well that's cause a 12mb archive expands to 500+ mb of source in csources |
13:32:51 | federico3 | I suspect the download time / decompress time is not the best tradeoff |
13:40:09 | * | nixfreak65 joined #nim |
13:40:21 | * | nixfreak65 is now known as nixfreak_work |
13:42:09 | nixfreak_work | Does anyone have an example of using compiler options to link a static lib (nim c -d:mingw --cpu:amd64 --passC="<static lib>" --threads:on window.nim ) I kind of confused on how to do this |
13:44:25 | * | dddddd joined #nim |
13:45:00 | * | LargeEpsilon joined #nim |
13:48:08 | shashlick | You need to copy the static lib from windows and link that in |
13:48:44 | nixfreak_work | ok thank you |
13:48:46 | shashlick | And you need the .a file, not the dll |
13:49:14 | shashlick | Static = a, dynamic = dll, so or dylib |
13:59:48 | * | jjido quit (Quit: My MacBook has gone to sleep. ZZZzzz…) |
14:00:04 | * | ertp07 quit (Read error: Connection reset by peer) |
14:00:23 | * | ertp07 joined #nim |
14:00:54 | FromGitter | <alehander42> Araq the fact that python's package management has issues |
14:00:56 | FromGitter | <alehander42> is not an argument |
14:01:15 | FromGitter | <alehander42> most ppl in python-land are like "if we just had rubygems or npm" |
14:01:17 | FromGitter | <alehander42> (yes, npm) |
14:02:25 | FromGitter | <alehander42> from what i've seen from most lang communities/forum/subreddits third party libs are absolutely the normal thing, nobody is really wondering why he doesnt have a web framework or specific data lib in stdlib |
14:03:13 | FromGitter | <alehander42> usually people are annoyed by more specific things like the too-many-small dependencies thing or build/deploy/reproduce specifics |
14:03:39 | FromGitter | <alehander42> i just want to point out that i think the "people dont like deps" thing is a fallacy |
14:04:02 | * | tklohna quit (Ping timeout: 240 seconds) |
14:04:19 | FromGitter | <alehander42> not that i dont think having a distribution might be nice, but just not to base it on such a thesis imho |
14:05:38 | FromGitter | <alehander42> if you think about it, even with the novelty of ownership i've seen *a lot* of people actually think cargo is one of the main pro-s of rust compared to c++ |
14:08:22 | disruptek | you think python people want npm? |
14:08:36 | disruptek | have you used npm for anything of significant size? |
14:09:32 | * | jjido joined #nim |
14:11:08 | FromGitter | <alehander42> have you used python package management |
14:11:23 | disruptek | not recently. 😁 |
14:11:31 | FromGitter | <alehander42> the point is that it has its own problems, people design several competing package managers for it and there isnt just one good solution |
14:11:44 | FromGitter | <alehander42> npm is still better than that imo |
14:12:32 | FromGitter | <alehander42> but the point isnt that npm is good or not good, but that people want deps, and most modern languages focus on having very good package managers/3rd party lib tooling |
14:13:14 | * | GordonBGood quit (Ping timeout: 276 seconds) |
14:13:42 | disruptek | it's an outgrowth of the language features, though. and npm is just the largest example. there are other package managers in the js ecosystem, but they largely share the same issues. |
14:13:45 | FromGitter | <alehander42> so while the discussions these days about how exactly nim managers should work are great, i just wanted to disagree with the "people dont want dependencies" sentiment |
14:13:45 | FromDiscord | <Rika> is a sort proc supposed to be inplace |
14:14:11 | FromGitter | <alehander42> maybe, in some particular situations with some caveats thats true, but in 80% its not imo |
14:14:36 | FromGitter | <alehander42> disruptek but i almost never heard anybody in ruby world complaining about gems |
14:14:40 | FromGitter | <alehander42> or in rust about cargo |
14:14:42 | disruptek | python's package management is really pretty tame compared to npm. like, by an two orders of magnitude. |
14:14:51 | FromGitter | <alehander42> people loved their package ecosystems |
14:15:04 | FromGitter | <alehander42> they were like "look just add one like to this, import and great stuff happens" |
14:15:32 | disruptek | some people complain that the only way to do anything in rust is via cargo. |
14:15:35 | FromGitter | <alehander42> i think python's and npm might just have different issues |
14:15:47 | FromGitter | <alehander42> disruptek well i am sure you can still use makefiles if you want |
14:16:15 | FromGitter | <alehander42> but making 90% of the projects at least able to work with the main package manager is good |
14:16:31 | FromGitter | <alehander42> look at c++: they're scraping for something like that with conan and all other efforts |
14:17:01 | FromGitter | <alehander42> and it's probably very hard when 90% of the stuff there just isnt developed with that in mind |
14:17:22 | disruptek | this. you're comparing newer ecosystems with older ones. |
14:17:36 | FromGitter | <alehander42> look at even go: they had the simple-ish vendor thing, but still people wanted a normal package manager |
14:17:39 | disruptek | cargo doesn't have competition. |
14:18:07 | FromGitter | <alehander42> yes, but the c/c++ ecosystem started in 70/80s |
14:18:15 | FromGitter | <alehander42> thats not an excuse for any newer lang |
14:18:16 | disruptek | that's my point. |
14:18:23 | * | tklohna joined #nim |
14:18:44 | FromGitter | <alehander42> but my point is that this is also what happens if a language doesnt have a good standartized solution or at least convention |
14:18:45 | disruptek | so are you in favor of opinionated package management or...? |
14:18:49 | FromDiscord | <Rika> older ecosystems have more projects/managers which means more competition |
14:19:08 | FromGitter | <alehander42> how do you define it |
14:19:08 | disruptek | it means more code written that might not work in a different view of packaging. |
14:19:23 | FromGitter | <alehander42> well, this different view of packaging should be somehow compatible |
14:19:33 | disruptek | go is pretty opinionated. |
14:19:39 | clyybber | Araq: Re: Default fields, it's actually really easy to do the checks(very lightweight) in sem and the transformation still in transf.nim. |
14:19:41 | FromGitter | <alehander42> otherwise we get 3-4 interesting package managers, some projects that work with one, some with other |
14:19:49 | FromGitter | <alehander42> and this sucks for the user |
14:19:53 | FromGitter | <alehander42> who just wants to use a and b |
14:20:23 | disruptek | the compiler defines certain requirements. if the manager can produce them to spec, it shouldn't matter which they use. |
14:20:34 | FromGitter | <alehander42> but go now has https://github.com/golang/dep |
14:20:36 | FromGitter | <alehander42> do you mean dep |
14:20:45 | disruptek | this is why the compiler needs to be patched. 😉 |
14:20:46 | FromGitter | <alehander42> disruptek i also agree with that |
14:21:03 | FromGitter | <alehander42> having some kind of api/format that is universal |
14:21:31 | FromGitter | <alehander42> but the important thing is it works for most packages and that people can easily do whatever they need with at least one of those managers |
14:21:44 | disruptek | it already has command-line options, nim.cfg, and config.nims. the problem is, it's not narrow enough. |
14:22:18 | disruptek | just make it more naive and then package management can innovate as needs be. |
14:22:29 | Araq | clyybber: oh? |
14:22:44 | Araq | alehander42: your argument is convincing. |
14:23:15 | Araq | problem remains about how to ship e.g. comprehensions with Nim |
14:23:37 | clyybber | Araq: So I could make it transparent to macros which is IMO more consistent with the way other variables will be initialized. |
14:23:47 | Araq | or cligen or other small libs widely regarded as an improvement over what the stdlib overs. |
14:23:55 | clyybber | Like result, or `var s: SomeObj` |
14:24:08 | disruptek | i think the real issue is that we have to be able to control the venn diagram of what the compiler sees. |
14:24:31 | disruptek | if you can constrain the compiler to look in a single place, we can put whatever we want there. no problem. |
14:25:21 | disruptek | go uses an env var, iirc. not sure that's still the case. |
14:26:08 | disruptek | i'm talking about that level of simplicity. like nimblepath. because our packages are flat. |
14:26:14 | FromGitter | <alehander42> Araq well, i think one can have a "distribution" with such libs, but as i said even this looked harder to define to me |
14:26:22 | * | tklohna quit (Ping timeout: 268 seconds) |
14:26:39 | disruptek | did you look at my nimph readme? |
14:27:00 | FromGitter | <alehander42> e.g. why cligen and not https://github.com/iffy/nim-argparse or confutils |
14:27:14 | FromGitter | <alehander42> i guess stars can be a metric for inclusion |
14:27:54 | disruptek | the real question is, which packages best-serve the users. |
14:27:55 | FromGitter | <alehander42> but other option is to just have a single metapackage which one can install or even the compiler recommends |
14:28:16 | disruptek | cligen and npeg best-serve the users because their developers are so active in the community. |
14:28:27 | disruptek | they provide the best possible experience. |
14:28:30 | FromGitter | <alehander42> but this can change tomorrow |
14:28:40 | FromGitter | <alehander42> tomorrow somebody can come and write an amazing altetrnative parser lib |
14:28:44 | FromGitter | <alehander42> and people start using that |
14:29:11 | FromGitter | <alehander42> thats the point with 3rd party libs imo |
14:29:13 | disruptek | yes, and if it serves the users better, it will doubtless get stars and get distributed. |
14:29:20 | FromGitter | <alehander42> but thats already how it works |
14:29:24 | disruptek | yes. |
14:29:25 | Araq | disruptek: I did but it's beyond me |
14:29:25 | FromGitter | <alehander42> anybody that needs npeg |
14:29:30 | FromGitter | <alehander42> can go and `install npeg` |
14:29:37 | disruptek | hey, i'm the one that said araq's post was pointless, remember? 😁 |
14:29:42 | FromGitter | <alehander42> thats exactly the point of having a package manager |
14:30:32 | FromGitter | <alehander42> still, one can have a set of distributions, but i think that things get a bit political there |
14:30:38 | disruptek | nimph is just a way to nest distributions in a single file, ad infinitum. |
14:30:57 | clyybber | do we actually have an pkg issue aside from that noboy "loves" nimble? |
14:31:09 | FromGitter | <alehander42> but anyway both seem useful but imo 1.) great package manager 2.) good distribution mechanism |
14:31:17 | disruptek | package local deps is the open packaging issue that's problematic. |
14:31:21 | Araq | disruptek: what I do understand is that you want to keep --nimblePath or have something like --path:subdir/** |
14:31:46 | disruptek | Araq: that, or ffs don't look anywhere but where i tell you. |
14:32:04 | FromDiscord | <Chiqqum_Ngbata> Put me in the small-core camp. Competition amongst third parties is good / encourages engagement. Local nimble installs plz |
14:32:37 | clyybber | Why can't nimble put in a config that includes --path:nimblePath ? |
14:32:44 | FromGitter | <alehander42> disruptek nimph looks interesting but i have to read more later |
14:33:04 | disruptek | there's nothing to it. |
14:33:24 | disruptek | it trades disk space for correctness. |
14:33:55 | Araq | look, the distribution is about how to grow/evolve the stdlib, you tell me "omg, no distribution please" but then I don't know how to evolve the stdlib. |
14:34:14 | disruptek | yes you do. |
14:34:25 | Araq | ok. how? |
14:34:28 | disruptek | it's just my opinion, but i agree with everything you wrote about stdlib. |
14:34:50 | disruptek | but you know that. you and i already had that discussion. |
14:35:00 | * | solitudesf joined #nim |
14:35:04 | Araq | so please help my memory |
14:35:14 | disruptek | well, i feel that stdlib is about the compiler. |
14:35:18 | * | ertp07 quit (Ping timeout: 245 seconds) |
14:35:41 | federico3 | Araq: did you summarize the idea somewhere? |
14:35:50 | FromDiscord | <mratsim> It's not about package managers it's about API. As long as core API and data format (.nimble file) is the same, competing managers will be interoperable |
14:35:57 | disruptek | yes. |
14:36:06 | disruptek | but that api is too poorly defined right now. |
14:36:11 | FromDiscord | <mratsim> there will be period where innovations to the API (say lock files) will only be supported in one implementation |
14:36:16 | Araq | federico3: haven't you seen https://github.com/nim-lang/RFCs/issues/173 ? |
14:36:38 | FromDiscord | <mratsim> but hopefully either they converge, or one disappears |
14:36:45 | * | ertp07 joined #nim |
14:37:00 | federico3 | no |
14:37:06 | clyybber | mratsim: What core API/data format does a pkg really need? version, name and dependencies. I guess |
14:37:23 | FromDiscord | <Chiqqum_Ngbata> Personal opinion, small stdlib with great documentation. Things like cligen /might/ be a good idea to ship with nim. At a certain point the standard library probably doesn't need to grow, right? |
14:37:32 | FromDiscord | <Chiqqum_Ngbata> Is it a common complaint that the standard library isn't featureful enough? |
14:38:00 | disruptek | i'd prefer that the stdlib shrank, honestly. the larger nim grows, the less constrained it should be by its stdlib. |
14:38:04 | FromDiscord | <arnetheduck> I generally find it pretty confusing that `nim` looks for libraries all over the place in magic folders - that's the kind of stuff I'd want my package manager to take care of - specifically, if the package manager is managing paths, `nim` itself should definately not add magic lookup paths to the mix, so that I don't accidentally include some "rogue" code |
14:38:19 | disruptek | yes, it drives me nuts. |
14:38:25 | clyybber | concur |
14:38:28 | FromDiscord | <arnetheduck> lots of us think the std lib is way too big |
14:38:44 | * | ertp07 quit (Read error: Connection reset by peer) |
14:38:53 | FromGitter | <alehander42> Araq i dont say distribution is bad, just that a people dont want deps thing is not true imo |
14:38:56 | disruptek | if it's hard to find good 3rd-party nim code, that's a separate issue. |
14:38:56 | FromDiscord | <Chiqqum_Ngbata> (Being relatively new to nim I sympathize with that idea) |
14:39:04 | clyybber | I think the stdlib tries to do too much, but then doesn't fully go with it. I think we should cut off modules that are better implemented elsewhere. |
14:39:13 | FromDiscord | <arnetheduck> also, it's certainly too big for the current community to maintain leading to low quality overall |
14:39:14 | disruptek | yes. |
14:39:41 | disruptek | the fact that an implementation exists is not a high enough barrier to entry into the stdlib. |
14:39:52 | FromDiscord | <mratsim> I think that's the main issue. there are stuff that should be in the std lib but are not (big ints, not like a big int API is controversial) |
14:40:02 | disruptek | and the reliance upon the stdlib means you are forever relying upon those low-barrier-to-entry implementations. |
14:40:02 | FromDiscord | <arnetheduck> but more importantly, it's a slow and inefficient development model and holds nim itself back |
14:40:15 | disruptek | yep. |
14:40:17 | FromGitter | <alehander42> evolvng stdlib can be done with a distro, but also with just having wannabe modules under experimental/ |
14:40:21 | FromDiscord | <mratsim> and some stuff that may benefit from agility in the design space (streams) |
14:40:21 | FromGitter | <alehander42> or just with rfc-s |
14:40:45 | disruptek | a distribution really has nothing to do with nim/compiler. |
14:40:54 | disruptek | just let the community build that. |
14:41:00 | disruptek | as needed. |
14:41:03 | disruptek | as desired. |
14:41:34 | FromDiscord | <mratsim> but the thing we need it's just that everyone knows there is a way to improve and potentially replace a standard library and we will not stay with those for 1à years (aka Python 2) |
14:41:34 | Araq | that's a bit like saying "let the community fix nimble, it's open source" |
14:41:39 | disruptek | to me, the important thing is to put up signs that say, "don't use ropes; they're slow", or "don't use coro; it's getting pulled out soon" |
14:41:53 | FromDiscord | <mratsim> yes exactly disruptek: managing expectations |
14:41:58 | disruptek | my opinion on nimble is well-documented. |
14:42:07 | disruptek | nimble, n: somehow, the opposite of agile. |
14:43:22 | clyybber | Araq: I would say that ;p |
14:43:45 | clyybber | And the community does, apparently. |
14:44:04 | Araq | if anything shashlick does. |
14:44:09 | * | ertp07 joined #nim |
14:44:10 | Araq | :-) |
14:44:22 | clyybber | praise shashlick |
14:44:27 | disruptek | PRAISE |
14:44:30 | clyybber | tasty |
14:44:47 | disruptek | where is ol' shashlick? |
14:46:00 | clyybber | Araq: Is it intended that we don't infere the discriminator? And instead error with: |
14:46:14 | clyybber | cannot prove that its safe to initalize with the runtime value for the discriminator |
14:46:38 | clyybber | s/intended/intentional |
14:46:39 | FromDiscord | <mratsim> use Foo(kind: myKind, value: value, ...) |
14:46:45 | FromDiscord | <mratsim> that was changed in 1.0 |
14:46:53 | Araq | a custom error message for this case? yes, that means it's intentional. |
14:47:01 | disruptek | changed in 0.20. grrr. |
14:47:21 | clyybber | Araq: But the error message is a bit off, it says runtime value for discriminator |
14:47:21 | disruptek | but hardly worth complaining about in the grand scheme of things. |
14:47:29 | clyybber | But I don't provide the value at all. |
14:47:49 | FromDiscord | <mratsim> it's the same thing as uninitialized objects |
14:47:55 | FromDiscord | <mratsim> it might contain garbage |
14:48:14 | clyybber | mratsim: I'm talking about `Foo(value: value)` |
14:48:14 | Zevv | doesn't nim zeromem *everything* always? |
14:48:17 | FromDiscord | <mratsim> though it's a bit annoying when you want to use case object with lazy initialization |
14:48:26 | clyybber | Where the presence of value could be used to infer the kind. |
14:48:33 | disruptek | yes, that's what he's working on in the compiler right now. |
14:48:35 | clyybber | Zevv: bout to change that :D |
14:48:46 | Zevv | wow for performance reasons, right? |
14:49:00 | clyybber | for default values rather |
14:49:25 | clyybber | there is actually code in the compiler to remove unneccessary inits with the help of the dfa but its disabled |
14:49:26 | FromDiscord | <mratsim> zero init is good, it prevents a lot of bug and exploits |
14:49:33 | Zevv | ah ok. So my profiler #1 memsets() will now be replaced by memcpys() :) |
14:49:52 | FromDiscord | <mratsim> There is probably a way to divide the memset by 2 😛 |
14:50:11 | FromDiscord | <mratsim> I don't remember the trigger but for some datastructures memset is done twice |
14:50:34 | disruptek | what i'd really like is to hoist my lets to definitions at the top of the block and then let me assign them values once in one of N spots in the block. |
14:50:42 | clyybber | Araq: It's rather easy to make it infer the discriminator and is a safe feature. |
14:50:57 | disruptek | rather than making me use a var. |
14:51:30 | clyybber | disruptek: Yeah I thought about something like that in general, like immutability after the first use |
14:51:41 | clyybber | Or in a more general sense after n uses |
14:52:06 | disruptek | after 7 uses i just want it to call the destructor. |
14:52:23 | disruptek | also, make sure there's no way for me to measure uses. |
14:52:28 | FromDiscord | <mratsim> let foo = block: ...long code block... |
14:52:47 | clyybber | what do you ppl think: Should the compiler infer the discriminator kind where its inferrable? |
14:53:02 | clyybber | Pro: It's convinient |
14:53:11 | clyybber | Con: It could be a bit confusing with default fields |
14:53:17 | FromDiscord | <mratsim> ideally, I would prefer if we do not have to spell the name of the field for constructor |
14:53:46 | FromDiscord | <mratsim> Foo(kind: mykind, value: myvalue) is very noisy compared to Foo(mykind, myvalue) |
14:54:04 | disruptek | maybe it infers it but you have to add a pragma if defaults are enabled, to say "i know what i'm doing". |
14:54:04 | clyybber | Thats a seperate issue |
14:54:05 | FromDiscord | <mratsim> that would save much more typings and noise than inferring the discriminator kind |
14:54:26 | FromDiscord | <mratsim> and that would also avoid issues if we want to change the syntax of case objects to allow some common fileds I think |
14:54:34 | FromDiscord | <mratsim> fields* |
14:54:45 | clyybber | Yeah, also a seperate issue tho :p |
14:54:56 | disruptek | that noise is just noise, though. doesn't affect the boilerplate we're currently saddled with. |
14:55:01 | * | jjido quit (Quit: My MacBook has gone to sleep. ZZZzzz…) |
14:55:01 | disruptek | no semantics to it. |
14:57:49 | clyybber | disruptek: The issue of the idea in conjucntion with default fields is that, when I write `Foo(valuethatonlyexistswhenkindis1: 3)` and the default value of kind is 0, should I error then, because we are in the wrong branch or should I overwrite the default kind with the value I can infer. |
14:58:10 | leorize | error please |
14:58:21 | disruptek | error. |
14:58:36 | clyybber | Ok, so I'll just improve the current error msg. |
14:59:05 | clyybber | I take that as you don't want to infer the kind even if it doesn't have a default value? |
14:59:15 | disruptek | i have an issue somewhere for a problem where it actually errors and shouldn't, but maybe jasper fixed that. |
14:59:20 | shashlick | Am on work calls, will have to catch up later |
15:00:41 | disruptek | if it doesn't have a default value, we need to error or at least warn because discriminator objects may eventually support fields shared between variants. |
15:00:58 | disruptek | although i guess you could error when that happens instead. |
15:01:23 | clyybber | disruptek: Yeah, I'm only talking about cases where its not ambiguous |
15:01:31 | * | solitudesf quit (Ping timeout: 268 seconds) |
15:02:25 | clyybber | disruptek, leorize: So do you agree that I should infer when its not ambiguous and error when the inferred value is at odds with the default value? |
15:02:41 | disruptek | https://github.com/nim-lang/Nim/issues/11428 |
15:02:44 | clyybber | Or should I just not infer at all? |
15:03:30 | * | solitudesf joined #nim |
15:03:46 | disruptek | it seems pretty convenient in the code that i'm writing these days. |
15:04:48 | Araq | clyybber: there is already inference in a 'case' statement context |
15:05:00 | Araq | iirc, never tried it myself |
15:05:06 | * | floppydh quit (Quit: WeeChat 2.6) |
15:05:29 | Araq | disruptek: I'm still waiting for your reply |
15:05:30 | disruptek | can't seem to find the issue i had in mind, but the behavior changed in a subtle way. |
15:05:43 | disruptek | Araq: wrt what? |
15:06:20 | Araq | "you do know how to manage the stdlib already" |
15:06:31 | disruptek | i feel a little dirty saying it, but yes, i want a smaller, stricter, more naive api from the compiler wrt module search space. |
15:06:32 | clyybber | Araq: https://play.nim-lang.org/#ix=20pI doesn't work |
15:07:00 | disruptek | i agree with everything you said about the stdlib. |
15:07:01 | PMunch | clyybber, the images are being rebuilt, so the latest version in the playground is 0.17.0 |
15:07:11 | PMunch | Just FYI |
15:07:14 | clyybber | Oh |
15:07:26 | clyybber | Well the issue is reproducable in 1.0.99 too |
15:07:31 | clyybber | or whatever devel is rn |
15:07:41 | Araq | disruptek: ok, so no replacement for sugar.lc in the stdlib |
15:07:52 | Araq | we deprecate lc, then we remove it |
15:08:30 | disruptek | if you're going to remove it, the least you should do is move it to nimble. but, yeah. |
15:08:47 | disruptek | think about it. |
15:08:56 | disruptek | you're talking about not wanting to carry code that you don't use. |
15:09:02 | disruptek | why would you? |
15:09:03 | * | nixfreak_work quit (Ping timeout: 260 seconds) |
15:09:10 | Araq | I want my for loop expressions. alehander42 wrote the code |
15:09:21 | disruptek | so put them in. |
15:09:29 | clyybber | Araq: Is that snippet supposed to work or not? |
15:09:43 | Araq | clyybber: no. |
15:09:50 | disruptek | it would be crazy to create a whole programming language and then not use any of the code people write in it to make it even better. |
15:09:52 | Araq | that's not the inference I was talking about. |
15:10:27 | clyybber | Araq: Not sure I understand how in case statements one can infer |
15:10:46 | clyybber | Ah |
15:11:00 | clyybber | You mean infer properties for the code inside the branches? |
15:11:04 | disruptek | because the clauses are known. |
15:11:31 | clyybber | I'm talking about the opposite thing, in object constructors. Infer the discriminator from the branches' fields |
15:11:33 | shashlick | some quick comments - package local deps has a solution - I will document later today and share for any feedback |
15:11:43 | shashlick | implementation isn't too hard from initial review, will need to run some tests |
15:11:57 | shashlick | the main thing is ensuring backwards compatibility |
15:12:26 | shashlick | re: simplifying Nim's awareness of paths, a nim.cfg solution seems viable but the question is how to ensure it is backwards compatible again |
15:12:34 | Araq | clyybber: https://play.nim-lang.org/#ix=20pJ unfortunately this doesn't compile |
15:12:41 | shashlick | that will get figured out as well, it isn't too complicated |
15:12:48 | Araq | I thought it would, bummer :-( |
15:13:01 | disruptek | that is exactly the issue, Araq. |
15:13:47 | disruptek | shashlick: all we need is a --pleaseReallyDontLookAnywhereElse |
15:13:51 | * | kungtotte joined #nim |
15:14:00 | shashlick | the main thing I'd like everyone to focus on is that nimble can be fixed and improved and what we really need is a clear path forward on how to improve it while providing stability for the community |
15:14:37 | shashlick | @disruptek, noted and it isn't really a hard problem - there's a variety of ways to improve the status quo |
15:15:08 | * | PMunch quit (Quit: Leaving) |
15:15:12 | disruptek | yes, when you have a shashlick in your back pocket, anything is possible. 😍 |
15:15:20 | clyybber | One consistency problem I see with infering the kind is that one could argue that the default for every kind is 0 and thus should be treated like a default value (which it isn't currently) |
15:15:39 | shashlick | re: the Nim distro topic, I feel that's not really a big issue in my mind |
15:15:55 | shashlick | stdlib needs to be lean and maintainable and I like the important packages idea |
15:16:05 | clyybber | Araq: Wdyt discriminator inference yay or nay or later maybe? |
15:16:07 | shashlick | we can simply add a meta package that install all important packages |
15:16:18 | Araq | clyybber: if in doubt, leave it out. |
15:16:23 | shashlick | why do we need to take it on as a core effort, I'm not sure |
15:16:27 | clyybber | fine |
15:16:59 | shashlick | we can vote and add good packages to the stdlib if there's interest but if we want to keep things lean, I'm fine with that |
15:17:18 | shashlick | package management can be the goto way to pull in what you need |
15:17:26 | disruptek | you can do meta-packages today, so that's a done deal, afaiac. |
15:17:29 | shashlick | and we can innovate in terms of enabling binary packages |
15:18:07 | shashlick | like pip allows downloading pre-built binaries |
15:18:32 | shashlick | I know there's a bunch of issues but with some focus on nimble, we can take it places |
15:18:59 | clyybber | what does one need binary packages for? |
15:19:00 | shashlick | I just want to have the ability to move faster somehow |
15:19:16 | * | drewr joined #nim |
15:19:43 | shashlick | you don't need any deps for that package installed |
15:20:06 | clyybber | But thats only useful for executables right? |
15:20:24 | shashlick | we can just as well pull in static libs and dlls |
15:20:38 | clyybber | And embed them into the binary? |
15:20:42 | shashlick | right now, Nim only relies on source distribution, we should look into prebuilt |
15:21:01 | clyybber | Seems unneccessary IMO |
15:21:27 | disruptek | start with the nail, not the hammer. |
15:21:34 | shashlick | that's how C/C++ works - sure you can build your own copy |
15:21:44 | shashlick | but there's pre-built stuff in the OS ready to use |
15:21:53 | clyybber | Why would I install the dll dependency with my pkg manager when the user thats going to run my executable has to have it anyways? |
15:21:57 | disruptek | we're talking about people who have C and Nim compilers. do they need binaries? |
15:22:16 | shashlick | and you don't care what torture that maintainer had to go thru to get it built, you don't inherit that problem |
15:22:49 | clyybber | Umm, but build configurations can be shared |
15:23:00 | clyybber | And that seems more sane than sharing random binaries |
15:23:07 | shashlick | dependencies don't end at the package you nimble install - it can also install a variety of things |
15:23:10 | clyybber | then embedding them into the binary (because thats the only use) |
15:23:16 | shashlick | and every end user has to deal with that |
15:23:17 | disruptek | but if you care so much about that tortue, why don't you contribute your binary distributions to libarchive and reach a much larger audience? |
15:23:39 | disruptek | don't hide your light under a bushel, shashlick. |
15:23:47 | disruptek | nim can afford to share you with the rest of the world. |
15:23:47 | clyybber | I don't get why nimble cares about binaries/executables at all, |
15:24:19 | disruptek | clyybber: because if it didn't, `nimble develop` would work correctly for most of cli tools. and we can't have that. |
15:24:27 | Araq | clyybber: mostly because some packages come with helper binaries, eg. 'karun' from Karax |
15:24:30 | shashlick | today, if anyone wants to use nimarchive, they have to build the whole thing and deal with the nuances of CI |
15:24:47 | clyybber | ah |
15:24:49 | shashlick | I added it to choosenim and all the learnings had to be applied to the choosenim CI |
15:25:16 | shashlick | nimble does not support installing binaries unless they are checked into source control |
15:25:26 | shashlick | this is not how it is with pypi for example |
15:25:42 | shashlick | and the entire world lives with shared and static libs, it doesn't need some new justification |
15:27:27 | FromGitter | <zacharycarter> sokol_gfx and sokol_app bindings are working \o/ |
15:27:30 | disruptek | it's open to debate, but most importantly, it doesn't seem like the thing that's holding back nim adoption. |
15:27:32 | FromGitter | <zacharycarter> (https://files.gitter.im/nim-lang/Nim/Rkbk/image.png) |
15:28:23 | disruptek | i want one of those gold nims you got there. |
15:29:15 | shashlick | If Nim made it easier to create Dynamic libraries that can be used by other communities, it would make it even more popular than it is today |
15:30:22 | FromGitter | <zacharycarter> is this ever coming: `import lib/[sokol_app as sapp, sokol_gfx as sgfx]` |
15:30:45 | federico3 | shashlick: *yes* |
15:30:50 | disruptek | you can't say that you want us to improve deficiencies in nimble and then list a bunch of greenfield features that you want to work on. |
15:32:56 | shashlick | Step by step |
15:33:00 | jxy | pypi supports very limited amount of arch/os and goes crazy with non-standard compiler/library locations |
15:33:32 | shashlick | But all related to the deps |
15:33:35 | * | solitudesf quit (Ping timeout: 268 seconds) |
15:34:18 | * | solitudesf joined #nim |
15:34:54 | jxy | leaving deps to system/package manager would be better |
15:34:59 | Araq | zacharycarter: can't see why not |
15:36:13 | FromGitter | <zacharycarter> sweet :D |
15:36:35 | clyybber | Btw, why array syntax instead of tuple? |
15:37:05 | clyybber | `import lib/(sokol_app as sapp, sokol_gfx as sgfx)` ? |
15:37:21 | clyybber | Hmm, nevermind |
15:37:44 | FromGitter | <zacharycarter> man supercell' |
15:37:45 | clyybber | The current one looks cooler |
15:38:18 | clyybber | no entry for supercell in the manual |
15:38:33 | FromGitter | <zacharycarter> extending it in any way takes a lot of work - it's pretty refreshing to come home and work on my Nim project |
15:38:51 | FromGitter | <zacharycarter> heh - I wish there was a manual for it, it'd make my job easier |
15:39:51 | FromGitter | <zacharycarter> oh - I realize now, because I typed in man supercell at first haha |
15:39:57 | shashlick | @jxy good luck getting every distro to pick up Nim let alone packages |
15:41:39 | clyybber | zacharycarter: What were you intending to write? |
15:41:47 | clyybber | The edits don't appear here I think |
15:42:11 | FromGitter | <Clyybber> ah |
15:42:28 | FromGitter | <Clyybber> @zacharycarter are you working at supercell now? |
15:43:34 | FromGitter | <zacharycarter> no - Frogmind but we use supercell's backend from clash of clans / royale |
15:44:01 | clyybber | Oh cool, thats the badland devs right? |
15:44:05 | FromGitter | <zacharycarter> yup |
15:44:23 | clyybber | I remember playing that game with 15 fps or so on my 480p galaxy y phone :D |
15:44:44 | FromGitter | <zacharycarter> haha :P that's more playing of it than I've done |
15:45:16 | FromGitter | <zacharycarter> I've only played the games that we're working on now, but I've positive things about badlands |
15:46:17 | clyybber | what games are you working on rn? |
15:46:35 | FromGitter | <zacharycarter> Badland Brawl and Rumble Stars |
15:46:52 | FromGitter | <zacharycarter> they've already globally launched, and then we have one in soft launch called Feast Island |
15:47:01 | jxy | shashlick: maybe leave the external deps to system package manager |
15:47:25 | clyybber | zacharycarter: Mulitplayer games |
15:47:28 | jxy | nimble needs a robust way to check the existing shared libraries |
15:47:41 | clyybber | also I have to confess, I never bought badlands, used luckypatcher :p |
15:48:01 | * | jxy quit (Quit: leaving) |
15:48:07 | FromGitter | <zacharycarter> clyybber: yup! the backend scales well but it's a complex beast, especially with the physics simulations |
15:48:30 | clyybber | I can imagine. |
15:48:48 | clyybber | do you use your vector graphics? |
15:48:55 | FromGitter | <zacharycarter> I think I'm also rusty working on large object-oriented codebases |
15:49:49 | FromGitter | <zacharycarter> hmm - I haven't looked at the art assets too closely yet, I'm not sure what format they're in and how they're being rendered |
15:50:19 | FromGitter | <zacharycarter> about all I've done with the game client is get it to run, right now I'm working on loading game settings from a database rather than files |
15:50:42 | clyybber | Ah cool. I was always wondering |
15:50:52 | clyybber | mobile games have to be fairly efficient |
15:51:00 | clyybber | and still most of them use vector graphics |
15:51:01 | FromGitter | <zacharycarter> which I thought I had solved today, but the past two days have been digging through code all day, thinking I've found a solution, only to realize later that my solution won't work and then starting over |
15:51:14 | FromGitter | <zacharycarter> yeah - I wouldn't be surprised if that was the case |
15:52:08 | clyybber | poor config files have to die. |
15:52:14 | FromDiscord | <Rika> dont know where to ask, but i'd appreciate a review of this code if no one minds https://github.com/de-odex/circa/blob/feature/ordered-mods/src/circa/mods.nim |
15:52:30 | clyybber | but I guess its fair in a multiplayer focused mobile game, dont want people to mess around too much |
15:53:00 | FromGitter | <zacharycarter> well - it's not great when adjusting liveops requires a whole new client and server build |
15:53:19 | FromGitter | <zacharycarter> like scheduling a new event or something |
15:54:31 | clyybber | Rika: Looks fine, but use const instead of a global let if possible. |
15:54:43 | clyybber | Rika: Are you building an osu! client? |
15:56:17 | FromGitter | <zacharycarter> what is osu? |
15:56:48 | clyybber | a rythm game |
15:56:54 | FromDiscord | <Winton> Hi |
15:56:54 | FromGitter | <zacharycarter> ah |
15:57:08 | clyybber | where you move the cursor a lot |
15:57:30 | FromDiscord | <Winton> Some library to create interface |
16:00:11 | * | jxy joined #nim |
16:01:41 | FromDiscord | <Rika> clyybber, shit ive been found out |
16:02:17 | FromDiscord | <Rika> its just a utility library, not for recreating osu but for calculating things like pp or replay stuff |
16:02:52 | FromDiscord | <Rika> its actually further in development than what's shown in the repo, i just haven't sorted out all of the commits because its really taxing to keep an organized history |
16:10:47 | FromDiscord | <Rika> clyybber, is there no issue with the way i create a table for the mod to string mapping? |
16:12:42 | FromDiscord | <Winton> clyybber |
16:12:43 | FromDiscord | <Winton> ? |
16:13:40 | clyybber | Winton ? |
16:13:59 | * | NimBot joined #nim |
16:14:35 | clyybber | Rika: No issue |
16:15:28 | clyybber | But when you know the mappings at compiletime anyways you can just use string enums |
16:15:38 | disruptek | so is there a plan for this? https://github.com/nim-lang/Nim/issues/11428 |
16:15:52 | disruptek | just curious. |
16:16:21 | * | LargeEpsilon_ joined #nim |
16:16:51 | * | solitudesf quit (Quit: Leaving) |
16:17:06 | clyybber | disruptek: Default fields are one step |
16:17:09 | * | solitudesf joined #nim |
16:17:15 | clyybber | the next steps should follow |
16:18:08 | disruptek | cool. |
16:19:30 | FromDiscord | <Rika> clyybber, i need both long names and short names ("HalfTime", "ht") |
16:20:02 | * | LargeEpsilon quit (Ping timeout: 240 seconds) |
16:20:43 | * | ertp07 quit (Ping timeout: 245 seconds) |
16:21:04 | * | LargeEpsilon_ quit (Ping timeout: 268 seconds) |
16:25:00 | clyybber | Rika: Ah, yeah seems appropriate then. |
16:25:44 | clyybber | Rika: I think you shoul use `let` for the table instead of `const` though, but I am not sure why. Araq may chime in and explain |
16:26:21 | FromDiscord | <Rika> the table needs let afaik |
16:26:52 | clyybber | Ah, ok. Then its all fine. |
16:27:25 | clyybber | Rika: its gone |
16:27:27 | clyybber | the link is dead |
16:28:17 | clyybber | ah, I see. YOu just cleaned up the repo structure a bit |
16:28:19 | * | jjido joined #nim |
16:28:20 | FromDiscord | <Rika> ah, i deleted the branch |
16:28:30 | FromDiscord | <Rika> i merged it already into devel |
16:28:53 | clyybber | I see |
16:29:05 | FromDiscord | <Rika> since you and i am the only ones reviewing the code, there isnt much to do with PRs yet |
16:30:12 | * | ertp07 joined #nim |
16:34:35 | * | sagax quit (Quit: Konversation terminated!) |
16:34:56 | * | sagax joined #nim |
16:36:57 | shashlick | @jxy - getHeader in nimterop does that for you |
16:37:36 | shashlick | It can search the standard shared and static libs |
16:38:16 | * | jjido quit (Quit: My MacBook has gone to sleep. ZZZzzz…) |
17:03:09 | * | Ekho quit (Quit: An alternate universe was just created where I didn't leave. But here, I left you. I'm sorry.) |
17:03:59 | * | jjido joined #nim |
17:04:03 | * | Ekho joined #nim |
17:08:46 | * | Ekho quit (Max SendQ exceeded) |
17:12:49 | * | jjido quit (Quit: My MacBook has gone to sleep. ZZZzzz…) |
17:15:01 | FromDiscord | <Lantos> so guys what irc do you use? |
17:17:20 | lqdev[m] | freenode#nim |
17:19:03 | clyybber | I think he meant irc client :) |
17:19:08 | clyybber | I use weechat |
17:20:25 | lqdev[m] | clyybber: I know he probably meant that, but IRC is IRC and an IRC client is an IRC client ;) |
17:21:04 | FromGitter | <alehander42> hm why does |
17:21:04 | FromGitter | <alehander42> withPackageName |
17:21:12 | FromGitter | <alehander42> not return the nimcahe path + .c file to me |
17:21:27 | * | Ekho joined #nim |
17:21:32 | * | Ekho quit (Max SendQ exceeded) |
17:21:42 | FromGitter | <alehander42> maybe i should pass .cfilename |
17:21:43 | FromGitter | <alehander42> sorry |
17:22:26 | FromGitter | <alehander42> hm withPackageName(p.config, p.module.cfilename) still returns /home/al/codetracer/examples/@mfind.nim |
17:22:43 | FromGitter | <alehander42> i expect something like <path to nimcache>/mfind.c |
17:27:57 | FromDiscord | <Lantos> how do I connect to the nim in weechat |
17:27:58 | FromDiscord | <Lantos> /server add gitter irc.gitter.im -username=user -password=***** -autoconnect |
17:28:10 | FromDiscord | <Lantos> how do I connect to the nim in weechat |
17:28:10 | FromDiscord | <Lantos> ```/server add gitter irc.gitter.im -username=user -password=***** -autoconnect``` |
17:28:54 | * | clyybber quit (Ping timeout: 268 seconds) |
17:29:27 | * | Ekho joined #nim |
17:29:31 | * | filcuc quit (Quit: KVIrc 5.0.0 Aria http://www.kvirc.net/) |
17:30:34 | * | clyybber joined #nim |
17:31:18 | FromGitter | <LantosTG> Oh |
17:32:15 | narimiran | connect to freenode |
17:35:05 | disruptek | gah today's code is creepier than usual. |
17:35:11 | FromDiscord | <Lantos> whats the nickserve for nim? |
17:35:41 | * | clyybber quit (Ping timeout: 268 seconds) |
17:35:46 | leorize | is there proc in Nim for removing diacritics from utf-8 strings? |
17:38:32 | disruptek | you could do it with unidecode i guess. |
17:39:49 | Zevv | I doubt Nim has the tables onboard for that |
17:40:03 | disruptek | nope. |
17:40:10 | * | anon joined #nim |
17:40:21 | anon | hello |
17:40:31 | * | anon is now known as LantosTG |
17:40:37 | LantosTG | :) |
17:40:46 | narimiran | LantosTG: welcome :) |
17:41:00 | * | LargeEpsilon_ joined #nim |
17:41:02 | disruptek | you made it, huh? |
17:41:07 | LantosTG | made it |
17:41:16 | disruptek | what's good about weechat? |
17:41:30 | LantosTG | took the words out of my mouth |
17:42:00 | Zevv | leorize: just map 'àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ' to 'aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY' :) |
17:42:25 | disruptek | probably the best solution. |
17:42:25 | leorize | nim has an unidecode table :P |
17:42:30 | leorize | looks like I can use that |
17:42:35 | LantosTG | can you @disruptek |
17:42:40 | Zevv | "an usnicode table" |
17:42:46 | Zevv | there's *tons* of unicode tables, but nim only has a few |
17:43:00 | disruptek | you need my new renderer, `disruptex`. |
17:43:17 | leorize | Zevv: that mapping won't work for my language :P |
17:45:29 | * | LargeEpsilon_ quit (Read error: Connection reset by peer) |
17:45:47 | narimiran | leorize: what weird language is that? |
17:46:01 | narimiran | oh, it won't work for mine too :D |
17:46:14 | Zevv | pfff last time I helped any of you |
17:47:14 | narimiran | Zevv: how could you missed čćšđž? |
17:47:27 | Zevv | easy :) |
17:47:35 | narimiran | :Đ |
17:49:02 | leorize | spot the differences: Đ Ð |
17:49:14 | * | Trustable joined #nim |
17:49:19 | narimiran | i can't |
17:49:44 | narimiran | is one icelandic and the other one ex-yugoslavian? |
17:51:01 | narimiran | i know that iceland has ð, whose capital is Ð. and ex-yu has đ whoce capital is Đ |
17:51:06 | leorize | yea |
17:51:17 | narimiran | how many internet points did i win? |
17:51:57 | narimiran | and what is your language, leorize? ;) |
17:52:43 | leorize | try to guess :) it should appear in one or two of my repos somewhere on the internet :P |
17:52:50 | leorize | mine* |
17:53:21 | FromGitter | <Willyboar> This αεδφθψωξ |
17:53:30 | FromGitter | <Willyboar> ??? |
17:54:00 | narimiran | is that.... aedftfox? |
17:54:02 | disruptek | that's my dad's name. |
17:54:50 | narimiran | *aedftpox |
17:56:01 | narimiran | leorize: descriptions for all your repos are written in english. thanks for the hint, it really helped :P |
17:56:33 | * | ertp07 quit (Ping timeout: 245 seconds) |
17:57:37 | Zevv | Why the hell did I get some CDN page checking my browser when going to nim playground? |
17:57:57 | narimiran | maybe somebody is trying to DDOS the playground? |
17:58:12 | Zevv | yeah but is it behind cloudflare or something?! |
17:58:13 | narimiran | because exactly that happened yesterday with that N++ stuff |
17:58:23 | Zevv | anyway, here is the thingy remover: https://play.nim-lang.org/#ix=20qu |
17:58:30 | Zevv | scroll right to find the 'submit' button :) |
17:59:07 | leorize | I got 502 :P |
17:59:41 | LantosTG | exit |
17:59:45 | * | LantosTG quit (Quit: WeeChat 1.9.1) |
18:00:03 | leorize | weechat 1.9.1? how old is that? |
18:02:21 | disruptek | remember, PMunch is rebuilding it. he said it'd be running an old version of the container. |
18:02:44 | Zevv | ah right |
18:03:19 | federico3 | leorize: only 2 years actually |
18:03:38 | * | jfoutaise quit (Ping timeout: 240 seconds) |
18:05:47 | * | jfoutaise joined #nim |
18:10:16 | * | kungtotte quit (Read error: Connection reset by peer) |
18:11:05 | * | ertp07 joined #nim |
18:11:41 | * | nsf joined #nim |
18:12:26 | * | ertp07 quit (Read error: Connection reset by peer) |
18:14:19 | * | rockcavera quit (Remote host closed the connection) |
18:15:03 | leorize | narimiran: well I do have more than just github :P |
18:15:29 | leorize | but probably I've taken down things with my name on it :P |
18:15:53 | disruptek | easy: vimscript is your native tongue. |
18:16:08 | * | fredrik92 joined #nim |
18:18:43 | * | couven92 quit (Disconnected by services) |
18:18:51 | * | fredrik92 is now known as couven92 |
18:19:08 | * | fredrik92 joined #nim |
18:22:59 | * | clyybber joined #nim |
18:23:10 | * | ertp07 joined #nim |
18:24:24 | narimiran | leorize: nothing useful on gitlab either. i give up. |
18:25:52 | clyybber | I believe its what disruptek said |
18:25:57 | clyybber | |
18:26:16 | disruptek | i think he just took his name down. i saw it the other day. |
18:26:49 | * | ertp07 quit (Client Quit) |
18:32:56 | * | jken left #nim ("Leaving") |
18:33:02 | * | jken joined #nim |
18:39:00 | * | theelous3 joined #nim |
18:42:34 | FromGitter | <Willyboar> @narimiran θ = theta , ψ = psi |
18:42:42 | * | jjido joined #nim |
18:43:29 | * | GordonBGood joined #nim |
18:49:57 | GordonBGood | clyyber: sorry, grabbed some zz's: re: B/D, that's the Bacon/Dingle paper upon which Araq based the owned ref's of newruntime |
18:50:16 | GordonBGood | NSorry, clyybber |
18:50:28 | FromGitter | <awr1> i now have some free time again! |
18:50:37 | FromGitter | <awr1> i'm updating choosenim to head and i'm getting this error |
18:50:41 | FromGitter | <awr1> ... /usr/bin/ld: /home/awr/.cache/nim/nimsuggest_r/@m..@[email protected]: file not recognized: file truncated |
18:50:50 | FromGitter | <awr1> should i just delete the nim cache folder |
18:50:58 | disruptek | ctrl-alt-del |
18:53:01 | clyybber | GordonBGood: Ah yeah, I remember |
19:00:33 | Araq | GordonBGood, were you saying that 'up' needs to stay a 'ref' for your code to work? |
19:02:29 | * | jjido quit (Quit: My MacBook has gone to sleep. ZZZzzz…) |
19:04:42 | FromDiscord | <Lantos> anyone used https://github.com/genotrance/nimgraphql? |
19:04:42 | FromDiscord | <Lantos> or some sort of graphql in nim ? |
19:05:38 | * | sentreen_ joined #nim |
19:08:11 | disruptek | Lantos: https://github.com/jdhorwitz/NimQL |
19:08:16 | disruptek | haven't used it. |
19:08:42 | disruptek | seems to be all of 3 lines long, of which all are comments. |
19:09:03 | disruptek | tests pass though, so... |
19:09:15 | disruptek | `doAssert(1 + 1 == 2)` |
19:10:02 | * | sentreen quit (Ping timeout: 268 seconds) |
19:10:08 | clyybber | the best code is that which isn't needed |
19:10:17 | disruptek | no code is fast code. |
19:10:29 | FromGitter | <awr1> deleting the folder worked |
19:11:08 | clyybber | I detached all io from my PC, and now its freaking fast |
19:11:17 | * | jjido joined #nim |
19:11:25 | clyybber | also I might have solved NP P |
19:11:50 | clyybber | (im writing this from inside) |
19:12:42 | disruptek | i thought i smelled something burning. |
19:12:42 | Araq | let N = 1 ==> NP == P. Simple. |
19:13:04 | disruptek | awr1: welcome to the docker era of sysadmin. |
19:14:55 | FromDiscord | <Lantos> lol disruptek you got me excited |
19:15:22 | disruptek | me too. i forked that package ages ago. |
19:15:23 | shashlick | @Lantos - i wasn't able to recreate your nimgraphql issue |
19:15:50 | shashlick | what version of gcc are you using? |
19:16:06 | FromDiscord | <Lantos> are you the maintainer ? |
19:16:40 | FromDiscord | <Lantos> ``` |
19:16:41 | FromDiscord | <Lantos> Thread model: posix |
19:16:41 | FromDiscord | <Lantos> gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1) |
19:16:41 | FromDiscord | <Lantos> ``` |
19:17:15 | disruptek | nah, i usually sprinkle code among my comments, but it's about the same result -- trivial and similarly useless. |
19:18:45 | GordonBGood | Araq: I got the test program to compile and run by manual lifting the smults proc out of the hamming iterator and the inner LazyList generator out so it wasn't nested... |
19:19:48 | GordonBGood | So it now is able to find the upfield with less nesting, but while the program runs, the answers are wrong... |
19:20:09 | Araq | :O |
19:20:19 | disruptek | wrong answers fast. some people pay a lot for that. |
19:20:36 | Araq | GordonBGood, need to run it via valgrind |
19:21:44 | shashlick | @Lantos - yep |
19:22:43 | GordonBGood | There is something incomplete in the region of line 696 of lambdalifting.nim; even when upfield is found, I can't see where it returns a closure - makeClosure is never called out the bottom |
19:22:53 | FromDiscord | <Lantos> do you need to run it with nim cpp rather then nim c? |
19:22:54 | shashlick | looks like your gcc is quite up to date, not sure what to do cause i have tested this on ubuntu |
19:23:38 | shashlick | yep - https://github.com/genotrance/nimgraphql/blob/master/nimgraphql.nimble#L30 |
19:23:38 | GordonBGood | Araq: valgrind? I've never used it. How do you set it up, any docs? |
19:24:05 | FromDiscord | <Lantos> I'll give it a shot with cpp |
19:24:12 | Araq | it's not for Windows |
19:27:01 | disruptek | shashlick: your nimgraphql builds for me but it looks like some test data is missing. |
19:28:07 | GordonBGood | Araq: valgrind's not for Windows? Can't be compiled under MSYS2? |
19:29:02 | Araq | forget MSYS2 |
19:29:24 | Araq | I'll have a look at it soon. what's the status of --seqsv2? |
19:29:28 | GordonBGood | Araq: anyway, if the bottom of the symToClosure proc in lambdalifting.nim isn't complete, it can't work, can it? |
19:31:16 | shashlick | @disruptek - it is barebones |
19:31:21 | FromDiscord | <Lantos> no longer getting the ast error. It build but getting data missing |
19:31:38 | FromDiscord | <Lantos> Unhandled exception: cannot open: nimgraphql/test/kitchen-sink.graphql [IOError] |
19:31:39 | FromDiscord | <Lantos> [FAILED] parsing without schema support |
19:31:39 | FromDiscord | <Lantos> /home/anon/Documents/nim/nimgraphql/tests/tnimgraphql.nim(26) tnimgraphql |
19:31:39 | FromDiscord | <Lantos> /home/anon/.choosenim/toolchains/nim-1.0.0/lib/system/io.nim(667) readFile |
19:31:39 | FromDiscord | <Lantos> |
19:31:41 | FromDiscord | <Lantos> Unhandled exception: cannot open: nimgraphql/test/schema-kitchen-sink.graphql [IOError] |
19:31:41 | FromDiscord | <Lantos> [FAILED] parsing with schema support |
19:31:44 | FromDiscord | <Lantos> Error: execution of an external program failed: '/home/anon/Documents/nim/nimgraphql/tests/tnimgraphql ' |
19:31:50 | FromDiscord | <Lantos> but I think I kknow where they are |
19:31:57 | GordonBGood | Araq, seqv2 is coming along but I keep running into snags dealing with the difference of being object based rather than ptr (or ref?) based, requiring more "when" cases |
19:31:58 | FromDiscord | <Lantos> its generated after nimble install isnt it? |
19:33:07 | GordonBGood | I spent most of today your time investigating this ref counting, which actually helped as in digging into some of your patches I think I understand better what needs to be done |
19:33:09 | Araq | GordonBGood, how is symToClosure incomplete? |
19:33:31 | FromDiscord | <Lantos> [Suite] GraphQL Parsing Tests |
19:33:31 | FromDiscord | <Lantos> [OK] parsing without schema support |
19:33:31 | FromDiscord | <Lantos> [OK] parsing with schema support |
19:34:53 | disruptek | oh, yeah. works fine after i install it. |
19:35:14 | disruptek | another gold star for shashlick. |
19:35:16 | disruptek | PRAISE |
19:36:06 | FromDiscord | <Lantos> (::) cookie |
19:36:13 | disruptek | sadly, another case where the tests for a nimble package failed for no explicable reason. |
19:37:15 | GordonBGood | Araq: on symToClosure, it seems we are dealing with the bottom "else" case, and which every other successful case ends with a call to makeClosure (or closureCreationForIter)... |
19:37:38 | GordonBGood | the code seems to be able to fall out the bottom without assigning anything to result |
19:37:51 | dom96 | ooh treeform, thanks for the links |
19:37:55 | GordonBGood | At least, if I understand the code correctly |
19:39:18 | Araq | well no, it's a 'while true' loop that must exit via some 'return' |
19:39:19 | * | rockcavera joined #nim |
19:39:36 | Araq | there is no "fall out to the bottom" |
19:39:42 | GordonBGood | By lifting the closure creation code so it wasn't as deeply nested, I managed to get past the check for upfield being nil, but now it runs, but incorrectly |
19:40:02 | FromDiscord | <Lantos> Now just got to work out how to use it ;p |
19:40:20 | Araq | must be something else, in theory lambdalifting requires no further patches |
19:40:22 | shashlick | seems like i didn't check in the test file 🙂 |
19:40:31 | shashlick | @dom96 - choosenim PR 😄 |
19:40:36 | Araq | bbl |
19:41:00 | Araq | GordonBGood, anyway, keep up the good work and no rush |
19:41:07 | dom96 | Happy halloween/no-brexit day :D |
19:41:41 | shashlick | @disruptek / @Lantos - it should be in the the code that's checked out |
19:41:48 | GordonBGood | Araq, well something gets assigned to access, and then the proc ends, which would mean that result just contains whatever is default for PNode, which would be nil, right? |
19:41:49 | shashlick | need to run the test in the root dir, not in tests |
19:41:54 | shashlick | since file is relative to project root |
19:42:23 | disruptek | okay, but it seems that it's only pulled it when you install the package. |
19:42:37 | shashlick | you need to run `nimble setup` |
19:42:40 | FromDiscord | <Lantos> thanks shashlick will check it out after dinner. Have you pushed this to the nimble package manager? |
19:42:40 | FromDiscord | <Lantos> https://nimble.directory/search?query=graphql |
19:42:52 | shashlick | no i hadn't yet |
19:43:12 | GordonBGood | And the generated code errors kind of reflect this as if the generated closures are just placeholders |
19:43:14 | FromDiscord | <Lantos> I think it has building pass/fails to help |
19:43:57 | disruptek | shashlick: maybe `before test: setupTask()`? |
19:43:58 | GordonBGood | The code runs and gives answers, but the answers are just 2 and 3 as if the LazyList's were never advanced |
19:44:00 | shashlick | main problem is that nimble doesn't like nimgen wrappers too much cause i need to do stuff in `before install` which is problematic |
19:44:11 | GordonBGood | And the test program exits with an error |
19:44:23 | disruptek | damn lazy lists. |
19:44:28 | disruptek | don't do a lick of work. |
19:45:38 | clyybber | GordonBGood: Might be handy to push your changes so we can check them out |
19:47:46 | GordonBGood | The good news is that the test program runs quite fast compared to Boehm, but I don't know how valid that is because of the errrors... |
19:48:53 | GordonBGood | also, the current --gc:destructors, if I turn on --threads:on, the test program doesn't get very far before crashing |
19:49:15 | * | cyraxjoe quit (Quit: I'm out!) |
19:49:34 | shashlick | @Lantos - https://github.com/nim-lang/packages/pull/1231 |
19:50:54 | GordonBGood | clyybber: the above problems aren't related to seqsv2, they are related to me writing a test program that more thouroughly tests GC/ref counting, including closures |
19:52:03 | * | cyraxjoe joined #nim |
19:52:20 | GordonBGood | clyybber: When I get back to seqsv2 today, and if I run into further time delaying problems, I'll push my changes to see if you guys can help |
19:52:59 | GordonBGood | I'm new at this, so you might jump right to what my problems are |
19:53:36 | * | cgfuh joined #nim |
19:54:15 | GordonBGood | I regard both seqsv2 and araq's ref counting project as top priorities that need to get finished in order to get closure to Nim version 1.2 |
19:55:24 | GordonBGood | But I didn't think the testing of GC was thorough enough, especially including closures and speed benchmarks, so wanted to contribute the LazyList Hammings benchmark |
19:57:39 | GordonBGood | clyybber: GC/ref counting benchmark running under Boehm - https://wandbox.org/permlink/vZIUDOyygNxh7FOb |
19:58:28 | GordonBGood | The Wandbox head hasn't been updated to the latest ref counting branch yet, so won't run with --gc:destructors... |
19:58:46 | * | wo joined #nim |
19:59:03 | GordonBGood | And even with the latest devel on my machine, there are the above described problems |
20:01:26 | * | wo quit (Remote host closed the connection) |
20:01:33 | * | shadowbane joined #nim |
20:02:49 | GordonBGood | disruptek: lazy lists only work when you force them (to work) ;) |
20:03:08 | * | shadowbane quit (Client Quit) |
20:03:23 | disruptek | get out the whip. |
20:04:09 | * | disruptek cracks the whip at the lazy lists. |
20:04:20 | disruptek | y'know the real problem with these lists? |
20:04:40 | disruptek | they're async. it looks like they're all working, from a distance, but when you get closer... only one is. |
20:04:48 | GordonBGood | Araq: re: keep up the good work - we won't know how good it is until I get something working :/ |
20:04:52 | * | disruptek cracks the whip at the lazy lists. |
20:06:23 | GordonBGood | disruptek: yeah, lazy lists have their limitations, but they seem to be a good way to "stress test" araq's implentations of MM |
20:06:42 | FromDiscord | <Lantos> great stuff shashlick! |
20:07:01 | disruptek | that's why i'm glad i'm not a cow. |
20:08:36 | GordonBGood | disruptek: although cow's never worry about being async - they never worry about anything much other than the next bite of feed |
20:08:48 | disruptek | are you kidding? |
20:09:06 | disruptek | cows live in a veritable crucible of stress over how they'll provide us enough milk. |
20:09:20 | GordonBGood | I am personally acquainted with quite a few cows |
20:09:21 | disruptek | talk to a cow sometime. |
20:09:26 | disruptek | well, then you know. |
20:09:37 | shashlick | cows are async, they swallow food for later chewing |
20:09:39 | FromDiscord | <Lantos> it'd be nice to be a swiss cow. nice fields |
20:09:45 | shashlick | never know what algorithm it uses behind the scenes |
20:09:57 | disruptek | they are multi-core when it comes to digestion. |
20:10:04 | disruptek | some work-stealing going on, to boot. |
20:10:12 | shashlick | a really good balance of async and multi-threading |
20:10:29 | disruptek | well, we know async excels at i/o. |
20:10:46 | GordonBGood | In my personal experience with cows, they never even think that they produce milk, they just feel relief when someone relieves them of it |
20:11:59 | FromDiscord | <Lantos> did you say you uploaded an example shashlick |
20:12:00 | GordonBGood | shashlick: I think they just produce futures - not necessary to multi-thread |
20:12:22 | disruptek | yep, beef futures. |
20:13:04 | GordonBGood | cows excel at io; food and air in, milk and s..t out |
20:13:52 | GordonBGood | yep, milk and beef futers, but quite a few "andThen's" inbetween |
20:14:17 | clyybber | I have to implement a lazy-scheduler, based on the principle that is the opposite of work-stealing |
20:14:44 | clyybber | and then watch those lazy fucks do no work |
20:15:18 | * | shadowbane joined #nim |
20:15:52 | * | shadowbane quit (Client Quit) |
20:17:07 | shashlick | @Lantos no just published to nimble directory |
20:17:58 | GordonBGood | clyybber: yeah, lazy/deferred has it's uses, but we need a really good closure implementation to make it work... |
20:18:37 | * | shadowbane joined #nim |
20:18:38 | GordonBGood | It's actually incredible how well the legacy closures work, considering C didn't have them |
20:19:06 | GordonBGood | ^legacy closures in Nim. |
20:25:17 | GordonBGood | excuse me for a few hours, middle of the night here |
20:27:40 | clyybber | GordonBGood: Oh I wasn't referring to anything, just talking out of my ass |
20:28:10 | clyybber | GordonBGood: Good night. I assume you are in asia? |
20:28:32 | GordonBGood | clyybber: yeah, Thailand |
20:29:03 | clyybber | Ha, nice. |
20:29:45 | GordonBGood | clyybber: can be nice; it can be whatever you make it... |
20:30:41 | GordonBGood | clyybber: pretty good place for entering geezerhood, as I am |
20:31:12 | clyybber | A friend of mine used to live in thailand for soem years |
20:31:36 | clyybber | the best thing must be eating coconuts as a whole |
20:31:41 | * | nsf quit (Quit: WeeChat 2.6) |
20:31:47 | GordonBGood | I've been here for over 27 years |
20:32:15 | clyybber | GordonBGood: rural or urban? |
20:33:13 | GordonBGood | clyybber: I've been both, was on a place on the beach about 12 km out of town, now in a smallish city, about 100,000 pop |
20:34:08 | GordonBGood | Both have their advantages, outside was more laid back; now everything is convenient, walking distance away |
20:35:29 | clyybber | hmm, hows the temperature? |
20:35:36 | GordonBGood | still just 500 m away from the beach |
20:35:44 | clyybber | thats awesome |
20:36:42 | GordonBGood | Not as hot as some places in Asia because of being on the sea - 24 C at night, usually about 33 in the day unless it's raining, when it might be not much above the night |
20:37:23 | clyybber | I assume its like that the whole year? |
20:37:37 | clyybber | It's 2 C at night here |
20:38:07 | GordonBGood | Yeah, some place in northern Thailand have more definitive seasons, but here we hardly do: |
20:38:44 | GordonBGood | raing season it rains more, but often doesn't - hot season it's mostly clear but might rain |
20:39:41 | GordonBGood | I'm originally from Canada, don't tell me about cold, I'm trying to forget |
20:40:08 | GordonBGood | clyybber: here is EU? |
20:40:15 | clyybber | yeah bavaria |
20:40:54 | GordonBGood | Ah, nice, never been there but have met lots of ppl from there; I hear it's beautiful |
20:42:36 | clyybber | yeah, it's very nice here |
20:42:59 | clyybber | though I feel a kind of sadness whenever the urban industrial areas expand |
20:43:57 | GordonBGood | clyybber: that happens everywhere, including here - 20 years ago one could find lats of undeveloped islands, now almost none |
20:45:31 | GordonBGood | and everytime they improve a road, factories, housing evelopements, businesses rapidly fill in along it... |
20:46:34 | GordonBGood | When I first came here, few ordinary people such as teachers had cars, only 100 cc motorcycles, now almost everyone except poor people do |
20:48:13 | GordonBGood | Anyway, my bed is still calling me; chat tomorrow if you like |
20:48:17 | GordonBGood | gn8 |
20:48:20 | clyybber | gn8 |
20:49:50 | clyybber | Araq: What to do about cases like `proc newXmlNode(kind: XmlNodeKind): XmlNode = |
20:49:52 | clyybber | ## Creates a new ``XmlNode``. |
20:49:54 | clyybber | result = XmlNode(k: kind) |
20:49:56 | clyybber | y |
20:50:45 | * | GordonBGood quit (Read error: Connection reset by peer) |
20:50:57 | clyybber | I can't create any defaults this way. I'm not sure how or why this is supported. |
20:54:42 | disruptek | what do you mean? |
20:55:21 | disruptek | it's been that way for months. you can only ever pass it a const. |
20:57:56 | * | narimiran quit (Ping timeout: 265 seconds) |
20:58:30 | clyybber | but thats not a const |
20:59:10 | disruptek | yes, doesn't it blow up otherwise? |
20:59:58 | disruptek | or maybe i'm just confusing this with the case thing. |
21:00:11 | clyybber | assignments to fields afterwards would just use nkCheckedField tihnk |
21:00:20 | clyybber | so it would error at runtime if its wrong |
21:00:42 | clyybber | disruptek: This is just a case I haven't thought of. |
21:01:09 | clyybber | And I'm not sure I shoould/can support it without it getting a bit ugly. |
21:01:39 | disruptek | yeah it's only clauses that taint and shouldn't. |
21:01:43 | clyybber | I mean its no problem with my previous approach that doesn't rely on the discrimininator being constant |
21:03:02 | FromGitter | <alehander42> clyybber shouldn't this be a template |
21:03:10 | disruptek | ignore me. i've been eating blue berry flavored dog treats and thinking they were halloween candy. |
21:03:21 | clyybber | alehander42: looks like it to me |
21:03:24 | FromGitter | <alehander42> the other option is to autogenerate a `case` which creates |
21:03:28 | disruptek | on the plus side, my coat is more luxurious than ever. |
21:03:29 | FromGitter | <alehander42> a XmlNode dynamically |
21:03:33 | FromGitter | <alehander42> i've done it once i think |
21:03:36 | FromGitter | <alehander42> with a genCase macro |
21:03:42 | clyybber | alehander42: THat was my previous apprach |
21:04:08 | clyybber | But it creates a runtime impact |
21:04:28 | clyybber | But I find it weird that this is still supported despite the spec saying its not |
21:04:35 | FromGitter | <alehander42> https://github.com/alehander42/lang/blob/master/src/tools.nim |
21:04:50 | clyybber | thanks |
21:05:02 | FromGitter | <alehander42> well, i thought we're left with `const` kind: kind |
21:05:31 | clyybber | I thought so too |
21:06:01 | disruptek | it's only when you taint it with variant fields that things go haywire. |
21:06:18 | clyybber | what disruptek says |
21:06:20 | FromGitter | <alehander42> from what i see |
21:06:24 | clyybber | the compiler chooses a different path then |
21:06:27 | FromGitter | <alehander42> all newXmlNode usages use a const value |
21:06:30 | FromGitter | <alehander42> so it should be fine |
21:06:33 | FromGitter | <alehander42> with template |
21:07:57 | disruptek | https://play.nim-lang.org/#ix=20rr |
21:08:16 | clyybber | alehander42: You see `Foo(kind: runtime, valuethatdependsonkind: 1)` wont work but `Foo(kind: runtime)` will |
21:08:20 | disruptek | i retab'ed it to 8 spaces for ya. |
21:09:17 | disruptek | but the issue is actually that the error occurs on line 15 which doesn't have any fields other than the discriminator. |
21:09:57 | disruptek | if you change d to a const, it works. |
21:10:23 | clyybber | disruptek: wtf |
21:10:32 | disruptek | yes. that's why it's a bug. |
21:10:42 | FromGitter | <alehander42> clyybber well, i gotta admit i dont remember the rationale for the whole thing |
21:10:57 | FromGitter | <alehander42> but yeah sounds like a bug |
21:11:23 | disruptek | i guess it existed in 19.6 too. i can never find this report when i'm looking for it because i only got bit by it; dumjyl is the one that wrote it up for me. |
21:12:03 | clyybber | Araq help us ^\o/^ |
21:13:13 | disruptek | as i said earlier, i'm okay with variants being tighter, but this is pretty surprising. |
21:16:03 | clyybber | krux02: Hey, does https://github.com/nim-lang/Nim/pull/12555 fix https://github.com/nim-lang/Nim/issues/12282 too ? |
21:17:33 | krux02 | I don't know yet, since I didn't test it. |
21:18:08 | clyybber | Ok, might be worthwile to test https://github.com/nim-lang/Nim/issues/12551 too |
21:18:13 | clyybber | Not sure if related |
21:18:55 | * | eterps joined #nim |
21:20:23 | eterps | What is the name of this language construct? -> []= |
21:23:34 | Araq | 'put' operator |
21:23:34 | disruptek | boris. |
21:23:45 | Araq | clyybber: help with what? |
21:23:51 | eterps | thanks |
21:27:41 | clyybber | Araq: Why xmltree.nim:71 is allowed |
21:27:52 | clyybber | proc newXmlNode(kind: XmlNodeKind): XmlNode = |
21:27:55 | clyybber | ## Creates a new ``XmlNode``. |
21:27:57 | clyybber | result = XmlNode(k: kind) |
21:27:59 | clyybber | y |
21:28:03 | clyybber | This ^ |
21:28:15 | clyybber | Because clearly k is a runtime value here |
21:28:54 | clyybber | And as disruptek has shown in his snippet the compiler normally prevents this. |
21:29:13 | Araq | that's still allowed because no other field is set |
21:29:39 | clyybber | Yeah that makes sense |
21:29:47 | clyybber | It's unfortunate for defaultfields though |
21:30:09 | Araq | yeah I can see why |
21:30:13 | FromGitter | <alehander42> but why does it make sense |
21:30:21 | clyybber | And the compiler prevents it sometimes: play.nim-lang.org/#ix=20rr |
21:30:58 | clyybber | oh well, playground doesn't work rn |
21:31:27 | clyybber | alehander42: Because its safe. |
21:31:44 | disruptek | https://github.com/nim-lang/Nim/issues/11428 |
21:31:48 | Araq | clyybber: because DateTime has a requiresInit constraint? |
21:31:57 | Araq | I dunno. |
21:32:32 | FromGitter | <alehander42> but why is then k: kind, fielddepending: b not safe |
21:32:42 | FromGitter | <alehander42> ah nvm |
21:33:00 | FromGitter | <alehander42> so then is k: kind, fieldwhichallhave: 2 |
21:33:02 | FromGitter | <alehander42> ok |
21:33:04 | clyybber | Araq: It doesn't |
21:33:09 | Araq | it does |
21:33:18 | Araq | DateTime contains MonthdayRange* = range[1..31] |
21:33:24 | clyybber | Aha |
21:33:42 | Araq | so effectively the compiler already checks for what you seek to do |
21:33:43 | disruptek | jasper explains it a bit in the issue. |
21:34:20 | clyybber | Araq: Ok, so I'll disallow that like the compiler already does for defaults |
21:34:28 | Araq | yup |
21:35:50 | clyybber | Araq: Or should I describe it in the spec that default values of the corresponding branches will just be ingored then? |
21:36:09 | clyybber | Because arguably a default value isn't a constraint like a range |
21:36:19 | clyybber | I could make it spit out a warning |
21:36:31 | disruptek | but you could fix this. |
21:36:37 | clyybber | disruptek: How? |
21:36:38 | disruptek | brb |
21:40:41 | disruptek | so, maybe you've already fixed this, but it was possible to have an invalid value in a range field. |
21:41:20 | clyybber | I can indeed fix it, but with a runtime impact. |
21:41:31 | disruptek | or enums, when enums don't start at 0. |
21:41:52 | * | Trustable quit (Remote host closed the connection) |
21:42:54 | clyybber | disruptek: Hmm, do you have a link to reproduce? |
21:43:00 | disruptek | i guess it could be a check that produces a warning and/or could be disabled. |
21:43:53 | clyybber | Theres a certain difference between default values and ranges |
21:44:01 | disruptek | i could probably reproduce it locally. |
21:44:23 | clyybber | Ranges should enforce a value to be initialized to a certain value since the object is invalid otherwise |
21:44:32 | clyybber | But the same is not really true for default values |
21:44:36 | clyybber | Not in the same sense |
21:44:46 | clyybber | So I guess spitting out a warning is fine |
21:44:52 | clyybber | For now |
21:45:13 | disruptek | i think almost anything is better than having a field that actually holds a value that is invalid for the type. |
21:46:21 | disruptek | https://gist.github.com/6d75ab0d5a66f3f6c18e99d276499fa4 |
21:46:59 | * | abm quit (Quit: Leaving) |
21:47:17 | clyybber | Hmm, this seems easy to fix. |
21:47:31 | clyybber | Just do the same thing we already do for ranges, I think |
21:47:42 | disruptek | oh, it's fixed for ranges? |
21:48:33 | disruptek | well, you'll break the world if you force init on a non-zero enum. |
21:48:58 | disruptek | it's a hard error on ranges right now, looks like. |
21:49:01 | clyybber | disruptek: I didn't check yet, but its the ting that prevented your previous snippet from compiling |
21:49:10 | clyybber | disruptek: Should be the same for enums IMO |
21:51:19 | disruptek | yes, but breakage... |
21:51:33 | clyybber | warning first error later? |
21:51:56 | disruptek | i don't think there's any other way to do it. |
21:52:57 | clyybber | Should it also error for holed enums then? |
21:53:10 | clyybber | Because holed enums can end up in invalid state anyways. |
21:53:31 | disruptek | it's only initialization, and only when 0 is an invalid value. |
21:56:01 | FromGitter | <alehander42> btw is `default(T)` working with the default values |
21:56:36 | clyybber | alehander42: I'm patching default(T) for the whole object |
21:57:07 | clyybber | But not for the fields themselves, because the fields still retain their types, and the object they are in shouldn't affect that |
21:59:37 | * | MightyJoe joined #nim |
21:59:37 | * | cyraxjoe quit (Ping timeout: 268 seconds) |
22:10:31 | * | Vladar quit (Quit: Leaving) |
22:16:12 | * | cgfuh quit (Quit: WeeChat 2.5) |
22:20:35 | * | solitudesf quit (Ping timeout: 265 seconds) |
22:24:55 | * | abm joined #nim |
22:37:32 | * | clyybber quit (Quit: WeeChat 2.6) |
22:40:25 | * | cyraxjoe joined #nim |
22:42:11 | * | MightyJoe quit (Ping timeout: 276 seconds) |
22:46:40 | * | cyraxjoe quit (Quit: I'm out!) |
22:47:55 | stefantalpalaru | Hear me out, guys: Nimbian - a new Linux distribution where you can "aptitude update; aptitude install jester". Source packages, binary packages, dependency resolution using 3-SAT solvers, stable/testing/unstable distro variants, distro images to run inside emulators on lesser platforms, containers to combine and deploy Nim packages in production through state-of-the-art DevOps practices, custom patchsets to rename Glibc's "atexit" |
22:47:55 | stefantalpalaru | to "addQuitProc", the works! Who's in? I already have the logo, you guys: https://i.imgur.com/niFyg7t.png |
22:48:31 | stefantalpalaru | Can you feel the hype building up? This is it! |
22:49:18 | * | cyraxjoe joined #nim |
22:49:23 | disruptek | finally. |
22:54:07 | * | MightyJoe joined #nim |
22:55:44 | * | cyraxjoe quit (Ping timeout: 268 seconds) |
22:57:26 | * | cyraxjoe joined #nim |
22:57:30 | FromGitter | <alehander42> man you're way behind |
22:57:42 | FromGitter | <alehander42> i expect a nim custom kernel |
22:58:19 | FromGitter | <alehander42> with all programs running as async functions and event loop == os scheduler |
22:59:14 | * | MightyJoe quit (Ping timeout: 240 seconds) |
23:02:15 | stefantalpalaru | Pfffft! That's nothing. I'm working on a custom Nim CPU in FPGA with micro-ops that will speed up the Nim VM. I call it "ARniM". No logo yet. |
23:03:13 | disruptek | boy, ya give a dog a Hershey's bar and they lose their freakin' mind. |
23:04:14 | * | MightyJoe joined #nim |
23:04:22 | * | cyraxjoe quit (Ping timeout: 268 seconds) |
23:08:05 | FromDiscord | <kodkuce> https://github.com/dom96/nimkernel |
23:10:20 | * | ng0 quit (Ping timeout: 260 seconds) |
23:12:05 | * | oprypin quit (Quit: Bye) |
23:12:13 | * | oprypin joined #nim |
23:12:26 | * | abm quit (Ping timeout: 240 seconds) |
23:12:29 | dom96 | stefantalpalaru, be careful, sometimes you make a joke and 2 years later you somehow end up maintaining a Linux distro |
23:15:36 | stefantalpalaru | Too late. I already maintain a Gentoo overlay with 172 packages: https://github.com/stefantalpalaru/gentoo-overlay |
23:16:52 | disruptek | chaoslab has a newer ungoogled-chromium. |
23:17:12 | disruptek | for whatever that's worth. |
23:17:56 | dom96 | this is pretty nice, can we have this? https://twitter.com/andy_kelley/status/1190016044569636864 |
23:17:59 | FromGitter | <alehander42> i seriously planned doing the nim-program-with-gc-as kernel idea |
23:18:07 | dom96 | Maybe instead of the distributions which we've already spent far too much energy arguing over? |
23:20:00 | FromGitter | <alehander42> hm, how do they do it |
23:20:40 | disruptek | i don't think UB in C is all that rare. |
23:20:56 | FromGitter | <alehander42> dom96 well be careful with desiring for lang features instead, there is a whole z3 mechanism waiting on |
23:21:03 | disruptek | it'll be fun to sort out all the false positives. |
23:21:41 | dom96 | alehander42: another feature that I don't see myself using I'm afraid to say. :/ |
23:22:31 | disruptek | it will help performance, convenience, and testing. |
23:22:38 | * | jjido quit (Quit: My MacBook has gone to sleep. ZZZzzz…) |
23:23:11 | * | abm joined #nim |
23:24:05 | FromGitter | <alehander42> well, it would be mostly a separate tool to be honest probably |
23:24:05 | * | ng0 joined #nim |
23:24:28 | FromGitter | <alehander42> but it has its own very cool usages |
23:25:23 | dom96 | to be far, it's something someone from our community wants to work on |
23:25:28 | dom96 | so fair enough |
23:28:05 | FromGitter | <alehander42> i worked on some stuff which lets you |
23:28:17 | FromGitter | <alehander42> see a "callstack" of the current macro/template expansions btw |
23:28:37 | FromGitter | <alehander42> on runtime |
23:28:50 | FromGitter | <alehander42> but have to see how hard would it be to upstream something like that |
23:29:06 | * | cyraxjoe joined #nim |
23:29:16 | FromGitter | <alehander42> mostly useful for stacktraces/debugging |
23:30:56 | * | MightyJoe quit (Ping timeout: 276 seconds) |
23:30:56 | disruptek | on runtime? |
23:33:28 | FromGitter | <alehander42> on runtime |
23:34:11 | FromGitter | <alehander42> e.g. you have test "a": check(call() == b) and you can get that call() is in `test` > `check` expansions |
23:34:31 | disruptek | is it only calls? |
23:34:44 | FromGitter | <alehander42> well, its whatever |
23:34:50 | FromGitter | <alehander42> line it is |
23:34:59 | disruptek | where's the code? |
23:35:02 | FromGitter | <alehander42> basically you can also see the expanded actual code |
23:35:16 | FromGitter | <alehander42> and compare with differetn expansions until the original |
23:35:19 | FromGitter | <alehander42> well |
23:35:23 | FromGitter | <alehander42> its not open yet |
23:35:35 | disruptek | i'm having trouble imagining how it could be generalized. sounds pretty interesting. |
23:35:38 | FromGitter | <alehander42> but i can try to PR when it's readier |
23:36:12 | FromGitter | <alehander42> basically we're creating a macro expansion source map and serializing it in the compiler |
23:36:25 | disruptek | oh, i guess you could embed a beacon at compile-time and then trigger it at runtime, right? |
23:36:27 | FromGitter | <alehander42> not the most genius possible solution but i guess maybe fine for debugging mode |
23:36:38 | disruptek | yeah, that's a cool idea. |
23:36:44 | FromGitter | <alehander42> thats also an option, probably embedding this source map in the binary would be best |
23:36:49 | shashlick | @dom96 - any luck on that PR? |
23:37:26 | FromGitter | <alehander42> but we're not really triggering anything: its just a mapping of nim lines to macro/expansion/definition lines |
23:37:47 | FromGitter | <alehander42> so one can always just construct a "expand stack" for a given line |
23:38:04 | FromGitter | <alehander42> e.g. in gdb as a python command or in a stacktrace |
23:38:44 | disruptek | but you call your macro on the block of code you wanna instrument, right? |
23:38:55 | FromGitter | <alehander42> you dont instrument anything |
23:39:38 | FromGitter | <alehander42> it should work for existing code with no changes |
23:39:55 | FromGitter | <alehander42> the point is you can e.g. step in gdb to a random nim line which is in a macro expansion |
23:40:53 | FromGitter | <alehander42> and two things will be different: you'll be seeing the "expanded" code e.g. `echo ``b``` would be `echo 0` |
23:41:14 | FromGitter | <alehander42> and you can run a command which would calculate which template expansions you're inside right now |
23:41:48 | disruptek | sounds useful. |
23:42:33 | FromGitter | <alehander42> probably: when we open the PR, we'll see where the discussion goes |
23:44:45 | * | MightyJoe joined #nim |
23:46:55 | * | cyraxjoe quit (Ping timeout: 268 seconds) |
23:52:06 | FromDiscord | <Nat> hopefully a quick question, is there any way to use a multiline anonymous function with the `=>` sugar like https://gist.github.com/natdempk/8010443b8cd82bf44ac5f3af0d313904 |
23:53:19 | FromDiscord | <Nat> didn't see too much googling briefly |
23:54:52 | FromDiscord | <mratsim> do notation |
23:55:38 | FromDiscord | <mratsim> see: https://forum.nim-lang.org/t/5431 @Nat |
23:56:12 | FromGitter | <alehander42> i'd guess that multiReplace |
23:56:18 | FromGitter | <alehander42> from strutils might be easier for your usecase |
23:57:04 | FromGitter | <alehander42> with fewer allocations |
23:57:30 | FromDiscord | <Nat> I think it's required that I throw for invalid chars |
23:57:37 | FromDiscord | <Nat> but cool to know that exists 🙂 |
23:57:40 | FromGitter | <alehander42> even with additional check for invalid chars |
23:57:44 | FromGitter | <alehander42> it should be faster |
23:58:28 | FromGitter | <alehander42> as you're copying just one string and then doing a replace + maybe one loop, not constructing a sequence and then a new string with join |
23:58:40 | FromGitter | <alehander42> but i might be wrong, best to benchmark |
23:59:27 | FromDiscord | <Nat> yeah that's interesting to know, I'm also just doing toy problems to learn the language a bit so not super interesting in the most performant stuff atm |
23:59:36 | FromDiscord | <Nat> still trying to wrap my head around the basics |