00:00:21 | FromDiscord | <ElegantBeef> It doesnt hang, it just doesnt work |
00:00:50 | FromDiscord | <ElegantBeef> Like there is no error or anything it just runs the code flawlessly until i attempt to conver back from a string |
00:01:57 | FromDiscord | <Clyybber> can you echo the string? |
00:02:01 | FromDiscord | <ElegantBeef> Yea |
00:02:15 | FromDiscord | <Clyybber> might be worth putting echos there |
00:02:22 | FromDiscord | <Clyybber> to find out when exactly it begins to fail |
00:02:51 | FromDiscord | <ElegantBeef> It fails after the nim code is called but before returning to nimscript |
00:03:58 | FromDiscord | <ElegantBeef> Line 45 shows where it's not working |
00:04:09 | FromDiscord | <ElegantBeef> https://play.nim-lang.org/#ix=2Cfb |
00:10:05 | FromDiscord | <ElegantBeef> The interpreter just seems to silently fail |
00:11:07 | FromDiscord | <Clyybber> you sure its getInt ? Maybe its the type conversion |
00:12:12 | FromDiscord | <ElegantBeef> Yes without the conversion it also errors |
00:13:34 | FromDiscord | <ElegantBeef> Just double checked, doing `echo getInt(buff, pos)` results in the same behaviour |
00:13:50 | * | sealmove joined #nim |
00:14:10 | FromDiscord | <Clyybber> its probably the var param |
00:14:58 | FromDiscord | <ElegantBeef> It's being passed to a proc that isnt a var, though |
00:15:24 | FromDiscord | <Clyybber> I mean `pos` being a var param |
00:15:37 | FromDiscord | <Clyybber> maybe making it a local var fixes it |
00:18:50 | FromDiscord | <ElegantBeef> Nope |
00:19:43 | FromDiscord | <ElegantBeef> Replacing those with `0.T` doesnt crash |
00:20:03 | FromDiscord | <Clyybber> wdym? |
00:20:24 | FromDiscord | <ElegantBeef> replacing the `result = getInt` with `result = 0.T` works |
00:20:39 | FromDiscord | <ElegantBeef> So it's something with the VM calls was just ensuring that |
00:20:59 | FromDiscord | <Clyybber> is that playground example supposed to demonstrate the bug? |
00:21:04 | FromDiscord | <Clyybber> because it works fine for me |
00:21:07 | FromDiscord | <ElegantBeef> No |
00:21:15 | FromDiscord | <ElegantBeef> It relies on nimscripter |
00:21:18 | FromDiscord | <Clyybber> ok |
00:21:23 | * | mmohammadi9812 joined #nim |
00:21:29 | FromDiscord | <ElegantBeef> If you want to check it out i'll push this and you can clone the branch |
00:21:37 | FromDiscord | <Clyybber> aight |
00:22:29 | FromDiscord | <ElegantBeef> https://github.com/beef331/nimscripter/tree/speed |
00:22:33 | FromDiscord | <ElegantBeef> Dere you go |
00:22:59 | FromDiscord | <ElegantBeef> `nim c -r ./src/nimscripter` will run the `test.nims` file |
00:23:14 | FromDiscord | <ElegantBeef> And if you want to see the generated nimscript you can do `nim c -d:debugScript` |
00:24:47 | * | krux02 quit (Remote host closed the connection) |
00:26:37 | FromDiscord | <Clyybber> 141 is the line? |
00:26:57 | FromDiscord | <ElegantBeef> Yea |
00:27:22 | FromDiscord | <ElegantBeef> It's where as far as i can tell the VM silently fails |
00:30:04 | FromDiscord | <Clyybber> weird, getInt itself seems to get executed until the end |
00:31:55 | FromDiscord | <Clyybber> or am I stupid |
00:32:04 | FromDiscord | <ElegantBeef> I concur it runs to completion |
00:32:22 | FromDiscord | <ElegantBeef> The result seems ot be the issue |
00:32:57 | FromDiscord | <Clyybber> yeah discard works fine |
00:33:16 | FromDiscord | <ElegantBeef> hmm? |
00:33:47 | FromDiscord | <Clyybber> discard getInt(buf, pos) |
00:34:03 | FromDiscord | <Clyybber> it exits as soon as we pass its result to something else |
00:34:07 | FromDiscord | <Clyybber> like the type conversion |
00:34:10 | FromDiscord | <Clyybber> or echo |
00:34:15 | FromDiscord | <Clyybber> or assign it |
00:40:18 | FromDiscord | <ElegantBeef> Nothing stands out as obviously incorrect to me |
00:41:02 | FromDiscord | <Clyybber> maybe go into vm.nim and inspect the value there |
00:41:13 | FromDiscord | <Clyybber> I gotta get some sleep, cya |
00:41:17 | FromDiscord | <ElegantBeef> Buh bye |
00:41:23 | FromDiscord | <ElegantBeef> Thanks for the help anywho |
00:46:49 | FromDiscord | <ElegantBeef> @Clyybber Well thanks turns out there is a VmArgs.setResult for all the primitives |
00:47:04 | FromDiscord | <ElegantBeef> Didnt notice that previously and that works |
01:00:42 | * | mbomba quit (Ping timeout: 256 seconds) |
01:02:22 | * | D__ joined #nim |
01:03:11 | * | D_ quit (Remote host closed the connection) |
01:07:49 | * | D__ quit (Remote host closed the connection) |
01:08:25 | * | rockcavera quit (Killed (kornbluth.freenode.net (Nickname regained by services))) |
01:08:26 | * | rockcavera joined #nim |
01:08:36 | * | D_ joined #nim |
01:11:01 | * | Sembei quit (Read error: Connection reset by peer) |
01:12:50 | * | rockcavera quit (Ping timeout: 256 seconds) |
01:14:37 | * | TomDotTom quit (Ping timeout: 264 seconds) |
01:26:19 | * | Tanger joined #nim |
01:32:03 | disruptek | fighter: you finished your bot? |
01:36:08 | * | Sembei joined #nim |
01:41:12 | FromGitter | <iffy> I have a thread running an asyncdispatch loop and other stuff is happening in another thread (worker). If I want the worker thread to cause things to happen in my asyncdispatch loop, is this a good architecture? Share a channel (or channels) between threads. Main thread registers an AsyncEvent and worker thread triggers the event when there's something in the channel for main to read. |
01:43:27 | FromGitter | <iffy> Or skip the AsyncEvent and just call tryRecv on the channel each time I poll()? |
01:51:30 | * | abm quit (Read error: Connection reset by peer) |
01:51:30 | * | sealmove quit (Read error: Connection reset by peer) |
01:51:53 | jonjitsu[m] | Are there any open source projects out there using jester or some other web framework? I'd like to see how they do things. |
01:53:58 | go|dfish | jonjitsu[m]: the forum? https://github.com/nim-lang/nimforum#features |
01:55:32 | jonjitsu[m] | shoulda thought of that I suppose :) |
02:18:39 | * | apahl quit (Ping timeout: 272 seconds) |
02:20:16 | * | apahl joined #nim |
02:36:07 | FromDiscord | <himu> quick query. how to do `let c: char = 'z'; var a: int = c - 'a';` in nim? |
02:37:56 | * | mbomba joined #nim |
02:38:37 | FromDiscord | <shashlick> just `var a = c.int - 'a'.int` should do it |
02:39:02 | FromDiscord | <shashlick> or you could see if {.borrow.} works |
02:40:29 | FromDiscord | <smallgram> For the JavaScript backend, is importjs and importcpp pragma basically the same? |
02:48:35 | Prestige | Hm if I create an object and write procs for + - * / does nim still evaluate equations correctly, or will they just be evaluated in left to right order? |
02:55:24 | FromDiscord | <Rika> afaik evaluation order does not change |
02:55:33 | FromDiscord | <Rika> theres a chart in the manual i think |
03:07:37 | * | mbomba quit (Quit: WeeChat 2.9) |
03:09:24 | * | mbomba joined #nim |
03:10:54 | * | rockcavera joined #nim |
03:11:02 | FromDiscord | <impbox> Yeah evaluation order is defined by the symbol |
03:12:41 | * | NimBot joined #nim |
03:19:52 | * | muffindrake quit (Ping timeout: 260 seconds) |
03:21:40 | * | muffindrake joined #nim |
03:21:55 | * | fowl quit (Ping timeout: 244 seconds) |
03:22:30 | * | sirn quit (Read error: Connection reset by peer) |
03:22:48 | * | kwilczynski quit (Ping timeout: 260 seconds) |
03:22:49 | * | sirn joined #nim |
03:23:22 | * | fowl joined #nim |
03:24:19 | * | kwilczynski joined #nim |
03:26:58 | voltist | Gee I haven't checked IRC for a while. How's everyone doing? |
03:27:45 | Prestige | hey voltist, I'm doing well. Was sick this morning and skipped work, but doing better now :) How are you? |
03:28:55 | voltist | Yeah not to bad myself thanks |
03:57:31 | * | mbomba quit (Quit: WeeChat 2.9) |
03:59:44 | * | mmohammadi9812 quit (Quit: Quit) |
04:00:00 | * | mmohammadi9812 joined #nim |
04:02:28 | * | a_chou joined #nim |
04:06:01 | * | supakeen quit (Quit: WeeChat 2.9) |
04:06:38 | * | supakeen joined #nim |
04:08:37 | * | waleee-cl quit (Quit: Connection closed for inactivity) |
04:11:48 | * | a_chou quit (Remote host closed the connection) |
04:19:24 | * | apahl quit (Ping timeout: 240 seconds) |
04:20:31 | * | apahl joined #nim |
04:46:41 | Axiomatic | If I find a wee bug in the documentation's code example, who do I sent that to, or what's the procedure? |
04:46:59 | disruptek | fix it and send a pr; you can do this directly from the github ui. |
04:48:03 | Axiomatic | I see, the web docs are in Github you're saying |
04:49:56 | Axiomatic | oic, yeah, nvermind it's supposed to fail. Nevermind me |
04:58:08 | * | mmohammadi9812 quit (Ping timeout: 256 seconds) |
04:59:07 | * | gangstacat quit (Quit: ฤis!) |
05:00:22 | * | mmohammadi9812 joined #nim |
05:21:25 | * | gangstacat joined #nim |
05:33:19 | * | solitudesf joined #nim |
06:06:05 | * | Tanger is now known as the_serf |
06:14:12 | * | narimiran joined #nim |
06:43:38 | * | BarrOff joined #nim |
07:20:22 | * | mwbrown quit (Ping timeout: 256 seconds) |
07:22:19 | * | mwbrown joined #nim |
07:29:24 | * | mwbrown quit (Ping timeout: 240 seconds) |
07:44:36 | * | natrys joined #nim |
07:58:04 | * | BarrOff quit (Ping timeout: 240 seconds) |
08:08:30 | * | mwbrown joined #nim |
08:17:06 | * | voidpi quit (Ping timeout: 256 seconds) |
08:17:46 | * | voidpi joined #nim |
08:20:43 | * | the_serf quit (Quit: Leaving) |
08:23:43 | * | mwbrown quit (Ping timeout: 246 seconds) |
08:25:13 | * | krux02 joined #nim |
08:38:57 | * | mwbrown joined #nim |
08:48:12 | * | mwbrown quit (Ping timeout: 256 seconds) |
08:50:54 | * | mwbrown joined #nim |
08:51:52 | ForumUpdaterBot | New thread by Clonk: Testament failure with reNimcCrash, see https://forum.nim-lang.org/t/6999 |
08:59:11 | * | hnOsmium0001 quit (Quit: Connection closed for inactivity) |
09:01:19 | Yardanico | !status |
09:01:21 | FromDiscord | Uptime - 1 week, 13 hours, and 24 minutes |
09:04:32 | Yardanico | 7000th forum thread next |
09:08:55 | FromDiscord | <Idefau> https://forum.nim-lang.org/t/6969 funny number hehe |
09:10:28 | FromDiscord | <kaletaa> nerd |
09:12:50 | FromDiscord | <ElegantBeef> Cmon yard lacking on the options for which english to use |
09:13:03 | FromDiscord | <ElegantBeef> Clearly the best english is the on that includes Canada in it ๐ |
09:15:31 | FromDiscord | <Idefau> Romanian English |
09:17:40 | FromDiscord | <kaletaa> the documentation should be in australian slang |
09:18:02 | FromDiscord | <ElegantBeef> Nah the issue with that is there would be more cunts than useful information |
09:18:19 | FromDiscord | <kaletaa> possibly |
09:18:32 | * | mbomba joined #nim |
09:19:01 | * | mmohammadi9812 quit (Ping timeout: 246 seconds) |
09:19:38 | FromDiscord | <Idefau> but cunt is an useful information |
09:20:26 | FromDiscord | <ElegantBeef> Well it's useful to know if the writer likes you but not to understand the code |
09:20:56 | FromDiscord | <Idefau> sent a code paste, see https://play.nim-lang.org/#ix=2CgI |
09:21:26 | FromDiscord | <ElegantBeef> oi cunt, a for loop is like when you go to maccas, but instead of going once you go once for each item |
09:21:47 | FromDiscord | <Idefau> yes lets add that |
09:26:14 | * | PMunch joined #nim |
09:29:52 | FromDiscord | <kaletaa> pro cunt |
09:29:58 | FromDiscord | <kaletaa> https://tenor.com/view/turkey-turkey-man-shades-talk-gif-17016152 |
09:30:05 | * | mmohammadi9812 joined #nim |
09:31:29 | FromDiscord | <Idefau> POV you are living in constantinopole in the year 1453 |
09:32:18 | Yardanico | this is main channel idf |
09:32:34 | FromDiscord | <Idefau> huh |
09:32:35 | FromDiscord | <Idefau> oh |
09:34:24 | FromDiscord | <kaletaa> hello yard more like fard hahah i am incredibly funny |
10:14:04 | * | lritter joined #nim |
10:16:56 | * | mbomba quit (Quit: WeeChat 2.9) |
10:31:10 | FromGitter | <gogolxdong> What's the equivalent operation in Nim for pointer sum in c? |
10:32:05 | PMunch | Pointer sum? |
10:32:15 | Yardanico | see e.g. https://gist.github.com/oltolm/1738289b5ac866ec6a7e4ef20095178e |
10:32:19 | mipri | cast the ptr to a ptr UncheckedArray[T] of an appropriate T and then index into it |
10:32:23 | Yardanico | or this^ |
10:32:37 | Yardanico | the thing I linked is pretty old |
10:34:08 | FromDiscord | <ShalokShalom> Can I replace keywords in Nim? |
10:34:20 | PMunch | What do you mean? |
10:34:25 | PMunch | Like rename `if`? |
10:34:30 | FromDiscord | <ShalokShalom> So use function instead of func and so on |
10:34:37 | FromDiscord | <ShalokShalom> Yes |
10:34:51 | FromDiscord | <ShalokShalom> With macros? |
10:34:53 | PMunch | I mean you can do this: https://nim-lang.org/docs/filters.html#available-filters-replace-filter |
10:36:39 | FromGitter | <gogolxdong> the link looks crazy. |
10:37:17 | PMunch | https://play.nim-lang.org/#ix=2Ch3 |
10:37:24 | FromDiscord | <ShalokShalom> Thanks |
10:38:34 | PMunch | They're not really intended for that feature |
10:39:28 | PMunch | You might also run into things like this: https://play.nim-lang.org/#ix=2Ch4 |
10:40:03 | * | opal quit (Ping timeout: 240 seconds) |
10:40:55 | FromDiscord | <haxscramper> How to unsee this - now I can't tell people nim doesn't have preprocessor |
10:41:20 | PMunch | Haha :P |
10:43:51 | FromDiscord | <ShalokShalom> Thats superb |
10:44:18 | FromDiscord | <ShalokShalom> I am sure, it can be made without this side effect and it is non-lethal anyway ๐ |
10:45:17 | * | opal joined #nim |
10:46:04 | FromDiscord | <ShalokShalom> @PMunch How can I find the special comment annotation, the docs arent giving my anything? |
10:46:14 | FromDiscord | <ShalokShalom> (edit) "@PMunch" => "PMunch" |
10:46:30 | FromGitter | <gogolxdong> Can pointer addition be treated as seq truncation? |
10:46:36 | PMunch | Special comment annotation? |
10:46:42 | FromDiscord | <ShalokShalom> https://media.discordapp.net/attachments/371759389889003532/770961733773688832/Screenshot_2020-10-28-11-46-32-32_3aea4af51f236e4932235fdada7d1643.jpg |
10:46:55 | FromDiscord | <ShalokShalom> The first line in your example |
10:46:56 | PMunch | Oh, it's in the link I sent |
10:47:08 | mipri | that whole page of the documentation is about those |
10:47:11 | mipri | that was linked |
10:47:53 | FromDiscord | <ShalokShalom> oO |
10:48:27 | FromDiscord | <ShalokShalom> PMunch the sub and by keywords are explained |
10:48:37 | FromDiscord | <ShalokShalom> But I mean the #?replace thingy |
10:49:00 | mipri | https://nim-lang.org/docs/filters.html <- the whole page is about that |
10:49:00 | PMunch | Scroll up? |
10:49:37 | FromDiscord | <ShalokShalom> Ah, now I see. Thanks |
10:50:43 | FromGitter | <gogolxdong> that is treating a pointer type as a seq[T], I know char * is could be treated as string, which is seq[char] |
10:50:55 | Yardanico | PMunch: it's not hard to do something like that by hooking to Nim's lexer |
10:50:59 | Yardanico | I mean replaces like that |
10:51:11 | Yardanico | it'll be a bit error-prone too, but less than replace |
10:51:39 | mipri | you can't treat a random pointer as a seq[T], seqs have more than just their contents |
10:52:06 | mipri | cstring -> string isn't free either |
10:52:31 | FromDiscord | <ShalokShalom> Yardanico How so less error prone? |
10:52:50 | FromDiscord | <ShalokShalom> How how does this look in the lexer? |
10:52:52 | Yardanico | @ShalokShalom if you use compiler's lexer, you can only replace occurences where it's actually a symbol and not a string literal |
10:53:03 | Yardanico | e.g check out https://github.com/Yardanico/nuglifier where I replace stuff |
10:53:08 | mipri | you can make it as 'good' as the C preprocessor at least |
10:53:16 | Yardanico | https://github.com/Yardanico/nuglifier/blob/master/src/nuglifier.nim#L57 |
10:53:24 | Yardanico | but of course the only real way is to modify nim's parser ;) |
10:53:33 | Yardanico | *syntax skins flashbacks* |
10:55:55 | FromDiscord | <ShalokShalom> Syntax skins existed in Nim? |
10:56:16 | Yardanico | yes |
10:56:48 | Yardanico | there was only one additional "skin" - braces |
10:56:55 | Yardanico | but it was removed in 2017 because no one really used it |
10:57:11 | Yardanico | and it increases the cost of the maintenance of the parser |
10:57:16 | FromDiscord | <Rika> ehem |
10:57:39 | mipri | https://forum.nim-lang.org/t/2811 has an example |
10:57:44 | FromDiscord | <ShalokShalom> Same as in FSharp |
10:57:55 | FromDiscord | <ShalokShalom> They also offer both, keywords and indentation |
10:58:01 | FromDiscord | <ShalokShalom> And nobody uses the first. |
11:00:02 | FromGitter | <gogolxdong> I think it can't be treated as anything else when interoperating when C/C++ because memory layout, what about in pure Nim, I am not having any interoperability, just trying to translate pointer addition into native Nim operation, which produce the same result. |
11:00:38 | Yardanico | @gogolxdong just use UncheckedArray then |
11:00:52 | Yardanico | you know that C's "indexing operators" are just sugar over pointers, right? |
11:01:07 | FromDiscord | <ShalokShalom> I am a beginner and I find it hard to understand types in function declarations. |
11:01:14 | Yardanico | @ShalokShalom ?? |
11:01:22 | FromDiscord | <ShalokShalom> Not in constants and such, just in proc and func and so on |
11:01:32 | FromGitter | <gogolxdong> yes , I know C pointer. |
11:01:34 | Yardanico | still don't get it |
11:01:45 | Yardanico | you mean in "proc a(x: int)" it's hard to understand int? |
11:01:53 | FromDiscord | <ShalokShalom> Like, I don't know how to understand which types will come up and such. |
11:01:59 | Yardanico | waty |
11:02:00 | Yardanico | wat* |
11:02:16 | FromDiscord | <ShalokShalom> I dont know how to define types pre-advance in types. |
11:02:23 | FromDiscord | <ShalokShalom> (edit) "types." => "functions." |
11:02:30 | Yardanico | i don't get you at all, sorry |
11:02:32 | FromDiscord | <Rika> i dont understand what you mean |
11:02:43 | PMunch | I'm lost as well.. |
11:02:50 | mipri | https://play.nim-lang.org/#ix=2Che |
11:02:54 | FromDiscord | <Rika> maybe we dont understand because we are too used to doing it |
11:03:05 | FromDiscord | <haxscramper> Can you show what you are trying to do? Like maybe `F` code that you need to convert to nim? |
11:03:16 | FromDiscord | <haxscramper> Or nim code you are having troubles with |
11:03:16 | FromDiscord | <Rika> F-asterisk |
11:03:16 | Yardanico | well nim isn't really unique in terms of procedures or proc argument |
11:03:17 | Yardanico | s |
11:03:18 | FromDiscord | <Rika> lol |
11:03:33 | Yardanico | it's not really different from most other statically typed languages |
11:03:44 | FromDiscord | <ShalokShalom> In F# I dont need to specify them |
11:03:51 | FromDiscord | <ShalokShalom> This is my main issue here |
11:04:03 | Yardanico | well, you'll need to get used to it :) |
11:04:06 | FromDiscord | <haxscramper> @Rika actually `F` does exist too. But let's assume it is just glob for language names |
11:04:09 | FromDiscord | <ShalokShalom> F# has complet type inferrence. |
11:04:24 | FromDiscord | <ShalokShalom> (edit) "complet" => "complete" | "inferrence." => "inference." |
11:04:36 | FromDiscord | <haxscramper> Well, you write function that operates on some kind of data, right? Generally speaking |
11:04:40 | FromDiscord | <Rika> you can just use `auto` everywhere |
11:04:43 | FromDiscord | <Rika> i guess |
11:04:46 | Yardanico | don't |
11:04:48 | FromDiscord | <ShalokShalom> Oho? |
11:04:51 | FromDiscord | <haxscramper> No |
11:04:52 | Yardanico | it's better to learn than to use auto |
11:04:56 | FromDiscord | <Rika> its not a great ide |
11:04:57 | FromDiscord | <Rika> (edit) "ide" => "idea" |
11:04:58 | FromDiscord | <ShalokShalom> Sad ๐ |
11:05:06 | FromDiscord | <Rika> its a code smell and everyone's gonna hate you for it |
11:05:07 | FromDiscord | <Rika> lol |
11:05:10 | FromDiscord | <lqdev> this discussion again? |
11:05:14 | Yardanico | yes |
11:05:23 | Yardanico | idk, the concept of types seems very natural to me |
11:05:24 | FromDiscord | <haxscramper> Auto is basically `func [T0, T1, T2, T3]( ... )` |
11:05:41 | FromDiscord | <ShalokShalom> This all doesnt help |
11:05:50 | FromDiscord | <ShalokShalom> How to think about it? |
11:05:50 | FromDiscord | <Rika> well |
11:05:59 | FromDiscord | <Rika> its basically "just get used to it" i guess... |
11:06:13 | FromDiscord | <Rika> you can leave the types empty until you finish writing the function body |
11:06:18 | FromDiscord | <Rika> then add them |
11:06:34 | Yardanico | @ShalokShalom well, it's really natural |
11:06:47 | FromDiscord | <haxscramper> Idk, maybe you just need example of how to rewrite ML-like to nim? To understand the difference |
11:06:53 | FromDiscord | <Rika> most of us here already know what types should go onto parameters before we even know what the function body should look like so we really cant help |
11:06:55 | FromDiscord | <haxscramper> E.g. example |
11:07:04 | mipri | give the language a chance, as it is, and see how you like it after a bit. starting with how you can change the language to be more like one you already know is, at the least, delaying your learning the language as it is. and at the worst you'll run into crazy problems that only occur in your new variant of the language |
11:07:12 | FromDiscord | <ShalokShalom> @Rika And how do you know that? |
11:07:16 | mipri | like, maybe auto-everywhere Nim has really horrible compiler performance. who would know? |
11:07:19 | FromDiscord | <Rika> i dont know, experience? |
11:07:23 | FromDiscord | <ShalokShalom> @mipri I already tried three times |
11:07:26 | FromDiscord | <Rika> programming for years needing to put the types? |
11:07:40 | FromDiscord | <ShalokShalom> So how to start? |
11:07:47 | Yardanico | by simple programs |
11:07:53 | Yardanico | make a procedure to sum two INTEGERS |
11:07:54 | Yardanico | two numbers |
11:07:58 | Yardanico | mathematical functions etc |
11:08:02 | Yardanico | strings |
11:08:21 | FromDiscord | <ShalokShalom> I dont like to think about that pre-advance |
11:08:25 | Yardanico | you don't have to |
11:08:29 | FromDiscord | <ShalokShalom> I can think about it later |
11:08:31 | Yardanico | you can write the function and then the types |
11:08:39 | FromDiscord | <ShalokShalom> Aha, ok? |
11:08:47 | FromDiscord | <ShalokShalom> And substitute with auto? |
11:08:48 | FromDiscord | <haxscramper> http://loup-vaillant.fr/tutorials/earley-parsing/parser.ml -> https://play.nim-lang.org/#ix=2yDb basically 1:1 rewrite of ocaml to nim |
11:08:50 | Yardanico | no |
11:08:56 | Yardanico | @ShalokShalom write the function, and then place types |
11:09:04 | FromDiscord | <Rika> thats what i said.... |
11:09:10 | Yardanico | it's not uncommon to change arguments of a function while you're writing it |
11:09:19 | FromDiscord | <ShalokShalom> Ah, ok |
11:09:19 | FromDiscord | <ShalokShalom> Super |
11:09:20 | FromDiscord | <Rika> > you can leave the types empty until you finish writing the function body |
11:09:22 | FromDiscord | <Rika> ๐ฆ |
11:10:19 | FromDiscord | <ShalokShalom> Ah, I can make untyped? ๐ฅณ |
11:10:24 | FromDiscord | <ShalokShalom> And add later. |
11:10:59 | FromDiscord | <Rika> you cant run it without types of course |
11:11:20 | FromDiscord | <ShalokShalom> What is the benefit of choosing C++ as compilation target instead C? |
11:11:31 | FromDiscord | <Rika> exceptions are faster AFAIK |
11:11:45 | FromDiscord | <ShalokShalom> I dont seem to find any docs on auto and untyped yet. |
11:11:48 | FromDiscord | <Rika> i dont know any other benefits other than that but i think there are more |
11:12:13 | ForumUpdaterBot | New thread by Foldl: Signal processing in Nim?, see https://forum.nim-lang.org/t/7000 |
11:12:21 | FromDiscord | <haxscramper> @ShalokShalom https://nim-lang.org/docs/manual.html#templates-typed-vs-untyped-parameters https://nim-lang.org/docs/manual.html#types-auto-type |
11:12:35 | FromDiscord | <ShalokShalom> Thanks a lot |
11:12:37 | FromDiscord | <Rika> sent a code paste, see https://play.nim-lang.org/#ix=2Chg |
11:12:37 | FromDiscord | <haxscramper> ~manual is just good to Ctrl+F in cases like this |
11:12:38 | mipri | ctrl-f untyped on the manual as well to get to "lazy type resolution for untyped" |
11:12:38 | disbot | manual: 11the Nim Manual is https://nim-lang.org/docs/manual.html |
11:12:38 | disbot | manual: 11just good to Ctrl+F in cases like this |
11:12:42 | * | TomDotTom joined #nim |
11:12:46 | FromDiscord | <Rika> bruh |
11:12:47 | FromDiscord | <Rika> lmao |
11:12:48 | FromDiscord | <haxscramper> shit |
11:12:50 | FromDiscord | <Rika> HAHAHAHAHA |
11:12:56 | FromDiscord | <haxscramper> But actually |
11:13:11 | FromDiscord | <haxscramper> I just don't know how to delete |
11:13:16 | FromDiscord | <Rika> ask disruptek |
11:13:18 | FromDiscord | <Rika> when theyre here |
11:13:26 | FromDiscord | <haxscramper> I think he will leave it as is |
11:13:28 | FromDiscord | <Idefau> no dont you will unleash chaos |
11:15:22 | FromDiscord | <Yardanico> 7000th forum thread yess |
11:15:43 | FromDiscord | <ShalokShalom> Is the forum stable now? |
11:15:48 | FromDiscord | <Yardanico> ?? |
11:15:50 | FromDiscord | <Yardanico> it's always been "stable" |
11:15:55 | FromDiscord | <ShalokShalom> I experienced couple of issues about a year ago |
11:16:03 | FromDiscord | <ShalokShalom> With sites not loading and so on. |
11:16:15 | FromDiscord | <ShalokShalom> So hiccup free now? |
11:16:17 | * | TomDotTom quit (Client Quit) |
11:16:32 | * | TomDotTom joined #nim |
11:16:43 | FromDiscord | <Rika> nothing is truly hiccup free |
11:17:02 | mipri | shit happens. Shit hasn't happened recently. |
11:18:03 | FromDiscord | <ShalokShalom> Is Nim suitable as a first language? |
11:19:01 | FromDiscord | <haxscramper> I think yes, it is good enough as a first language |
11:19:34 | FromDiscord | <haxscramper> Also see: https://www.reddit.com/r/nim/comments/jdcu21/is_nim_good_for_beginner_programmers/ |
11:19:53 | FromDiscord | <rc-05> @ShalokShalom Well yes, it has python-like syntax so it's readable unlike Rust and C++ |
11:20:02 | FromDiscord | <Rika> i think its still hard if you have no one to ask questions to |
11:22:42 | mipri | the single most beneficial quality for a language being good as a first language, is it having a community that will look at your entire pasted program and tell you that you had a typo, or who can read the compiler's error message back to you with emphasis. |
11:23:05 | mipri | Nim has play.nim-lang.org and these chats, so it suffices. |
11:23:56 | FromDiscord | <Rika> well most people wont check the chats |
11:24:10 | mipri | people debating the finer points of a language being good/bad are fooling themselves about how difficult programming is overall. |
11:26:19 | FromDiscord | <rc-05> @Rika There's still the manual if you are not sure for how something is done and luckily IDE integration is not bad for Nim |
11:26:38 | FromDiscord | <ShalokShalom> I like all of this |
11:30:13 | FromGitter | <gogolxdong> Does UncheckedArray need alloc and free memory manually? |
11:30:27 | mipri | no, neither |
11:30:28 | FromDiscord | <Rika> yes |
11:30:31 | FromDiscord | <Rika> wait huh? |
11:30:38 | FromDiscord | <Rika> oh you mean converting to UA? no |
11:31:08 | mipri | yeah casting to it for ptr arithmetic, as in https://play.nim-lang.org/#ix=2Che |
11:32:32 | FromDiscord | <Rika> yeah dont dealloc it |
11:33:28 | FromGitter | <gogolxdong> Will an UncheckedArray[T] field of object type grow/shrink or just used as casting? |
11:33:43 | mipri | it's unchecked, it doesn't even know what its length is |
11:33:47 | FromDiscord | <Rika> just use for casting |
11:34:04 | FromDiscord | <Rika> its like pointer used as array in c |
11:34:05 | mipri | with experimental view types you can have openArray[T] in a field with a length |
11:35:17 | FromGitter | <gogolxdong> sizeof an object with UncheckedArray field is 1. |
11:36:14 | FromDiscord | <Rika> because its a pointer |
11:36:16 | FromDiscord | <warcrimecommiter1337> piss and fart |
11:36:21 | FromDiscord | <Rika> oh, 1 |
11:36:23 | FromDiscord | <Rika> thats weird |
11:36:23 | mipri | you probably want a ptr UncheckedArray[T] field. that'll have a sizeof of 8 |
11:36:27 | * | luis_ joined #nim |
11:36:28 | FromDiscord | <ShalokShalom> Hnn, there are a lot of examples in the documentation who dont run since they are incorrectly indented. |
11:36:34 | FromDiscord | <Yardanico> for example? |
11:36:36 | FromDiscord | <Rika> @ShalokShalom examples? |
11:36:53 | FromDiscord | <ShalokShalom> https://nim-lang.org/docs/options.html#some%2CT |
11:37:07 | FromDiscord | <Rika> its not incorrectly indented |
11:37:08 | FromDiscord | <Yardanico> how is it incorrectly indented? |
11:37:20 | FromDiscord | <Yardanico> it's actually being checked, it's a runnableExamples - https://github.com/nim-lang/Nim/blob/version-1-4/lib/pure/options.nim#L108 |
11:37:22 | FromDiscord | <warcrimecommiter1337> shit, even |
11:37:28 | FromDiscord | <ShalokShalom> https://play.nim-lang.org/#ix=2ync |
11:37:29 | FromDiscord | <Rika> https://play.nim-lang.org/#ix=2Chk |
11:37:30 | FromDiscord | <Rika> works here |
11:37:41 | FromDiscord | <Yardanico> @ShalokShalom ?? |
11:37:50 | FromDiscord | <Yardanico> your snippet wrosk |
11:37:51 | FromDiscord | <Yardanico> (edit) "wrosk" => "works" |
11:37:57 | FromDiscord | <Rika> yes |
11:38:20 | FromDiscord | <ShalokShalom> Oh, this is after I edited it |
11:38:24 | FromDiscord | <ShalokShalom> Wait a second |
11:38:46 | mipri | just point to the example in the documentation |
11:40:12 | mipri | what you might be running into is that "incorrect indentation" is an answer you'll readily get from indentation-unrelated syntax errors. If you're pasting a bunch of examples into the same file, you might've broken syntax earlier, or the examples may not all work right next to each other. |
11:40:38 | FromDiscord | <Yardanico> yeah, sometimes the compiler gives you "incorrect indentation" errors when you have invalid code |
11:40:40 | mipri | but it's definitely not the case that there are lots of examples in the docs that don't work because they're incorrectly indented. |
11:40:42 | FromDiscord | <Yardanico> but not invalid indentation |
11:40:53 | FromDiscord | <Yardanico> yeah, most examples nowadays are checked with runnableExamples |
11:40:55 | FromDiscord | <Yardanico> so they're tested |
11:41:10 | FromDiscord | <ShalokShalom> @Yardanico runnableExamples gets checked when the website gets build? |
11:41:15 | FromDiscord | <Yardanico> when docs are built |
11:41:37 | FromDiscord | <Yardanico> and it's a part of CI |
11:41:41 | FromDiscord | <Yardanico> so it's checked for every commit |
11:42:00 | FromDiscord | <ShalokShalom> Now it works |
11:42:11 | FromDiscord | <ShalokShalom> I think its an issue with the new mobile Firefox |
11:42:25 | * | luis_ quit (Remote host closed the connection) |
11:42:34 | FromDiscord | <ShalokShalom> It has a new renderer and makes a lot of issues in online code editors |
11:43:09 | FromDiscord | <ShalokShalom> Can I saw that I want the type inference in bindings happen to be left associated? |
11:44:23 | FromDiscord | <ShalokShalom> const name = 1 becomes type 'name' |
11:44:29 | FromDiscord | <Yardanico> what |
11:44:30 | FromDiscord | <ShalokShalom> (edit) "becomes" => "โตbecomes" |
11:44:39 | FromGitter | <gogolxdong> https://play.nim-lang.org/#ix=2Chm can this auto-generated snippet be replaced with a native operation, I think it essentially grows an buffer, and add p_payload by delta. |
11:44:48 | FromDiscord | <ShalokShalom> !eval name = 1 |
11:44:50 | NimBot | Compile failed: /usercode/in.nim(1, 1) Error: undeclared identifier: 'name' |
11:45:00 | FromDiscord | <ShalokShalom> !eval const name = 1 |
11:45:07 | NimBot | <no output> |
11:45:21 | FromDiscord | <ShalokShalom> I want that to be the type of the key, automatically |
11:45:28 | FromDiscord | <Yardanico> i don' |
11:45:31 | FromDiscord | <Yardanico> (edit) "don'" => "don't get you again :(" |
11:45:32 | FromDiscord | <ShalokShalom> Instead the primitive on the right side. |
11:45:53 | mipri | !eval const name = 1; echo name.typeof |
11:45:55 | NimBot | int |
11:46:02 | FromDiscord | <ShalokShalom> Yeah |
11:46:16 | PMunch | And what type do you want it? |
11:46:19 | FromDiscord | <ShalokShalom> Can I auto-infer this as type name instead int? |
11:46:31 | FromDiscord | <Yardanico> AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA |
11:46:36 | FromDiscord | <Rika> no, you have to explicitly declare distinct types |
11:46:38 | FromDiscord | <ShalokShalom> I want to precise my types, so to not use a lot of ints |
11:46:46 | FromDiscord | <ShalokShalom> @Rika I want to change that. |
11:46:57 | FromDiscord | <ShalokShalom> Like, by default always the left side. |
11:47:02 | PMunch | You can set up a macro for it |
11:47:04 | mipri | this is, at least, something that a template can probably do for you. |
11:47:07 | FromDiscord | <Yardanico> sent a code paste, see https://play.nim-lang.org/#ix=2Chn |
11:47:19 | FromDiscord | <ShalokShalom> ๐ฅณ |
11:47:30 | FromDiscord | <ShalokShalom> Thats really amazing |
11:47:51 | FromDiscord | <Rika> it's not as easy as F# sure, but its at least doable ๐ |
11:48:05 | FromDiscord | <ShalokShalom> Nim is way more flexible than F# |
11:48:10 | FromDiscord | <Rika> i think in some languages its much more janky to do than in nim |
11:48:21 | FromDiscord | <ShalokShalom> Its just less capable on the issue of type inference. |
11:48:35 | mipri | does F# really have anything like this? OCaml doesn't have it |
11:48:39 | FromDiscord | <ShalokShalom> The flexibility of Nim is unmatched |
11:49:03 | FromDiscord | <ShalokShalom> No, I dont think so, macros are not really a thing in FSharp I think |
11:49:34 | FromDiscord | <ShalokShalom> Lisp comes close to Nim, but I have yet to find another language that is so capable with its macro system |
11:49:42 | FromDiscord | <Rika> @ShalokShalom its matched (actually beaten) by lisp afaik, but you tell me how fun you find programming in lisp :PPP |
11:50:15 | FromDiscord | <ShalokShalom> Yeah, I know lisp a little bit |
11:50:28 | FromDiscord | <ShalokShalom> And actually, the new version of Racket will be indentation based. |
11:50:34 | FromDiscord | <Rika> that's funky |
11:50:38 | FromDiscord | <Rika> radical change |
11:50:42 | FromDiscord | <Rika> feel like many lispers will hate on it |
11:50:42 | FromDiscord | <ShalokShalom> Yeah ๐ |
11:51:21 | FromDiscord | <ShalokShalom> So, I have seen a video of one of the maintainers, who explains it |
11:51:33 | FromDiscord | <rc-05> @Rika Hey don't you like all these parenthesis? |
11:51:37 | FromDiscord | <ShalokShalom> Racket is always an educational language, so they justify it by that. |
11:52:15 | FromDiscord | <Rika> lmao |
11:52:29 | FromDiscord | <Rika> most people say its abstracted away by the IDE and i get it |
11:52:45 | FromDiscord | <Rika> but its not uncommon for many programmers to edit on stock vim |
11:52:51 | FromDiscord | <ShalokShalom> Yeah, but you need to get used to it |
11:53:01 | FromDiscord | <ShalokShalom> They say, after 6 months, you dont see it anymore |
11:53:07 | FromDiscord | <Rika> thats a long time... |
11:53:18 | FromDiscord | <ShalokShalom> But first: I dont like to go through these 6 months, exactly |
11:53:41 | PMunch | @ShalokShalom: https://play.nim-lang.org/#ix=2Chp |
11:53:49 | FromDiscord | <ShalokShalom> And second: Why put them there, when you dont see them afterwards, and this is a desirable thing |
11:54:13 | FromDiscord | <Rika> pmunch: cant you also move the type definition into the macro? |
11:54:16 | FromDiscord | <Rika> or is that not gonna work |
11:54:25 | PMunch | Sure |
11:54:31 | FromDiscord | <Rika> i guess its more work |
11:54:37 | PMunch | Not really |
11:54:44 | FromDiscord | <Rika> i guess its "implementation is up to the reader" |
11:54:49 | FromDiscord | <Rika> ๐ |
11:54:57 | PMunch | https://play.nim-lang.org/#ix=2Chq |
11:55:00 | FromDiscord | <ShalokShalom> This is awesome |
11:55:10 | FromDiscord | <ShalokShalom> I still like to have that build in |
11:55:23 | FromDiscord | <ShalokShalom> Without specifying it always |
11:55:33 | FromDiscord | <ShalokShalom> Just evaluate the type according to the name |
11:55:44 | FromDiscord | <ShalokShalom> I guess this takes a more invasive approach? |
11:55:47 | PMunch | Or if you want to allow all types, not just distinct ints: https://play.nim-lang.org/#ix=2Chr |
11:55:53 | FromDiscord | <Rika> not sure what you mean by invasive |
11:56:08 | PMunch | If it was the default pretty much all Nim code would break :P |
11:56:17 | FromDiscord | <Rika> and its not really desired |
11:56:18 | FromDiscord | <ShalokShalom> Well, changing actually the type inference |
11:56:25 | PMunch | let x = 10, 10 would now be a distinct int named x |
11:56:31 | FromDiscord | <Rika> i dont think a lot of us nimions want something like this |
11:56:32 | FromDiscord | <ShalokShalom> @PMunch Yeah, but just for me, like with a build trigger |
11:56:37 | FromDiscord | <Yardanico> @Rika exactly |
11:56:45 | FromDiscord | <ShalokShalom> I want distinctive tyoes |
11:56:54 | FromDiscord | <Rika> most of us dont which is why its not in the stdlib |
11:57:07 | FromDiscord | <Rika> but hey, you have this macro now |
11:57:08 | FromDiscord | <Yardanico> @ShalokShalom so declare them explicitly :) |
11:57:12 | FromDiscord | <Rika> you can just put this in a util file and use it |
11:57:13 | FromDiscord | <ShalokShalom> I dont see the sense in 40 different string types, which are not supposed to be mixed, but its still possible to do so |
11:58:08 | FromDiscord | <ShalokShalom> @Yardanico I do like this in my code without noise. |
11:58:15 | PMunch | But now you need to name your variables the same as whatever the arguments of your procedures accept |
11:58:17 | FromDiscord | <ShalokShalom> @Rika util file? |
11:58:19 | FromDiscord | <Yardanico> "noise" is very subjective |
11:58:20 | PMunch | Which can get confusing |
11:58:38 | FromDiscord | <ShalokShalom> @PMunch Sure? |
11:58:40 | mipri | there will be noise though, because once you use these distinct types you're going to be constantly stripping the type |
11:58:44 | FromDiscord | <ShalokShalom> I havnt done this yet. |
11:58:58 | mipri | it's going to be name.int, thing.int, something.int all over |
11:59:09 | FromDiscord | <ShalokShalom> Isnt mixing dozens of different ints potentially dangerous? |
11:59:15 | FromDiscord | <Rika> @ShalokShalom like in whatever library you're developing, you'd put this in some file called "util.nim" that everything else imports, or something like that |
11:59:24 | FromDiscord | <Rika> > Isnt mixing dozens of different ints potentially dangerous?โตnot necessarily |
11:59:27 | FromDiscord | <Rika> to a point it is |
12:00:03 | FromDiscord | <Rika> but if you're careful enough it wont, like using distinct ints for not literally all variables, but only for distinctly different variables |
12:00:24 | FromDiscord | <Rika> so something like measurements in metres can be one distinct int and inches can be another |
12:00:33 | FromDiscord | <Rika> many vars can be in metres, same for inches |
12:00:36 | FromDiscord | <ShalokShalom> Aah, ok |
12:00:40 | FromDiscord | <Rika> but its fatal to mix them |
12:00:44 | FromDiscord | <ShalokShalom> So I can name this how I want. |
12:01:06 | PMunch | I mean I could get behind implicitly creating distinct types when you define a type with a variable that doesn't exist |
12:01:15 | FromDiscord | <ShalokShalom> @mipri Thats confusing indeed.โตโตIs there a way around this? |
12:01:19 | FromDiscord | <Yardanico> no |
12:01:21 | FromDiscord | <Yardanico> it's intended |
12:01:25 | FromDiscord | <Yardanico> Nim has a strict type system |
12:01:27 | FromDiscord | <Rika> that's the point of distinct ints |
12:01:29 | PMunch | So `var distance: Meter = 10` creates Meter if it doesn't already exist |
12:01:31 | FromDiscord | <Yardanico> you can work around it with converters |
12:01:37 | FromDiscord | <Rika> so you dont just mix it with another int |
12:01:38 | FromDiscord | <Yardanico> but then you lose the whole point in distinct types |
12:01:48 | FromDiscord | <ShalokShalom> And why do primitive types that not? |
12:01:51 | FromDiscord | <Yardanico> ? |
12:02:00 | FromDiscord | <Rika> > And why do primitive types that not?โตwdym? i didnt understand |
12:02:17 | FromDiscord | <ShalokShalom> Can I not infer strings and such as what they are, and then put my distinctive type over it? |
12:02:26 | FromDiscord | <Rika> i uh |
12:02:30 | FromDiscord | <Rika> dont get it still |
12:02:31 | FromDiscord | <Rika> sorry |
12:02:46 | FromDiscord | <Rika> i assume its hard for us who didnt come from highly functional languages |
12:02:52 | FromDiscord | <Rika> to understand, i mean |
12:03:27 | mipri | my internal time-series graphs of "what on EARTH are you talking about" are getting pretty entertaining to look at |
12:03:33 | FromDiscord | <Yardanico> exactly |
12:03:52 | mipri | FP langs don't use a lot of distinct types, that's more of an Ada thing |
12:04:05 | FromDiscord | <Yardanico> @ShalokShalom maybe you should just accept that nim is an imperative language at its core |
12:04:12 | FromDiscord | <ShalokShalom> Nooooo |
12:04:28 | FromDiscord | <Yardanico> of course you can do functional and stuff, but the language isn't made specifically for that |
12:04:30 | FromDiscord | <Rika> mipri: i mean nim is kinda inspired by ada i think..... xd |
12:04:35 | FromDiscord | <ShalokShalom> func is pure |
12:04:43 | FromDiscord | <ShalokShalom> Not even F# has that |
12:04:43 | FromDiscord | <Idefau> same |
12:04:49 | FromDiscord | <ShalokShalom> Almost no language does |
12:04:55 | FromDiscord | <ShalokShalom> So, fresh from the start |
12:05:05 | FromDiscord | <ShalokShalom> int, string and so on are primitive types |
12:05:18 | FromDiscord | <Yardanico> "func" is not 100% pure either ;) |
12:05:24 | FromDiscord | <ShalokShalom> Appearently, they behave differently in certain cases |
12:05:26 | FromDiscord | <Yardanico> you can do "var int" just fine |
12:05:28 | FromDiscord | <Idefau> func is useful for math stuff but its not like it makes nim functional |
12:05:30 | FromDiscord | <Yardanico> in afunc |
12:05:34 | FromDiscord | <Yardanico> @Idefau exactly |
12:05:36 | FromDiscord | <ShalokShalom> @Yardanico 1.4 catched the last edge case? |
12:05:46 | FromDiscord | <Yardanico> @ShalokShalom no, "var int" and similar is allowed |
12:05:46 | FromDiscord | <ShalokShalom> I got told. |
12:05:48 | FromDiscord | <Yardanico> explicitly |
12:06:02 | * | supakeen quit (Quit: WeeChat 2.9) |
12:06:02 | FromDiscord | <ShalokShalom> Within a func? |
12:06:03 | FromDiscord | <Yardanico> 1.4 with strictFuncs is for deep immutability with refs unless you specify that you want to mutate them explicitly |
12:06:10 | FromDiscord | <Yardanico> @ShalokShalom yes |
12:06:15 | FromDiscord | <Yardanico> I mean in the arguments |
12:06:17 | FromDiscord | <ShalokShalom> Yeah, and I heard this is the last edge case |
12:06:21 | FromDiscord | <Yardanico> it's not an edge case |
12:06:25 | FromDiscord | <Yardanico> it's explicitly allowed |
12:06:28 | FromDiscord | <ShalokShalom> ๐ |
12:06:33 | * | supakeen joined #nim |
12:06:40 | mipri | var in func has nothing to do with the purity of the function, but with the FPness of it |
12:07:10 | mipri | you can write an imperative loop that mutates an index across an array |
12:07:23 | mipri | but it doesn't have side effects. |
12:07:48 | FromDiscord | <ShalokShalom> Thats fine |
12:07:52 | FromDiscord | <ShalokShalom> puh |
12:07:58 | FromDiscord | <ShalokShalom> I just want it pure |
12:08:12 | FromDiscord | <ShalokShalom> So, fresh: primitive types are dangerous |
12:08:17 | FromDiscord | <ShalokShalom> (To me) |
12:08:17 | FromDiscord | <Rika> you can always not make it var anyway |
12:08:22 | FromDiscord | <ShalokShalom> I dont wanna mix that |
12:08:35 | FromDiscord | <Rika> > So, fresh: primitive types are dangerousโตhow so... |
12:08:36 | FromDiscord | <ShalokShalom> And I dont see the sense in a type system, that encourages us to do so |
12:08:41 | Yardanico | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
12:08:42 | FromDiscord | <Idefau> i am primitive |
12:09:07 | FromDiscord | <Yardanico> @ShalokShalom efficiency is the main Nim's goal |
12:09:16 | FromDiscord | <Yardanico> primitive types are the best for performant code |
12:09:24 | FromDiscord | <Rika> im really sorry but i think a lot of us have a different opinion from you |
12:09:25 | FromDiscord | <ShalokShalom> @Rika Since mixing types is dangerous whenever that is unintentional |
12:09:26 | FromDiscord | <Yardanico> not some boxed ints, but pure ints |
12:09:39 | FromDiscord | <ShalokShalom> How is mixing two completely unrelated numbers senseful? |
12:09:41 | FromDiscord | <Yardanico> @ShalokShalom the compiler just won't compile if you're "mixing types" when you can't do that |
12:09:46 | FromDiscord | <ShalokShalom> That counters the sense of types |
12:09:47 | FromDiscord | <Yardanico> @ShalokShalom they're both numbers |
12:10:00 | narimiran | end of 2020 and you guys still feed trolls? c'mon |
12:10:09 | FromDiscord | <Rika> i dont think he's a troll |
12:10:14 | FromDiscord | <Idefau> i am troll food |
12:10:17 | FromDiscord | <Rika> just someone with a massive difference in opinion |
12:10:19 | FromDiscord | <ShalokShalom> But age and the amount of money on my bank account is supposed to be mixed? |
12:10:20 | mipri | I think he is, but don't worry about it. |
12:10:29 | FromDiscord | <Yardanico> @ShalokShalom you can use distinct types for this |
12:10:33 | FromDiscord | <Rika> you can do it |
12:10:35 | FromDiscord | <Rika> just explicitly |
12:10:36 | FromDiscord | <Yardanico> but you don't want to use them for EVERYTHING |
12:10:43 | FromDiscord | <Rika> also can always do it with a macro |
12:10:45 | FromDiscord | <Rika> but yeah |
12:10:52 | FromDiscord | <Rika> its not a great idea to do it for everything |
12:10:56 | FromDiscord | <ShalokShalom> Why is it not helpful? |
12:10:59 | FromDiscord | <Rika> there should be a limit to it |
12:11:12 | FromDiscord | <Idefau> make a DSL that is entirely functional |
12:11:17 | FromDiscord | <Idefau> somehow |
12:11:19 | FromDiscord | <Idefau> B) |
12:11:21 | FromDiscord | <ShalokShalom> Isnt that like saying I dont want static types always and dynamic ones are a good default? |
12:11:25 | FromDiscord | <Rika> i have to go, i really dont want to get stressed over a conversation again, sorry again |
12:11:34 | mipri | "oh you're adding apples and oranges there. it doesn't make sense." -> "ok fine, I am now adding apples.fruit and oranges.fruit, and getting a fruit. Now it makes sense." the end result is a lot of noise that makes it easy for actual, serious bugs to slip through because the code is physically harder to follow. |
12:11:35 | FromDiscord | <Yardanico> yeah me too :P |
12:11:36 | FromDiscord | <Clyybber> @ShalokShalom sup, whats the question? |
12:11:42 | FromDiscord | <ShalokShalom> Hi |
12:12:27 | FromDiscord | <ShalokShalom> So, I am not a troll |
12:12:50 | FromDiscord | <ShalokShalom> I am just interested into what I think makes sense and strict type systems are that, as an example |
12:12:57 | FromDiscord | <Yardanico> but your phrasing is very very very hard to understand for other people |
12:13:00 | FromDiscord | <Yardanico> and your arguments as well |
12:13:04 | FromDiscord | <ShalokShalom> I have the feeling primitive types counter that idea. |
12:13:13 | FromDiscord | <Idefau> same |
12:13:18 | FromDiscord | <ShalokShalom> Yeah, probably because I dont have the experience |
12:13:21 | FromDiscord | <ShalokShalom> Not on purpose |
12:13:29 | FromDiscord | <Yardanico> @ShalokShalom when needed, you can use "distinct int" |
12:13:38 | FromDiscord | <Yardanico> but in most cases "int" is just enough |
12:14:00 | FromDiscord | <ShalokShalom> But isnt it that in large code bases, its easy to mix types unintentionally |
12:14:03 | mipri | or you can lean on range types, to be more like Ada |
12:14:13 | FromDiscord | <ShalokShalom> And isnt this, why we have compile time type checking |
12:14:18 | FromDiscord | <Yardanico> @ShalokShalom you can't mix int with a distinct int |
12:14:23 | FromDiscord | <ShalokShalom> @mipri Range types? |
12:14:32 | FromDiscord | <Yardanico> yes, range types |
12:14:35 | FromDiscord | <Yardanico> the manual exists :) |
12:14:44 | FromDiscord | <ShalokShalom> @Yardanico Yeah, but why cant I use distinctive types by default? |
12:14:47 | FromDiscord | <Yardanico> https://nim-lang.org/docs/manual.html#types-subrange-types |
12:14:58 | FromDiscord | <ShalokShalom> I thought that is a concept |
12:14:59 | FromDiscord | <Clyybber> @ShalokShalom distinct types by default don't make sense |
12:15:03 | narimiran | use them by default, who's stopping you? :D |
12:15:11 | narimiran | (in your code, that is) |
12:15:18 | FromDiscord | <ShalokShalom> Not an actual implementation |
12:15:24 | FromDiscord | <Clyybber> I know what you are getting at, since last time you wanted each variable to have its own type |
12:15:30 | narimiran | lol |
12:15:36 | FromDiscord | <Yardanico> and previously he wanted to not have types at all :) |
12:15:38 | FromDiscord | <Idefau> lol you pinged someone else |
12:15:45 | FromDiscord | <ShalokShalom> @mipri I actually love that ๐ |
12:15:49 | Yardanico | @idf: old |
12:15:53 | Yardanico | idk why it pinged in this case though |
12:15:55 | FromDiscord | <ShalokShalom> It shows exactly, what it is doing. |
12:15:56 | Yardanico | the new rule is pretty clear |
12:16:00 | Yardanico | test yardanico |
12:16:00 | FromDiscord | <ShalokShalom> I like that |
12:16:01 | mipri | !eval var x: range[0..5]; echo (x.typeof.low, x.typeof.high) |
12:16:04 | NimBot | (0, 5) |
12:16:28 | FromDiscord | <Clyybber> @ShalokShalom IMO you are confusing a type system with a symbol system |
12:16:45 | FromDiscord | <Clyybber> Computation is mixing different symbols in most languages |
12:16:50 | FromDiscord | <ShalokShalom> @Yardanico No, I wanted proper type inference that covers all the code. |
12:17:18 | FromDiscord | <Yardanico> yes, and "type annotations are bad" |
12:17:18 | FromDiscord | <Clyybber> take a look at crystal, it has global type inference |
12:17:18 | FromDiscord | <ShalokShalom> @YOU@narimiran I dont know how |
12:17:31 | narimiran | start by reading the manual and tutorials |
12:17:32 | FromDiscord | <Yardanico> maybe learn Nim a bit first? :) |
12:17:35 | FromDiscord | <Clyybber> but no language that I know of has implemented "each symbol has its own type" |
12:17:43 | narimiran | and leave worries for later |
12:17:47 | FromDiscord | <ShalokShalom> @Yardanico Thanks. I am more looking for something else, I think |
12:17:48 | FromDiscord | <Clyybber> because its a unneccessary sophistication |
12:17:52 | mipri | type annotations in function signatures help a lot to prevent errors, meanwhile. |
12:18:49 | FromDiscord | <ShalokShalom> @Clyybber I would then default to specify those, which I like to have a different type |
12:18:59 | FromDiscord | <ShalokShalom> So its just a default. |
12:19:10 | FromDiscord | <Clyybber> So var a has type A |
12:19:13 | FromDiscord | <Clyybber> and var b has type B |
12:19:15 | narimiran | maybe you need some other language.... |
12:19:33 | FromDiscord | <Clyybber> whats the purpose |
12:19:40 | mipri | narimiran: not many languages allow this though: https://play.nim-lang.org/#ix=2Chp |
12:19:45 | FromDiscord | <ShalokShalom> @Clyybber No, they dont have a complete type inference either. And they also lack indendation based block building and Godot bindings, as well as compiling to C |
12:20:05 | narimiran | mipri: yeah, but nothing is good enough for him |
12:20:11 | FromDiscord | <ShalokShalom> @Yardanico I just prefer to read them in my IDE and F# does that successfully |
12:20:12 | narimiran | *them |
12:20:18 | FromDiscord | <Clyybber> @ShalokShalom there is no complete type inference |
12:20:28 | FromDiscord | <ShalokShalom> Tons of researchers and mathematics use it that way. |
12:20:32 | FromDiscord | <Clyybber> at some point you have to tell the programm a type |
12:20:39 | FromDiscord | <ShalokShalom> Type annotations are entirely optional |
12:20:42 | FromDiscord | <Yardanico> @ShalokShalom no |
12:20:49 | FromDiscord | <Yardanico> somewhere in the stdlib types are actually there |
12:21:04 | FromDiscord | <Yardanico> but for user code it might be "optional" because the compiler can figure it out based on other libraries you're using |
12:21:07 | FromDiscord | <Yardanico> which HAVE type annotations |
12:21:43 | narimiran | yeah yeah, type annotations are noise, but stuff like "System.IO.File.ReadAllText" is not |
12:21:43 | mipri | and if F# is like OCaml in this respect, modules still have types, and module definitions get pretty detailed |
12:21:46 | FromDiscord | <Idefau> see all these problems come from the very definition of a variableโตjust use stacks for everthing |
12:21:53 | FromDiscord | <Idefau> (edit) "stacks" => "the stack" |
12:22:02 | FromDiscord | <ShalokShalom> @Clyybber FSharp makes type annotations completely optional and so does any other ML and Haskell like language, most of them just choose to do them as a convention. |
12:22:02 | narimiran | "Array.filter" is not noise |
12:22:27 | narimiran | "Seq.sort >> System.String.Concat" is not noise |
12:22:27 | FromDiscord | <Yardanico> @ShalokShalom but it knows that number is a number |
12:22:28 | FromDiscord | <Yardanico> and not a string |
12:22:32 | FromDiscord | <Clyybber> @ShalokShalom Because you are providing literals, which the types trickle down from |
12:22:37 | FromDiscord | <ShalokShalom> @mipri Modules are at least not higher order in F#, idk how else they are different |
12:23:09 | FromDiscord | <Clyybber> but I'm not sure what your proposal is |
12:23:26 | mipri | not as a 'convention', but as a practical consideration. If there were no explicit types at all anywhere in the language, then a newly introduced bug that you just typed could result in an error message, not in your code, but deep in some core stdlib library |
12:23:33 | FromDiscord | <ShalokShalom> @Yardanico No. You really dont know what a HM type system is. |
12:23:40 | FromDiscord | <Yardanico> I do |
12:23:46 | FromDiscord | <Yardanico> and it still some kind of a source |
12:23:52 | narimiran | end of 2020 and you guys still feed trolls? c'mon |
12:24:07 | mipri | 2020 isn't over yet. This is at least not as hellish as the outdoors. |
12:24:11 | FromDiscord | <Yardanico> yeah sorry i'll stop |
12:24:45 | FromDiscord | <Idefau> when 2020 ends i will restart it for my own pleasure |
12:24:51 | mipri | I just hope I won't be saying in a few years, "don't worry, the decade will be over one day" |
12:25:01 | mipri | let's keep this shit fully contained in 2020 |
12:25:04 | FromDiscord | <ShalokShalom> @Clyybber I dont propose anything |
12:25:12 | narimiran | this decade ends in ~2 months ;) |
12:25:24 | mipri | what, are you counting from 1? heretic |
12:25:31 | FromDiscord | <Idefau> why yes the month 0 |
12:25:36 | narimiran | yes, discussing about year 0 and year 1 is more productive than the stuff above |
12:25:53 | FromDiscord | <Clyybber> !echo 0x2b or not 0x2b |
12:25:55 | narimiran | mipri: so, you're still in 2019? |
12:26:10 | FromDiscord | <Clyybber> !eval echo 0x2b or not 0x2b |
12:26:12 | NimBot | -1 |
12:26:17 | FromDiscord | <Clyybber> thanks idf |
12:26:20 | FromDiscord | <Idefau> np |
12:26:39 | FromDiscord | <Idefau> !eval echo 0x2be or not 0x2be |
12:26:41 | mipri | hmm ... there was some language that recently removed the ability to change which index arrays start at ... |
12:26:41 | NimBot | -1 |
12:27:24 | FromDiscord | <ShalokShalom> sent a long message, see http://ix.io/2Chy |
12:27:35 | FromDiscord | <ShalokShalom> These two ints are not meant to be mixed. |
12:27:37 | FromDiscord | <Idefau> const birthday: DateInt |
12:27:39 | FromDiscord | <Clyybber> you give them different types |
12:27:41 | FromDiscord | <Yardanico> @ShalokShalom we answered |
12:27:43 | FromDiscord | <Yardanico> use distinct ints |
12:27:47 | FromDiscord | <Yardanico> what else do you want? :) |
12:27:53 | FromDiscord | <Clyybber> type Date = int |
12:27:53 | narimiran | your attention. |
12:27:55 | FromDiscord | <ShalokShalom> Use them by default |
12:28:01 | FromDiscord | <Clyybber> type Money = int |
12:28:05 | FromDiscord | <Yardanico> we don't think that it's good to use them by default |
12:28:06 | FromDiscord | <ShalokShalom> Thats all |
12:28:08 | narimiran | use them by default, who's stopping you? :D |
12:28:09 | FromDiscord | <Yardanico> that's all |
12:28:19 | FromDiscord | <Clyybber> @ShalokShalom No, you can't infer distinct types |
12:28:20 | FromDiscord | <ShalokShalom> @Yardanico And I did not asked, if you think it is a good idea |
12:28:21 | PMunch | But how would Nim know which types to give them? |
12:28:23 | mipri | ah it was Perl. Perl no longer allows any first index to arrays but zero. |
12:28:23 | FromDiscord | <ShalokShalom> I asked, how to do that. |
12:28:26 | FromDiscord | <Idefau> but tbh if you dont store dates in unix time why even make it just int |
12:28:30 | mipri | https://perldoc.perl.org/5.30.0/perldelta#Assigning-non-zero-to-$%5B-is-fatal |
12:28:33 | FromDiscord | <Yardanico> @ShalokShalom you can't. |
12:28:36 | FromDiscord | <Yardanico> that's the answer |
12:28:40 | FromDiscord | <Yardanico> nim stdlib DOESN'T use them in most cases |
12:28:44 | FromDiscord | <Yardanico> it uses plain simple ints |
12:28:44 | FromDiscord | <Clyybber> @ShalokShalom In the end you still want each variable to have by default its own type |
12:28:45 | FromDiscord | <ShalokShalom> @PMunch Always the name, so birthday and account_balance in this case |
12:28:54 | PMunch | Then use the macro I sent you |
12:28:55 | FromDiscord | <Clyybber> No language does that, thats why you are viewed as trollish by some |
12:29:01 | FromDiscord | <ShalokShalom> @Yardanico Fine, that too quite a long time |
12:29:09 | FromDiscord | <Clyybber> Its still possible in Nim tho |
12:29:15 | FromDiscord | <ShalokShalom> @PMunch I will try, thanks |
12:29:28 | narimiran | show us the example in F# where you can do those and they are different type without any extra annotations |
12:29:40 | FromDiscord | <ShalokShalom> @Clyybber No language did tons of things that are common in Nim. |
12:29:46 | FromDiscord | <ShalokShalom> That alone is no argument |
12:29:57 | FromDiscord | <Idefau> sent a code paste, see https://play.nim-lang.org/#ix=2Chz |
12:29:58 | FromDiscord | <Idefau> i am a genius |
12:29:59 | FromDiscord | <ShalokShalom> @narimiran I did not say, that F# can do that |
12:30:01 | mipri | once you get used to saying snowflakevar.int, snowflakevar.int all the time as you use these variables, you'll end up adding money to time anyway, after explicitly .int'ing them, and you'll get the same bug you would've got with unsafe primitive types. Your code will just be harder to read. |
12:30:58 | FromDiscord | <ShalokShalom> @Idefau This is interesting and it confused me a bit. Does this happen due to the PascalCase or how? |
12:31:24 | mipri | there's nothing special with the types in that code. |
12:31:36 | FromDiscord | <Idefau> wrong its a secret feature |
12:31:53 | FromDiscord | <ShalokShalom> @Clyybber But then I do have to specify every one of them. I want exactly that, just infered. :) |
12:32:03 | FromDiscord | <Clyybber> yes but it doesn't make sense |
12:32:09 | FromDiscord | <Clyybber> it gives each variable its own type |
12:32:28 | FromDiscord | <ShalokShalom> Yes, by default |
12:32:31 | FromDiscord | <ShalokShalom> I like that |
12:32:32 | FromDiscord | <Clyybber> read mipri's argument |
12:32:38 | FromDiscord | <Clyybber> as to why it doesn't make sense |
12:32:39 | FromDiscord | <ShalokShalom> I can still choose to use other types |
12:32:44 | FromDiscord | <Clyybber> or idf04's why it doesn't |
12:32:51 | FromDiscord | <Clyybber> @ShalokShalom well, you can do that in nim |
12:32:56 | FromDiscord | <Clyybber> with a macro |
12:33:15 | FromDiscord | <Clyybber> but you have to create that yourself, nobody is interested in this "feature" :P |
12:33:34 | FromDiscord | <ShalokShalom> @mipri And I did already ask half an hour ago, why I need to specify it like that and primitives apparently do not? |
12:33:47 | Yardanico | because "int" is just "int" |
12:33:49 | Yardanico | two ints are of same type |
12:34:05 | Yardanico | but "type Money = distinct int" and "type Time = distinct int" are of different types |
12:34:26 | FromDiscord | <Clyybber> how do you add a type A and a type B |
12:34:33 | FromDiscord | <Clyybber> you convert them to int and add them |
12:34:51 | FromDiscord | <ShalokShalom> So, I fully accept that, but this reads to me like dynamic typing, to an extend. |
12:35:04 | FromDiscord | <Clyybber> its not |
12:35:05 | FromDiscord | <ShalokShalom> To use int all over the place, to make mixing easier |
12:35:09 | FromDiscord | <ShalokShalom> I know |
12:35:14 | FromDiscord | <Clyybber> like not at all |
12:35:15 | FromDiscord | <ShalokShalom> Its just the same motivation |
12:35:18 | FromDiscord | <Clyybber> no its not. |
12:35:35 | FromDiscord | <Clyybber> What you are proposing is mixing the type system into the symbolic system |
12:35:47 | FromDiscord | <Clyybber> which provides nothing but additional sophistication |
12:35:51 | FromDiscord | <ShalokShalom> @Clyybber https://play.nim-lang.org/#ix=2Chr |
12:36:04 | FromDiscord | <ShalokShalom> It got already created for me, thanks. |
12:36:10 | FromDiscord | <Clyybber> nice :D |
12:36:38 | ForumUpdaterBot | New thread by JPLRouge: Help use mq posix , see https://forum.nim-lang.org/t/7001 |
12:37:15 | FromDiscord | <ShalokShalom> @Clyybber Well, I accept that this is not good. But I don't see the difference between my idea and specifying distinctive types |
12:37:27 | FromDiscord | <ShalokShalom> Its just the default behavior that is turned upside down. |
12:37:41 | FromDiscord | <Clyybber> yes |
12:37:49 | FromDiscord | <ShalokShalom> So either I specify the types when I want them different or I do the opposite |
12:38:02 | FromDiscord | <ShalokShalom> And specify them, when I like them the same. |
12:38:03 | FromDiscord | <Clyybber> but this will never be an option because it doesn't make sense |
12:38:08 | FromDiscord | <Clyybber> feel free to use that macro tho |
12:38:17 | FromDiscord | <ShalokShalom> So I dont see, why I am such an evil person |
12:38:23 | FromDiscord | <Clyybber> nobody said that? |
12:38:33 | FromDiscord | <Idefau> i am eating banana |
12:38:38 | FromDiscord | <ShalokShalom> I got accused of trolling. |
12:38:43 | FromDiscord | <ShalokShalom> Two times. |
12:39:05 | FromDiscord | <Clyybber> people have opinions and different fuse lengths :) |
12:39:27 | FromDiscord | <Clyybber> your idea is very alien because it makes no sense to almost everyone :D |
12:39:40 | FromDiscord | <Clyybber> thats why its written off as trolling naturally |
12:39:57 | FromDiscord | <Clyybber> but hey, you got a solution now, go use it :) |
12:40:14 | FromDiscord | <ShalokShalom> So, I like to change this behavior and switch the default. And you mean that this makes no sense. Now, I assume you say that, because you mean that the current behavior favors, what is used more often, yes? |
12:40:35 | FromDiscord | <Clyybber> it favors what makes sense when coding |
12:40:50 | FromDiscord | <ShalokShalom> @Clyybber Trolling is something totally different and you all are very aware about that |
12:40:52 | narimiran | it favors real programmers, not trolls |
12:41:00 | FromDiscord | <Yardanico> @ShalokShalom not really |
12:41:08 | FromDiscord | <Clyybber> because types are not intended to be oneshots usually |
12:41:08 | FromDiscord | <Yardanico> you just haven't seen other trolls in this channel before :) |
12:41:21 | FromDiscord | <Clyybber> but with your default types are by default oneshots |
12:41:27 | FromDiscord | <haxscramper> @ShalokShalom try Idris and dependent type systems, might be interesting for you. Hypothetically |
12:41:32 | FromDiscord | <ShalokShalom> https://en.m.wikipedia.org/wiki/Internet_troll |
12:41:36 | FromDiscord | <Yardanico> yes |
12:41:50 | PMunch | TBH I kinda like his idea |
12:41:50 | FromDiscord | <Yardanico> "Application of the term troll is subjective." |
12:41:51 | narimiran | why do i have to manually have to type "troll", why it can't be inferred automatically? |
12:42:16 | FromDiscord | <ShalokShalom> @haxscramper Yeah, I thought about it. Scala 3 also has dependent types but I look for a language that has actively maintained bindings to Godot. |
12:42:20 | FromDiscord | <ShalokShalom> Thanks though |
12:42:28 | mipri | on the one hand, the compiler should infer all trolls for me automatically, but on the other hand, every single variable should have its own incompatible type of troll and any conversion needs to be explicit |
12:42:46 | FromDiscord | <Yardanico> @ShalokShalom btw, do you know that your idea wouldn't make sense with Godot bindings? |
12:42:57 | narimiran | *anything |
12:43:21 | FromDiscord | <ShalokShalom> @Yardanico How you mean? |
12:43:32 | FromDiscord | <Yardanico> you'll have to do all the ".int" conversions again |
12:43:38 | FromDiscord | <Yardanico> because godot bindings aren't written in your style |
12:43:44 | FromDiscord | <Yardanico> they use normal primitive types |
12:43:56 | FromDiscord | <ShalokShalom> Yes, I understand that. |
12:44:29 | FromDiscord | <ShalokShalom> Does this change, when there is simple a type declaration over it? |
12:44:40 | FromDiscord | <ShalokShalom> As with the type keyword |
12:44:42 | FromDiscord | <Idefau> just cast everything when you are bored of its type |
12:44:48 | FromDiscord | <Idefau> thats what i do, keeps the code spicy |
12:44:52 | narimiran | :D |
12:45:02 | FromDiscord | <ShalokShalom> So far as I understand does that just overlay the actual type |
12:45:23 | FromDiscord | <Yardanico> yes, and makes it impossible to mix a distinct type with the base type without explicit conversions |
12:45:52 | narimiran | if only we could have a possibility to somehow write down some code and see if and how it works |
12:46:03 | Yardanico | who needs to write code, we can just talk about it instead |
12:46:23 | FromDiscord | <Idefau> !eval echo cast[float64]("hello world") |
12:46:25 | NimBot | 6.924719417612215e-310 |
12:46:30 | narimiran | sometimes even just talking has lots of bugs |
12:46:31 | FromDiscord | <Idefau> see, spicy |
12:46:46 | PMunch | -_- |
12:47:14 | FromDiscord | <ShalokShalom> @Yardanico But this counts only, when I specifically interact with the Godot API, so I can write the whole entire logic without conversions, so long as I dont interact with Godot code, yes? |
12:47:25 | Yardanico | yes if you actually write code, then yes |
12:47:36 | Yardanico | but maybe when you'll start using your idea in code you'll see why it's not always the best |
12:47:52 | FromDiscord | <lqdev> i wouldn't say you're a troll, you're just very vocal about your opinions :p |
12:47:53 | Yardanico | !eval import random; randomize(); let true = bool(random(0 .. 1)); echo true |
12:47:57 | NimBot | Compile failed: /usercode/in.nim(1, 45) Error: undeclared identifier: 'random' |
12:48:03 | Yardanico | !eval import random; randomize(); let true = bool(rand(0 .. 1)); echo true |
12:48:07 | NimBot | false |
12:48:10 | Yardanico | nice |
12:48:11 | FromDiscord | <ShalokShalom> @narimiran Have this feeling since an hour |
12:48:20 | FromDiscord | <ShalokShalom> Thanks a lot you all. |
12:48:24 | FromDiscord | <Idefau> no problem |
12:48:25 | FromDiscord | <Idefau> anytime |
12:49:01 | FromDiscord | <haxscramper> @ShalokShalom what is your real-world use case? Not hypothetical musing about "40 distinct atrihnd", that might or might not be related to anything. What non-imaginary problem are you trying to solve? IDK, it might be useful to ask questions like that to yourself |
12:49:13 | FromDiscord | <ShalokShalom> @haxscramper There is no chance for such types in Nim, yes? |
12:49:29 | Yardanico | you. can. make. them. yourself |
12:49:34 | Yardanico | in nim |
12:49:40 | FromDiscord | <haxscramper> There is work on "not nil", but they is different |
12:49:44 | FromDiscord | <Idefau> or just use the trick i told you |
12:49:56 | FromDiscord | <haxscramper> E.g. dataflow-dependent types |
12:50:21 | FromDiscord | <haxscramper> I don't exactly know correct term for this kind of thing, but it is more closely related to static analysis |
12:50:33 | FromDiscord | <ShalokShalom> @haxscramper I see the type system and its purpose served by it, its simply a disciple to prevent mixing types without intention to do so |
12:50:36 | FromDiscord | <haxscramper> Of data flow in code, not just types |
12:50:42 | FromDiscord | <ShalokShalom> Same cause for types in the first place |
12:51:02 | mipri | a+b is intention to add a and b. a.int+b.int is also intention to add a and b. |
12:51:36 | FromDiscord | <ShalokShalom> @Idefau Oh, thanks for reminding me. I did ask, if this is requiring me to use capital letters, as you did? |
12:51:40 | FromDiscord | <Idefau> yes |
12:51:41 | Yardanico | mipri: but what if a doesn't like to be added! |
12:51:45 | mipri | by the code itself, neither the compiler nor a reader who doesn't understand more of the program can say whether the code aligns with some grander intention, like to not mix time and bank accounts |
12:51:54 | Yardanico | VariablesOpinionsMatter |
12:52:12 | narimiran | Yardanico: `proc areYouWilling(a: a): aBool` |
12:52:22 | FromDiscord | <ShalokShalom> @Idefau Can you show me where this is described in the manual? Or how is it named, at least? |
12:52:30 | FromDiscord | <Idefau> its not described in the manual its a secret feature |
12:52:35 | * | mmohammadi9812 quit (Quit: Quit) |
12:52:43 | mipri | the ways to add this ability, to check intentions beyond whether your code merely type checks, are tests (famously) and theorem proving (developing) |
12:52:48 | * | mmohammadi9812 joined #nim |
12:52:51 | FromDiscord | <haxscramper> @ShalokShalom the question is just where "prevent mixing types" start to hinder productivity and for the sake of solving non-existent issues. Most languages don't have any kind of "distinct" types, except for wrapping everything in classes. Nim has distinct, but this is opt-in |
12:53:20 | FromDiscord | <haxscramper> But if you make it opt-out it just took annoying for 99% of the code |
12:53:21 | FromDiscord | <ShalokShalom> Yes, I just try to figure this out for myself |
12:53:24 | mipri | also, less automatically: documentation, comments, an easy to understand program layout |
12:53:32 | FromDiscord | <ShalokShalom> @haxscramper Ok, I understand |
12:53:39 | FromDiscord | <Clyybber> @ShalokShalom hes joking, its not a secret feature, you can use any capitalisation you want |
12:53:50 | mipri | there is no degree of type shit that you can pull that will make some variant of a+b "self checking". |
12:53:51 | FromDiscord | <ShalokShalom> @Clyybber Yeah, I guessed. |
12:53:55 | FromDiscord | <Clyybber> :D |
12:53:58 | narimiran | ...but be sure to use something that nobody else uses |
12:54:00 | FromDiscord | <ShalokShalom> But then its not working the way he described it |
12:54:44 | FromDiscord | <Idefau> !eval const StringHello="Hello World"; echo StringHello.type |
12:54:46 | NimBot | string |
12:54:50 | FromDiscord | <Idefau> see? |
12:54:58 | FromDiscord | <ShalokShalom> @mipri But could we not say the same about static types in general then?โตโตCould we not replace them with all those things? |
12:55:01 | narimiran | tl;dr of last hour or so here: "can i do this?" "yes", "how?" "like this", "but i can't do it" "you can", "can you show me how?" "like this", "but i can't use it" "you can" |
12:55:42 | FromDiscord | <ShalokShalom> @haxscramper where is the difference between 'destinct' and 'type'? |
12:55:47 | narimiran | https://nim-lang.github.io/Nim/manual.html#types-distinct-type |
12:55:56 | narimiran | even has examples! |
12:55:58 | FromDiscord | <Idefau> the difference is that `destinct` doesn't exist and `type` does |
12:56:05 | mipri | sure yeah, you could all type checking and just have a NASA-tier spec. NASA put Forth into space after all. |
12:56:36 | narimiran | but it has two currencies, not one currency and one birthday, so it must not be the thing asked for! |
12:56:39 | mipri | I'm not saying types aren't useful, just that you're wanting more from them than they can provide on their own. |
12:56:42 | FromDiscord | <ShalokShalom> @mipri I love domain modeling made functional, that is a technique that Scott Wlaschkin developmed and that uses pipes and option types, to do that. |
12:56:50 | FromDiscord | <ShalokShalom> Types in Nim are nominal, yeah? |
12:56:55 | FromDiscord | <ShalokShalom> Not structured? |
12:57:00 | FromDiscord | <Clyybber> theres concepts |
12:57:04 | FromDiscord | <Clyybber> but objects are nominal |
12:57:23 | FromDiscord | <ShalokShalom> Concepts? |
12:57:27 | narimiran | nooooooooo |
12:57:47 | FromDiscord | <Idefau> the concept of a concept is well defined in the concept of a manual of a conceptual real world programming language |
12:57:55 | FromDiscord | <Clyybber> @ShalokShalom https://nim-lang.github.io/Nim/manual_experimental.html#concepts |
12:58:07 | Yardanico | narimiran: :(((((((((((((9 |
12:58:07 | FromDiscord | <ShalokShalom> @narimiran thanks a lot |
12:58:44 | FromDiscord | <lqdev> you know what? i'd just suggest that you stop complaining and asking about what nim is and just start programming in it. |
12:59:02 | FromDiscord | <lqdev> read the manual, understand language concepts |
12:59:19 | FromDiscord | <lqdev> and THEN share your opinions :) |
13:01:07 | * | abm joined #nim |
13:01:15 | * | abm quit (Remote host closed the connection) |
13:03:45 | FromDiscord | <ShalokShalom> I ask first, since it helps me to understand if I am interested to invest so many hours into it |
13:05:25 | FromDiscord | <haxscramper> I highly recommend |
13:05:29 | FromDiscord | <ShalokShalom> I think especially the type annotations everywhere make the otherwise very reasonable and readable syntax very confusing |
13:05:31 | FromDiscord | <haxscramper> ~manual |
13:05:32 | disbot | manual: 11the Nim Manual is https://nim-lang.org/docs/manual.html |
13:05:32 | disbot | manual: 11just good to Ctrl+F in cases like this -- haxscramper |
13:05:41 | FromDiscord | <haxscramper> Top to bottom, about 2-3 hours |
13:05:44 | FromDiscord | <ShalokShalom> I already looked through that multiple times. |
13:06:06 | FromDiscord | <ShalokShalom> And its well written, definitely the most helpful part of the documentation to me |
13:07:04 | FromDiscord | <haxscramper> Then, next question: what problem are you trying to solve with nim? Sometimes specific or just learning imperative programming in general? |
13:07:38 | FromDiscord | <haxscramper> If it the latter just do exercim or something, no amount of words can give good feeling for the language |
13:07:44 | FromDiscord | <haxscramper> Without writing code |
13:08:21 | FromDiscord | <ShalokShalom> Godot |
13:10:21 | FromDiscord | <Clyybber> btw godot uses variants a lot, essentially dynamic typing |
13:12:37 | FromDiscord | <ShalokShalom> @mipri I think this helps me a lot. Now I can see that I was constantly on the search to the mentioned domain modeling, that actually does that for me. So since pipes and option types are available in Nim, is this possible for me here. I am still annoyed by that type annotations ๐ |
13:12:55 | FromDiscord | <ShalokShalom> But it offers me so much more, like the macros and pure func. |
13:13:03 | FromDiscord | <ShalokShalom> Thats why I am annoying ๐ |
13:14:13 | FromDiscord | <ShalokShalom> @Clyybber Godot gets static typing truly in 4.0 and if you like it purely for the type checking (and not for the performance increase) is it already ready for that. It has also constants. |
13:14:42 | FromDiscord | <ShalokShalom> @Clyybber How you mean? |
13:15:28 | FromDiscord | <Clyybber> its C++/C api uses variants |
13:15:37 | FromDiscord | <ShalokShalom> Idk what that is. |
13:15:49 | FromDiscord | <Clyybber> I doubt they are gonna change that just because GDScript got static typing |
13:15:55 | FromDiscord | <ShalokShalom> Yes, yes |
13:16:00 | FromDiscord | <ShalokShalom> I misread that first. |
13:16:06 | FromDiscord | <ShalokShalom> Sorry |
13:16:20 | FromDiscord | <Clyybber> @ShalokShalom think of it as every object having an enum that indicates what it is |
13:16:33 | FromDiscord | <Clyybber> so if it is a Camera |
13:16:36 | FromDiscord | <Clyybber> or a Collider |
13:16:54 | FromDiscord | <Clyybber> and that information is not available at compile time |
13:24:32 | * | narimiran quit (Ping timeout: 260 seconds) |
13:30:45 | ForumUpdaterBot | New thread by Vitreo12: Printing compilation string with color highlighting, see https://forum.nim-lang.org/t/7002 |
13:40:16 | * | lbart quit (Ping timeout: 256 seconds) |
13:48:57 | planetis[m] | narimiran: Could you please add hacktoberfest tag to nim-lang/fusion? thanks |
14:03:42 | blackbeard420 | when calling a nim library from c is simply calling 'NimMain' before the proc enough? |
14:04:10 | PMunch | IIRC that should be enough yeah |
14:04:25 | blackbeard420 | thanks. it does work, i was just curious if i was missing anything |
14:05:45 | PMunch | And IIRC that is only required to initialise global variables |
14:05:51 | PMunch | And perhaps initialise the GC |
14:06:44 | PMunch | Hmm, doesn't seem like it |
14:07:07 | PMunch | I don't call NimMain anywhere in my Nim DLL (or from the importing C code) |
14:07:24 | PMunch | Oh wait, it might be run by some DLL hooks or something |
14:13:06 | * | voidpi quit (Quit: leaving) |
14:14:41 | FromDiscord | <Yardanico> yes |
14:14:56 | FromDiscord | <Yardanico> if you do --app:gui, nim will do the main stuff on dll attach |
14:16:23 | PMunch | What is "std" supposed to be? |
14:16:52 | PMunch | As in the folder lib/std |
14:18:27 | PMunch | Oops, gotta go |
14:18:28 | * | PMunch quit (Quit: leaving) |
14:28:46 | * | natrys quit (Ping timeout: 246 seconds) |
14:41:52 | * | natrys joined #nim |
14:48:49 | * | voidpi joined #nim |
15:38:04 | * | natrys quit (Ping timeout: 246 seconds) |
15:39:29 | FromDiscord | <Mimi_Sec> howdy all late to the nim game, is the windows module no longer a thing (saw the docs version was for 0.11.0)? was trying to import it for tinkering but no dice. |
15:40:42 | FromDiscord | <Mimi_Sec> Im aware of the winim library but was looking for good references for tinkering with windows apis |
15:40:57 | mipri | no, that was moved to nimble, oldwinapi |
15:41:09 | mipri | there's still winlean and registry modules for windows |
15:41:31 | mipri | https://github.com/nim-lang/oldwinapi |
15:41:37 | FromDiscord | <Mimi_Sec> yea i was messing around with winlean a bit, and was digging into the windows module when i noticed that its outdated |
15:41:51 | FromDiscord | <Mimi_Sec> oh sweet thanks |
15:51:05 | FromDiscord | <Yardanico> @Mimi_Sec you should also try out winim |
15:51:10 | FromDiscord | <Yardanico> it's generally better structured and stuff |
15:51:11 | FromDiscord | <Yardanico> !repo winim |
15:51:12 | disbot | https://github.com/khchen/winim -- 9winim: 11Nim's Windows API and COM Library 15 137โญ 10๐ด 7& 1 more... |
15:51:13 | * | hnOsmium0001 joined #nim |
15:51:18 | * | natrys joined #nim |
15:54:37 | FromGitter | <gogolxdong> Could `inc` be `proc inc*[T,O: Ordinal](x: var T, y:O = 1) {.magic: "Inc", noSideEffect.}` and etc. to make life easier |
15:54:54 | FromDiscord | <Yardanico> wdym? |
15:55:07 | FromDiscord | <Yardanico> ah, you mean the second arg |
15:55:19 | FromDiscord | <Yardanico> well then you can as well just use += :)_ |
15:56:23 | FromDiscord | <lqdev> `inc` does have a second arg tho |
15:56:31 | FromGitter | <gogolxdong> include += |
15:56:46 | FromDiscord | <Yardanico> @lqdev yes |
15:56:48 | FromDiscord | <Yardanico> but it's int |
15:56:52 | FromDiscord | <Yardanico> not the same type as the first arg |
15:56:54 | FromDiscord | <lqdev> ohh |
15:57:06 | FromDiscord | <lqdev> but that makes sense |
15:57:12 | FromDiscord | <Yardanico> at least that's how I understood @gogolxdong |
15:57:15 | FromDiscord | <Yardanico> @lqdev yeah IMO ti does |
15:57:15 | FromDiscord | <lqdev> why would you pass an enum there |
15:57:17 | FromDiscord | <Yardanico> (edit) "ti" => "it" |
15:57:26 | FromDiscord | <lqdev> you don't increment fruitApple by fruitBanana |
15:57:28 | FromDiscord | <lqdev> what does that even mean |
15:57:49 | FromGitter | <gogolxdong> `proc `+=`*T: SomeInteger (x: var T, y: T)` is for the same type |
15:59:20 | FromGitter | <gogolxdong> it makes code generated from c hard to work with. all I did is convert between cint, int32, uint64, int64 ... |
15:59:52 | mipri | https://play.nim-lang.org/#ix=2CiS |
16:00:23 | * | oculux quit (Ping timeout: 258 seconds) |
16:01:49 | FromGitter | <iffy> I have an Android app (Java) and am using JNI to call Nim functions. Java calls `initNim()` which calls `NimNain()` and `someThreadMakingCode()`. I'm encountering a crashing race condition when trying to create a thread in Nim. I'm using `--gc:orc`. |
16:02:31 | FromGitter | <iffy> JNI claims to be fine with native/C code starting its own threads, and indeed if the thread has been created before `initNim()` returns, everything works, but if Nim starts the thread after `initNim()` returns, the app crashes. |
16:03:16 | FromGitter | <iffy> Is there something special in the way Nim makes threads that is incompatible with standard system/pthread threads? |
16:05:42 | * | lbart joined #nim |
16:05:43 | * | lbart quit (Changing host) |
16:05:43 | * | lbart joined #nim |
16:08:08 | FromGitter | <gogolxdong> arithmetic operator conduct on only the same type |
16:09:56 | FromDiscord | <lqdev> import lenientops |
16:14:54 | FromGitter | <gogolxdong> the best part may be you jump to the definition of the object field on assignment everytime. |
16:27:21 | ForumUpdaterBot | New post on r/nim by dsrw: Enu 0.1 Demo. Open Source 3D live coding with Nim and Godot., see https://youtu.be/upg77dMBGDE |
16:31:12 | FromDiscord | <Idefau> enu is nice |
16:33:26 | * | NimBot joined #nim |
16:34:30 | FromDiscord | <Yardanico> wait |
16:34:31 | FromDiscord | <Yardanico> wrong link |
16:34:31 | FromDiscord | <Yardanico> lol |
16:34:37 | FromDiscord | <Yardanico> https://reddit.com/r/nim |
16:34:45 | FromDiscord | <Yardanico> https://www.reddit.com/r/nim/comments/jjqyqw/enu_01_demo_open_source_3d_live_coding_with_nim/ |
16:37:53 | * | xace_ quit (Ping timeout: 260 seconds) |
16:54:36 | * | xace joined #nim |
17:00:40 | * | natrys quit (Ping timeout: 246 seconds) |
17:00:42 | * | letto_ quit (Ping timeout: 256 seconds) |
17:08:21 | Prestige | that's pretty cool |
17:10:32 | * | narimiran joined #nim |
17:11:47 | * | natrys joined #nim |
17:13:09 | ForumUpdaterBot | New question by Deno: Where to program with NIM (linux)?, see https://stackoverflow.com/questions/64577974/where-to-program-with-nim-linux |
17:31:18 | FromDiscord | <Avatarfighter> What's good everyone |
17:43:02 | disruptek | who knows how native sets work in memory? |
17:44:34 | disruptek | ugh. |
17:44:44 | mipri | lib/system/sets.nim says they're array[0..4*2048-1, uint8] |
17:44:55 | mipri | !eval let x = {1,2,3}; echo x.sizeof |
17:44:57 | NimBot | 8192 |
17:46:29 | disruptek | i'm looking at bitsets. |
17:46:48 | disruptek | i need to encode this shit in the packed ast. |
17:46:59 | mipri | !eval let x = {1.char, 2.char, 3.char}; echo x.sizeof |
17:47:03 | NimBot | 32 |
17:47:08 | mipri | wrong anyway |
17:47:18 | FromDiscord | <Rika> wdym wrong? |
17:47:40 | * | tane joined #nim |
17:47:51 | disruptek | !eval echo {0..63}.sizeof |
17:47:53 | NimBot | 8192 |
17:48:34 | disruptek | !eval echo {0.int16 ..63}.sizeof |
17:48:35 | NimBot | Compile failed: /usercode/in.nim(1, 8) Error: attempting to call routine: 'int16' |
17:49:24 | disruptek | just gonna use a bitfield i guess. |
18:09:26 | * | BarrOff joined #nim |
18:12:23 | * | Kaivo quit (Ping timeout: 260 seconds) |
18:14:08 | * | letto_ joined #nim |
18:14:37 | * | Kaivo joined #nim |
18:17:57 | * | BarrOff quit (Quit: leaving) |
18:19:04 | * | letto_ quit (Ping timeout: 240 seconds) |
18:27:03 | * | waleee-cl joined #nim |
18:31:13 | FromGitter | <iffy> In my Java+JNI+Nim app, calling `asyncdispatch.drain()` is raising an error with the message "index 64 not in 0 .. 63". I'm guessing that comes from https://github.com/nim-lang/Nim/blob/a156484553d7fa9b3b174f8371159af81574f77c/lib/pure/asyncdispatch.nim#L1320-L1324 Any idea why keys is hard-coded to 64? Or does my code have a leak of some kind? |
18:44:59 | FromDiscord | <tinygiant> sent a code paste, see https://play.nim-lang.org/#ix=2CjW |
18:45:52 | FromDiscord | <tinygiant> (edit) "https://play.nim-lang.org/#ix=2CjW" => "https://play.nim-lang.org/#ix=2CjX" |
18:46:43 | FromDiscord | <tinygiant> Also tried peg captures, but couldn't always identify which capture was which when one or the other optional sections were missing. |
18:48:22 | FromDiscord | <tinygiant> (edit) "missing." => "missing, since the captured tokens could be any valid characters." |
18:54:55 | FromDiscord | <haxscramper> https://play.nim-lang.org/#ix=2Ck4 something like that |
18:55:43 | FromDiscord | <lqdev> what does this error mean? `Error: cannot instantiate: 'loadStaticProgram[Vertex]'; got 1 typeof(s) but expected 3` |
18:55:48 | FromDiscord | <haxscramper> As usual - assuming no cases like `@xxx:aaa["[[[bbb"]` etc. |
18:56:19 | FromDiscord | <haxscramper> @lqdev can you show whole procedure prototype? |
18:56:38 | FromDiscord | <lqdev> proc loadStaticProgram[T](window: Window, fragment, vertex: static string): Program[T] |
18:57:26 | FromDiscord | <lqdev> turning it into a template seems to have worked |
18:58:18 | FromDiscord | <haxscramper> This is probably a bug with static - I've seen similar case - https://play.nim-lang.org/#ix=2AjS , |
18:58:22 | solitudesf | pretty sure it can be fixed if you add the typedesc argument |
18:58:36 | FromDiscord | <haxscramper> Generic type + static parameter + explicitly specified type argument gives this error |
18:58:38 | FromDiscord | <tinygiant> @haxscramper Awesome, that worked perfectly. Don't know why yet as I never woldn't come up with that, but I'll dig into and figure out how it works. Thanks! |
19:17:55 | FromDiscord | <nikki> for the same type, does nim definitely generate the same C struct across translation units? |
19:18:18 | FromDiscord | <nikki> (edit) "for the same ... type," added "Nim" |
19:18:45 | FromDiscord | <nikki> asking mostly bc. i may use a C++ template fn that assigns ids to types (by storing it as a static local per instantiation) |
19:19:30 | FromDiscord | <nikki> https://github.com/skypjack/entt/blob/82946e2372d012971731ca09152576e4709af98b/src/entt/core/type_info.hpp#L65 |
19:19:31 | FromDiscord | <nikki> this |
19:27:15 | FromDiscord | <g5becks> sent a long message, see http://ix.io/2Ckh |
19:27:27 | FromDiscord | <g5becks> the nim jsffi module has a require proc |
19:27:40 | FromDiscord | <g5becks> but it returns a jsObject |
19:28:18 | FromDiscord | <g5becks> In javascript, the default export is often times a function |
19:28:52 | FromDiscord | <g5becks> So im not sure how this nim code |
19:28:53 | FromDiscord | <g5becks> import jsffiโตโตlet print = require("print") |
19:28:59 | FromGitter | <iffy> Why is my proc not GC safe? Maybe I'm not using locks right? https://play.nim-lang.org/#ix=2Cki Or more likely I'm misunderstanding something... |
19:29:12 | FromDiscord | <g5becks> actually would translate |
19:30:04 | FromDiscord | <lqdev> iffy: `string`s are GC'd |
19:31:20 | FromDiscord | <dom96> iffy: it's not enough to just guard a var, you need to make it into a threadvar |
19:31:45 | leorize | @g5becks check out https://github.com/alaviss/setup-nim/tree/ng/src/private |
19:32:20 | FromGitter | <iffy> If I mark it `{.threadvar.}` then won't each thread have its own value for the var? |
19:32:40 | FromDiscord | <lqdev> yeah |
19:32:56 | FromGitter | <iffy> What if I want to safely share a global between threads? |
19:33:12 | FromDiscord | <dom96> then you cannot use the GC, you need to use allocShared |
19:33:22 | leorize | or --gc:arc/orc |
19:33:31 | FromGitter | <iffy> (and this is a simplified case -- I'm actually sharing an object, not a string) |
19:33:35 | FromGitter | <iffy> I'm using --gc:orc |
19:33:49 | FromDiscord | <dom96> yeah, --gc:orc should really be made to work here |
19:33:56 | * | mmohammadi9812 quit (Read error: Connection reset by peer) |
19:34:06 | * | mmohammadi9812 joined #nim |
19:34:06 | FromGitter | <iffy> Search for/File an issue? |
19:34:25 | leorize | well the issue you will have here is still the gc |
19:34:52 | leorize | we have shared heap but no atomic refcounting, so it's not very safe |
19:35:04 | FromGitter | <iffy> I think I'm mixing up thread-safe and gc-safe in my head. They're different, right? |
19:35:13 | leorize | however since you have a lock, feel free to use `{.gcsafe.}` blocks to override the analysis |
19:35:42 | FromDiscord | <dom96> hmm, I'm not sure that's safe |
19:35:53 | FromDiscord | <brainproxy> sent a code paste, see https://play.nim-lang.org/#ix=2Ckj |
19:36:07 | FromDiscord | <brainproxy> (edit) "https://play.nim-lang.org/#ix=2Ckj" => "https://play.nim-lang.org/#ix=2Ckk" |
19:36:10 | FromDiscord | <dom96> the memory is still only allocated in one thread's heap |
19:36:31 | FromDiscord | <dom96> you cannot just access it from another thread |
19:36:47 | FromGitter | <iffy> Even with {.global.} on the var? |
19:36:55 | FromDiscord | <brainproxy> basically I'd like to translate `foo()` to `foo(nil)` but trying to do that I run into compiler errors |
19:37:02 | FromDiscord | <dom96> what does {.global.} do? |
19:37:15 | leorize | @dom96 arc/orc uses a global heap by default |
19:37:26 | leorize | shared* |
19:37:44 | FromDiscord | <dom96> leorize: if that's the case then gc safety analysis should be disabled for that gc |
19:38:10 | FromDiscord | <dom96> the fact that it's not means that either A) it doesn't use a global heap B) it's there in case you use a different gc |
19:38:12 | FromGitter | <iffy> Hmm... apparently {.global.} is only for *inside* procs: https://nim-lang.org/docs/manual.html#pragmas-global-pragma |
19:38:31 | leorize | @dom96: it's because we're not doing atomic refcounting |
19:39:03 | FromDiscord | <dom96> okay, well, what's the plan here? |
19:39:10 | FromDiscord | <dom96> Are we going to get atomic refcounting? |
19:39:11 | leorize | so you have two choices: make sure that there are no aliases to the variable, then employ a lock and override gcsafe analysis |
19:39:28 | leorize | or employ a channel-based system to move the reference between threads, which is now possible |
19:39:41 | leorize | the latter is being implemented, and Isolated[T] is the first step |
19:40:04 | FromDiscord | <dom96> if we're not then this should definitely be a reported issue, because we should take the `guard` into consideration |
19:40:11 | FromDiscord | <dom96> in the gc safety analysis |
19:44:33 | FromDiscord | <nikki> @brainproxy can you just call foo(bar) from foo()? |
19:45:47 | FromDiscord | <brainproxy> yes, but the special to use for calling foo(bar) from foo shouldn't be of MyType |
19:46:11 | FromDiscord | <nikki> maybe you just need a different impl foo(thing: OtherType) then? |
19:46:28 | FromDiscord | <nikki> or just some common internal code that both foo() and foo(bar) use |
19:46:57 | * | mmohammadi9812 quit (Read error: Connection reset by peer) |
19:47:23 | * | mmohammadi9812 joined #nim |
19:47:26 | leorize | @dom96 we also have atomic refs in fusion btw |
19:53:57 | FromDiscord | <dom96> leorize: oh? |
19:54:03 | FromDiscord | <dom96> is that the smartptrs module? https://github.com/nim-lang/fusion/blob/master/src/fusion/smartptrs.nim |
19:54:22 | leorize | yep |
19:54:48 | leorize | destructors are so flexible you can make your own refs now :P |
19:57:26 | FromDiscord | <brainproxy> @nikki `import options` provided me with a nice solution |
19:57:27 | * | Eeep joined #nim |
19:57:48 | FromGitter | <iffy> so should I report any issue? or just use gcsafe overrides and consider it done |
19:58:59 | Eeep | I need to to pass values into a JSON object and then send the whole thing over an HTTP get request as a string. What's the best way to do that? |
19:59:17 | Eeep | *HTTP Post |
20:01:04 | FromDiscord | <dom96> Eeep: var client = newHttpClient(); client.post(url, body = $(myJsonObj)); # something like this |
20:01:42 | Eeep | Thank you so much, I'm still getting used to the syntax for all this. |
20:01:56 | * | enthus1ast quit (Quit: WeeChat 2.3) |
20:02:45 | * | vesper quit (Ping timeout: 256 seconds) |
20:04:00 | * | lritter quit (Quit: Leaving) |
20:08:07 | * | Eeep quit (Remote host closed the connection) |
20:09:28 | FromDiscord | <alehander42> oi |
20:09:42 | FromDiscord | <alehander42> we are creating a bulgarian channel as well |
20:09:46 | FromDiscord | <alehander42> i hope this is fine |
20:11:15 | FromDiscord | <alehander42> actually .. |
20:11:19 | FromDiscord | <alehander42> how can we do that |
20:11:54 | FromDiscord | <alehander42> i can't see a `+` or something |
20:12:25 | leorize | ask Yardanico or dom I guess? |
20:13:47 | FromDiscord | <alehander42> ok, so the mega and admin roles |
20:13:57 | FromDiscord | <alehander42> i'll move to offtopic |
20:14:09 | * | nuxdie_ joined #nim |
20:14:47 | * | nuxdie_ quit (Client Quit) |
20:17:26 | * | nuxdie joined #nim |
20:21:08 | Zevv | "There are other async implementations in development that donโt introduce cycles." |
20:21:11 | Zevv | which are those |
20:21:38 | * | vesper11 joined #nim |
20:27:13 | * | vesper joined #nim |
20:28:13 | * | narimiran quit (Ping timeout: 246 seconds) |
20:29:52 | * | natrys quit (Quit: natrys) |
20:30:38 | * | vesper11 quit (Ping timeout: 272 seconds) |
20:48:02 | * | vesper11 joined #nim |
20:48:08 | * | vesper quit (Ping timeout: 260 seconds) |
20:51:01 | FromDiscord | <nikki> Zevv: does disruptek/cps count? |
20:52:13 | Zevv | no |
20:52:20 | Zevv | we didn't work on that for two months I think |
21:01:26 | FromDiscord | <dom96> huh, I thought that was the point of this cps thing |
21:04:35 | Zevv | nah, it was just for the fun of it |
21:05:23 | Zevv | and clyybber just _keeps_ _refusing_ to fix this bug, you know |
21:06:04 | disruptek | rude. |
21:06:12 | Zevv | yes, I am |
21:07:12 | disruptek | i don't know why he hates us so much. |
21:07:32 | Zevv | we could ask him |
21:07:48 | disruptek | clyybber: why do you hate zevv so much? |
21:08:09 | Zevv | yeah clyybber, why is that |
21:08:31 | Zevv | what did disruptek ever do to you?! |
21:08:58 | FromDiscord | <alehander42> guys push me |
21:09:03 | FromDiscord | <alehander42> to work on the nil stuff |
21:09:10 | Prestige | DO IT!! |
21:09:14 | FromDiscord | <alehander42> i am behind and Araq is probably angry |
21:09:14 | Zevv | ARE YOU DONE YET? |
21:09:23 | FromDiscord | <alehander42> DONT TELL ME WHAT TO DO |
21:09:28 | Zevv | oh he is. he was raning about that the other day like mad |
21:09:39 | FromDiscord | <alehander42> runs into the room and starts listening to nullable riot" |
21:09:50 | FromDiscord | <alehander42> right |
21:09:57 | FromDiscord | <alehander42> i don't want to get sent to the army |
21:09:59 | Prestige | nilable riot |
21:10:02 | FromDiscord | <alehander42> writing ada and cobol |
21:10:08 | FromDiscord | <alehander42> in the barracks |
21:10:13 | FromDiscord | <alehander42> actually i kinda do |
21:10:17 | FromDiscord | <alehander42> sounds as a lot of fun |
21:10:22 | Prestige | it isn't |
21:10:30 | Prestige | they'll make you use python! |
21:10:37 | FromDiscord | <alehander42> ew |
21:10:40 | FromDiscord | <alehander42> that's not army grad |
21:10:42 | FromDiscord | <alehander42> (edit) "grad" => "grade" |
21:11:21 | Prestige | Depends on the country :P |
21:11:33 | FromDiscord | <alehander42> did you write python in the army |
21:11:44 | Prestige | And java |
21:11:45 | Zevv | anyway, Nim is the laughing stock of new language design |
21:11:50 | Zevv | becuase Nim still nils |
21:11:59 | FromDiscord | <alehander42> that's true man |
21:12:20 | FromDiscord | <alehander42> they found out in the 70s |
21:12:23 | FromDiscord | <alehander42> this is bad |
21:12:37 | Zevv | and it's your fault |
21:12:43 | FromDiscord | <alehander42> we're stuck in our own european ways |
21:12:55 | FromDiscord | <alehander42> typical commie backwater people |
21:13:10 | FromDiscord | <alehander42> born into a world without Option<>s |
21:13:19 | Zevv | and it's all your fault |
21:13:31 | Zevv | are you done yet? |
21:13:35 | FromDiscord | <alehander42> hey man |
21:13:43 | Zevv | pushing! |
21:13:45 | FromDiscord | <alehander42> we can make a new async implementation and call Future `Dream` |
21:14:01 | FromDiscord | <alehander42> as if promise isn't very romantic already |
21:14:02 | Zevv | where we're going we don't need futures |
21:14:05 | FromDiscord | <nikki> that actually sounds kinda nice |
21:14:06 | Zevv | nor promises |
21:14:31 | Zevv | futures and promises are like rubber bands and hot glue |
21:14:35 | FromDiscord | <alehander42> and we can return `Past` from databases |
21:14:50 | FromDiscord | <alehander42> because they contain stuff about the past right |
21:14:58 | FromDiscord | <nikki> @alehander42 where's teh nil stuff at ๐ฎ got a link to the branch? |
21:14:58 | FromDiscord | <alehander42> think symmetrically |
21:15:07 | Zevv | procastinator |
21:15:14 | FromDiscord | <alehander42> zevv i need to optimize things |
21:15:21 | Zevv | don't we all |
21:15:21 | FromDiscord | <alehander42> but i need to google for kitten pants first |
21:15:34 | Zevv | or "the worst ladder" |
21:15:36 | FromDiscord | <alehander42> not even kidding my wife is like "google this" |
21:15:59 | FromDiscord | <alehander42> oh man i mean our cat started pooping in random places |
21:16:03 | FromDiscord | <alehander42> this really came out wrong |
21:16:16 | Zevv | and then the roomba drove straight over it, right |
21:16:18 | FromDiscord | <nikki> are the pants nil |
21:16:25 | FromDiscord | <alehander42> exactly man no nil checking |
21:16:30 | FromDiscord | <alehander42> and the cat poops now in the bed |
21:16:37 | FromDiscord | <nikki> maybe if u land nil checking, the cat problem will be solved |
21:16:40 | FromDiscord | <alehander42> it's called nia btw |
21:16:50 | Zevv | not nil? |
21:16:58 | FromDiscord | <nikki> lol my local directory where i am coding "nim in action" projects is called "nia" |
21:17:18 | FromDiscord | <Idefau> nya~ |
21:17:23 | FromDiscord | <alehander42> https://github.com/nim-lang/Nim/pull/15287 |
21:17:24 | disbot | โฅ Nil type check implementation |
21:17:34 | FromDiscord | <nikki> i kinda want to check in the generated C source from nim to the repo of my project too |
21:17:36 | FromDiscord | <alehander42> but i have another branch |
21:17:41 | FromDiscord | <nikki> so that whenever i commit i can see the diff in the generated output ๐ |
21:17:41 | FromDiscord | <alehander42> with some newer experiments |
21:17:44 | ForumUpdaterBot | New thread by Niminem: Nim videos and tutorials survey, see https://forum.nim-lang.org/t/7003 |
21:17:54 | FromDiscord | <alehander42> ~nia is cat |
21:17:55 | disbot | nia: 11cat |
21:17:56 | FromDiscord | <nikki> "oh this changed added all of this extra code before and after your function: see!" |
21:18:04 | * | oculux joined #nim |
21:18:10 | FromDiscord | <alehander42> hmmm sounds interesting |
21:18:27 | FromDiscord | <nikki> maybe not actually but maybe i'd keep a different repo for the cache so i can just look at diffs |
21:18:40 | * | TomDotTom quit (Ping timeout: 260 seconds) |
21:18:57 | FromDiscord | <nikki> the generated C code is really followable esp. if you get compile flags for it working with your lsp |
21:19:14 | FromDiscord | <nikki> (yes, disruptek. i know you have a mangling branch) |
21:19:18 | Zevv | especially if you use disrupteks branch |
21:19:22 | Zevv | we all know |
21:19:34 | Zevv | he should merge that shit |
21:19:36 | Zevv | laze man |
21:19:40 | Zevv | y |
21:19:55 | FromDiscord | <nikki> lol maybe it should be changed to be instead of a branch, a program that you can give your nim cache dir |
21:19:56 | FromDiscord | <alehander42> zevv dont cancel me |
21:20:01 | FromDiscord | <nikki> and it rewrites all the symbols in the output to be nicer |
21:20:07 | Zevv | we dont have futures, so no cancelling |
21:20:07 | FromDiscord | <nikki> so that it's not blocked on being merged into nim itslef |
21:20:08 | FromDiscord | <nikki> xD |
21:20:14 | FromDiscord | <alehander42> btw |
21:20:19 | FromDiscord | <alehander42> guys i keep getting ideas |
21:20:20 | FromDiscord | <alehander42> from rust |
21:20:26 | FromDiscord | <alehander42> so why dont we have a cookbook |
21:20:27 | FromDiscord | <nikki> yoooooooo it's how it gets u man |
21:20:32 | FromDiscord | <lqdev> just how well-tested are hash sets |
21:20:37 | FromDiscord | <alehander42> https://rust-lang-nursery.github.io/rust-cookbook/ |
21:20:38 | FromDiscord | <lqdev> do they handle hash collisions properly? |
21:20:42 | FromDiscord | <alehander42> seems very useful |
21:20:49 | FromDiscord | <alehander42> for ppl that are like |
21:20:59 | disruptek | futures are cancel'able if you buy your futures from status. |
21:21:01 | FromDiscord | <nikki> @alehander42 i did some rust stuff but it never actually panned out to better results in practice. mostly cuz i just do personal gamedev and don't care about stuff crashing lol |
21:21:05 | FromDiscord | <alehander42> we have something similar |
21:21:10 | FromDiscord | <alehander42> ys |
21:21:17 | FromDiscord | <nikki> also bc. the compiletime is worse than c++ lol |
21:21:18 | FromDiscord | <alehander42> i did implement cancellation btw |
21:21:22 | FromDiscord | <alehander42> on asyncdispatch based on tokens |
21:21:24 | Zevv | hmm. thinking of cancelation. How do we ever cancel a continuation?! |
21:21:33 | Zevv | these things are just not cancellable |
21:21:39 | * | oculuxe joined #nim |
21:21:40 | FromDiscord | <alehander42> but i didn't have time to improve it or to prepare a PR/rfc |
21:22:05 | Zevv | it is called a "continuation" for a reason. it. must. continue. |
21:22:21 | FromDiscord | <dom96> you can cancel things in Nim's async |
21:22:23 | FromDiscord | <dom96> just close the fd ๐ |
21:22:24 | * | oculux quit (Ping timeout: 240 seconds) |
21:24:14 | FromDiscord | <nikki> @lqdev afaict from `rawGetKnownHCImpl` in 'hashcommon.nim': yeah checks collisions |
21:25:27 | FromDiscord | <alehander42> @dom96 is there interest in submitting the PR as it is |
21:25:43 | disruptek | you cancel a continuation by simply not running it. |
21:25:58 | FromDiscord | <dom96> @alehander42 hrm? what PR? |
21:26:29 | FromDiscord | <alehander42> i did implement asyncdispatch based cancel sugar support (+ tokens, so one can cancel groups of stuff) |
21:26:39 | FromDiscord | <alehander42> while i worked with zah |
21:27:12 | FromDiscord | <alehander42> it's probably not some kinf of high quality thing but maybe it would be interesting to comment on |
21:32:29 | FromGitter | <iffy> How do I get the value a pointer points to as a pointer? I have `let p1 = cast[pointer](obj.unsafeAddr)` and it points to another pointer. |
21:33:43 | solitudesf | cast[pointer](obj[])? |
21:35:44 | FromGitter | <iffy> it's already a pointer, right? (anyway, that doesn't work -- I end up with the same p1) |
21:35:57 | Zevv | disruptek: but you *must* run it |
21:36:01 | Zevv | otherwise it can't continue |
21:36:25 | FromGitter | <jrfondren> iffy: what are you doing that isn't https://play.nim-lang.org/#ix=2CkT ? |
21:36:51 | FromDiscord | <lqdev> i managed to find a bug with excl'ing elements from a set during iteration: http://ix.io/2CkS/nim |
21:37:00 | FromGitter | <jrfondren> Your question reads as a request for the identity function |
21:37:23 | FromDiscord | <lqdev> the program gets stuck at (x: 22, y: 1) |
21:37:29 | FromDiscord | <lqdev> in an infinite loop |
21:37:36 | FromGitter | <jrfondren> oh is 'pointer' something special? |
21:37:44 | FromDiscord | <lqdev> ^C'ing led me to this loop: https://github.com/nim-lang/Nim/blob/version-1-4/lib/pure/collections/sets.nim#L624 |
21:38:14 | FromGitter | <iffy> I'm literally using 'pointer' and not 'ptr' |
21:38:31 | FromGitter | <iffy> I don't know the difference between them |
21:39:07 | FromDiscord | <lqdev> `pointer` is a pointer to something |
21:39:10 | FromGitter | <jrfondren> since 'pointer' doesn't have a following type, I'm guessing it's void* |
21:39:21 | FromDiscord | <lqdev> `ptr T` is a pointer to `T` |
21:39:40 | FromDiscord | <lqdev> yes `pointer` is the same as `void ` in C |
21:40:16 | * | vicfred quit (Quit: Leaving) |
21:40:22 | FromGitter | <jrfondren> so just call .pointer on your `ptr T` |
21:40:37 | FromGitter | <iffy> I don't have a `ptr T`, I start with a `pointer` |
21:41:12 | FromGitter | <iffy> And that pointer points to a value. I want to get that value (the value is a pointer itself) |
21:41:13 | FromGitter | <jrfondren> https://play.nim-lang.org/#ix=2CkV |
21:41:22 | FromDiscord | <nikki> probs need to cast |
21:41:26 | FromGitter | <jrfondren> cast it to a ptr TypeOfTheValue |
21:41:47 | FromGitter | <jrfondren> that playground link goes ptr ptr int <-> pointer |
21:42:03 | * | opal quit (Ping timeout: 240 seconds) |
21:45:24 | * | opal joined #nim |
21:46:55 | FromGitter | <iffy> If you run this: https://play.nim-lang.org/#ix=2Cl0 you will see that I print out a string's addr, then use `.cstring` to get the address where the actual data is stored. I'm trying to do the same for the object. The first memory dump of the object shows that the pointer points to a null pointer. |
21:48:06 | FromGitter | <iffy> The second `..pointer:` shows that the var `a` now points to a non-null address. I want to get that address. |
21:51:17 | FromGitter | <iffy> aha! this works: `let i = cast[ptr int](p1); let p2 = cast[pointer](i[])` but shouldn't that be the same as `ptr ptr int`, @jrfondren ? |
21:51:35 | FromGitter | <iffy> or maybe not because I deference `i` first |
21:51:43 | FromGitter | <iffy> anyway, thank you all! |
21:52:04 | mipri | you're getting the address as an int and then casting it to a pointer |
21:53:37 | FromGitter | <iffy> yes |
21:53:52 | mipri | what's the point of that? |
21:54:13 | mipri | let i = cast[ptr pointer](p1); let p2 = i[]; done |
21:55:29 | FromGitter | <iffy> gitter is messing up the formatting on what you wrote. I'm starting with `var obj = MyObj()` then do `p1 = cast[pointer](obj.unsafeAddr)` |
21:56:26 | FromGitter | <iffy> My goal is to dump out the memory of an object. That's all I'm really trying to do. Anyway bbl |
21:56:50 | * | luis_ joined #nim |
21:56:56 | * | solitudesf quit (Ping timeout: 260 seconds) |
21:57:40 | FromDiscord | <lqdev> could somebody look into why this ordered set program script thing is freezing? http://ix.io/2Cl1 |
21:58:54 | FromGitter | <jrfondren> if you click the ... button to the right of the broken line, you can quote it to get the original code |
21:59:16 | * | dv^_^ quit (*.net *.split) |
21:59:16 | * | idxu quit (*.net *.split) |
21:59:16 | * | voltist quit (*.net *.split) |
21:59:16 | * | rayman22201 quit (*.net *.split) |
21:59:33 | * | rayman22201 joined #nim |
21:59:35 | * | voltist joined #nim |
21:59:35 | * | idxu joined #nim |
21:59:36 | * | dv^_^ joined #nim |
21:59:55 | FromGitter | <ynfle> Distruptek: does dust install with the latest nim? I get `dust/boring.nim(101, 58) Error: undeclared field: 'mainCommand'` When installing with nimble |
22:00:19 | FromGitter | <ynfle> 1) disruptek |
22:00:41 | disruptek | no. |
22:00:52 | disruptek | araq broke it for us. |
22:00:58 | disruptek | i'll fix it once i finish ic. |
22:03:01 | FromDiscord | <nikki> @lqdev i'm not sure you're allowed to modify a set while iterating over it |
22:03:13 | FromDiscord | <lqdev> the docs don't state that |
22:03:24 | FromDiscord | <lqdev> it also doesn't trigger an assertion |
22:03:32 | FromDiscord | <lqdev> so i assumed it would work |
22:04:04 | FromDiscord | <nikki> seems like it doesn't ๐
|
22:04:20 | FromDiscord | <nikki> well in this case, one way to go about it is to just do while !set.empty(): let elem = set.getSomething() |
22:04:28 | FromDiscord | <lqdev> then the docs should be updatedโฆ |
22:04:31 | FromDiscord | <nikki> i'm a noob at nim so idk what those procs are actually called lol |
22:04:44 | * | mmohammadi9812 quit (Ping timeout: 240 seconds) |
22:05:46 | FromDiscord | <lqdev> i'm filing an issue anyways |
22:06:04 | FromGitter | <ynfle> disruptek It doesn't even work on 1.2.6 What's the latest that you got it to compile it you? |
22:06:17 | FromDiscord | <nikki> @lqdev i think that's a good idea |
22:06:36 | FromDiscord | <nikki> is there a standard name for a 'get some element' proc for a set-like? |
22:06:38 | FromDiscord | <nikki> ah pop |
22:06:44 | FromDiscord | <nikki> (removes too) |
22:07:08 | FromDiscord | <nikki> um jk pop doesn't work on ordered set? |
22:09:50 | luis_ | How large can an int integer be in nim? Any documentation on this? |
22:09:51 | FromDiscord | <lqdev> https://github.com/nim-lang/Nim/issues/15767 |
22:09:53 | disbot | โฅ HashSet misses elements when excl'ing while iterating over it ; snippet at 12https://play.nim-lang.org/#ix=2Clb |
22:10:00 | FromDiscord | <lqdev> luis_: 64-bits max |
22:10:13 | luis_ | ok, thanks |
22:10:18 | FromGitter | <ynfle> @luis, int64, int32, int16, int8 |
22:10:40 | FromDiscord | <lqdev> @nikki it doesn't matter for me if the set is ordered or not, i only swapped it out to an OrderedSet for easier debugging in my code |
22:10:48 | FromDiscord | <nikki> ah cool |
22:11:01 | FromDiscord | <nikki> yeah i actuallly used a difference piece of code for iterating and got it to work |
22:11:02 | FromDiscord | <lqdev> still doesn't change the fact that sets clearly can't handle excl'ing while iterating over them |
22:11:11 | FromDiscord | <nikki> sent a code paste, see https://play.nim-lang.org/#ix=2Clc |
22:11:21 | FromDiscord | <nikki> because i couldn't figure out a way to just ... pop ... so i just had to loop and break lol |
22:11:58 | * | luis_ quit (Quit: luis_) |
22:12:42 | FromDiscord | <lqdev> yea using `pop` combined with a `while` loop seems to work |
22:12:51 | FromDiscord | <nikki> nice |
22:17:27 | * | luis_ joined #nim |
22:22:48 | disruptek | ynfle: you probably need the earlier devel, figure like a couple weeks ago. |
22:23:48 | disruptek | ynfle: araq's change is easy to detect; he removed mainCommand. search for that and you'll find the working stuff. |
22:25:25 | disruptek | ynfle: also, dust changes according to my needs. some hacking may be necessary for your particular task. |
22:25:53 | * | tane quit (Quit: Leaving) |
22:27:02 | FromDiscord | <Avatarfighter> what is dust used for> |
22:28:20 | disruptek | it performs exhaustive reduction of ast while reproducing semantic errors. |
22:28:32 | disruptek | !repo dust |
22:28:32 | disbot | https://github.com/disruptek/dust -- 9dust: 11DUST is Unattended Syntax Truncation 15 4โญ 0๐ด 7& 1 more... |
22:28:42 | disruptek | very crude. |
22:28:48 | FromDiscord | <Avatarfighter> Oh wow that sounds super useful |
22:31:01 | disruptek | there are some major drawbacks to both the impl and the interface to the compiler. that said, it /can/ work... |
22:34:11 | disruptek | ynfle: or, just fix it to work again. it shouldn't be too hard. |
22:42:24 | * | luis_ quit (Ping timeout: 240 seconds) |
22:48:44 | * | mmohammadi9812 joined #nim |
23:01:53 | * | tiorock joined #nim |
23:01:54 | * | rockcavera quit (Killed (beckett.freenode.net (Nickname regained by services))) |
23:01:54 | * | tiorock is now known as rockcavera |
23:01:54 | * | rockcavera quit (Changing host) |
23:01:54 | * | rockcavera joined #nim |
23:02:16 | * | Lord_Nightmare quit (Quit: ZNC - http://znc.in) |
23:07:24 | * | Lord_Nightmare joined #nim |
23:46:06 | * | luis_ joined #nim |
23:46:44 | * | whaletechno joined #nim |