#πͺ -progaming
1 messages Β· Page 64 of 1
because that is a huge refactoring as the codegen depends on things from the custom parser
it lights up the screen white so its a flahbang
yeah vanta is now a "generic cryptobro website library"
wasnt back then
https://tnixc.space flashbang
and for the most part "europe" is a good enough narrow down
and you probably dont want to tie your parser to a dependency
since most hires care about "oh not america? nvm then"
true i guess
whats wrong with stating ur country
why is it moving
unless its the vatican
nothing!
its unsettling lol
@valid jetty hiii
it looks better on shit like https://thaunknown.github.io/?miru
again this was like my 1st or 2nd svelte project ever
oh lol i see
so ideas were there, execution not so much
i think i made this before sveltekit had wide support
so i didnt have a router
yeah sveltekit came out 3 months after i made this site XD
i juust wanted to check if svelte was better than react
and HOLY was it ever better than react
i switched to svelte exclusively after making that website, i had that good of an experience with it
well and occasionally vue with setup for work
#cast is fucking insane
yop
π
i support x as T
fine ill do x as T
woo
yippee
you should sugar all these #
zootie spawned
what sugar would you give #set_allocator(alloc_expr)
Love
the # is important tho
nop
#cast(x, T) feel very C# coded to me
doesnt matter
but so is alloc t size
we all need to create projects in elle so it gets added to github
i prefer @Β for compiler builtin
like zig
but i understand you dont use it because of annotations
__builtin_set_allocator 
π
nix moment
you'll need atleast 100
the entirely of elle is like this
__internal_ spam
guhh internal keyword when
there is !pub but thats not applicable to the link-time codegen
essentially all of elle is extern C which means there can be collisions just like in C
thats why you can namespace things
but things arent namespaced for you
@hoary sluice how do you differentiate (x as void *) * y and (x as void) * (* y)
i dont think as is a good idea
how is (x as void) valid syntax
ignore that its void
what should the parser determine that x as T * *y is: (x as T *) * (y) or (x as T) * (*y)?
lol i meant the parser wont be able to always differentiate it without brackets because either expression here is valid without brackets
(x as T*) * (y) = cast x as T* and multiply by y
(x as T) * (*y) = cast x as T and multiply by y*
oh
but what if i write x as T * * y
what does the parser see it as
or well, what should it see it as
but what if you actually wanted to do (x as T) * (*y) cast x to T and multiply by the deref of y
its still ambiguous just in a different way to (T)x
then write (x as T) * (*y)
π
this is why using the same symbol as multiplication for pointers is a bad idea
use @ for pointers (dont)
use deg symbol for pointers
@dawn ledge @deep mulch @lucid trail what do you guys think about this
im serious
deg symbol is unicode isnt it
using @ wouldnt actually be a bad idea would it
how do i even type that on my keyboard
its already used for attributes
operator precedence
shift ^ on qwertz idk qwerty
^
thats not deg thats just caret
its ambiguous when read tho

