#๐Ÿช…-progaming

1 messages ยท Page 60 of 1

fleet cedar
#

C++ doesn't do it much better tbh

#

C++ enums are terrible

dense sand
#

i always want to rewrite to rust when i have mental breakdown because something doesnt work

fleet cedar
#

Do

dense sand
#

id have to probably redo the classfile parser

valid jetty
#

this feels so weird to me because it just inherently feels so objective-C/java like

dense sand
#

i just like the win32 api style of naming

valid jetty
#

itโ€™s so objc coded ๐Ÿ˜ญ๐Ÿ˜ญ๐Ÿ˜ญ

dense sand
#

wth i never did objc ๐Ÿ˜ญ

valid jetty
#

Method *methods = class_copyMethodList(uiColorClass, &methodCount); this is objc

dense sand
#

๐Ÿ˜ญ

valid jetty
#

you can see where im coming from right

+ (UIColor *)simpleColorWithIndex:(int)index preferences:(NSUserDefaults *)preferences originalColor:(UIColor *)originalColor {
    NSString *key = [NSString stringWithFormat:@"flora%@Color", index % 2 == 0 ? @"Primary" : @"Secondary"];
    NSString *colorFromDefaults = [preferences objectForKey:key] ?: (index % 2 == 0 ? @"e8a7bf" : @"d795f8");
    UIColor *colorAtKey = [self colorFromHexString:colorFromDefaults];

    NSDictionary *original = [Utilities hsvColorWithColor:originalColor];
    NSDictionary *custom = [Utilities hsvColorWithColor:colorAtKey];

    id saturationInfluence = [preferences objectForKey:@"floraSaturationInfluence"];
    id lightnessInfluence = [preferences objectForKey:@"floraLightnessInfluence"];

    double saturationSplit = saturationInfluence != nil ? [saturationInfluence doubleValue] : 0.40;
    double lightnessSplit = lightnessInfluence != nil ? [lightnessInfluence doubleValue] : 0.20;

    // Use the custom color, with 40% saturation influence and a 20% brightness influence.
    // Alpha is not affected by the custom colors. This is intentional.
    return [UIColor colorWithHue:[[custom objectForKey:@"hue"] doubleValue]
                        saturation:[self averageWithSplit:saturationSplit firstValue:[original objectForKey:@"saturation"] secondValue:[custom objectForKey:@"saturation"]]
                        brightness:[self averageWithSplit:lightnessSplit firstValue:[original objectForKey:@"brightness"] secondValue:[custom objectForKey:@"brightness"]]
                            alpha:[[original objectForKey:@"alpha"] doubleValue]];
}
fleet cedar
#

GetMethodByName seems like a bad idea, since name is not a key in that table

valid jetty
#

other than the [] syntax

dense sand
#

and fork it and edit to my needs

#

but i dont feel like rewriting 2K loc, even if its not that much

#

maybe on my next mental breakdwon

jade stone
#

Makefile my beloved

fleet cedar
#

GetInstructionByName -> GetInstructionName?

dense sand
#

yea i will rename it someday

valid jetty
#

im SO glad i added else if it makes these things so much neater

#
fn rune::encode(rune *self) -> string {
    c := self.inner;
    res := "";

    if c <= 0x7F {
        res.push(c);
    } else if c <= 0x7FF {
        res.push(0xC0 | (c >> 6) & 0x1F);
        res.push(0x80 | (c & 0x3F));
    } else if c <= 0xFFFF {
        res.push(0xE0 | (c >> 12) & 0x0F);
        res.push(0x80 | (c >> 6) & 0x3F);
        res.push(0x80 | (c & 0x3F));
    } else if c <= 0x10FFFF {
        res.push(0xF0 | ((c >> 18) & 0x07));
        res.push(0x80 | ((c >> 12) & 0x3F));
        res.push(0x80 | ((c >> 6) & 0x3F));
        res.push(0x80 | (c & 0x3F));
    }

    return res;
}
#

instead of

fn rune::encode(rune *self) -> string {
    c := self.inner;
    res := "";

    if c <= 0x7F {
        res.push(c);
    } else { if c <= 0x7FF {
        res.push(0xC0 | (c >> 6) & 0x1F);
        res.push(0x80 | (c & 0x3F));
    } else { if c <= 0xFFFF {
        res.push(0xE0 | (c >> 12) & 0x0F);
        res.push(0x80 | (c >> 6) & 0x3F);
        res.push(0x80 | (c & 0x3F));
    } else { if c <= 0x10FFFF {
        res.push(0xF0 | ((c >> 18) & 0x07));
        res.push(0x80 | ((c >> 12) & 0x3F));
        res.push(0x80 | ((c >> 6) & 0x3F));
        res.push(0x80 | (c & 0x3F));
    }}}}

    return res;
}
dense sand
#

so much math for jvm initialization i cannot believe it

jade stone
#

@dense sand sending a null pointer exception in your direction

valid jetty
#

me too

dense sand
#

the horrendous switch is expanding

hoary sluice
#

even i have else if lmao ๐Ÿ˜ญ

dense sand
#

what memory consumption would you consider a jvm "lightweight"?

#

like <1mib?

fleet cedar
#

If you make a jvm that costs <1mb for all programs I will be quite impressed

fleet cedar
#

Same time as she adds sum types probably

hoary sluice
#

shes obviously gonna call it match

royal nymph
#

DONT CALL IT WHEN

shrewd canopy
#

Call it case

#

Like Ruby

lavish frigate
#

we need when

hoary sluice
#

match match match

#

rust rust rust

#

blazingly fast ๐Ÿš€ and memory safe ๐Ÿฆบ

lavish frigate
#

thoughts??

hoary sluice
#

yield yield yield yield yield yield yield yield yield yield yield

fleet cedar
#

I have doubts as to whether that would work together with any other language features

leaden crater
#

@valid jetty why does it change the address by 8 bytes instead of 4 for the b->v

fleet cedar
#

Like, any whatsoever

fleet cedar
#

What if you call a function that changes the watched expression but changes it back before returning

lavish frigate
#

it would be implemented so that the when condition runs every time the value of the variable changes

fleet cedar
#

Now you're leaking implementation details

