PEJI.IR

پیاده سازی array, data type, struct

۱۴۰۰ آبان ۵, چهارشنبه ساعت ۱۱:۳۱

در حال پیاده سازی array هستم که به صورت یک data type و استراکچر معمول آرایه با تلفیق زبان php و js است.

مرحله بعدی کارم پیاده سازی انواع data type و تعریف جدید datatype با شیوه struct هستم.

سینتکس پایانی زبان مورد نظر من با نام dolang که انتخاب این نام به دلیل ایده ای هست که در پیاده سازی زبان اجرا کردم، تلفیقی از c و js و php و c++ هست. امیدوارم که بتونم تمام این زبان ها رو به صورت مجزا اجرا کنم ...

var i = "1";
array arr;
arr.set(i, "val1");
arr.set("test2", "val2");
arr.set("test3", "val3");
array_set(arr, "test4", "val4");
printf("%s\n", arr.get(i) );
array arr = ["test1": "val1", "test2" : "val2", "test3" : "val3", "test4" : "val4"];
printf("%s\n", arr["test1"] );

ادامه طراحی زبان

۱۴۰۰ آبان ۳, دوشنبه ساعت ۱۹:۱۴

تمام syntax ها رو تقریبا پیاده سازی کردم و آخرین کاری که انجام دادم ساختن کلاس و new کردن اون هست.


class test {
	a() {
		printf("dddddddd\n");
	}	

	d() {
		printf("aaaaaaa\n");
	}
}

a() {
	printf("hhhhhhhh\n");
}

main() {
	var d = new test;
	d.a();

	a();

	var a = "Test ast";
	printf("%s\n", a);
}

jit compiler

۱۴۰۰ مهر ۲۲, پنجشنبه ساعت ۶:۲۸

