مبحث string و مباحث مربوط به اون ( به طور مثال concat ) خیلی مهم هست که پرفرمنس خوبی داشته باشه
بهینه سازی در این قسمت خیلی مهم هست و باید حتما انجام بشه
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char ** strings;
int i;
} string;
string_init( string *str ) {
str->i = 0;
str->strings = malloc( sizeof( char *) * (1002) );// = malloc( 999999999 );
}
string_append( string *str, char *str1 ) {
if( str->i % 1000 == 0 ) {
str->strings = realloc( str->strings, sizeof( char *) * ( str->i + 1002 ) );
}
str->strings[str->i++] = str1;
}
string_print( string *str ) {
for( int i = 0; i < str->i; i++ ) {
printf("%s", str->strings[i] );
}
}
string_len( string *str ) {
size_t len = 0;
for( int i = 0; i < str->i; i++ ) {
len += strlen(str->strings[i]);
}
return len;
}
main() {
string *str;
string_init( str );
char *str1 = "abc";
char *str2 = "defghijklmnñopqrstuvwxyz";
char *nstr = malloc( strlen(str1)+strlen(str2)+1 );
strcat(nstr, str1);
strcat(nstr, str2);
for(int i = 0; i < 30000; i++) {
string_append(str, nstr);
}
string_print( str );
printf("\\n");
printf("%d\\n", string_len( str ) );
}
در یکی از مباحثی که در quickjs در مورد اون بحث شده. مقایسه performance در nodejs و qjs برای یک مثال هست.
خب من خیلی این قسمت رو تست کردم تا به این پیاده سازی نهایی رسیدم تا پرفورمنسی برابر با nodejs داشته باشم.
این پیاده سازی رو برای dolang هم باید انجام بدم.
البته یک چیز دیگه ای هم من توی ذهنم دارم که اون رو هم باید تست کنم. ( ویرایش: بهترین راه حل همین راه حلی هست که بالا گفتم ...)