fleet cedar
#
let mut foo = Foo { bar: 98 };
when foo.bar == 32 { println!("whatever"); }
foo.do_something();
``` does this trigger the when or not
lavish frigate
#

does do_something change bar?

fleet cedar
fleet cedar
lavish frigate
#

id implement it quite literally just so it runs all when conditions and potentially their code whenever the value of a variable/property is changed internally not sure why anything else matters

leaden crater
#

i didnt know why it was wrong

fleet cedar
#

So now everything a function does is observable, rather than only the output

#

Are you trying to make Hyrum as powerful as a god or

jade stone
#

I love

leaden crater
#

@deep mulch

austere idol
lavish frigate
#

defer but not defer

#

Mostly because it works completely differently and has different use cases and is stupid to compare to defer

hoary sluice
valid jetty
formal belfry
#

more models to use while vibe coding

valid jetty
#

hold on i just looked over again

#

wdym it only goes up by 4

#

48 -> 4c is 4
4c -> 50 is 4

leaden crater
#

yea i was stupid

deep mulch
#

@valid jetty add reflection to elle

#

@valid jetty add classes to elle

pseudo sierra
#

@deep mulch you will be forced to use functional programming for the rest of your life

pseudo sierra
inland widget
#

i tried a Native electron app iframe event observer but nope! can't change the URL.
you'd think MutationObserver would show iframes for discord but nope!
can't beat a good ol' setInterval, cache checker and document.querySelectorAll muahaha. anyway now i can actually toy with music embeds

royal nymph
#

look at FixSpotifyEmbeds ๐Ÿ˜ญ

inland widget
#

that was my first port of call ;-;

#

no amount of frame.executeJavaScript tomfoolery in "dom-ready" or even anything in "frame-created" seemed to get the thing to actually change its src - perhaps some reasonable security thing

valid jetty
# deep mulch <@581573474296791211> add reflection to elle
local fn __internal_throw_invalid_needle(ElleMeta meta, ElleMeta caller_meta, ...args) {
    io::cprintf(
        "[%s:%d:%d] ERROR: Expected a second argument of type 'string' or 'char'.\n",
        caller_meta.file, caller_meta.line, caller_meta.column
    );

    for i := 0; i < meta.arity; i += 1 {
        if meta.types[i] == "string" {
            io::cprintf("%s", args.yield(string));
        }
    }

    libc::abort();
}

fn string::contains(ElleMeta meta, string self, ...args) -> bool {
    if meta.arity != 2 {
        __internal_throw_invalid_needle(meta, "The needle argument was not provided.\n");
    }

    if meta.types[1] != "char" && meta.types[1] != "string" {
        __internal_throw_invalid_needle(meta, "Got a value of type ", meta.types[1], " instead.\n");
    }

    needle := meta.types[1] == "char"
        ? #[args.yield(char), '\0']
        : args.yield(string);

    return (void *)strstr(self, needle) != nil;
}
``` reflection !!!
#
"abc".contains("ab");
"abc".contains('a');
valid jetty
# deep mulch delete

classes!!!

use std/prelude;

struct Animal {
    void *speak;
    void *inner;
};

fn Animal::speak(Animal *self) {
    fn *speak = self.speak;
    speak(self.inner);
}

namespace Cat;
fn Cat::speak(Cat *self) {
    $println("the word that a cat would say");
}

fn Cat::new() {
    animal := #alloc(Animal);
    animal.speak = Cat::speak;
    animal.inner = nil;
    return animal;
}

struct Dog {
    string name;
};

fn Dog::speak(Dog *self) {
    $printf("woof im {}!", self.name);
}

fn Dog::new(string name) {
    self := #alloc(Dog);
    self.name = name;

    animal := #alloc(Animal);
    animal.speak = Dog::speak;
    animal.inner = self;
    return animal;
}

fn main() {
    cat := Cat::new();
    cat.speak();

    dog := Dog::new("zoot");
    dog.speak();

    ((Cat *)dog).speak();
}
fleet cedar
#

Implement type errors next

valid jetty
#

wdym

#

oh

#

horror

#

i am NOT making elle a fully dynamic language

#

ive learnt from python and javascript that its just not a good idea

#

@royal nymph love?

function rosieWith<T>(arg: T, callback: Function) {
    const descriptors = Object.getOwnPropertyDescriptors(Object.getPrototypeOf(arg));

    for (const [key, descriptor] of Object.entries(descriptors)) {
        typeof descriptor.value === "function" && ((window as any)[key] = descriptor.value.bind(arg));
    }

    callback();

    for (const [key, descriptor] of Object.entries(descriptors)) {
        typeof descriptor.value === "function" && delete (window as any)[key];
    }
}


rosieWith([1, 2, 3], () => {
  console.log(map(x => x * 2)); // [2, 4, 6]
}); 

// ๅฎŸ่กŒใ•ใ‚ŒใŸJavaScriptใซใ‚จใƒฉใƒผใŒ็™บ็”Ÿใ—ใพใ—ใŸ:
// map is not defined 
console.log(map(x => x * 2));
royal nymph
#

nop

lavish frigate
#

i thought this was elle at first and was about to say "ts!" yeah it is ts im a dumbass

valid jetty
#

is there a simpler way to do that

fleet cedar
#

You can very easily not do that

royal nymph
valid jetty
#

for no reason in particular its just funny

royal nymph
#

it's deprecated for a good reason ๐Ÿ˜ญ

royal nymph
# valid jetty is there a simpler way to do that

this is cooler

const validIdentifierRe = /^[A-Za-z_$][\w$]*$/;
const reservedKeyWords = ["break", "case", "catch", "class", "const", "continue", "debugger", "default", "delete", "do", "else", "export", "extends", "false", "finally", "for", "function", "if", "import", "in", "instanceof", "new", "null", "return", "super", "switch", "this", "throw", "true", "try", "typeof", "var", "void", "while", "with"];

const isValidIdentifier = k => typeof k === "string" && validIdentifierRe.test(k) && !reservedKeyWords.includes(k);

function getValidIdentifierKeys(obj) {
    const keys = Reflect.ownKeys(obj).filter(isValidIdentifier);

    const proto = Object.getPrototypeOf(obj);
    if (proto) keys.push(...getValidIdentifierKeys(proto));

    return keys.filter((k, idx) => keys.indexOf(k) === idx);
}

function realWith(obj, func) {
    const keys = getValidIdentifierKeys(obj);
    const values = keys.map(k => 
        typeof obj[k] === "function"
            ? (...args) => obj[k](...args)
            : obj[k]
    );

    return Function(...keys, "return " + func.toString())(...values)();
}
valid jetty
#

insane..

royal nymph
#

js so bad

fleet cedar
ornate quiver
#

also is that -O3

leaden crater
#

i dont do pragma

ornate quiver
#

compiler flag for max optimizations

leaden crater
#

yea i dont do pragma

#

i was just doing a simple address thing for school, and i was stupid

#

tho the ability to know where something is, makes me really want to segfault intentionally

inland widget
#

namespace crimes, which are in the top three funnest kinds of programming crime

formal belfry
#

programming crime

inland widget
#

delicious delicious syntax sugar

formal belfry
#

who is taking us to jail

inland widget
#

the compiler

#

or. the transpiler i suppose in this case

formal belfry
#

have u committed any crimes ๐Ÿ”

inland widget
#

almost definitely! plus i'm probably illegal in at least 100 countries

leaden crater
#

whats a transpiler

formal belfry
#

the compiler is trans so its a transpiler

inland widget
#

the kind of thing that TypeScript uses where it inputs code and outputs code

#

that too

#

a minifier is a basic kind of transpiler

valid jetty
#

why does this look like elle what have i caused

#

this is Go

hoary sluice
#

@valid jetty nixvim is so much easier to configure than normal lua

hoary sluice
valid jetty
#

no this is from a tsoding stream

hoary sluice
#

its so easy

#

everything works

#

im almost done

#

ive spent like 2 hours on this

#

(not including time spent crying that i couldnt get it set up)

valid jetty
hoary sluice
dense sand
#

zozin

formal belfry
#

linux

#

who uses that garbage?

dense sand
#

me

#

i like garbage

formal belfry
#

joking

