← Home ← Back to /g/

Thread 106495377

124 posts 32 images /g/
Anonymous No.106495377 >>106495501 >>106495575 >>106495597 >>106495606 >>106495871 >>106496038 >>106496356 >>106496627 >>106496647 >>106496659 >>106496703 >>106497022 >>106497024 >>106497080 >>106497562 >>106499167 >>106500989 >>106501289 >>106501568
In C++ this is 60% slower
And some retards still believe the compiler will optimize everything for you.
Anonymous No.106495382 >>106495388 >>106495971
Show godbolt output
Anonymous No.106495388 >>106495401
>>106495382
No, do it yourself
Anonymous No.106495401
>>106495388
I don't care enough
Anonymous No.106495422
>cnt
Anonymous No.106495501 >>106495526 >>106495552 >>106496700 >>106498400 >>106498467
>>106495377 (OP)
Anonymous No.106495526 >>106496700 >>106498400
>>106495501
Anonymous No.106495552
>>106495501
>polish programmers
Anonymous No.106495575
>>106495377 (OP)
> STL makes slow loops
It has always been thus.
Loop is too big to fit into a cache-line.
Anonymous No.106495597
>>106495377 (OP)
everything C++ does to get away from its "legacy" "deprecated" C core just makes it worse and worse
Anonymous No.106495606 >>106495740
>>106495377 (OP)
Not idiomatic.
int s = std::reduce(arr, arr + cnt);
Anonymous No.106495740
>>106495606
Not fastomatic.
Anonymous No.106495871
>>106495377 (OP)
::qsort is slower than std::ranges::sort
Anonymous No.106495971 >>106496049 >>106501029
>>106495382
even at -O1 it optimizes to similar assembly. the only difference being the loop counter,
you can get identical assembly by changing it to
for (int* a = arr; a != arr + cnt; ++a)
s += *a;


op using -O0 and then complaining about unoptimized code
Anonymous No.106496038
>>106495377 (OP)
Experts don't even understand why structured bindings work the way they do or were designed that way
Anonymous No.106496049
>>106495971
another noob retard
Anonymous No.106496356 >>106496405
>>106495377 (OP)
What compiler, optimisation level and list did you use to run the benchmark? Using clang++ 19.1.7 with -O2 on a list of random numbers, "slow" is much faster than "fast" for short lists and they become roughly equivalent as the list grows.
Anonymous No.106496405
>>106496356
>is much faster
Sorry, I read my table incorrectly. They're roughly equivalent regardless of list length.
t. pogeet !!b2oSUmilA2N No.106496627 >>106496659 >>106498480
>>106495377 (OP)
>#include
>uses a C++ bloated template class just for the ability to do fancy for loops
>complains that its slow
Modern C++ and Rust are all about type masturbation.
If everyone thinks that doing
struct MyType {
void* data;
size_t length;
};

is bad, buggy and makes the code unreadable then performance is the least of the concerns here.
Disgusting.
Anonymous No.106496647 >>106496730
>>106495377 (OP)
nigger it's 2k25 and you're still arguing on c/c++? christ
Anonymous No.106496659 >>106499307
>>106495377 (OP)
>>106496627
>using #includes instead of imports
kys
>using void* instead of templates
kys
Anonymous No.106496681 >>106496700 >>106498306
In Beef, they both generate the same assembly when you force inline the span.
[Export, LinkName("Fast")]
static int Fast(int* arr, int count)
{
int s = 0;
for (int i = 0; i < count; ++i)
{
s += arr[i];
}
return s;
}