please do not try to redefine common operators
why not
bad dx
that can interfere with generics and the < and > binops unfortunately
π
why does casting need special sugar why cant it just be #cast(x, T)
"its ugly with many on a single line" YEAH like (T)x isnt ugly on a single line
*(int *)(void *)((void *)(*x) * (uintptr_t **)y)
``` yeah readable
when are you ever going to cast x into T and multiply it by *y on the same line
this is not common enough to worry about making convenient to type
@placid cape i cant write my thesis in new computer modern π
im not against it
yeah thats normal
every uni forces some old sherif font
i wanted to use typst π
because the template is word π
you could for code blocks
since those count as "attachments" or "images"
or "objects" simply
theres no way they can do that wtf
make ur entire thesis an attachment lol
what are they gonna do
x as u64 * * num_of_u64s
#cast(x, u64 *) * num_of_u64s
thank you for coming to my ted talk
font is auxilliary
why do you even care about what they enforce
just work on the content dude
you need to put () in #cast anyways so its still easier to write as
why are they putting tutorial in word π they think word is the only thing this can be made in π
-# <:i:1323844562875187291> Translated from πΊπΈ English to πΊπΈ English β’ Google Translate
why are they putting tutorial in word π they think word is the only thing this can be made in π
because times new roman looks ugly
wow
ocrtr
skill issue
ocrtr
what
yeah but the () ensures you will always use () and there can never be any ambiguity
lc.ocrtr
-# <:i:1336065711323222119> β π¨πΏ Β CzechΒ Β β β ββ<:i:1336064835691090043> β β β βπΊπΈ Β EnglishΒ Β
1.9 Figures, tables and equations
A caption for a figure or table is inserted by right-clicking on the object
and selecting Insert caption. The object type (Tab. or Fig.) is then selected.```
our teacher also was like guys pay attention you need this and then gave a tutorial on how to use zotero in word
not being able to understand czech in 2025 is crazy
why did they give example with new computer modern font π
do u have to write the thesis in czech?
yes
surely they cant force you to
language is pretty important
i will ask next year how much enforced is it
theres no way i wouldve written mine in german
whoever uses typst here, do you self compile or use their ide?
is there any structure i should be using?
i have nvim with autosave tiled with an evince pdf which auto reloads and typst running in tmux so i can ctrl b + L to see errors
wdym by structure
i just usually categorize my files by relevance and an .assets folder for attachments
Contribute to eagely/voice-docs development by creating an account on GitHub.
why is that kerning so weird
sorry for not knowing about typst in september
its a pasted image π idk
most of it is plain text anyways
and code blocks
how do you cite in typst
theres probably a library right
typst supports bib
As soon as you add a bibliography somewhere in your document, you can start citing things with reference syntax (@key) or explicit calls to the citation function (#cite(<key>)). The bibliography will only show entries for works that were referenced in the document.
but that can actually also be ambiguous with tuples i just realized
someone probably already wrote a phd thesis about that
(i32, i32)(x)
whats ambiguous about that
it could be interpreted as a parenthesized expression
.as<T> is insane
didnt know you could do
fn (i32, i32)();
(i32, i32)(x)
(foo)(x)
quit it
???
just do #cast
the thing with something like this or .asT or .toT or as.T is that i would either need to make a function for casting from one type to every other possible type or make syntax sugar which looks exactly like existing syntax but actually is a compiler builtin
and i dont really wanna do either
yeah ok
.
but you cant multiply by a type
parsing ambiguity
discouraging people from using a language is not why a language is made
you cant but that would require a parser hack to work and its ambiguous (was the idea)
which can be resolved
rosinga
you dont know if T is a type or a variable ident at parse time
so then parse it as a function call
zig has @Tcast
T *(x) would be parsed as a multiplication node
what is happening here
were discussing what version would be the best in the language not the easiest to write a parser for, this isnt 1950
π
you voted for as T, the first one is cast x to T* and multiply by y, the second is cast x to T and multiply by the deref of y
why are vencord members so hard to talk to
both are plausible, both could be viable, you have no idea which one it is without brackets
you have boomer mentality
i thought & was deref
fym boomer mentality
& is "take the addr of"
guh
@deep mulch
zooter minky will deref with &
literally 1972
how to make a language where i have to spend the least effort possible writing a parser
how to make a langauge where it looks like im multiplying by a type
rosie making rust 2
how to make a language where using pointers looks like multiplication
i'll give you one better
skimming through code
what if i have a var T
and someone writes T *(x) intending it for a multiply
now am i supposed to sit and think if its a cast or multiplication
go does that
????
which is an established syntax lol
thats like every lang using pointers
wait good point actually
thats a really good point
that doesnt mean rosie has to do it
i didnt even think of that
multiply should only happen if there's a space after the operator
you will use golang type assertions: ```go
thing.(SomeType)
INSANE
id rather learn rust over go
force types to be PascalCase and variables snake_case
thats just bad
forcing stylistic choices is so bad
actually not a bad idea because now i can always expect that after a . there is a type or identifier
not force but if someone writes var T and then reads T*(x) as a type cast not a multiplication thats their problem
yop
someone turn off the default rust naming conventions warnings
cause they called the variable that
however what do you make of x.(Foo<Bar *>)
/run ```go
package main
func main() {
var x interface{} = 7
sum := x.(int) + x.(int)
println(sum)
}
@royal nymph I only received go(1.16.2) error output
14
I hate that
#![ignore(...)] loves you
however i do think that forcing style choices is a good thing
@royal nymph ?
int(x) or (int) x or x as int
your idea wont work with this eagly
i think eagely was joking with this
because thats evil
pick a naming style and force everyone to use it because most people are going to use it anyways and you remove the small number of people that confuse erevyone
which
6
6
3
i like to be different
1026532993923293184
husk
i was but now im not
kodetoad hates you
make i128 builtin
i256
i128 is not a type in qbe, if i made it a builtin that means i would literally need to make a struct and all the binop overloads via manual ast node creation in the parser
which i do already but it sucks
then dont make i128 and make BigInt instead
HugeInt
GiganticInt
MassiveInt
i8 in question:
where do you need i128
add i2
simd
things like this
i might do Int64 Float64 naming
BigInt exists but sometimes you just want a bigger int
no i wanted to do that when i first dreamed up elle syntax
more bits dont hurt
this is something java would make
yop
yes
its not its as big as 2^64^(2^64) bits
@valid jetty add long long to elle
if you make an array of i64s which has a max len of u64
java bigint is a base 65536 array of digits idk what urs is
husk
be like zig
you can always add another array when it overflows
elle one is a u8[]
variable size integers u8 padded
naive approach
@valid jetty add unsigned long long int
boringg
make long thats 64 on linux and 32 on windows
contrary to popular belief long int is NOT a 64 bit int
regular chanel is pretty chill
too many windows users in progaming
see what i mean
long long long long long

elle can only compile on 64 bit and theres no usize type in qbe but when it becomes a thing, i will have to change elle to make it work
dont you have to change elle to do literally anything
i misread that
lmao
usually no
almost every elle program ive wanted to write has been writable without changes to the compiler
only things missing in stdlib
all it does is no longer link with -lelle 
Elle for embedded devices when
when elle on esp32
that one uses the arena alloc by default xd
would actually be awesome
if you pivot to embedded support and rewrite the arduino framework in elle you will have massive adoption because arduino cpp is garbage and elle isnt
hop on llvm, running elle on AMDGPU
elle on attiny85
int main() {
long long long long long long long long long long long long long long long long
long long long long long long long long long long long long long long long long
long long long long long long long long long long long long long long long long
long long long long long long long long long long long long long long long long
long long long long long long long long long long long long long long long long
long long long long long long long long long long long long long long long long
long long long long long long long long long long long long long long long long
long long long long long long long long long long long long long long long long x = 1;
}
elle on 4 bit minecraft computer
you can technically go fully back to C style programming by using nogc and then in main func #set_allocator(HeapAllocator::new()
now #alloc will call malloc, #realloc will call realloc, #free will call free, etc
but the stdlib is kinda useless with it because none of it is manually freed
rust embedded crates:
so youd leak a lot of memory
not enough support
using arenas you dont leak because its all freed by the compiler at the end
typedef unsigned long i2048[32];
yeah, let me do that on every single variable function and struct field I make
they forked the rust compiler and rewrote it for xtensa and its still terrible
the ! in #! applies it for everything
or just write normal rust
should i make infinitely long long long long ... in my language
Integer32
@valid jetty
Rather, it applies it to the parent block (usually module)
use std/allocators/heap;
fn main() {
#set_allocator(HeapAllocator::new()); // back to C we go, but with nicer semantics :3333
x := #alloc(i32); // does (i32 *)malloc(#size(i32)) internally
defer #free(x); // deferring :33333
}
compiled with ellec main.le --nogc
@dawn ledge love?
let
define i Integer32 = 17
define str CharacterArray = "hello"
in
foo = str + i
you said you wanted icypeas to be fast to use for aoc
good luck typing CharacterArray every time
lol
i am not going to seriously call strings CharacterArray
i feel like writing the codegen backend myself and also not depending on libc
although it would be funny
That's not the point. Forcing stylistic choices like what Go does and rusts default warnings does it is just bad.
i depend on libc because i dont have to write code in another language for the stdlib (like asm or C)
I hate snake case so I don't want to write code with it
i dont care im going to do it anyways
yeah but not so fun when you have to rewrite networking code in asm from scratch with raw syscalls
will you be happy if i force camel case
networking in C is hard enough
well fwiw unlike go rust's are just warnings and the program compiles and runs
i was actually looking at syscalls a day ago
very fun
i also like networking so
i love writing binary formats
elleduino
ok so #cast ?
yes
alright
T(x)
does elle have macros
there are ways to do most things youd want from macros
can i use T(x) instead of #cast
im currently thinking of a way to make types be functions
qbe with no types 1 argument curryable functions first
raaaaaaaah
const x = y; at the top level will make a thing which is ran every time you reference the const
so like if you make it const my_thing = [i32;];
if i do
my_thing[0] = 1;
``` and then ```rs
$dbg(my_thing.len());
``` it will be 0
maybe const is a bad name
should be inline or something
but it works almost exactly like a define macro lol
no ast manipulation :(
wdym
no that doesnt really exist atm lol not even regular macros like in rust exist yet
ya i know what a procmacro is

can you explain this in english
imagine #define my_thing ((i32 *)malloc(sizeof(i32) * 4))
its similar semantically except it inserts the AST and not the source code
what does it have to do with the length being 0
when you do my_thing the second time you get a new array
just like in c if you call the macro twice you get a new allocation
ohh
yeah that's why I specifically mentioned default warnings instead of what go has where you know it's just forced
But I still feel like default warnings are extremely bad.
also go's refusal to compile on unused variables is insane
warnings should be for things that actually matter
it expands to ```rs
fn my_thing() {
return [i32;];
}
fn main() {
my_thing()[0] = 123;
$dbg(my_thing().len());
}
```rs
fn main() {
[i32;][0] = 123;
$dbg([i32;].len();
}
make them default warnings and implement Wnoerror format
I tried to learn go, but the module system and the forced naming conventions made me stop very quicky
The module system for Go is legitimately so fucking confusing.
why does it do that
is that intended
does go have generics yet
I cannot understand it for the life of me.
go community has strong opinions over the project stucture
and my answer to that is FUCK YOU
8 space ident in go sucks
Yop
you dont get to decide my preference on how i wan my code to be structured
I am writing MY code NOT YOU
is that real???
why is 8 space the default in vim who made that
i understand formatting and structure policies project wise
for example if i am contributing to project xyz and they need all types to be defined in a separate file thats perfectly acceptable
but if the language itself forces me to have all types in a separate files, now thats a completely different matter
someone should make the ultimate customizable language
any language with macros is customizable to hell and back
fuction x()
take rust rsx for example
dreamberd
f x()
my favourite dreamberd feature is negative lifetimes
omg nino x()
dremberd is a literal meme
my favorite dreamberd feature is worldwide constants
the sky is blue
print(x)
const let let x: i32' -1 = malloc(i32)
no the sky is red
const const const PI = 3 now PI is 3 for everyone forever
actually the sky doesnt have a color
youre just looking at filtered light from the sun!
so color
nuh uh
We also banned the import function and any function that tests for equality. Oh and we've got plans to round up 30,000 people and put them into a concentration camp.
lol
me when the app is so abstracted that it literally doesnt do what its supposed to do but still somehow does
https://arxiv.org/abs/2011.13127 interesting
Fast compilation is important when compilation occurs at runtime, such as query compilers in modern database systems and WebAssembly virtual machines in modern browsers. We present copy-and-patch, an extremely fast compilation technique that also produces good quality code. It is capable of lowering both high-level languages and low-level byteco...
java
checksout
corny
π½
@hoary sluice

oh wait
arr[0.00000000000000000001] my beloved
PI Is 3 because its a const const const i defined earlier
π
LLVM consists of over 20 million lines of code
π
ok WHICH ONE
T(x)
#cast(x as T)
TIL that everyone has an entirely different opinion
LMAO
actually a good idea tho
at that point might aswell #as(x, T)
or still just do some variation of as or .as<> or smth
if u want to multiply by pointers just use ()
@dawn ledge #cast(T, x) or #as(T, x)
#as just to piss eagely off
make .as a function on everything
what if i swapped @ and #
fn main() #fmt #alias(foo::bar) {
x := @alloc(i32);
return @cast(i64 *, x);
}
no this is genuinely evil
what it would be right now
fn main() @fmt @alias(foo::bar) {
x := #alloc(i32);
return #cast(i64 *, x);
}
less evil (still evil because #cast)
@ for builtins reminds me a lot of zig lol
idk if qbe is great for fp
GRIN is a compiler back-end for lazy and strict functional languages with whole program optimization support. - grin-compiler/grin
unmaintained 
do i compile to haskell
We try only to add languages once they have some usage on GitHub. In most cases we prefer that each new file extension be in use in at least 200 unique :user/:repo repositories before supporting them in Linguist (but see #5756 for a temporary change in the criteria).
get 300 vencord members to use elle
i like this
how did you read 200 and immediately forget
unless it's more bugs ββββββββββββββββββββββββββββββββββ
it took me forever to find this bug but
fn main() {
x := i32;
}
``` this compiled for the longest time lol
better
well usually yes but i just say EOF for end of token stream
the part in between := and ; is a new token stream
just say that then
cursed but its an old parser
silly
true
When I do token subtrees, I use the corresponding terminator char for eof message
Which is to say, ) ] or }
wdym like
Or \0, since I implicitly wrap the whole stream in a pair of \0 tokens to simplify many checks
i can do that but that means i have to pass down the delimiter through the parser recursion
That's no issue for me, my cursor is just ```rs
#[derive(Clone)]
pub struct Cursor<'a> {
tokens: &'a [RawToken],
range: Range<usize>,
pos: usize,
}
expected foo found 
oh interesting i should do that
i clone the tokens
all of that debating and i STILL ended up with #cast π
btw the thing you mentioned earlier with <T>x is flawed in that it can be misinterpreted as a binop or generics
i have a poll here of different options
ai reference
@lucid trail
same issue with T.from
ic
this syntax isnt really anywhere else in the language so it would look kinda weird
just realized itβs basically the same as as
that too but imagine someone first discovering the language
"how do i cast"
"oh i write the type, then #, then from(my thing) that makes.. absolutely no sense"
if its (T)x you could argue its C-like, if its #cast you could argue its consistent with #size and stuff like that
@valid jettyhttps://en.wikipedia.org/wiki/Goertzel_algorithm reAd
The Goertzel algorithm is a technique in digital signal processing (DSP) for efficient evaluation of the individual terms of the discrete Fourier transform (DFT). It is useful in certain practical applications, such as recognition of dual-tone multi-frequency signaling (DTMF) tones produced by the push buttons of the keypad of a traditional anal...
hold on im refactoring the entirety of elle to use #cast
husk
ive been meaning to get rid of (T)x anyway because it fails to parse specific expressions lol
(T)x casting when tuple types exist is a pain