shrewd canopy
#

tbh linux is nightmare if you use nvidia gpu

formal belfry
#

dont use nvidia then

lavish frigate
#

@valid jetty

dense sand
dense sand
valid jetty
#

aima japaknees

peak hull
#

anyone know how to use a native.ts file and a index.ts file but you need to use the index.ts file to interact with the native.ts file

inland widget
#

They can be async as well if needed

deep mulch
#

WAHOO!

inland widget
#

Note that in some plugins (eg fixSpotifyEmbeds.desktop) this isn't necessary because native.ts just Does Stuff at the global level; because that's already ran there's no need to call in or anything

deep mulch
#

@jade stone help me with C++

#

for some reason the macro says params is unused even though it is

#
#define jni_func_name(name) Java_dev_zt64_mpvkt_LibMpv_##name
#define jni_func(return_type, name, ...) JNIEXPORT return_type JNICALL jni_func_name(name) (JNIEnv *env, jobject obj, ##__VA_ARGS__)
jade stone
#

idk, i just use clangd

deep mulch
#

this is clangd-tidy i think

jade stone
jade stone
#

so good

#

to set it up, just run bear -- make

deep mulch
#

i think clion uses clangd

#

ughhh so many warnings @jade stone

#

its always stull like this Clang-Tidy: 'apiType' declared with a const-qualified typedef; results in the type being '_jobject *const' instead of 'const _jobject *'

#

like what would i even do about that

jade stone
#

idk ๐Ÿ˜ญ

#

i am going to go insane

deep mulch
uneven gate
#

bumpers!

jade stone
#

read electron IPC docs and any every plugin that uses a native.ts

royal nymph
# jade stone

insane

function foo<O extends object, K extends keyof O>(thing: O, key: K) {}
jade stone
#

ended up inlining keyof O

#

O[keyof O] my beloved

uneven gate
# jade stone read electron IPC docs and any every plugin that uses a native.ts

