Guild icon
DDraceNetwork
Development / developer
Development discussion. Logged to https://ddnet.org/irclogs/ Connected with DDNet's IRC channel, Matrix room and GitHub repositories — IRC: #ddnet on Quakenet | Matrix: #ddnet-developer:matrix.org GitHub: https://github.com/ddnet
Between 2023-12-19 00:00:00Z and 2023-12-20 00:00:00Z
Avatar
5 am, im finally done with 1st site in my life
03:37
hope last
03:37
rate pls
03:37
StA client is an exendeded Teeworlds|DDNet Client
Avatar
wait what
04:33
LERP tee animation?
04:33
what does that mea
04:35
also @-StormAh~ is it alright that i give out thoughts about this client?
Avatar
Avatar
Voxel
LERP tee animation?
Linear interpolation
Avatar
Avatar
Voxel
also @-StormAh~ is it alright that i give out thoughts about this client?
Ofc, go for it
Avatar
on 2560x1440 the buttons arent centered LOL
Avatar
I fixed it already
04:37
Someone reported me when i released it last time
04:38
Cause im planning to done with stat page and only then make a new release
Avatar
23fb026 M Nordrhein-Westfalen, M Borace, M GetSpeed, M run_as_a_pro - ddnet-maps
Avatar
Avatar
Voxel
on 2560x1440 the buttons arent centered LOL
The logo is missing an "r"
Avatar
STA CLIENTR
Avatar
Trollr
Avatar
Avatar
Jupstar ✪
The logo is missing an "r"
Star client?poggers2
Avatar
Avatar
-StormAh~
Star client?poggers2
😏
08:10
Also add ✪
Avatar
I can't
08:11
I haven't sleep almost 2 night
08:11
Let me
08:11
Sleep pepeLost
Avatar
Ok, you can sleep for 10 minutes
08:12
blushWokege
Avatar
BlaiZephyr | meloƞ 2023-12-19 08:14:20Z
how dare he
08:14
stop sleeping - go work
Avatar
alr alr
08:15
1 buf fix
Avatar
Rust needs a 'inline lifetime, that makes sure a reference is only valid for a single expression. Would be cool and useful
Avatar
Avatar
Jupstar ✪
Rust needs a 'inline lifetime, that makes sure a reference is only valid for a single expression. Would be cool and useful
i mean cant u do that with a block {}
09:16
let b = 2; { let b = &b; }
09:16
use shadowing to achieve it
09:16
idk
Avatar
Avatar
Ryozuki
i mean cant u do that with a block {}
I mean e.g. if i return a mut ref from function call
09:16
That you can't truly borrow this result
Avatar
@Jupstar ✪ there is something called fnonce
09:16
The version of the call operator that takes a by-value receiver.
09:16
Instances of FnOnce can be called, but might not be callable multiple times. Because of this, if the only thing known about a type is that it implements FnOnce, it can only be called once.
09:17
idk how u could achieve that u want xd
09:17
but if u can only use the ref inside a fnonce
09:17
maybe its possible
Avatar
Well what i actually want is to return a Ref<'inline, T> Xd
09:18
OnceCell?
09:18
ah no this is to write
09:18
idk
Avatar
Yeah dunno. 2024 edition clearly needs a new rfc 😬
Avatar
well u should explain ur use case in depth
Avatar
Yeah i want to return a borrow_mut. But this is unsafe, in logic sense, in combination with rc because you could end up borrow twice. But if the borrow would end every line+ i have a strict hierarchy of my types => safe af
09:21
Rn i am emulating with by not allowing public types and rewrite the public interface with a proc macro
09:22
Works well, but more hidden logic xdd
09:23
With some inline lifetime i could use deref trait (the inline lifetime also needs other requirements, but too much to list them, e.g. no inline lifetimes twice, or specific evaluation order of calls etc. xd) (edited)
09:23
Would be clean af
Avatar
deref should only be used by smart pointers btw
09:25
Implementing Deref for smart pointers makes accessing the data behind them convenient, which is why they implement Deref. On the other hand, the rules regarding Deref and DerefMut were designed specifically to accommodate smart pointers. Because of this, Deref should only be implemented for smart pointers to avoid confusion. For similar reasons, this trait should never fail. Failure during dereferencing can be extremely confusing when Deref is invoked implicitly. Violating these requirements is a logic error. The behavior resulting from a logic error is not specified, but users of the trait must ensure that such logic errors do not result in undefined behavior. This means that unsafe code must not rely on the correctness of this method.
Avatar
Well mine would be smart wrapper
Avatar
Avatar
Ryozuki
Implementing Deref for smart pointers makes accessing the data behind them convenient, which is why they implement Deref. On the other hand, the rules regarding Deref and DerefMut were designed specifically to accommodate smart pointers. Because of this, Deref should only be implemented for smart pointers to avoid confusion. For similar reasons, this trait should never fail. Failure during dereferencing can be extremely confusing when Deref is invoked implicitly. Violating these requirements is a logic error. The behavior resulting from a logic error is not specified, but users of the trait must ensure that such logic errors do not result in undefined behavior. This means that unsafe code must not rely on the correctness of this method.
Deref docs: expand and remove &quot;smart pointer&quot; qualifier Ready for review This is an unpolished draft to be sanity-checked Fixes #91004 ~~Comments on substance and cont...
09:39
so no smart-pointer it must be fail safe, the wrapper type should not have API collisions
09:39
also should not != must not 😉
Avatar
Avatar
Jupstar ✪
Yeah i want to return a borrow_mut. But this is unsafe, in logic sense, in combination with rc because you could end up borrow twice. But if the borrow would end every line+ i have a strict hierarchy of my types => safe af
Can't you take the mut borrow out of the rc?
Avatar
Avatar
Learath2
Can't you take the mut borrow out of the rc?
what do you mean?
09:44
the whole Rc<RefCell>> would be wrapped in a smart wrapper
09:45
so u can never acess the refcell interface directly
Avatar
Yes that's sort of what I meant
Avatar
i mean i didnt 100% think through the best solution, but i think it would have potential xdd (edited)
Avatar
Or whatever function is returning the mut borrow would take the rc in exchange
Avatar
Avatar
Learath2
Or whatever function is returning the mut borrow would take the rc in exchange
but i can clone Rcs
Avatar
But the refcell wont allow a second mut borrow and enforce it at runtime
Avatar
yes that's exactly what i dislike xD
09:48
at runtime xD
Avatar
Ah you want to avoid the refcell?
Avatar
i want to avoid lifetime (rc) but also the problem of calling borrow_mut twice (refcell)
09:49
i have a solution for this, it's just not nicest to use, bcs it requires adding proc macros to many types.. so it's also not enforced in that sense anyway
09:50
the 'inline would also not enforce it, but it would make my solution more elegant xD
09:51
e.g. if you never have cycling refs (not even with Weak) ,also not by passing Rcs around, you should™️ never have problems and still have the benefits of Rc
09:52
oh and hierarchically it is not allowed to have the same Rc on a child component if the parent has it already
Avatar
Well idk your specifics but there isn't much harm in a refcell if that's the only way to ensure safety that's the only way to do it. It's just 1 branch
Avatar
Avatar
Learath2
Well idk your specifics but there isn't much harm in a refcell if that's the only way to ensure safety that's the only way to do it. It's just 1 branch
you are right and if you have a private field that is a refcell it's relatively safe
09:53
i also try to do it, if i use it. i guess i am in adventurer mode rn xd
09:56
the only problem is smth like this: struct A { r: Rc<...> } struct B { r: Rc<..>, a: A } // same rc as above impl A { fn func() {r.borrow_mut().dosmth}} impl B { fn func() {let borrowered = r.borrow_mut(); a.func(); // panic bcs a and b will borrow_mut at same time }} let b = B::...; b.func(); (edited)
09:56
the 'inline lifetime could also also disallow being passed to a function etc.
09:57
well as said it only works under certain conditions, but it defs help to fuck up less in my case without having to have so many proc macros
10:01
now i am motivated to write test cases for my macro to find some of its limitations thanks for movation 😏
Avatar
Avatar
Jupstar ✪
the only problem is smth like this: struct A { r: Rc<...> } struct B { r: Rc<..>, a: A } // same rc as above impl A { fn func() {r.borrow_mut().dosmth}} impl B { fn func() {let borrowered = r.borrow_mut(); a.func(); // panic bcs a and b will borrow_mut at same time }} let b = B::...; b.func(); (edited)
Yeah this is suboptimal calling the functions while holding a borrow leading to a panic is bizarre feeling
Avatar
its enforcing the borrow checker at runtime
Avatar
Avatar
Ryozuki
its enforcing the borrow checker at runtime
I'm more curious as to how you'd allow this pattern
Avatar
whats the pattern i didnt read i was trying to fix my lalrpop pascal parser :/
10:15
and looking at a token Eof we can reduce to a CommaNoTrailing<"identifier"> but we can also reduce to a SemiColonNoTrailing<RecordSection>
10:15
im dying
Avatar
Technically while a.func() is happening you are already holding a mut ref outside it so it panics, but technically it's sane. The second mut borrow is the only one in scope
10:16
Like a two phase borrow
10:17
You can get rid of the refcell too. I'm just curious how a seasoned rust veteran would structure it
10:19
@Jupstar ✪ is this components and cgameclient btw?
10:19
That's the sort of relationship those have
Avatar
well you can do lot of stuff without Rc<RefCell>. sadly this can always increase complexity, by a lot, bcs u need to pass so much stuff around. Generally i think this isn't even bad, it's just that i want to have some modules be very easy to use
Avatar
generally u want to structure ur code to avoud refcells at all
Avatar
Avatar
Learath2
@Jupstar ✪ is this components and cgameclient btw?
for me it's more the interaction with the graphics component by two or more components
Avatar
Avatar
Ryozuki
generally u want to structure ur code to avoud refcells at all
and still you use all these fancy libs that have a slim api. bcs they internally have Rc or Arcs
Avatar
Avatar
Jupstar ✪
the only problem is smth like this: struct A { r: Rc<...> } struct B { r: Rc<..>, a: A } // same rc as above impl A { fn func() {r.borrow_mut().dosmth}} impl B { fn func() {let borrowered = r.borrow_mut(); a.func(); // panic bcs a and b will borrow_mut at same time }} let b = B::...; b.func(); (edited)
this code doesnt make sense, where do u get r in the B impl block
Avatar
as said, it's a matter of simplicity
Avatar
Yep that works too. So I guess the proper solution is for the components to not hold a ref to the graphics component
Avatar
Avatar
Jupstar ✪
and still you use all these fancy libs that have a slim api. bcs they internally have Rc or Arcs
what libs
Avatar
Avatar
Ryozuki
this code doesnt make sense, where do u get r in the B impl block
it's pseudo code
Avatar
Avatar
Ryozuki
what libs
i dunno, like 90% of the libs allow me to clone their instance of whatever
Avatar
Avatar
Jupstar ✪
i dunno, like 90% of the libs allow me to clone their instance of whatever
Yeah libs wrap their contexts in arcs
Avatar
i hate arguments like that, u cant argue cuz its so vague
Avatar
if you have a tokio runtime, u can just clone it and it's the same instance if you clone some sound lib, you can clone the runtime and it will just work
Avatar
Anyway, why are you arguing? RefCell bad has nothing to do with Arc bad
Avatar
yeah arc is kinda the way to share refs between threads
Avatar
Avatar
Learath2
Anyway, why are you arguing? RefCell bad has nothing to do with Arc bad
well Arc<Mutex> has the exact same problem xD
Avatar
they want to allow send
Avatar
Avatar
Jupstar ✪
well Arc<Mutex> has the exact same problem xD
They don't require runtime borrow checking
Avatar
true, it's even worse there
10:23
dead lock
Avatar
well thats what uget when dealing with MT
10:23
but a arc alone wont deadlock u
10:23
its when u use a lock
10:24
consider refcell like a single thread lock
Avatar
Avatar
Ryozuki
but a arc alone wont deadlock u
yeah, but u cannot use arc and then write an API xd is that a read-only API or what? XD
Avatar
but ucant block xd
Avatar
Avatar
Jupstar ✪
the only problem is smth like this: struct A { r: Rc<...> } struct B { r: Rc<..>, a: A } // same rc as above impl A { fn func() {r.borrow_mut().dosmth}} impl B { fn func() {let borrowered = r.borrow_mut(); a.func(); // panic bcs a and b will borrow_mut at same time }} let b = B::...; b.func(); (edited)
Anyway can we not drift away? How would one solve this? Just establish a hierarchy so you only pass a reference down instead of keeping an Rc everywhere?
10:25
u have try_borrow
10:25
iirc
10:25
u can borrow from the rc on a upper level and pass a plain ref down
Avatar
Avatar
Learath2
Anyway can we not drift away? How would one solve this? Just establish a hierarchy so you only pass a reference down instead of keeping an Rc everywhere?
i mean B can read the rc of A. and if the borrow_mut would be guaranteed inline, without side effects, it would not compile
10:25
so yes, that is kinda my plan
10:26
my problem isn't so much about that you have to redsign this call a bit. it can simply happen without you noticing it
10:26
that's what i dislike about it
Avatar
Yeah, so I guess just don't have multiple references, pass it down instead
10:28
s/references/Rcs/
Avatar
yep, but for the graphic instance it would suck to always pass it around. and i have a usecase where i potentially allow borrowing parts of the graphics api. so if 2 comps have the graphics cloned, this is problem xdd
Avatar
use std::{cell::RefCell, rc::Rc}; struct A { r: Rc<RefCell<String>>, } struct B { r: Rc<RefCell<String>>, a: A, } impl A { pub fn funca(&self) { let _ = self.r.borrow_mut(); } } impl B { pub fn funcb(&self) { let borrowed = self.r.borrow_mut(); self.a.funca(); } } fn main() { let r: Rc<RefCell<String>> = Default::default(); let x = B { r: r.clone(), a: A { r }, }; x.funcb(); }
10:29
ok so this is the code
10:29
it panics on borrow mut
Avatar
thanks for taking the time
Avatar
sadly i dont have much time tho
10:30
i gotta go to office
10:30
and i need to cook my meal
10:30
XD
Avatar
gl
Avatar
Just bite the unsafepill
10:30
Who cares what the borrowchecker thinks. Who is he anyway
Avatar
xdd
10:31
well i'd already be happy to make it harder to fuck up xD
Avatar
Survival of the fittest
Avatar
Avatar
Learath2
Survival of the fittest
true, but if i am an overpowered cyborg, i've higher chances 😬
10:35
so i tune myself
Avatar
You know what would be cool? Some sort of "call stack local" variable
10:41
That way any frame that comes after a frame that mutably borrows something can share that borrow
Avatar
use std::{cell::RefCell, rc::Rc}; struct A { } struct B { r: Rc<RefCell<String>>, a: A, } impl A { pub fn funca(&self, r: &mut String) { r.push('a'); } } impl B { pub fn funcb(&self) { let mut borrowed = self.r.borrow_mut(); self.a.funca(&mut borrowed); } } fn main() { let r: Rc<RefCell<String>> = Default::default(); let x = B { r: r.clone(), a: A{}, }; x.funcb(); }
10:45
btw this is how i would do it
10:45
A simplydoesnt need to hold r
10:45
simply pass the mut ref when it needs on the fn
10:45
it compiles
10:45
now i go to work
10:47
this is why u can usually avoid refcells
10:47
on the second u dont need refcell for B either
10:47
they make life easier on some places and in some are needed ye
Avatar
Avatar
Ryozuki
btw this is how i would do it
Makes sense for this specific tiny example, but I think the point is that there are many As that maybe nested far deeper in hierarchy than in here
Avatar
its hard to say without seeing the whole picture
Avatar
And B may not even be the one that's directly holding A
Avatar
Avatar
Ryozuki
its hard to say without seeing the whole picture
Think CComponent and CGraphics
Avatar
u have to structure things in rust like u would in rust
10:49
not like in java
10:50
this is why i find bevy amazing
10:50
bevy way is the way
10:50
i think its sensible to say, its better to have functions accept references to the objects u need and use them there instead of holding stuff in ur structs
10:51
limit the scope of ur references as much as possible
10:51
idk
Avatar
Avatar
Ryozuki
bevy way is the way
and how is it doing it?
Avatar
the ECS
Avatar
But ECS hardly applies to this situation
10:52
is his design optimal in the first place
Avatar
Well I guess entities could have a sprite component, which the gfx can call render on with a reference to gfx
Avatar
Avatar
Ryozuki
is his design optimal in the first place
i started with passing everything around. My point stands: it's simplicity vs compile time checks
Avatar
design is not just passing all around
Avatar
if you want automatic cleanup of resources on drop, you need a rc of that part of the graphics lib
Avatar
but how u structure all ur code idk
Avatar
else u need destroy manually
Avatar
Avatar
Ryozuki
but how u structure all ur code idk
yes, that's why i tryhard about this problem to not fuck up
Avatar
designing things like this is part of the hard problems in programming
10:55
the other is MT
10:55
owo
Avatar
i defs find my current solution MUCH easier to use, and for an end user easier to not fuck up but it 1. makes the graphics comp harder to implement 2. it still has some smaller holes for potential panics, which is dislike
Avatar
Avatar
Ryozuki
designing things like this is part of the hard problems in programming
You know where it isn't hard? C
10:56
No refcells, no Rcs, no borrowchecking. Just don't forget to free stuff bozo gigachad3
10:57
let's upgrade to c
Avatar
Avatar
Learath2
You know where it isn't hard? C
lots of segfaults
10:58
also he wants to abuse RAII
10:58
if he did manual freeing of resources he could just use a storage
Avatar
RAII is for weak lazy men. Jupstar is big strong man
Avatar
and it would be simple
10:58
in rust too
10:58
honestly i would probs go for some kind of storage
10:59
ecs kinda does that
Avatar
Avatar
Ryozuki
honestly i would probs go for some kind of storage
then the key/index to that storage can be invalid
11:00
i prefer the "if it can exists, it must exist" philosophy brownbear (edited)
Avatar
Avatar
Jupstar ✪
i defs find my current solution MUCH easier to use, and for an end user easier to not fuck up but it 1. makes the graphics comp harder to implement 2. it still has some smaller holes for potential panics, which is dislike
Q: Can't you make sure by some other means that all components die before the gfx one instead of an Rc? Isn't there a hierarchical owner of the gfx component that when dead it doesnt even make sense for the gfx component to live on?
Avatar
Avatar
Learath2
Q: Can't you make sure by some other means that all components die before the gfx one instead of an Rc? Isn't there a hierarchical owner of the gfx component that when dead it doesnt even make sense for the gfx component to live on?
so you want me to use a ptr? 😄
Avatar
I fail to see why one might want the components to be able to keep the gfx component alive if the client itself is gone e.g.
Avatar
Avatar
Learath2
I fail to see why one might want the components to be able to keep the gfx component alive if the client itself is gone e.g.
it don't want or need this actually
11:03
it's simply that resources hold a ref to the graphics comp for automatic cleanup, and i don't want to pass aroud graphics component every time
11:04
i introduced a concept of graphics programs, which should work as if it itself is a graphics implementation
11:04
e.g. the map rendering is not part of the graphics component anymore. engine & game are 100% split
Avatar
Ah, hm that is actually a rather annoying steucture indeed
11:05
Too much thinking for me. I have a bag to pack, cya'll
Avatar
Avatar
Learath2
Q: Can't you make sure by some other means that all components die before the gfx one instead of an Rc? Isn't there a hierarchical owner of the gfx component that when dead it doesnt even make sense for the gfx component to live on?
maybe u could a way would be to have a struct wrapping the gfx with interior mutability and then u pass the outer struct by a plain non mut reference
11:05
rust will make sure the struct outlives conponents holding a ref to that struct
11:06
components just need to hold a ref
11:06
not a mut ref
11:06
aka use interior mutability but hiding the rc in a struct u share by ref
11:07
hmm
11:07
xd
11:07
ok idk
11:07
u then expose the gfx methods via &self
11:07
or whathever
Avatar
xd
11:07
that's indeed what it does, no refcell is public
Avatar
ur code was public
Avatar
in 99% it just works. but sometimes gfx internal components talk to each other. Additionally i have at least one hole where i either pass a closure (harder to use) or have to make sure the graphics api is not in use already
Avatar
Avatar
Ryozuki
ur code was public
well it's very outdated. currently i code so much shit xD can't show this trash
Avatar
Austral is a systems programming language designed for simplicity, maintability and security.
11:12
Austral is a new systems programming language. It uses linear types to provide memory safety and capability-secure code, and is designed to be simple enough to be understood by a single person, with a focus on readability, maintainbility, and modularity
11:12
syntax is odd tho
11:12
ada like
Avatar
Is there the concept of a call stack local variable in any language?
Avatar
please invent one, i want to test it 😄
Avatar
I will craft a language one day. Even if it won't be used by anyone I want to experiment
Avatar
what's a call-stack local variable?
11:20
you mean a global variable? visible to the call stack?
11:20
thread-local variable maybe?
Avatar
Avatar
Learath2
I will craft a language one day. Even if it won't be used by anyone I want to experiment
my company wants to make a lang
11:22
based on rust safety with go simplicity
11:23
inspired by the lang i sent
11:23
linear types
11:23
arent variables stored in the stack anyway
11:23
or register when possible
Avatar
Avatar
heinrich5991
you mean a global variable? visible to the call stack?
A global variable of sorts that would lie in some higher stack frame. Maybe like an export of sorts. With visibility only within that chain of calls until the function who initially exported it returns
11:24
Like passing it down all the way but more ergonomic
Avatar
that's the solution: no stack, no call frames => no problems
11:34
put everything in one big function xdd
Avatar
how can a company just afford to make a lang
11:37
our company doesn't even want us to make our own playercontroller
Avatar
that doesn't sound like a problem of money
Avatar
it is if we need more than a week to make one
Avatar
btw we made our own anyway
11:46
Catxplosion
Avatar
and it sucks now
11:47
stair handling is brokenkek and i dont have time to fix it
11:47
shouldve bought one or steal one
Avatar
Avatar
TsFreddie
it is if we need more than a week to make one
man i really wonder if your companies are really so horrible or if you exaggerate xd
Avatar
Avatar
Jupstar ✪
man i really wonder if your companies are really so horrible or if you exaggerate xd
definitely exaggerate
Avatar
xD
Avatar
but also not?
Avatar
Avatar
Jupstar ✪
that's the solution: no stack, no call frames => no problems
YES
Avatar
it sounds bad
Avatar
Avatar
Jupstar ✪
man i really wonder if your companies are really so horrible or if you exaggerate xd
i just dont like working if you cant tell
11:50
and i think everyone is kinda stupid in the team.owo
Avatar
Avatar
TsFreddie
and i think everyone is kinda stupid in the team.owo
i feel that. the only difference is, that it includes myself 😉
Avatar
owo you're better than me
Avatar
vscode now supports floating windows
11:51
meaning u can move a opened file to second display
Avatar
Avatar
Ryozuki
vscode now supports floating windows
omg
Avatar
ye, thats cool
Avatar
biggest feature
11:51
requested since years
Avatar
now i just need 2 screens so it's worth it
Avatar
i want the sidebar to float tho
Avatar
owo float this
Avatar
cuz the explorer takes half of my vertical screen
Avatar
Avatar
TsFreddie
i want the sidebar to float tho
you can make the sidebar be a bottombar
Avatar
can you now. havent used vscode for quite a while
Avatar
u can drag the icon to some places xd
Avatar
isn't explorer fixed to be on the side.
11:55
anyway i better check myself
Avatar
u gotta drag the explorer icon, then it's not fixed
Avatar
any neovim enjoyers? 😬
Avatar
i know enough vim to close it
11:57
kek
11:58
also i know enough to mess my colleague when one of them actually uses a vim plugin in vscode. i be hitting that I key quicker than him wanting to explain it to me. (edited)
Avatar
I love % and _
Avatar
i love changing my text editor alternatives to not use vim
Avatar
i gotta get my settings back but im lazy af
Avatar
ws-client BOT 2023-12-19 13:39:28Z
<ChillerDragon> @MilkeeyCat what is % and _ and do they work in vanilla vim too?
Avatar
Avatar
ws-client
<ChillerDragon> @MilkeeyCat what is % and _ and do they work in vanilla vim too?
Do you use vim? 😮
13:52
_ goes to first non empty character and % goes to.. eeeh. Opposite character. Like you have { hdhfus } if ur cursor under { and u press % it goes to }
Avatar
rest in piece
Avatar
Windows brownbear
Avatar
Avatar
Sedonya
Windows brownbear
Checked out libs?
14:30
Everything is in place on GitHub and on my PC
14:30
I also tried to fix it with this
14:31
I also wrote git submodule update --init --recursive
Avatar
Avatar
Sedonya
I also tried to fix it with this
Maybe that is the problem
14:32
I never tested it with the sdk xd
14:32
It must be in your path and stuff
14:33
Since our CI isn't failing it should work on Windows
Avatar
Avatar
Jupstar ✪
Since our CI isn't failing it should work on Windows
I'm compiling dfng <3
Avatar
Avatar
Sedonya
I'm compiling dfng <3
Then you can also use -DCLIENT=OFF for cmake, i guess
Avatar
Avatar
Jupstar ✪
Then you can also use -DCLIENT=OFF for cmake, i guess
Avatar
Avatar
Sedonya
Click to see attachment 🖼️
To me that looks like a clear indicator that libs are not checked out
Avatar
maybe xd
14:49
but I didn't change anything in the repository
Avatar
I dunno. Just download the ones from ddnet
14:49
And put them there
14:49
It should: tm: work
Avatar
I solved the problem with connecting to my server, the problem was that I have an ovh anti-ddos and because of this, no one can log in until they establish a direct connection to the server (i.e. until they add it to the hosts file (maybe))
Avatar
baecdb8 Add 100€ donation by Gummibaer12345 - def-
🔥 1
Avatar
@Gummibaer12345 Thank you!
Avatar
Avatar
deen
@Gummibaer12345 Thank you!
Gummibaer12345 2023-12-19 17:24:49Z
:3 Merry christmas to you guys (edited)
owo 1
Avatar
only 45€ missing until 2023 is completely funded!
Avatar
Avatar
Learath2
A global variable of sorts that would lie in some higher stack frame. Maybe like an export of sorts. With visibility only within that chain of calls until the function who initially exported it returns
sounds like a thread-local Option<> to me
Avatar
Avatar
-StormAh~
Linear interpolation
wait arent tees already LERPed?
Avatar
Just a tad too large in scope no?
Avatar
well thread locals are not readable by other threads xd (edited)
18:43
depends if u want to support this, or if that is out of your stack stack frame
18:43
@Learath2 do you like coroutines?
Avatar
Avatar
Voxel
wait arent tees already LERPed?
Uhh, are they?
Avatar
I like the idea of them, but I honestly dont ever think in terms of them nor do many languages support them, so I rarely get to use them
18:48
Maybe if I learn some go
Avatar
Avatar
-StormAh~
Uhh, are they?
yes, otherwise the maximum would be 50 frames per second
18:53
raibow tees
small typo
Avatar
intratick
Avatar
Avatar
-StormAh~
Uhh, are they?
wait then what IS lerped?
Avatar
whats radmin doing on ur website? (edited)
19:02
@-StormAh~
Avatar
Avatar
MilkeeyCat
whats radmin doing on ur website? (edited)
Radmin template
19:05
justatest
Avatar
Avatar
Voxel
wait then what IS lerped?
Means unlocked feets, hammer etc
19:16
That what you can see on this video
Avatar
oh thaat
Avatar
mid map
Avatar
isnt it just the feet and hammer lagging behind 1 frame
Avatar
Avatar
-StormAh~
Means unlocked feets, hammer etc
And this have a lot of bugs, cuz I programmed this troll
19:21
look my vid from 8 years ago
19:21
their feet
Avatar
Avatar
Ryozuki
this feature is not original btw
Ye, this was taken from goreworlds to my client, and from my client to storm client
Avatar
Avatar
Ryozuki
this feature is not original btw
Yeah i saw that somewhere already
19:21
However you can just turn it off
Avatar
the blood is funny
pepesmash 1
monkaS 1
Avatar
Avatar
Mʎɹ シ
Ye, this was taken from goreworlds to my client, and from my client to storm client
githubhehehe
Avatar
i gotta make an offline client so i can just fuck around
19:23
i love the teeworlds engine
19:23
has so much potential
Avatar
I love teewars engine, has so much potential
Avatar
I love teeworlds
19:24
That's all i can say
Avatar
i love rust
19:24
rustworlds*
Avatar
I love asm
Avatar
im blocking you
Avatar
Binworlds*
Avatar
1 blocked message (edited)
Avatar
Blockworlds
Avatar
not like we interact much lately xD
Avatar
i am at peace now
Avatar
good, i can say linux without u answering windows
19:26
:3
Avatar
Avatar
-StormAh~
Means unlocked feets, hammer etc
maybe "fresh animations"
Avatar
Avatar
Patiga
maybe "fresh animations"
Fair, guess i have to rename it
Avatar
Lagging animations
Avatar
The video, featuring a cat named Taters, was sent back from nearly 19 million miles away by NASA’s laser communications demonstration, marking a historic milestone.
🐱 1
19:27
nasa sent a cat video
19:27
to space
19:27
based
Avatar
Avatar
Mʎɹ シ
Lagging animations
cursed*
Avatar
Avatar
Patiga
maybe "fresh animations"
yea
Avatar
BlaiZephyr | meloƞ 2023-12-19 19:31:41Z
call it "cursed_animations_ported_from_Goresworld_to_toilet_to_stormax" (edited)
Avatar
tbh if it was less dramatic itd be cool
Avatar
@Learath2 did u know ocaml has += for type definitions
Avatar
Avatar
BlaiZephyr | meloƞ
call it "cursed_animations_ported_from_Goresworld_to_toilet_to_stormax" (edited)
Imagine how config variables will be named justatest
Avatar
Avatar
Ryozuki
@Learath2 did u know ocaml has += for type definitions
I barely knew ocaml existed
Avatar
BlaiZephyr | meloƞ 2023-12-19 19:34:28Z
Objective Camel!
Avatar
Avatar
Learath2
I barely knew ocaml existed
honestly ocaml is big
19:34
its used to make compilers
19:34
i havent learned it tho
19:34
but the bad thing is it has circular deps problem
Avatar
I would make my compiler in C, don't need no camel
Avatar
Avatar
Learath2
I would make my compiler in C, don't need no camel
BlaiZephyr | meloƞ 2023-12-19 19:35:29Z
you keep on writing rust wrong smh
🤓 2
Avatar
@Learath2 its rly rly easy to make a compilere in ocaml
19:35
i think it falls nicely
19:35
rust was originally made with ocaml
19:35
llvm has oficial bindings in ocaml
Avatar
Avatar
BlaiZephyr | meloƞ
you keep on writing rust wrong smh
The rust lobby has arrived
Avatar
BlaiZephyr | meloƞ 2023-12-19 19:36:42Z
peepoShy
Avatar
the unfunniest group of people ever
Avatar
BlaiZephyr | meloƞ 2023-12-19 19:37:14Z
i mean i dont wanna brag, but i not only enjoy rust... i use arch btw!
Avatar
ok yeah thats my push thank you
Avatar
gentoo here
justatest 1
Avatar
BlaiZephyr | meloƞ 2023-12-19 19:38:01Z
did i just get blocked ._.
Avatar
why do u care
Avatar
BlaiZephyr | meloƞ 2023-12-19 19:38:13Z
true
Avatar
the holy path to rust has obstacles
19:38
now join the church of memory safety
19:39
and confess (tell me ur unsafe uses) to me in the confession box
19:39
justatest
Avatar
Voxel just gone
19:39
XD
Avatar
What??
Avatar
BlaiZephyr | meloƞ 2023-12-19 19:41:00Z
not everyone can be as superior as us rust enjoyers
Avatar
Avatar
BlaiZephyr | meloƞ
i mean i dont wanna brag, but i not only enjoy rust... i use arch btw!
You said rust?
Avatar
witzig witzig
Avatar
Avatar
BlaiZephyr | meloƞ
did i just get blocked ._.
Arch is old news. All the real cool people use gentoo now
Avatar
Avatar
Jupstar ✪
witzig witzig
mentioning zig is a sin here
19:44
😬
Avatar
BlaiZephyr | meloƞ 2023-12-19 19:44:17Z
forgive me Ryozuki for i have sinned
Avatar
The selection is only cleared because it would be incorrect after scrolling, but it doesn't need to be cleared if the scroll position does not change, e.g. when pressing Home while already at the top of the backlog.

