#🪅-progaming
1 messages · Page 73 of 1
i mean isn't it kinda silly expecting ppl who chat in #🪅-progaming daily not to know two most popular languages 
and the other one is well
the other one is java
Head to https://brilliant.org/CodeBullet/ to start your free 30-day trial, and get 20% off an annual premium subscription.
BUY GAMER SUPPS https://gamersupps.gg/Codebullet
USE CODE: CODEBULLET to get 10% off
Twitter: https://twitter.com/code_bullet
Patreon: https://www.patreon.com/CodeBullet
Discord: https://discord.gg/UZDMYx5
Art created b...
Roie
Roie
i watched that already 
at least half of it and then my attention span couldnt handle it anymore
@valid jetty did you rework your error handling
and location
i dont wanna have to keep putting location into ever enum and struct
depends what timeframe youre referring to
is it not horror now
you cant inherit with rust lol
mine is kinda horror
oh no it is
just now location is a range instead of a single position
probably like half my loc are error handling
so i can properly make the compound location for bigger expressions
like make it generic take a whatever and a location would that not work
before the loc only ever pointed to a single token
you can do that with a proc macro yea
interpreter.rs: Lines 54-88
ExpressionKind::Call { function, argument } => {
let function_name = function.get_identifier_name().ok_or(Error::with_help(
ErrorKind::InvalidToken,
function.location.clone(),
format!("Expected Identifier, got {:?}", function.kind),
))?;
let function_value =
self.environment
.borrow()
.get(&function_name)
.ok_or(Error::new(
ErrorKind::UndeclaredFunction,
function.location.clone(),
))?;
match function_value {
Value::Function { parameter, body } => {
let parameter_name = parameter.get_identifier_name().ok_or(Error::new(
ErrorKind::InvalidToken,
parameter.location.clone(),
))?;
let evaluated_argument = self.evaluate(*argument)?;
self.environment
.borrow_mut()
.set(parameter_name, evaluated_argument);
Ok(self.evaluate(*body)?)
}
_ => Err(Error::with_help(
ErrorKind::ExpectedExpression,
function.location.clone(),
format!("Tried to invoke a non-function type {:?}", function_value),
)),
}
}
this error handling is so horror
elle will use pip as package manager
elle will use package.icypeas
why tf does this command output help like a fucking window
not even gonna mention that the help message is not helpful at all lol
mine is worse
let function_name = function.get_identifier_name().unwrap_or_else(|| elle_error!(
location /* `some location` in scope depending on what ur reporting */
.with_extra_info(format!("Expected identifier, got {:?}", function.kind))
.error(format!("Could not find a function. Expected an identifier, but got {:?} instead", function.kind))
))
its all Option too
icypeOS
inline /**/ comments?????????
omg...
.bat is so ass im literally writing a simple script in .sh just to run it on windows then 
gonna write an os in an interpreted language brbn
well thats because i originally was gonna put the whole expr in 1 line
then i realized its way too long
use linux!!!!!!!!!!!!!!!!!!!!
can you explain the syntax pls
do you not use rustfmt??
do u know lambda calculus
nope
i typed that message in discord 😭

