حل شدن مشکل concat با یک ایده با کمی فکر و داستان بلند قهقهه

در صدد هستم تا داستان بلند قه قهه رو بنویسم، به نظرم خیلی داستان جالب و جذابی میتونه باشه، متفاوت تر از هر داستان و رمانی، به صورت رایگان همینجا منتشرش میکنم

مشکل concat string رو به خطور یک ایده به ذهنم اون هم همین الان، حل خواهم کرد

روزای سختی در پیش دارم، امیدوارم مشکلی پیش نیاد و همه چیز ختم به خیر بشه

fast concat string

در حال کار کردن روی concat string هستم که بتونم performance اون رو بالا ببرم. برای اینکار باید strlen رو حذف کنم و مستقیم زمانی که دارم concat رو انجام میدم با realloc مجدد اندازه string رو ست کنم و اینکار رو انجام بدم.

امیدوارم نتیجه کار خوب از آب در بیاد.

بعد از بازگشت از یک سفر طولانی ( البته من دوست داشتم طولانی تر بشه که نشد ) باز هم به ادامه توسعه زبان برگشتم.

انجام base64

خب base64 رو هم encode و هم decode ش رو انجام دادم

البته هنوز plus equal رو اصلاح نکردم. اما به شکل زیر انجام شد. توابعی که لازم بود هم به string اضافه کردم تا کار انجام بشه.

function main() {
    let Base64 = {
        characters: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" ,

        encode: function( string )
        {

            let characters = this.characters;

            let result = '';

            let i = 0;
            do {
                let a = string.charCodeAt(i++);
                let b = string.charCodeAt(i++);
                let c = string.charCodeAt(i++);

                a = a ? a : 0;
                b = b ? b : 0;
                c = c ? c : 0;

                let b1 = ( a >> 2 ) & 0x3F;
                let b2 = ( ( a & 0x3 ) << 4 ) | ( ( b >> 4 ) & 0xF );
                let b3 = ( ( b & 0xF ) << 2 ) | ( ( c >> 6 ) & 0x3 );
                let b4 = c & 0x3F;

                if( ! b ) {
                    b3 = b4 = 64;
                } else if( ! c ) {
                    b4 = 64;
                }

                result = result + this.characters.charAt( b1 ) + this.characters.charAt( b2 ) + this.characters.charAt( b3 ) + this.characters.charAt( b4 );

            } while ( i < string.length );

            return result;
        } ,

        decode: function( string )
        {
            let characters = this.characters;
            let result     = '';

            let i = 0;
            do {

                let b1 = this.characters.indexOf( string.charAt(i++) );
                let b2 = this.characters.indexOf( string.charAt(i++) );
                let b3 = this.characters.indexOf( string.charAt(i++) );
                let b4 = this.characters.indexOf( string.charAt(i++) );

                let a = ( ( b1 & 0x3F ) << 2 ) | ( ( b2 >> 4 ) & 0x3 );
                let b = ( ( b2 & 0xF  ) << 4 ) | ( ( b3 >> 2 ) & 0xF );
                let c = ( ( b3 & 0x3  ) << 6 ) | ( b4 & 0x3F );

                result = result + (String.fromCharCode(a) + (b?String.fromCharCode(b):'') + (c?String.fromCharCode(c):'') );

            } while( i < string.length );

            return result;
        }
    };

    let e = Base64.encode('test')
    print( e )
    print("\n")
    let d = Base64.decode(e)
    print( d )

}

یک base64 ساده با dolang

دارم یک base64 ساده با dolang مینویسم. با انجام اینکار هم خیلی از قسمت ها دیباگ میشه.

خیلی از باگ ها رو تا الان برطرف کردم.

چند مساوی پشت سر هم رو باید اضافه کنم

b3 = b4 = 64;

هگز رو باید اضافه کنم.

plus equal رو باید اصلاح کنم

با انجام اینکارها base64 تکمیل میشه.

بازگشت از سفر

خب بعد از برگشتن از سفر با خوردن دو تا فنجون قهوه و بالا بردن انرژی در حد نزدیکی های زحل ، در عرض ۱۰ دقیقه مشکل رو حل کردم. اینه که با سفر میشه ذهن رو خالی کرد.

سفر هم خیلی خوش گذشت. جالبترین قسمتش هم هم صحبتی با پیرزن و پیرمد های ابیانه بود. خیلی آدمهای عجیبی بودن. بدون لهجه صحبت میکردن. خیلی خون گرم بودن. همینطور بی خود و بی جهت باهات هم صحبت میشدن و باهات گرم میگرفتن. از هم صحبتی باهاشون لذت میبردی. توی ابیانه پیرزنی که حتی فکرشو نمیکردی سواد داشته باشه خیلی راحت کارتتو میگیره و رمزتو میپرسه و حساب میکنه. اونطرفتر هم یک پیرزن دیگه بنزین میفروشه. اون هم لیتری ۱۰ هزارتومن. اگر هم بنزنین نداشته باشه راهنماییت میکنه که کجا بری بنزین بگیری.

خوش گذشت.

تفکیک array با object

خب دیگه آرایه ها و آبجکت ها از یک نوع نیستن. مثلا کلاس ها الان نوع کلاس رو دارن و یا وقتی اونها رو new میکنیم هم نوع آبجکت رو دارن و آرایه ها فقط با [] قابل تعریف هستن. یا اینکه یک آرایه رو new کنیم ...

new Array

اضافه شدن مثال regex و اکستنشن شدن string و regex

خب مثال regex رو در زیر میگذارم


main() {

    let r = /^(\w+)\s*(\w+)\s*$/g.exec("this is test");

    print( r );

}

فعلا خروجی تابع exec مقادیر match شده به صورت آرایه است.

بعدا match , replace, match all و ... رو هم اضافه میکنم به string class

دیگه نیازی به import کتابخونه برای regex نیست و مستقیم در بکند کار تعریف شده.

قبلا مثال های string رو قرار دادم. الان توسعه زبان خیلی راحت شده و میتونم اون رو برای array و object هم به صورت extension توسعه بدم.

خوبی اینکار این هست که با تغییر در extension و کامپال اون به صورت مجزا دیگه نیازی به کامپایل کل برنامه نیست ...