Checklist

  • [X] Tested the change ingame
  • [ ] Provided screenshots if it is a visual change
  • [ ] Tested in combination with possibly related configuration options
  • [ ] Written a unit test (especially base/) or added coverage to integration test
  • [ ] Considered pos...
Avatar
ChillerDragon BOT 2023-12-19 20:35:31Z
@MilkeeyCat _ goes to start of line and % does nothing gg
Avatar
ChillerDragon BOT 2023-12-19 20:37:06Z
xd
Avatar
ChillerDragon BOT 2023-12-19 20:38:00Z
isnt zig the new shit that will replace rust?
Avatar
no it has no memor safety
20:38
its hipster C
Avatar
ChillerDragon BOT 2023-12-19 20:38:20Z
wot no memory safety?
20:38
thats so 1999
Avatar
Avatar
ChillerDragon
@MilkeeyCat _ goes to start of line and % does nothing gg
Time to try neovim 🙂
Avatar
ChillerDragon BOT 2023-12-19 20:39:13Z
i tried in neovim too
20:39
same result
Avatar
Wat
Avatar
ChillerDragon BOT 2023-12-19 20:39:28Z
german keyboard layout :p
20:39
🍺
20:39
🇩🇪
Avatar
It's default motions, they have to work xd
Avatar
ChillerDragon BOT 2023-12-19 20:40:12Z
not on my machine
Avatar
Works on ukrainian, russian, czech and english layouts
Avatar
ChillerDragon BOT 2023-12-19 20:40:28Z
i use f<space> for those scenarios i guess
20:40
or f,
20:40
germany issue then
20:42
Do u have config for ur vim on gh? 😮
20:47
chillerdragon: was ur cursor at '{' char when u were pressing %?
21:01
21:01
@Ryozuki @deen
Avatar
Avatar
Jupstar ✪
well thread locals are not readable by other threads xd (edited)
but a callstack usually lives in one thread only, no?
Avatar
Avatar
Learath2
I like the idea of them, but I honestly dont ever think in terms of them nor do many languages support them, so I rarely get to use them
rust too, no?
Avatar
Avatar
heinrich5991
but a callstack usually lives in one thread only, no?
sounded more like a var that lives on the stack somewhere
Avatar
Avatar
Cellegen
Click to see attachment 🖼️
instead of donating 100 euros you should donate 1 euro 100 times and add a different name each time
21:05
troll
Avatar
Avatar
Cellegen
Click to see attachment 🖼️
real pros let the girl die
21:05
😬
Avatar
Avatar
Learath2
I would make my compiler in C, don't need no camel
C seems like the wrong choice, given no ADTs
Avatar
Avatar
cyberFighter
instead of donating 100 euros you should donate 1 euro 100 times and add a different name each time
fuck missed opportunity
21:06
Avatar
BlaiZephyr | meloƞ 2023-12-19 21:14:26Z
is there a specific reasons /showothers only works on the client you activate it on?, if its off and i set it on with /showothers, and switch to dummy, its disabled there
Avatar
there's a technical reason, but no concrete design reason, I guess
Avatar
Avatar
heinrich5991
rust too, no?
Doesn’t rust only have them in nightly?
Avatar
Avatar
heinrich5991
C seems like the wrong choice, given no ADTs
Well I was half jesting. The only reason I would even consider C for a compiler is because something so complex I probably should write in the language I’m most familiar with
Avatar
Avatar
Learath2
Doesn’t rust only have them in nightly?
ah, futures are not co-routine-y enough?
22:12
yes
Avatar
4e76ba8 Add another 44€ donation by Cellegen - def- b58a9d5 Add 45€ donation by Zwelf - def- 397893a Remove donation link - def-
Avatar
@Cellegen Thanks again for the second donation in 2 days!
22:30
@Zwelf Thanks for the donation, you two filled up the missing 45 € kind of at once 😄
😄 1
22:34
7645b32 Fix funding completed for 2023 - def-
Avatar
completely funded 🎉
Avatar
BlaiZephyr | meloƞ 2023-12-19 22:42:00Z
poggers2
Avatar
chillerdragon BOT 2023-12-19 22:53:59Z
ChillerDragon/dotfiles
Replying to @MilkeeyCat Do u have config for ur vim on gh? 😮
22:54
My cursor was in a word I had no { only spaces I thought it also jumps to spaces
22:54
Do I need a literal { ?
Avatar
damn, didn't think it was this easy to leak chatGPT training data
Avatar
Avatar
heinrich5991
ah, futures are not co-routine-y enough?
Oh, hm are they really comparable? I guess a Stream is kinda close but it still lacks the ability to yield to a specific destination
Avatar
Avatar
Learath2
Oh, hm are they really comparable? I guess a Stream is kinda close but it still lacks the ability to yield to a specific destination
can you give a more concrete example? I can .await a future to yield to a specific destination? I guess I don't really know what coroutines are
Avatar
Avatar
heinrich5991
can you give a more concrete example? I can .await a future to yield to a specific destination? I guess I don't really know what coroutines are
Symmetric coroutines allow the callee to dictate where to yield to
Avatar
I only know them in theory aswell, as I said not many languages have them and thus I never really think in terms of them so idk how useful a symmetric coroutine is
23:29
Instead of just yield 5 you get something like yield coro_b 5
23:56
he gone
23:57
oh you made him leave (edited)
23:58
you guys suck
Avatar
Avatar
Ewan
oh you made him leave (edited)
he is still here, you just have a skill issue in hiliting people
Exported 502 message(s)