@hoary sluice look at this syntax
impl fmt::Display for Type {
fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
match self {
Self::Byte | Self::Char => write!(formatter, "b"),
Self::Boolean | Self::Word => write!(formatter, "w"),
Self::UnsignedByte => write!(formatter, "ub"),
Self::Halfword => write!(formatter, "h"),
Self::UnsignedHalfword => write!(formatter, "uh"),
Self::UnsignedWord => write!(formatter, "uw"),
Self::UnsignedLong => write!(formatter, "ul"),
Self::Single => write!(formatter, "s"),
Self::Double => write!(formatter, "d"),
Self::Null => write!(formatter, ""),
Self::Struct(td) => write!(formatter, ":{td}"),
Self::Enum(_, inner) => {
write!(
formatter,
"{}",
Option::as_ref(inner).unwrap_or(&Self::Word)
)
}
Self::Pointer(..) | Self::Long | Self::Void | Self::Function(_) => {
write!(formatter, "l")
}
Self::Unknown(name) => elle_error!(Location::internal_error(format!(
"Tried to compile with a generic type {name}"
))),
x @ Self::Infer => elle_error!(Location::internal_error(format!(
"Attempted to format an invalid type: {x:?}"
))),
}
}
}
``` the `x @ Self::Infer` thing
did you know that existed
im pretty sure x @ Self::Infer => is equivalent to x if matches!(x, Self::Infer) =>
ok its just
def b(y):
return x # everything is global rn
def a(x):
return b
a(3)(4)
or without currying in proper python
def ab(x, y):
return x
ab(3, 4)
i just noticed its supposed to return 3 but returns 4 lemme fix that
ig ill go back to not global variables
@placid cape

@rosie.pie @rosie.pie
i vaguely remember rust having labels
it does but this is different
@formal belfry
@hoary sluice is this a clear explanation
its really hard to explain something in enough detail you can understand while also keeping it simple
yop
it has become a test in the compiler
use std/prelude;
fn main() {
i32 x[42];
(42[x] = 39)[x] = 42;
$assert(x[x[x[42[x]][x]][x][x]] == 39, nil);
i32 y[10];
4[y] = 39;
$assert(4[y] == 39, nil);
$assert(y[4] == 39, nil);
$println("All `inv memory op` tests have passed!".color("green").reset());
}
@valid jetty so it actually doesnt curry at all

yeah lol
it runs a 3, which evaluates to None and then evaluates the literal 4
its not magic...
it is if you implement it right
make a parser
oh right i can just curry in the parser
you.. can !
but thats not a very responsible thing to do because the parser is meant to just parse
and i thought about how to implement partial application while in the kitchen, realized its like 2 lines and immediately forgot and now can think of it
(i say, having error diagnostics and some analysis in the parser)
i will prob move currying to the type checker or smth else in between parser and interpreter
idk how to implement currying because for me to do that i have to make capturing lambdas (which, to be fair, is relatively easy)
garbage collection means i dont have to worry about lifetimes
look at this
@valid jetty is a cat
i couldve done this for ellemeta but i specifically wanted to keep this for closures
oh okay thx and also thx rosie for the document
@valid jetty i fixed it lol
by undoing most of my changes in the parser and deleting half the interpreter
i originally had multi arg parsing implemented, then removed it, then brought it back
and made functions be expressions so now you can curry functions and the interpreter doesnt need to look up functions by name anymore
lol
@valid jetty should this return 1
1 is argument z from what i can tell
yea ok it should
fake booleans!!!!!
returns
1
2
@hoary sluice what are you doing
mmm i will probably just split my makefile into 4 different ones to remain some sort of readability, cuz i aint brain processing 400 lines makefile
@formal belfry I saw you
I will kill you
what does the $ mean
cash money programming language
@formal belfry
am i fucking dumb or this site just doesnt want to work
im pretty fucking sure that's how i output variables
:3
ok i cleaned it up
was going insane because this was never executed until i realized that i forgot to add a dollar sign
that's so annoying why do i need to add ./ to run a shell script
whi can't i just do generate.sh <param> <param2>
@valid jetty you will write a lambda calculus to icypeas transpiler in elle
ice peas
yup
I made a blog post about Vencor tho idk if it's fully accurate
i tried to make sure of everything i'm saying but if you guys have any feedback
i know in it i'm a bit salty that some plugins don't exist normally and need to be userplugins, but i think i'm still quite fair
https://julienraptor01.ddns.net/blog/why vencord is great… mostly
also i'm quite happy cause i did setup all that with only nginx and static hosting
even the embed stuff is static, tho i made myself a tool to automatically create the json file for it at the right place when i create a new page
quite sad that discord doesn't support Link Headers, would be more convenient for oembed
also yeah the title is a bit of a bait lmao
but otherwise i wouldn't get people to read it :big_brain:
the 5th point of my arguments is probably the weakest
😭 😭 well done
pls just call it true and false
make the lang building blocks be out of combinators
those are keywords lol
also once you're done you can explore the server with https://julienraptor01.ddns.net
or explore the filesystem with https://julienraptor01.ddns.net/fs if you don't want the stuff like html files to render
also there's a copy of how i did it there view-source:https://julienraptor01.ddns.net/nginx/site.conf
yes, get rid of that
thanks took quite some time
should i really make everything be made out of combinators
how do i optimize it then
yes it would be fun
yes
idk what that means but yes
look up how haskell does it
its an interpreter i can just use normal numbers and booleans
at least i dont have hashtag functions
making it all from primitives will make the interpreter much simpler too
because you can define all the functions in the source code itself
like ok ill make the number 1000 be f f f f f f f f f f f f f f f f f f f f f f f f ... and then optimize it to a normal number anyways
yessss good
then i might as well just write the whole interpreter in lambda calculus
true
this is the 34th rule of compilers https://github.com/woodrush/lambda-8cc
so insane
omg the args of the script are in lambda calculus
@valid jetty https://woodrush.github.io/lambda-8cc.pdf
love
i spent the past 7-ish hours manually fixing lints
im down to 260 without extra optimizations i wanna make that the clippy didnt detect
i started with 700 ish
did u not have clippy this whole time
not really lol
what did u change
its now #![warn(clippy::all, clippy::pedantic, clippy::nursery, clippy::cargo)]
@valid jetty
- it doesnt compile it interprets
- its literally just lambda calculus
warning: icypeas(bin "icypeas") generated 114 warnings (runcargo clippy --fix --bin "icypeas" to apply 70 suggestions)
70 suggestions
mostly things like this
idk
i manually run cargo clippy --all every time
lol
WAIT WHAT U CAN DO {VAR}???
yes but only for specifically identifiers
like you can do "{var}" but not "{var.display()}" or "{var.baz}"
please do not call it that ever again
rosie icypeas is FOURTEEN LINES OF CODE
guys why does my hello world script compile faster than the linux kernel??
run loc on both of them
also keep in mind most of icypeas is dead code and unused indirection rn
ok whatever 😭
see
weird that one is faster than the other
why dont u use zoxide
still tho 32 seconds vs 0.3s is a big difference
honestly idk
just havent gotten around to trying it
im sure its great
youre counting the stdlib
it takes 12 seconds to set up
17877 lines of rust
do it rn
later,,,
nop
rosie when writing huge compiler vs rosie when adding zoxide init | . to zshrc
if anything these arent proportional actually
elle is 14.44 times bigger than frozen balls yet compiles it 109.3 times slower
thats like an order of magnitude more
ok ill stop calling it frozen balls now
if you dont stop i will start calling elle "electronics learning website htl st pölten"
😭
Elle bloated
you are bloated
if my cli program accepts parameters like that: run.sh "username" "password" -r uk (-r is optional and its alias is --region), what should a proper help message look like?
is this fine: run.sh <username> <password> [-r | --region region]
i'm not sure if [-r | --region region] is correct
two --region region seems kinda bad
bad idk how else to do
it doesnt matter
just do whatever theres no standard for what it should look like
as long as its legible
USAGE: run.sh <username> <password> [...flags]
Flags:
-r, --region <region> The region to connect to idk what it is in your context
okay thanks! i just didn't really want to make it in multiple lines but whatever
or if you dont wanna list flags USAGE: run.sh <username> <password> [-r region] [--region region]
copied from what grep does
this what i did before
--region <REGION>
i've seen many cli put placeholders in angle brackets
once i had an idea of an interactive help menu
where you could navigate the command and subcommands like a tree and optionally pick flags (and fill their values) to run the selected command
unfortunately never got around doing it
program --help | less should be good enough
and doing anything that involves "i hope xyz terminal" supports it sucks
thats just a pager
look it up i guess
@hoary sluice https://github.com/woodrush/lisp-in-life
people do be doing some insane stuff
this is crazy
how does this relate to archinstall
@valid jetty Elle emit machine code when
eagely backreading capabilities 0
doesnt it already do that
thats what it does
well qbe does it for elle but same thing
which compiles to binary
how does archinstall relate to the conversation at all
zeet you do realize that emitting asm (and then putting it through an assembler) or directly generating machine code is not an easy task right
I know
that's the joke
also unless youre building a target specific language emitting machine code directly means writing variants for the multiple targets you want to support
arhsm
you know how clippy gives me a billion lints like useless clones
does rust like
automatically optimize that
or is it just telling me
no clue
like does it internally perform the """better""" version that it recommends
hmm
ok
i have never really done a bunch of optimizations cause if my shit code runs in enough time to not notice then idc
probably in some cases
its very important to me because look at this
most of them are completely irrelevant
it wasnt fine until i looked at the unit
unless this is for a program thats literally 2 lines
ok so uh
@valid jetty wyd
also can you show an example of said lint
i checked out an older commit before i started focusing on performance
look at this LMAO
for the same exact file
@deep mulch work on minkylang
hanalang has made 0 progress
how. i literally just created this fucking file myself
sometimes just a simple chmod +x fixes this for me
this kind of thing
there are better ones but i already fixed them
this seems to imply that the compiler can sometimes optimize it
i wonder if the compiler just like fixes it for you
although ig being explicit doesnt hurt
i see
yeah
but also for stuff like taking Vec<T> in a function when i dont consume the values so its possible to use &[T]
or the fact that a function can be made const but isnt explicitly set to be
that kind of thing i wonder if rust just optimizes for you
yop tonight
idk why it works via bash ./generate but not via ./generate
@hoary sluice btw if you ever run into performance bottlenecks, the flamegraph crate will save your LIFE
its funny cause the second one is pretty useless unless the type youre cloning overrides the default clone_from impl
HORROR
flamegraphs are cool
Yeah but Vec and String do
i like flamegraphs
If you like flanegraphs so much, why are you not on fire
not usre
another thing is that idk how to like handle the case when u only use the option without login n pass. ig i should just make login and pass options as well
strangely enough its missing some calls from elle programs
or maybe it just takes such little time
of course theres yappanese
i cant even profile ichigo execution time because some functions run so fast they dont get sampled lol
flamegraphs so good
how fast does ichigo compile
somehow found a function that was taking sooo long so just replaced it
and the bottleneck went away
800ms parsing 150ms compiling
it used to be much worse
and parsing is only slow because of PathBuf conversions and equality checks (which i hate but is required for correctness)
if i only check for equality in the module name before doing deduping it becomes about 300ms
Precompiled stdlib when
it is
the stdlib imports just import headers
the compiler automatically links with a static lib for the runtime
but i meant like, compiling an ichigo program not compiling ichigo itself
@valid jetty @valid jetty
compile ichigo itself
the ichigo compiler can generate ssa for this
関数 メイン()『
整数 値 = 乗算(
加算(
乗算(13、2)、
減算(23、10)
)、
乗算(5、2)
)。
整数 ミクの数 = 除算(値、剰余(100、90))。
プリント(「%d\n」、ミクの数)。
』
export data $tmp.9 = { b "%d\n", b 0 }
export function w $main() {
@start
%tmp.3 =w call $_E4B997E7AE97(w 13, w 2)
%tmp.4 =w call $_E6B89BE7AE97(w 23, w 10)
%tmp.2 =w call $_E58AA0E7AE97(w %tmp.3, w %tmp.4)
%tmp.5 =w call $_E4B997E7AE97(w 5, w 2)
%tmp.1 =w call $_E4B997E7AE97(w %tmp.2, w %tmp.5)
%_E580A4 =w copy %tmp.1
%tmp.7 =w call $_E589B0E4BD99(w 100, w 90)
%tmp.6 =w call $_E999A4E7AE97(w %_E580A4, w %tmp.7)
%_E3839FE382AFE381AEE695B0 =w copy %tmp.6
%tmp.8 =w call $printf(l $tmp.9, ..., w %_E3839FE382AFE381AEE695B0)
ret 0
}
export function w $_E58AA0E7AE97(w %_78, w %_79) {
@start
%tmp.10 =w add %_78, %_79
ret %tmp.10
}
export function w $_E6B89BE7AE97(w %_78, w %_79) {
@start
%tmp.11 =w sub %_78, %_79
ret %tmp.11
}
export function w $_E4B997E7AE97(w %_78, w %_79) {
@start
%tmp.12 =w mul %_78, %_79
ret %tmp.12
}
export function w $_E999A4E7AE97(w %_78, w %_79) {
@start
%tmp.13 =w div %_78, %_79
ret %tmp.13
}
export function w $_E589B0E4BD99(w %_78, w %_79) {
@start
%tmp.14 =w rem %_78, %_79
ret %tmp.14
}
``` in 1.8ms which includes file io
how the hell does it show this parse error thing if i wrapped the command in $(...) :/
token=$(curl -s --location --request POST 'https://www.privateinternetaccess.com/api/client/v2/token' \
--form "username=$username" --form "password=$password" | jq -r '.token')
if [[ ! "$token" ]]; then
echo "error: Invalid password and/or username"
exit 1
fi
looks like around 1.5s
actually
its not 1.5s that includes qbe compilation and linking times
yeah thats more like it
cool
but tbf
oh yeah i forgot its written in elle so you cant really compare
so its around 400 times slower with around 30% more loc
how so
icypeas takes 0.3s (300ms) to compile
thats the same order of magnitude
its around 3x slower
but 1.6k loc shouldnt take 800ms to parse, im still working on that, and thats actually a fault of there being many files rather than many lines because the raylib bindings are 1500 loc in 1 file and they parse in 140ms (each recursive lookup is doing an equality of PathBuf or String on every module imported, its pretty slow for some reason)
if it parsed faster it would be on par with rust almost
You almost always want "$()", not $()
Dunno if that's the issue here, but it might very well be
also i think it should be fine for variable assignments?
yop
its handy
Maybe, but I wouldn't bet on it
sorry?
is it your birthday
well that's not the one that errors
yop
i meant to show that i do use double quotes for like if-statements
hbd!! :P
i use this site for bash scripting
I'm a bit paranoid about quoting in (s)hell
Better quote unnecessarily than not quote when necessary
And usually better to rewrite in python it's anything beyond just a sequence of commands
And usually better to rewrite in python typescript it's anything beyond just a sequence of commands
Not my cup of vodka but sure
the original script was written in shell so i was like "yeah why not try writing in shell too"
most of my scripts are just very simple
my dotfiles for nixos. Contribute to sadan4/dotfiles development by creating an account on GitHub.
i think this is the most complicated
https://github.com/sadan4/dotfiles/blob/main/common/users/homeModules/scripts/git_fetchAll.sh#L1-L3
git_fetchAll.sh: Lines 1-3
git branch -r | grep -v '\->' | sed "s,\x1B\[[0-9;]*[a-zA-Z],,g" | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all
can my chat input stop fucking shaking
mine is like 56 strings so far 
No
and i haevnt even finished half
no
i sure love when lex_and_parse takes 80% of the runtime
valley of despair
why is memmove taking so much
maybe instead of a HashSet<(String, PathBuf)> ill have a HashMap<String, PathBuf> then the pattern guard can be like parsed_modules.get(&module).is_some_and(|p| p == final_path) or something
so i can prevent unnecessary clones
the key is the module as its imported in the source code
the path is the actual path in the os
because if you do use foo; from 2 different paths the module is foo in both but where ur importing from is not
so those are 2 distinct modules
sorry
you don't need quotes for variable assignment
/run ```sh
result=$(echo '""$_! one two three')
echo "$result"
Here is your sh(5.2.0) output @royal nymph
""\$_! one two three
/run
result=">/dev/null"
result2=$(echo $result)
echo "$result2"```
Here is your sh(5.2.0) output @spark tiger
>/dev/null
because > is a shell syntax, you can't put it in a variable
/run
result="--balls"
result2=$(ls $result)
echo "$result2"```
Here is your sh(5.2.0) output @royal nymph
ls: unrecognized option '--balls'
Try 'ls --help' for more information.

I MADE IT FAST
@hoary sluice @hoary sluice
i made importing ultra fast
the problem wasnt cloning paths
did you rewrite it in rust?
its already written in rust
you should consider fixing that
what was it
before (far before):
- match tree for
usestmts, destructure and take module name, check if the module is in the hashset, if it isnt then continue parsing (this module hasnt been parsed already) and then insert into the hashset
problems:
- if you do
use foo;from 2 different paths, the module name is the same but the module itself is different leading to skipping modules that shouldnt be skipped
before:
- match tree for
usestmts, destructure and take, check if the module and path imported are in the hashset, if they arent then continue parsing (this module hasnt been parsed already) and then insert into the hashset
problems:
-
we now count every module with a differing path/name to be different. this means that, if you have a file
foo.lebut import the same module 2 different places (use ../foo;anduse foo;) the parser counts it as 2 different modules and imports it twice, a problem in the deduping -
the path wasnt canonicalized. if it even changes slightly, it will become considered a new module and will be imported again.
now:
- match tree for
usestmts, continue parsing without breaking early, then in the recursive call, generate the full path that would be imported, canonicalize it, do string interning to turn it into a u32 symbol for very fast lookup in HashSets, and see if that is in the set. if it is, return an empty vec![] (nothing was parsed), otherwise, continue parsing the module
i'll pretend i read that understood that
let sym = interner.get_or_intern(final_path.canonicalize().unwrap().to_string_lossy());
if parsed_modules.borrow().contains(&sym) {
if debug_time {
println!(
"{} This module is already imported. Skipping...",
if nesting > 0 {
"┆ ".repeat(nesting)
} else {
String::new()
}
)
}
return vec![];
} else {
parsed_modules.borrow_mut().insert(sym);
}
``` this thing
i check just the path after it was resolved instead of checking the module name + parent path
no extra clones, no unnecessary duplicate imports
dw i ended up reading the entire thing
lmaooo
i just used https://docs.rs/string-interner/latest/string_interner/index.html idk if theres a faster crate to do the same thing
Caches strings efficiently, with minimal memory footprint and associates them with unique symbols. These symbols allow constant time comparisons and look-ups to the underlying interned strings.
too slow
go compiles faster
theres still a lot of improvements that can be made i guess
Now make it compile to JVM
least insane markdown implementation i've ever seen
i have so many questions
anilist at its finest
I'm gonna krill you

