#programming
1 messages · Page 215 of 1
its stuff like list comprehension that will make a huge difference imo
who needs ux anyways
Can a bot just meow in the chat and refuse to play chess?
if you figure out c ffi and manage to write a bot in 1024 tokens (which are just characters), sure
sure, you will probably come last though
import ctypes easy
you can submit any bot even if it's completely wrong, but bots can't send anything to chat
(major api omission)
idk...
in bf?
if you're drunk enough to spend tokens on it, you can in theory printf("info string Hello world!\n"); or your language's equivalent
not sure if cute-chess-cli will render it tho
putStrLn "happy birthday, shiro!"
saw the announcement, it's time to cook 
botbot 
printf("info string HBD Shiro!!\n");
how do i configure cute-chess to run my bot and stockfish
a = [x**2 for x in vec]
for (int i=0; i < xsize; x++){
a.push_back(vec[i] * vec[i])
}
this is like a 3x difference
not including initialization etc
if you have the gui version of cute chess, you can open Tools>Settings in the top bar and navigate to the Engines tab:
use the + at the bottom to add a new bot, and set "Command" to something that will start your bot
(instructions for linux, may differ for windows)
for (auto x : vec) {
a.push_back(x*x);
}
quick token opt
i'll be honest. even if this is true. i doubt the token difference will make a bot so much smarter compared to other solutions 
if you want stockfish, you'll have to download it from their site and add stockfish the same way (cute-chess comes with no preinstalled engines)
what would the easiest/simplest/least likely for me to mess up way for me to do this, as i dont currently have a c/c++ compiler lol
ah thats fair
kinda tricky to say, the chess API is pretty vital to making the chess engine work, as well as providing many very useful boilerplate functions for you
anyone have suggestions?
let a = vec.map(|x| x*x);
also one could probably define a macro to save more tokens lol
a.resize(xsize)
int i = 0; while(i++ < xsize)
a[i] = vec[i] * vec[i]);
probably just get an IDE like CLion is the most plug and play
you dont need the braces by the way
cuz like i have decent recent experience with python, but its been a bit since ive done any c/c++ and the compiler was always the most troublesome part of that for me
do you develop on windows, sbg?
do you even need a for loop?
yea, w/ vscode
the alternative is using std::transform
c compilers on windows
very pain

can confirm
i usually elect to just make a linux vm over installing c compiler on windows
just download llvm, it's not that bad
somehow easier
i got one... somewhat working on my school laptop, but that thing is sentient now and DOES NOT LIKE ME
use msys2
even better
i'll be using rust for my bot. probably the best language i can from lower level options
sigh i was hoping to just avoid using C or C++ at all here... 
c compiler is just for building the library, it's a one-time thing
yea
more than zero times
i feel that
so i still need to get it
fair fair
C++ due to the glorious type unsafe macros. You could save so many tokens with horribly unsafe macro black magic
you can, it needs to run in linux anyway

what if different architecture

or what if my particular compiler makes specific optimizations for my platform
you arent compiling it with native optimisations so you only have to choose arch
it doesnt

r u sure...
i don't think the token limit will be what makes my bot bad
i dont know enough about compilers ill mess it up
are you setting -march=native or -mtune=native