got it, [this](#๐Ÿช…-progaming message) helped alot.
The syntax for the "import" scared me for a bit when reading other plugins

Note for future people, if you want your native.ts func to take arguments, you need a dummy unused arg in the native.ts function, it looks like this:

// inside your native.ts:
export function myFunc(_, arg0, arg1) {
  console.log(`I'm doing Electron tomfoolery yippee ${arg0} ${arg1}`)
}

// In the imports of your index.ts:
const Native = VencordNative.pluginHelpers.YourPluginName as PluginNative<typeof import("./native")>;

// To call from your index.ts:
Native.myFunc("arg0", "arg1")
native spruce
#

@robust jackal need more context on what you're trying to do with the scene that you have

#

like whats your current code

#

you can find logs here

#

where are you applying that to

#

oh this is interesting

#

I do wonder if you could just put

.compatMentionCounter(
                    WVStore: WVStore,
                    pingCountText: pingCountText
                )```

on appmenu
#

yeah im not sure i havent tried that before

#

ill experiment with it later (playing game rn

#

nvm ill do it now

#

have a project that actually setup

#

@robust jackal wait cant you use .onChange(of: ) { _ in

#

instead of .onChange(of: ) { _,_ in

#

this should work on macos 13

#

since you're not using before and only after this should work, though its deprecated (but who cares!)

lavish frigate
#

cursor ai

delicate groveBOT
#

Alright @robust jackal, in 10 hours: โ€ฆ

spark tiger
wispy kernel
spark tiger
lavish frigate
#

js config is terrible and we should explode js package devs who use them

ionic lake
#

why

deep mulch
#

@ionic lake taskyyy

ionic lake
#

hey

stiff elk
#

I'm having the same issue too, did you find a fix?

deep mulch
#

no not yet sadly

#

your username seems familiar, aren't you on xda or somewhere?

formal belfry
supple whale
#
import { diff, compare } from 'semver'

the offline caching's best friend

formal belfry
#

this shit site

#

imagine getting flashbanged by this at 4am

dawn ledge
delicate groveBOT
#

@robust jackal, <t:1744181536:R>: โ€ฆ

lavish frigate
valid jetty
#

LMAO

supple whale
#

has any1 here ever used workbox?

#
import { cleanupOutdatedCaches, precacheAndRoute } from 'workbox-precaching'
import { clientsClaim, skipWaiting } from 'workbox-core'

import { build, files, prerendered, version } from '$service-worker'

const precache = [...build, ...files, ...prerendered, '/'].map(file => ({
  url: file,
  revision: version
}))

precacheAndRoute(precache)
cleanupOutdatedCaches()
clientsClaim()
skipWaiting()
#

is this enough?

#

or do i need some extra shit

dense sand
#

if i have a string, is there any easy/performant way in C to create a "hash"-like number i can use to compare strings so i dont have to use strcmp

supple whale
leaden crater
dense sand
#

char ptr

leaden crater
#

so char

dense sand
#

yes i guess

supple whale
#

i'd do smth around the idea of

long num = 0;
for (auto i = 0; i < c.size(); ++i) {
  num += 31 * (long)c[i];
}
#

smth like that?

dense sand
#

mm sure

supple whale
#

very pseudo code

#

havent written C code in like.... 3 years

#

so i'm going hard off of memory

#

you could also use % if u want a somewhat consistent size

#

but there are defo better ways of doing it xd

leaden crater
#

cant do this?

char* c = "blahc";
char* d = "blahd";

while (*c && *d) {
    if (*c != *d) {
        return *c - *d;
    }
    c++;
    d++;
}
``` ?
supple whale
#

oh you want to string compare?

#

A/B problem lol, i thought u wanted a persistent hash XD

dense sand
#

yea well ill be storing a large amount of strings in map like structure, where the stirng is the key, and using strcmp for each entry isnt very effective

leaden crater
#

idk if c has more than strcmp / strncmp

dense sand
#

also you dont seem to handle \0

supple whale
#

you.... could do a cursed map-map-map

leaden crater
supple whale
#

it will implode ur memory requirements tho

leaden crater
#

but strcmp i think is the only solution if only c

#

why c and not c/cpp?

dense sand
#

cause i like C more

#

could rewrite to rust atp

#

gpt showed djb2

#

so perhaps that

supple whale
#

ay!

#

thats what i suggested

dense sand
#

yep!

supple whale
#

except u use bitwise shift instead of mult

dense sand
#

i will probably use it then

supple whale
#

which yeah makes more sense

dense sand
#

thanks

supple whale
#

ayyyyy, stonks, i'm not THAT much of a dumbass

dense sand
#

lmao

supple whale
#

XD

#

actually never used workbox b4

visual shellBOT
supple whale
#

MY EYES

dawn ledge
#

average internet plebian not embracing the superior light mode

supple whale
#

brotha

#

oled in HDR more

dawn ledge
#

great now you can explore hdr support in wayland and explain it to me

leaden crater
dawn ledge
#

light mode so good it didnt need a sequel, nothing could be as good as it is

supple whale
#

and no other linux distro

fleet cedar
#

@valid jetty just got around to adding elseif, was pretty easy ```diff
let cond = parse_expr(parser, ctx)?;
let then = parse_tree(parser.delim('{')?, ctx.sub());
let els = if parser.keyword("else").is_ok() {

  •            Some(parse_tree(parser.delim('{')?, ctx.sub()))
    
  •            if parser.clone().keyword("if").is_ok() {
    
  •                Some(vec![parse_stmt(parser, ctx)?])
    
  •            } else {
    
  •                Some(parse_tree(parser.delim('{')?, ctx.sub()))
    
  •            }
           } else {
               None
           };
    
supple whale
#

uuuh

#

i think the core for bookworm is 6

#

but its called debian 12?

#

i dont get it ngl

valid jetty
leaden crater
supple whale
#

i feel like thats meant to mean something

#

doesnt tho

leaden crater
#

yes

supple whale
#

ok

#

but?

#

6 matters because?

leaden crater
#

it sounds funny

peak hull
fleet cedar
valid jetty
#

@fleet cedar hi i request your wisdom

fleet cedar
#

Speak

valid jetty
#

my parser is technically multi pass, as in, i parse imports first, then structs, then functions and constants

#

which means the parser before ignored every token that was invalid, just skipped it entirely without throwing an error because it could be a valid token but the wrong pass

#

now i explicitly skip primitive parsing instead and throw an error

#

but is there a saner way to do that

#

what i mean is, before, every token that was deemed "invalid" was skipped, which means you can put top level statements and have them be completely ignored by the parser

#

now i explicitly do this sort of thing for every structure when its the wrong pass

if !should_parse {
    if external {
        while self.parser.current_token().kind != TokenKind::Semicolon {
            self.parser.advance();
        }

        self.parser.expect_tokens(vec![TokenKind::Semicolon]);
        self.parser.advance();
    } else {
        while self.parser.current_token().kind != TokenKind::LeftCurlyBrace {
            self.parser.advance();
        }

        self.parser.expect_tokens(vec![TokenKind::LeftCurlyBrace]);
        self.parser.advance();
        let mut nesting = 0;

        loop {
            if self.parser.current_token().kind == TokenKind::LeftCurlyBrace {
                nesting += 1;
            }

            if self.parser.current_token().kind == TokenKind::RightCurlyBrace {
                if nesting > 0 {
                    nesting -= 1;
                } else {
                    break;
                }
            }

            self.parser.advance();
        }

        self.parser.expect_tokens(vec![TokenKind::RightCurlyBrace]);
        self.parser.advance(); // Go past the right curly brace
    }

    return None;
}
#

but is there a better way to do that

#

like for structs its

if !should_parse {
    if namespace {
        while self.parser.current_token().kind != TokenKind::Semicolon {
            self.parser.advance();
        }
    } else {
        while self.parser.current_token().kind != TokenKind::RightCurlyBrace {
            self.parser.advance();
        }

        self.parser.expect_tokens(vec![TokenKind::RightCurlyBrace]);
        self.parser.advance();
    }

    self.parser.expect_tokens(vec![TokenKind::Semicolon]);
    self.parser.advance();

    return None;
}
fleet cedar
#

That does sound a bit nasty

#

The optimal strategy obviously depends on the language being parsed

valid jetty
#

i still need to skip the tokens, but i also dont want to do the naive "parse anyway but dont add it to the final ast"

#

for big structs or functions with big bodies that could be performance degrading

fleet cedar
#

I strongly recommend matching together delimiters before doing the main parsing

#

It makes everything so much nicer

valid jetty
#

what do you mean matching together delimiters?

fleet cedar
#

Have tokens as a tree instead of a list

valid jetty
#

ah so like

#

group together the whole unparsed function

#

or whatever

fleet cedar
#

Yeah for example

valid jetty
#

and tag it as "unparsed function" then skip that when its the wrong pass?

#

wait wdym a tree

fleet cedar
#

At the lexing stage (or just after), I pair delimiters together so instead of fn foo ( arg1 : num ) { print ( arg1 ) ; } it's fn foo (...) {...}

valid jetty
#

i wouldve thought just like a Vec<Token, Vec<Token>)> and the example would be vec![Token::of("fn"), vec![...]]

fleet cedar
#

And then for the first parse stage I just chuck that whole {...} into the ast node to be parsed later

valid jetty
#

i see thats probably a better way to do it yeah but then is it really a token stream

fleet cedar
#

Depends on how you define token stream

#

I do store it as a flat list, but the cursor type exposes it as a tree

valid jetty
#

yeah but under very loose terms you could consider this a parsing

fleet cedar
#

Yeah it's a matter of definitions

#

What I do know is that it's very convenient, and gives pretty decent error recovery cheaply

valid jetty
#

tbh having a preprocessing of the tokens before theyre properly parsed isnt a bad idea

#

ok i think ill put this under a todo and work on it in a day or two probably thank youuu

valid jetty
#

@deep mulch @placid cape @hoary sluice opinions?

// by default all private
fn foo() {} // foo is implicitly private
pub fn bar() {} // bar is explicitly public
global pub; // every function in the module is public

!pub fn foo() {} // foo is explicitly private
fn bar() {} // bar is implicitly public
// by default every method is defined unless specified with the `external` keyword
fn foo() {} // requires `{}` if not external
external fn bar(); // if external, requires just `;` and throws if you try to provide a body
global external; // every function in the module is external 

!external fn foo() {} // explicitly defined, requires `{}`
fn bar(); // implicitly external, requires just `;`
#

i already implemented this, its a more extensible system than global pub and local like i had before

#

global external is useful for header files which are pretty much always only external functions

#

i cant tell if this is a sane thing to have in the language though

deep mulch
#

it would be easier to just prefix with pub as needed

valid jetty
#

you already can

#

you can do that

#

but if you want to make them all public at once and only make specific ones private

deep mulch
#

not worth the effort to implement imo

valid jetty
#

there i changed it, does that make more sense lol

deep mulch
#

@valid jetty

valid jetty
deep mulch
#

insane

#

@valid jetty wyd

valid jetty
#

writing raylib bindings in elle

#

thats why i added global external

#

the raylib bindings are quite literally just external functions, structs, and enums

deep mulch
valid jetty
#

at some point but that essentially means writing a whole C parser

deep mulch
#

wouldnt you just parse the header

#

make elle vm

valid jetty
deep mulch
#

why

valid jetty
#

a .h file can be a .c file in disguise

valid jetty
deep mulch
#

how does cgo do it

valid jetty
#

To use cgo write normal Go code that imports a pseudo-package "C". The Go code can then refer to types such as C.size_t, variables such as C.stdout, or functions such as C.putchar.

If the import of "C" is immediately preceded by a comment, that comment, called the preamble, is used as a header when compiling the C parts of the package. For example:

// #include <stdio.h>
// #include <errno.h>
import "C"

The preamble may contain any C code, including function and variable declarations and definitions. These may then be referred to from Go code as though they were defined in the package "C". All names declared in the preamble may be used, even if they start with a lower-case letter. Exception: static variables in the preamble may not be referenced from Go code; static functions are permitted.

deep mulch
#

do

#

do that

#

except not comments

valid jetty
#

thats a big thing to write lmao

deep mulch
#

annotations

formal belfry
valid jetty
#

yeah i would make a syntax like

use foo/bar @c;
#

there is already an annotation/"attribute" syntax in elle why not use it

deep mulch
#

use foo/bar.h

valid jetty
#

no bc elle imports dont have an extension

#

you just use foo/bar;

#

where there exists a ./foo/bar.le file

deep mulch
#

guh?

valid jetty
#

why does my brain work like thisssss

#

between 22:00 and 4:00 my brain was so clear and i could think properly of how i want to do xyz

#

now itโ€™s 4:10 and my brain is suddenly super cloudy and i just canโ€™t think properly anymore

#

how does this happen

royal nymph
dense sand
deep mulch
jade stone
#

what

#

fun fact! ExportMap is not an array

inner bone
#

Is it possible to make the .bat file that compiles Vencord so that it automatically selects the stable (which is the only) version and patches it without having to press enter?

jade stone
#

yes, the CLI installer can take flags

#

iirc you can pass --help to see them

inner bone
#

thanks

formal belfry
#

what the heck

#

ai slop or nah

#

chat

#

IM NOT READIN ALL AT

#

the fudg

#

my brain hurts trying to comprehend that

austere idol
formal belfry
#

reanmed to avoid conflict

#

who writes comments like these

elder scaffold
formal belfry
#

bruh

#

im like

#

30% zoomed out

#

and its still going

#

oh ma god

#

this merge request is werid

#

aDdEd FoR xDg ShElL

#

this guy de formatted every file bruh

fleet cedar
#

Love all these

formal belfry
#

whats wrng with it

#

i even do that

fleet cedar
#

Do you add that in random unrelated places in your PRs?

formal belfry
#

new lines? if u dont add an empty comment the line break will get molested by the formatter

#

๐Ÿ’€

#

that is hilarious

#

nahh

#

bro edited this in

fleet cedar
#

Somehow I don't see that pr getting merged

formal belfry
#

why would it

#

lol

#

im just alughing because i got called autistic

#

at 3am in the morning

dawn ledge
#

definitely not the time to be looking at hyprland slop

hoary sluice
hoary sluice
frozen pollen
#

Ello

valid jetty
#

@hoary sluice huge

do i call it

fn BeginMode2D(Camera2D camera)                    @alias("rl::begin_mode_2D");                         // Begin 2D mode with custom camera (2D)
fn EndMode2D()                                     @alias("rl::end_mode_2D");                           // Ends 2D mode with custom camera

or

fn BeginMode2D(Camera2D camera)                    @alias("rl::begin_mode_2d");                         // Begin 2D mode with custom camera (2D)
fn EndMode2D()                                     @alias("rl::end_mode_2d");                           // Ends 2D mode with custom camera
fleet cedar
#

snake_case shouldn't have capital letters

valid jetty
#

yeah but begin_mode_2d feels weird

fleet cedar
#

No it doesn't

valid jetty
#

maybe begin_mode_2D feels weirder

fleet cedar
#
warning: function `begin_mode_2D` should have a snake case name
 --> src/lib.rs:1:4
  |
1 | fn begin_mode_2D() {}
  |    ^^^^^^^^^^^^^ help: convert the identifier to snake case: `begin_mode_2_d`
  |
  = note: `#[warn(non_snake_case)]` on by default
```The rustc has spoken
valid jetty
#

2_d

#

๐Ÿ˜ญ

fleet cedar
#

Yeah that suggestion isn't great ngl

placid cape
valid jetty
#

i had global pub and local before but i dont wanna add a new keyword for everything you can make global module-wide

#

so you can just do !pub for private and !external for non-external

placid cape
#

Yeah that's good

winged mantle
#

is code duplication here acceptable

valid jetty
#

cant you just do a thing like

function read_entity(reader: StringReader, prefix: string, error: string): string | Error {
    if (reader.skip_over(prefix)) {
        const id = reader.read_until(">");
        reader.read();

        if (is_snowflake(id)) 
            return id;
    } else {
        const id = reader.read_until(" ");

        if (is_snowflake(id)) 
            return id;
    }

    return { error };
}

export function read_role(reader: StringReader): string | Error {
    return read_entity(reader, "<@&", "Expected role mention or ID");
}

export function read_channel(reader: StringReader): string | Error {
    return read_entity(reader, "<#", "Expected channel ping or ID");
}
hoary sluice
#

and whats the difference between the 2 codeblocks

#

oh

#

everything lowercase

#

you should never use capital letters except in type names and in documentation

#

whoever invented capital letters is a bad person

fleet cedar
#

And in hexadecimal literals

#

0xFF blobcatcozy
0xff husk

valid jetty
#

@hoary sluice did you see !pub

hoary sluice
hoary sluice
hoary sluice
# valid jetty .

i think u should have implicit private and explicitly mark everything, no global no !

valid jetty
#

the horrors

hoary sluice
#

why did u put global pub everywhere

valid jetty
#

oh

#

i meant this

hoary sluice
#

beautiful

valid jetty
#

having to mark every function as public and external when there are 556 functions to mark just adds a bunch of repetition for no reason especially considering there are 0 functions with a body

hoary sluice
#

better than having unreadable sections

valid jetty
#

its not unreadable

#

if you want, i can get rid of global pub and add scoped specifiers

#
pub external {
    fn foo(); // public external
    fn bar(); // public external
}

fn baz() {} // private, non external
hoary sluice
#

impl block in rust is already far enough

valid jetty
#

yeah but rust is verbose asf

hoary sluice
#

the good kind of verbose

valid jetty
#

tell me why i have to specify pub on the struct itself and every single member of the struct

#[derive(Debug, Clone, Eq, PartialEq)]
pub struct MemoryOperation {
    pub left: Box<AstNode>,
    pub right: Box<AstNode>,
    pub value: Option<Box<AstNode>>,
    pub left_location: Rc<Location>,
    pub right_location: Rc<Location>,
    pub value_location: Rc<Location>,
    pub is_deref: bool,
}
#

like i get why but

#

its annoying

hoary sluice
#

becaue some members can be private

#

and its useful

valid jetty
#

why not pub by default like a sane language

hoary sluice
#

rust is a sane language

valid jetty
#

why is every field hidden unless you explicitly mark it as visible

hoary sluice
#

because private by default makes a lot more sense

fleet cedar
#

Why would exposing your guts be the default

hoary sluice
#

youd rather not expose something on accident and the compiler will tell you than expose something on accident and have the compires not tell you

valid jetty
#

i mean maybe but for big structs that kind of verbosity is annoying

fleet cedar
#

Big structs are pretty rare though

#

Other than serialization entities

valid jetty
#
#[derive(Debug, Clone, Eq, PartialEq, Default)]
pub struct Function {
    pub linkage: Linkage,
    pub name: String,
    pub variadic: bool,
    pub external: bool,
    pub builtin: bool,
    pub volatile: bool,
    pub format: bool,
    pub lambda: bool,
    pub unaliased: Option<String>,
    pub usable: bool,
    pub imported: bool,
    pub generics: Vec<String>,
    pub known_generics: HashMap<String, Type>,
    pub arguments: Vec<((Type, Value), bool)>,
    pub return_type: Option<Type>,
    pub blocks: Vec<Block>,
}
#

maybe those bool flags should just be a flags: u32

#

but thats optimistic refactoring

fleet cedar
#

flags: FunctionFlags, where struct FunctionFlags(pub u32);

valid jetty
#

husk

hoary sluice
#
#[derive(Debug, Clone, Eq, PartialEq, Default)]
pub struct Function {
    priv linkage: Linkage,
    priv name: String,
    priv variadic: bool,
    priv external: bool,
    priv builtin: bool,
    priv volatile: bool,
    priv format: bool,
    priv lambda: bool,
    priv unaliased: Option<String>,
    priv usable: bool,
    priv imported: bool,
    priv generics: Vec<String>,
    priv known_generics: HashMap<String, Type>,
    priv arguments: Vec<((Type, Value), bool)>,
    priv return_type: Option<Type>,
    priv blocks: Vec<Block>,
}
valid jetty
#

why is that syntax highlighted

hoary sluice
#

you wanna do c++ public: private: blocks?

lavish frigate
hoary sluice
fleet cedar
#

Lsp in discord code blocks when

valid jetty
hoary sluice
#

that will just cause confusion

#

it doesnt take that much effort to write pub 20 times

hoary sluice
#

:norm _ipub youre done

fleet cedar
#

Or block selection

lavish frigate
#

you dont need a member to be public more often than not like look at oop language its insane everything is just made private for "getters" and "setters"

#

dreamed up by the utterly deranged

valid jetty
#

lol yeah in oop languages that stuff is horror

#

at least C# has like int member { get; protected set; }

#

and that kind of thing

hoary sluice
lavish frigate
#

its funny how everyone is doing a functional shift now

jade stone
#

vscode keymaps so insane

lavish frigate
hoary sluice
jade stone
# jade stone

this was generated from doing (orig cond) && !(newCond)

hoary sluice
hoary sluice
lavish frigate
#

so true

hoary sluice
#

start all kids on the current version on icps (if statements, 1 argument functions with no currying, a print statement, and nothing else)

valid jetty
# hoary sluice

LMAO THE We had a tool for that ๐Ÿ˜ญ๐Ÿ˜ญ๐Ÿ˜ญ๐Ÿ˜ญ๐Ÿ˜ญ๐Ÿ˜ญ๐Ÿ˜ญ๐Ÿ˜ญ๐Ÿ˜ญ

#

this one is funnier than other ones ive seen

lavish frigate
#

STOP DOING PHP

YEARS OF GENERATING HTML yet NO REAL-WORLD USE FOUND for going higher than HTMX

Wanted to go higher for anyway for a laugh? We had a tool for that: It was called DRUGS!

jade stone
#

It sucks on windows, even more so on arm where a bunch of extensions just don't build

#

I'm developing a vscode extension

#

The ui is nice for things like tests

#

I hate lua

lavish frigate
#

oh firefox... how much i hate you...

hoary sluice
hoary sluice
lavish frigate
#

fun fact im working on a companies website rn and they are proud of having ai generated stuff so i have to add this to pages lol

jade stone
jade stone
supple whale
#

or some cursed shit?

jade stone
jade stone
supple whale
# jade stone yes

how... fucked is it? like how many "fucking hell X doesnt work again" have u had?

#

also did u try gaming on them?

lavish frigate
hoary sluice
#

does nix run in wsl or something

#

or do you have a different machine

jade stone
jade stone
hoary sluice
jade stone
#

i installed it last month just for that

hoary sluice
#

@valid jetty we should implement bluetooth over ip

hoary sluice
valid jetty
#

almost done with raylib bindings

#

well not really

#

i did all the structs and enums

#

and 185/556 functions

#

i wish i could craft a regex to do this but i cant

#

it has to convert pascal case to snake case and align everything which is just a lot more effort than i would like to make a regex out of

#

i dont think this is very easy to do with :norm either

#

because i still have to convert pascal case to snake case

shrewd canopy
#

Just ask ChatGPT to do it lol

valid jetty
#

im scared itll get it wrong tho

#

there are some assumptions i make

#

like, the const keyword doesnt exist in types

#

so const unsigned char * is just u8 * but the ai doesnt know that

shrewd canopy
#

Oh well

winged mantle
#

and at that point i think code readability would be sacrificed

valid jetty
winged mantle
#

had to zoom out

valid jetty
#

repeating it is probably fine, but i would do like if (prefix === "<@") read.skip_over("!"); in the single function and just move on

jade stone
winged mantle
#

(seriously)

#

(i never do things like that ๐Ÿ˜ญ)

#

this somehow feels... better to me

valid jetty
#

yeah thats good

winged mantle
#

somehow listing every expected parameter makes it feel.. less hacky

lavish frigate
#

just use the discord client code :3

winged mantle
#

i also did null instead of error... because if i want translation the parser having that responsibility is weird

#

wondering whether if i translate bot i should translate slash command names

#

(would help if i actually knew any languages other than english)

stiff elk
winged mantle
shrewd canopy
dawn ledge
valid jetty
#

242 / 556 functions done

#

278 is halfway

#

In computer graphics, the centripetal Catmullโ€“Rom spline is a variant form of the Catmullโ€“Rom spline, originally formulated by Edwin Catmull and Raphael Rom, which can be evaluated using a recursive algorithm proposed by Barry and Goldman. It is a type of interpolating spline (a curve that goes through its control points) defined by four con...

winged mantle
#

i am a human code purist

winged mantle
#

i feel like if you're vibe coding you've gotta be throwing code quality out the window

dawn ledge
#

lol

dawn ledge
#

i am sick and tired of curves and splines

valid jetty
blazing haven
#

i am aicist

winged mantle
#

i don't really know what my overall opinions are

#

i find it kind of cringy but would i say ai has no place in code at all

#

idrk

blazing haven
#

when there are no more capable people anymore because all they did was rely on ai xd

#

demand for real programmers will skyrocket then

blazing haven
winged mantle
#

i just would not like my code having ai generated stuff in it

winged mantle
#

i would want to look at code and know who wrote it

#

ai is not a person

#

it feels weird

blazing haven
# royal nymph okay boooomer

hinders your personal growth and gatekeeps knowledge from yourself if you have someone do the heavy lifting for you (and thats even assuming the ai does it properly, which it most likely doesnt)

winged mantle
#

ai coding

#

(and ai itself)

blazing haven
valid jetty
winged mantle
#

i don't use ai full stop

valid jetty
#

i dont wanna fry my brain and lose my actual knowledge and skill

winged mantle
#

only for the memes

supple whale
#

out of order

winged mantle
#

lmao

blazing haven
winged mantle
#

i think i have a similar sentiment to linus torvalds

valid jetty
#

lmao yeah EXACTLY

winged mantle
#

it's 90% hype

valid jetty
#

why make ai write it when i have to check everything anyway

winged mantle
#

but i don't see ai coding really being something that interests me

valid jetty
#

if anything its more effort because when i write it myself i know exactly how i wrote the code and how it works

supple whale
#

AI is useful as a "more advanced google search" for finding solutions, rather than solving problems, that's it

valid jetty
#

when ai writes it i have to first understand the code it wrote

winged mantle
#

i often get frustrated by not finding stuff on google

supple whale
#

or a "smart itellisense"

#

that's about the best uses i found for AI

winged mantle
#

but i feel like in those cases ai would hallucinate?

blazing haven
valid jetty
blazing haven
#

depending on what it is u r looking for

valid jetty
#

sometimes there is just something on the tip of my tongue and google is just not helpful anymore

winged mantle
#

i was trying to work out what the typescript type for anything apart from null is

valid jetty
#

i ask ai more or less paraphrasing what i want and it tells me what its called

winged mantle
#

could not find anything directly answering that

valid jetty
#

thats the one usecase ive found for it

supple whale
#

least unhinged update screen

#

i suck at design

winged mantle
#

i wasn';t suure if it was {} or what

#

i was trying to double check

#

NonNullable<unknown> is {}

#

but i thought nonnullable made all of the values non null

blazing haven
winged mantle
#

was getting confused with Required

supple whale
#

so it goes "wtf how u get here"

winged mantle
#

i have a page which appears when you're not logged in

blazing haven
winged mantle
#

is the appropriate text for the button to log in continue?

supple whale
winged mantle
#

or is that weird

blazing haven
#

LEAK

winged mantle
#

is this also the name of a film

#

or something

#

or game

blazing haven
#

thats squid game

winged mantle
#

sorry but could you elaborate

blazing haven
winged mantle
#

i did not watch squid game...

#

i do not understand...

blazing haven
#

xd

#

squirrelbot and squid game sounds close enough

#

(it doesnt)

winged mantle
#

"film"

#

you mean the correct word for a movie

blazing haven
#

well its a tv show

#

so i put it in quotes

winged mantle
#

ah

blazing haven
#

i am german

winged mantle
#

movie is a weird one

blazing haven
#

i know its called FILM

#

LOL

winged mantle
#

because it should be talkie

#

wasn;t that the original name

#

for movies with sound

#

nvm

#

did i imagine that

inner bone
#

Is it possible to somehow run a .bat file from vencord (for example, by command)?

blazing haven
#

xd

winged mantle
#

i honestly find snake case easier to read

#

it's like a written sentence with spaces

#

just ignore the underscores

#

less mental effort than trying to identify words by capital letters which could look different between fonts

fleet cedar
#

Does separating the words take conscious effort for you?

winged mantle
#

i mean not that much

#

but i feel like it encourages less descriptive names

hoary sluice
#

when i read this

winged mantle
#

it's funny how refactoring my parsing to be cleaner has solved so many issues

#

that is to say, it's cleaner and shouldn't be any slower either or mean more code

#

there was something super dirty which i realised i could totally just use regex

#

i was also using exceptions for user facing errors when i realised i could just use a discriminated union

#

I guess it's hard when it's being parsed to Record<string, OptionValue> | { error: string } but i think i'll do { result: Record<string, OptionValue> } | {error: string }

#

wondering

#

in discord commands is it better to have like
.say 'quoted string: \'hello\'.' or
.say 'quoted string: ''hello''.'

#

i guess escaping with backslash is invisible

royal nymph
#

neither

winged mantle
#

i am supporting unquoted strings

#

but i thought i might as well support quoted too

#

maybe for like polls so it knows the boundary between each option

#

.poll 'hawaiian pizza' 'meatbals'

royal nymph
#

slash commands trol

#

are there varargs

winged mantle
#

no

#

big problem

#

i think i will go with sql style escapes

#

because yes

dawn ledge
winged mantle
#

wonder if i should do imagegen in my bot to be fancier embeds or that's just bad for accessibility therefore pointless

dawn ledge
winged mantle
#

i just greedily eat everything until - or -- for flag

dawn ledge
#

no clue
but it does it well

winged mantle
#

i guess i should add an option for non greedy string

dawn ledge
#

i once wrote a hybrid command framework for oceanic handling flags and strings
unfortunately my back up has been thanos snapped

winged mantle
#

if it's not the last positional argumenrt

winged mantle
#

to allow for server specific prefix i think i will have a preParse option that's passed into the command handler instance

#

which returns something like { prefix: "!", trimWhitespace: true }

winged mantle
#

i will rewrite venbot will my command handler

#

๐Ÿ™

dawn ledge
#

true

winged mantle
#

vee will force pinned package vesrion

dawn ledge
winged mantle
#

ah well let me know if you're interested in future

#

i think i can trust you

pearl stagBOT
winged mantle
#

yeah that's kind of ugly

royal nymph
#

making end users escape stuff or use quotes sucks lol

#

not very user friendly

winged mantle
#

they don't have to

#

it's only if you want to use quoted string

#

but i don't think there's a better solution for poll
(idk if there's any reason to do a poll command any more anyway but there are probably similar commands)

dawn ledge
winged mantle
#

are non programmers even likely to know where backslash is on their keyboard

dawn ledge
#

you cant really discern if "hello "world"" is ["hello", "world", ""] or ['hello "world"']

#

other than escaping

#

and i'd much rather go with \ since its the defacto way of escaping things in strings

winged mantle
#

when do you use it besides programming

dawn ledge
#

if you really want you can support all sorts of quotes (like single, jp, ...) so people can nest them instead of escaping

winged mantle
#

i support single and double

#

idk if i am gonna try to translate commands yet

#

i probaly should not

#

who the hell translates prefix commands

dawn ledge
winged mantle
#

i mean the actual command input

#

output i will translate

#

or try to

dawn ledge
#

me too

#

just make it an array
and do a .includes :clueless:

winged mantle
#

do actual bots have .yardฤฑm

#

vyardฤฑm

elder yarrowBOT
# winged mantle vyardฤฑm
Moderation Commands

โ€‹ ban โ€‹ โ€‹ โ€‹Ban one or more users with an optional reason and delete message days
set-name โ€‹ โ€‹ โ€‹Edit the current channel's name
set-topic โ€‹ โ€‹ โ€‹Edit the current channel's topic
role-add โ€‹ โ€‹ โ€‹Add a role to one or more users
role-remove โ€‹ โ€‹ โ€‹Remove a role from one or more users
mute โ€‹ โ€‹ โ€‹Mute one or more users
prune โ€‹ โ€‹ โ€‹Delete a number of messages
rule โ€‹ โ€‹ โ€‹Query a rule and send it
slowmode โ€‹ โ€‹ โ€‹Set the slowmode for the channel
submissionpass โ€‹ โ€‹ โ€‹Allow this user to post one submission
unban โ€‹ โ€‹ โ€‹Unban one or more users
threads โ€‹ โ€‹ โ€‹Watches your threads to make sure they always stay open! Specify a channel to watch all threads in that channel.
whybanne โ€‹ โ€‹ โ€‹Why Banne?

Use vyardฤฑm <command> for more information on a specific command!

winged mantle
#

thanks

#

it is the only turkish word iu have been able to remember

blazing haven
#

This button is not for you! ๐Ÿ’ข

winged mantle
#

pull a donovan dmc and encode all the contextual data as base64 in the command id

royal nymph
dawn ledge
#

#nodb

winged mantle
#

i asked before

#

what about slash commands

#

wouldn't it be kind of annoying to translate them

#

maybe only descriptions

dawn ledge
winged mantle
#

like i mean the names

royal nymph
#

discord has localisation for slash commands

dawn ledge
winged mantle
#

so if you change discordc's language you have to get used to new command names

royal nymph
#

dw i already fixed the venbot stuff

winged mantle
dawn ledge
winged mantle
#

but what how

#

isn't json utf-8 based

#

idk

#

it's been about two years since i wrote a json parser

hoary sluice
#

@valid jetty what are all the ways youre learning japanese

#

i need to learn kazakh but theres almost 0 resources

dawn ledge
#

json doesnt have to be utf8 :^)
and if that doesnt work just send a multi part form body

winged mantle
royal nymph
hoary sluice
royal nymph
#

the correct translation would be (ver)bannen

winged mantle
#

would you want that though

royal nymph
#

yes

winged mantle
#

just shorten to /ver maybe?

hoary sluice
royal nymph
#

/stummschalten nutzer:@winged mantle grund:hat sich wie eine hsin verhalten

hoary sluice
royal nymph
winged mantle
#

is that a swear

royal nymph
#

ver is like a joiner

#

it has no relation to banning

winged mantle
#

/and

royal nymph
hoary sluice
#

to-ban ver-bannen

winged mantle
#

ver

winged mantle
#

banananana

royal nymph
#

verlaufen = get lost
verbannen = ban from somewhere
vertrieben = expelled
verloren = lost

#

it's hard to explain lol

winged mantle
#

that makes senes

#

family of words related to banishing someb ody

royal nymph
#

lc.gem explain the german prefix ver- (as in verlaufen, verloren, vertreiben). keep it short

visual shellBOT
# royal nymph lc.gem explain the german prefix ver- (as in verlaufen, verloren, vertreiben). k...
explain the german prefix ver- (as in verlaufen,โ€ฆ

The German prefix ver- is complex and doesn't have one single meaning. However, it often implies:

  • Going astray or wrong: as in verlaufen (to get lost - run wrongly), verloren (lost).
  • Completion or finality: sometimes intensifying the verb's meaning.
  • A negative or opposite outcome: as in vertreiben (to drive away - drive off).

It's best to learn the meaning of each ver- verb individually.

winged mantle
#

AWFUL

#

wall of text

royal nymph
#

idk it's an odd prefix u can't really translate

dawn ledge
winged mantle
#

"ba" + (+"a") + "a" + (+"a") + "a"

hoary sluice
#

its literally just a direct translation of "to" in the context of "to be"

winged mantle
#

how you would actually write it if you wanted it to be readable

dawn ledge
#

thats the thing

winged mantle
#

oh

dawn ledge
#

you should never write it if you want it to be readable

winged mantle
#

and the actual suffixes aren't really similar

hoary sluice
royal nymph
#

you love german prefixes

winged mantle
#

containing javascript

#

i have a friend who knows one word in chinese

dawn ledge
#

TO LAY ASIDE

#

such a polite way to say to throw

#

gonna start using this

royal nymph
#

nah it's not throwing lmao

hoary sluice
#

actually idk does ueberlegen come from legen

royal nymph
#

"ich habe es verlegt" roughly translates to "i put it somewhere and dont remember where"

it's kinda different from "ich habe es verloren" (i lost it)

#

verlegt is like I forgot where it is but it's still around
verloren is like I lost it and it might be gone for good but who knows

hoary sluice
#

its a way to say you lost something if it was important and the person youre speaking to will kill you if you say you lost it

dawn ledge
#

is it time to finally start using firefox got 3 months before manifest v2 completely stops working on chrome

#

i hate this

hoary sluice
#

verlegt means misplaced

#

literally

royal nymph
#

yea

#

i guess it's similar in english

hoary sluice
#

maybe cause its the same language family

royal nymph
#

misplaced implies you just forgot where it is but it's still around

dawn ledge
#

damn why is github giving away copilot for free now

royal nymph
#

misplaced is soft, lost is hard

hoary sluice
#

to lock users in

#

get them addicted

dawn ledge
hoary sluice
#

its like if cigarette companies started giving them away for free

dawn ledge
#

never falling to peer pressure for cigarettes (dont have peers)

placid cape
#

To scrape more code

dawn ledge
#

guhh its been long since ive used vsc

#

how do i uh add ts support
do i need to install something

leaden crater
dawn ledge
#

like treesitter grammars and lsps

valid jetty
#

@hoary sluice

leaden crater
valid jetty
#

and i wanna add teuida and airlearn to that list but teuida is more asian languages

valid jetty
#

372/556 :3

winged mantle
#

i have a weeb friend

deep mulch
#

@valid jetty hiii

deep mulch
supple whale
#

the fucking dream

#

cant wait for android 16 till all devices can do it

wary tiger
winged mantle
#

how is it possible when you use regex.exec on a global regex and set the lastIndex manually that the resulting index is under lastIndex

#

ah it can't

winged mantle
#

interesting how much faster the stdlib is

#

i wish there was a startswith with offset

#

kind of funny how the the built in method is faster even if you use slice

fleet cedar
rugged berryBOT
#

Here is your js(18.15.0) output @fleet cedar

true
winged mantle
#

wait what

#

nice

#

makes code cleaner and faster

#

this is why you use built in methods where possible

#

they will have microoptimised them an incredible amount

#

or maybe it's mainly from being native code i can't really think of a more efficient way

ornate quiver
#

probably

valid jetty
#

440/556 !!!!!!

#

almost down to 100 left

hoary sluice
winged mantle
#

oh idk

#

maybe it uses simd

valid jetty
valid jetty
#

because it has to be converted using the right elle types, the alias converted from pascal case to snake case, and the alignment has to be correct

#

its easier to just do it by hand than craft some expr to do it for me

deep mulch
#

@valid jetty hii

valid jetty
#

hii

#

i think im winning this week

formal belfry
#

upgrade to pro

valid jetty
#

idk if this is preferred behavior

#

enums are funny

#

who needs enums anyway

placid cape
supple whale
#

nodejs has a lot of native code

#

and its support for native code is surprisingly good

#

there's close to 0 overhead, which is insane

placid cape
#

But a lot of builtins are in js

supple whale
#

js which wrap native code

#

yeah

placid cape
#

Nope sometimes it's not even in native

#

or at least I think

#

Well idk what's the current situation

supple whale
#

depends on what

placid cape
#

Good night

supple whale
#

most of it uses native code

formal belfry
#

good night

#

the night is good

supple whale
#

i made myself a v8 sandbox just so i can inspect node code and profile it

valid jetty
#

the mandelbrot example runs with the new raylib bindings :3333

#

i think im gonna try to make a uv mango via elle

supple whale
#

but yeah a lot of it is js, but the important shit is most of the time native

ornate quiver
#

the stuff in js is definitely JIT'd so it probably doesn't matter
only the performance sensitive stuff is in native if it can do it better

supple whale
#

yeah, for the most part

#

unfortunately most of streams and buffer is written in js, at least most of the very often called shit

#

those are like the 2 massive outliers from that rule

#

which is why its always better to just use uint8 than buffer

#

and why its always better to use async iterators than buffers

#

because async iterators, even with the insane overhead they have, are still almost 40% faster than node streams

#

and forunately you can do

const asyncIt = stream[Symbol.asyncIterator]()
#

or simply

for await (const value of nodeStream) {}