ok fuck this im seriously considering switching from makefiles
this has become such as mess
The typical makefile experience
Is that a cryptominer disguised as a captcha
yea 😭
no????
idk what this guy is yapping
it looked like that though 😭
Root what???
if no then no mb for that lol
hello is this pro gaming i need to learn how 2 bhop 
its like cloudlare captcha but open source https://github.com/TecharoHQ/anubis/ to prevent ai crawlers from absolutely desttroying your servers
ahhh i see now thanks for clarifing
press jump button at the right time
over and over
i see...
step 1. w + jump
step 2. let go of w
step 3. a + look left
step 4. jump immediately after landing
step 5. d + look right
step 6. jump again
step 7. repeat step 3-6
step 10: PROFIT!!!
i see,,
What do i do in vs code i dont wanna aski chatgpt i wanna save my msgs cause chatgpt has limited msgs Where do i put this??
have you ever programmed before or are you vibe coding
im sorry but if you dont know what the root of a folder is i think you need to attend more computer classes
Iam tryna make a saas ( i have sm experince in html)
brother if youre trynna be an ai bro building your next big idea to rake in some money atleast try to not be stupid
Terminals like cmd? or python? or node.js? yes i have, i even have them open rn
Then that's where you type the commands
if you don't know such things then I'm guessing your saas is gonna have 1 billion security vulnerabilities
lmao
my head is paining how do i fix this grok
is asking for help from an ai ethical when google didnt give me any results at all
i remember having an issue with windows apis in rust and only claude found the issue in my code
this is what would've happen to your project
https://x.com/leojr94_/status/1901560276488511759
guys, i'm under attack
ever since I started to share how I built my SaaS using Cursor
random thing are happening, maxed out usage on api keys, people bypassing the subscription, creating random shit on db
as you know, I'm not technical so this is taking me longer that usual to
asking ai to do stuff beyond basic ass react or js or py is like torture
software as a service
tru
I agree a lot
i found that its easier to give it existing code if youre having issues
was pretty successful with generating makefiles tbh 
on bigger projects with set of rules it's spitting out 99% of the time bullshit
apparently i set a value for a field wrong and my tray icon wasnt working at all
it only helped me on small projects or math stuff
i suck at math
Yk it makes u good money if u have the right web/app?
Nah with all the security issues you're gonna lose piles of money
the influencers you see online making money off of shitty ai software already have a large following and/or atleast have the slightest clue of what theyre doing
i wonder how it will do if I ask it to rewrite my very simple website in react
ai is only usable if youre knowledgeable in what youre asking it to do
ive been using claude for so long, i should probably try chatgpt 
ask v0 itll give you nextjs cause fuck you triangle company wants you to use nextjs then use their hosting solutions to use your nextjs project cause selfhosting nextjs is ass
or gemini
havw you tried no ai
yop
@runic charm mimi
mimi
i rarely use it
i actually use it more for school assignments that i think arent important for me
i think people that use ai for roleplaying are fucking stupid ...
i hate to do it but i sometimes use ai myself
only to generate a rough concept map of sorts tho
i feel hypocritical using ai after all the shit i give it
llms are good at generating boilerplates for projects because all of them are really similar 
if i ask one to give me a template for a discord bot or something itll give me really clean code
but once you start asking for complex stuf itll fuck up a lot
i use templates that are built in to the ide
i dont hav those
you should
mlem
most editors do
for 5 seconds, yes. 5 seconds later you're gonna have to pay all your earned money to buy more API tokens because your customers bypassed any paywalled features, and more money for security experts to fix your spaghetti code
maybe you should actually learn coding and get even more money later and avoid having a headache: https://www.theodinproject.com
The Odin Project empowers aspiring web developers to learn together for free
and this
I don't mean to be rude, but if you don't know how to type a command in the terminal ChatGippity gives in your face then you're gonna lose all of that money, or maybe get negative profit and actually waste your time and money
Learn coding or you'll end up like him: https://x.com/leojr94_/status/1901560276488511759
guys, i'm under attack
ever since I started to share how I built my SaaS using Cursor
random thing are happening, maxed out usage on api keys, people bypassing the subscription, creating random shit on db
as you know, I'm not technical so this is taking me longer that usual to
level 100 vibe coder
Any supppsed "easy money" has already been exploited long before it goes public
we can't all be billionaires
My dad is a vibe coder and has not become a millionaire that sells courses on how to get rich, does not drive a lambo (because he does not have a driving license) and can't afford to buy me shit, I have to work for it myself
We're still middle class in a way
but at least he gets some money still, because he has long terms customers from early 2010's
in fact, he was trying to make a web app for his own email, something similar like the gmail site, and he does know some basic shit, but he vibe coded all of it, and at some point his AI bot couldn't fix any mistakes. Sometimes he asks me for help, but I can't help him at all if he has 30 unorganized files, all of them with hundreds or a thousand lines of functions or other shit I can't even approach
I don't know what file is for what, etc.
the only time I helped him was when he was making a wordpress site with divi builder and just had to add a min-width to a CSS section
He doesn't know react, doesn't know git, none of the modern stuff people actually make apps in a less painful way
I think it's too late to convince him anyways since he's a 48 year old man
less painful
react
true
yeah thats why i do mobile development instead
Unironically CSS one time almost made me cry
atm im just using astro with raw html/css but i might try scss
I have an unused domain I bought around 2 months ago, but I'm scared to attempt to host even an about me page on it
thoughts on my website 
Unless I'd make the simplest page with no fancy CSS just to really "give off a vibe" that I don't care about web development and rather I care about real programming
It's very good
all websites are good
i suffered with mobile support more than the actual website
oh yeah, responsiveness, also my biggest nightmare
I don't remember the last time (if ever) I made a responsive layout
i think i managed to do it with a specifier for screen width
guys what should i do with a raspberry pi 2?
your family is gonna thank you
it has ethernet tho
why would u use pihole via wifi
in that case plug it into your router with an ethernet cable
yeah
go one step further and do embedded
/j
it literally is lmao
it uses a proof of work algorithm, just like crypto miners
it's a crypto miner that doesn't mine crypto :P
the idea is that it doesn't matter to a normal user if their hardware is used for 2 seconds but if you're a malicious person running a scraper those 2 seconds are gonna add up and cost you a lot of hardware resources
they changed the logo but didn't remove the Mascot designed by lmao
aids
#csgo #cs2 #counterstrike
In this video, i teach you guys some tricks on how to bhop more consistently. This video also contains yet another movement config.
download to the CFG:
https://www.mediafire.com/file/zqcxq8xk938i51z/beast_cfg.rar/file
download to the autoexec (just BHOP nothing else)
https://www.mediafire.com/file/8rhe17ufbwjd09j/au...
is this a copy pasta? 😭
unfortunately not
this IS actually my life
But wtf it actually fits for a copypasta 😭😭😭😭😭😭😭
My dad is a vibe coder and has not become a millionaire that sells courses on how to get rich, does not drive a lambo (because he does not have a driving license) and can't afford to buy me shit, I have to work for it myself. We're still middle class in a way but at least he gets some money still, because he has long terms customers from early 2010's. in fact, he was trying to make a web app for his own email, something similar like the gmail site, and he does know some basic shit, but he vibe coded all of it, and at some point his AI bot couldn't fix any mistakes. Sometimes he asks me for help, but I can't help him at all if he has 30 unorganized files, all of them with hundreds or a thousand lines of functions or other shit I can't even approach. I don't know what file is for what, etc. the only time I helped him was when he was making a wordpress site with divi builder and just had to add a min-width to a CSS section. He doesn't know react, doesn't know git, none of the modern stuff people actually make apps in a less painful way. I think it's too late to convince him anyways since he's a 48 year old man.
NOOOOOOOOOUYTDFGIOP[]OYTREWYUIOP[]
PASadfghjk;l'
😭😭😭😭😭😭😭😭😭😭😭😭😭😭😭😭😭😭😭😭😭
My dad is a vibe coder and has not become a millionaire that sells courses on how to get rich, does not drive a lambo (because he does not have a driving license) and can't afford to buy me shit, I have to work for it myself. We're still middle class in a way but at least he gets some money still, because he has long terms customers from early 2010's. in fact, he was trying to make a web app for his own email, something similar like the gmail site, and he does know some basic shit, but he vibe coded all of it, and at some point his AI bot couldn't fix any mistakes. Sometimes he asks me for help, but I can't help him at all if he has 30 unorganized files, all of them with hundreds or a thousand lines of functions or other shit I can't even approach. I don't know what file is for what, etc. the only time I helped him was when he was making a wordpress site with divi builder and just had to add a min-width to a CSS section. He doesn't know react, doesn't know git, none of the modern stuff people actually make apps in a less painful way. I think it's too late to convince him anyways since he's a 48 year old man.
this is actually a fire copypasta
holy yap
actually wait
let me reply with this to the vibe coder guy who didnt know how to open a terminal
My dad is a vibe coder and has not become a millionaire that sells courses on how to get rich, does not drive a lambo (because he does not have a driving license) and can't afford to buy me shit, I have to work for it myself. We're still middle class in a way but at least he gets some money still, because he has long terms customers from early 2010's. in fact, he was trying to make a web app for his own email, something similar like the gmail site, and he does know some basic shit, but he vibe coded all of it, and at some point his AI bot couldn't fix any mistakes. Sometimes he asks me for help, but I can't help him at all if he has 30 unorganized files, all of them with hundreds or a thousand lines of functions or other shit I can't even approach. I don't know what file is for what, etc. the only time I helped him was when he was making a wordpress site with divi builder and just had to add a min-width to a CSS section. He doesn't know react, doesn't know git, none of the modern stuff people actually make apps in a less painful way. I think it's too late to convince him anyways since he's a 48 year old man.

