Don't use dependencies, only standard libraries
このコミットが含まれているのは:
コミット
00478b3a0d
|
@ -0,0 +1,96 @@
|
|||
title: Don't use dependencies, only standard libraries
|
||||
author: 寮
|
||||
date: 2023-02-14
|
||||
tags: technology,programming,webdev
|
||||
----
|
||||
BITCH!! Gimme chocolate!\
|
||||
It's Valentine's Day!
|
||||
|
||||
As you guys already know, I hate dependencies.\
|
||||
I write all functionality by myself, unless I absolutely need to use a dependency (for example ncurses for desktop programs, or SDL for video games, or MySQL for web development).\
|
||||
But what if I told you that all these dependencies, including the absolutely necessary ones, are all written using standard libraries?\
|
||||
And if not, then it has a chain of dependencies, and at the very end of it it's pure standard libraries.
|
||||
|
||||
Especially Javascript and Python programs are ALWAYS massive dependency hells, even if you only initialize a JS project, so you only initialize a new Vue.js, Alpine.js, or whatever other engine you're using, it's already pulling in hundreds of Mebibytes of unwanted cruft, only to display a blank page of nothingness, it's absolutely absurd!\
|
||||
Though it's kind of understandable, since both languages are commonly used by people who don't know how to code, don't know how computers work, and only want to make a quick buck, while both languages are pretty much empty (only a few basic keywords and nothing else).
|
||||
|
||||
But I'm seeing the same shit with PHP, which is more likely to be used by more advanced programmers/computer users, and by default provides an abundance of functionality.\
|
||||
PHP is so complete, in my entire 20+ years of working in it I never pulled a single external dependency ever!\
|
||||
The only time I did work with PHP dependencies was when I got handed a frameworked PHP project that's full of bugs, and even then I never added any new dependencies, and if I did finger with the dependencies, I only ever reduced the amount of dependencies.\
|
||||
But despite that, there's still things like Composer and Packagist, and a lot of dependencies available for download.\
|
||||
I just can't get the point...
|
||||
|
||||
To me there's no such a thing as "traditional development" and "modern development".\
|
||||
To me there's only the right way of programming, and the wrong way of programming.\
|
||||
Everything soydevs consider "modern development" is pretty much the wrong way.
|
||||
|
||||
EYE BREAK!!\
|
||||
![](http://ass.ryocafe.site/__nekomata_okayu_and_inugami_korone_hololive_drawn_by_kkato__sample-25536e588342f663055d06e4a0eaee6a.jpg)
|
||||
|
||||
If you have to verify by yourself, just take any random framework as-is, inspect the dependencies it comes with by default, and follow the chain all the way down until you get to a project that has no dependencies at all.\
|
||||
You'll quickly see that standard libraries provide you everything you need in every single language.\
|
||||
In C and C++ that's the STD libraries, in Go that's FMT, in C# and Java that's System, PHP doesn't have a name for it because everything is already imported by default anyway.\
|
||||
C is known for not having strings, Go is known for not having arrays, Rust is known for not having nulls.\
|
||||
And you can still write implementations of these using their standard libraries.\
|
||||
For example, since PHP 8.0 there's the `str_starts_with()` function.\
|
||||
All this is, is this (for those who use PHP 7.4 or older):
|
||||
|
||||
```php
|
||||
<?php
|
||||
function str_starts_with ($haystack, $needle) {
|
||||
return (string)$needle !== '' && strncmp($haystack, $needle, strlen($needle)) === 0;
|
||||
}
|
||||
|
||||
$string = "Fuck you you fucking nigger";
|
||||
echo "\"$string\" starts with \"Fuck you\": ".str_starts_with($string, "Fuck you")."\n";
|
||||
echo "\"$string\" starts with \"fucking\": ".str_starts_with($string, "fucking")."\n";
|
||||
?>
|
||||
```
|
||||
|
||||
Let's rewrite the same thing in C:
|
||||
|
||||
```c
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
int str_starts_with (char* haystack, char *needle) {
|
||||
return needle != "" && strncmp(haystack, needle, strlen(needle)) == 0 ? 1 : 0;
|
||||
}
|
||||
|
||||
int main () {
|
||||
char* string = "Fuck you you fucking nigger";
|
||||
printf("\"%s\" starts with \"Fuck you\": %d\n", string, str_starts_with (string, "Fuck you"));
|
||||
printf("\"%s\" starts with \"fucking\": %d\n", string, str_starts_with (string, "fucking"));
|
||||
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
||||
Output:
|
||||
```
|
||||
"Fuck you you fucking nigger" starts with "Fuck you": 1
|
||||
"Fuck you you fucking nigger" starts with "fucking": 0
|
||||
```
|
||||
|
||||
And in Go:
|
||||
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func main () {
|
||||
str := "Fuck you you fucking nigger"
|
||||
fmt.Printf("\"%s\" starts with \"Fuck you\": %t\n", str, strings.HasPrefix(str, "Fuck you"))
|
||||
fmt.Printf("\"%s\" starts with \"fucking\": %t\n", str, strings.HasPrefix(str, "fucking"))
|
||||
}
|
||||
```
|
||||
|
||||
Output:
|
||||
```
|
||||
"Fuck you you fucking nigger" starts with "Fuck you": true
|
||||
"Fuck you you fucking nigger" starts with "fucking": false
|
||||
```
|
読み込み中…
新しいイシューから参照