i also am scared of sending someone a binary and then it bricks their pc or something
no Makefile?
not gonna happen 
shiro you're compiling for what, a 15yo common denominator
no makefile 
sane people wouldn't be running them bare metal
this is neurocord, sanity is not an expectation
remember to delete the french language packs from your computer with rm -fr /* Don't actually run this
if you can (and are willing to) set up a vm, you dont need to be sent the binary
and in the rare chance the binary actually breaks something, that's on them
true
just use a vps, least risk
C interpreter 
if it gets bricked. haha funny
the rust api doesn't compile on windows...
#programming had an arc about that before
@trim valve
@trim valve wake up 
dont compile for msvc target compile for gnu target
or something

how do i change that...
r u using rustup

--target x86_64-pc-windows-gnu or sth
i think this assumes you have the toolchain installed first though
so you'd need to run rustup target add x86_64-pc-windows-gnu first 
but how do i make the rust-analyzer use that target
bilewater ost extended
don't utter that name
i already have gnu target
in .cargo/config.toml

[build]
target = "x86_64-pc-windows-gnu"
can you let me know if this works btw
it didnt give me an error, but i dont know where the file went
one would think
ya not on wsl rn
slightly better with using namespace std;
:d are we pro using namespace std here
only for saving tokens
also how do yall pronounce std
stud
S. T. D.
when it saves tokens 
idk how the other file paths would resolve if that happened
it still does not want to compile...
erm
oh i wasn't thinking about that
WHERE DID IT GO
dont underestimate the token limit
is there a verbose logging flag for compile?
it leads to scary places
try putting an explicit path on libchess.so
ooo big brain
naming things hardest part of making projects
just use wsl 
ye just wsl
i dont wanna rn
i am
yea but like, my thing still isnt workin right

...hm
it does?
nono that sounds right
i mean, you're compiling for windows
ctypes should still work with a dll, no?
do i have to change the clang command to fix the compilation error? i don't think its a rust issue
it should work yeah
whats the error again?
do you depend on pthreads shiro 
there we go
those arent on windows are they 


What are cpu limits?
ye use wsl 
yup

it's running in a VM and i have a ryzen 7 5700x, and other applicable rules (notably single-threaded)
beyond that i dont have much to tell you on cpu limits
crunch numbers

ermleaf
sigh opening wsl.
man i didnt want to look at gnuradio today 
:ermLeafL: :ermLeafR:
RAM?
2
wait also if i compile it on wsl its not gonna run on standalone windows where i have everything else tho, right...?
tentative limit is something like 4GB
erm
i wouldn't advise getting too close to that limit
erm
it wont run on windows period
pthreads
it will not, you'll have to run it on wsl too

okayyy thats actually helpful for setting depth limits
yea ok so back to trying to compile on windows then
i'll look into if i can fix the pthreads issue but it seems kinda complicated 
Download POSIX Threads for Windows for free. An implementation of the POSIX threads API for Windows. Also known as "pthreads-win32", POSIX Threads for Windows implements a large subset of the threads related API from the Single Unix Specification Version 3. Conformance and quality are high priorities of this mature library.
do i just make my own pthreads.h and have it wrap windows functions? 
https://sourceforge.net/projects/pthreads4w/ there's this but uhhhh
Download POSIX Threads for Windows for free. An implementation of the POSIX threads API for Windows. Also known as "pthreads-win32", POSIX Threads for Windows implements a large subset of the threads related API from the Single Unix Specification Version 3. Conformance and quality are high priorities of this mature library.
gl
this download button scares me
delay chess tournament by 2 years
if you want to do that
2005 virus lookin

i only need like 4 functions 
i just wrap windows functions for similar thing 
done
dont use pthreads then
shiro have you never used sourceforge 


i'm jealous

smh somebody never played modded mc around 1.12.2 or modded KSP around 1.6
i was in elementary school in 2010 
so was i
which one is elementary school
bless you
has anyone ever heard of Fano–Elias coding
i enrolled in 2010
wtf is this crap
dont use msvc then use gnu
3y ago

also msvc has it now i think
Seems like bad arithmetic coding?
incredibly bad yes
r u sure
🥀
shiro not using the latest crossplatform way of programming...
write your own semaphore its not that hard with a backing mutex
does threads.h have semaphores


🥀 reimplementing library functions because windows is bad
it really not that hard

https://cjbohlman.github.io/posts/post-1/
look i found one
ye not windows fault
blame c committee

pthreads is posix threads, threads is c threads

shouldn't it just be a simple find and replace?

is it ever a simple find and replace with a language as old and tech-debt filled as C

a long time ago I wrote in cpp... and now I'm doing who knows what... ehh
2007 
ermplode yourself
Yeah, it was so long ago.
it has condvars
well.. i guess i have to wait for you guys to figure it out. i can't figure out how to compile it
wsl 
how does that solve anything...
you said it broke because it couldn't find pthread.h right
that's not a thing on windows but on linux it is and since wsl2 is just linux it should work there 
soon™
you will have to just run it on linux, and wsl is a linux vm
already working on replacing pthreads
so... not a solution 
it is a solution
either way shiro's working on switching away from pthreads
switching the whole dev environment to work on something isn't a solution. its a bandaid for missing crossplatform
windows dev tooling just supports wsl natively nowadays
i have wsl installed.. i used it for docker desktop.
ye idk what your setup is but vscode or windows terminal just support wsl 
i use vscode 
ngl wsl is super easy to use with vscode

u do wsl --install in powershell, then remote into it using the official wsl extension for vscode
i had a ubuntu installed. but it took too much space so i uninstalled it again...
but then.. how would i test the bot
cute chess in wsl
yea thats why im not using wsl LOL
also
erm
what does this even mean....
copy pasted code
not helpin ur case here
read contest readme 
im just gonna wait until you guys figure out windows support. don't want to install a linux distro just for this
HAHA i literally just changed long unsigned to long long unsigned and it worked
ITS COMPILED
ON WINDOWS
NEYEYEAYAYYAYAYAHAHA
HAPPY BIRTHDAY SHIRO
how
just read the readme again... this doesn't explain anything
almost just went to fork and update with my fix on my school github
with my real name on it
i will probably deny the PR given how many changes im making on my end
easier to just add long over here than it is to resolve a merge conflict


you wouldnt kill a baby pull request, would you?

-# totally wasnt also doing this so i could learn how the whole fork/pull whatever system works cuz ive procrastinated actually doing so for years
also, anyone have a link to the right stockfish version/site and all?
can i just use uint64_t since that's the intended size
then no platform-specific long shenanigans

i've pushed both the long fix and the replaced pthreads.h fix @tender river @final tinsel @glass flower
please let me know if there are any issues because i obviously didnt test very long
scala supports js interop i wonder if i could create a web page for the token counter 
i am officially in the "it works, dont touch it" stage of the libchess.so file so uh yeah

i changed long to long long and ran it inside UCRT64 terminal
aur naur
ok this is likely a me problem
gimme a sec
@sage crag how does a shebang work on windows
it does not

cutechess win may be an adventure
make sure file ext is .py and that your default program is the right python ver, and pray?
idk why but i also found cute chess was seldom happy with something like that
yeah full path is the minimum
ah ok
even with full path
also you wouldnt happen to have any spaces in the full path would you 
cute chess is seldom happy if the command is not just a single path
and then you probably need to prepend the full path to python to the full path to the python file
ye space cant do
oooo
smh
no
yea that was kinda the first step
surely just renaming the folder can't cause any other issues
if you did quote it above, then you quoted the wrong parts
you quoted the entire cmd instead of only python exe path and only bot py path
ooooooooooo
nono i mean put the individual paths in ""
"M:\...\python.exe" "M:\...\example_bot.py"
yea no its fine with the spaces
yeah i had similar issues
...frick
it does not

longs are nonportable in general


just added .into and it works

i will nuclear explode u

NOW IT DOESNT EVEN SHOW AS AN OPTION EVEN THO IT LET ME SET IT AAAAAAAAAAAA
will switch them to uint64_t 
long long is 64 bit on some platform 128 bit on other platform
you need to restart cutechess for the dropdown to work 
where is it 128 
i didnt before
probably on 128-bit cpus 
it works now.... somewhat. no idea how to initialize tho

well, c std specifies >= 64, but i cant remember if any actually do that 
It seems I've solved the issue with the cuda oom... that's good 

afaik long long is same width as long on 64-bit linux 
not very long 
cmoooooooooooooooooooooooooooooooooooooooooon
uploaded new version with long switched to uint64_t 
shrio
ye 2 long is 1 long
do i make toknt web
2 = 1

shrio
up2u, would be very convenient
tell me when you figure this out
i also haven't gotten further
how do i insert more 

insert 30 rosaries => capitalism commentary
capitalism commentary => against rule 3
against rule 3 => ban

anyone know why no initializey? 
ye shiro ban konii 

because it expects a single file and you're passing it multiple
its easy to fix on linux
on windows you have to figure out yourself
you can try removing spaces and quotes
nuh uh
i don't guarantee it working
do bats actually run when passed to whatever windows's exec is?
or is it just when passed to cmd /c?
i think so
what if you just run a exe. thats not multiple files yet it still doesn't work
stockfish loads
it works with stockfish
I added the "hovering" system prompt, seems to improve things a bit
then could be windows pthreads issue 
i get the engine debug. so it is running my main function atleast
when i used pyinstaller to try and .exe-ify it still didnt work
note that not a single person tested it on windows
use linux or wsl or wait until someone (could be you) does make it work on windows

wait for shiro to switch away from pthreads first tho
i thought its about longs 
btw what grammar is toknt using? It's counting #include <iostream> as 5 tokens, while treesitter only counts this as 2 tokens
ye missed pthreads 
this is actually 3 tokens as per the standard
you can do "iostream" for fully standards complaint counting
i dont do it because header names are only parsed as a single token in very specific circumstances
which i dont want to implement
💀
how do I get the libchess.so
treesitter also counts #define j j j jqoj j ja k aj j as a single token
discrimination against C++
aight imma try and get 8 hours for the first time in a while, ill see yall later
i explained how to fix it 
which language are you using?
python
and which os
So if I push a patch? I get my two tokens?
windows 11
no you dont push a patch to toknt because its correct as long as you do "iostream" instead of <iostream>
epic fail... I forgot to replace tokenizer 
Token 40: '<SPECIAL_40>'
Token 41: '<SPECIAL_41>'
Token 42: '<SPECIAL_42>'
Token 43: '<SPECIAL_43>'
Token 44: '<SPECIAL_44>'
<|VOICE|> encodes to: [1060, 6495, 1156, 25313, 21758, 6495, 1156, 1062]
tensor([[ 1, 1, 3, 5675, 3120, 1534, 6495, 1156, 25313, 21758,
6495, 1156, 1062, 4204, 1063, 1032, 4, 42, 26607, 29930,
34311, 1046, 2]], device='cuda:0')
['<s><s>[INST] What does <|VOICE|> mean? [/INST]<SPECIAL_42> marks spoken dialogue.</s>']
tree-sitter is wrong and it isnt actually built for the purpose of counting tokens so its fine for it to be wrong
how does UCI work in the chessapi?
and <iostream> would be a single token if i implemented the very specific rules:
header name preprocessing tokens are recognized only within
#include and #embed preprocessing directives, in __has_include and __has_embed expressions,
as well as in implementation-defined locations within #pragma directives. In such contexts, a
sequence of characters that could be either a header name or a string literal is recognized as the
former.
if you want to support that go ahead not stopping you 
the chess api implements enough of the UCI spec to interface with a chess engine host and register itself as a valid chess engine
all of the UCI-facing stuff is handled by the chess API in a separate thread
you shouldn't need to interact with it directly

well... its not doing that so...
if you are running it standalone and it's silent, that's because the UCI spec defines that the gui should send the first communication
a gui typically sends something like:
uci
position startpos
go infinite
after which the chess api would unbreak from whichever api call it's halted on
well.. the gui tells me that it can't initialize. and also no options so.. 
(tho i assume no options is normal)
no options is normal, those are implemented by the engine
pls someone give me the libchess.so
can't initialize is not normal though
windows
good luck shiro 

would it be better if I used my mac?
time to download clion
yes actually
I'll do that in a bit then
shiro will fix windows at some point realistically, you could help him with that if you want to
chess_get_board fails to initialize
until then we dont have a clear "do this and that to run your bot" path for you 
if I do stuff on my laptop I can work on it at school tho
python? rust?
threading issue probably 
i should probably test the nonpthreads version too
looks like it
issues wouldn't be too surprising
It’s been 10 mins since I started a stockfish vs stockfish game and then went and brushed my teeth and all, and they have made zero moves. Leaving it on overnight to come back to tomorrow and look at
well.. have fun debugging. i have no idea how threading in c works
for me stockfish moves take like 10 seconds at most
this is the lowest wattage my 13900 engineering sample pulls
0.5GHz on 2.7W lmao
also 3.9GHz on only 9.3W
everytime apple fans yap aboout how "efficient" ther chips are imma show them this


ye i had this conversation with people that typical x86 cpus arent any more power hungry than arm cpus at the same clocks / performance
i've made full rants about how "ARM = efficient" is completely misleading
but my simplest argument would be about how some max/ultra M chips can easily pull 300-400W
most apple shill only looked into base TDP/idle power consumption
also apple's chip pipeline are made for low clock high IPC and they have their whole ecosystem built around that in mind
and x86 is way more versatile with higher clocks
2 different worlds, different things
mobile arm chips are typically good for how little heat they put out on idle or low consumption
but as soon as you go to high consumption it kinda switches with x86 
heat dissipation factor is a thing too, apple chips are made massive

also x86 has a lot of advantages with CISC
there's a lot of misinformation about this spread because lots of pre-uni education says that "risc is more efficient than cisc, due to pipelining etc"
and benchmarks that shows apple chip has higher performance aren't usually a good set point to compare between arm and x86 due to different instruction implementations and most of it are being pure compute workload which gives the higher IPC pipeline (expecially vector) quite the advantage
in truth, x86 does pipelining anyway so its just disinfo 
also ARM is not any newer, its almost the same age as x86
also RISC still mostly useless in versatility and its not widely used
All I know is my mac lasts like 5x longer than my windows laptop
with arm specifically, the ISA is customised per cpu, but arm also has a crazy large instruction set
its not really "risc" in its purest form
i would disagree, risc is very useful in virtual machines
better power management yeah, the idle does pull way less
remember to normalize your normals kids, just spent 2hrs+ on a bug just for it to be a normal i forgot to normalize 
well, except in embedded
#
include
<
iostream
>
probably something like this
rv5 is everywhere in embedded
so that's why ARM based AWS are just mostly sed as VM
saved
but when you do heavy workloads both drains as fast
i have no problem compiling
is it
i guess i dont know enough about embedded because i mostly see esp32
depends on what you are doing to be fair


wait i forgot about avr 
but its not risc-v its just risc
also esp32 are making risc-v not just xtensa devices apparently
glueless 

try -std=c2x or 2y or whatever it was
gcc.... rust bindgen only works with clang.. surely that wont make a difference 
2x exists but no threads.h
old compiler
try msvc 
its not an advice i would give lightly 
you dont have to install full visual studio
you can just install the build tools

though they're going to be a pain to use without something like cmake
found download
clion comes with cmake
not that i know how to use cmake
ye but you havent written a cmake file

ye cmake is so easy 
this is gonna be fun to watch 
you could just try clang too 
woah chess bot competition
chess bot competition!
i like the restriction
thanks! much inspiration from the video in the credits
go into the msys2 shell and update gcc 
sounds good ye shiro do that
i dont even know how gcc is installed
pacman -Syyu should do the trick (second y might be optional I don't remember)
some cursed build tools bundle im sure
is msys2 just wsl
no
where does gcc.exe live
uhhh

tf
actually i'm impressed nobody asked how to use toknt yet 
shiro do yourself a favour and just download the llvm installer from their GitHub then
And use clang
i cant get the bot to run. why would i care about tokens yet
mingw
msvc
wsl
clang

write your own compiler
try all of them 
Native dev is fun on windows isn't it
isnt windows just lovely 
i have all of those installed
that's crazy
msvc doesn't have threads.h either

wait yes it does

it built anyway even tho it said it couldnt

i got a .lib file 

windows defender is going crazy 
now to install python 
winget python 

bruh what the fuck, its actual malware
5.1GHz 10.4W
this is definitely way more efficient than ANY of apples chip
see what i meant now
efficiency can't even be compared nor measured because of bunch of nonlinear factors
so neither ARM nor x86 is more efficient

found the cause


.so 
They should have a way to get the suffix
i changed the name of the file to .so
Or just do the check yourself ig
surely that works....

shiro thats what i told you earlier

i wasnt listening 
fine i rename it back to .lib 
use ctypes.util.find_library('chess')
but build dll instead of lib
lib is a static library
you have to build a shared library
fucking windows
skill issue
nuclear explosion bomb incoming windows
ok cmake cache
take my options no complaining
stackoverflow my beloved
wait no find_library returns a path 
use ctypes.CDLL('chess') (or 'chess.dll') probably
cant you run something to recursively delete those
would reformatting the drive truly erases all traces of this Sality virus
the sality things
cus i swear this shit is making me crazy 
what the deal with dll and lib?
You cant replace lib without replacing the exe using it, but you can with dll?
it infects every running process 
i didnt run the virus, windows defender keeps giving me notifications about it
First is loaded at runtime, the other at compile time (with a couple asterisks, you can load .lib files at runtime too)

and whenever i try to click "Start Action" 30 more popup
good that you didn't run it atleast
static library. dll is dynamic link library
no that didnt fix it 
compile a dll....
i didnt tell it to be static its just doing that 
well.. change that
80 step process 
kill them with task manager?
or jut install an antivirus
its like 1 more arg during compiling
if you use cmake i think its like 1 option you need to set. or chang the project or something idk what your cmake file looks like 



i didnt run the virus, defender is actively cleaning the drive so i cant stop defender
i should just fully wipe the drive yo
ok
deadlock? you mean that new valve game
what new valve game
valve can't make new games
they like
forgot how

only one way to find out
i mean if thats the case then you just cant implement semaphores
why did it work on linux tho? are they automatically recursive?
and it also doesnt make much sense if mutexes have to be locked and unlocked in the same thread 
That is in fact how mutexes work yes 
Shiro please


You lock
you took away my semaphores 
not my fault windows is lacking basic support for threading features
just find a library for it then
Every other thread that tries to lock blocks until the one that has the lock unlocks

then there's external deps
this shouldnt require a library its basic system functionality
Mutexes are just semaphores with 1 ticket
a single c file next to the others...
besides it works on linux 
why tho..
that seems more like a lucky accident that it works on linux
thats what i need
my semaphore was initialized with 0 before
One thread locks a mutex, another waits until the thread that locks the mutex unlocks it... that's the whole point.
btw... windows has semaphores
theres no shard semaphore lib between win and linux 
only shared threads.h
The behavior is undefined if the current thread has already locked the mutex and the mutex is not recursive.

Are you trying to lock the same mutex multiple times
wait.. nvm thats rust

mandatory for the functionality

thats stupid
wdym stupid

if you want a semaphore you can wait on
why would you want to lock the same thread multiple times

I'll listen

the flow of events is like this
- initialize semaphore
- start second thread for UCI processing
- wait for second thread to post semaphore
these 3 all happen in the first thread in that order
you can't initialize the semaphore in the second thread, or you could hit the wait before it's initialized
the wait is mandatory to ensure you dont return to bot code without the UCI library having initialized the board state from the gui
if you want to implement the semaphore with a mutex, this means the semaphore mutex must be locked by the time you reach the wait
That sounds like you want a condition variable
but then you must lock it from the same thread
i want a semaphore 
tho
i havent looked at condition variables
could work
So the main thread blocks until it gets flipped by the other thread

it worked
but yeah it did feel like a contrived use case
as i understand you want to implement await?
many solutions to the producer-consumer pattern
it needs to be multithreaded tho
the UCI interface must process input while inside user bot code
which does not have pause points
You confused me because I thought you used a semaphore as yknow, a semaphore 
Idk if c even has condition variables
If not you can always do it with atomics I guess
threads.h does!
:D
thats why im happy you mentioned it

it seems a bit complicated to use though
there aren't a lot of suggestions as to how to best use them
It's a bit convoluted for such a simple use case I guess
There is a pretty standard example on the c++ page (logic should be identical)

If you're okay with busy looping you can also just use an atomic variable
I guess that's true

i'll push these changes shortly once i test on linux as well
i made a small change to pychessapi.py ill also push, which automatically changes if it looks for dll or .so based on platform
hi, just a heads up for the chessbot event. the tokent repo can't be built with sbt if you're using openjdk 21,
I needed to downgrade it to openjdk 17 first.
I had no experience with scala so this was pretty confusing for me
someone actually tried toknt
took sevveral years of my life
@tender river
fix or add to docs
i used openjdk 21 originally and it worked
either way there are prebuilt artifacts
they're just hard to fnid
Doesn't it target java 8 anyway
can you make them easier to find

Working Directory should be the path to where your bot.py file is
my path happens to dox my entire existence so it is redacted
probably should write that in the py api readme
im gonna test a little more on my end to ensure it works first
if you could give me another data point that'd be great
fix it 
sure... but i use rust
you could just send the me the c api.... i can just replace them for the rust bindings
using __file__
fix having to set working directory
wdym
thats not a bug
cute chess is running python
so if you want it to find the python bot you pass to python
you have to have it run python from the right working directory
you could still fix it
those are cute chess settings nothing to do with me 
oh
why not just use full path to .py instead
it wasnt working for the other person that tried it
was it working for you tho 
maybe it works now but i thought i'd just try it this way instead and it happened to work
why would i try what wasnt working silly
doesnt mean its the only problem
how can it even crash


what did you do to it 
I opened a file and that's it
A certified visual studio moment
thats just visual studio
ok so this one wasnt me 
minor complaint its common to use library file names without lib prefix on windows
so chess.dll
clang has a libclang.dll
not my main concern rn
interesting
or something like that, anyway
its doing the thing again where it uses moves from a freed array again
i fixed that issue how is it still happening
it doesnt happen on linux anymore

sounds like undefined behaviour
don't worry me too... its 8am
ctypes doesnt define most of its behaviour, figures
well its called ctypes and not cbehaviours







no threads.h on windows?


learning linux to make ches bot