برنامه هایی که تا الان تونستم اجرا کنم

	int i, j;
	int g;
	j = 20;
	i = 10;
	g = "test";
	printf("%s\n", g);
	printf("test1\n");

	while( j--  ) {
		printf("j is %d, i is : %d\n", j, i);
	}
    ```

int i;
i = 10;

while( i-- ) {
	printf("i is : %d\n", i);
	if( i == 5 ) {
		printf("i is %d\n", i);
	}
}
هم زمان که برنامه رو اجرا میکنم اون رو diassmble  هم میکنم.
در ادامه میخوام 4php  رو بازنویسی کنم و اسم اون رو هم تغییر خواهم داد.

الان در جا کد رو کامپال میکنم ولی در ادامه تصمیم دارم که کد رو تبدیل به bytecode کنم و برای bytecode ها یک vm کوچیک بنویسم که قابل اجرا بر روی پلتفرم های مختلف باشه.



### اصلاح

به جای Bytecode دارم از یک روش ابتکاری از خودم استفاده میکنم که اگر به مشکل نخوره روش خیلی جالبی از آب در میاد

Fabrice Bellard Otcc Project as Jit Compiler

۱۴۰۰ شهریور ۲۰, شنبه ساعت ۱۶:۰۴

یکی از پروژه هایی جذابی که در حال انجام اون هستم نوشتم یک jit compiler هست. بهترین و ساده ترین پروژه هایی که در این زمینه موجود هستند یکی c4x86 هست و دیگری پروژه otcc مربوط به Fabrice Bellard

اضافه کردن jit compile به این پروژه خیلی ساده بود که اون رو در گیت هاب شیر کردم. در حال نوشتن یک Diassembler برای Diassemble کردن هستم که به زودی بعد از تکمیل پروژه اون رو هم در گیت هاب شیر میکنم. پروژه بعدی که مد نظر دارم نوشتن یک assembler ساده و تبدیل assembly x86 به machine code x86 هست.

هنوز بیخیال نوشتن jit compiler نشدم و امیدوارم پروژه ی خوبی از آب در بیاد.

https://github.com/pejman-hkh/otcc-as-jit-compiler

پروژه اسنپ

۱۳۹۹ اسفند ۲۷, چهارشنبه ساعت ۱۸:۲۶

چرا پروژه هایی شبیه به اسنپ که در ایران تنها توسط ارگان های دولتی اجرا میشوند باید از رانندگان ۱۵ درصد بگیرند ؟ میدانید ۱۵ درصد چه مبلغ بزرگی است و چه ظلم بزرگی در حق رانندگان میشود ؟ دولت و حکومت باید اسنپ و پروژه های مشابه را مجبور کند که تنها یک درصد از رانندگان بگیرند و حتی با گرفتن ۵ درصد از راننده، راننده را بیمه کند.

اگر دولت و حکومت قادر به انجام این کار نیست باید بستر برای شرکت های خصوصی مهیا شود تا با رقابتی شدن این پروژه های وسیع خود به خود قیمت ها کاهش پیدا کند و به جای خوب بودن شرایط برای دارندگان اسنپ و امثالهم شرایط برای مردم راحت شود.

صاحبان اسنپ به جای داشتن ۱۰ بنز و بی ام و میتوانند با یک بنز و بی ام و هم شرایط خوبی داشته باشند.

متاسفانه در ایران شرکتهای مشابه سایپا و ایران خودرو با همان روال و همان ساز و کار رو به افزایش هستند. الگویی هایی که باعث پسرفت کشور شده اند و خیلی وقت است دارند به ایران لطمه میزنند.

زمانی که مصاحبه با یک وزیر رو دیدم که میگفت شما از من توقع دارید که پراید سوار شوم میخواستم سرم را به دیوار بکوبم. آنقدر تمام وجود من درد گرفت که خدا میداند. نمیدانم چرا با امثال این آدمها برخورد نمیشود ؟

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

باید پذیرفتن شکست این هدف در راس تصمیمات دولتی و حکومتی باشد و چیزی که ۴۰ سال نتوانسته نه تنها در عرصه بین الملل بلکه در خود ایران پیشرفتی کند، کنار گذاشته شود.

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

من منکر آن نمیشوم که آمریکا، انگلیس و اسرائیل و امثالهم همگی کشورهایی خودخواه هستند که برای خودشان حاضرند همه را له کنند. اما این را هم در نظر بگیرید که یک جوان ایرانی میتواند علاوه بر گفتن مرگ بر این کشورها میتواند مرگ بر ایران هم بگوید. چون حکومت و دولت ایران هم میتواند با خود خواه بودن به نفع مردمش همانند آن کشورها رفتار کند و حداقل مردم خود را از خود راضی نگه دارد.

شرکت های زیادی را میبینم که به همان منوال ایران خودرو و سایپا عمل میکنند و پز میدهند که تو اگر میتوانی بیاد و خودت حتی یک پراید بساز بعد شروع کن به هلدرم قلدرم کردن.

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

چگونه موهای جف بزوس روییدند

۱۳۹۹ دی ۲۱, یکشنبه ساعت ۱۶:۴۵

جف بزوس تصمیمش را گرفته بود، او برای اینکه موهایش برویند یک تصمیم خیلی بزرگ گرفت. برای هر مویی از سرش که بروید یک جایزه بزرگ ۲۰۰ هزار دلاری تعیین کرد. پیش خودش میگفت غیر ممکن است هر مویی با ۲۰۰ هزار دلار وسوسه نشود و نروید. آخر جف بزوس پولدارترین مرد دنیا بود و چه جایی بهتر از اینجا که میتوانست پول هایش را خرج کند. این جایزه بزرگ را تعیین کرد و به تمام موهایش اعلام کرد. یک جلسه فوری بین موهایش برگزار شد. موهای جف بزوس هم وسوسه شده بودند. اما خیالشان از اینکه آیا جف راستش را میگوید یا نه راحت نبود. پس از یک اجتماع بزرگ بین موهایش قرار شد که چند مو فقط برویند و ببینند آیا جف بزوز راستش را میگوید یا نه. به ۳ تار از موهای کنار گوش جف بزوس دستور داده شد که برویند. آن سه تار هم شروع به رویش کردند. جف هر روز موهای سرش را چک میکرد که ببیند آیا این پول آنها را وسوسه کرده است یا نه. اما هر بار نا امید از جلوی آینه بر میگشت. مطمئن شده بود که با پول نمیتواند موهایش را بخرد. که آنها برویند. اما جف هیچ گاه به موهای کنار سرش دقت نمیکرد. دریغ از اینکه آن سه تار مو روییده بودند و او میبایست ۶۰۰ هزار دلار به آن سه مو میپرداخت. چند ماهی گذشت. یک شب یکی از موها به خواب جف آمد و واقعیت را به او گفت. به اون گفت که برود و کنار گوشش را چک کند. آن تار مو به جف گفت که قضیه از چه قرار است و اجتماع بزرگی بین موهایش برگزار شده و آنها این تصمیم را گرفته اند. جف زمانی که از خواب بیدار شد فورا آن سه موی کنار گوشش را دید و یک چک ۶۰۰ هزار دلاری برای آن سه کشید. آن سه مو قضیه را اطلاع دادند و باز هم اجتماع بزرگی بین موهای جف برگزار شد. به تمامی موهای کنار جف دستور داده شد که در بیایند. جف هم متوجه این قضیه شده بود و برای هر مویی ۲۰۰ هزار دلار را پرداخت میکرد. اما جف موهای کنار سرش را نمیخواست. او موهای بالای سرش را میخواست و تعجب کرده بود که چرا موهای بالای سرش رشد نمیکنند. در اجتماعی که بین موها برگزار شده بود این قضیه مطرح شده بود که اگر موهای کنار با ۲۰۰ هزار دلار در بیایند موهای بالایی باید با مبلغ دو برابر آن رشد کنند. اما جف این را نمیدانست. اینبار هم آن تار مو به خواب جف آمد و قضیه را به او گفت. جف اینبار اعلام کرد که به موهای بالای سرش اگر رشد کنند به ازای هر تار ۵۰۰ هزار دلار پرداخت میکند. موهای بالای سرش پس از شنیدن این قضیه خیلی خوشحال شدند. یک اجتماع بزرگ دیگر برگزار شد. اینبار رئیس موها همه ی موها را قانع کرده بود که نرویند. آخر او نباید به اندازه ی بقیه ی موها پول میگرفت. رئیس و معاونانش اینبار مانع روییدن موها شدند. آنها بقیه را هم قانع کرده بودند که اگر صبر کنیم میشود پول بیشتری از جف گرفت. دریغ از اینکه آنها فقط به فکر خودشان بودند. جف با تعیین این جایزه باز هم شوکه شده بود که چرا موهایش نمیرویند. باز هم آن مو به خوابش آمد و قضیه را برایش تعریف کرد. جف متوجه اشتباه خودش شده بود. او لازم نبود به همه ی موها پول بدهد. تنها بایدبه رئیس موها یک پول درست و حسابی میداد تا او بقیه ی موها را قانع کند که برویند. اما این قضیه را باید جوری مطرح میکرد که بقیه موها متوجه این قضیه نشوند. وقتی دوباره آن تک مو به خواب جف آمد جف به او گفت که به رئیس موها بگوید که به اون یک میلیارد دلار پول میدهد اگر بقیه ی موها را قانع کند که برویند. رئیس موها وقتی قضیه را متوجه شد تصمیش را گرفت. اینباربه میان تمام موها رفت و به آن ها گفت که ما باید دل جف را بدست بیاوریم. برای آنکه خودمان را ثابت کنیم باید بروییم. بعد از روییدن جف به ما ایمان می آورد و ما میتوانیم پول بیشتری از جف بگیریم. تمام موها حرف رئیسشان را باور کردند. آنها شروع به روییدن کردند. خیالشان راحت بود که رئیسشان میتواند پول زیادی برای آنها بگیرد.آنها نمیدانستند که رئیسشان یک میلیارد دلار گرفته است. موها بعد از روییدن انرژی لازم را نداشتند. آنها نیاز به پول داشتند. اما به امید حرف رئیسشان خودشان را محکم نگه داشته بودند.

ادامه دارد ...

Brain Fuck

۱۳۹۹ آذر ۱۸, سه‌شنبه ساعت ۸:۱۸

یک کد ساده php برای تبدیل BrainFuck به C نوشتم.

<?php
$h = '++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.';
$h = str_replace(['+', '-', '[', ']', '>', '<', '.'], ['++*ptr;'."\n",  '--*ptr;'."\n", "while (*ptr) {\n", "}\n", '++ptr;'."\n", '--ptr;'."\n", 'putchar(*ptr);'."\n"], $h );

$a = '#include <stdio.h>
int main() {
	char arr[30000] = {0};
	char *ptr = &arr;
	
	'.$h.'
}
';

file_put_contents('test.c', $a);

اگر خیلی ساده بخوام توضیح بدم روی یک بلاک پوینتر میشه راحت حلقه تعریف کرد و مقدار اون بلاک رو کم و زیاد کرد. بعد مقدار اون بلاک ها رو خیلی راحت میشه چاپ کرد.

خروجی برنامه بالا رو با Gcc کامپایل کنید به شما یک Hello World میده. البته Hello World رو خیلی راحتتر از روش بالا هم میشه باهاش نوشت.

https://github.com/pejman-hkh/brainfuck-to-c

یک نکته باید در آخر بگم این هست که یاد گرفتن BrainFuck سخت نیست. بلکه نوشتن برنامه با اون سخته و اونه که مغز رو به اصطلاح سرویس میکنه ...

اسارت

۱۳۹۹ مهر ۲۱, دوشنبه ساعت ۱۴:۴۲

اسیر ها دوست دارن هر چه زودتر زندگیشون بگذره تا آزاد بشن

دوست دارن به آزادی برسن حتی اگر زندگیشون به پایان برسه

اگر زندگیت داره خیلی زود میگذره بدون اسیر هستی

زندگی در اسارت هیچ لذتی نداره و خیلی زود میگذره

همیشه براش غریبه بود

۱۳۹۹ شهریور ۳۱, دوشنبه ساعت ۱۳:۱۴

هر چه قدر تلاششو کرد که باهاش غریبه نباشه اما اون باهاش غریبه بود.

همیشه اون رو شما خطاب میکرد. هیچ وقت نتونست قلبشو به دست بیاره. حتی یبار ایستاد و گفت به جای اون منو بزن. ولی دست به اون نزن. اما باز هم نتونست قلبشو به دست بیاره. همیشه میخواست مال اون باشه. کلی براش جنگید و هر حرفی رو بابتش شنید. اما اون هنوزم دوستش نداشت. فقط این اواخر دلش براش میسوخت. همین و بس.