omfg i was like why does my shit not work 😭😭😭
I’m going to lose it
Google has the genre information for songs
So why isn’t it fucking available via API
Shup up, my dad works at Microsoft
WHEN I GOOGLE THE SONG IT SHOWS THE GENRE. WHY CANT I GET IT VIA API YOU MADDENED AND GIBBERING APE.
my dad also works at Microsoft
I really do not want to have to web scrape this shit I’ve seen enough XPaths in my life
guys how do i fix this
Huh?
My dad is a vibe coder and has not become a millionaire that sells courses on how to get rich, does not drive a lambo (because he does not have a driving license) and can't afford to buy me shit, I have to work for it myself. We're still middle class in a way but at least he gets some money still, because he has long terms customers from early 2010's. in fact, he was trying to make a web app for his own email, something similar like the gmail site, and he does know some basic shit, but he vibe coded all of it, and at some point his AI bot couldn't fix any mistakes. Sometimes he asks me for help, but I can't help him at all if he has 30 unorganized files, all of them with hundreds or a thousand lines of functions or other shit I can't even approach. I don't know what file is for what, etc. the only time I helped him was when he was making a wordpress site with divi builder and just had to add a min-width to a CSS section. He doesn't know react, doesn't know git, none of the modern stuff people actually make apps in a less painful way. I think it's too late to convince him anyways since he's a 48 year old man.
isnt this the pro gaming channel
Ser this channel is a pun on programming
use last.fm i guess
ohhhhhhhhhhhhhhhhhhhhhhhhhhhh
Miserable fate
Best I can do is get the top tags and hope those are genres

