| 00:11:48 | * | Mister_Magister quit (Quit: bye) |
| 00:14:22 | * | Mister_Magister joined #nim |
| 02:06:02 | * | xutaxkamay quit (Quit: ZNC 1.9.1+deb2+b3 - https://znc.in) |
| 02:09:04 | FromDiscord | <[Next-System] systemblue> In reply to @_timurski "Native JVM programs are": really? |
| 02:09:06 | FromDiscord | <[Next-System] systemblue> why?: |
| 02:09:58 | FromDiscord | <[Next-System] systemblue> Does Native JVM not compile before distribution?(like Dart) |
| 02:10:05 | FromDiscord | <[Next-System] systemblue> (edit) "distribution?(like" => "distribution?(unlike" |
| 02:10:22 | FromDiscord | <mr_rowboto> you mean Graal? |
| 02:10:26 | FromDiscord | <[Next-System] systemblue> I thought they do compilation in distribute time |
| 02:10:32 | FromDiscord | <[Next-System] systemblue> yeah yeah Graal |
| 02:10:35 | FromDiscord | <mr_rowboto> Graal is one thing, native is another thing, and JVM is another thing. |
| 02:10:46 | FromDiscord | <[Next-System] systemblue> I don't know much about JVM |
| 02:10:50 | FromDiscord | <mr_rowboto> kotlin-native, scala-native, are not graal |
| 02:10:53 | FromDiscord | <[Next-System] systemblue> please teach me some |
| 02:11:28 | FromDiscord | <[Next-System] systemblue> I heard that Graal supports AOT compilation so it's performance is closed to Go |
| 02:11:31 | FromDiscord | <mr_rowboto> the -native part in those langs is basically that they use an LLVM-based backend |
| 02:11:48 | FromDiscord | <mr_rowboto> so basically, all JVM optis fall short |
| 02:11:55 | FromDiscord | <mr_rowboto> (edit) "short" => "short, they're just not there" |
| 02:11:55 | FromDiscord | <[Next-System] systemblue> and it have to be faster than on JVM |
| 02:12:01 | FromDiscord | <mr_rowboto> it is not |
| 02:12:18 | FromDiscord | <mr_rowboto> (edit) |
| 02:12:59 | FromDiscord | <[Next-System] systemblue> so how does Scala Native, Kotlin Native works? |
| 02:13:02 | FromDiscord | <mr_rowboto> In reply to @mr_rowboto "What's funnier is that": ^ |
| 02:13:11 | FromDiscord | <mr_rowboto> In reply to @bluewhale_unkown_x "so how does Scala": llvm-based backend |
| 02:13:27 | FromDiscord | <mr_rowboto> and probably missing a lot of libraries that make "native" behave well |
| 02:13:31 | FromDiscord | <mr_rowboto> SIMD is just one example |
| 02:14:14 | FromDiscord | <mr_rowboto> another could be how they individually implement their own wonky RTTI, their own wonky GC, etc. |
| 02:14:29 | FromDiscord | <mr_rowboto> so they're _native_ in the sense that they can compile against C |
| 02:14:42 | FromDiscord | <mr_rowboto> but they're not free from those language's original design choices |
| 02:14:46 | FromDiscord | <[Next-System] systemblue> um... SIMD and other libraries are missing so it makes difference of performance right? |
| 02:14:51 | FromDiscord | <mr_rowboto> Scala supports A LOT of generic features |
| 02:14:53 | FromDiscord | <_timurski> In reply to @bluewhale_unkown_x "so how does Scala": their compilers are just not as good |
| 02:14:57 | FromDiscord | <mr_rowboto> that forces you to have a giant runtime |
| 02:15:06 | FromDiscord | <_timurski> In reply to @_timurski "their compilers are just": and JIT can do certain things that AOT can't do |
| 02:15:16 | FromDiscord | <mr_rowboto> and if you have a compiler that has to support that for a single language on an odd target |
| 02:15:22 | FromDiscord | <[Next-System] systemblue> In reply to @mr_rowboto "Scala supports A LOT": does generic have runtime? |
| 02:15:28 | FromDiscord | <mr_rowboto> what ixume says happens: the compilers are not as good |
| 02:15:33 | FromDiscord | <mr_rowboto> In reply to @bluewhale_unkown_x "does generic have runtime?": of course |
| 02:15:37 | FromDiscord | <[Next-System] systemblue> why? |
| 02:15:41 | FromDiscord | <mr_rowboto> why not? |
| 02:15:41 | FromDiscord | <[Next-System] systemblue> Nim generic has no runtime |
| 02:15:56 | FromDiscord | <mr_rowboto> well C#, and Java, and Kotlin, and Scala does |
| 02:16:08 | FromDiscord | <[Next-System] systemblue> it only exists in comptime |
| 02:16:08 | FromDiscord | <mr_rowboto> (java and kotlin not so much tbh, but they "kind of do") |
| 02:16:20 | FromDiscord | <_timurski> In reply to @bluewhale_unkown_x "does generic have runtime?": generics have runtime cost, as i believe the native compilers don't generate polymorphic functions for every generic |
| 02:16:25 | FromDiscord | <_timurski> In reply to @bluewhale_unkown_x "it only exists in": this is not the case for JVM |
| 02:16:30 | FromDiscord | <_timurski> in fact it's designed not to be the case |
| 02:16:30 | FromDiscord | <mr_rowboto> comptime generics have limitations with runtime introspection |
| 02:16:36 | FromDiscord | <mr_rowboto> and all those languages |
| 02:16:40 | FromDiscord | <mr_rowboto> have runtime introspection |
| 02:16:49 | FromDiscord | <_timurski> JVM authors specifically didn't want generics to be compile time because it sacrifices flexibility |
| 02:16:49 | FromDiscord | <mr_rowboto> nim solves that by not having runtime introspection |
| 02:16:51 | FromDiscord | <mr_rowboto> which is actually elegant |
| 02:17:25 | FromDiscord | <[Next-System] systemblue> and is there any situation that type would change in runtime? |
| 02:17:31 | FromDiscord | <mr_rowboto> but the impediment of course is that nim will never be fit for runtime self-modifying applications |
| 02:17:37 | FromDiscord | <_timurski> In reply to @_timurski "JVM authors specifically didn't": but JIT can generate machine code for hotly used generics when necessary |
| 02:17:42 | FromDiscord | <mr_rowboto> (AKA: big things with plugins) |
| 02:17:51 | FromDiscord | <_timurski> In reply to @bluewhale_unkown_x "and is there any": you cannot know all possible types the function will be used at compile time |
| 02:17:52 | FromDiscord | <mr_rowboto> In reply to @bluewhale_unkown_x "and is there any": infinite |
| 02:17:57 | FromDiscord | <mr_rowboto> plugins |
| 02:18:09 | FromDiscord | <_timurski> In reply to @_timurski "you cannot know all": because you cannot know what other code will run alongside your function |
| 02:18:22 | FromDiscord | <mr_rowboto> runtime introspection vs comptime introspection is just a design choice, and both apply for their use cases |
| 02:18:50 | FromDiscord | <_timurski> JIT can simply do more when it knows how the code is actually being used |
| 02:18:52 | FromDiscord | <mr_rowboto> comptime intro is fast as hell↵runtime intro can be absolutely polymorphic |
| 02:18:57 | FromDiscord | <_timurski> (edit) "when" => "than AOT bcs" |
| 02:19:25 | FromDiscord | <_timurski> i would imagine some of the native compiled things have ways for you to specify to generate polymorphic code at comptime tbh |
| 02:19:30 | FromDiscord | <[Next-System] systemblue> In reply to @_timurski "you cannot know all": but every types are determinate in comptime |
| 02:19:32 | FromDiscord | <_timurski> that seems like a feature people would want |
| 02:19:35 | FromDiscord | <_timurski> In reply to @bluewhale_unkown_x "but every types are": they're not |
| 02:19:38 | FromDiscord | <_timurski> this is not true for java |
| 02:19:40 | FromDiscord | <mr_rowboto> In reply to @bluewhale_unkown_x "but every types are": not always |
| 02:19:45 | FromDiscord | <[Next-System] systemblue> really?? |
| 02:19:47 | FromDiscord | <mr_rowboto> have you never installed a plugin? |
| 02:19:53 | FromDiscord | <[Next-System] systemblue> plugin? |
| 02:19:56 | FromDiscord | <mr_rowboto> plugins come with arbitrary code |
| 02:19:57 | FromDiscord | <mr_rowboto> yeah |
| 02:19:58 | FromDiscord | <mr_rowboto> like |
| 02:20:04 | FromDiscord | <mr_rowboto> arbitrary extensions of a software |
| 02:20:18 | FromDiscord | <_timurski> you can put many compiled jar's together and update them individually in one runtime |
| 02:20:29 | FromDiscord | <mr_rowboto> With comptime introspection, you're just limited to C abi: structs and functions. |
| 02:20:32 | FromDiscord | <_timurski> and so you cannot possibly know all the types at compile time |
| 02:20:38 | FromDiscord | <mr_rowboto> With runtime introspection you can load anything. |
| 02:20:48 | FromDiscord | <[Next-System] systemblue> but most time when software makes plugin, they can't "change" code in runtime(OS doesn't allow)↵↵so they bypass it by linking(dynamic linking) and pointer |
| 02:20:57 | FromDiscord | <_timurski> java specifically allows that |
| 02:20:59 | FromDiscord | <mr_rowboto> In reply to @bluewhale_unkown_x "but most time when": OS != VM |
| 02:21:00 | FromDiscord | <_timurski> that's like the whole point of java |
| 02:21:09 | FromDiscord | <mr_rowboto> yep |
| 02:21:11 | FromDiscord | <mr_rowboto> and .NET |
| 02:21:15 | FromDiscord | <_timurski> (edit) "java specifically allows that ... " added "(dynamic code loading)" |
| 02:21:19 | FromDiscord | <_timurski> (edit) "that's like ... the" added "(one of)" |
| 02:21:23 | FromDiscord | <_timurski> java is an interpreted language |
| 02:21:37 | FromDiscord | <[Next-System] systemblue> that's why minecraft can have mod in runtime? right? |
| 02:21:38 | FromDiscord | <mr_rowboto> In reply to @_timurski "java is an interpreted": KIND OF... C'MON hhahaa |
| 02:21:44 | FromDiscord | <mr_rowboto> In reply to @bluewhale_unkown_x "that's why minecraft can": exactly |
| 02:21:44 | FromDiscord | <_timurski> the same way you can create more types at runtime in python you can do in java |
| 02:21:50 | FromDiscord | <mr_rowboto> and you don't have to recompile the whole thing |
| 02:22:01 | FromDiscord | <_timurski> In reply to @mr_rowboto "KIND OF... C'MON hhahaa": in the sense that dynamic code loading is easy |
| 02:22:03 | FromDiscord | <[Next-System] systemblue> and it will be very unsafe for securiuty |
| 02:22:11 | FromDiscord | <_timurski> well not really |
| 02:22:12 | FromDiscord | <mr_rowboto> In reply to @_timurski "in the sense that": i'd say it's a language that runs on a VM |
| 02:22:14 | FromDiscord | <mr_rowboto> but not interpreted |
| 02:22:18 | FromDiscord | <_timurski> ykwim |
| 02:22:24 | FromDiscord | <_timurski> In reply to @mr_rowboto "but not interpreted": well bytecode is literally interpreted |
| 02:22:28 | FromDiscord | <mr_rowboto> In reply to @_timurski "ykwim": yeye but maybe blu doesn't |
| 02:22:37 | FromDiscord | <[Next-System] systemblue> Java was interpreted language(when they starts) but turn to JIT mostly now |
| 02:22:38 | FromDiscord | <mr_rowboto> In reply to @_timurski "well bytecode is literally": they don't run the bytecode itself |
| 02:22:45 | FromDiscord | <_timurski> they do when it's unoptimized |
| 02:22:45 | FromDiscord | <mr_rowboto> bytecode is mashed into target |
| 02:22:54 | FromDiscord | <_timurski> oh are you talking about Native |
| 02:22:58 | FromDiscord | <mr_rowboto> nono |
| 02:22:58 | FromDiscord | <mr_rowboto> JVM |
| 02:23:07 | FromDiscord | <mr_rowboto> jVM is a brutally optimized piece of wokr |
| 02:23:09 | FromDiscord | <mr_rowboto> (edit) "wokr" => "work" |
| 02:23:11 | FromDiscord | <mr_rowboto> (edit) "jVM" => "JVM" |
| 02:23:13 | FromDiscord | <mr_rowboto> it's disgusting |
| 02:23:13 | FromDiscord | <_timurski> JVM doesn't immediately optimize bytecode to machine code if it's not run much |
| 02:23:15 | FromDiscord | <_timurski> is what i'm saying |
| 02:23:19 | FromDiscord | <mr_rowboto> oh sure |
| 02:23:31 | FromDiscord | <mr_rowboto> hot paths |
| 02:23:50 | FromDiscord | <_timurski> In reply to @bluewhale_unkown_x "and it will be": well the people who create the software control what other code is loaded |
| 02:24:02 | FromDiscord | <_timurski> and people do not really every allow users to do that |
| 02:24:04 | FromDiscord | <mr_rowboto> In reply to @bluewhale_unkown_x "and it will be": it's not as bad as you think |
| 02:24:14 | FromDiscord | <mr_rowboto> they're still running on top of an OS limiting memory addressing |
| 02:24:32 | FromDiscord | <mr_rowboto> like, anything running arbitrary code is _dangerous_ like... |
| 02:24:34 | FromDiscord | <mr_rowboto> your browser |
| 02:24:54 | FromDiscord | <_timurski> In reply to @_timurski "and people do not": but for example how interpreters for other languages work in java (at least the good ones) is they compile the code into JVM bytecode, so you could write java code that takes in code from the user, and compiles it into bytecode and executes it at runtime |
| 02:25:00 | FromDiscord | <mr_rowboto> security has nothing to do with mem safety or running code in the end |
| 02:25:23 | FromDiscord | <_timurski> In reply to @_timurski "but for example how": but this is a problem (to a lesser or greater degree) in any language with scripting or whatever |
| 02:25:35 | FromDiscord | <_timurski> in the sense that you can't always trust the user |
| 02:26:27 | * | rockcavera quit (Remote host closed the connection) |
| 02:26:40 | FromDiscord | <mr_rowboto> the JVM has it's good deal of restrictions on that end |
| 02:26:53 | FromDiscord | <mr_rowboto> 30+ years of history hardens things |
| 02:31:14 | FromDiscord | <mr_rowboto> One of the things that made me choose nim over the JVM is that the comptime introspection and generics work perfectly, and make the thing go blazing.↵↵The sacrifice was having a plugin architecture, but in the end it payed off. |
| 02:31:50 | FromDiscord | <mr_rowboto> (edit) "blazing.↵↵The" => "blazing fast.↵↵The" |
| 02:32:00 | FromDiscord | <mr_rowboto> (edit) "One of the things that made me choose nim over the JVM is that the comptime introspection and generics work perfectly, and make the thing go blazing fast.↵↵The sacrifice was ... having" added "not" |
| 02:32:05 | FromDiscord | <mr_rowboto> (edit) "One of the things that made me choose nim over the JVM is that the comptime introspection and generics work perfectly, and make the thing go blazing fast.↵↵The sacrifice was not having a ... plugin" added "runtime" |
| 02:33:11 | FromDiscord | <[Next-System] systemblue> sent a code paste, see https://play.nim-lang.org/#pasty=ZwBxRlKr |
| 02:33:22 | FromDiscord | <mr_rowboto> yah |
| 02:33:25 | FromDiscord | <mr_rowboto> totally |
| 02:33:26 | FromDiscord | <[Next-System] systemblue> lol |
| 02:33:32 | FromDiscord | <[Next-System] systemblue> very dangerous way |
| 02:33:35 | FromDiscord | <[Next-System] systemblue> but powerful |
| 02:33:42 | FromDiscord | <mr_rowboto> you wouldn't know the types in runtime tho |
| 02:33:45 | FromDiscord | <mr_rowboto> it's just opaque |
| 02:33:54 | FromDiscord | <mr_rowboto> but at that point you're just re-creating interfaces |
| 02:33:57 | FromDiscord | <[Next-System] systemblue> nono TypeList is runtime value |
| 02:33:58 | FromDiscord | <[Next-System] systemblue> so |
| 02:34:02 | FromDiscord | <mr_rowboto> so use interfaces or whatever they're called here |
| 02:34:05 | FromDiscord | <[Next-System] systemblue> you can know types in runtime |
| 02:34:13 | FromDiscord | <mr_rowboto> oh I see |
| 02:34:31 | FromDiscord | <[Next-System] systemblue> but this is very dangerous so don't use |
| 02:34:39 | FromDiscord | <mr_rowboto> hahaha |
| 02:34:44 | FromDiscord | <mr_rowboto> I come from the C minefields |
| 02:34:50 | FromDiscord | <mr_rowboto> don't tell me what to use 🤣 |
| 02:36:37 | FromDiscord | <[Next-System] systemblue> and see my fancy zero-cost slicearray type↵↵this slicearray is viewtype(like openArray) and only use in input parameter https://media.discordapp.net/attachments/371759389889003532/1503224278274015283/message.txt?ex=6a029234&is=6a0140b4&hm=83ef0edb612fd0569cc4463e431d091b532c02059eee934a68fcc1503dbce619& |
| 02:37:00 | FromDiscord | <[Next-System] systemblue> and there's autoopt↵and it's my macro(unroll)( |
| 02:37:46 | FromDiscord | <[Next-System] systemblue> sent a code paste, see https://play.nim-lang.org/#pasty=IGWRbFQP |
| 02:37:53 | FromDiscord | <[Next-System] systemblue> and here's unroll and check code |
| 02:38:47 | FromDiscord | <mr_rowboto> nice! finally Araq can rest and not be nagged with slicearray by the slice fans 😂 |
| 02:38:54 | FromDiscord | <[Next-System] systemblue> sent a code paste, see https://play.nim-lang.org/#pasty=HukbsGFZ |
| 02:38:54 | FromDiscord | <[Next-System] systemblue> this? |
| 02:39:05 | FromDiscord | <[Next-System] systemblue> In reply to @mr_rowboto "nice! finally Araq can": lol |
| 02:39:20 | FromDiscord | <[Next-System] systemblue> araq deny it |
| 02:39:21 | FromDiscord | <[Next-System] systemblue> and I made it |
| 02:39:22 | FromDiscord | <mr_rowboto> In reply to @bluewhale_unkown_x "do you know there's": honestly no, is there one? |
| 02:39:28 | FromDiscord | <mr_rowboto> In reply to @bluewhale_unkown_x "and I made it": probably a good thing to do |
| 02:39:44 | FromDiscord | <[Next-System] systemblue> In reply to @mr_rowboto "honestly no, is there": no there's difference I check it with test |
| 02:40:04 | FromDiscord | <mr_rowboto> oh maybe all the object semantics? |
| 02:40:08 | FromDiscord | <mr_rowboto> refcounting and so on |
| 02:40:21 | FromDiscord | <[Next-System] systemblue> I think there might be difference because object creating cost |
| 02:40:22 | FromDiscord | <[Next-System] systemblue> or |
| 02:40:23 | FromDiscord | <mr_rowboto> yeah definitely |
| 02:40:27 | FromDiscord | <[Next-System] systemblue> object copying cost |
| 02:40:31 | FromDiscord | <mr_rowboto> it's refcounting |
| 02:40:38 | FromDiscord | <mr_rowboto> objects have to report to the GC |
| 02:40:46 | FromDiscord | <mr_rowboto> don't they? |
| 02:40:58 | FromDiscord | <[Next-System] systemblue> nono |
| 02:40:59 | FromDiscord | <mr_rowboto> or am I being stupid because it's a value object <:frog_think:1112825121380511745> |
| 02:41:01 | FromDiscord | <[Next-System] systemblue> little difference |
| 02:41:22 | FromDiscord | <[Next-System] systemblue> but it's true that object needs more cost than distinct pointer |
| 02:42:34 | FromDiscord | <[Next-System] systemblue> Nim's ORC is determined system ↵but it needs reference counting to object to collect ref cycle |
| 02:42:57 | FromDiscord | <[Next-System] systemblue> In reply to @mr_rowboto "or am I being": um... yes... it's value object |
| 02:43:23 | FromDiscord | <mr_rowboto> yep |
| 02:44:18 | FromDiscord | <[Next-System] systemblue> and I don't know nim's ORC watches value object too↵↵↵I think main reason is object copy/reference(when register accesses memory, it might need double reference when it's object when it's not optimised) |
| 02:44:19 | FromDiscord | <[Next-System] systemblue> cost |
| 02:50:53 | FromDiscord | <[Next-System] systemblue> sent a long message, see https://pasty.ee/pFEdVLDG |
| 03:02:56 | FromDiscord | <[Next-System] systemblue> sent a code paste, see https://play.nim-lang.org/#pasty=FcqVtUoD |
| 03:10:26 | FromDiscord | <mr_rowboto> I am not a rust lover. Idk how you managed to interpret that 😂 |
| 03:10:34 | FromDiscord | <mr_rowboto> I literally hate the guts out of that language. |
| 03:11:20 | FromDiscord | <mr_rowboto> _if anything, you are the rust lover that want to add a slice type to nim lol_ |
| 03:11:29 | FromDiscord | <mr_rowboto> (edit) "want" => "wants" | "lol_" => "lol 😂 _" |
| 03:12:32 | FromDiscord | <mr_rowboto> In reply to @bluewhale_unkown_x "<@176460389662457856> you": hehehe, yah, an Error monad. I always come and go with these things.↵Sometimes I like their semantics, sometimes I'm just "I'm just reinventing exceptions" |
| 03:12:39 | FromDiscord | <mr_rowboto> (edit) "In reply to @bluewhale_unkown_x "<@176460389662457856> you": hehehe, yah, an Error monad. I always come and go with these things.↵Sometimes I like their semantics, sometimes I'm just "I'm just reinventing ... exceptions"" added "type-checked" |
| 03:14:08 | FromDiscord | <mr_rowboto> (edit) "I'm" => "I" | "Ijust ... "I'm" added "thikn" | removed "just" |
| 03:14:13 | FromDiscord | <mr_rowboto> (edit) "thikn" => "think" |
| 04:29:13 | * | xutaxkamay joined #nim |
| 06:20:00 | * | oculux joined #nim |
| 06:23:33 | * | kick455 quit (Ping timeout: 272 seconds) |
| 06:27:31 | * | kick455 joined #nim |
| 06:28:21 | * | oculux quit (Ping timeout: 255 seconds) |
| 08:25:10 | * | beholders_eye joined #nim |
| 10:06:24 | * | beholders_eye quit (Ping timeout: 246 seconds) |
| 11:07:22 | FromDiscord | <gesee37> I had an illumination recently. While building my shader transpiler I built an IR mimick nimNode but are still usable at runtime, I used it to generate kernels from nim code for openCL |
| 11:07:32 | FromDiscord | <gesee37> Then I asked myself |
| 11:07:57 | FromDiscord | <gesee37> If I transform that runtime IR into a program, and somehow manage to load it back into my program |
| 11:08:13 | FromDiscord | <gesee37> Then it's a JIT compiler |
| 11:08:34 | FromDiscord | <gesee37> That is extremely useful for rapid prototyping |
| 11:09:02 | FromDiscord | <gesee37> (edit) "I had an illumination recently. While building my shader transpiler I built an IR mimick nimNode but are still usable at runtime, I used it to generate kernels from nim code for openCL ... " added "and also for generating GLSL" |
| 13:15:03 | * | amadaluzia quit (Read error: Connection reset by peer) |
| 13:36:52 | FromDiscord | <mr_rowboto> now run that program on a VM on the GPU |
| 13:37:01 | FromDiscord | <mr_rowboto> which looks like a stupid idea but... |
| 13:37:11 | FromDiscord | <mr_rowboto> (edit) "now run that program on a VM on the GPU ... " added "😂" |
| 13:37:38 | FromDiscord | <mr_rowboto> but is not: https://dolphin-emu.org/blog/2017/07/30/ubershaders/ |
| 13:52:13 | * | FromDiscord quit (Read error: Connection reset by peer) |
| 13:52:53 | * | FromDiscord joined #nim |
| 13:53:02 | * | beholders_eye joined #nim |
| 15:01:04 | * | amadaluzia joined #nim |
| 17:19:48 | * | Mister_Magister_ joined #nim |
| 17:20:10 | * | Mister_Magister quit (Read error: Connection reset by peer) |
| 17:23:01 | * | Mister_Magister_ is now known as Mister_Magister |
| 17:53:14 | * | beholders_eye quit (Ping timeout: 265 seconds) |
| 18:45:48 | * | skippy8 joined #nim |
| 18:55:05 | FromDiscord | <gesee37> In reply to @mr_rowboto "but is not: https://dolphin-emu.org/blog/2017/07/30": I took a look a this |
| 18:55:23 | FromDiscord | <gesee37> Dolphin devs are genius 🔥 |
| 18:55:48 | FromDiscord | <gesee37> But it made me think about if I can myself do something about this |
| 18:56:10 | FromDiscord | <gesee37> Maybe fusing kernels ? |
| 18:57:06 | FromDiscord | <gesee37> In reply to @gesee37 "Then it's a JIT": also, nevermind the JIT, it's a way too huge task. I will just see how to optimize the GPU |
| 18:57:31 | FromDiscord | <gesee37> (edit) "Maybe fusing kernels ... ?" added "(shaders)" |
| 19:03:14 | FromDiscord | <mr_rowboto> In reply to @gesee37 "Maybe fusing kernels (shaders)": It’s not needed on most cases.↵Here it’s reasonable because graphics code is generated just in time for the GameCube |
| 19:04:02 | FromDiscord | <gesee37> In reply to @mr_rowboto "It’s not needed on": I guess. It's been a long time I didn't play some new games so I don't know if there are still stutters |
| 19:04:23 | FromDiscord | <mr_rowboto> The solution is of course having a huge shader with a lot of instructions, on a huge switch.↵Basically a CISC VM. |
| 19:04:37 | FromDiscord | <mr_rowboto> (edit) "switch.↵Basically" => "switch, and an instructions buffer.↵Basically" |
| 19:05:07 | * | skippy8 left #nim (WeeChat 4.8.1) |
| 19:05:17 | FromDiscord | <mr_rowboto> In reply to @gesee37 "I guess. It's been": Well, the stutter will happen on any modern architecture if the problem is attacked by just compiling the shader. |
| 19:05:31 | FromDiscord | <mr_rowboto> Because the GameCube did it just in time, at frame velocity. |
| 19:05:36 | FromDiscord | <mr_rowboto> (edit) "velocity." => "speed." |
| 19:05:52 | FromDiscord | <mr_rowboto> It's just a huge difference on the shading model. |
| 19:05:54 | FromDiscord | <muddmaker> Godot also uses something resembling an Ubershader starting with v4.4, IIRC |
| 19:05:55 | FromDiscord | <mr_rowboto> (edit) "model." => "model/pipeline." |
| 19:06:25 | FromDiscord | <mr_rowboto> The great disadvantage of Ubershaders is register pressure. |
| 19:06:56 | FromDiscord | <muddmaker> The Ubershader is slower than the compiled shaders, it's purpose is just to have something running so the game doesn't studder while the actual shaders are compiling |
| 19:07:21 | FromDiscord | <muddmaker> And once those have compiled, the engine will switch over to using those |
| 19:07:36 | FromDiscord | <mr_rowboto> In reply to @muddmaker "And once those have": That's a later update. |
| 19:08:59 | FromDiscord | <gesee37> In reply to @mr_rowboto "The great disadvantage of": But it compile once. I'm not a pro of gpu but it seems that evry modification to the object pipeline is like a new compilation ? (Because if it's not that then having all shader beforehand would be enough... no ?) |
| 19:09:36 | FromDiscord | <mr_rowboto> you compile it once while building the rendering pipeline |
| 19:09:49 | FromDiscord | <mr_rowboto> Then you use that compiled GPU-VM for all things. |
| 19:10:25 | FromDiscord | <muddmaker> This is the PR to Godot that introduces the system: <https://github.com/godotengine/godot/pull/53411> |
| 19:10:38 | FromDiscord | <mr_rowboto> and yeah, having all shaders beforehand _would_ be enough, if you could know which they're gonna be |
| 19:10:46 | FromDiscord | <mr_rowboto> but the shaders that are pushed depend on two things: |
| 19:10:48 | FromDiscord | <mr_rowboto> 1- the game |
| 19:10:54 | FromDiscord | <mr_rowboto> 2- the current state of the game |
| 19:11:01 | FromDiscord | <mr_rowboto> (edit) "1- the game ... " added "(of course)" |
| 19:11:42 | FromDiscord | <mr_rowboto> so basically GameCube's model sets a problem in which knowing the combination of shader programs unknowable in reasonable frame-times |
| 19:11:52 | FromDiscord | <mr_rowboto> (edit) "so basically GameCube's model sets a problem in which knowing the combination of shader programs ... unknowable" added "is" |
| 19:12:05 | FromDiscord | <gesee37> In reply to @mr_rowboto "and yeah, having all": And that make it really slow. Well the async compilation seems to complete that.↵My concern now is how I can infer that ubershader from all my shaders in the first place |
| 19:12:23 | FromDiscord | <gesee37> (edit) "it" => "ubershader" |
| 19:12:25 | FromDiscord | <mr_rowboto> In reply to @gesee37 "And that make ubershader": But why would you need it in the first place? |
| 19:12:38 | FromDiscord | <mr_rowboto> do you really have to support async compilation of shaders? |
| 19:13:56 | FromDiscord | <gesee37> In reply to @mr_rowboto "But why would you": Well no stutter... but maybe I'm just extrapolating that dolphin article but if it gets rid of stutter then I'm sold... but if there are other solution (I'm not a master of rendering) then I can explore those |
| 19:15:36 | FromDiscord | <mr_rowboto> you get zero stutter if you know the shaders beforehand |
| 19:15:49 | FromDiscord | <mr_rowboto> which is basically 99.99% of the possible situations |
| 19:16:22 | FromDiscord | <mr_rowboto> unless you're making something like a general purpose game engine that must load shader async to support user content in runtime |
| 19:16:30 | FromDiscord | <mr_rowboto> (edit) "shader" => "shaders" |
| 19:16:49 | FromDiscord | <mr_rowboto> (edit) "you get zero stutter if you know the shaders beforehand ... " added "(you just compile them on load time)" |
| 19:17:31 | FromDiscord | <mr_rowboto> The Shader Permutation Problem is real, but it's a "we're scaling" problem, not a "we're starting off" problem. |
| 19:17:31 | FromDiscord | <gesee37> In reply to @mr_rowboto "unless you're making something": Well i happens I'm making something that way 😭 |
| 19:17:41 | FromDiscord | <gesee37> (edit) "i" => "it" |
| 19:17:50 | FromDiscord | <mr_rowboto> In reply to @gesee37 "Well it happens I'm": :CryInside: |
| 19:19:24 | FromDiscord | <gesee37> In reply to @mr_rowboto "<:CryInside:983038561853009920>": Well... rip then.↵I will see if I can generate a gigashader from base shader... |
| 19:23:53 | FromDiscord | <mratsim> I hav achieved AGI: https://media.discordapp.net/attachments/371759389889003532/1503477768695058484/image.png?ex=6a037e49&is=6a022cc9&hm=d1148e05e96600de46d9bfabb8e2968be30210fc2059521b3050f4c8352a246f& |
| 19:42:15 | * | beholders_eye joined #nim |
| 20:03:19 | * | amadaluzia quit (Ping timeout: 264 seconds) |
| 20:20:16 | * | xutaxkamay quit (Quit: ZNC 1.9.1+deb2+b3 - https://znc.in) |
| 20:21:53 | * | xutaxkamay joined #nim |
| 20:22:40 | * | jjido joined #nim |
| 20:24:44 | * | xutaxkamay quit (Read error: Connection reset by peer) |
| 20:25:12 | * | xutaxkamay joined #nim |
| 20:27:17 | * | jjido quit (Ping timeout: 245 seconds) |
| 20:28:29 | * | xutaxkamay_ joined #nim |
| 20:28:49 | * | xutaxkamay quit (Read error: Connection reset by peer) |
| 20:29:05 | * | xutaxkamay_ quit (Remote host closed the connection) |
| 20:30:41 | * | xutaxkamay joined #nim |
| 20:41:05 | * | jjido joined #nim |
| 20:41:15 | * | xutaxkamay quit (Quit: ZNC 1.9.1+deb2+b3 - https://znc.in) |
| 20:43:00 | * | xutaxkamay joined #nim |
| 20:45:38 | * | xutaxkamay quit (Read error: Connection reset by peer) |
| 20:46:42 | * | xutaxkamay joined #nim |
| 20:47:42 | * | xutaxkamay quit (Client Quit) |
| 20:48:25 | * | jjido quit (Quit: Ping timeout (120 seconds)) |
| 20:48:39 | * | jjido joined #nim |
| 20:49:47 | * | xutaxkamay joined #nim |
| 20:58:06 | * | jjido quit (Quit: Ping timeout (120 seconds)) |
| 20:58:23 | * | jjido joined #nim |
| 21:18:47 | * | xutaxkamay quit (Quit: ZNC 1.9.1+deb2+b3 - https://znc.in) |
| 21:20:49 | * | xutaxkamay joined #nim |
| 21:43:14 | * | rockcavera joined #nim |
| 21:46:18 | * | xutaxkamay quit (Quit: ZNC 1.9.1+deb2+b3 - https://znc.in) |
| 21:48:32 | * | redj quit (Ping timeout: 252 seconds) |
| 21:55:33 | * | xutaxkamay joined #nim |
| 22:06:59 | * | rockcavera quit (Remote host closed the connection) |
| 22:17:51 | * | rockcavera joined #nim |
| 22:22:49 | * | xutaxkamay quit (Quit: ZNC 1.9.1+deb2+b3 - https://znc.in) |
| 22:39:13 | * | xutaxkamay joined #nim |
| 22:46:29 | * | xutaxkamay quit (Ping timeout: 272 seconds) |
| 22:54:04 | * | xutaxkamay joined #nim |
| 23:00:13 | * | xutaxkamay quit (Ping timeout: 276 seconds) |
| 23:01:20 | * | dv^_^ quit (Quit: dv^_^) |
| 23:02:20 | * | xutaxkamay joined #nim |
| 23:03:11 | * | dv^_^ joined #nim |
| 23:05:01 | * | jjido quit (Quit: Client closed) |
| 23:05:15 | * | jjido joined #nim |
| 23:09:15 | * | redj joined #nim |
| 23:15:12 | * | jjido quit (Ping timeout: 245 seconds) |
| 23:15:32 | * | xutaxkamay quit (Read error: Connection reset by peer) |
| 23:16:51 | * | xutaxkamay joined #nim |