00:05:03 | * | Hideki joined #nim |
00:05:26 | * | Hideki is now known as Guest43628 |
00:11:46 | * | krux02_ quit (Remote host closed the connection) |
00:43:29 | * | zacharyc1rter joined #nim |
00:43:29 | * | zacharycarter joined #nim |
00:43:30 | * | zacharyc2rter joined #nim |
00:43:47 | * | ryan__ is now known as the_tong |
00:48:08 | * | Guest43628 quit (Remote host closed the connection) |
01:47:47 | * | chemist69 quit (Ping timeout: 260 seconds) |
01:49:52 | * | chemist69 joined #nim |
02:12:45 | * | mono joined #nim |
02:15:54 | * | monok quit (Ping timeout: 272 seconds) |
02:16:14 | FromDiscord | <Avahe> @Elegant Beef Does your wm support multiple monitors? |
02:16:26 | FromDiscord | <Never Listen To Beef> Yep |
02:16:47 | FromDiscord | <Never Listen To Beef> I used xrandr through shell since i didnt realize there was an xrandr lib in the x11 |
02:17:09 | FromDiscord | <Avahe> Oh okay, I'm just now starting to look into it |
02:17:47 | FromDiscord | <Never Listen To Beef> But again i dont know how to properly do xlib stuff |
02:17:53 | FromDiscord | <Never Listen To Beef> so no clue if what i did is a bodge |
02:18:16 | FromDiscord | <Avahe> I'll check dwm to see what they do |
02:22:54 | FromDiscord | <Avahe> @Elegant Beef they are using xinerama somehow |
02:23:30 | FromDiscord | <Avahe> XineramaQueryScreens, probably has a nim wrapper |
02:23:47 | * | muffindrake quit (Ping timeout: 240 seconds) |
02:25:44 | * | dddddd quit (Remote host closed the connection) |
02:26:15 | * | muffindrake joined #nim |
02:32:39 | * | mono quit (Remote host closed the connection) |
03:18:06 | zacharyc1rter | why doesn't this compile? https://play.nim-lang.org/#ix=2kGT |
03:20:28 | zacharyc1rter | maybe I need to do `addr data[0]` |
03:20:33 | Prestige | I think because Foo isn't an array? It's a type that has that array |
03:20:49 | zacharyc1rter | yeah I do |
03:20:51 | Prestige | oh I misread |
03:20:57 | zacharyc1rter | C arrays are just pointers |
03:21:03 | zacharyc1rter | that's why it works in C and not nim |
03:21:23 | FromDiscord | <Varriount> zacharyc1rter: `Foo` is an object. You can't modify object values in parameters. |
03:21:30 | zacharyc1rter | just need to do `cast[ptr FooBar](addr f.data[0]) |
03:21:33 | zacharyc1rter | ` |
03:21:54 | FromDiscord | <Varriount> Oh, wait, I misread. |
03:28:01 | * | dannyfritz[m] joined #nim |
03:32:03 | FromGitter | <codenoid> stay healthy |
03:35:04 | FromDiscord | <Rika> well i've already failed that |
03:37:07 | * | vqrs quit (Ping timeout: 240 seconds) |
03:42:09 | * | waleee-cl quit (Quit: Connection closed for inactivity) |
03:42:34 | * | vqrs joined #nim |
03:46:52 | FromDiscord | <KingDarBoja> What Rika? |
03:51:15 | * | nsf joined #nim |
03:51:48 | * | xcm quit (Remote host closed the connection) |
03:54:31 | * | xcm joined #nim |
04:01:55 | FromGitter | <codenoid> :( |
04:05:51 | FromDiscord | <Rika> i've been pretty heavily underweight much before the lockdowns started |
04:06:02 | * | supakeen quit (Quit: WeeChat 1.9.1) |
04:06:43 | * | supakeen joined #nim |
04:08:12 | * | rockcavera quit (Remote host closed the connection) |
04:23:34 | * | thomasross quit (Ping timeout: 265 seconds) |
04:30:09 | FromDiscord | <KingDarBoja> :/ |
04:33:29 | FromDiscord | <KingDarBoja> That sucks |
04:53:54 | * | mwbrown quit (Ping timeout: 240 seconds) |
04:56:05 | * | mwbrown joined #nim |
05:01:17 | * | Hideki joined #nim |
05:01:40 | * | Hideki is now known as Guest55443 |
05:08:46 | * | audiofile quit (Quit: Going offline, see ya! (www.adiirc.com)) |
05:16:57 | * | letto_ quit (Quit: Konversation terminated!) |
05:19:02 | * | Guest55443 quit (Remote host closed the connection) |
05:20:35 | * | letto joined #nim |
05:25:17 | * | chemist69 quit (Ping timeout: 244 seconds) |
05:26:27 | * | chemist69 joined #nim |
05:27:46 | skrylar[m] | hmm we have cooking utensils so its mostly just been a case of having to fire up the pressure cooker every couple days to process more beans or something. but this is ranching state and they are opening stuff back up, so i don't suspect the beef shortages are going to get that bad here. |
05:28:07 | zacharyc1rter | woot |
05:28:12 | zacharyc1rter | my fiber based job system works now on osx |
05:29:07 | skrylar[m] | i feel odd for being one of the few people who hasn't done any task/async work on nim. closest i came was the overwatch ecs, but that's not a task system either. xD |
05:29:09 | zacharyc1rter | of course I'm not using real fibers there |
05:30:21 | skrylar[m] | am quite tired of text processing though. |
05:30:46 | FromDiscord | <Rika> is your line-breaker optimized for raggedness? |
05:31:27 | skrylar[m] | no i tweaked it last night; remembered there was a special trick to it, then git reset it by accident and coded it again. |
05:32:31 | skrylar[m] | its a small pile of optimizations from a couple people and a very tiny bit from me, basically does greedy fill to the margin and then does the dynamic programming pass to cut words back from the margin until that stops getting improvements, and then added an optional fork limit from adobe so you can pretty well box in its worst case performance |
05:33:09 | skrylar[m] | otherwise it just tries to minimize distance of all lines to the margin within as many lines its permitted to scan at one time, so its basically the tex breaker-lite |
05:33:15 | zacharyc1rter | https://gist.github.com/zacharycarter/ce87fc63641f51d713b7b15b5603b6d2 |
05:33:39 | FromDiscord | <Rika> have you seen this? |
05:33:46 | FromDiscord | <Rika> https://xxyxyz.org/line-breaking/ |
05:34:15 | skrylar[m] | not this specifically no |
05:34:29 | FromDiscord | <Rika> maybe it'll be helpful |
05:34:48 | skrylar[m] | need to do some memory tweaks and get the amount of fields down cause each letter uses more memory than i'd really like, but meh. and then need a style field for the shaders |
05:35:57 | * | narimiran joined #nim |
05:36:35 | skrylar[m] | hm. the binary search one sounds weird |
05:38:00 | skrylar[m] | https://gist.github.com/Skrylar/179648d5856ae49087ad34a87d0740f9 right now it just uses the dynamic programming one with some opportunistic a-b pruning |
05:44:39 | * | zacharycarter left #nim (#nim) |
05:45:17 | * | zacharyc1rter is now known as zacharycarter |
05:48:24 | Araq | Yardanico: now it works |
06:09:03 | * | solitudesf joined #nim |
06:22:32 | * | xcm quit (Read error: Connection reset by peer) |
06:24:38 | * | xcm joined #nim |
06:32:52 | * | covidian is now known as off |
06:32:53 | * | off is now known as covidian |
06:33:02 | * | zacharyc2rter quit (Ping timeout: 272 seconds) |
06:33:02 | * | zacharycarter quit (Ping timeout: 272 seconds) |
06:35:14 | * | silvernode joined #nim |
06:37:52 | * | PMunch joined #nim |
06:39:22 | silvernode | Does anyone recall off the type of their head how to get the type of a variable and echo it back? I tried the proc: 'typeof(myVar)' but nothing printed back when using echo |
06:42:48 | silvernode | Never mind, I think I figured it out |
06:42:58 | FromDiscord | <Rika> try it again |
06:53:52 | * | Jesin quit (Ping timeout: 256 seconds) |
06:57:06 | * | silvernode quit (Ping timeout: 272 seconds) |
07:04:52 | * | sz0 joined #nim |
07:06:48 | * | zacharyc1rter joined #nim |
07:06:48 | * | zacharycarter joined #nim |
07:09:50 | * | covidian is now known as off |
07:09:51 | * | off is now known as covidian |
07:11:32 | * | zacharyc1rter quit (Ping timeout: 260 seconds) |
07:11:32 | * | zacharycarter quit (Ping timeout: 260 seconds) |
07:13:31 | * | covidian left #nim ("Konversation terminated!") |
07:39:48 | * | Vladar joined #nim |
07:43:14 | * | zacharyc1rter joined #nim |
07:43:14 | * | zacharycarter joined #nim |
07:47:57 | * | sentreen_ joined #nim |
07:48:24 | * | zacharyc1rter quit (Ping timeout: 272 seconds) |
07:48:24 | * | zacharycarter quit (Ping timeout: 272 seconds) |
07:50:45 | * | sentreen quit (Ping timeout: 256 seconds) |
08:28:32 | * | WilhelmV1nWeiner quit (Quit: leaving) |
08:28:47 | * | WilhelmVonWeiner joined #nim |
08:33:10 | * | fredrikhr joined #nim |
08:36:57 | Araq | leorize, if you write osproc2 please keep the 'startX' vs 'execX' distinction |
08:38:35 | * | xcm quit (Remote host closed the connection) |
08:40:47 | * | xcm joined #nim |
08:44:47 | FromDiscord | <Yardanico> @Araq wow amazing, thanks |
08:45:09 | Araq | in the end, it was a hard to find DFA bug |
08:45:42 | Araq | bug every fix brings us closer to 'koch boot --gc:arc' working |
08:47:55 | Araq | wow this new 'nim r foo.nim' is *nice* |
08:48:35 | FromDiscord | <Yardanico> Yeah finally I won't have to add weird gitignore rules to ignore files without extensions |
08:49:45 | Zevv | what is new about "nim r"? |
08:49:58 | * | Jesin joined #nim |
08:50:03 | narimiran | Zevv: notice the lack of `c` between `nim` and `r` |
08:50:04 | FromDiscord | <kodkuce> rror: getAppFilename failed. (Error was: Unable to read /home/me/.choosenim/current. (Error was: No installation has been chosen. (File missing: /home/me/.choosenim/current))) |
08:50:04 | FromDiscord | <kodkuce> Info: If unexpected, please report this error to https://github.com/dom96/choosenim |
08:50:25 | Zevv | narimiran: oh right :) |
08:50:42 | FromDiscord | <kodkuce> @dom96 hmm i put choosenim in other dir 😦 |
08:53:08 | FromDiscord | <Yardanico> @Zevv binary is put into nimcache dir |
08:53:28 | FromDiscord | <Yardanico> Not the directory with the source file |
08:55:13 | Zevv | ah sweet! |
08:55:59 | FromDiscord | <kodkuce> my choosenim path /home/me/Documents/Apps/Nim/Choosenim 😦 i did not wanted to blaot home |
08:56:05 | FromDiscord | <Yardanico> Now I only need to figure out how to change c -r to r in vscoee |
08:56:08 | FromDiscord | <Yardanico> *vscode |
08:57:51 | FromDiscord | <XeroOl> hello |
08:58:18 | FromDiscord | <XeroOl> is there an idiomatic way to create a two dimensional array in nim? |
08:58:32 | FromDiscord | <XeroOl> ie seq[seq[int]] |
08:58:34 | FromDiscord | <Rika> what do you mean? |
08:58:42 | FromDiscord | <XeroOl> it seems like initializing this is going to need loops |
08:59:07 | FromDiscord | <Rika> var a: seq[seq[int]] = @[@[]]? |
08:59:17 | FromDiscord | <Rika> does that even work actually hmm |
08:59:28 | FromDiscord | <XeroOl> well that's just a list in a list |
08:59:40 | FromDiscord | <XeroOl> I'm hoping for more of like a 100x100 grid of 0's |
08:59:45 | FromDiscord | <Rika> 2d arrays are lists in lists |
08:59:53 | FromDiscord | <XeroOl> yeah that's what I mean |
09:00:16 | FromDiscord | <XeroOl> is there a constructor for a list that just says to do a thing a bunch of times? |
09:00:17 | FromDiscord | <Rika> import sequtils; @[0.repeat y].repeat x |
09:00:28 | FromDiscord | <Rika> i think? |
09:00:38 | FromDiscord | <XeroOl> I will look into sequtils |
09:00:39 | FromDiscord | <Recruit_main707> var a: array[100, array[100, int]] is initialised to 0s iirc |
09:00:43 | FromDiscord | <Rika> actually no, just 0.repeat(y).repeat(x) |
09:00:49 | * | ryan_ joined #nim |
09:00:53 | FromDiscord | <XeroOl> yeah that looks probably ideal |
09:00:55 | FromDiscord | <Rika> @Recruit_main707 thats if the number is defined compile-time |
09:01:14 | FromDiscord | <XeroOl> I need it to be seq in my particular case, but the array example is good to keep in mind |
09:01:16 | FromDiscord | <Rika> if its always 100x100, then go with array |
09:01:21 | FromDiscord | <Recruit_main707> if its a seq, newSeq wont initialise it also? |
09:01:36 | FromDiscord | <Rika> no, you'll need at least one loop for that |
09:01:38 | FromDiscord | <Rika> lets see |
09:01:48 | FromDiscord | <XeroOl> I think you can do an initializer list maybe |
09:01:54 | FromDiscord | <XeroOl> I think you can do an initializer list maybe? |
09:02:02 | Araq | for big matrixes like that use a special Nimble package like arraymancer |
09:02:04 | FromDiscord | <Rika> !eval import sequtils; echo 0.repeat(2).repeat(2) |
09:02:07 | NimBot | @[@[0, 0], @[0, 0]] |
09:02:27 | Araq | don't tinker with nested seqs for that, it's messy and slow |
09:02:34 | * | the_tong quit (Ping timeout: 240 seconds) |
09:02:44 | FromDiscord | <XeroOl> what would you recommend then? |
09:02:48 | FromDiscord | <Rika> oh yeah, you did mention it was rectangular |
09:02:51 | FromDiscord | <Rika> use arraymancer |
09:02:57 | Araq | arraymancer |
09:03:09 | FromDiscord | <XeroOl> I'm hoping to have a growable two dimensional grid |
09:03:23 | FromDiscord | <Yardanico> https://github.com/mratsim/Arraymancer |
09:04:24 | FromDiscord | <XeroOl> I just need a two dimensional array |
09:04:43 | FromDiscord | <XeroOl> is this useful even if I'm not planning on doing machine learning magic? |
09:05:00 | Araq | then you might go with the nested seqs |
09:05:21 | FromDiscord | <Yardanico> @XeroOl yeah it's useful even if you don't do machine learning |
09:08:50 | FromDiscord | <XeroOl> hmm, I could maybe try applying gpu magic |
09:08:58 | FromDiscord | <XeroOl> I'm not even sure what I want to do for this problem |
09:09:10 | FromDiscord | <XeroOl> I'll definitely look into arraymancer, thanks a lot |
09:11:44 | FromDiscord | <XeroOl> how do I use a nim package in my code? |
09:12:13 | FromDiscord | <XeroOl> sorry, I'm entirely new to nim, so it's my first time figuring out third party libraries |
09:12:25 | Araq | nimble install arraymancer |
09:12:39 | FromDiscord | <XeroOl> okay |
09:12:48 | FromDiscord | <XeroOl> and then do I just `import arraymancer` in the code? |
09:13:06 | Araq | depends but yes. |
09:13:14 | FromDiscord | <Recruit_main707> the readme in github has a few examples |
09:13:49 | FromDiscord | <XeroOl> ahh, I see the examples now |
09:14:06 | FromDiscord | <XeroOl> I scrolled too far down before I decided to use it, and the later examples didn't have the import |
09:15:42 | FromDiscord | <XeroOl> okay, I've got it working, thank you very much |
09:21:42 | FromDiscord | <Never Listen To Beef> I always forget people actually use multidimensional arrays |
09:21:52 | FromDiscord | <Recruit_main707> you could try using something like this: |
09:21:52 | FromDiscord | <Recruit_main707> https://play.nim-lang.org/#ix=2kIy |
09:21:52 | FromDiscord | <Recruit_main707> it probably fits better your problem |
09:23:34 | FromDiscord | <Recruit_main707> (i didnt change the name of populate_array, it should be populate_matrix) |
09:24:40 | FromDiscord | <XeroOl> the (0).repeat(a).repeat(b) seemed more concise to me |
09:24:42 | FromDiscord | <Yardanico> Time to test more Nim libraries and apps with arc/orc I guess |
09:24:44 | FromDiscord | <XeroOl> for the seq case |
09:25:27 | FromDiscord | <Recruit_main707> up to you :) |
09:25:33 | Araq | Yardanico: definitely |
09:25:59 | FromDiscord | <Recruit_main707> you canot change the gc in playground can you?? |
09:26:52 | dom96 | Ahh, what a fun AMA |
09:30:11 | * | abm joined #nim |
09:32:04 | Yardanico | dom96: maybe you already saw but Araq fixed arc for irc module (it turned out to be not related to async at all) :) |
09:32:26 | dom96 | cool, what was the issue? |
09:32:49 | Yardanico | https://github.com/nim-lang/Nim/issues/14207 |
09:32:50 | disbot | ➥ wrong sink parameter passing |
09:33:58 | Yardanico | this snipped outputted "abc" before |
09:35:58 | Araq | was a "fun" bug |
09:36:26 | Yardanico | yeah i'm really surprised, I would've never thought it wouldn't be related to async at all |
09:38:04 | Araq | it's your coding style man, it sux ;-) |
09:38:28 | Araq | you use methods, for example |
09:38:47 | Yardanico | ? |
09:38:54 | Yardanico | i don't really use them, wdym :P |
09:39:09 | Araq | nah, I'm kidding. but it is true that different styles trigger different codepaths, unfortunately |
09:39:14 | Yardanico | ah |
09:39:27 | Araq | so this time 'return x' was worse than 'result = x; return' |
09:40:28 | Yardanico | ok so apparently jester doesn't compile with orc |
09:41:25 | Araq | why not? |
09:41:52 | Yardanico | " Error: type mismatch: got <proc (req: sink Request): Future[system.void]{.closure, gcsafe, locks: <unknown>.}, Settings>" but expected ... "proc run(onRequest: OnRequest)" |
09:42:09 | Yardanico | sink inference again I guess, will try to understand where it fails |
09:42:18 | Yardanico | its a proc accepting an async proc as an argument |
09:42:44 | Yardanico | oh well found where to put nosinks |
09:43:12 | Yardanico | i'll try to minimize |
09:44:06 | Araq | ah that one is known |
09:44:35 | Yardanico | ah okay |
09:44:40 | Araq | and that one is sink *inference*, it doesn't understand proc types |
09:45:15 | Araq | and it cannot without breaking modularity so we'll probably only enable for the stdlib... sucks |
09:46:08 | Yardanico | yeah compiling nimble with arc fails for relatively same reason |
09:46:46 | Yardanico | sequtils.map accepts a proc(s: string) but the passed proc is proc(s: sink string) |
09:47:17 | Yardanico | after adding nosinks to two proc arguments it compiles fine |
09:47:32 | Yardanico | I mean to two procs passed as arguments (in different places) * |
09:48:02 | Araq | the old .procvar design would have helped us :-/ |
09:51:21 | Yardanico | hmm what could go wrong if I add --gc:arc as the default one in my user-wide nim config :P |
09:54:59 | Araq | nothing do it. |
09:55:26 | Araq | likewise, what could go wrong if I re-implement nimscript from scratch |
09:55:38 | Yardanico | also seems like nimble test suite fails for --gc:arc, not sure why |
09:55:41 | Yardanico | " Error: Downloaded package's version does not satisfy requested version range: wanted 0.6 got " :P |
09:55:52 | Yardanico | "... got ." * |
09:55:57 | Yardanico | dot |
09:56:11 | Araq | ^ now that looks like a move optimizer bug. again |
09:56:17 | Yardanico | yay |
09:56:27 | Araq | create a snippet reproducing the problem please |
09:56:40 | Yardanico | well yeah I'll try again but nimble isn't exactly very small :D |
09:57:19 | Araq | but nimble's version parsing code is |
09:57:25 | Yardanico | ah right |
09:57:55 | Yardanico | yeah I can reproduce it with "nimble install https://github.com/nimble-test/packagebin2", now gonna read nimble src |
09:58:53 | Yardanico | or even better "nimble install https://github.com/babel-test/[email protected]" |
09:59:04 | dom96 | just run the version.nim file |
09:59:07 | dom96 | there are tests in there AFAIK |
09:59:16 | dom96 | they might already fail |
09:59:16 | Yardanico | you're right |
09:59:17 | Yardanico | there are |
09:59:20 | Yardanico | i'll try |
09:59:43 | Yardanico | but they all pass :P |
09:59:58 | Yardanico | so it's not as simple |
10:00:23 | Araq | fwiw all GC tests are green with --gc:orc |
10:00:41 | Araq | so it's not exactly vaporware |
10:01:02 | Araq | but now it's time to run bigger projects, yes |
10:02:17 | * | xcm quit (Remote host closed the connection) |
10:02:27 | * | lritter joined #nim |
10:04:28 | * | xcm joined #nim |
10:05:09 | Zevv | like, the nim compiler, just to pick one |
10:05:25 | Yardanico | Zevv: well yeah that's one of the targets, but it's too early for that I guess :P |
10:05:34 | Yardanico | it's better to debug some other smaller projects before the compiler |
10:05:36 | Zevv | haha that would be the ultimate test, right |
10:06:07 | Araq | Zevv, clyybber is doing that |
10:06:44 | Araq | and I will too but today's todo is "reimplement nimscript" |
10:06:51 | Yardanico | ok found a bit of clue, getPkgInfo returns an empty PackageInfo object with arc |
10:07:11 | Yardanico | let pkginfo = getPkgInfo(result[0], options) |
10:07:41 | Yardanico | hmm I'll just try copying some procs to try to reproduce it |
10:09:59 | dom96 | Araq, ehh wat? |
10:10:09 | dom96 | why are you reimplementing nimscript |
10:10:41 | Araq | cause the current impl sucks and causes on-going costs |
10:11:19 | dom96 | just kill the feature :P |
10:11:34 | Araq | you probably misinterpret what 're-implement' implies |
10:11:58 | dom96 | I've been playing with the idea of just writing a simple parser for "above the fold" metadata in Nimble |
10:12:02 | dom96 | and compiling each `task` into an exe |
10:12:38 | Araq | just work on lockfiles instead please |
10:12:52 | Araq | or any other of the improvements we wrote RFCs for |
10:13:21 | dom96 | I'd love to work on lockfiles, but there is someone who has a grant from Status working on them |
10:13:24 | dom96 | I'm still waiting for news |
10:13:51 | Araq | parsing the code is as simple as 'import compiler / parser' anyway, we had the code |
10:14:12 | Araq | but we decided it's better to let Nim do the parsing |
10:14:35 | Araq | dom96, ok, so do this instead: |
10:14:47 | dom96 | hah, was just looking at the map on gitter.im and saw FromIRC on #nim pop up |
10:14:47 | Araq | make Nimble not swallow the compiler's warning messages |
10:15:53 | dom96 | in what context? |
10:16:13 | Araq | 'nimble build/c/cpp/js' |
10:16:36 | dom96 | I'm pretty sure compiler's messages are not swallowed for c/cpp/js |
10:16:54 | Araq | they are also put into red dots and stuff |
10:17:02 | dom96 | so which is it? |
10:17:08 | dom96 | the red dots or that warnings are swallowed |
10:17:17 | Araq | both |
10:17:26 | dom96 | I cannot take you seriously if I cannot trust that this actually affects you |
10:17:39 | dom96 | since you do not seem to know in which instances this actually happens for me to fix it |
10:17:51 | dom96 | make an issue with a paste |
10:17:54 | Araq | well currently I'm not running Nimble |
10:17:56 | dom96 | showing the problem |
10:17:56 | * | solitudesf quit (Ping timeout: 256 seconds) |
10:18:11 | Araq | the problem is already in Nimble's issue tracker |
10:18:53 | Araq | I don't need to prove you that I use Nimble because I haven't used it in the last months. I might use it again though |
10:19:27 | dom96 | link me to the issue at least so that I know what you're referring to |
10:19:37 | dom96 | like I said, it shouldn't happen for `c/cpp/js` |
10:20:05 | Araq | https://github.com/nim-lang/nimble/issues/572 |
10:20:08 | disbot | ➥ `nimble build` should display warnings produced by the nim compiler ; snippet at 12https://play.nim-lang.org/#ix=2kJ4 |
10:21:08 | FromGitter | <jorjun_twitter> Three.js first webGL demo |
10:21:10 | dom96 | right, so it's just `nimble build` |
10:21:15 | dom96 | and like I said in that issue |
10:21:16 | FromGitter | <jorjun_twitter> https://pastebin.com/aJbtUsyk |
10:21:18 | dom96 | it is up for the debate |
10:21:29 | dom96 | if you want that to happen then make your case known in the issue |
10:22:37 | Araq | I did, now what? are you gonna ignore it for 2 more years |
10:23:50 | dom96 | Replied |
10:24:12 | dom96 | it comes down to `build` being a nimble-only command |
10:24:17 | FromGitter | <capocasa> Is there a common way to use "try" without an extra scope, the better to use let? ⏎ ⏎ Right now I do: ⏎ ⏎ var a ... [https://gitter.im/nim-lang/Nim?at=5eafed517975db7ebfe272e1] |
10:24:41 | dom96 | Also, FYI `build` is called when installing packages |
10:24:47 | FromDiscord | <Rika> jorjun: time to show this to my js friends |
10:24:50 | dom96 | I don't want to see warnings spammed in my CLI when installing packages |
10:24:56 | dom96 | so no, I will not fix this. |
10:25:12 | FromDiscord | <Rika> what if some people do |
10:25:16 | dom96 | unless you can give me a good argument why I should |
10:25:24 | FromDiscord | <Rika> (i think i do, i wanna see if some package is beyond fixing) |
10:25:27 | Araq | well how about |
10:26:06 | Araq | "nimble build is for end-users of Nim software." is completely unreasonable as Nimble is not for end-users of Nim software at all, therefore are installers/bundlers |
10:26:33 | FromDiscord | <Rika> capocasa: https://play.nim-lang.org/#ix=2kJ6 |
10:26:34 | dom96 | Nimble is for end-users of Nim software |
10:26:36 | Yardanico | ok managed to reduce it to a single 1.4k loc file (copying stuff from different source files into one) |
10:26:37 | Araq | and if you won't fix it, close the issue |
10:27:03 | dom96 | fair enough |
10:27:32 | Araq | and it implies that I keep to have in mind *all the time* not to use 'nimble build' |
10:27:57 | Araq | but instead to use 'nimble c', I fail to see how that is a good user experience for anybody |
10:28:14 | FromGitter | <alehander92> morning |
10:28:17 | FromGitter | <alehander92> lunch& |
10:28:18 | FromGitter | <alehander92> * |
10:28:39 | * | liblq-dev joined #nim |
10:30:40 | FromDiscord | <Rika> capocasa: did you see what i posted? or is gitter like discord where you need to ping them with some id or something |
10:30:45 | dom96 | Araq, you can clearly see that `nimble build` gives you no compiler messages |
10:30:57 | dom96 | it surely doesn't take much to make the leap that it won't show you warnings |
10:31:16 | FromDiscord | <Rika> one can assume that it just has verbosity lowered |
10:31:20 | FromDiscord | <Rika> instead of having it off |
10:31:55 | dom96 | that is a fair assumption, and that is the case AFAIK |
10:32:54 | Araq | dom96, it's ok, moving on |
10:35:12 | Araq | https://github.com/nim-lang/nimble/issues/130 I'd close this, no idea what people want plus semver is crap |
10:35:14 | disbot | ➥ Require Semantic Versioning ("Semver") ; snippet at 12https://play.nim-lang.org/#ix=2kJ8 |
10:35:21 | FromGitter | <capocasa> @Rika Cool, thanks!!! (I think gitter looks for @username) |
10:36:50 | Araq | or this one https://github.com/nim-lang/nimble/issues/315 'nimble init' does that now |
10:36:52 | disbot | ➥ Standardising nimble package structure ; snippet at 12https://play.nim-lang.org/#ix=2kJa |
10:36:58 | * | PMunch quit (Quit: leaving) |
10:37:01 | Araq | just go through your issues and clean them up |
10:37:13 | FromDiscord | <Rika> `Test for features, not for versions` damn this is actually really smart |
10:37:22 | dom96 | Araq, I do that when I have time to work on Nimble |
10:37:33 | dom96 | But so far I didn't have the time |
10:37:36 | * | Trustable joined #nim |
10:37:42 | Araq | dom96, sorry you were talking about implementing yet another parser |
10:37:48 | dom96 | Nimble is an official Nim-lang project, it may be time to commit some of your time to it |
10:37:55 | Araq | so I figured I'd give you better tasks |
10:38:02 | * | PMunch joined #nim |
10:38:03 | dom96 | I'm not actually going to do it lol |
10:38:18 | Araq | ok, misunderstanding here |
10:38:39 | dom96 | Lack of lock files is actually hindering me, so I would consider working on it assuming that nothing comes of the work from the Status grant |
10:38:54 | dom96 | I pinged zah to ask what's going on with it |
10:46:08 | dom96 | Can we get a similar HCR demo? https://twitter.com/v_language/status/1257256122647482370 |
10:46:57 | FromDiscord | <Rika> has anyone actually seen someone talk about v in a non-controversial way? |
10:47:11 | Yardanico | dom96: we had a similar demo years ago, even before HCR existed :P |
10:47:45 | Yardanico | I think I saw it on youtube |
10:48:11 | dom96 | Rika: plot-twist, I'm actually writing my game in V :P |
10:48:12 | FromDiscord | <Rika> got a link? how would this exist if not for HCR... |
10:48:31 | FromDiscord | <Rika> dom96: o_o |
10:48:38 | Yardanico | @Rika because you can make it without HCR |
10:48:44 | Yardanico | just do a separate lib and watch if that file changes |
10:48:50 | Yardanico | if it does - reload that dynamic library at runtime |
10:49:05 | Yardanico | ofc for more complex projects that makes things really hard, but for demos it's ok |
10:49:07 | FromGitter | <alehander92> which is what hcr does internally, right? |
10:49:15 | dom96 | what is the state of HCR in Nim? |
10:49:26 | dom96 | It would actually be pretty sweet to use for my game |
10:49:41 | FromDiscord | <Recruit_main707> non existent? :p |
10:49:53 | Yardanico | https://www.youtube.com/watch?v=48X4PeHxkNg |
10:49:54 | Yardanico | 2016 |
10:50:02 | euantor | All I know is that the tests fail on the BSD systems I've tested on, as that's the only time I've looked at HCR |
10:50:06 | FromGitter | <alehander92> it should be usable |
10:50:18 | FromGitter | <alehander92> but probably there might be some issues setting it up |
10:50:40 | FromGitter | <alehander92> trying to use it for an actual usecase would probably help a lot :P |
10:50:59 | shashlick | Araq what's your plan for nimscript |
10:54:19 | * | liblq-dev quit (Quit: WeeChat 2.8) |
10:58:17 | FromDiscord | <Rika> question: why is there a `DateTime`, a `Time`, but not `Date` in the `times` module? |
10:58:28 | Yardanico | Araq: I think I got a rough idea of the bug, basically nimble does "try: result = readPackageInfo(file, options) except ValidationError: check if it's a warning and output, if it's an error - raise" |
10:58:42 | Yardanico | and with default GC this "result = readPackageInfo(file, options)" is still set even if the exception is raised |
10:58:54 | Yardanico | I mean the result contains package info even if the exception was raised |
10:59:17 | Yardanico | maybe that's not the primary cause though, I still didn't made it into a smalle xample |
11:01:56 | dom96 | what's more likely is that the `result` is not being initialised with a default value under arc |
11:02:14 | Yardanico | well if nimble doesn't throw an exception it works fine |
11:03:46 | Yardanico | I mean the ValidationError |
11:04:56 | dom96 | yeah, because the `result` gets set |
11:05:03 | dom96 | if it throws an exception it doesn't get set |
11:05:13 | Yardanico | well it throws an exception without arc as well |
11:05:26 | Yardanico | but "result" is still set to the info from the .babel file |
11:05:37 | Yardanico | but with arc it's being reset to defaut value or something like that |
11:07:19 | * | dddddd joined #nim |
11:07:19 | * | idf quit (Read error: Connection reset by peer) |
11:07:28 | FromDiscord | <clyybber> @Recruit_main707 no. Its very well existant. |
11:07:56 | FromDiscord | <Recruit_main707> w/ dlls from what ive saaw |
11:08:27 | FromDiscord | <clyybber> yeah, so? |
11:08:27 | Yardanico | i forgot, how do I make nim don't output ANYTHING? |
11:08:32 | FromDiscord | <clyybber> There is no other way to do it. |
11:08:33 | Yardanico | just silently compile the binary and run |
11:08:38 | FromDiscord | <clyybber> In a compiled language |
11:08:46 | dom96 | clyybber: how difficult is the setup? |
11:09:02 | FromDiscord | <Recruit_main707> i just didnt know dlls could be recompiled that way |
11:09:06 | FromDiscord | <clyybber> dom96: Its pretty easy. I think it has a section in the manual |
11:09:16 | Yardanico | @Recruit_main707 it's not about recompilation really |
11:09:29 | Yardanico | basically your main app has a watch dog to check if a library changed |
11:09:34 | Yardanico | if it changed - reloads that library |
11:09:42 | FromDiscord | <clyybber> @Recruit_main707 Binaries like .exe can't on windows. But dll's can. So thats why it uses dlls |
11:09:50 | FromDiscord | <clyybber> *executable |
11:10:36 | FromDiscord | <Recruit_main707> is there some kind of guide on this or it just works out of the box? |
11:10:52 | FromDiscord | <Recruit_main707> hot reloading would be very helpful for my project |
11:10:56 | FromDiscord | <clyybber> Basically, you first need to compile the nimhcr.nim file |
11:11:05 | FromDiscord | <clyybber> And then compile your project with --hotcodereloading:on |
11:11:46 | dom96 | hrm, I'll have to try that |
11:12:44 | FromDiscord | <clyybber> Oh, maybe I'm stupid and compiling nimhcr manually isn't required anymore |
11:12:47 | FromDiscord | <clyybber> dom96: See https://nim-lang.github.io/Nim/hcr.html |
11:14:09 | FromDiscord | <clyybber> Ah, no its still required. See the Native Targets section |
11:16:19 | FromGitter | <alehander92> Yardanico you should turn hints and warnings off |
11:16:21 | FromGitter | <alehander92> i think |
11:16:27 | Yardanico | yeah I've done it now |
11:16:29 | Yardanico | --hints:off -w:off |
11:16:53 | FromGitter | <alehander92> does it still output stuff |
11:16:59 | Yardanico | no |
11:17:01 | Yardanico | silent |
11:17:25 | FromGitter | <alehander92> yeah we do it in our tup file watcher build setup |
11:17:25 | Yardanico | Araq: I reproduced it but IDK if it's an error or incorrect usage of exceptions |
11:17:35 | Araq | Yardanico, show me |
11:17:41 | FromGitter | <alehander92> much easier when you build many files (but warnings should be ideally on .. indeed ..) |
11:17:42 | Yardanico | https://gist.github.com/Yardanico/374439055ce14b8115a0846d94d87145 |
11:17:49 | Yardanico | outputs "testlol" with default GC, nothing with arc |
11:18:01 | Yardanico | i mean empty string |
11:20:26 | Yardanico | is that what you call undefined behaviour? :D |
11:21:44 | Araq | huh |
11:22:00 | * | fredrikhr quit (Read error: Connection reset by peer) |
11:22:22 | Araq | I don't know what --gc mode produces the correct behaviour |
11:22:26 | * | fredrikhr joined #nim |
11:22:27 | Yardanico | lol |
11:22:57 | Araq | the new impl seems better |
11:23:32 | Araq | why would result.mypath have any info when there was an exception |
11:23:51 | Yardanico | well yeah I was confused too, but nimble relies on this for validation errors |
11:24:27 | Araq | so Nimble relies on old Nim bug |
11:24:33 | Araq | we should fix Nimble |
11:29:54 | Yardanico | so to track it should I open the bug in nimble or nim? |
11:30:15 | * | zacharycarter joined #nim |
11:30:16 | * | zacharyc1rter joined #nim |
11:31:28 | * | fredrikhr quit (Read error: Connection reset by peer) |
11:31:53 | * | fredrikhr joined #nim |
11:32:51 | * | xcm quit (Remote host closed the connection) |
11:33:16 | Araq | nimble |
11:33:34 | Yardanico | yeah I made https://github.com/nim-lang/nimble/issues/798 |
11:33:37 | disbot | ➥ Nimble doesn't work with --gc:arc ; snippet at 12https://play.nim-lang.org/#ix=2kKF |
11:35:33 | * | xcm joined #nim |
11:35:43 | Yardanico | well time to test something else then I guess :D |
11:40:00 | FromDiscord | <Rika> i've been using nim for so long, yet still do not know how to fix a `Cannot prove that 'result' is initialized.` |
11:40:18 | Yardanico | result = Object(fields) |
11:40:31 | FromDiscord | <Rika> why? |
11:40:41 | FromDiscord | <Rika> why is that needed? |
11:40:46 | Yardanico | well you don't have to specify all fields there |
11:40:52 | Yardanico | result = Object(); result.fieldA = stuff |
11:40:54 | Yardanico | I guess |
11:41:26 | FromDiscord | <Rika> still dont understand why its needed, isnt result default(type) at start? |
11:41:40 | Yardanico | what's the type of "type" ? |
11:42:04 | FromGitter | <alehander92> if its ref Object its nil by default iirc |
11:42:10 | Yardanico | yeah |
11:42:11 | FromGitter | <alehander92> ref object* |
11:42:14 | Yardanico | and that's not really "initialized" :P |
11:42:15 | FromDiscord | <Rika> its not a ref |
11:42:31 | FromDiscord | <Rika> which is why im baffled |
11:42:36 | FromGitter | <alehander92> so what is it |
11:43:31 | * | cgfuh joined #nim |
11:44:15 | FromDiscord | <Rika> its just an object, no variants either |
11:44:21 | Araq | Rika: it contains something that needs explicit inits, like a range[1..3] |
11:45:18 | FromDiscord | <Rika> oh, so if it *contains* a ref object, itll warn this too? |
11:48:57 | Yardanico | Araq: ok, compiler crash with --gc:arc for nim-regex :P |
11:49:02 | FromDiscord | <Rika> oh, i see, so DateTimes require initialization |
11:49:11 | FromDiscord | <Rika> perhaps due to the ranges |
11:50:40 | Yardanico | https://github.com/nitely/nim-regex and compiler stacktrace https://gist.github.com/Yardanico/14e9d16fafe59198c43e2e1b1a5ec218 |
11:50:45 | Yardanico | that's interesting is what it fails in C backend |
11:50:53 | * | monokrom joined #nim |
11:50:58 | Yardanico | nim c --gc:arc src/regex.nim |
11:51:09 | FromGitter | <alehander92> so probably the error message |
11:51:16 | FromGitter | <alehander92> should somehow hint at what type is unitialized |
11:51:26 | FromGitter | <alehander92> i agree it seems a bit hard to debug otherwise |
11:52:12 | FromGitter | <alehander92> (what is the chain of "uninitializated" fields but maybe thats hard) |
11:52:53 | FromDiscord | <Rika> alehander92: it only shows if you use the `Type()` style initialization and not rely on result being default'ed |
11:54:09 | FromGitter | <alehander92> yeah, but i guess it just shows one level further? |
11:54:13 | FromGitter | <alehander92> which is natural |
11:54:18 | FromGitter | <alehander92> if its A.b.c.d.e |
11:54:36 | FromGitter | <alehander92> from A -> unitialized you just get to A() -> b: unitialized |
11:54:45 | FromDiscord | <Rika> i guess yeah |
11:54:47 | FromGitter | <alehander92> but still the error would be good to show b.c.d.e |
11:55:09 | FromGitter | <alehander92> but i guess "PRs would be welcome" :P :D |
11:56:32 | * | nsf quit (Quit: WeeChat 2.8) |
11:57:29 | Yardanico | oh loool |
11:58:04 | Yardanico | lookupFieldAgain for some reason gets this as a type: https://gist.github.com/Yardanico/1e8c54a798b2989751ab8bac076c3276 |
11:58:09 | Yardanico | well it's understandable, nim-regex works at compile-time |
11:58:14 | Yardanico | but that's some heavy static usage :P |
12:00:10 | Yardanico | I tried to do "ty = ty.skipTypes(skipPtrs + {tyStatic})" (that's obviously incorrect) and got tons of errors at c compiler stage instead :P |
12:00:17 | Yardanico | "error: conversion to non-scalar type requested" |
12:06:01 | * | supakeen quit (Quit: WeeChat 1.9.1) |
12:06:41 | * | supakeen joined #nim |
12:10:25 | * | rockcavera joined #nim |
12:25:06 | * | NimBot joined #nim |
12:32:33 | Yardanico | Araq: found another arc bug with iterators (default inline ones) and imports |
12:32:50 | Yardanico | https://gist.github.com/Yardanico/77cc01f12fcc37ee6c31cbfe03b2ca19 |
12:33:02 | Yardanico | found in nimcrypto (it uses import for importing all tests) |
12:33:28 | Yardanico | nimcrypto itself works btw |
12:34:07 | * | zacharyc1rter quit (Ping timeout: 260 seconds) |
12:34:08 | * | zacharycarter quit (Ping timeout: 260 seconds) |
12:34:11 | Yardanico | ah wait wrong example I think |
12:34:29 | Yardanico | ah nvm it's the right one |
12:34:38 | Yardanico | works with default GC (compiles fine), errors at C compiler stage with arc |
12:36:49 | Yardanico | https://github.com/nim-lang/Nim/issues/14219 just to track it |
12:36:51 | disbot | ➥ ARC codegen bug ; snippet at 12https://play.nim-lang.org/#ix=2kLa |
12:37:22 | * | Kaivo joined #nim |
12:37:56 | Yardanico | fails on 1.2 too, so not a regression I guess |
12:38:27 | * | thomasross joined #nim |
12:53:47 | * | krux02 joined #nim |
13:04:58 | * | fredrikhr quit (Read error: Connection reset by peer) |
13:05:21 | * | fredrikhr joined #nim |
13:17:35 | * | audiofile joined #nim |
13:18:35 | FromDiscord | <Rika> just noticed httpbeast's being beat by pico.v, is that normal? is it normal for microframeworks to be faster than platforms |
13:19:06 | Yardanico | almost nothing beats picohttpparser |
13:19:12 | Yardanico | but it's not so useful for real world usage |
13:19:22 | dom96 | orly |
13:19:23 | dom96 | link? |
13:19:34 | Yardanico | I mean for parsing http |
13:19:41 | Yardanico | https://github.com/h2o/picohttpparser |
13:19:50 | dom96 | no, link to the bench results |
13:20:54 | FromDiscord | <Rika> yardanico, are you referring to me? |
13:21:05 | FromDiscord | <Rika> https://www.techempower.com/benchmarks/#section=test&runid=f9cc9020-a381-4cb0-9614-4fc27c033b5c&hw=ph&test=json |
13:21:21 | FromDiscord | <Rika> json and plaintext, pico.v is super high |
13:21:35 | FromDiscord | <Rika> in fact pico.v is top on plaintext |
13:21:42 | PMunch | Good AMA by the way dom96 |
13:22:25 | dom96 | Rika: these benchmark results look a bit broken to me |
13:22:51 | FromDiscord | <Rika> yeah which is why i was questioning if it was normal |
13:22:59 | dom96 | httpbeast going from 92% on plaintext to 58%? |
13:23:03 | dom96 | seems unlikely |
13:23:04 | FromDiscord | <Rika> it does say something about a "realistic implementation approach" or so |
13:23:33 | dom96 | but who knows |
13:24:37 | Yardanico | this is the run results for next to last commit |
13:24:38 | Yardanico | https://www.techempower.com/benchmarks/#section=test&runid=64be2110-3011-48ae-8416-30c0ac0609c1&hw=ph&test=json |
13:24:44 | Yardanico | its quite flaky |
13:24:53 | Yardanico | now some Java http lib is #1 xd |
13:26:33 | Yardanico | idk if you guys consider that "a realistic approach", but I don't :D |
13:26:34 | Yardanico | https://github.com/TechEmpower/FrameworkBenchmarks/blob/master/frameworks/V/pico.v/main.v |
13:26:39 | FromDiscord | <Rika> do they conduct many tests or do they just run it once per and call it a day? |
13:26:55 | Yardanico | once per commit, that's like CI |
13:27:12 | FromDiscord | <Rika> also i got the link from a tweet from vlang's twitter, and theres a tweet under it that says this |
13:27:13 | FromDiscord | <Rika> https://twitter.com/Beranek1582/status/1235303139470868482 |
13:27:14 | Yardanico | it takes like 100 hours in total for one commit to complete |
13:27:20 | Yardanico | yes ikr |
13:27:25 | Yardanico | that's why it's not really realistic at all |
13:28:03 | Yardanico | check out https://github.com/S-YOU/pico.v for source, I can implement the same in nim lol |
13:28:07 | Yardanico | just wrap picoev and picohttpparser |
13:28:08 | FromGitter | <alehander92> well its not like python isnt based on C libs |
13:28:15 | FromGitter | <alehander92> for all kinds of things |
13:28:25 | FromGitter | <alehander92> thats why its so hard to define good benchmarks |
13:29:39 | FromDiscord | <Rika> maybe next time benchmarks must require pure implementations or something, though its just as hard to define those |
13:29:59 | FromGitter | <alehander92> but this would compare ecosystems, not languages |
13:30:00 | Yardanico | these are synthetic bencmarks anyway :P |
13:30:04 | FromGitter | <alehander92> which might be valid :P |
13:30:18 | FromGitter | <alehander92> but thats the thing: its very hard to measure everything in the same time |
13:30:30 | * | fredrikhr quit (Read error: Connection reset by peer) |
13:30:45 | FromGitter | <alehander92> on theory you could probably write similarly-quick code for many things in most system langs |
13:30:53 | FromGitter | <bung87> why not try nodejs/http-parser |
13:30:57 | * | fredrikhr joined #nim |
13:30:59 | FromGitter | <alehander92> so it is probably indeed better to just compare real world projects |
13:31:25 | * | reyan joined #nim |
13:31:26 | dom96 | yeah, this is ridiculous lol |
13:31:27 | FromGitter | <alehander92> and keep in mind that language used is just one part of the whole thing |
13:32:25 | dom96 | I'll create a compiler which compiles only enough to support the bare essentials of routing and calling C functions |
13:32:31 | * | couven92 joined #nim |
13:32:31 | Yardanico | :P |
13:32:32 | FromDiscord | <Rika> idk i really just found it sketchy that vlang was proud of this |
13:32:36 | FromGitter | <alehander92> dom96 that's a lame argument |
13:32:36 | dom96 | then wrap pico and put it to the top of the leaderboard |
13:32:56 | FromGitter | <alehander92> just wrapping pico might be lazy, but it reveals a much bigger problem with benchmarks |
13:33:06 | dom96 | also I'm suspicious of V's use of [inline] |
13:33:09 | FromGitter | <alehander92> that overally its not really about the language |
13:33:25 | FromGitter | <alehander92> but about the engineering / domain effort put in a certain lib |
13:33:35 | dom96 | yes, it is |
13:33:46 | dom96 | these benchmarks mean nothing when it comes to being in the top 50 |
13:33:48 | FromDiscord | <Rika> isnt that the point of a benchmark |
13:33:58 | Yardanico | "realistic approach" :D |
13:34:02 | Araq | here is an idea |
13:34:03 | dom96 | as long as you're there you can be confident that languages are in the same ballpark |
13:34:17 | FromDiscord | <Rika> i should really stop trusting benchmarks at all |
13:34:18 | FromGitter | <alehander92> yeah, ballparks is all it matters for probably 75% of cases |
13:34:19 | Araq | let's come up with a set of benchmarks that doesn't suck |
13:34:35 | Yardanico | and make nim the fastest in them lol |
13:34:38 | dom96 | it's impossible |
13:34:39 | FromGitter | <alehander92> you'll receive the nobel peace prize |
13:34:43 | FromDiscord | <Rika> how about serving a static page like nim's docs? |
13:34:52 | FromDiscord | <Rika> that would certainly be realistic, no? |
13:34:52 | Yardanico | that's even stupidier |
13:34:58 | Araq | I can give you decent benchmarks |
13:35:16 | Araq | but I have no clue how we get people to stop looking at stupid benchmarks |
13:35:24 | Araq | and no, Nim wouldn't win every benchmark |
13:35:38 | * | fredrikhr quit (Ping timeout: 256 seconds) |
13:35:59 | FromGitter | <alehander92> i think people need "science " studies |
13:36:30 | FromGitter | <alehander92> or just to make peace with comparing projects, not languages |
13:37:11 | FromGitter | <alehander92> realistically, the most sensible small benchmarks would be ones comparing idiomatic usage |
13:37:34 | FromGitter | <alehander92> at least thats a good proposal i read about such a site |
13:37:42 | dom96 | PMunch, oh yeah, thanks btw! Glad you enjoyed the AMA :) |
13:37:52 | Araq | which is btw what I'm working on all day long, make idiomatic Nim fast, not the C-like Nim you can write since a decade |
13:38:19 | reyan | Hi, I'm trying to pick up nim and thought I could create a program to patch a binary file, using a filestream. However when I call writeData as in the stream module documentation (with var buffer = 0x0D for instance), it writes 0x0D where expected but also zeroes out multiple bytes after. Did I miss something? sizeof(buffer) is 8 which seems correct |
13:38:22 | Araq | and even the C-like Nim isn't bad at all |
13:38:32 | FromGitter | <zacharycarter> Araq: I'm going to author an RFC to extend codegendecl to work with type definitions. Do you have any major issues with this idea, before I write the RFC? |
13:38:57 | Araq | motivate it well, zacharycarter |
13:39:05 | FromGitter | <zacharycarter> Okay |
13:39:09 | FromGitter | <alehander92> Araq yeah, but one can always just emit C |
13:39:15 | Yardanico | reyan: what proc are you using? |
13:39:16 | FromGitter | <alehander92> so its very hard to compare languages imo |
13:39:28 | FromGitter | <alehander92> if one cant put a boundary on what is unidiomatic usually |
13:39:40 | Yardanico | by default nim number literals are of "int" type |
13:39:45 | FromGitter | <alehander92> on the other hand just putting a single emit somewhere as a 5x speedup can still be idiomatic |
13:40:02 | Yardanico | !eval echo typeof(0x0D) |
13:40:05 | NimBot | int |
13:40:05 | Araq | alehander92: I never used 'emit' for speed in my entire life |
13:40:11 | reyan | yardanico: I'm using proc writeData(s: Stream; buffer: pointer; bufLen: int) |
13:40:17 | Yardanico | reyan: why? |
13:40:24 | Yardanico | just use https://nim-lang.org/docs/streams.html#write%2CStream%2CT |
13:40:32 | FromDiscord | <Rika> sizeof gives byte size, not bit size, no? |
13:40:42 | Yardanico | it gives byte size of course |
13:40:49 | FromDiscord | <Rika> i dont know why i asked that |
13:40:49 | Yardanico | int64 is 8 bytes on 64-bit :) |
13:40:53 | FromDiscord | <Rika> i'm a special person |
13:40:55 | dom96 | hah, why does that proc's docs state its implementation |
13:41:00 | reyan | wow ok |
13:41:10 | reyan | I thought it was bit size sorry |
13:41:12 | reyan | thanks a lot |
13:41:18 | Yardanico | reyan: if you want to write a byte, do it like |
13:41:34 | FromGitter | <alehander92> => cant define idiomatic super well => people cant agree on rules => no benchmarks |
13:41:37 | FromDiscord | <Rika> yes, i totally asked that because i thought reyan thought it was bit size, not that i am stupid, of course |
13:41:47 | Yardanico | "let byt = byte(0x0D); mystream.write(byt)" |
13:41:56 | Yardanico | or "let byt = 0x0D'b" and then the same write |
13:42:15 | Yardanico | ah wait no, there's no "b" suffix |
13:42:19 | FromDiscord | <Rika> i8? |
13:42:20 | Yardanico | 'u8 for uint8 |
13:42:26 | Yardanico | or 'i8 for int8 |
13:42:30 | FromDiscord | <Rika> ah ofc unsigned |
13:42:34 | FromDiscord | <Rika> man i am on a stupidity roll |
13:42:41 | reyan | ok that makes sense. By the way I really like nim so for so thanks for your work |
13:42:48 | FromDiscord | <Rika> the apostrophe is optional btw |
13:43:01 | Yardanico | @Rika wdym |
13:43:13 | FromDiscord | <Rika> you can write 0i8 just fine afaik |
13:43:14 | Yardanico | !eval echo typeof 0x0Di8 |
13:43:16 | NimBot | int8 |
13:43:19 | Yardanico | lol |
13:43:23 | FromDiscord | <Rika> told ya |
13:44:13 | Yardanico | ah found it " For notational convenience the apostrophe of a type suffix is optional if it is not ambiguous (only hexadecimal floating point literals with a type suffix can be ambiguous)" |
13:44:15 | reyan | Well that works perfectly. Thanks again and have a great day |
13:44:55 | FromGitter | <alehander92> Araq ok, i am just giving an example |
13:45:03 | * | CcxWrk quit (Remote host closed the connection) |
13:45:08 | FromGitter | <alehander92> that people can often argue about what is idiomatic in language X |
13:45:18 | * | CcxWrk joined #nim |
13:45:21 | FromGitter | <alehander92> it might be a different pattern in other lang |
13:47:49 | Araq | well you need precise rules about what code is allowed in benchmarks |
13:48:00 | Araq | usually inline asm isn't and neither should be 'emit' |
13:48:10 | * | someunknownuser joined #nim |
13:48:33 | FromGitter | <alehander92> yeah, but what is e.g. C-like in Nim or Java-like in Clojure etc |
13:48:41 | FromGitter | <alehander92> is not so obvious |
13:49:11 | FromGitter | <alehander92> after all, what is an idiomatic lib or program or dsl is almost always subjective for real world code |
13:49:33 | * | ftsf quit (Ping timeout: 265 seconds) |
13:49:35 | FromGitter | <alehander92> and success can even change that: e.g. probably rails changed some things about how people write ruby |
13:49:51 | dom96 | I wonder if we could have a "it has to be written purely in that language" rule |
13:50:01 | dom96 | of course, there will always be edge cases |
13:50:22 | dom96 | but I think they can be managed |
13:50:25 | Araq | if you want to benchmark *language* implementations, you must not use libraries |
13:50:26 | dom96 | maybe we can suggest that to techempower |
13:50:32 | Yardanico | dom96: well V can translate c code to V |
13:50:35 | FromGitter | <alehander92> a kernel running a filesystem and a server written all in language :D |
13:50:41 | Yardanico | and if you do that all your code will be technically in V |
13:50:45 | Yardanico | same goes for Zig for example |
13:50:55 | Araq | same for Nim |
13:51:04 | dom96 | Yardanico, I seriously doubt this process is easy |
13:51:12 | Araq | if I understand the problem well enough. but anyhow, as I said |
13:51:12 | FromGitter | <alehander92> dom96 ok ... and nim imports C headers , stdlib, libc |
13:51:24 | Araq | if you want to benchmark languages, don't benchmark libraries |
13:51:26 | dom96 | alehander92: yes, which is why I talked about edge cases |
13:51:31 | dom96 | libc is fair game |
13:51:34 | Yardanico | dom96: well zig for example uses clang itself to translate C to Zig |
13:51:42 | FromGitter | <alehander92> but people will disagree about what is edge case :) |
13:51:54 | FromGitter | <alehander92> thats the whole thing |
13:52:06 | dom96 | alehander92: quite likely, but probably some sort of concensus can be reached |
13:52:29 | Araq | edge cases exist but "nim's regex handling is slow" is not benchmark for nim |
13:52:31 | dom96 | you could even have multiple purity categories |
13:52:56 | FromGitter | <alehander92> e.g. if X can emit everything by itself, e.g. go didnt even use libc IIRC in some cases |
13:53:04 | FromGitter | <alehander92> and go fans can say "ah this is cheating" |
13:53:27 | dom96 | that's called being petty IMO |
13:53:47 | FromGitter | <alehander92> and petty people love benchmarks |
13:53:51 | dom96 | In fact, a good rule could be: if every program written in a a language requires that library then it's fair game |
13:54:13 | dom96 | you certainly cannot say that about pico |
13:54:14 | dom96 | for V |
13:54:18 | Araq | it's true though, the Go people redefined what "dependency free" meant so now you have to statically link libc |
13:54:28 | FromDiscord | <Rika> requires that function (as in functionality, not proc) can also be a good rule |
13:54:55 | dom96 | I think that's a fool proof rule to be honest |
13:54:56 | skrylar[m] | think i liked v over zig. beef seems okay but getting a working beef compiler is a pita |
13:54:58 | FromGitter | <alehander92> dom96 ok, but many programs dont really need a lot of libc stuff |
13:54:59 | dom96 | I might suggest it later today to them |
13:55:00 | FromDiscord | <Rika> it has to be a broad definition though for what i mentioned |
13:55:08 | Araq | for reasons unknown to mankind (on an OS with /usr/include I consider libc part of the deal...) |
13:55:18 | FromDiscord | <Rika> like "emit pragma" and not "this specific proc" |
13:55:36 | FromDiscord | <Rika> why'd you like v over zig? |
13:55:41 | dom96 | alehander92: they need some stuff though |
13:55:45 | dom96 | doesn't matter how much |
13:55:52 | FromGitter | <alehander92> i overally like those ideas dom96 , just i expect that almost any benchmark setup would always lead to disagreements and pettiness |
13:55:52 | dom96 | they always need something |
13:55:55 | FromGitter | <alehander92> it is just how it is :D |
13:56:09 | * | muffindrake quit (Quit: muffindrake) |
13:56:30 | dom96 | if they don't like this idea I'll just write a blog post with a list that excludes impure implementations ;) |
13:56:49 | Araq | dom96: not that's the spirit! :-) |
13:56:51 | FromDiscord | <Rika> pico.v just feels like a library specifically made for benchmark "cheating" in my eyes |
13:56:51 | Araq | bbl |
13:57:08 | FromGitter | <alehander92> Rika what i dont agree with in your sentiment is that |
13:57:20 | FromGitter | <alehander92> it showcases a real world valid usage |
13:57:33 | FromGitter | <alehander92> a lot of python's success is based literally on glueing fast c libs |
13:57:41 | FromDiscord | <Rika> that is true |
13:57:57 | FromGitter | <alehander92> so even if you have such benchmarks |
13:58:01 | FromDiscord | <Rika> okay so now i have a new though |
13:58:03 | FromDiscord | <Rika> t* |
13:58:07 | FromGitter | <alehander92> and you exclude e.g. Xframework in python |
13:58:28 | FromDiscord | <Rika> some benchmarks are only really meant to compare library implementations and not languages or backends or whatever |
13:58:36 | FromGitter | <alehander92> final users wouldnt care as they dont care for "pure language usage" but for ease+speed |
13:58:51 | FromDiscord | <Rika> maybe there can be a benchmark meant to showcase a language's performance, but i know of none |
13:58:57 | FromGitter | <alehander92> maybe |
13:59:16 | FromGitter | <alehander92> but then i think you need to either measure small programs like the shooting game(?) |
13:59:23 | dom96 | the problem with many of these is that they are not made for real-world usage |
13:59:38 | dom96 | I would need to see proof to believe it |
13:59:46 | dom96 | For example, httpbeast is actually used by Jester |
13:59:49 | FromGitter | <alehander92> dom96 but e.g. if you compare ML frameworks |
13:59:55 | FromGitter | <alehander92> you would exclude many python ones |
13:59:55 | dom96 | and runs in production |
14:00:07 | FromGitter | <alehander92> and you again wouldn't really show useful results |
14:00:28 | dom96 | This would just be another filter, people can choose to use it or not |
14:00:41 | FromGitter | <alehander92> agree, it would be interesting for sure |
14:00:41 | dom96 | I think giving users a different way to look at the results is always good |
14:00:48 | FromDiscord | <clyybber> zig invents. V doesn't |
14:01:03 | FromDiscord | <clyybber> well V invents on the PR side I guess :p |
14:01:10 | stefantalpalaru | How do you get the next value from an iterator explicitly, outside a "for" loop? |
14:01:13 | FromGitter | <alehander92> and also another valid argument after all is that if language X makes it very easy to base stuff on language Y's code |
14:01:15 | * | muffindrake joined #nim |
14:01:19 | Yardanico | stefantalpalaru: I think you can't really do that |
14:01:20 | FromGitter | <alehander92> that's still useful, nim also markets that |
14:01:23 | Yardanico | nim iterators are inline by default |
14:01:30 | Yardanico | you probably can with a closure iterator though |
14:01:31 | FromDiscord | <clyybber> stefantalpalaru: I don't think there is a way. Even for closure iterators |
14:01:39 | FromDiscord | <clyybber> As in its not exposed. |
14:02:00 | stefantalpalaru | There must be an internal method/proc that the compiler calls in for loops, right? |
14:02:09 | FromGitter | <alehander92> you just call the iterator |
14:02:15 | FromGitter | <alehander92> until its finished, or not? |
14:02:17 | FromDiscord | <clyybber> Oh, maybe its just a matter of a proc taking a closure iterator and doing `for i in iterator: return i` |
14:02:41 | FromDiscord | <clyybber> I think that may work |
14:02:41 | dom96 | stefantalpalaru, var state = myIterClosure(); state() # if it returns default(RetType) then it's finished IIRC |
14:03:02 | FromDiscord | <Rika> you can do myIterClosure.finished afaik |
14:03:04 | dom96 | yeah |
14:03:04 | stefantalpalaru | What I want is someIterator.next(), dom96. |
14:03:15 | dom96 | state() is that |
14:03:18 | FromDiscord | <Rika> if it is finished after getting the value, the value is junk |
14:03:39 | FromDiscord | <Rika> oh if state is the closure then its state.finished |
14:03:42 | * | zacharyc1rter joined #nim |
14:03:43 | * | zacharycarter joined #nim |
14:03:49 | * | fredrik92 joined #nim |
14:07:50 | * | someunknownuser quit (Quit: someunknownuser) |
14:07:55 | * | couven92 quit (Ping timeout: 260 seconds) |
14:08:29 | disruptek | i hate the corner this compiler has put me in. |
14:09:35 | * | reyan quit (Quit: Leaving) |
14:09:48 | FromDiscord | <clyybber> disruptek: WDYM? |
14:14:06 | narimiran | stefantalpalaru: related? https://github.com/nim-lang/RFCs/issues/1 |
14:14:08 | disbot | ➥ [RFC] Better iterators syntax |
14:16:21 | stefantalpalaru | Yes. |
14:17:42 | PMunch | Damn it, I found another thing I need in the OpenSSL wrapper that's not there.. |
14:17:54 | PMunch | Why is it only partially wrapped? |
14:19:52 | federico3 | PMunch: please open bugs and I'll add stuff |
14:19:55 | disruptek | clyybber: i now have to undo/redo/debug/rebug the backend mutations i introduced. |
14:20:34 | PMunch | I can just add them myself and create a PR like I did last time |
14:20:39 | federico3 | https://mastodon.in.th/@sirn/104110103788846643 we need "demos" like this somewhere on the website |
14:20:53 | PMunch | But I'm using this for production and it looks a bit sketchy to depend on a development version of Nim |
14:21:27 | PMunch | (Not that I think anyone at work has actually looked at the code or my build scripts :P) |
14:22:24 | Yardanico | https://c3po.bashell.com/media/5eb02254e206d26b7aa4ff41 seems like nim in haiku is really outdated :P |
14:22:27 | FromGitter | <bung87> any idea about js generated code `chckRange(s_7355039[0],-2147483648, 2147483647)` where `is` string `M` |
14:22:47 | Yardanico | wdym "any idea"? |
14:22:52 | Yardanico | it checks if the first value is in "int32" range |
14:23:02 | Yardanico | first element of s_7355039, whatever that is |
14:23:12 | FromGitter | <bung87> that's a long string |
14:23:26 | FromGitter | <bung87> it will get first char |
14:23:39 | FromGitter | <bung87> then throw error |
14:23:56 | Yardanico | show the nim code which makes this error :P |
14:27:49 | Yardanico | federico3: btw related to nimpy - a fully statically (yes again :D) linked with musl example from the nimpy readme is only 100kb |
14:28:02 | Yardanico | with -d:danger --gc:arc |
14:28:07 | Yardanico | (yes nimpy seems to work with arc) |
14:28:26 | Yardanico | ah right, nimpy even has tests for it |
14:28:44 | FromGitter | <bung87> hold on ,I write a simple example |
14:30:33 | Yardanico | federico3: https://i.imgur.com/4hwL1Vw.png |
14:30:41 | Yardanico | :D |
14:31:05 | Yardanico | with --panics:on I get 4kb less |
14:31:35 | FromGitter | <bung87> https://github.com/bung87/datetime_parse nimble testjs |
14:31:35 | federico3 | why using musl and optimizing for size tho? It's not really the use case for nimpy |
14:31:56 | Yardanico | well yeah I know nimpy is for speeding up python usually |
14:32:28 | Yardanico | @bung87 lemme check |
14:33:08 | FromDiscord | <Rika> oh damn that looks cool |
14:33:14 | disruptek | leorize: ping |
14:33:21 | FromDiscord | <Rika> does the zig compiler makes musl easier to use? |
14:33:51 | Yardanico | it bundles a lot of libc headers and musl |
14:34:04 | Yardanico | so you don't have to use different cross-compilers and just use different targets |
14:34:09 | Yardanico | you can cross-compile for windows too |
14:38:35 | Yardanico | https://i.imgur.com/0cRDcPY.png |
14:39:15 | Yardanico | -d:windows is not needed though |
14:45:40 | * | waleee-cl joined #nim |
14:49:03 | FromGitter | <Bennyelg> hey, how can I mimic abstract class in him ? |
14:49:04 | FromGitter | <Bennyelg> nim |
14:49:16 | disruptek | why? |
14:49:30 | disruptek | ~concepts |
14:49:30 | disbot | concepts: 11user-defined type classes; documented in the experimental section of the manual: https://nim-lang.org/docs/manual_experimental.html#concepts -- disruptek |
14:52:23 | FromDiscord | <Rika> theyre not exactly the same though, no? |
14:53:17 | * | ptdel joined #nim |
14:55:51 | disruptek | i dunno; i'm terrible with lingo. |
14:56:04 | livcd | What happened today in Nim's world? Any drama? |
14:56:11 | Yardanico | @treeform yeah it works just fine https://i.imgur.com/Q6SZoxd.png |
14:56:19 | FromGitter | <bung87> @Yardanico it's like code gen bug? no idea why it using first char as index |
14:56:31 | FromGitter | <Bennyelg> I wangt to do something like this: ⏎ ⏎ ```code paste, see link``` [https://gitter.im/nim-lang/Nim?at=5eb02d1ef0377f163167b5dd] |
14:56:41 | FromGitter | <Bennyelg> what is the correct way :/ |
14:56:59 | disruptek | you cannot dispatch on return type. |
14:57:09 | Yardanico | uprof also has system-wide profiling |
14:57:34 | FromGitter | <Bennyelg> @disruptek |
14:57:35 | disruptek | if all you do is discard, then simply remove all the `[T]` and `: T` and you're done. |
14:57:49 | FromGitter | <Bennyelg> but I do want to return things |
14:57:56 | FromGitter | <Bennyelg> as the signature probably implies somehow |
14:58:02 | FromGitter | <Bennyelg> get -> T will be seq[Student] |
14:58:06 | FromGitter | <Bennyelg> or something similar |
14:58:09 | disruptek | then write that. |
14:58:15 | FromGitter | <Bennyelg> I want to overwrite it on the StudentRepository |
14:58:21 | FromDiscord | <Rika> make them getStudent(): seq[Student] or something |
14:58:22 | FromGitter | <Bennyelg> but is it the correct way ? |
14:58:36 | disruptek | you need to make Repository generic. |
14:58:46 | FromGitter | <Bennyelg> I want some single interface that everyone will implement |
14:59:08 | disruptek | type Repo[T] ... members: seq[T] or whatever. |
14:59:10 | FromGitter | <Bennyelg> ```type ⏎ Repository*[T] = ref object ⏎ db: Database``` [https://gitter.im/nim-lang/Nim?at=5eb02dbeb6dd230697a5479b] |
14:59:17 | FromGitter | <Bennyelg> cool |
15:00:26 | FromGitter | <Bennyelg> and how I overwrite repository[T] methods ? |
15:00:31 | FromGitter | <Bennyelg> or procs if to be correct |
15:00:44 | Yardanico | https://i.imgur.com/mFJJ3wp.png really nice stuff |
15:00:50 | Yardanico | guess I'll use it when benchmarking :D |
15:01:08 | FromGitter | <bung87> @Bennyelg https://github.com/bung87/db_adapter/blob/master/src/db_adapter.nim check this |
15:01:23 | FromDiscord | <Rika> damn that looks nice |
15:01:48 | disruptek | Yardanico: what are we looking at? |
15:01:59 | disruptek | uprof? |
15:02:02 | Yardanico | yes |
15:02:04 | Yardanico | amd uprof |
15:09:30 | PMunch | https://github.com/nim-lang/Nim/pull/14223 |
15:09:31 | disbot | ➥ Add procedures to read RSA keys from BIO format |
15:09:40 | PMunch | federico3 ^ |
15:12:13 | federico3 | PMunch: lil' bit of tests perhaps? :) |
15:13:24 | PMunch | Are there tests for this module? |
15:13:46 | PMunch | I did test it with my usecase though, so I know that it works right now |
15:14:02 | PMunch | Like it's not a blind wrap |
15:14:13 | federico3 | there are |
15:14:35 | federico3 | including https://github.com/nim-lang/Nim/tree/devel/tests/untestable |
15:15:12 | federico3 | https://github.com/nim-lang/Nim/blob/d5b7e9902cf9ac2c24be8792555cb017d268ce91/tests/stdlib/thttpclient_ssl.nim and so on |
15:32:21 | * | abm quit (Read error: Connection reset by peer) |
15:38:47 | FromGitter | <bung87> @Yardanico have you checked? |
15:39:14 | Yardanico | not yet, I'll try to see now :P |
15:40:18 | Yardanico | oh I see what you're trying to do |
15:40:22 | FromGitter | <bung87> ok,thanks! |
15:40:23 | Yardanico | you're trying to use a JS string |
15:40:34 | Yardanico | nim strings in JS are not simply JS strings |
15:41:07 | FromGitter | <bung87> so how to pass js string to the parse |
15:41:33 | FromGitter | <bung87> it's just js primitve type |
15:41:47 | Yardanico | I guess you could try with makeNimstrLit |
15:42:33 | Yardanico | yeah it works that way |
15:42:41 | Yardanico | you have to do " module.exports = {parse, makeNimstrLit}" |
15:42:54 | Yardanico | and then create nim string like const s = parse.makeNimstrLit("your string") |
15:43:01 | Yardanico | and then parse.parse(s) |
15:43:23 | Yardanico | but really you should understand that nim's compiled JS is not really supposed to be used in other JS code |
15:43:35 | * | PMunch quit (Ping timeout: 260 seconds) |
15:45:26 | FromGitter | <jason_koch_twitter> inotify |
15:45:35 | Yardanico | @bung87 https://gist.github.com/Yardanico/4d10f2f44e7fb1a0bb7b6b9683e28487 |
15:46:24 | Yardanico | it seems to actually work |
15:46:36 | FromGitter | <bung87> yeah, got it work |
15:46:57 | * | PMunch joined #nim |
15:47:01 | * | abm joined #nim |
15:47:05 | Yardanico | but yeah, as I said Nim's compiled JS code is not supposed to be used in other JS code, so you're in undiscovered territory :) |
15:48:47 | FromGitter | <bung87> hmm, the problem I leave it for months, finally it solved, thank you. |
15:50:08 | FromGitter | <bung87> I'll keep that in mind, I thought primitve type will be translate during compile time... and also there's -d:nodejs |
15:50:37 | * | reyan joined #nim |
15:50:56 | FromGitter | <bung87> anyway it could generate a js module, just need extro proc export |
15:51:15 | Yardanico | also beware that -d:nodejs isn't supported that wel |
15:51:17 | Yardanico | well(* |
15:51:27 | Yardanico | main target for nim's JS backend is browser |
15:53:26 | FromGitter | <bung87> I get it, better to write all in nim and generate single one bundle file. |
15:55:00 | FromGitter | <bung87> I have a idea, if have a js ast parser in nim ,that would be well support? |
15:55:49 | reyan | Hi. I'm still trying to work on an application to patch binary files, however while it's really easy to replace a byte, I don't see how I could do to add some bytes in the middle of the file. Should I create a new file and merge byte arrays from the original file around the data I want to add? |
15:57:39 | Yardanico | did you see https://nim-lang.org/docs/streams.html#setPosition%2CStream%2Cint ? |
15:59:48 | reyan | Yeah I did but when I setPosition() somewhere and then write data it just replaces data that was there before. I don't see how I could add new data (changing the file size) |
16:00:11 | Yardanico | oh |
16:01:44 | FromGitter | <nothratal> hello together |
16:01:53 | FromGitter | <nothratal> is there a naming convention for nim packages? |
16:02:05 | * | silvernode joined #nim |
16:04:22 | zacharycarter | Nim doesn't have packages |
16:04:28 | zacharycarter | it's not like Java |
16:05:02 | FromGitter | <kaushalmodi> hmm? |
16:05:19 | FromGitter | <kaushalmodi> I called them packages/modules/etc |
16:05:21 | zacharycarter | well I'm not really sure what you mean by packages either |
16:05:28 | zacharycarter | they are modules yes |
16:05:36 | FromGitter | <kaushalmodi> what's the difference |
16:05:47 | Yardanico | packages can have multiple files |
16:05:48 | zacharycarter | but packages in my mind is like - com.foo.bar |
16:05:52 | zacharycarter | yes |
16:05:59 | Yardanico | @nothratal did you mean packages as in libraries? |
16:06:03 | Yardanico | or as in individual files? |
16:06:06 | zacharycarter | yeah I'm really not sure what he means |
16:06:20 | FromGitter | <kaushalmodi> Yardanico: Ah. I see. TIL |
16:06:20 | FromGitter | <bung87> bad question |
16:06:54 | FromGitter | <kaushalmodi> That's correct: It's not clear naming convention of what exactly. |
16:07:29 | FromGitter | <kaushalmodi> If it's naming the modules, then you usually name them in snake-case and you cannot use hyphens in the names. |
16:08:14 | FromGitter | <kaushalmodi> Some people name modules in lower camelCase, but that's not very common |
16:08:29 | FromGitter | <kaushalmodi> It's usually all lower or lower snake-case |
16:08:55 | FromGitter | <nothratal> ohh sorry, of course I mean libraries :D |
16:09:12 | Yardanico | well all libraries have a main nim file anyway |
16:09:16 | Yardanico | or you import files |
16:09:29 | Yardanico | so usually lowercasename |
16:09:35 | Yardanico | or snake_case_name |
16:21:00 | * | fredrik92 quit (Read error: Connection reset by peer) |
16:21:26 | * | fredrik92 joined #nim |
16:22:47 | * | solitudesf joined #nim |
16:25:39 | * | solitudesf- joined #nim |
16:28:51 | * | solitudesf quit (Ping timeout: 260 seconds) |
16:28:57 | * | solitudesf- is now known as solitudesf |
16:29:48 | * | fredrik92 quit (Ping timeout: 260 seconds) |
16:30:52 | * | companion_cube quit (Quit: WeeChat 2.3) |
16:33:32 | * | krtekz joined #nim |
16:35:11 | * | fredrikhr joined #nim |
16:49:41 | FromDiscord | <bedwardly-down> Morning all. How's the nim stuff going? |
16:52:52 | skrylar[m] | currently studying a few older game engines and remarking how little a lot of them do |
16:53:10 | skrylar[m] | well libgdx does some amount. corona and love2d quite small |
16:54:32 | disruptek | ~stream |
17:00:36 | Yardanico | ~stream |
17:00:40 | Yardanico | :c |
17:01:38 | krtekz | Does Nim plan to target wasm? |
17:01:50 | Yardanico | krtekz: not via a yet another backend |
17:01:54 | Yardanico | you can already use emscripten |
17:02:09 | zacharycarter | or nlvm |
17:05:26 | skrylar[m] | i dunno. a wasm backend would be nice if it just happened to be there |
17:12:33 | leorize | disruptek: pong |
17:18:53 | audiofile | can someone bounce some ideas off me for some nim project during the hols? |
17:19:20 | audiofile | I'm not an expert by any means, not even intermediate rn so tempered expectations please! >_> |
17:19:44 | leorize | try to fix some simple compiler bugs? :P |
17:19:46 | FromDiscord | <mratsim> bounce(idea) |
17:19:47 | Yardanico | audiofile: I think you might like https://github.com/florinpop17/app-ideas |
17:20:45 | audiofile | yeeees, nice ty Yardanico |
17:21:08 | audiofile | leorize I almost flunked my compilers course :/ if I could, I definitely would! |
17:21:46 | leorize | don't worry, building a compiler is different from fixing a built one |
17:21:59 | audiofile | oh, I'm all ears now then |
17:22:02 | Yardanico | spoiler: it's easier |
17:22:07 | audiofile | are they the issues tagged with <easy> |
17:22:12 | Yardanico | there are |
17:22:17 | Yardanico | but that's subjective :P |
17:22:23 | audiofile | I bet haha |
17:22:31 | Yardanico | https://github.com/nim-lang/nim/issues?q=is%3Aopen+is%3Aissue+label%3AEasy |
17:24:14 | audiofile | thanks, honestly most of them dont make much sense to me right now but I've bookmarked this |
17:24:36 | audiofile | some issues refer to other fixes as they are similar so I can give that a go |
17:25:36 | audiofile | https://github.com/nim-lang/Nim/issues/8212#issuecomment-402985473 sounds easy >_> |
17:26:02 | FromDiscord | <mratsim> It's a trap |
17:26:54 | FromDiscord | <mratsim> you can {.emit:"__FUNC__".} in the C code but without emit you need to modify the compiler |
17:27:23 | audiofile | ouch |
17:27:38 | audiofile | we need an 'easy but trap' tag haha |
17:28:07 | FromDiscord | <mratsim> well the compiler modification is explained https://github.com/nim-lang/Nim/issues/8212#issuecomment-493944503 |
17:28:43 | FromDiscord | <mratsim> but you need to create a new proc because modifying `instantiationInfo` return type is not backward compatible |
17:28:52 | FromDiscord | <mratsim> so the hard thing is coming up with a new name |
17:28:58 | audiofile | ah I see |
17:29:11 | audiofile | yeah |
17:29:36 | FromDiscord | <mratsim> something like procContext or callingContext |
17:30:32 | audiofile | oh right, there's the proper naming convention which must not be ignored |
17:32:43 | * | ptdel quit (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
17:32:51 | leorize | mratsim: do you think there's anything from nim-stew that can find a new home here? https://github.com/nim-lang/fusion |
17:34:07 | leorize | nim stew has been collecting some really useful modules and I think we should start adding them to the "external stdlib" now that the barrier is lowered |
17:37:32 | * | audiofile quit (Quit: Going offline, see ya! (www.adiirc.com)) |
17:41:00 | * | disbot quit (Ping timeout: 256 seconds) |
17:41:35 | * | disruptek quit (Ping timeout: 256 seconds) |
17:45:03 | reyan | Well I'm almost finished it's probably not how it should be done but at least it seems to work. I've got all I need in a seq[byte] and I'm not sure how to write it back to a binary file. Maybe I missed something in IO or stream module? |
17:47:52 | leorize | writeData should work |
17:48:23 | leorize | actually you can do this too, but it's undocumented: s.write(cast[string](your seq[byte])) |
17:48:39 | leorize | this is because string and seq[byte] has the same underlying representation |
17:48:48 | leorize | it's a supported thing but we don't document it |
17:50:48 | reyan | When using writeData I'm forced to use a fixed length array as a buffer right? Because right now I'm filling the buffer byte by byte from the seq which is probably not how it should be done |
17:51:51 | * | Lord_Nightmare quit (Quit: ZNC - http://znc.in) |
17:52:24 | leorize | you can use a seq |
17:52:33 | leorize | writeData is a low-level proc |
17:53:25 | reyan | s.write(cast[string](your seq[byte])) worked perfectly. Thanks. And I can use a seq as a buffer? I didn't manage to while reading the file |
17:54:09 | * | krtekz left #nim (#nim) |
17:54:27 | leorize | https://play.nim-lang.org/#ix=2kNj |
17:54:38 | leorize | where's a proc that should have been in the stdlib instead |
17:54:46 | * | Lord_Nightmare joined #nim |
17:54:47 | leorize | it works with both strings and seqs |
17:55:28 | * | disbot joined #nim |
17:56:28 | * | disruptek joined #nim |
17:56:39 | reyan | Thanks a lot! |
17:57:54 | FromDiscord | <mratsim> @leorize, endians2, byteutils |
18:01:19 | * | Kaivo quit (Quit: WeeChat 2.8) |
18:02:27 | leorize | should this be discussed on nim-stew issue tracker first? |
18:02:35 | leorize | or should I just add it then tag people in? |
18:04:23 | FromDiscord | <mratsim> the second solution seems good |
18:19:25 | FromDiscord | <Avatarfighter> Hello everyone |
18:19:47 | Yardanico | Araq: is this supposed behaviou for ARC? the error is in the comment https://gist.github.com/Yardanico/5a9f7e9842101443ebf662c58340f406 |
18:20:14 | shashlick | does anyone know how to autolink issues on github from a markdown file? |
18:20:15 | FromDiscord | <Avatarfighter> Leorize, any chance you could be my saviour with endians again like last time? I believe I'm just doing what I'm going wrong |
18:20:51 | leorize | sure |
18:23:21 | FromDiscord | <Avatarfighter> might take a minute I lost the file I had an issue with in the labyrinth known as my current project |
18:25:46 | FromDiscord | <Avatarfighter> https://www.paste.org/104912 so I'm like 90% sure that I'm doing this wrong but I'm trying to convert an array holding int8s from one endian to the other but having some issues on the expected output |
18:27:52 | FromDiscord | <Avatarfighter> I forgot to add but I'm using the std endians lib |
18:29:45 | leorize | you failed the moment you cast :) |
18:29:57 | FromDiscord | <Avatarfighter> i knew it |
18:30:01 | FromDiscord | <Avatarfighter> I was so sure it was that |
18:30:40 | leorize | hmmm actually |
18:31:08 | FromDiscord | <Recruit_main707> he should pass the 0th element address shouldnt he? |
18:31:09 | FromDiscord | <Avatarfighter> i still don't see what I would do even when I converted the endian without casting :L |
18:32:08 | leorize | Avatarfighter: lol |
18:32:10 | leorize | I found the problem |
18:32:23 | leorize | 64 bits is 8 bytes |
18:32:28 | FromDiscord | <Avatarfighter> fuck |
18:32:42 | FromDiscord | <Avatarfighter> yeah that definitely helps |
18:32:51 | FromDiscord | <Avatarfighter> welp that was meant to be int32 |
18:33:32 | * | reyan quit (Quit: Leaving) |
18:33:42 | FromDiscord | <Avatarfighter> I got so used to writing 64 I guess I just autocompleted what I was writing and wrote it, thanks again for the help leorize lol |
18:36:10 | * | silvernode quit (Ping timeout: 265 seconds) |
18:40:02 | FromDiscord | <Avatarfighter> welp I give up the endian lib is nice but nim stew has a nicer api for their endian lib |
18:49:17 | FromDiscord | <mratsim> the nicest part is that it works at compile-time |
18:49:31 | FromDiscord | <mratsim> so you can pre-serialize things |
19:14:41 | * | ptdel joined #nim |
19:24:06 | FromDiscord | <bedwardly-down> @disruptek `Downloading https://github.com/genotrance/nimterop using git |
19:24:07 | FromDiscord | <bedwardly-down> Tip: 40 messages have been suppressed, use --verbose to show them. |
19:24:07 | FromDiscord | <bedwardly-down> Error: Could not read package info file in /tmp/nimble_25781/githubcom_genotrancenimterop_0.3.3/nimterop.nimble; |
19:24:07 | FromDiscord | <bedwardly-down> ... Reading as ini file failed with: |
19:24:07 | FromDiscord | <bedwardly-down> ... Invalid section: . |
19:24:09 | FromDiscord | <bedwardly-down> ... Evaluating as NimScript file failed with: |
19:24:12 | FromDiscord | <bedwardly-down> ... /tmp/nimble_25781/githubcom_genotrancenimterop_0.3.3/nimterop/docs.nim(80, 19) Error: undeclared identifier: 'paramCount' |
19:24:13 | FromDiscord | <bedwardly-down> ... printPkgInfo() failed. |
19:24:15 | FromDiscord | <bedwardly-down> /home/justa/Source/git/nimph/nimph` |
19:29:02 | PMunch | Please don't paste stuff into Discord |
19:29:03 | shashlick | please update your nim to latest devel |
19:29:14 | PMunch | It comes through on IRC |
19:35:01 | FromGitter | <alehander92> no problem |
19:51:04 | * | lritter quit (Quit: Leaving) |
19:51:10 | FromDiscord | <arnetheduck> fwiw, fusion seems to have the same issues as stdlib in its stated goals, in terms of maintenance: it thinks it's a good idea not to remove code - this means that it'll be full of unmaintained crap that's not up to date with recent nim versions, idioms or the world at large.. preserving the past is great: git does that, and really really well - you get an immutable copy of some file at some point and you can rely on it not changing - yo |
19:51:52 | FromDiscord | <arnetheduck> ie the berlin wall fell - the same thing happens with code - some things that were though of as great ideas by someone at some point in time really.. weren't |
19:54:45 | FromDiscord | <dom96> https://github.com/TechEmpower/FrameworkBenchmarks/issues/5680 |
19:54:54 | FromDiscord | <dom96> As promised, let's see what they say |
19:55:55 | FromDiscord | <arnetheduck> what would be nice for fusion would be a tracked release system: these modules work well with nim 1.x - so there's a fusion-1.0, fusion-1.2 etc for every module, and things only make it to the next version when they actually work with that version idiomatically - ie use or at the very least don't contradict features introduced in newer versions - and modules shouldn't qualify automatically: they should be ported to the new version only |
19:57:59 | * | PMunch quit (Quit: leaving) |
20:07:02 | * | tane joined #nim |
20:07:03 | * | opal quit (Ping timeout: 240 seconds) |
20:14:55 | * | opal joined #nim |
20:22:11 | leorize | Araq ^ |
20:24:07 | dom96 | My opinion is still that fusion really does not seem like something worth investing time into |
20:24:16 | FromDiscord | <Avatarfighter> Question for anyone who knows but does "shr" zerofill? |
20:25:24 | * | couven92 joined #nim |
20:29:02 | * | fredrikhr quit (Ping timeout: 272 seconds) |
20:38:01 | * | couven92 quit (Ping timeout: 264 seconds) |
20:38:24 | FromDiscord | <mratsim> zerofill? |
20:39:16 | Yardanico | https://forum.nim-lang.org/t/4891 relevant |
20:42:00 | FromDiscord | <mratsim> ugh, the shr changes were ugly. Not much on the forum changes, but compile-time shr and constant-folded shr had consistency issues |
20:48:14 | * | narimiran quit (Ping timeout: 256 seconds) |
21:04:31 | FromDiscord | <Avatarfighter> Yardanico: Thanks for the forum post 🙂 |
21:05:10 | Yardanico | which one? |
21:05:13 | Yardanico | mathexpr? :P |
21:05:41 | FromDiscord | <Avatarfighter> The one you posted about right shift 😛 |
21:05:47 | Yardanico | oh ok |
21:05:54 | FromDiscord | <Avatarfighter> I'm having trouble figuring out if the shr is arithmetic or not so I'm just going to pretend it isn't unless something breaks lmao |
21:05:58 | Yardanico | by mathexpr I meant https://forum.nim-lang.org/t/3196 |
21:06:02 | FromDiscord | <Avatarfighter> but I'm interested in the mathexpr one if you have a link |
21:06:22 | FromDiscord | <Avatarfighter> I'll give it a read thanks for the link 👍 |
21:07:21 | FromDiscord | <mratsim> is there a use case for right shifting on negative int? |
21:08:22 | Araq | arnetheduck: well I don't agree and time will prove me right/wrong. programming languages are more like OSes, they gain traction when old stuff continues to run |
21:10:11 | FromDiscord | <Avatarfighter> @mratsim the only use case I've personally seen is in cryptographic functions and even then it would take me a bit to find an example |
21:14:29 | Araq | they never renamed 'cp' to 'copy' in Unix land or 'man' to something sane. And here we are, Unix dominating everything. |
21:15:05 | Araq | and what used to be sloppy naming is now something "cultural", enjoy |
21:16:11 | FromDiscord | <mratsim> @Avatarfighter you don't use signed integer in cryptography |
21:16:33 | Araq | meanwhile in Nim land, the old AssertionError just became an AssertionDefect, wtf |
21:17:06 | FromDiscord | <mratsim> Next step, finding a more descriptive name for typedesc |
21:18:22 | leorize | Araq: C++ also got rid of COW strings in C++11, citing safety issues and potential performance problem in threaded environment |
21:19:15 | FromDiscord | <Avatarfighter> @mratsim I stand corrected I went to look for an example because I thought that signed integers could be used but I found none thanks for the clarification 🙂 |
21:19:17 | Araq | leorize, I know but it's not directly applicable |
21:20:35 | leorize | well, if you ever write an RFC for how you want this to be implemented, I can give it a go |
21:20:48 | FromDiscord | <mratsim> Rust seems to also be struggling with strings and/or allocator: https://www.christianfscott.com/making-rust-as-fast-as-go/ |
21:21:12 | leorize | isn't there a huge update about how the two algo are not comparable? |
21:21:19 | leorize | and yes I did an implementation here yesterday |
21:21:34 | * | Vladar quit (Quit: Leaving) |
21:21:35 | leorize | still not as fast as go, but it's the best I can do while preserving the algo |
21:21:36 | krux02 | mratsim: typeargument, because they are used for arguments only. |
21:21:40 | krux02 | (by now) |
21:22:18 | FromDiscord | <mratsim> I think a memory pool in the standard library would be helpful (especially given the number of gamedevs) |
21:22:26 | FromDiscord | <mratsim> and then we can have PooledStrings |
21:22:48 | leorize | https://irclogs.nim-lang.org/03-05-2020.html#18:55:59 |
21:22:49 | FromDiscord | <mratsim> @krux02 typeargument is loooooong |
21:23:10 | leorize | I think memory pool should be a nim-fusion thing |
21:23:11 | krux02 | you didn't ask for "short" |
21:23:21 | leorize | typearg? :P |
21:23:30 | krux02 | tArg |
21:23:44 | krux02 | trg |
21:23:58 | FromDiscord | <mratsim> typeArg is not bad |
21:24:02 | leorize | Type[T] :) |
21:25:00 | krux02 | I am actually ok with `typedesc`. |
21:25:25 | krux02 | It is ok, not great. But not worth the hassle to change. |
21:27:17 | FromDiscord | <mratsim> and that's how you get "mv" and "cp" 😉 |
21:27:25 | FromDiscord | <mratsim> QED |
21:28:40 | * | dddddd_ joined #nim |
21:30:16 | * | filcuc joined #nim |
21:30:37 | FromGitter | <alehander92> ok, so down between the compiler dsl POC lib/singularity-inspired kernel toy/algo2cartoon generator/inim+hcr combo to try to propose for the conf |
21:31:20 | * | dddddd quit (Ping timeout: 258 seconds) |
21:32:19 | FromDiscord | <mratsim> I'm quite interesting in REPL / HCR |
21:32:23 | FromDiscord | <mratsim> interested* |
21:32:43 | FromDiscord | <mratsim> no idea about what is a singularity kernel but that sounds like something that hacker news might enjoy |
21:33:45 | FromGitter | <alehander92> no, its an older microsoft research os which Araq reminded me sounds like my dreamy toyings |
21:33:47 | FromGitter | <alehander92> the other day |
21:35:12 | FromGitter | <alehander92> but my idea is just to run some nim code on bare metal and map processes and filesystem data just to bare nim values+functions |
21:42:11 | * | xcm quit (Remote host closed the connection) |
21:44:26 | * | xcm joined #nim |
21:52:58 | * | solitudesf quit (Ping timeout: 260 seconds) |
21:52:59 | * | Trustable quit (Remote host closed the connection) |
21:59:06 | Yardanico | if you guys test your libraries (or other people's libraries) with arc/orc, please report it in https://github.com/nim-lang/Nim/wiki/Status-of-gc:arc-and-gc:orc-(library-compatibility) |
22:01:08 | krux02 | Araq: I have problems with printing enum values from gdb |
22:01:37 | krux02 | for some reason the types of the enums are now just unsigned integers integers. |
22:02:09 | krux02 | do you know if something in the code generator for enums and sets changed? |
22:02:09 | Araq | krux02, we didn't really change that |
22:02:19 | krux02 | hmm |
22:02:27 | Araq | we did change $ for enums though, it's now done via a macro |
22:03:06 | krux02 | well the gdb script depends on the NTI runtime type information of enums |
22:03:24 | krux02 | if that isn't generated anymore gdb can't print enums anymore. |
22:03:53 | Araq | NTI isn't used anymore by $ |
22:04:02 | Araq | I think, so that's what's going on |
22:05:10 | krux02 | But it is also that the enum value itself does not have an enum type anyomore. |
22:05:59 | * | tane quit (Quit: Leaving) |
22:06:11 | krux02 | The generated type is just an usigned char. |
22:06:17 | krux02 | At least that is what gdb tells me now. |
22:06:34 | krux02 | so it can't look up NTI, even if it would be there. |
22:06:55 | krux02 | In other words gdb pretty printing for enums is now completely broken. |
22:07:50 | krux02 | But I guess it is my fault. I wrote a test for it. But I didn't integrate it the test suite. |
22:07:57 | Araq | we can generate enums for C just like we do for C++ |
22:08:11 | Araq | then gdb should be able to pick it up |
22:08:23 | krux02 | what is the difference there? |
22:08:42 | Araq | mostly ((EnumType)8) vs 8 |
22:08:46 | Araq | in the produced code |
22:09:20 | Araq | C enums are always int though in C89 and Nim's enums are most often bytes |
22:09:31 | krux02 | ok |
22:09:40 | krux02 | let me test c++ mode then |
22:10:09 | Araq | it would be nice if we don't have to use NTI, NTI is also gone for arc |
22:10:33 | Araq | NTI is not exactly future-proof :-) |
22:12:19 | Araq | and I said it before but here it is once again, if we get typeArg and its spec/implemetnation right, I'm all for it. then we can deprecate typedesc but don't have to "fix" its broken behaviour (and thus breaking so much stuff out there) |
22:13:13 | Araq | seems to be much more feasible and less work then changing typedesc |
22:13:53 | * | filcuc quit (Ping timeout: 258 seconds) |
22:16:34 | FromDiscord | <mratsim> @Yardanico, AFAIK async and threads are still a pending issue with arc |
22:16:51 | Yardanico | well async leaks memory, but yeah it kind of works with orc |
22:17:10 | FromDiscord | <bedwardly-down> @Never Listen To Beef , this should have a nim target: https://github.com/rusthon/Rusthon |
22:19:12 | krux02 | yea I know NTI is not future-proff, but it is all I have |
22:19:33 | krux02 | what I wonder though is, why Nim enums are not compiled to C enums |
22:20:23 | Araq | as I said, because C enums are 'int' and that's too big |
22:20:58 | krux02 | ok that is true, I forgot about that. |
22:21:58 | krux02 | only c++ for the help here. |
22:22:45 | krux02 | would be nice if the c++ backend would just use the c++11 enums, then I would not need to create a hack for printing. |
22:23:04 | krux02 | sets would not be solved though. |
22:23:38 | krux02 | but theu would not be a problem. |
22:25:32 | FromDiscord | <mratsim> @Yardanico, but async programs, like servers tend to run for a long time, those are not missiles so leaking memory is problematic |
22:25:38 | Yardanico | yeah |
22:26:54 | Araq | they don't leak with 'orc', current bugs not considered |
22:27:02 | FromDiscord | <mratsim> I would love to have resumable function as first-class |
22:28:22 | Araq | you need to write an rfc so that everybody understands why resumable functions are not closure iterators |
22:29:00 | FromDiscord | <mratsim> Btw, I've had some thoughts on how to have Weave play well with async, here is an easy idea: https://github.com/mratsim/weave/issues/22#issuecomment-623408684 |
22:29:34 | Araq | yeah I read it. it's a bit what I suggested |
22:29:39 | Araq | *a bit like |
22:30:29 | FromDiscord | <Generic> well what is the difference between resumable functions and closure iterator. I always thought of of the first being an exploitation of the latter |
22:30:35 | FromDiscord | <Generic> ? |
22:31:44 | FromDiscord | <Generic> or are resumeable functions basically like threads with their own stack and context except they are cooperative? |
22:32:30 | Araq | probably something like proc resumable(state: var int; otherArgs) so that you get the goto state machine inside but without the closure allocation overhead |
22:33:49 | FromDiscord | <Generic> I see, so basically like a closure iterator except you have to manage the state yourself? |
22:35:27 | Araq | not really "manage" but it's exposed so that you can start/stop/continue it |
22:35:40 | FromDiscord | <exelotl> resumable functions -- so coroutines? |
22:38:05 | FromDiscord | <exelotl> usage being similar to e.g. Lua? https://www.lua.org/pil/9.1.html |
22:39:51 | FromDiscord | <mratsim> My use case would be to make it easier to implement IO-tasks and CPU-bound tasks |
22:40:57 | FromDiscord | <mratsim> for example if I have a task that is actually a `while True` loop, I basically lose a thread. |
22:43:42 | * | xcm quit (Read error: Connection reset by peer) |
22:45:36 | * | xcm joined #nim |
22:46:19 | FromGitter | <alehander92> hm is nti being removed |
22:47:16 | Yardanico | it's not in arc |
22:52:50 | * | abm quit (Read error: Connection reset by peer) |
23:11:18 | * | GallantAKT joined #nim |
23:21:14 | * | GallantAKT quit (Ping timeout: 260 seconds) |
23:44:09 | * | NimBot joined #nim |
23:48:46 | FromDiscord | <Never Listen To Beef> @bedwardly-down you clearly overestimate my knowledge, i can barely write nim code nevermind write a transpiler |
23:54:29 | * | krux02_ joined #nim |
23:58:40 | * | krux02 quit (Ping timeout: 272 seconds) |
23:58:43 | * | ftsf joined #nim |