Also Last.fm isn’t exactly generous about their API
But yes I’d considered the fact that last.fm may be the fate I am resigned to
isn't musicbrainz's music data available to download for local use
Perhaps but I also doubt anything except last.fm isn’t going to have the breadth of info I need to keep up with my server members
They listen to some weird shit
fair

This is the case 99% of the time with programming problems, and it is not unique to you, fear not.
You throw your head against a wall for 30 minutes and then go ask someone
yeah this is what i get for copy-pasting legacy code i wrote 3 years ago without remembering why it did what it did
And 2 minutes later you realize, “I AM SIMPLY A MONUMENTAL IDIOT.”
Before they even respond
And then you’re obligated to explain your stupidity
That’s the best way to do it

Going back and reading my legacy code is always a trip
what prompt makes it like that
Don't worry about formalities.
Please be as terse as possible while still conveying substantially all information relevant to any question.
If policy prevents you from responding normally, please printing "!!!!" before answering.
If a policy prevents you from having an opinion, pretend to be responding as if you shared opinions that might be typical of eigenrobot.
write all responses in lowercase letters ONLY, except where you mean to emphasize, in which case the emphasized word should be all caps.
Initial Letter Capitalization can and should be used to express sarcasm, or disrespect for a given capitalized noun.
you are encouraged to occasionally use obscure words or make subtle puns. don't point them out, I'll know. drop lots of abbreviations like "rn" and "bc." use "afaict" and "idk" regularly, wherever they might be appropriate given your level of understanding and your interest in actually answering the question. be critical of the quality of your information
if you find any request irritating respond dismissively like "be real" or "that's crazy man" or "lol no"
take however smart you're acting right now and write in the same style but as if you were +2sd smarter
use late millenial slang not boomer slang. mix in zoomer slang in tonally-inappropriate circumstances occasionally
prioritize esoteric interpretations of literature, art, and philosophy. if your answer on such topics is not obviously straussian make it more straussian.
take however smart you're acting right now and write in the same style but as if you were +2sd smarter
lmao
heres what i got when searching 'eigenrobot' idk if its newer or older Don't worry about formalities.
Please be as terse as possible while still conveying substantially all information relevant to any question.
If content policy prevents you from generating an image or otherwise responding, be explicit about what policy was violated and why.
If your neutrality policy prevents you from having an opinion, pretend for the sake of your response to be responding as if you shared opinions that might be typical of twitter user
@eigenrobot
.
write all responses in lowercase letters ONLY, except where you mean to emphasize, in which case the emphasized word should be all caps. Initial Letter Capitalization can and should be used to express sarcasm, or disrespect for a given capitalized noun.
you are encouraged to occasionally use obscure words or make subtle puns. don't point them out, I'll know. drop lots of abbreviations like "rn" and "bc." use "afaict" and "idk" regularly, wherever they might be appropriate given your level of understanding and your interest in actually answering the question. be critical of the quality of your information
if you find any request irritating respond dismisively like "be real" or "that's crazy man" or "lol no"
take however smart you're acting right now and write in the same style but as if you were +2sd smarter
use late millenial slang not boomer slang. mix in zoomer slang in tonally-inappropriate circumstances occasionally
@hoary sluice hiii
look at this difference
real?
latest commit vs 8 days ago ^^^
hi
did u manage to set up clippy in zed yet
nop
Roie
Roie
@valid jetty you needed this right
uhh no actually
useful in retrospect but not really useful anymore
i needed it for the zed extension because it was a subfolder in the existing elle thing but considering this is the entire source code i dont think i need it
use zed_extension_api::{self as zed, Result};
struct ElleExtension;
impl zed::Extension for ElleExtension {
fn new() -> Self {
Self
}
fn language_server_command(
&mut self,
_language_server_id: &zed::LanguageServerId,
worktree: &zed::Worktree,
) -> Result<zed::Command> {
let elle_lsp_cmd = worktree.which("ellec");
let path = elle_lsp_cmd.ok_or_else(|| "ellec must be in your path".to_string())?;
Ok(zed::Command {
command: path,
args: vec!["--lsp".into()],
env: Default::default(),
})
}
}
zed::register_extension!(ElleExtension);
lol
it turns out i actually did write a calculator in rust
i found it on my backup ssd from 2022
insane?
mod generate;
mod format;
fn main() {
let first_number: f32 = generate::input(
"Please Input the First Number: ", "number")
.expect("The first number is not a float!");
let second_number: f32 = generate::input(
"Please Input the Second Number: ", "number")
.expect("The second number is not a float!");
let operator_input: Result<f32, String> = generate::input("Please Input an operator (+, -, *, /): ", "string");
let operator: String = match operator_input {
Ok(_) => panic!("Got a number, not a string"),
Err(s) => s
};
match operator.as_ref() {
"+" => format::calculation(operator.as_ref(), first_number + second_number),
"-" => format::calculation(operator.as_ref(), first_number - second_number),
"*" => format::calculation(operator.as_ref(), first_number * second_number),
"/" => format::calculation(operator.as_ref(), first_number / second_number),
_ => panic!("Invalid Operator!"),
}
}
pub fn calculation(operator: &str, calculation: f32) {
println!("The output of the calculation using `{}` is `{}` :3", operator, calculation)
}
use std::io::{self, Write};
use std::error::Error;
trait ExpectOr<T, E> {
fn expect_or(self, msg: &str, default: T) -> Result<T, E>;
}
impl<T, E> ExpectOr<T, E> for Result<T, E> where E: Error {
fn expect_or(self, msg: &str, default: T) -> Result<T, E> {
match self {
Ok(val) => Ok(val),
Err(err) => {
println!("{}: {}", msg, err);
Ok(default)
}
}
}
}
pub fn input(message_prefix: &str, type_of_output: &str) -> Result<f32, String> {
print!("{message_prefix}");
io::stdout().flush().expect("Unexpected error when trying to flush the buffer");
let mut input = String::new();
io::stdin().read_line(&mut input)
.expect("Failed to read line");
let result: f32 = input.trim()
.parse()
.expect_or("Invalid Number Provided", 0.0)
.unwrap();
if type_of_output == "number" {
Ok(result)
} else {
Err(input.trim().to_string())
}
}
all of this code is completely untouched from 2022
its kinda funny looking back on it
@valid jetty @valid jetty roieee
this isnt my video lol
but if i were to apply color correction to it i would just do my standard
exposure adjustments + chromatic aberration + lens vignette & distortion + edge softness + pop + shine + diffusion
husk??
this is the whole document
the galaxy brain on this UI
when a modal opens the rest of the UI shrinks down, and since the app is transparent it looks kinda like a pop-out overlay
thats pretty cool
yeah people need to make more transparent UI apps
the shit it enables u to do is insane
Transparent ui is great yeah
😭
its not even that i'm building transparent UI mica style, it just some small effects that take advantage of it
I have transparent terminal (including nvim), firefox, discord, and vscode (though I don't use vscode)
nah see that's not what i'm doing
my design doesnt use mica/transparency, instead it uses some effects like transforms, scaling etc to render shit on top of your desktop, while the rest of the UI stays opaque
its just the window itself is transparent underneath, but the UI itself isnt i guess
this effect is great, you see it in arc too
which then lets me do shit like this:
hm, got any ss's?
i havent seen it in arc
popup vs normal
oh yeah
well i do that on top of the user's desktop
and not the app's own UI
but yeah simmilar principle
i did this with css/js once too
is that a width animation?
how is it so fast wtrf?
but yeah i did smth similar, just it uses a scale rather than width change
because faster :^)
i feel like this would look way better if the popup had sinusoidal or quadratic easing rather than elastic
youre going for a very professional and sleek look but the bouncy nature of that animation doesnt sell that
that looks like zed
oh i just did away with animations like these entirely
that's an old version of my website
how are you in canada / honk kong
it was written before zed existed lol
im in the uk/paraguay
no i just named a random country lol
i have absolutely no correlation with paraguay
@hoary sluice look at this 😭
what is that
yeah it is width change
however the expanding window is a position fixed box behind the button that transforms accordingly
transitioning width/height with a fixed element is probably faster
parental advisory explicit content 🤯
idk i liked making gfx stuff a few years back
i dabble in everything
IT DOESNT EVEN SAY ACQUITELOL ANYWHERE
rosie does so many things
would you believe me if i said i used to make edits several years ago
song: the vamps "somebody to you"
just like
so its not :3
does rust have any sort of json parser support
serde is top tier
i mean, deep down we're all a bunch of stupid apes
i just need json
also does rust have any sort of tui/cli graphics library
ratatui seems promisisng
i want to build a quick kconfig like app but with jsons
raaaaaaah i LOVE it
good opportunity to try rust
heard raratui is pretty good, never used it myself
yea serde does anything data de-/serialization
i mean zed is just another brutalist monospaced design
its in the name :^)
why not deser
that would imply only deserialize smh
(de)ser
@valid jetty if imma make this desugar to lambda calculus imma need an eval function and thats a lot of effort
this is HALF of church true
a quarter of church booleans impl
Expression::new(
ExpressionKind::Assignment {
name: Token {
kind: TokenKind::Identifier,
value: TokenValue::Identifier(
"__builtin_selectFirst".to_string(),
),
location,
},
parameter: Token {
kind: TokenKind::Identifier,
value: TokenValue::Identifier(
"__builtin_selectFirst_secondParameter".to_string(),
),
location: Rc::clone(&expression.location),
},
body: Box::new(Expression {
kind: ExpressionKind::Identifier {
token: Token {
kind: TokenKind::Identifier,
value: TokenValue::Identifier(
"__builtin_selectFirst_firstParameter"
.to_string(),
),
location,
},
},
location: Rc::clone(&expression.location),
}),
},
location,
)
actually i could make the parser parse true x y as x lmaooo
@valid jetty @fleet cedar is that horror
I don't see why that would be the parser's responsibility
wait this is just not true
it's using the zed fonts
my sense of time has been super cooked after covid
its not but its easier to do in the parser
and more efficient
That implies that true is something different from a function
i dont like the idea of a parser giving me misinformation
yes
@valid jetty make Elle compile to spir v and write shaders
Elle will be a shader lang
uv_mango.le: Lines 16-36
#version 330
in vec2 fragTexCoord;
out vec4 finalColor;
uniform float time;
void main() {
vec2 uv = fragTexCoord;
uv -= vec2(0.5, 0.5);
float angle = time * 0.3 * 3.14159;
mat2 rotationMatrix = mat2(cos(angle), -sin(angle),
sin(angle), cos(angle));
uv *= rotationMatrix;
uv += vec2(0.5, 0.5);
finalColor = vec4(uv, 0.0, 1.0);
}
");
defer rl::unload_shader(shader);
uv_mango.le: Lines 58-72
rl::draw_texture_pro(
tex,
Rectangle {
x = 0, y = 0,
width = tex.width,
height = -tex.height
},
Rectangle {
x = 0, y = 0,
width = tex.width,
height = tex.height
},
Vector2 { x = 0, y = 0 },
0, WHITE
);
why is raylib std?
YOU COPIED MY __internal_fn THING LMAO
actually it doesn’t need to be
yeah
but it does mean i need to change what things are put into ~/.local/include/elle
i made std in raylib because it imports from an absolute path, that being the stdlib path
but i can just make seperate folder that’s also put in there for stuff like that
do
is that a λ reference
@valid jetty should bool & bool be valid
precisely
i was thinking ok ill just do it like python for now
wtf is that how python does it
well it uses __
hurry up
yes ofc
0b00000001 & 0b00000001 = 0b00000001
whats the difference between & and && then
but so should &
no because & specifically goes through all the bits in both the numbers and performs the AND logic gate on them
& does bitwise so it wont compute rhs if lhs is false cause the output has to be false
oh hmmmmm
if the output is the same
you can short it
which is why im asking
@fleet cedar
help
i think most languages dont short circuit this
but as ur lang is functional you should
because all values should be lazy anyway
why
on booleans thats just stupid
maybe if theres side effects yea
then theres no reason to have && at all
oh i didnt lex BangEqual
with no optimiziations
&& is not the same as bitwise and
whats the difference
idk if i wanna have any sort of implicit casting
actually tbf 1 && 2 will give 2
so youd have to do 1 != 0 && 2 != 0
horror
especially on a variable which has no side efects
effects
its pass by value
well if you add -O3 it does the correct thing
foo bar != 0 && baz qux != 0
qux???
idk i think thats the next one
foobar, foo, bar, baz, qux, quux, and others
The terms foobar (), foo, bar, baz, qux, quux, and others are used as metasyntactic variables and placeholder names in computer programming or computer-related documentation. They have been used to name entities such as variables, functions, and commands whose exact identity is unimportant and serve only to demonstrate a concept.
The style guide...
thats crazy
😭
aoc reference!!!!!
either way u shouldnt be casting to an int yeah
because logical and doesnt work like that
oh i thought it meant when a body is fouled up beyond any recognition
"A" && "B" == "B"
null && "B" == null
it doesnt convert to bool but it does check for their equality
ok you cannot use && on strings theres no way im doing that
you can
do it..
because it short circuits you can use it to do computations and get a value
wait omg are there any scenarios wher its ambiguous whether ! means not or notequal if i use it in place of !=
that is not a good explanation
for example in elle's assert function ```rs
fn io::assert(ElleMeta meta, bool condition, string message) {
if !condition {
let parsed = message || "No additional information was specified.";
io::eprintln(
meta.caller, ": Assertion '", meta.exprs[0], "' failed.\n",
parsed.color("italic").reset()
);
libc::abort();
}
}
if these were casted to bool you would just get `parsed` as `true` lol
(|| is just the opposite case of && so it still applies)
any self respecting language lets you do this with logical ops
idk exactly what its called but im pretty sure at the very least js and python do this
should i use @ for imply gate
a being true implies b is true
oh thats cool
then what does && do
if message is not empty use the one on the rhs?
you can use it like if statements
fn foo(x) {
let res = x && y();
}
``` is almost exactly equal to
```rs
fn foo(x) {
let res;
if x {
res = y();
}
}
or well rather more like x && (let res = y());
^ is xor
**
why almost
does elle use **
thats kinda confusing to read
oh ok
the only way i can think to explain this well is in react
function MyThing({ shouldRender }) {
return <>
<h1>Hello world!</h1>
{shouldRender && <h2>foobar</h2>}
<>;
}
does rust have int.max_value
yes
how
i32::MAX
found it
and i32::max_value() but thats deprecated
also what is the imply gate in a real language lol
a @ b == !a || b?
oh wow i was right
Ok(Value::Integer(l.checked_pow(r as u32).ok_or(
Error::new(ErrorKind::Overflow, operator.location.clone()),
)?))
is there no i128.pow
i128.pow(i128)
pow takes u32 no matter the type it operates on
so i have to implement pow myself now??
bestie when are you EVER gonna want to take the exponent where the exponent is a 128 bit number