#static_cast
ok c++ dev
tbh i dont understand c++ casts at all lol
i just always end up doing c style ones
cpp is weird
i've been doing it for 4mo and it feels really boring
even lua is more interesting
lua and go are on the top of my list of langs i hate
maybe interesting but its so boring
after years i know nothing
c++ is intresting but i always get confused about when classes are created
i want the rust
c++ has things
should i call this variable WHITESPACE_EATER_LESS_HUNGRY
insane
is it normal to limit whitespace between prefix and command name in case social engineering

dude copy this text
what is this going to be used in 
primitiveParser.ts: Lines 156-193
const SECOND = 1000;
const MINUTE = 60 * SECOND;
const HOUR = 60 * MINUTE;
const DAY = HOUR * 24;
const WEEK = DAY * 7;
const YEAR = DAY * 365.25;
const MONTH = YEAR / 12;
function durationToMS(length: number, unit: string): number | null {
switch (unit) {
case "ms":
return length;
case "s": case "sec": case "secs": case "second": case "seconds":
return length * SECOND;
case "m": case "min": case "mins": case "minute": case "minutes":
return length * MINUTE;
case "h": case "hr": case "hrs": case "hour": case "hours":
return length * HOUR;
case "d": case "dy": case "dys": case "day": case "days":
return length * DAY;
case "w": case "wk": case "wks": case "week": case "weeks":
return length * WEEK;
case "mo": case "mon": case "month": case "months":
return length * MONTH;
case "y": case "yr": case "yrs": case "year": case "years":
return length * YEAR;
default:
return null;
}
}
if you fall for that you're just stupid
oh my god
why you can't?
is this venbot
yes
remember when i was trying to do temp vc
and venbot had no database
and i only knew redis
what the hell i just accidentally got this commit
you win
@placid cape @hoary sluice @lucid trail look at this beautiful syntax highlighting
its either ident | namespace::ident | module::namespace::ident (doesnt exist yet) but in all cases the first one should be highlighted differently
can namespaces be nested?
nop only 1 level deep
as far as module::namespace::f
mod::ns_a::ns_b::foo
infinite nesting namespaces is kinda more evil
how
you dont have namespace destructuring in the language
Hierarchies are awesome though
if you have a function under a deep namespace you need to do a::b::c::d::e() every time
Well do something about that then
can you just bring a::b::c::d into scope?
then just do e()
If you bring a:π ±οΈ:c::d into scope you'll need d::e()
i mean something akin to using namespace a::b::c::d
Star imports are the devil though
@deep mulch does using namespace std in all his header files
yop
STOP DOING INFINITE NAMESPACES
- NAMESPACES WERE NOT SUPPOSED TO BE 20 LEVELS DEEP
- YEARS OF NAMESPACES yet NO REAL-WORLD USE FOUND for going higher than 2 LEVELS
- Wanted to go higher anyway for a laugh? We had a tool for that it was called UNDERSCORES
- Yes please give me
xyz::client::config::builder::retry::policy::standard::StandardRetryStrategy
LOOK at what Namespace Users have been demanding your Respect for all this time, with all the C++ and Rust we built for them
(These are REAL namespaces, done by REAL Namespace Users)
use galaxy::systems::engine::physics::collision::detection::broadphase::GridPartitioning;
?????
use company::platform::autonomy::perception::sensorfusion::lidar::calibration::internal::algorithms::optimization::LidarCalibrator;
???????????????????
"Hello I would like a vision::systems::realtime::localization::vslam::vio::features::matching::gpu::kernels::FeatureMatcher please"
They have played us for absolute fools
youre insane
insane
@pseudo sierra @hoary sluice omw to debug a vscode extension with neovim
is this a good distinction
no
I feel weird about types being used as parameters like that
well yield is special
@deep mulch love?
it highlights self and args differently because theyre special names
very cool
i personally donβt like italics in themes, maybe cause berkeley monoβs italics are mid
i like them only for comments and special identifiers like that
you originally set every single parameter for function definitions to use variable.special which was a little excessive lol
@lucid trail i know that tree sitter is a context awareless AST, but do you think theres any way where i can have:
fn foo(i32 foo, ElleMeta meta, i32 bar) { // meta is specially highlighted because its type is ElleMeta
meta; // special highlight
}
fn bar(ElleMeta meta_with_another_name) {
meta_with_another_name; // specially highlighted too
}
``` where basically when it finds a param where the type is ElleMeta it marks that identifier to be colored with variable.special for the rest of the function body??
probably too complicated for tree sitter
i dont wanna mark all meta to be colored specially because you could plausibly have a variable called meta which isnt an ElleMeta
right now theres
and
i can relatively easily get meta (or whatever you decide call the parameter) to be highlighted in the function header
but getting it to be also highlighted for all other identifiers in the function body idk how to even start approaching that
@valid jetty
@deep mulch fix
nop
cat
maybe. I feel like this is more on the highlights.scm side than the grammar side
yeah i know, the meta coloring in the function header is on scm side too
can you send over your highlights.scm
i just have
; Highlight some identifiers with variable.special
((identifier) @variable.special
(#any-of? @variable.special
"self"))
; Highlight the ElleMeta one
(parameter
type: (type) @type
name: (identifier) @variable.special
(#eq? @type "ElleMeta"))
(attribute_parameter
type: (type) @type
name: (identifier) @variable.special
(#eq? @type "ElleMeta"))
``` i have no idea how to "scope" it for a function's body
oh yeah ok
not committed yet because im still doing things
these are semantic tokens
probably need tagging to implement them, and I also have no idea how they work
wait
these are all semantic tokens, technically
yeah but theyre unconditionally colored with variable.special
my idea was to color with variable.special only if there is a variable with the type ElleMeta and the same name in the function header (which means it should only color when in the function body like how do you even do that)
because tagging would probably highlight it here
fn foo(ElleMeta meta) {
meta; // special highlight
}
fn bar() {
meta; // with tagging, chances are its gonna be highlighted here too
}
this doesn't do anything for me rn
do you have latest tree sitter
yes, I'm pointing it at your repo 5faa
just reloaded the window and it worked
ah ok
pretty sure i rebuilt tho
lmaoo
btw is there a way to locally test tree sitter changes without pushing and changing the rev?
like, actually view the changes in zed
i know you can tree-sitter parse
tree-sitter playground has been good
and tree-sitter highlight
dont know how to point to a local repo in zed tho
i saw that but that requires docker desktop which is like 3gb and i dont have the storage for that π₯²
are you on a 256 macbook
it's over
truly
rl::set_shader_value(
shader,
rl::get_shader_location(shader, "time"),
&#cast(f32, rl::get_time()),
SHADER_UNIFORM_FLOAT
);
look at this beautiful syntax
you can take the address of an immediate expression in elle
you can do like &1 and it automatically makes a temporary
&#cast(f32, rl::get_time()), is so beautiful
no box
woaw
Yeah in rust you would totally get temporary value dropped while borrowed
the power of a gc (I guess :3)
oh god i actually cant get around the issue of types vs exprs in directives
the #size directive LITERALLY ACCEPTS EITHER
lol types vs exprs has so many conflicts
like i can do #size(i32) or #size(foo() * 3)
#sizeT()
im gonna just have to make choice(prec(2, $.type), prec(1, $.expression)) and hope for the best i think
LMAO @lucid trail have you seen this
use std/prelude;
fn main() {
while true {
bin := Array::from_string(io::input("Enter a binary string: "));
if !bin.every(fn(char x) "01".contains(x)) {
$eprintf("Invalid string: {}", bin);
continue;
}
mult := math::pow(2, bin.len());
res := 0;
for c in bin {
// extremely insane expression
// im surprised this even works
c == '1' && (res += mult /= 2);
}
$dbg(res);
}
}
bin to dec !! totally nothing suspicious going on
ah ive seen that cond&&expr thing in js golf before
but have you seen res += mult /= 2 before
no but i can guess what it does
the long way would be
for c in bin {
if c == '1' {
mult /= 2;
res += mult;
}
}
assignment exprs usually return the value they assign
you should remove the curly brackets from the for loop too if you can in this lang
Wow, I feel like chaining assignments like that could be quite ambiguous from a user's pov
it took me a second to figure out what it does when i reread it and i was the one who wrote it π
oh probably not if there's no parens around the first bit
yeah, its too ambiguous to parse
either mandatory x (cond) stmt or x cond { stmt }
i decided to make curly mandatory because more often than not you want a multi line thing anyway
and not very often is your condition big enough that you need ()
i was going on about ambiguity earlier but i feel like this one isnt as bad because you can just read the assignments right to left and it makes sense
I've determined that this is probably not possible within tree-sitter
lmao i thought so
idk why it took so long for this to exist
but you can .values() and .entries() on a hashmap now
for some reason i only did .keys() when i first wrote it???
what looks best
i like the pink and orange ones best but idk
i was trying to make it as close to rust as possible
the last one is the only one that makes sense
yeah the last one is what rust's looks like too
1 or 4 imo
i cant tell what the difference is between the first two
2 uses the same colour for both the use and the paths
first but swap the colors
Nice so you're finally making treesitter
@valid jetty do you desugar in the parser
like for let i; cond; i++ => let i; while cond { i++ }
STOP DOING #compiler_directives
- BUILTINS WERE NOT SUPPOSED TO BE INVOKED WITH HASHTAGS
- YEARS OF LANGUAGE DESIGN yet NO REAL-WORLD USE FOUND for prefixing functions with
# - Wanted to make things look edgy anyway for a laugh? We had a tool for that: it was called MACROS
- Yes please give me
#cast(x, T)instead of the perfectly readablex as T - Built-ins don't need to be segregated with
#; they can be keywords themselves
LOOK at what Directive Enthusiasts have been demanding your Respect for all this time, with all the compilers and interpreters we built for them
(These are REAL directives, used by REAL Directive Enthusiasts):
let size = #size_of(T);
let ptr = #alloc(T, n);
let id = #i(x);
"Hello, I would like a #env.allocator.free_self please"
They have played us for absolute fools
directive enthusiast π
π
has anyone tried these here yet
what's the consensus
was a reply to ^
i fucking hate discord
they're awesome
used argon for the zed font and krypton for the buffer
depends on who you ask
they're absolutely horrendous for me, cause i lean more towards the terminus/departure mono side for monospace fonts
the third one is literally computer modern monospace
they look meh
better than some others
but i wouldnt use them
yeah they fit better for like a replacement for jetbrain's
what does that mean
i dont see a difference can someone explain
isnt that any good monospace font
maybe
just use maple mono
awesome ligatures bro
width on m
ahhh
whats the difference between the left side and the right side
i am being sarcastic
there is no difference
With regards to GitHub Blocks, blocks.githubnext.com will no longer work once the technical preview concludes and we will not make Blocks into a full GitHub product. Blocks was an exciting experiment and thanks to your feedback, we learned a lot about how we might add extensibility to GitHub.com. We expect GitHub will continue to explore this capability in the future, but for now weβre focusing our efforts on other areas.
kinda sad blocks got sunset, i used to be in the testing group :(
What's that
interactive elements in markdown
like graphs and diagrams
@hoary sluice https://githubnext.com/projects/copilot-voice/
akjhkjaskjdhjkasdjkasjkdhkasd
me when i use nvim
what do u use
github next has devolved into ai slop
ai is slop by definition
its tired of typing coding

this
how

slop for ur brain
definition of ai is performanig any task typically associated with humans, which includes medical diagnosis that humans couldnt do
cuz they forcing ai into everything where it doesnt even make sense and invent products/solutions for things that werent a problem xd
not all ai is slop
copilot is absolutely worthless btw
copilot voice is in the gray area but it allows handicapped people to code which is awesome and not slop
eagely boutta argue about absolutely everything
it will not be used by vibe coders cause they use cursor with voice input
yess
im ready to argue too π½
the earth is round eagely
let him cook
whats wrong with arguing
youre bringing up stupid points, this very well reflects the current geopolitical and economic situation in the world
also nixos
let me cook you

r u from catalonia
please tell me copilot voice isnt an april fools joke by microsoft
i dont even know where catalonia is
ok they made it slop
i thought it was a tool for disabled people
its just a general purpose not even programming ai slop
microsoft manages to make everything slop
im asking cuz i thought u need to live there to get a .cat domain
hmmmm how am i supposed to run this
theres a trick called not upholding contracts
unless u can get it via njal.la or smth
oh yeah there we go
30β¬/year on njal.la
oh, you have to be there to get it
my registrar said i need to upload catalonian content in 3 months of registering, its been years and they dont care
i got it from regery
like $10/y
buy?
lc.wa 30β¬ to $
nvm
i lied its $20/y
iwas going to say catnoise.cat is already taken
most <dictionary word>.<tld> domains are almost always taken
and you have to pay some absurd price if they're up for transfer
germancatnoise.cat is available tho
english dictionary :^)
vencord.cat is also available
vencord.app
β οΈ vencord.app is a fake malicious site! The only real website is https://vencord.dev! If you have downloaded anything from vencord.app, remove everything you have downloaded immediately, run a malware scan and change your Discord password.
nooo copy.cat is also taken
of course it is
hacker.cat
I count possibly 5, can't count the dtors
"But C++ is faster than Python!"
Check out (some of) the source code: https://github.com/SheafificationOfG/Fibsonisheaf
Soft prerequisite: https://youtu.be/KzT9I1d-LlQ
Errata:
At 14:00, I meant (n-1)/8 bytes!! Thanks @annaclarafenyo8185 .
Timestamps:
00:00 - Introduction
00:54 - But C++ is faster than Python!
01:34 - (H...
Very good video
sheafy(int x) {
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
}
or is that indirect
foo
Very much is indirect
They arenβt called by main
watching now
i feel like a big part of the problem is using std::cout std::endl lmao
but i will keep watching
Keep watching!!
is there really any reason to use endl instead of \n if youre not dealing with huge amt of rows
Imagine not using std::println()
std::println!()
i'd assume it depends on what u r doing
like if u print to console it prolly doesn't matter
but p sure \n + std::flush is equivalent to std::endl
so if u know u need a flush just use it explicitly
all this assumes u know what u r doing xd
eprint!()
They can differ if you're printing from multiple threads simultaneously
But don't do that
use locks when writing to the same fd across threads
use locks when writing to anything shared across threads infact
Guys which neovim package manager should i be using? I use vim plug rn
print("sybau")
i use lazy.nvim
its great
although i want to move to lz.nvim cause of my immutable config setup
There's way too many
Was it finally implemented without using fmtlib

Wtf is luarocks, wtf is lazy.nvim what should i use im confused
basically luarocks is a lie because lua doesnt rock
just use a distro
lazy.nvim is one of hundreds of plugin managers for nvim
it will setup allat for u
@fleet cedar should i curry in the parser or in the interpreter
the parser is supposed to be just parsing the ast and not doing any actual logic right
i dont like this comparison of c++ and python "assembly"
former is actual assembly, latter is an abstract instruction set
parse it as a function with a list of arguments and evaluate it by storing its curried form in the env
Bytecodes are similar to asms, but usually much higher level
Oh, you mean whether a b c d should be represented in the ast as Call(a, [b, c, d]) or Call(Call(Call(a, b), c), d)
yes
https://code.visualstudio.com best plugin manager β€οΈ
Ai bullshit detected β οΈ
your code editor
nixvim
your text editor REDefined with ai
ill make neovisual studio code which removes ai
ill call it nvim to overshadow neovim though
someone should make a full on ide with no ai bs and market it as innovative but in reality its just an nvim config
Ill probably just use nvchad like someone suggested
based
watching this dudes videos makes me realize just how bad im at math
we moved away from VTs for a reason. embrace GUIs π
but make sure to take a day off to configure it
we still emulate VTs for a reason
embrace the terminal lifestyle
some people spend all their free time learning random math subcategories
sheafification 
wheere
Im ok with it
I have nothing to do anyways
My current neovim setup is kinda broken
Namespaces are bull, gimme modules
i dont understand the dip here
https://youtube.com/watch?v=u24AjKinHNU?t=1102
LOL imagine spending hours writing crazy math just for GNU MP to be faster than your multithreaded solution on single thread
Get an exclusive deal on a 2-year plan with NordVPN + 4 months free by going to https://nordvpn.com/sheafification (try it risk-free with NordVPN's 30-day money back guarantee)!
I'm sure we've all heard the term "blazingly fast" before, but what does that even mean? Let's try and find an answer to this question by further optimising o...
never have i watched a 4 video series on fib numbers this attentively
we should kill rustaceans

but why kill @valid jetty
@valid jetty what are u gonna do when boris johnson puts cameras in ur iphone
she can stay alive
guys is lua a real language or not
y tho
Terrible syntax, global by default, and 1 indexing
well... the syntax isnt that bad
end
touche
I kinda like lua as a scripting language (cuz that's what it is) and if you think of it as bash but it's usable for full programs it makes 100x more sense
when i see brave: someone get me the manager