01:44 < bridge> this doesn't work because then the server cant verify that your password is the same as the one saved in the database 01:45 < bridge> if you take a password which the server doesn't know and apply anything extra in the hash then the server no longer knows anything 01:45 < bridge> if you are just responding with the random string to prevent CSRF then the hash provides no extra security again 01:47 < bridge> the content you send to the server is pretty much always sensitive in this regard 01:47 < bridge> unless the server knows your plaintext password before you sent it 02:08 < bridge> that actually works with zero knowledge proofs ^ 02:08 < bridge> that actually works with zero knowledge proofs ^^ 02:08 < bridge> crypto magic 02:08 < bridge> but I know nothing that implements that 02:09 < bridge> you're correct that everyone is just sending the encrypted password via TLS 02:12 < bridge> C: 02:18 < ws-client> @ryozuki https://www.youtube.com/watch?v=rzXEsactdT4 02:50 < bridge> It's easier on discord so i'll tell you here. First of all since , all static variables should be prefixed with `s_` not `m_`. `m_` is reserved for member variables of a class or struct. The two variables `m_Verified` and `m_VerifyTries` should be member variables of the class `CMenus` in this case. the output of`pGet->Result(cChar, cSize);` is never used anywhere and you don't actually need the result so just remove that. (You can also look at `C 02:50 < bridge> It's easier on discord so i'll tell you here. First of all since , all static variables should be prefixed with `s_` not `m_`. `m_` is reserved for member variables of a class or struct. The two variables `m_Verified` and `m_VerifyTries` should be member variables of the class `CMenus` in this case. the output of`pGet->Result(cChar, cSize);` is never used anywhere and you don't actually need the result so just remove that. (You can also look at `C 02:50 < bridge> It's easier on discord so i'll tell you here. First of all since , all static variables should be prefixed with `s_` not `m_`. `m_` is reserved for member variables of a class or struct. The two variables `m_Verified` and `m_VerifyTries` should be member variables of the class `CMenus` in this case. the output of`pGet->Result(cChar, cSize);` is never used anywhere and you don't actually need the result so just remove that. (You can also look at `C 02:51 < bridge> @mazty 02:51 < bridge> It's easier on discord so i'll tell you here. First of all since , all static variables should be prefixed with `s_` not `m_`. `m_` is reserved for member variables of a class or struct. The two variables `m_Verified` and `m_VerifyTries` should be member variables of the class `CMenus` in this case. the output of`pGet->Result(cChar, cSize);` is never used anywhere and you don't actually need the result so just remove that. (You can also look at `C 02:59 < bridge> discord code review 03:01 < bridge> xd 03:01 < bridge> i fear this small window would delete all my text and randomly close. i don't trust it 03:01 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1270909837118668851/image.png?ex=66b56a85&is=66b41905&hm=f063322a3b8e371c678b7d646d41181107e2f3478551dbc1071db61e45b1473e& 03:02 < bridge> is there a way to maximize it? xd 03:02 < bridge> no but it wont 03:02 < bridge> it doesn't lose your text even if you navigate away 03:03 < bridge> you can also annotate individual lines. if you don't like the review form, you could also leave a normal comment 03:04 < bridge> It's easier on discord so i'll tell you here. First of all since , all static variables should be prefixed with `s_` not `m_`. `m_` is reserved for member variables of a class or struct. The two variables `m_Verified` and `m_VerifyTries` should be member variables of the class `CMenus` in this case. the output of`pGet->Result(cChar, cSize);` is never used anywhere and you don't actually need the result so just remove that. (You can also look at `C 03:04 < bridge> i will sleep gn 03:04 < bridge> nighty night 05:21 < bridge> ok that's hella disrespectful lol 05:22 < bridge> he's taking the time to review ur code and u just say lol 05:22 < bridge> w/e you'll hear the same shit from heinrich and u know it won't get merged unless u fix it 07:44 < bridge> morning fellas hody 07:44 < bridge> morning fellas howdy 07:44 < bridge> Gm 08:22 < bridge> Morning nix enjoyers and others 08:24 < bridge> Perhaps the lol was because discord code review is unusual? 🙃 08:31 < bridge> on my way to becoming godot contributors 08:31 < bridge> their editor seriously needs some UX works 08:33 < bridge> Gm 08:33 < bridge> Gm 08:33 < bridge> norming 08:33 < bridge> Maybe had he followed up addressing any of the issues lol 08:36 < bridge> american bait 08:37 < bridge> is howdy reserved for merica 08:37 < bridge> https://www.darpa.mil/program/translating-all-c-to-rust @ryozuki 08:38 < bridge> ye i sent this some time ago xdd 08:38 < bridge> TRACTOR 08:38 < bridge> Ah, must’ve missed it 08:38 < bridge> im doing something unusual 08:38 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1270994516920504434/image.png?ex=66b5b962&is=66b467e2&hm=d78e82bdaaf2bfcc19b5223bd077d41c22c3fdb2ec60eb1ee7c0c97da6535394& 08:38 < bridge> Us best country 🦅 08:38 < bridge> it's new to me. || (it's not actualy) || 08:39 < bridge> is it written in rust? 08:40 < bridge> *it could be* 08:40 < bridge> https://github.com/valence-rs/valence 08:41 < bridge> awesome 08:41 < bridge> Note: Valence is currently undergoing a major rewrite. See #620 for details. 08:41 < bridge> https://github.com/ddnet/ddnet/pull/620 08:42 < bridge> red flag 08:43 < bridge> whitespace-only diff with word wrap... :justatest: 08:43 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1270995854206963743/IMG_6267.png?ex=66b5baa1&is=66b46921&hm=0cfb3ce8ffcc61bbad480c57415ebc929d69a886f079127363636748234dec8c& 08:56 < bridge> I was the original chillerdragon 09:16 < bridge> ```rust 09:16 < bridge> pub trait ArchitectureClone { 09:16 < bridge> fn clone_box(&self) -> Arch; 09:16 < bridge> } 09:16 < bridge> 09:16 < bridge> pub trait Architecture: ArchitectureClone { 09:16 < bridge> ... 09:16 < bridge> } 09:16 < bridge> 09:16 < bridge> pub type Arch = Box; 09:16 < bridge> 09:16 < bridge> impl ArchitectureClone for T 09:16 < bridge> where 09:16 < bridge> T: 'static + Architecture + Clone, 09:16 < bridge> { 09:16 < bridge> fn clone_box(&self) -> Arch { 09:16 < bridge> Box::new(self.clone()) 09:16 < bridge> } 09:16 < bridge> } 09:16 < bridge> 09:16 < bridge> impl Clone for Arch { 09:16 < bridge> fn clone(&self) -> Self { 09:16 < bridge> self.clone_box() 09:16 < bridge> } 09:16 < bridge> } 09:16 < bridge> ``` 09:16 < bridge> the most "advanced" rust code I've written so far :justatest: 09:19 < bridge> ```rust 09:19 < bridge> pub trait ArchitectureClone { 09:19 < bridge> fn clone_box(&self) -> Arch; 09:19 < bridge> } 09:19 < bridge> 09:19 < bridge> pub trait Architecture: ArchitectureClone { 09:19 < bridge> ... 09:19 < bridge> } 09:19 < bridge> 09:19 < bridge> pub type Arch = Box; 09:19 < bridge> 09:19 < bridge> impl ArchitectureClone for T 09:19 < bridge> where 09:19 < bridge> T: 'static + Architecture + Clone, 09:19 < bridge> { 09:19 < bridge> fn clone_box(&self) -> Arch { 09:19 < bridge> Box::new(self.clone()) 09:19 < bridge> } 09:19 < bridge> } 09:19 < bridge> 09:19 < bridge> impl Clone for Arch { 09:19 < bridge> fn clone(&self) -> Self { 09:19 < bridge> self.clone_box() 09:19 < bridge> } 09:19 < bridge> } 09:20 < bridge> ``` 09:20 < bridge> the most "advanced" rust code I've written so far just to be able to clone trait object :justatest: 09:48 < ws-client> i just tried writing into the `r7` register <:justatest:572499997178986510> 10:05 < bridge> is there any way to make a script for ddnet that will use commands in the console? for example, I want to make it so that when the time changes, my nickname changes for that time 10:06 < bridge> or not allowed? 10:12 < ws-client> @shibastik I am not a lawyer. And this is not legal advice. But ddnet generally bans automating inputs. While usually allowing everything that is possible with the official client. 10:13 < ws-client> One thing that is possible with the official client is using a external scripting language to check the time and then send a console command to the client via fifo 10:13 < bridge> ah ok 10:13 < ws-client> i would not consider changing the nickname "automating inputs" but not sure if that will hold up in court 10:13 < bridge> that is, other clients such as cactus are also banned? 10:13 < ws-client> i do not know cactus client 10:13 < ws-client> wat it do 10:14 < bridge> change visual effects 10:14 < ws-client> thats fine 10:14 < bridge> chillerdragon: how's the asmr client doing? 10:15 < bridge> Anything Not altering gameplay to your Advantage in any way is tolerated for noe, you changing your Name every Minute might be Seen as Spam and If reported could get you muted i guess 10:16 < bridge> can I report tees who change colors when they press a/d 10:16 < bridge> lol no 10:16 < bridge> this is console command 10:16 < bridge> f1 10:16 < bridge> bind 10:16 < bridge> binds 10:17 < ws-client> @milkeeycat im stuck on huffman since a few days 10:17 < ws-client> i now am in the print driven debugging stage but the only bugs i find are in my printers 10:17 < bridge> You have 39272 languages to choose from where someone implemented huffmann :justatest: 10:17 < bridge> understandable 10:18 < ws-client> Yes I mostly look at the official C++ implementation because its closest to assembly @meloƞ 10:18 < bridge> Fair enough 10:18 < ws-client> I slowly get the feeling tho that my asm skills progressed 10:19 < bridge> *tries to write into r7* 10:19 < ws-client> -.- 10:19 < ws-client> i was looking for some register i did not use yet in that function xd 10:19 < ws-client> r7 seemed like a good option 10:19 < bridge> use stack xd 10:19 < ws-client> yeye 10:19 < bridge> or call `malloc` xd 10:19 < ws-client> I actually became more comfortable with using the stack 10:20 < ws-client> no i dont depend on libc 10:20 < ws-client> cuz bloat 10:20 < bridge> milkeey hmu when your language is good enough that i'm able to write huffmann in it 10:20 < bridge> i don't feel comfortable with raw dawging stack 10:20 < ws-client> wait or is malloc a system call? 10:20 < bridge> i always confute top and bottom of the stack xddd 10:21 < ws-client> ye directions are a bit wonkey 10:21 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1271020344160944148/image.png?ex=66b5d170&is=66b47ff0&hm=6118288c09d3c9b5c739e34066c9fd017be6bb7b8095b03c7599fd1e80cbac2b& 10:21 < ws-client> my bigger problem is the maffs 10:21 < bridge> ooooh ye 10:21 < ws-client> + and - of numbers from 1-8 are crazy complicated 10:22 < bridge> @milkeeycat: looks like libc 10:24 < ws-client> @shibastik https://zillyhuhn.com/cs/.1723105363.png 10:24 < ws-client> https://zillyhuhn.com/cs/.1723105406.png 10:24 < ws-client> https://zillyhuhn.com/cs/.1723105423.png 10:24 < bridge> wow 10:24 < bridge> what it this 10:25 < bridge> cool names :justatest: 10:25 < ws-client> me changing my name to "pidor" then changing it 3 seconds later to the current date using a script 10:25 < bridge> wow 10:25 < ws-client> i chose bash as my scripting language but you can also use python or whatever works for you 10:25 < bridge> and how to connect to ddnet? 10:25 < bridge> Its fifo, (File Input File Output) it basically executes what you Send the Client through it, ddnet automatically opens a fifo Server with which you can communicate with it, (Open your Client, Press F1 and Search for fifo 10:26 < ws-client> via fifp 10:26 < ws-client> FIFO 10:26 < bridge> FIIIFO 10:26 < ws-client> put `cl_input_fifo fifofile.fifo` in your config and write to that file from your script 10:26 < bridge> will the tee jump if you use `+jump`? 10:27 < bridge> hard im dont know how 10:28 < bridge> Can batch files be executed from the f1 console? 10:28 < bridge> kinda like cfg files 10:28 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1271022218444406794/image.png?ex=66b5d32f&is=66b481af&hm=c930cb946dbd7f6c6829e4e7261fe74506224ac2ff6a039578f02541159840af& 10:30 < bridge> where im can download visual studio lol? 10:30 < ws-client> @milkeeycat no the + stuff is cursed 10:30 < ws-client> so there is no botting possible with the console. Which is a feature. 10:30 < bridge> :feelsbadman: 10:31 < ws-client> @sans._. yes 10:31 < ws-client> wait what 10:31 < ws-client> not batch files 10:31 < ws-client> i red "ban files" xd 10:32 < bridge> :think_bot: 10:32 < ws-client> the ddnet console can not launch anything other than config files and your browser 10:32 < bridge> You dont need to Code it 10:32 < bridge> (in c++) 10:33 < bridge> true, all you need is neovim :greenthing: 10:33 < bridge> not if I want to learn how to write Python scripts. 10:33 < bridge> and more languages 10:34 < bridge> A Text Editor is all you need, visual Studio is Specialized for the C lang familx 10:34 < bridge> A Text Editor is all you need, visual Studio is Specialized for the C lang family 10:34 < bridge> Get one with LSP Support (vsc, sublime Text) 10:36 < bridge> lol 10:36 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1271024100055191635/image.png?ex=66b5d4ef&is=66b4836f&hm=55bdf8aa6712ba64646bddd8b5d0e51c2b84d019d43ebb4df795f2f983f6ef99& 10:36 < bridge> im silly 10:36 < bridge> :gigachad: 10:36 < bridge> what 10:36 < bridge> im activated idk 10:36 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1271024187364081746/image.png?ex=66b5d504&is=66b48384&hm=3a830697ee8e97ee9a8420662372c4a1ab5aaaf0e8d6cd88a5b14656184f9063& 10:36 < bridge> how to disable it 10:36 < bridge> Ctrl+shift+D 10:36 < bridge> ty 10:43 < bridge> I wrote the cl_input_fifo test.fifo in the console and how to turn it off? 10:44 < bridge> ah 10:44 < bridge> im founded 10:49 < bridge> sounds like you want an `Arc` instead 10:52 < bridge> I guess i can use `Rc`, my program is not multi threaded 10:52 < bridge> that also works 10:54 < bridge> There're just moments when borrow chekers yaps that I can't call a function because value is borrowed from previous call. I just slap `.clone()` 10:57 < bridge> youtube dont work in russia now:( 10:57 < bridge> but the architecture is a thing that shouldn't change over the runtime of the program, right? then `Rc<>` is usually preferable 10:59 < bridge> where to find the scripting manual in ddnet 11:10 < bridge> sadness 11:10 < bridge> lua support when 11:10 < bridge> :)) 11:10 < bridge> someone called the lua police 11:10 < bridge> perhaps 11:11 < bridge> isn't adding lua is basically adding native botting support lol 11:11 < bridge> isn't adding lua basically adding native botting support lol 11:11 < bridge> as long as lua scripts cannot send network packages and alter input 11:11 < bridge> depends on whether you give lua access to input 11:11 < bridge> it can work 11:12 < bridge> but lua suggs 11:12 < bridge> Biggest thing I want for binds is some sort of logic, basic if statements at least 11:12 < bridge> lmao 11:12 < bridge> what's your preferred embedded scipting lang 11:12 < bridge> u want cheating 11:12 < bridge> best is ofc native, but after that wasm 11:12 < bridge> dummy bind gonna be wild after lua 11:13 < bridge> how would that result into cheating? :Thonk: 11:13 < bridge> I just wanna make a fancy ahh bind menu 11:13 < bridge> can you even embed native code? well i guess as dyn lib 11:13 < bridge> you can probably do that with config files today 11:13 < bridge> well what can the if check. 11:13 < bridge> ifs allow jumping 11:13 < bridge> that is already a huge tool 11:14 < bridge> with exec you can probably even do loops 11:14 < bridge> yup 11:14 < bridge> conditional* 11:14 < bridge> is teeworlds console turing complete 11:15 < bridge> yeah theoretically that ofc works. 11:15 < bridge> 11:15 < bridge> i think it might even make sense to allow that for server side mods, bcs it won't loose as much performance to vms, but yeah native is always risky ^^ 11:15 < bridge> Lua is hot tho 11:16 < bridge> you come to lua jail 11:16 < bridge> I do not think so 11:16 < bridge> server issued native infinite loop 11:16 < bridge> your pc is hot running lua, that i agree with 11:16 < bridge> I paid for every transistor. I'll use every transistor 11:16 < bridge> factorio mods :plsnomore: 11:17 < bridge> ah the factario gang 11:17 < bridge> honestly if native is perferred for mod, might as well just start with source code anyway 11:17 < bridge> that game is like 200 years old 11:17 < bridge> they didnt even have wasm back then 11:17 < bridge> xddd 11:17 < bridge> is wasm that much faster? 11:17 < bridge> sure, but it's maybe nice to have hot reloading and shit 11:17 < bridge> wasm is fastest in the west 11:18 < bridge> faster than his shadow 11:18 < bridge> a problem of wasm is that you kinda need a toolchain installed to code with it. with lua, you can start with a text editor 11:18 < bridge> i imagine it still depends on whether you jit it? 11:18 < bridge> i mean u need a lua interpreter 😄 11:19 < bridge> no, lua looses, wasm is king 11:19 < bridge> there was a benchmark site 11:19 < bridge> maybe i find it 11:19 < bridge> but that ships with the game. we should have a similar good story for end users should we add wasm, IMO 11:19 < bridge> https://programming-language-benchmarks.vercel.app/wasm-vs-lua 11:20 < bridge> here it even looses against wasmtime, that isnt even the fastest wasm runtime 11:20 < bridge> vercel 11:20 < bridge> what do you mean? the wasm compiler ofc ships too 11:20 < bridge> oof our company blocked all vercel apps apparently 11:21 < bridge> https://programming--language--benchmarks-vercel-app.translate.goog/wasm-vs-lua?_x_tr_sl=auto&_x_tr_tl=en&_x_tr_hl=en-US&_x_tr_pto=wapp&_x_tr_hist=true 11:21 < bridge> there was a time where that worked :lol: 11:21 < bridge> the end user can just edit a lua script. I'd like a similarly good story for a wasm backend 11:22 < bridge> they can just code wasm 11:22 < bridge> how? edit a binary? 11:22 < bridge> yeah 11:22 < bridge> well, no 11:22 < bridge> yeah but you are just lua fanboy and do your arguments again.. installing rust compiler is ez af 11:22 < bridge> 11:22 < bridge> and as said, the wasm runtime can also host a lua runtime 11:22 < bridge> if u want lua, do it in wasm 11:23 < bridge> is wat runnable or it still needs to be compiled. 11:23 < bridge> wat is text right? 11:23 < bridge> there is a wat feature u can enable 11:23 < bridge> I'm showing that wasm might not be obviously better than wasm in every way 11:23 < bridge> @tsfreddie https://www.assemblyscript.org/ 11:23 < bridge> wasm better than wasm 11:23 < bridge> I'm showing that wasm might not be obviously better than lua in every way 11:24 < bridge> i was just about to ask whether assemblyscript would be losing the point for using wasm since it needs a GC runtime in wasm 11:24 < bridge> you can always find some argument against smth.. i can also ship a full rust compiler with the client.. i just dont do it 11:24 < bridge> bcs installing rust is ez enough 11:24 < bridge> I don't really understand how to write scripts for ddnet in python and what is echo 11:24 < bridge> do you use assemblyscript? I mean you do lot of typescript dont u? 11:24 < bridge> maybe u tested it already 11:24 < bridge> I'm not sure what to do with "you can always find some argument against something". seems pretty much discussion ending 11:25 < bridge> i used it like twice 11:25 < bridge> ever 11:25 < bridge> yes, that is the goal 11:25 < bridge> never start discussions with heinrich. you admitted yourself that you purposely do counter arguments 11:25 < bridge> even if u are not behind them 11:25 < bridge> i think that's how discussion works? 11:26 < bridge> yes, but that is not how getting further works 11:26 < bridge> Hmm in lua you just need the source code and the lua interperter/compiler. what do you need in wasm? 11:26 < bridge> it's not like we are seriously considering adding scripting to ddnet 11:26 < bridge> *right?8 11:26 < bridge> *right?* 11:26 < bridge> well depends on what your goal is. 11:26 < bridge> 11:26 < bridge> if u want to code in cpp or rust, you need a cpp or rust compiler 11:27 < bridge> 😓 11:27 < bridge> i love that people always think heinrich opposes everything. 11:27 < bridge> :justatest: 11:27 < bridge> in this case where do lua and wasm differ? 11:28 < bridge> for the end user: probably lua is easier to handle 11:28 < bridge> wasm is _kinda_ binary. so the goal is to allow many languages 11:28 < bridge> you need a toolchain to compile something to wasm which is additional work for the user. 11:28 < bridge> unless you are a programmer 11:28 < bridge> but you can still compile a lua interpreter to wasm and use that inside your wasm module 😄 11:29 < bridge> so e.g. if we want physics lua intergreation, you can simply do it in rust as you'd do it, and give that wasm module the lua scripts 11:29 < bridge> (not luajit though) 11:29 < bridge> :O 11:29 < bridge> can anyone explain why second way doens't work 11:29 < bridge> 11:29 < bridge> ```rust 11:29 < bridge> fn main() { 11:29 < bridge> let val = Rc::new(0x45u8); 11:29 < bridge> 11:29 < bridge> foo(val.clone()); 11:29 < bridge> } 11:29 < bridge> 11:29 < bridge> fn foo(mut r: Rc) { 11:29 < bridge> Rc::get_mut(&mut r); // can 11:29 < bridge> r.get_mut(); // cant 11:29 < bridge> } 11:29 < bridge> ``` 11:29 < bridge> also lua kinda acts as a twofer since ts2lua exists 11:29 < bridge> it's quite popular for dota modding 11:30 < bridge> but with wasm i can code my shit in rust 11:30 < bridge> *kinda* being the keyword 11:30 < bridge> and dont need to learn this ugly language 11:30 < bridge> biased 11:30 < bridge> you can just do server mod in rust as a dyn lib yourself tho 11:30 < bridge> https://doc.rust-lang.org/std/rc/struct.Rc.html#method.get_mut 11:30 < bridge> if you know rust and native i think you would just do that 11:30 < bridge> it takes `&mut Rc` as an argument, not `&mut self` 11:30 < bridge> i mean i see wasm2lua 11:30 < bridge> shit 11:31 < bridge> purge github 11:31 < bridge> but in any way, now completely unrelated 11:31 < bridge> the hardest part isnt even lua or wasm 11:31 < bridge> it's what kind of modding you want 11:31 < bridge> true 11:32 < bridge> languages are just easier for bikeshedding 😦 11:32 < bridge> chatgpt explain bikeshedding 11:32 < bridge> you can do your modding to have many entry points for modding. like in every function. 11:32 < bridge> 11:32 < bridge> Or do it module wise (like a whole physics module), that is kinda what i choose 11:32 < bridge> hmm I think a good/proper? use case for lua is for scripted/programmable configuration files. how would that in wasm? (the only thing I have that uses lua is my window manager awesomewm which is powerful exacltly because it uses lua and you can pretty much update/code/prorgramm the wm on the *fly*) 11:32 < bridge> https://en.wiktionary.org/wiki/bikeshedding 11:32 < bridge> you can probably go even further and only export some generic components like graphics 11:33 < bridge> scripting config/command kinda sounds like it'll create the most insane dummy binds 11:33 < bridge> i mean in the end, whatever calls the lua stuff must export/import/share memory with the lua scripts 11:34 < bridge> and that is also what you do in wasm 11:34 < bridge> you know, dota modding requires you to use both js and lua. :justatest: 11:34 < bridge> just that you cannot directly share it. at least the wasm runtime cannot read host memory 11:35 < bridge> and valve's own css/xml but those are not programming langauges so i won't mention them || ah shoot i did didn't it || 11:35 < bridge> what do they need css for 11:35 < bridge> UI 11:36 < bridge> and that is what they allow to mod? 11:36 < bridge> source 2's panorama UI framework is html-like 11:36 < bridge> you do server side lua script and if you need UI interactions stuff you code client-side panorama user interface 11:36 < bridge> ah now i get it 11:36 < bridge> nice 11:37 < bridge> i always wonder how secure these self made solutions are 11:37 < bridge> and dota modding community made both typings in typescripts, one for ts2lua, one for regular old js 11:38 < bridge> https://www.cvedetails.com/vulnerability-list/vendor_id-13641/LUA.html 11:38 < bridge> no rust no trust 11:38 < bridge> 11:38 < bridge> that is what ryo would say 11:38 < bridge> i think valve is pretty ok on handling securities? 11:38 < bridge> i would hope so 11:38 < bridge> no, not at all 11:39 < bridge> :justatest: 11:39 < bridge> a friend of mine reported a 1-click RCE in CS:GO, and valve ignored him for years 11:39 < bridge> you got some serious friends there 11:39 < bridge> or valve is just really shit at security 11:40 < bridge> any detail on that RCE 11:40 < bridge> would be interesting to know 11:40 < bridge> not sure if that's fixed already, so no 11:41 < bridge> 11:41 < bridge> still kinda wanna to know valve people 11:41 < bridge> they seem 11:41 < bridge> valve 11:41 < bridge> they are leaking some steam 11:42 < bridge> 11:43 < bridge> well, for example, I wrote a python script and how do I import it to ddnet 11:43 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1271040989347188849/image.png?ex=66b5e4aa&is=66b4932a&hm=956d0cdc11395aaa57a8001366e5a2f7f0b71fc8d1c50ebf705014b64bb02d38& 11:43 < bridge> I'm sorry I'm silly 11:43 < bridge> you can't there isn't such thing 11:43 < bridge> you can't, there isn't such thing 11:43 < bridge> ddnet does not support python 11:43 < bridge> what support? 11:44 < bridge> and what does it support? 11:44 < bridge> ah, found a writeup for the thing I thought about: https://secret.club/2021/04/20/source-engine-rce-invite.html 11:44 < bridge> basically, you had to accept an invite to play CS:GO 11:45 < bridge> then the inviter had RCE on your computer 11:45 < bridge> thanks 11:45 < bridge> it seems to be patched. I still wouldn't trust valve's security after this 11:46 < bridge> i was about to say at least steam seems secure, then you dropped the RCE that exploit source using steam 11:46 < bridge> :think_bot: 11:49 < bridge> huh 11:49 < bridge> are you some kind of AI? 11:49 < bridge> we talk about modding and you suddenly come with a shitty python script 11:50 < bridge> what exactly do you want 11:50 < bridge> you can code ddnet in C++, mostly 11:50 < bridge> not python 11:50 < bridge> jupeey it was so good writing rust after cpp 11:51 < bridge> explicit copies && implicit moves >>>>> implicit copies 11:51 < bridge> yea, I also like that about rust 🙂 11:51 < bridge> that is defs top tier 11:51 < bridge> as well as using stuff like rayon easily 11:51 < bridge> for the love of god someone teach me rust already. my brain is not working just reading the book. 11:52 < bridge> feel you 11:52 < bridge> not sure what the "huh" says. RCE means that the attacker can do anything on your computer 11:52 < bridge> just code something small in rust 11:52 < bridge> take some cpp loops 11:52 < bridge> 11:52 < bridge> convert them to idiomatic rust 11:52 < bridge> 11:52 < bridge> then add par_iter to it. then u learned rust 11:52 < bridge> no it was like "huh, they really could let it happen with just one invite, smh" 11:53 < bridge> ah ^^ 11:53 < bridge> in general what works for me is the need to use programming languages and in this case rust else I just don't see the need/use of the things I read and in turn don't learn them 11:53 < bridge> too much for 3 symbols i know xd 11:53 < bridge> if nintendo games has ACE in it does that means they are bad at security too 11:54 < bridge> not that NES and SNES have internet connection or anything 11:54 < bridge> for non-internet connected stuff, security is usually not important for the end user 11:54 < bridge> it often even only works against the end user 11:54 < bridge> ACE stuff is cool tho 11:54 < bridge> yup 🙂 11:57 < bridge> oh, im blind 😬 11:57 < bridge> Тут есть русские? 11:58 < bridge> @milkeeycat why do you need `Rc::get_mut` 11:58 < bridge> i forgot whether i said it already, but i think wasm and all the metering thing crypto bros made for wasm, it would be pretty good to make a "fantasy console" that runs wasm 11:58 < bridge> although wasm doesn't really have interrupt so it might be hard to simulate a retro feel even with all that timing jank 11:58 < bridge> perhaps `Rc` was the wrong suggestion to you. I thought `dyn Architecture` doesn't change after it was created? 11:58 < bridge> although wasm doesn't really have interrupt so it might be hard to simulate a retro feel with all that timing jank 11:59 < bridge> the WASM stack is also not writable with arbitrary memory writes. so in some sense, it's more protected than usual architectures 11:59 < bridge> Help me I was banned by mistake what should I do? 11:59 < bridge> #✉-create-a-ticket → ban appeal 11:59 < bridge> > The inherent methods of Rc are all associated functions, which means that you have to call them as e.g., Rc::get_mut(&mut value) instead of value.get_mut(). This avoids conflicts with methods of the inner type T. 11:59 < bridge> oops 11:59 < bridge> 🫶🏽 12:00 < bridge> whatver, I just saw this line and thought it's possible to call it like foo.get_mut() 12:00 < bridge> and was trying to make it work xd 12:00 < bridge> it does allow you to allocate a linear memory buffer for it to act like it's RAM tho? i think that's the part that feels like a console to me, a encloused memory buffer where you can just backup and restore like a emulator so easily. 12:00 < bridge> u can also mutably modify your stuff and then move it into Rc 12:01 < bridge> but once it is inside the reference counter u must be careful 12:01 < bridge> count of 2 means u cannot get it mutable anymore 12:03 < bridge> not sure if it allows dynamic allocation these days. it used to only allow you to declare hwo much linear memory you want to have for the entire lifetime of your program 12:03 < bridge> but that's literally a retro console? 12:03 < bridge> ah, well then 🙂 12:04 < bridge> they think about multi memory instances. but 1. llvm has no support for it, 2. it defs increases complexity. 12:04 < bridge> 12:04 < bridge> But that could give some performance speedups 12:05 < bridge> like put random jank in a line memory buffer. write some code that treats first few kb as PPU VRAM, next few kb as sound chip data. pull from that every frame to display and produce sound. then run a wasm in that memory space, then wasm is just the ROM. 12:06 < bridge> like put random jank in a linear memory buffer. write some code that treats first few kb as PPU VRAM, next few kb as sound chip data. pull from that every frame to display and produce sound. then run a wasm in that memory space, then wasm is just the ROM. 12:06 < bridge> 12:07 < bridge> i mean in the end that is what real ram kinda does too xd 12:07 < bridge> 12:07 < bridge> so everything is a console? Xd 12:07 < bridge> also, Architecture has methods which take `&mut self`, because it has buffer which it write to generated code 12:08 < bridge> also, Architecture has methods which take `&mut self`, because it has buffer which it writes generated code to 12:08 < bridge> ah, then `Rc` was probably the wrong suggestion to you, unless you want ot make that buffer a parameter 12:08 < bridge> i mean making a fantasy console is probably just how you layout the memory and what limitation do you intentionally impose i guess. like PICO-8 12:09 < bridge> but PICO-8 runs lua which basically it is a retro console that has infinite heap memory which is meh 12:09 < bridge> but PICO-8 runs lua which basically mean it is a retro console that has infinite heap memory which is meh 12:10 < bridge> mh i can only tell you that modern wasm allows normal allocations.. it's the VMs task to deal with it 12:10 < bridge> there is a max RAM parameter, but other than that you dont notice it 12:10 < bridge> or llvm task 12:10 < bridge> ah. there's dynamic allocation nowadays? 12:10 < bridge> @flockes_fussel thank you very much ❤️ 12:10 < bridge> weird 12:11 < bridge> you just compile your rust code and it works xdd 12:11 < bridge> 12:11 < bridge> so yes 12:11 < bridge> i thought wasm reads/writes on a fixed byte buffer 12:11 < bridge> it's not like u have to use no_std or smth 12:11 < bridge> it's linear memory 12:11 < bridge> but it can increase 12:11 < bridge> grow 12:11 < bridge> just don't let it grow then 12:11 < bridge> :justatest: 12:12 < bridge> you can probably do anything in the runtime. which is what i imagine what you need to do to impose limitations. 12:13 < bridge> it would probably just means you need to make sure compiler does not treat "important" part of the linear memory as heap 12:13 < bridge> if it can't grow and you use data structures like Vec. it will simply panic i guess 12:14 < bridge> if you want it to be like embedded, then `no_std` 12:14 < bridge> i imagine rust would make itself a heap in the linear memory, the memory is limited but rust can make the heap grow in that limited space until it crashes? 12:14 < bridge> good luck xd 12:15 < bridge> sure, it's just like a normal program 12:15 < bridge> it is a normal program 12:15 < bridge> if you out of ram, you're doomed 12:15 < bridge> that's literally what ROMs are? 12:15 < bridge> the linux kernel improves rust's ability to handle OOM 12:15 < bridge> it's quite cool 🙂 12:15 < bridge> how exactly? 12:16 < bridge> download ram 12:16 < bridge> assemblyscript has compile options to make sure it's runtime does not touch anything in a specific memory regin 12:16 < bridge> assemblyscript has compile options to make sure it's runtime does not touch anything in a specific memory region 12:16 < bridge> i think rust might have that too? 12:16 < bridge> ah but that is only for "security", i guess? 12:16 < bridge> i dont think so 12:16 < bridge> using unsafe you can read anything u want 12:16 < bridge> is it? i thought it was for sharing existing buffer data 12:16 < bridge> ofc only from the gust memory 12:16 < bridge> ofc only from the guest memory 12:17 < bridge> the linux kernel wants to be able to handle OOM situations, since it wants to use rust in the kernel, rust gets new facilities for handling OOM 🙂 win-win 12:17 < bridge> and of course assemblyscript and just create unsafe pointer willynilly 12:17 < bridge> the host can always read the guest memory, other way around never. 12:17 < bridge> 12:17 < bridge> Or what do you mean? 12:17 < bridge> maybe i dont understand you 12:17 < bridge> ah, that way 12:17 < bridge> ye sounds reasonable 12:17 < bridge> you can put data when you create that memory buffer 12:18 < bridge> "sharing", like you put them there. 12:18 < bridge> so it's kinda a read-only buffer? 12:18 < bridge> wasm can still overwrite them i believe 12:19 < bridge> it's just a initial state 12:19 < bridge> so it's simply to pre-allocate memory? 12:19 < bridge> isn't it always like that 12:19 < bridge> at least in browser 12:19 < bridge> i dunno why assemblyscript has such concept, but i don't think it's related to wasm directly 12:20 < bridge> maybe they just want to act like some javascript runtime 12:20 < bridge> allocate 2gb ram 12:20 < bridge> and never use it 12:20 < bridge> :justatest: so you can just create unsafe pointer for specific purposes? 12:21 < bridge> it's just raw memory, do whatever you want kinda thing 12:21 < bridge> well unsafe inside a wasm module means, u can destroy the module itself 12:21 < bridge> but not the host 12:21 < bridge> it's raw wasm memory 12:21 < bridge> not limited to assemblyscript obviously 12:21 < bridge> it's fake memory xD 12:21 < bridge> i kn 12:21 < bridge> i know 12:21 < bridge> but isn't that perfect for simulating a console's memory 12:21 < bridge> :justatest: 12:21 < bridge> wait why am I the one talking about wasm. i should be the one that knows nothing about it 12:23 < bridge> well maybe i never understood your initial idea of a console. but yeah, just see wasm as, do whatever you want. 12:23 < bridge> 12:23 < bridge> You can also exec a vulkan driver inside it. but that doesnt mean it can communicate with real hardware 12:23 < bridge> lmao 12:23 < bridge> so you can also simulate a console or whatever 12:25 < bridge> what i'm thinking is there are some virutal chips that read/writes a set region of memory for specific purposes, like a controller writing state in a region, a PPU/GPU that reads in another region. Then run a wasm in that fixed memory space along with those two piece of real-time code ("virtual chip lmao"), and you have a game console 12:25 < bridge> not like writing a emulator in wasm 12:26 < bridge> the wasm binary itself is the game rom. but there are other things interacting with the same memory space. could be some separate wasm program or javascript. 12:27 < bridge> if you mean that the controler writes to a memory region on the host, then no 12:27 < bridge> if you mean it writes to a memory region of the wasm runtime, then yes. 12:27 < bridge> 12:27 < bridge> 12:27 < bridge> and yes then the rom could directly read from that address 12:28 < bridge> if we want everything in wasm. then we have a wasm that reads the VRAM and spits out image, another wasm that reads the audio region and spits out PCM, another wasm that writes user input into another region. then the application user "insert" a wasm binary as the game rom. 12:29 < bridge> lmao wtf are you trying to invent xD 12:29 < bridge> an emulator that isnt an emulator 12:30 < bridge> :justatest: well i guess for performace it would be better if the first three is the same wasm, but again, i think a wasm binary could just be a game rom. 12:30 < bridge> but emulates all hardware 12:30 < bridge> it's like an emulator but not the emulator itself compiled into wasm. it's a emulator that "runs" wasm. 12:30 < bridge> 12:31 < bridge> i can tell you what: 12:31 < bridge> wasm allows to import host c functions 12:31 < bridge> the VRAM reader could as well be implemented in javascript. but the game rom, like the game cartridge, is just a wasm binary. 12:31 < bridge> so you can directly communicate with the real hardware 12:31 < bridge> i don't care about that 12:32 < bridge> of course i know you can just do everything in wasm 12:32 < bridge> but that's not what i'm saying 12:32 < bridge> lol 12:32 < bridge> Hello, is the full version of ddnet mobile released? 12:32 < bridge> sub to #announcements 12:33 < bridge> @tsfreddie i honestly don't understand what you try to say, sry. maybe someone else gets your genius idea. Maybe you should write a blog: "wasm is just a game console" 12:34 < bridge> i would read 12:34 < bridge> i don't even think it is a genius idea 12:34 < bridge> :justatest: 12:34 < bridge> i just think it would a cool toy 12:38 < bridge> -- Me wanting to vent/say something 12:38 < bridge> -- Me just thinking about it and never saying it 12:39 < bridge> I wrote your invisible messages 12:39 < bridge> were good read 12:39 < bridge> i read* 12:39 < bridge> ;) ty 12:39 < bridge> I read your invisible messages 12:39 < bridge> I think for games in general to be more interesting/immersive there should be proper feedback 12:41 < bridge> When i dream about modding of teeworlds. 12:41 < bridge> 12:41 < bridge> I want to see infection class by kaffeine without any client side limitations. 12:41 < bridge> Not bcs i love infection soo much. Just too see how much better it would be, and how much it would differ from standard teeworlds. 12:41 < bridge> Imagine as an example (not for game per se but the concept is the same) that you control your mouse cursor with gloves (there would be the control/input and haptic feedback) 12:41 < bridge> just invent nerve gear 12:41 < bridge> You can do that with a mouse right? up/down + left/right easy enough 12:41 < bridge> i buy 12:42 < bridge> ye I buy too 12:42 < bridge> nerve gear vr mmo waifus 12:42 < bridge> now image you would want to control 2 mouse cursors 12:42 < bridge> :justatest: 12:42 < bridge> you could add a mouse cursor to your screen and another mouse 12:43 < bridge> but now you have to keep track of 2 cursors with your eyes 12:43 < bridge> have u ever played star wars with xbox kinnect? xd 12:43 < bridge> and it keeps getting harder/impossible the higher you go 12:43 < bridge> nope 12:43 < bridge> i'll search it up once i finish ;) 12:44 < bridge> now lets say that with each finger you would control a cursor (up/down is big bend and right/left is small bend) 12:45 < bridge> but most muscle memory works by doing smth you already done. 12:45 < bridge> 12:45 < bridge> So maybe the amount of cursors doesnt really matter. just the complexity of the task 12:45 < bridge> 12:45 < bridge> or smth like that 12:45 < bridge> the feedback would pull/push on the bigbend/smallbend 12:45 < bridge> u know meta quest supports hand gestures 12:45 < bridge> so if you have your cursor on center it would push/pull 0,0 12:45 < bridge> u can use finger as cursor 12:45 < bridge> and pinch to click 12:46 < bridge> but he wants some kind of feedback 12:46 < bridge> ;) 12:46 < bridge> but what is your end goal 12:46 < bridge> doesnt the feedback depend on what you play for example 12:47 < bridge> now if you go on up,right it would pull 1,1 for eg 12:47 < bridge> https://cheriot.org/cheri/2024/08/06/how-to-talk-about-CHERI.html 12:47 < bridge> if you go down,left it would push -1,-1 12:48 < bridge> now you have feed back which isn't exact but that's not the main point. The main point is to easily perceive your enviroment/cursors 12:48 < bridge> now let's extend that example to something else for eg a piano trainer or smt 12:49 < bridge> you have 10 fingers so you could say 10 cursors 12:49 < bridge> it would pull/push each finger to a position and to play/train you would just need to "relax" your fingers to go to 0,0 12:49 < bridge> so you want an exoskelett to help you? 12:50 < bridge> hmm I don't want it for piano so I don't think it as helping 12:50 < bridge> but yeah 12:50 < bridge> it's basically exoskelleton to provide feedback 12:50 < bridge> ok invent that, i buy 12:50 < bridge> :) I am buying too 12:50 < bridge> nice 12:51 < bridge> imma write a minimum proof of concept this weekend. i feel motivated. 12:51 < bridge> 😂 12:51 < bridge> only because i want to show you what i mean. the only motivation 12:51 < bridge> also the games that you could make if you had such "easily understood" feedback are vast 12:51 < bridge> :owo: 12:51 < bridge> perfect reason 12:52 < bridge> the problem is probably that the hardware is not accessible enough. 12:52 < bridge> 12:52 < bridge> Like i dont want to spend 2k for guitar hero 12:52 < bridge> xd 12:52 < bridge> like I was discussing with zogtib how you would a 3d game inspired by teeworlds work 12:53 < bridge> 3d hook game with exoskelett, epyc 12:53 < bridge> spiderman 3d 12:53 < bridge> 3d teeworlds again? 12:53 < bridge> and I was thinking you could have the center of mass of the dee (dee = 3d tee) move when you want to walk/jump 12:53 < bridge> might as well call it deen already 12:53 < bridge> my brain can't think in 2d and I like teeworlds xD 12:54 < bridge> so basically to do a jump maybe you could tap a button move your center of mass forwards and tap jump 12:54 < bridge> but that way you only have 1 foot which is represented by 2 visually 12:55 < bridge> to actually control 2 feet you'd have to have another axis input (like mouse and not keybaord wich is key/button input) 12:56 < bridge> weird question, is there bitarray in rust. 12:57 < bridge> i bet you can find 2000 crates that do that 12:57 < bridge> thanks my dude 12:57 < bridge> i dunno if that exist in the std tho 12:57 < bridge> never used that 12:58 < bridge> idk why i only have motivation when i don't sleep for two days 12:58 < bridge> the problem with having only one foot is; what happens when you are between 2 walls? as you can only control one foot you couldn't rest one feet on one wall and the other on the other and then jump upwards 12:58 < bridge> weird 12:58 < bridge> https://docs.rs/bit-vec/0.8.0/bit_vec/ 12:58 < bridge> https://docs.rs/fixedbitset/0.5.7/fixedbitset/ 12:58 < bridge> alright alright i get it 13:27 < bridge> I'm writing an integration for a platform, I just got the api docs, the endpoint to GET a listing of products is a POST endpoint 13:28 < bridge> The endpoint that changes the state of an order is a GET endpoint 13:28 < bridge> REST moment 13:28 < bridge> GET fucked haha 13:29 < bridge> :xDe: 13:30 < bridge> That’s impressive! Which friend? 13:34 < bridge> might make sense for complex filter queries. 13:35 < bridge> in the payload 13:35 < bridge> lmao 13:35 < bridge> graphql apis > anything else 13:35 < bridge> ¯\_(ツ)_/¯ 13:35 < bridge> Well we have query params for that, but this api doesn't take a payload anyway 13:36 < bridge> then lol 13:36 < bridge> It's just a POST request because idk their api architect was doing crack 13:36 < bridge> I have seen and done GET for everything. I also saw apis that consistently used POST for EVERY endpoint. But swapping GET and POST is just trol 13:37 < bridge> vmware apis are great, can recommend 100% 13:38 < bridge> lmfao 13:39 < bridge> https://tsunami.gov/events/PHEB/2024/08/08/24221000/2/WEPA40//WEPA40.txt 13:40 < bridge> ``` 13:40 < bridge> ZCZC 13:40 < bridge> WEPA40 PHEB 080908 13:40 < bridge> TSUPAC 13:40 < bridge> 13:40 < bridge> TSUNAMI MESSAGE NUMBER 2 13:40 < bridge> NWS PACIFIC TSUNAMI WARNING CENTER HONOLULU HI 13:40 < bridge> 0906 UTC THU AUG 8 2024 13:40 < bridge> 13:40 < bridge> ...PTWC TSUNAMI INOFRMATION STATEMENT SUPPLEMENT 13:40 < bridge> 13:40 < bridge> 13:40 < bridge> **** NOTICE **** NOTICE **** NOTICE **** NOTICE **** NOTICE ***** 13:40 < bridge> 13:40 < bridge> THIS MESSAGE IS ISSUED FOR INFORMATION ONLY IN SUPPORT OF THE 13:40 < bridge> UNESCO/IOC PACIFIC TSUNAMI WARNING AND MITIGATION SYSTEM AND IS 13:40 < bridge> MEANT FOR NATIONAL AUTHORITIES IN EACH COUNTRY OF THAT SYSTEM. 13:40 < bridge> 13:40 < bridge> NATIONAL AUTHORITIES WILL DETERMINE THE APPROPRIATE LEVEL OF 13:40 < bridge> ALERT FOR EACH COUNTRY AND MAY ISSUE ADDITIONAL OR MORE REFINED 13:40 < bridge> INFORMATION. 13:40 < bridge> 13:40 < bridge> **** NOTICE **** NOTICE **** NOTICE **** NOTICE **** NOTICE ***** 13:40 < bridge> 13:40 < bridge> NOTE UPDATED MAGNITUDE. 13:40 < bridge> 13:40 < bridge> 13:41 < bridge> PRELIMINARY EARTHQUAKE PARAMETERS 13:41 < bridge> --------------------------------- 13:41 < bridge> 13:41 < bridge> * MAGNITUDE 7.1 13:41 < bridge> lmao 13:41 < bridge> this type of text reminds me of games 13:42 < bridge> https://www3.nhk.or.jp/nhkworld/en/news/backstories/3509/ 13:42 < bridge> :justatest: 13:43 < bridge> pray for Japan 13:43 < bridge> Also they have all parameters passed in the path or in payloads, except a single parameter that is passed in a header for no reason 13:43 < bridge> sounds awesome 13:53 < bridge> get rekt 13:57 < bridge> `"imei_number": false` YES 13:58 < bridge> My favourite 13:58 < bridge> ```go 13:58 < bridge> type Product struct { 13:58 < bridge> IMEINumber bool `json:"imei_number"` 13:58 < bridge> } 13:58 < bridge> ``` 13:58 < bridge> I wonder what happens if there is an actual imei number, will it send a string? 13:59 < bridge> It also sends `null` sometimes, idk when 13:59 < bridge> I asked a guy on work to review my pr, he said that 100 loc change too much and he doesn't how what a pr is :pepeW: 14:01 < bridge> I asked a guy on work to review my pr, he said that 100 loc change too much and he doesn't know what a pr is :pepeW: 14:06 < bridge> when no imei_number :troll: 14:06 < bridge> :justatest: 14:07 < bridge> im about to get my first real job 14:07 < bridge> on a factory :justatest: 14:11 < bridge> is it auth-related? you'd usually not pass auth-related stuff via the path AFAIK 14:12 < bridge> nope, it's just a filter 14:13 < bridge> I'm guessing they are intercepting it early for load balancing 🙃 14:13 < bridge> HR called me to ask if I can adjust my mental and physical state to be more normal 14:14 < bridge> like if I WANT to have insomnia and I WANT to be sad. 14:14 < bridge> :justatest: 14:14 < bridge> If you are sad, don't be sad 14:14 < bridge> if you are poor, just be rich 14:15 < bridge> fake it till you make it 14:15 < bridge> just be normal and quit 14:16 < bridge> they said if i want to leave early then we can schedule a meeting to figure out when. 14:16 < bridge> 14:16 < bridge> LOL 14:17 < bridge> i don't think figure out when and leave early can coexists 14:29 < bridge> @reitw https://bughunters.google.com/blog/6303226026131456/a-deep-dive-into-cve-2023-2163-how-we-found-and-fixed-an-ebpf-linux-kernel-vulnerability 14:38 < bridge> I'll read it at home cuz very interesting. I've heard they've made a fuzzer for eBPF. Fuzzing with ebpf is way harder as the verifier always kick your ass if you do shit 14:42 < bridge> a cas from a i64 to a i32 can lose the sign info? 14:42 < bridge> cast* 14:43 < bridge> in C it'd be implementation defined 14:43 < bridge> U got tsunami alerts? Xd 14:43 < bridge> Wrong reply omg 14:43 < bridge> no 14:44 < bridge> ok so in llvm ir it probs loses it 14:44 < bridge> im not refering to rust 14:44 < bridge> ah 14:44 < bridge> no idea then 14:44 < bridge> https://llvm.org/docs/LangRef.html#trunc-to-instruction 14:44 < bridge> how does rust ensure it? 14:45 < bridge> ah nvm 14:45 < bridge> downcasts with `as` are bitcasts in rust 14:45 < bridge> no special semantics seem to be written, so I'd guess you do lose the sign bit 14:58 < bridge> yup we can lose the sign in rust https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=58302e8dcf428e92b536b929d0797d96 15:01 < bridge> one should probably almost never use as and instead use `try_into`/`try_from` or `into`/`from` as appropriate 15:01 < bridge> unfortunately, `usize::from(u32)` does not work in rust (I don't like it, IMO, they should add it) 15:02 < bridge> are there platforms where usize is 16 bit? 15:02 < bridge> yes 15:03 < bridge> but IMO, the impl simply not exist on these platforms, but exist everywhere else 15:03 < bridge> (I'm fine with not having `usize::from(u64)` on 64-bit platforms) 15:03 < bridge> ```rust 15:03 < bridge> #[cfg(target_pointer_width = "16")] 15:03 < bridge> impl usize { 15:03 < bridge> uint_impl! { 15:04 < bridge> Self = usize, 15:04 < bridge> ActualT = u16, 15:04 < bridge> SignedT = isize, 15:04 < bridge> NonZeroT = NonZero, 15:04 < bridge> BITS = 16, 15:04 < bridge> MAX = 65535, 15:04 < bridge> rot = 4, 15:04 < bridge> rot_op = "0xa003", 15:04 < bridge> rot_result = "0x3a", 15:04 < bridge> swap_op = "0x1234", 15:04 < bridge> swapped = "0x3412", 15:04 < bridge> reversed = "0x2c48", 15:04 < bridge> le_bytes = "[0x34, 0x12]", 15:04 < bridge> be_bytes = "[0x12, 0x34]", 15:04 < bridge> to_xe_bytes_doc = usize_isize_to_xe_bytes_doc!(), 15:04 < bridge> from_xe_bytes_doc = usize_isize_from_xe_bytes_doc!(), 15:04 < bridge> bound_condition = " on 16-bit targets", 15:04 < bridge> } 15:04 < bridge> widening_impl! { usize, u32, 16, unsigned } 15:04 < bridge> midpoint_impl! { usize, u32, unsigned } 15:04 < bridge> } 15:04 < bridge> ``` 15:04 < bridge> in a perfect word yes. but as is simply easier to type xd 15:05 < bridge> e.g. i tried a bit with fixed point numbers in rust. but always converting with to_num from_num really gets annoying 😄 15:05 < bridge> I guess the only solution to that is deprecating `as` eventually. I hope rust does that 15:05 < bridge> they're adding all the necessary functionality for that to happen 15:05 < bridge> at least they're adding all the necessary functionality for that to happen 15:06 < bridge> it's why I have this module in libtw2: https://github.com/heinrich5991/libtw2/blob/f5e0b925bac09114a5f7e19ff7391de00c1a0a4d/common/src/num/cast.rs#L242-L273 15:06 < bridge> is there a twlib1 15:07 < bridge> it allows me to do `.i64()` on a 32-bit integer 15:07 < bridge> to cast it losslessly to `i64` 15:07 < bridge> is there a libtw1 15:07 < bridge> just to annoy jupstar into more typing? 😄 15:07 < bridge> rip 15:07 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1271092521191215104/image.png?ex=66b614a8&is=66b4c328&hm=000a68da50749d5fa732e0ef897eb4de3e298cc9353f31fff6e70424fcef96c1& 15:07 < bridge> or `.assert_u16()` on an `i32` to `u16`, crashing if it doesn't fit 15:08 < bridge> i often upcast 32bit to usize 15:08 < bridge> and i often convert enums to usize 15:08 < bridge> apparently 15:08 < bridge> to make the correct solution the shortest, yes 15:08 < bridge> `old build target other data` that's a whole ass sentence 15:08 < bridge> rust tries to do that, a lot 15:08 < bridge> it's one of the failings of C++, honestly 15:09 < bridge> make the safe method longer to type than the UB-inducing 15:09 < bridge> `.at()` vs `[]` 15:09 < bridge> both are solving it wrong, break backcompat, implement the good behaviour with the good syntax 15:09 < bridge> hello i want a bump arena allocator, 15:09 < bridge> the bump arena allocator at home: 15:09 < bridge> std::pmr::monotonic_buffer_resource 15:09 < bridge> rust does? 15:10 < bridge> `[]` for the non-UB variant 15:10 < bridge> `.get_unchecked()` for the UB variant 15:10 < bridge> in rust 15:10 < bridge> How hard would it be to add pre-processing to chat messages? 15:10 < bridge> but then `as` could also just panic if type doesnt match 15:10 < bridge> 15:10 < bridge> bcs index out of bounds does that too 15:10 < bridge> Easy 15:11 < bridge> but iirc it was correct from the start. My comment was about how mistakes in the original language are rectified 15:11 < bridge> yes, but changing semantics of this is probably a bad idea. people have been trained to understand what `as` does, so it should probably not change semantics 15:11 < bridge> Then could something be added so you don't have to struggle to type names with russian characters and instead use their id 15:11 < bridge> with editions they can a bit 15:11 < bridge> something like {id} which gets processed into their name 15:11 < bridge> C++ doubles down on this in new standards. they actively create new stuff where the UB path is a lot easier than the non-UB path 15:11 < bridge> You mean in the official client? Probably not 15:11 < bridge> why's that? 15:12 < bridge> Complexity 15:12 < bridge> Politics 15:12 < bridge> you just said it'd be easy xd 15:12 < bridge> That's a very C++ thing to do 15:12 < bridge> not really here though. that's a subtle shift of semantics. they could deprecate the thing across an edition, but making it change semantics sounds bad 15:12 < bridge> sure, but tbh most ppl use it in good faith.. like if they do i32 to f32. they also expect the f32 to hold your number. 15:12 < bridge> 15:12 < bridge> so the cases where it's not the case is at least not that often 15:12 < bridge> Easy to code. And by that I mean whatever interpreted into what preprocessing chat means xd which could mean anything 15:12 < bridge> what new thing are you talking about btw? 15:12 < bridge> Not everything that is easy to code ends up being released 15:13 < bridge> e.g. parallel modification to the file system is UB 15:13 < bridge> like WTF 15:13 < bridge> i hate filesystems 15:13 < bridge> ill probably figure it out myself... in a few years 15:13 < bridge> why is it still so hard to work with them 15:13 < bridge> but that's just the very first thing that came to mind. I didn't actually have any exampels when I said that 15:13 < bridge> cant wait to have a brain fart and figure out how to make my own client so i can add qol things like that 15:14 < bridge> parallel as in race? 15:15 < bridge> @sans._.: why not use tab completion for Russian names? Worked well for me so far 15:15 < bridge> https://en.cppreference.com/w/cpp/filesystem 15:15 < bridge> The behavior is undefined if the calls to functions in this library introduce a file system race, that is, when multiple threads, processes, or computers interleave access and modification to the same object in a file system. 15:15 < bridge> this is just ridiculous 15:15 < bridge> scrolling thru 60-ish russian names isn't fun and i cant/dont know how to go back if i missed the name i want 15:15 < bridge> they should add wrappers for filesystem: 15:15 < bridge> 15:15 < bridge> Mutex, RwLock 15:15 < bridge> xd 15:16 < bridge> it relies on the good will of compiler writers to not abuse the UB 15:16 < bridge> but compiler writers have not shown good will in the past 15:16 < bridge> You can and you can also start from the last name using shift+tab 15:16 < bridge> hm, is it actually? I can't imagine two threads racing to rename a file ending in sane behaviour 15:16 < bridge> UB means the compiler is allowed to erase your hard disk 15:16 < bridge> Russian names are usually last 15:16 < bridge> So it’s not a lot of tabbing 15:17 < bridge> Especially if they include one Latin character you can type 15:17 < bridge> to optimize out a program entirely that calls filesystem functions from two threads simultaneously 15:17 < bridge> like C++ learned exactly nothing 15:17 < bridge> you can't write multi-threaded, filesystem accessing, standards-conforming programs like this 15:17 < bridge> they usually dont 15:18 < bridge> unspecified file system result, okay. permission to shred your computer? no 15:18 < bridge> Give shift+tab a try if you never used it it will have a big impact @sans._. 15:18 < bridge> Is it not fine when you are properly synchronizing? 15:18 < bridge> steam overlay? 15:18 < bridge> am i missing something 15:18 < bridge> Oh no steam user detected 15:19 < bridge> you want to synchronize all file system access across your whole progrma? show me one program that achieves this 15:19 < bridge> that's just ridiculous and so anti-C++ 15:19 < bridge> C++ wants to go fast 15:19 < bridge> sue me :kekw: 15:19 < bridge> they don't want to lock their entire process when doing FS operations 15:19 < bridge> Not all, with how I read it I need to synchronize accesses to a given file system object 15:19 < bridge> Well I can’t help you then sorry @sans._. gotta ask other steam users how they cope with that 15:20 < bridge> how would you make sure that no library of yours touches the same file as you do? that's simply impossible 15:20 < bridge> it's like the shit with having `exit` thread-unsafe. but at least it seems they're willing to fix that… 15:20 < bridge> why not specify that this can lead to bad results **for this file object**? 15:20 < bridge> and not delete your hard disk? 15:20 < bridge> wg21 does some insane things but I can't imagine them doing something this stupid, that's why I'm a bit uncertain 15:21 < bridge> something what stupid? 15:21 < bridge> im guessing there's no f1 command i can bind to another button which does whatever shift+tab does for non-steam client? 15:21 < bridge> im guessing there's no f1 command i can bind to another button which does whatever shift+tab does for non-steam clients? 15:21 < bridge> can you try ctrl-shift-tab? 15:21 < bridge> without f1 binds 15:21 < bridge> All multi-threaded programs using `std::filesystem` being UB 15:22 < bridge> I can write a trivial program using multi-threading and `std::filesystem` that is not UB 15:23 < bridge> what I'm claiming is that writing large programs with this API is not possible, because you can't guarantee what the API wants you to guarantee 15:23 < bridge> Actually as written it kinda implies just using `std::filesystem` at all even in single threaded contexts might be UB. It says nothing about an external program introducing a file system race 15:23 < bridge> > at all even in single threaded contexts might be UB 15:23 < bridge> correct 15:23 < bridge> if other programs interfere 15:23 < bridge> it's just completely bonkers 15:23 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1271096571416678400/e.mp4?ex=66b6186e&is=66b4c6ee&hm=21872246afbe223671cc06caaba7750094e3d77182a6465f231318e78a955e05& 15:24 < bridge> it just adds another anme 15:24 < bridge> it just adds another name 15:24 < bridge> but filesystem operations are always racy, even if not UB. isnt that already shitty enough 15:25 < bridge> i dont feel like rust offers me anything to feel safe 15:25 < bridge> This is so insane that I'm starting to wonder if maybe I've known a wrong definition for UB all along 😄 15:26 < bridge> "safe"-ish fs operations are possible, but I don't think any language offers them, you'll need to use OS functionality for it 15:26 < bridge> rust offers most of them. which do you want? 15:26 < bridge> the most trivial one, exclusive file creation is definitely covered, e.g. 15:27 < bridge> Is there some wrapper that allows me to avoid a TOCTOU between checking a file exists and opening? 15:27 < bridge> is there even smth like a file lock? 15:27 < bridge> no wrapper, but you can just open the file (which is also what you'd do with syscalls AFAIK) 15:28 < bridge> Is `O_NOCREAT` exposed? 15:28 < bridge> Is `O_CREAT` exposed? 15:28 < bridge> Like can I not pass `O_CREAT` to `open(2)`? 15:29 < bridge> I guess those are the only things I need commonly 15:29 < bridge> you want to open a file read-write, but not create it? 15:29 < bridge> Yes 15:29 < bridge> that exists, yet 15:30 < bridge> If exists, open for rw, if not I want to do sth 15:30 < bridge> `OpenOptions::new().read().write().open("filename")` 15:30 < bridge> If exists, open for rw, if not I want to do sth else 15:30 < bridge> `OpenOptions::new().read(true).write(true).open("filename")` 15:31 < bridge> Nice 15:31 < bridge> `openat2(2)` also has some cool functionality with regards to symlinks 15:34 < bridge> yup. I don't think it's exposed to rust yet 15:34 < bridge> also not sure if all the OSs support it tbh. rust also exposes some OS-specific APIs, but I like using the OS-agnostic ones better 15:51 < bridge> https://github.com/bearcove/merde_json 16:03 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1271106603843584024/GUdhFFGXcAA6_xj.png?ex=66b621c6&is=66b4d046&hm=4a46dea71dfcc8e62db5fd3d590aad105f72b59da4491eabd513f7d4f207f592& 16:05 < bridge> nowadays we do have generics :Celebrate: 16:05 < bridge> using canadian aboriginal syllabics? 16:05 < bridge> Na 16:05 < bridge> [] 16:59 < bridge> https://blog.rust-lang.org/2024/08/08/Rust-1.80.1.html 16:59 < bridge> https://en.wikipedia.org/wiki/Jump_threading 17:22 < bridge> ryo does rust have variadic generics, except variadics crate 17:23 < bridge> iirc no 17:23 < bridge> rust huge L 17:23 < bridge> no proper proposals though 17:24 < bridge> its because its unsafe 17:24 < bridge> iirc 17:24 < bridge> https://www.reddit.com/r/rust/comments/jrlf7p/why_doesnt_rust_have_varargs/ 17:24 < bridge> > or every "why doesn't Rust have..." question, the answer is either this or "the feature you want is dangerous and here's why". Personally, I'd call varargs a little bit of both. The C version is ridiculously unsafe. A safe implementation of it would probably not be usable in no_std context, which would be pretty out of character for the language, I'd say. 17:25 < bridge> > for every "why doesn't Rust have..." question, the answer is either this or "the feature you want is dangerous and here's why". Personally, I'd call varargs a little bit of both. The C version is ridiculously unsafe. A safe implementation of it would probably not be usable in no_std context, which would be pretty out of character for the language, I'd say. 17:26 < bridge> https://github.com/rust-lang/rfcs/issues/376#issuecomment-830034029 17:27 < bridge> thinking about makign a chip-8 emulator in rust http://devernay.free.fr/hacks/chip8/C8TECH10.HTM 17:41 < bridge> I don’t see any inherent reason as to why variadics would be unsafe 17:44 < bridge> not varargs but variadic generics 17:44 < bridge> it seems they just couldn't come up with *rusty* design 17:47 < bridge> @gerdoe u can do anything with macros 17:48 < bridge> yeah 17:48 < bridge> https://system76.com/cosmic 17:49 < bridge> i think this was made in rust 17:49 < bridge> just got released 17:53 < bridge> is there a name for `char` in type `char***`? 17:54 < bridge> data type 18:26 < bridge> ye but i don't really want (A, (B, (C, (D, (E, (F, (G, (H, (I, ))))))))) 18:27 < bridge> i wonder understand 18:27 < bridge> with macros you can create a completely new type 18:27 < bridge> i dont understand 18:28 < bridge> i wanted to shorten interface of my helper struct that is just collection of different configuration structs 18:29 < bridge> and so i wondered if i can just add `, ...` and use variadic generics 18:29 < bridge> i could imagine you could write a macro that can do that 😄 18:30 < bridge> but yeah dunno. maybe you can better create multiple helper structs. 18:30 < bridge> 18:30 < bridge> It doesnt seem that your helper struct is working with the config structs anyway, or does it? 18:40 < bridge> @gerdoe dunno what u doing, but maybe the problem is already that u need a collection of configurations as generic... like can you not build whatever is configured by your structs directly. 18:40 < bridge> 18:40 < bridge> Or if your configuration structs use a trait, maybe you can simply use non-generics, dyn trait, for now and think about that problem later 19:10 < bridge> @learath2 :happy: 19:10 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1271153458145394740/image.png?ex=66b64d69&is=66b4fbe9&hm=2e5a3e56c96c519d13c010448a6d04cd5ef909d9fd9cd8bc908a3bed3466bb5f& 19:16 < bridge> Did you try with larger than u8? Very common thing to mess up 20:08 < bridge> it returns 255, so it seems to work :DDDD 20:08 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1271168168378765364/image.png?ex=66b65b1c&is=66b5099c&hm=28128927b5eafcb78c6ddbce1773a99eaca6551ec8f2e8ce09b9f27ba525f574& 20:09 < bridge> Try heterogenously, with different types of different widths 20:47 < bridge> I.. don't understand xd 20:48 < bridge> Pick different sized variables 20:48 < bridge> u8 & u16? 20:49 < bridge> Yes 20:49 < bridge> Throw in a 32 too 20:49 < bridge> i don't have 32bit integer :lol: 20:49 < bridge> and wat do I do with the values? 21:24 < bridge> yo 21:24 < bridge> can i ask 21:24 < bridge> or dm a dev 21:24 < bridge> dont ask to ask, just ask 21:25 < bridge> (: 21:25 < bridge> bro so much ppl curse in this game 21:25 < bridge> and i have proofs 😎 21:26 < bridge> HEY 21:26 < bridge> for that, please use #✉-create-a-ticket, if it's a feature proposal, use #town-hall or the github issue page: https://github.com/ddnet/ddnet/issues 21:27 < bridge> what 21:27 < bridge> for that, please use #✉-create-a-ticket. If it's a feature proposal, use #town-hall or the github issue page: https://github.com/ddnet/ddnet/issues 21:28 < bridge> your message indicates you want to either: report someone, discuss a way to handle this, or have a way to handle this better 21:28 < bridge> your message indicates you want to either: report someone, discuss a way to handle this, or you have a way to handle this better and wan't to propose that 21:28 < bridge> where can i report then? 21:29 < bridge> #✉-create-a-ticket <- click here, and press "report" 21:31 < bridge> does rust run example code? -.- (in `///`) 21:32 < bridge> but what if he left the serv 21:41 < bridge> How do you even store pointers if you don't have types up to 64b? 21:42 < bridge> as tests ye 21:42 < bridge> it can store a pointer but there's no type i/u 32/64 xd 21:42 < bridge> add no_run 21:42 < bridge> i just remove examples 21:42 < bridge> examples for noobs 21:42 < bridge> no u can add \```no_run 21:46 < bridge> Does C have any limitation for casting pointer types? 21:47 < bridge> I mean, is there cases when C compiler will be like "nop, you can't cast this pointer type to that pointer type" 21:49 < bridge> strict aliasing 21:50 < bridge> but 21:50 < bridge> it's just UB 21:50 < bridge> it will usually compile 21:50 < bridge> the compiler will compile 21:50 < bridge> ill just allow any casts 21:50 < bridge> ez clap 21:51 < bridge> :justatest: 21:51 < bridge> if you shoot yourself in the foot, your problem, we no rusting here 21:52 < bridge> ig i need a little more context 21:52 < bridge> thats a major footgun 21:52 < bridge> just don't cast wat makes no sense 21:55 < bridge> i guess there are some obvious scenarios where it's expressly disallowed 21:55 < bridge> > The conversions not listed here are not allowed. In particular, 21:55 < bridge> 21:55 < bridge> there are no conversions between pointers and floating types 21:55 < bridge> there are no conversions between pointers to functions and pointers to objects (including void*) 21:55 < bridge> > The conversions not listed here are not allowed. In particular, 21:55 < bridge> there are no conversions between pointers and floating types 21:55 < bridge> there are no conversions between pointers to functions and pointers to objects (including void*) 21:56 < bridge> ``` 21:56 < bridge> The conversions not listed here are not allowed. In particular, 21:56 < bridge> 21:56 < bridge> there are no conversions between pointers and floating types 21:56 < bridge> there are no conversions between pointers to functions and pointers to objects (including void*) 21:56 < bridge> ``` 21:56 < bridge> 22:01 < bridge> i meant any casts between pointers 22:03 < bridge> it actually feels so nice when it works as expected and doesn't spit out 3 pages long panic backtrace :justatest: 22:09 < bridge> i mean 22:10 < bridge> > there are no conversions between pointers to functions and pointers to objects (including void*) 22:11 < bridge> i don't even know what is an object is in this context xd 22:44 < bridge> anything that isn't a function 22:44 < bridge> maybe primitives are excluded from that terminology actually 23:04 < bridge> 2003... if we had mod support completly written in lua that would be cool af ngl 23:04 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1271212396760793200/image.png?ex=66b6844d&is=66b532cd&hm=087abe13cabaa4e2af76e086977d57d96e8967049e853717d050a9b4a62ff742& 23:05 < bridge> it'd be cool as long as it's nothing like bam 23:05 < bridge> i remember it being weird and obtuse 23:05 < bridge> but maybe that's just down to age 23:05 < bridge> bam was decent, chillerdragon still simps for it 23:05 < bridge> but i never really used it so i can't give any statements on it really, i just had to use it to compile and build the old blockworlds source a few times :D 23:09 < bridge> bam is very easy to use though 23:10 < bridge> i remember it caring about where the bam executable is 23:11 < bridge> but yeah lua rocks 23:11 < bridge> there's a reason it's used by gmod and roblox and whatnot 23:11 < bridge> and factorio :justatest: 23:14 < bridge> It's kinda slow tho 23:16 < bridge> <_gwendal> Hello I'm stupid and figure out where https://master1.ddnet.tw/ddnet/15/servers.json went :justatest: 23:16 < bridge> <_gwendal> or is it just down ? 23:16 < bridge> <_gwendal> Hello I'm stupid and can't figure out where https://master1.ddnet.tw/ddnet/15/servers.json went :justatest: 23:17 < bridge> <_gwendal> ah i got it 23:17 < bridge> <_gwendal> ddnet.tw doesn't work anymore it seems 23:17 < bridge> it does, website was down for a few seconds :P 23:17 < bridge> <_gwendal> I still can't load any .tw page 23:17 < bridge> <_gwendal> but can load every .org 23:17 < bridge> odd - works for me 23:18 < bridge> <_gwendal> D: 23:18 < bridge> <_gwendal> on my server .org doesn't work neither 23:18 < bridge> <_gwendal> on my server .tw doesn't work neither 23:23 < bridge> maybe it's dns cache 23:23 < bridge> rly depends 23:23 < bridge> <_gwendal> nerd 23:23 < bridge> i'm scared to clear it, i always type ddnet.tw 23:24 < bridge> <_gwendal> me too :feelsbadman: 23:24 < bridge> <_gwendal> end of an era.. 23:25 < bridge> as long as the integral game logic/exgensive parts are not written in lua then there shouldnt be perf issues 23:26 < bridge> luajit is also several times faster even when using the interpreter 23:27 < bridge> though most of those gains are for when you arent interfacing with a C api or w/e 23:28 < bridge> but iirc it has its own FFI interface which is faster 23:28 < bridge> u got options 23:30 < bridge> but i'd imagine lua itself is faster than even most scripting languages OOTB 23:30 < bridge> I'm a fan of java/C# nodding paradigms 23:30 < bridge> I'm a fan of java/C# modding paradigms 23:32 < bridge> those presumably both have high runtime overhead 23:32 < bridge> but idk 23:32 < bridge> depends on the game 23:32 < bridge> Idk why you would really care about runtime overhead 23:33 < bridge> why wouldn't you 23:33 < bridge> Idk, you can spare 200mb of ram to run a single game on your pc 23:33 < bridge> If it means the game is faster 23:33 < bridge> the game probably wouldnt be faster 23:34 < bridge> The overhead is there to increase speed at the cost of space 23:35 < bridge> but is it actually faster 23:35 < bridge> Faster than Lua? Yes 23:35 < bridge> Also you can an entire language 23:35 < bridge> Also you get an entire language 23:36 < bridge> i can see c# being faster in certain situations 23:36 < bridge> If you're running tons of processes on a server where the overhead matters then sure you can care about kt 23:36 < bridge> If you're running tons of processes on a server where the overhead matters then sure you can care about it 23:37 < bridge> the only way i would be ok with either of those languages in a modding scenario is if they were pre-compiled 23:37 < bridge> sux cus both java and c# do have the means to generate native code but they are p nonstandard 23:37 < bridge> That's usually how it works 23:38 < bridge> c# and java don't generate native code 23:38 < bridge> They are compiled to bytecode 23:38 < bridge> java uses bytecode which is interpreted by the jvm, c# uses IL which is interpreted by the runtime 23:38 < bridge> but thats not native 23:39 < bridge> see .net AOT and graalvm native image 23:39 < bridge> Yeah but you can just use the runtime 23:39 < bridge> It's still fast 23:39 < bridge> need benchmarks 23:39 < bridge> i dont know if it would be faster than luajit 23:40 < bridge> Dude there's like a billion of those on the internet 23:40 < bridge> lua is already very fast 23:41 < bridge> not afaik 23:41 < bridge> java vs lua vs c#? sure 23:41 < bridge> bytecode java vs compiled java vs IL C# vs compiled C# vs lua vs luajit in a modding scenario? 23:42 < bridge> if u can find smth similar i'd be stoked but i generally dont think those two would be any faster than lua. esp considering this (often) means the game itself it made in java or c# 23:42 < bridge> people almost exclusively use bytecode java and C# IL 23:42 < bridge> rght 23:43 < bridge> right 23:43 < bridge> factorio does not even use luaJIT last I checked 23:43 < bridge> nope 23:43 < bridge> it uses lua lua 23:44 < bridge> fwiw lua itself is compiled to bytecode in a similar manner to c# and java 23:45 < bridge> but it simply has fewer requirements & burdens 23:45 < bridge> lots of C# and java speed increases are due to higher level optimizations but if you used them as a supplement to a c/cpp engine i believe it would suck hard 23:46 < bridge> like im p sure there's a reason ppl mostly just use the JNI on android 23:50 < bridge> if the game is made in C# or java you hardly even need to think about modding when making the game. Even a first party mod loader is optional. but if you make your made in a natively compiled language and don't include a ton of modding apis then it will never get a significant amount of mods. 23:51 < bridge> All the games with the biggest modding communities are because the game itself was made in a language that makes modding easy 23:51 < bridge> It's way more fun to mod those games 23:52 < bridge> well 23:52 < bridge> are we talking strictly about modding or just any user content playable within the game? 23:52 < bridge> strictly modding yes 23:52 < bridge> hmm 23:53 < bridge> like i said gmod and roblox both use lua for all of their user created content but that's not technically modding 23:53 < bridge> but generally game mods dont use APIs which are exposed by the game first hand 23:53 < bridge> then it's not really a mod 23:54 < bridge> roblox is not really a fair example, it's basically a game engine that uses lua 23:54 < bridge> i mean minecraft modding didnt get near good or performant until the past like 5 years 23:54 < bridge> according to who? 23:54 < bridge> ppl had to go thru 5 different mod loaders until it was good 23:54 < bridge> what 23:54 < bridge> come on now 23:55 < bridge> u ave played modded mc right 23:55 < bridge> u have played modded mc right 23:55 < bridge> yeah? 23:55 < bridge> show me the other games where you can load 300 mods at once that have good performance 23:55 < bridge> thats not what i mean 23:55 < bridge> 1.12/forge packs run like dog shit. newer fabric/paper stuff sucks way less 23:56 < bridge> but it took years to get there 23:56 < bridge> it was perfectly playable idk what you mean 23:56 < bridge> mc is not inherently easier to mod just bcs it uses java 23:56 < bridge> is my point 23:58 < bridge> Lua is flexible in Terms of dynamic loading and unloading, which makes it Generally great to Mod big Games Like GTA V or Red dead Redemotion 2