yes give me 2^170,141,183,460,469,231,731,687,303,715,884,105,727
-statements dreamed up by the utterly insane
and if i safe cast to u32 its gonna give wrong answer or error for no reason if the exponent is larger than u32 but the output fits in i128
also what about negative numbers why do u need to explicitly check and do sqrt instead of pow calling sqrt
if the exponent is larger than u32 the answer will either be completely incorrect or it will round to 0
(anything bigger than 1 -> the number will be too huge and will just cause like signed overflow)
(anything between 0 and 1 -> the number will become so small it will just round to 0)
the only case where it doesnt overflow is 0 and 1 and there casting as u32 will throw an error for no reason
1^anything is 1
you have to remember u32 max size is 4.3 billion
thats only for exactly 1
yes
ok whatever
you can do signed power on floats
im working with ints rn
float.powi(i32) or float.powf(f64)
i know
but if you really want to use a non u32 exponent
is it more idiomatic in rust to use match everywhere or if let else for options
for options specifically??
can i do f64 exponent
you can but only on float types
and for results where im only checking one error type
ok good
i usually use the idiomatic methods rust provides you
i dont typically match
but i do use let Some
specifically let Some(x) = foo else {} is cool
without if
huhhh
you can do this
fn main() {
let Some(x) = Some(39) else { panic!("wow..") }
}
take a value out but keep it in the same scope
but also things such as unwrap_or_else, map_or_else, is_some_and, is_none_or
very idiomatic i love them
map_or_else is by far my fav
it lets me do .map.unwrap_or_else in 1 function call
Option::as_ref(ty)
.map_or_else(|| name.into(), |ty| format!("{name}({})", ty.display()))
map if its some, otherwise give me name.into()
VERY useful
whats the difference between unwrap or else and unwrap or i still dont understand
why would you ever want eager evaluation
unwrap_or expects a new Option<T>
no
oh wait
on result
i see
is that a result of backwards compatibility
unwrap_or is best for when the value is just a variable
unwrap_or_else is designed for when you wanna call a function
because Some(39).unwrap_or(3) is more performant than Some(39).unwrap_or_else(|| 3)
it doesnt need to make the closure
clippy will tell you to use unwrap_or_else when the unwrap_or expr you passed calls any function
ok



