| 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 |