[Export, LinkName("Slow")]
static int Slow(int* arr, int count)
{
int s = 0;
for (int x in Span(arr, count))
{
s += x;
}
return s;
}
Anonymous No.106496700 >>106496740 >>106497061 >>106501509
>>106496681
>>106495526
>>106495501
delete this post right now, you're completely ruining my fucking thread you fucking anti-fun faggot
Anonymous No.106496703 >>106496740
>>106495377 (OP)
>slow c++ function is 60% slower than fast c++ function (trust me bro)
absolute retard
Anonymous No.106496730
>>106496647
It's 2025 and the noob retards still haven't fixed their compilers.
Anonymous No.106496740
>>106496700
You don't even understand the posts you quoted, +1 noob retard.
>>106496703
Noob retard.
Anonymous No.106496960 >>106497026 >>106497172
the first function may invoke undefined behavior if 'arr' has more than 32767 elements, the second will never invoke ub.
good luck looping over the bytes of an image in a portable manner.
ps both compile to the same assembly with the right compiler flags; if you don't know what you're doing, C and C++ are not for you.
Anonymous No.106497022
>>106495377 (OP)
the point of stl is for the garuntees, not for the speeds. The truth is that whichever one either encourages cache filling or whichever one engages simd instructions is going to be more performant. But I'd like to see whether it really is faster or not when speed optimization is turned on.
Anonymous No.106497024
>>106495377 (OP)
C++ compilers have never compiled index based loops and pointer based loops into identical code. They are different.
Anonymous No.106497026 >>106497039
>>106496960
You are the most stupid of all noob retards in this thread. Congratulations.
Anonymous No.106497039 >>106497044
>>106497026
Why do you keep saying noob retard?
Anonymous No.106497044
>>106497039
because he has autism. ignore his thread starting now.
t. pogeet !!b2oSUmilA2N No.106497061
>>106496700
Beef is a better OOP lang than C++ every wish it could be.
Anonymous No.106497080 >>106497094
>>106495377 (OP)
Micro benchmarking can be very difficult to do correctly and even experts fuck it up sometimes. Judging by what you're benchmarking and your attitude, I can safely say I don't trust you to have the competence to have done it correctly.
Anonymous No.106497094 >>106497160
>>106497080
If you can't benchmark that you're a noob retard.
Anonymous No.106497160 >>106506427
>>106497094
anyone who says that can't be trusted to do it correct.
Anonymous No.106497172
>>106496960
>the first function may invoke undefined behavior if 'arr' has more than 32767 elements
Why?
Anonymous No.106497562 >>106497588
>>106495377 (OP)
Not OP, but I benchmarked it.
I made sure to randomize cache between runs.
I also added another option which is using spans, but accumulating by using std::reduce, and guess what on fast optimization, std::reduce caused spans to be just as fast as the C method, but it was a close race.
==> result_o0 <==
Slow Elapsed (s) 6.7619e-05s
Fast Elapsed (s) 2.033e-05s
Slow with std::reduce Elapsed (s) 7.1959e-05s

==> result_o1 <==
Slow Elapsed (s) 2e-07s
Fast Elapsed (s) 9e-08s
Slow with std::reduce Elapsed (s) 3.18e-06s

==> result_o2 <==
Slow Elapsed (s) 2.1e-07s
Fast Elapsed (s) 5e-08s
Slow with std::reduce Elapsed (s) 1e-07s

==> result_o3 <==
Slow Elapsed (s) 1.9e-07s
Fast Elapsed (s) 1e-07s
Slow with std::reduce Elapsed (s) 8e-08s

==> result_ofast <==
Slow Elapsed (s) 2e-07s
Fast Elapsed (s) 8e-08s
Slow with std::reduce Elapsed (s) 5e-08s

==> result_os <==
Slow Elapsed (s) 2.1e-07s
Fast Elapsed (s) 8e-08s
Slow with std::reduce Elapsed (s) 1.1e-07s
Anonymous No.106497588 >>106497595 >>106497990
>>106497562
This is the code I used with g++ as -std=c++20
#include
#include
#include
#include
#include

int fast(int *arr, int cnt)
{
int s { 0 };
for (int i = 0; i < cnt; ++i)
{
s += arr[i];
}
return s;
}

int slow(int *arr, int cnt)
{
int s { 0 };
for (int x : std::span(arr, cnt))
{
s += x;
}
return s;
}

int slow_with_std_reduce(int *arr, int cnt)
{
auto span_of_arr { std::span(arr, cnt) };
return std::reduce(span_of_arr.begin(), span_of_arr.end(), 0);
}

void __attribute__((optimize("O0"))) randomize_cache()
{
const size_t bigger_than_cachesize { 10 * 1024 * 1024 };
static long *p { new long[bigger_than_cachesize] };

for (int i = 0; i < bigger_than_cachesize; ++i)
{
p[i] = rand();
}
}

to be continued
Anonymous No.106497595 >>106497615
>>106497588
int main()
{
using namespace std::chrono;

const size_t test_arr_size { 5000 };

int test_arr[50000];

for (size_t i = 0; i < test_arr_size; ++i)
{
test_arr[i] = rand();
}

randomize_cache();

const auto test_arr_ptr { reinterpret_cast(test_arr) };

const auto slow_start { steady_clock::now() };

const auto slow_result { slow(test_arr_ptr, test_arr_size) };

const auto slow_stop { steady_clock::now() };

randomize_cache();

const auto fast_start { steady_clock::now() };

const auto fast_result { fast(test_arr_ptr, test_arr_size) };

const auto fast_stop { steady_clock::now() };

randomize_cache();

const auto slow_with_std_reduce_start { steady_clock::now() };

const auto slow_with_std_reduce_result { slow_with_std_reduce(test_arr_ptr, test_arr_size) };

const auto slow_with_std_reduce_stop { steady_clock::now() };

const duration elapsed_slow { slow_stop - slow_start };

std::cout << "Slow Elapsed (s) " << elapsed_slow << '\n';

const duration elapsed_fast { fast_stop - fast_start };

std::cout << "Fast Elapsed (s) " << elapsed_fast << '\n';

const duration elapsed_slow_with_std_reduce { slow_with_std_reduce_stop - slow_with_std_reduce_start };

std::cout << "Slow with std::reduce Elapsed (s) " << elapsed_slow_with_std_reduce << '\n';
}
Anonymous No.106497615 >>106497627 >>106497988
>>106497595
I just realized I used the wrong array size, let me fix it.
==> result_o0 <==
Slow Elapsed (s) 0.000667988s
Fast Elapsed (s) 0.000200509s
Slow with std::reduce Elapsed (s) 0.000713617s

==> result_o1 <==
Slow Elapsed (s) 2e-07s
Fast Elapsed (s) 1e-07s
Slow with std::reduce Elapsed (s) 2.245e-05s

==> result_o2 <==
Slow Elapsed (s) 2.5e-07s
Fast Elapsed (s) 1e-07s
Slow with std::reduce Elapsed (s) 1e-07s

==> result_o3 <==
Slow Elapsed (s) 2e-07s
Fast Elapsed (s) 7e-08s
Slow with std::reduce Elapsed (s) 6e-08s

==> result_ofast <==
Slow Elapsed (s) 2e-07s
Fast Elapsed (s) 1e-07s
Slow with std::reduce Elapsed (s) 7e-08s

==> result_os <==
Slow Elapsed (s) 2.2e-07s
Fast Elapsed (s) 7e-08s
Slow with std::reduce Elapsed (s) 8e-08s
Anonymous No.106497627
>>106497615
Used this as fix to main
const size_t test_arr_size { 50000 };

int test_arr[test_arr_size];

for (size_t i = 0; i < test_arr_size; ++i)
{
test_arr[i] = rand();
}
Anonymous No.106497988 >>106497995 >>106498317
>>106497615
One last fix I swear, so I checked my assembly output because those numbers seemed too low, and the compiler had reordered my now statements. So I fixed that, here are the new results:
==> result_o0 <==
Slow Elapsed (s) 0.000699038s
Fast Elapsed (s) 0.000200809s
Slow with std::reduce Elapsed (s) 0.000640428s

==> result_o1 <==
Slow Elapsed (s) 4.263e-05s
Fast Elapsed (s) 5.702e-05s
Slow with std::reduce Elapsed (s) 2.302e-05s

==> result_o2 <==
Slow Elapsed (s) 1.836e-05s
Fast Elapsed (s) 1.716e-05s
Slow with std::reduce Elapsed (s) 2.441e-05s

==> result_o3 <==
Slow Elapsed (s) 1.87e-05s
Fast Elapsed (s) 2.2059e-05s
Slow with std::reduce Elapsed (s) 2.381e-05s

==> result_ofast <==
Slow Elapsed (s) 1.5909e-05s
Fast Elapsed (s) 1.99e-05s
Slow with std::reduce Elapsed (s) 2.233e-05s

==> result_os <==
Slow Elapsed (s) 4.642e-05s
Fast Elapsed (s) 4.172e-05s
Slow with std::reduce Elapsed (s) 2.358e-05s
Anonymous No.106497990
>>106497588
Why do you niggers use #include? Is it still 1800?
Anonymous No.106497995
>>106497988
and the corrections to main is this
template
__attribute__((always_inline)) inline void do_not_optimize(const T &value) {
asm volatile("" : "+m"(const_cast(value)));
}

int main()
{
using namespace std::chrono;

const size_t test_arr_size { 50000 };

int test_arr[test_arr_size];

for (size_t i = 0; i < test_arr_size; ++i)
{
test_arr[i] = rand();
}

randomize_cache();

const auto test_arr_ptr { reinterpret_cast(test_arr) };

const auto slow_start { high_resolution_clock::now() };

do_not_optimize(test_arr_ptr);
const auto slow_result { slow(test_arr_ptr, test_arr_size) };
do_not_optimize(slow_result);

const auto slow_stop { high_resolution_clock::now() };

randomize_cache();

const auto fast_start { high_resolution_clock::now() };

do_not_optimize(test_arr_ptr);
const auto fast_result { fast(test_arr_ptr, test_arr_size) };
do_not_optimize(fast_result);

const auto fast_stop { high_resolution_clock::now() };

randomize_cache();

const auto slow_with_std_reduce_start { high_resolution_clock::now() };

do_not_optimize(test_arr_ptr);
const auto slow_with_std_reduce_result { slow_with_std_reduce(test_arr_ptr, test_arr_size) };
do_not_optimize(slow_with_std_reduce_result);

const auto slow_with_std_reduce_stop { high_resolution_clock::now() };
Anonymous No.106498064 >>106498091
Micro-benchmarking at this level isn't very useful.
Anonymous No.106498091
>>106498064
I know, I just wanted to show that C++ even when abstract is still good at doing stuff.
Anonymous No.106498140
assuming this isn't bait. even without compiler optimizations the code will be almost identical in performance. a span is a lightweight objects, and range based for loops are also pretty light weight. you have using two abstractions in the second example, iterators and spans, but some could argue it is easier to read. i guess if it matters that much don't use them?
Anonymous No.106498306 >>106498320
>>106496681
>Beef,
is this an anti-jeet language?
Anonymous No.106498317 >>106498330
>>106497988
don't c++ fags know how to print nanoseconds?
Anonymous No.106498320
>>106498306
It's anti-vegan.
Anonymous No.106498330
>>106498317
I was being lazy and I wasn't sure if the thread would unalive before I could put my autism on display okay.
Anonymous No.106498400
>>106495501
>>106495526
What book is this from?
Anonymous No.106498467
>>106495501
muh zero-cost abstraction
Anonymous No.106498480
>>106496627
put the length first
Anonymous No.106498533 >>106498560 >>106498874
OP is gay
Anonymous No.106498560 >>106498696 >>106498874 >>106502435
>>106498533
mfw the compiler isn't smart enough to just emit
mov edi,std::cout
mov esi,10
call std::ostream::operator<<(int)

shit lang
Anonymous No.106498696 >>106498703 >>106498705
>>106498560
>i dont know what constness is
>proceeds to language in pointless language flamewars
hang yourself you worthless nigger faggot
Anonymous No.106498703
>>106498696
>language in pointless
engage in*
Anonymous No.106498705 >>106498792
>>106498696
your mythical smart compiler should be able to look at the whole program and see nothing writes to your array bro just pretend its const bro
Anonymous No.106498792
>>106498705
>bro just pretend its const bro
thats what youre doing
>should be able to look at the whole program
yea, its called lto
>your mythical smart compiler
there are only a handful of actually good compilers, and this is one of them.

kys nigger faggot. go back to jeetscript
Anonymous No.106498874 >>106498932 >>106500956 >>106501640
>>106498533
>>106498560
Should have eliminated one mov but.
Anonymous No.106498932
>>106498874
Wait, I'm retarded.
ecx gets overwritten.
Anonymous No.106499167
>>106495377 (OP)
C++ is faster than any other language if you never use stl headers.
Anonymous No.106499201
I never felt the need to make simple for loops like that more readable.
Anonymous No.106499292
>Build succeeded with 123 warning(s) in 10.4s
Not my problem
Anonymous No.106499307 >>106499546
>>106496659
>sepplesniggers are incapable of reading
makes sense, your IDE automates half your workflow these days and you just plug other people's nightmare template libraries into eachother for a living.
Anonymous No.106499546
>>106499307
I don't use an IDE.
Anonymous No.106500956 >>106501640 >>106502629
>>106498874
what disassembler?
Anonymous No.106500989
>>106495377 (OP)
https://www.youtube.com/watch?v=B2BFbs0DJzw
Anonymous No.106501029 >>106501486
>>106495971
IS THAT A RAW POINTER I"M GONNNANANANANANANANNANANANANANSFJDNSAOFCHNJIOSVFHJNPO(WJNCVIENVIKNVONILCNEIOVFJEPOIRVHP(HFJ O(HJDPINFVILENKILVBNDJ(ERFHOFVHINRFIRBN(PIEHV
Anonymous No.106501289
>>106495377 (OP)
Why don't you pass the fucking array cnt.
Anonymous No.106501486 >>106501505
>>106501029
you forget the Segmentation fault (core dumped)
Anonymous No.106501505 >>106501527
>>106501486
Using that meme outs you as a bad programmer. What is your mind apple score?
Anonymous No.106501509
>>106496700
kill yourself
Anonymous No.106501527
>>106501505
5
Anonymous No.106501568 >>106501585
>>106495377 (OP)
>In C++, a span is a lightweight, non-owning view over a contiguous sequence of objects.
holy mental retardation
now the committee wants iterators for arrays

this stopped being funny a while ago
Anonymous No.106501585 >>106501636
>>106501568
it's just a pointer and a length. stop being a dumb retard.
Anonymous No.106501636 >>106501645 >>106501649
>>106501585
then why is it slower you demented faggot?
Anonymous No.106501640 >>106502629
>>106500956
>>106498874
Yeah, I'm also curious
Anonymous No.106501645 >>106501656
>>106501636
it isn't, dumb retard
Anonymous No.106501649 >>106501656 >>106501656 >>106501741
>>106501636
Because you're an incompetent nigger who doesn't know how to tell compiler to optimize it.
Anything benchmarked without
>-flto=1
>-march=native
>-DNDEBUG
>-O3
is worthless and not even worth analyzing or considering, kill yourself
Anonymous No.106501656 >>106501661 >>106501668
>>106501649
>youre using it wrong
no, its shit
>>106501645
yes it is you retarded autismo trash >>106501649
Anonymous No.106501661 >>106501665
>>106501656
dumb retard
Anonymous No.106501665 >>106501670
>>106501661
>t. rustranny monkeyposter
youre supposed to be b&
Anonymous No.106501668 >>106501690 >>106501729
>>106501656
Yes, you are in fact using it wrong, you stupid nigger. Compiler does what you tell it to, and by default you aren't trying to build a fully optimized release for specific hardware ignoring all possible costs like potential cache thrashing due to code bloat or platform incompatibility.
Anonymous No.106501670 >>106501690
>>106501665
obsessed
Anonymous No.106501690 >>106501695 >>106501698
>>106501670
>t. sub 80 iq brown

>>106501668
no
its a shit implementation made by mental retards that has no point in the first place

of course a handicapped nigger like yourself is gonna defend that
Anonymous No.106501695
>>106501690
>no arguments
dumb obsessed retard
Anonymous No.106501698 >>106501707
>>106501690
Of course a handicapped nigger will ship -O0 build to production because it's "fast enough" and he didn't have to learn anything.
Oh wait, you aren't gonna ship anything ever, unemployable retard.
Anonymous No.106501707 >>106501743 >>106501992
>>106501698
>digression
nothing is gonna save you from the fact that this shit has no right NOT to dissolve like syntactic sugar

sepples is a flaming pile of garbage
Anonymous No.106501729 >>106501743
>>106501668
You are 100% wrong and you are 200% braindead.
Anonymous No.106501741 >>106501743
>>106501649
OP here, you are another braindead noob retard, get the fuck out of here.
Anonymous No.106501743 >>106501752
>>106501707
>>106501729
>>106501741
all me
Anonymous No.106501752
>>106501743
*vaguely self erotical nuUHHH*
Anonymous No.106501992 >>106502353
>>106501707
It does when you tell it to, now explain why it should when you didn't tell it to.
Anonymous No.106502353 >>106502365 >>106502405
>>106501992
because it receives the same parameters as a for loop.
theres zero fucking excuse to offset that effort to the end user
in fact
theres zero excuse for an alternate interface to begin with
instead of forcing upon the user to use fukken span for lifetime negritude reasons, this should be inferred by the compiler

its bad craftsmanship
and its indefensible even from the safety negritude perspective

why would you leave the possibility to the s er to make an oopsie if your overaching goal is safety?
the result is that theres another interface to learn, which adds complexity to an already bloated framework
and THAT does FUCK ALL for safety, in fact, its counter productive, negating the benefits of the whole idea and the work thats been invested in it with the same stroke

this is motherfucking retarded
and i see autistm' signature retardation in the complete inability to comprehend ergonomics
Anonymous No.106502365
>>106502353
>the possibility to the s er
*the possibility to the user
Anonymous No.106502405 >>106502426 >>106502462
>>106502353
>Compiler doesn't optimize with no optimizations
Which part of this is unclear to you, nigger?
Anonymous No.106502426 >>106502438
>>106502405
nono
this is perfectly clear

where you cant comprehend shit
as a broken fucken detritus of a mind aka autistic
is that this construct should have zero runtime costs because its internals are operating beyond the scope of the language

but you cant fucking understand basic abstraction for shit
because youre autistic
and thus
mentally retarded
Anonymous No.106502435
>>106498560
the array is extern, so it cannot assume that the data is the same that it was initialized with. make it static and it can.
Anonymous No.106502438 >>106502467
>>106502426
It has 0 runtime cost when you enable optimizations, which part of this isn't clear to you, dumb nigger?
Also consider formatting your posts better so there's no cost to parsing them.
Anonymous No.106502462 >>106502466
>>106502405
ill make it extra clear bc youre a retard with zero (0) visualization abilities and even less mental flexibility
so i have to painstakingly explain everything to you step by fucking step:

>because its internals are operating beyond the scope of the language
and
>it gets the same parameters as a for loop
it can be substituted with a for loop and the magic can happen behind the scenes
because for the lifetime niggerdom bullshit the compiler can identify types with associated lifetimes syntactically

and just do the fucking switch bw a for loop and a fucking span
no new interface needed
but im sure autistic mental retardation played a role
and the associated immature ego shit
and sepples ended up with another interface FOR FUCKING LOOPS
AND WHICH IS SHITTER THAN THE ORIGINAL, WITH A RUNTIME COST BC WHY NOT

this is a complete quality assesment failure
Anonymous No.106502466
>>106502462
Your shitty formatting and inability to spell out whole words is tiresome and I didn't read your post. Learn English first before you tell me about C++, nigger.
Anonymous No.106502467 >>106502474 >>106503020
>>106502438
>It has 0 runtime cost when you enable optimizations
>digression

BECAUSE THE COMPILER REWRITES YOUR FUCKING CODE YOU DUMB NIGGERFUCK
>WRITE INTERNALS FOR SEPPLES
>AAHH FUCK IT THE COMPILER WILL TAKE CARE OF THAT

HOW ISNT THIS NIGGER TIER?
Anonymous No.106502474 >>106502487
>>106502467
span isn't internal, it's implemented in C++ you dumb nigger, anybody can write their own.
Anonymous No.106502477
ZERO FUCKING QUALITY ASSESMENT
>AH FUCK IT LETS PUSH IT TO PROD ANYWAYS
Anonymous No.106502487
>>106502474
then its a user lib
and then why the fuck did you post it on /g/ then?
Anonymous No.106502545
> silence
yeah shut the fuck up retardo autistic trash
especially after this
>Learn English first before you tell me about C++,
nigger
this isnt /lit/, this is /g/
you fucking retarded piece of shit (aka autist)
Anonymous No.106502556 >>106502561
Calm down, Ranjeet.
Anonymous No.106502561 >>106502581
>>106502556
im whiter than you
and your genes are fucked, non human
Anonymous No.106502581 >>106502583
>>106502561
You're so brown that having to add one commandline option to solve your non-issue makes you seethe in pure rage.
Anonymous No.106502583
>>106502581
>n-no, u
peak 80 iq
everyone clap now
Anonymous No.106502629 >>106503615
>>106500956
>>106501640
Beef IDE's built-in debugger.
Anonymous No.106502682
Amazing difference in execution speed depending on if a variable is named A or named Z.
Anonymous No.106503020 >>106503073 >>106503112
>>106502467
The "fast" code is "faster" literally only when compiler rewrites the code
Anonymous No.106503073
>>106503020
no.
the compiler is a copilot
it can fix some of your fuckups.
but it wont make you anywheere near as good as an actual pro.

QA failure
fukken sepples is a NIGGER joke
Anonymous No.106503112
>>106503020
>compiler rewrites the code
yes. that's the purpose of a compiler.
Anonymous No.106503129
and not a joke which punchline is "yeah but he was bwaawn, hahah"
no
its a joke as told by a fucking NIGGER
and a fucking braindamaged one
a NIGGER who takes grack
takes massive amounts of it
and wwho has smoken all the va rioust types of bread AND of salt there is comercially available
Anonymous No.106503268
>no challenge
autismo rabble shute the fuck up
AS THEY SHOULD
Anonymous No.106503615
>>106502629
Thanks
Anonymous No.106506427 >>106507076
>>106497160
what the fuck does this image refer to
Anonymous No.106507076 >>106507369
>>106506427
Anonymous No.106507369
>>106507076
thank you