-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
تا جایی که فهمیدم این دستور use اگه فقط به معنای جایگزینی محتوای فایل باشه، کار قسمت preprocessor هست اصولا... از اون جایی که دستوری مثل if هم در قسمت preprocessor داریم فکر می کنم جرف شما درست باشه، چون این ها هم مثل بقیه ی قسمت های کد نیاز به تحلیل دارند...
اما اگه مثل زبان c مکان زیربرنامه ها نسبت به هم مهمه، فکر می کنم بهتره قابلیت نوشتن use در جاهای مختلف رو بذاریم، چون مثلا ممکنه شما در فایل کتابخانه تون یه زیربرنامه ی B داشته باشید که از زیربرنامه ی A استفاده می کنه و می خواید زیربرنامه ی A رو بعدا در بیرون از فایل کتابخانه تون قبل از دستور use تعریف کنید، یه کارهای دیگه ای مثل استفاده از use لا به لای import ها که در این حالت در فایل کتابخانه مثلا تعدای import پرکاربرد نوشته شده یا ...
به نظرم یه مقدار باید آزادی عمل بدیم.
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
من هستم. ولی من نمی دونم چجوری می خوای این کار رو بکنی.به نظر من با زبان C# این کار رو بکنیم بهتره. من که نمی دونم چجوری بسازیم.خیلی سخته. باید اول برای هر کدی که می خوای یه متغیر تعریف کنی و کد خودتو در اون متغیر قرار بدید. ولی همین که به برنامه بفهمونی که این کد چکار می کنه خودش خیلی سخته.:متفکر:.ولی من هستم.با هم درستش می کنیم.
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
نقل قول:
نوشته شده توسط
IamOverlord
تا جایی که فهمیدم این دستور use اگه فقط به معنای جایگزینی محتوای فایل باشه، کار قسمت preprocessor هست اصولا... از اون جایی که دستوری مثل if هم در قسمت preprocessor داریم فکر می کنم جرف شما درست باشه، چون این ها هم مثل بقیه ی قسمت های کد نیاز به تحلیل دارند...
اما اگه مثل زبان c مکان زیربرنامه ها نسبت به هم مهمه، فکر می کنم بهتره قابلیت نوشتن use در جاهای مختلف رو بذاریم، چون مثلا ممکنه شما در فایل کتابخانه تون یه زیربرنامه ی B داشته باشید که از زیربرنامه ی A استفاده می کنه و می خواید زیربرنامه ی A رو بعدا در بیرون از فایل کتابخانه تون قبل از دستور use تعریف کنید، یه کارهای دیگه ای مثل استفاده از use لا به لای import ها که در این حالت در فایل کتابخانه مثلا تعدای import پرکاربرد نوشته شده یا ...
به نظرم یه مقدار باید آزادی عمل بدیم.
قبل از هر چیز یه توضیح در مورد مسآله اول که عنوان کردی بدم. یک فایل کتابخانه میتونه شامل هزاران خط کد باشه ( و شاید هزاران تابع ) که برنامه نویس نیازی به همه اونها نداره. پس این که بخوایم به ازای هر معرفی کتابخانه , کل کتابخانه رو در کدها جایگزین کنیم یک کار بیهوده هست و باعث پایین آمدن شدید سرعت کامپایل میشه. کاری که باید انجام بشه اینه که برای هر فراخوانی تابع اول باید در توابع تعریف شده در خود برنامه به دنبال اون تابع بگردیم.اگر پیدا نشد در کتابخوانه های معرفی شده به دنبال آن تابع میگردیم. واگر باز هم پیدا نشد باید خطای تابع تعریف نشده رو صادر کنیم.که این اینکارها همگی مربوط به فازهای تحلیلگر معنایی و تولید کد میانی هست. پس بهتره فعلآ بهش فکر نکنیم.
اما اینکه use ها فقط در ابتدای برنامه به کار برده شوند یا در هر جای برنامه ,مربوط میشه به تحلیلگر نحوی و باید همین جا مشخص بشه. راستش با مثالی که زدی من هنوز نتونستم لزوم این که کتابخانه ها در هر جا تعریف بشند رو درک کنم. ببین کتابخونه ها یک فایل مستقل هستند. یعنی هیچ وابستگی به برنامه ای که قراره نوشته بشه ندارند. اگر هم قراره از یک تابع خارجی استفاده کنند , اون تابع در یک کتابخونه دیگه قرار میگیره و در کتابخونه مورد نظر معرفی میشه. دقیقآ مثل کاری که در مورد Include ها انجام میشه. اگر باز هم دلیل قانع کننده ای برای نظرت داشتی در میان بزار.تا در این مورد تصمیم گیری کنیم.
ضمنآ یک نکته هم خدمت دوستانی که فکر میکنند کار ایجاد ساختار لغوی و نحوی یک زبان جدید آسان هست و نیاز به صرف زمان چندانی نداره عرض میکنم. ببینید شما یک کتاب آموزش زبان برنامه نویسی رو در نظر بگیرید. چنین کتابی میتونه حجمی برابر 100 تا 1000 صفحه داشته که قطعآ حداقل 50 درصد اون صرف توضیح ساختار لغوی و نحوی زبان میشه . این در حالیه که تولید ساختار لغوی و نحوی یک زبان جدید به عوامل دیگه ای مثل خلاقیت و در نظر گرفتن موانع پیاده سازی نیازمند هست. شاید جالب باشه بدونید که فقط ابداع ساختار یک زبان جدید که جالب و قابل پیاده سازی باشه هم در علوم کامپیوتر میتونه ارزشمند باشه. و طراحی کامپایلر میتونه ارزش زبان رو به شکل ملموس تری نشون بده.
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
به نظرم فعلآ بهتره به قدرت و انعطاف زبان فکر نکنیم. هر تغییری رو میشه بعدن بهش اضافه کرد. الان باید روی پیاده سازی و مشکلاتی که ممکنه پیش بیاد فکر کنیم. وگرنه اگه بخوایم فقط همینطور روی گسترش زبان فرضیمون کار کنیم به جایی نخواهیم رسید. به نظرم حتی اگه ساده کردن و حذف بعضی قابلیتها میتونه به پیاده سازی کمک کنه, باید اینکار رو انجام بدیم.
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
با توجه به مشغله زیاد خودم باز هم از دوستان دیگه که در زمینه کامپایلر , پارسرها و مباحث مرتبط ( به هر زبانی ) کار کردن دعوت میکنم در پروژه مشارکت کنند.
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
سلام...
یه مدتیه سرم شلوغه، ولی همچنان سعیم رو می کنم...
خوب، اون گرامری رو که نوشتین این طوری تغییر دادم:
<program>::=<sec_uses_imports><sec_defines>
<sec_defines>::={<define>}
<define>::=<def_global_variables>|<def_procedure_m ain>|<def_procedure>|<def_function>|<def_structure >|<def_class>
<sec_uses_imports>::={<use_import>}
<use_import>::=<use>|<import>
<use>::=<use_key><file_address>|<use_key><quoted_f ile_address>
<use_key>::=
<import>::=
البته چون من زیاد وارد نیستم تو زمینه ی نوشتن گرامر، لطفا دوستان همکاری کنند، درستش کنیم. :چشمک:
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
نقل قول:
نوشته شده توسط
IamOverlord
سلام...
یه مدتیه سرم شلوغه، ولی همچنان سعیم رو می کنم...
خوب، اون گرامری رو که نوشتین این طوری تغییر دادم:
<program>::=<sec_uses_imports><sec_defines>
<sec_defines>::={<define>}
<define>::=<def_global_variables>|<def_procedure_m ain>|<def_procedure>|<def_function>|<def_structure >|<def_class>
<sec_uses_imports>::={<use_import>}
<use_import>::=<use>|<import>
<use>::=<use_key><file_address>|<use_key><quoted_f ile_address>
<use_key>::=
<import>::=
البته چون من زیاد وارد نیستم تو زمینه ی نوشتن گرامر، لطفا دوستان همکاری کنند، درستش کنیم. :چشمک:
ببین با توجه به این صفحه:
قسمت define فقط متغیرهای عمومی رو در بر میگیره و توابع و روالها رو شامل نمیشه !
این گرامر داره یک زبان کاملآ متفاوت رو تعریف میکنه!
یک پیشنهادی که بهت میکنم اینه که فعلآ به هیچ وجه قابلیت جدیدی رو به زبان اضافه نکنی.( مثل def_class) . به نظر من پیاده سازی یک زبان خیلی خیلی ساده هم میتونه مشکلات خودش رو داشته باشه. بیخود نیست که تعداد کامپایلرها تقریبآ کم هست و هنوز در بعضی از موارد کمبودهایی وجود داره. پس بهتره فعلآ روی همین قابلیتها کار کنیم.
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
لازم دیدم کمی در مورد تحلیلگر نحوی و عمکردش توضیح بدم. ببینید ما تا اینجای کار تحلیلگر لغوی رو نوشتیم. کار تحلیلگر لغوی این بود که نوع هر کلمه به کار رفته در کد برنامه رو تشخیص بده و به ازای هر لغت, نوعش رو که به اون توکن گفته میشه رو برای فاز بعدی بفرسته. در پایان این فاز ما علاوه بر کد اصلی برنامه , یک سری توکن رو داریم که نشون میده برنامه نویس انواع مختلف لغات ( عدد صحیح , رشته , کلمه کلیدی , عملگرها و.... ) رو با چه ترتیبی در کنار هم قرار داده که بهش ساختار نحوی برنامه گفته میشه . از طرفی ما به عنوان طراح کامپایلر باید بررسی کنم که این ساختار نحوی از ساختار نحوی زبان ما تبعیت میکنه یا خیر. اینجاست که بحث گرامرها( در اینجا EBNF) مطرح میشه. ما با استفاده از گرامرها و قابلیتهای اون در واقع ساختار نحوی زبان رو توصیف میکنیم. تا با پیاده سازی اون بتونیم این ساختار رو با ساختار کد نوشته شده برنامه نویس مقایسه کنیم و در صورت عدم تطبیق به کاربر هشدار لازم رو بدیم.
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
همونطور که در اینجا توضیح دادم :
https://barnamenevis.org/showthread.p...=1#post1545873
مشکل ما این هست که از کاراکتر خط جدید به عنوان هماهنگ کننده استفاده کردیم. و این یکم پیاده سازی گرامر رو مشکل کرده. فکر میکنم اگه مثل زبان C ( که از ';' استفاده کرد) و خیلی زبانهای دیگه , ما هم از یک کاراکتر خاص استفاده کنیم , احتمالآ باید این مشکل رفع بشه. البته با همین کاراکتر خط جدید هم غیر ممکن نیست ولی یکمی پیچیده میشه.:متفکر:
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
نقل قول:
ولی مشکل از خط دوم شروع میشه. ببینید ما متآسفانه از کاراکتر خط جدید به عنوان کاراکتر هماهنگ کننده ( جدا کننده دستورات ) استفاده کردیم. یعنی بین هر دستور مستقل باید یک یا چند کاراکتر خط جدید وجود داشته باشه (علامت "+" بعد از Newline به همین معنی هست ) . مشکل اینجاست که ممکنه مثلآ برنامه نویس بخواد یه برنامه که فقط از یک دستور فراخوانی کتابخانه (USE) تشکیل شده رو بنویسه و بعد از این دستور هم قاعدتآ نیازی به درج خط جدید نیست. این درحالیه که با توجه به این گرامر , تحلیلگر نحویمون از این برنامه ایراد میگیره.
یعنی حداقل 1 کاراکتر خط جدید باید در هر کدی وجود داشته باشه؟ در این صورت به نظر من باید قبل از این که کد رو تحویل بدیم، خودمون یه سری ویرایش های جزئی روش بکنیم؛ مثلا به آخر هر کدی یه کاراکتر خط جدید اضافه کنیم...
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
گرامر BASIC رو تو همون لینکی که گذاشتم نگاه کردم:
<Lines> ::= Integer <Statements> NewLine <Lines>
| Integer <Statements> NewLine
Integer رو که بی خیال، اما بقیش همون مشکلی که ما داریم رو داره، احتمالا اون ها هم یه ویرایش هایی قبل از تحلیل ها انجام می دن... البته برای حل مشکل ببینید این جواب می ده؟:
<Lines> ::= <Statements> NewLine <Lines>
| <LastLineOfCode>
<LastLineOfCode>::= <Statements> NewLine
| <Statements>
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
نقل قول:
نوشته شده توسط
IamOverlord
یعنی حداقل 1 کاراکتر خط جدید باید در هر کدی وجود داشته باشه؟ در این صورت به نظر من باید قبل از این که کد رو تحویل بدیم، خودمون یه سری ویرایش های جزئی روش بکنیم؛ مثلا به آخر هر کدی یه کاراکتر خط جدید اضافه کنیم...
نه منظورم این نبود که فقط یک کاراکتر خط جدید داشته باشیم. منظورم اینه که کلآ کاراکتر هماهنگ کننده رو تغییر بدیم و یک کاراکتر خاص انتخاب کنیم. در ضمن اینو هم در نظر بگیر که اگه قرار باشه ما به جای برنامه نویس برای هر کد یک کاراکتر خط جدید اضافه کنیم , ممکنه کاربر به اشتباه دو تا دستور رو بدون خط جدید وارد کنه که در اون صورت تشخیصش برای ما خیلی مشکل میشه و پیاده سازی چنین چیزی میتونه خیلی کار رو پیچیده تر کنه.
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
اون گرامر بالا در مورد چند تا New Line بین 2 خط کد مشکل داره... فکر می کنم این بهتر باشه:
<NL> ::= NewLine <NL>
| NewLine
<Lines> ::= <Statements> <NL> <Lines>
| <LastLineOfCode>
<LastLineOfCode> ::= <Statements> <NL>
| <Statements>
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
من باز هم پیشنهاد میکنم از یک کاراکتر هماهنگ کننده دیگه استفاده کنیم . یا اصلآ مثل HTML دستورات رو داخل تگها قرار بدیم. در هر دو صورت به راحتی میتونیم مشکل خط جدید رو حل کنیم و فقط کافیه در گرامر بعد از هر دستور به تعداد صفر تا بینهایت خط جدید رو در نظر بگیریم.
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
ببینید با اون تعریف NL که در آخرین کد گذاشتم اون مشکل تعداد کاراکتر های خط جدید بین دو خط حله... من زیاد با ;... راحت نیستم! پیشنهاد می کنم همین مشکل رو با توجه به گرامر هایی که بقیه نوشتن حل کنیم...
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
نقل قول:
نوشته شده توسط
IamOverlord
ببینید با اون تعریف NL که در آخرین کد گذاشتم اون مشکل تعداد کاراکتر های خط جدید بین دو خط حله... من زیاد با ;... راحت نیستم! پیشنهاد می کنم همین مشکل رو با توجه به گرامر هایی که بقیه نوشتن حل کنیم...
OK !
با اینکه فکر میکنم استفاده از کاراکتر هماهنگ کننده , ساخت گرامر و پیاده سازی تحلیلگر رو به شدت سادهتر میکنه ولی با راهکارت موافقم.
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
یک فکر خوب به ذهنم زد:
<program>::=<uses><imports><define><main><function s>
<Uses>::={<Use>}*
<Use>::= <USE_KEY><STRING><Coordinator>
<Coordinator>::={NEWLINE}+|{NEWLINE}* <EOF_key>
مشکل رو با لغت پایان فایل (EOF) حل کردم. Coordinator به عنوان هماهنگ کننده تعریف شده که میتونه " یک یا بیشتر خط جدید باشه" یا میتونه "صفر یا چند خط جدید و یک کاراکتر پایان فایل" باشه. مورد اول برای دستورات میانی هست و مورد دوم برای دستور پایانی که میتونه خط جدید داشته باشه یا نداشته باشه. با این حساب فکر میکنم این مشکل حل شده باشه. فقط باید در تحلیلگر لغوی لغت EOF رو هم به کلمات کلیدی اضافه کنیم.
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
!===================
! CHARACTER SETS
!===================
{String Char} = {All Valid} - ["]
{ID Tail} = {Alphanumeric} + [_]
!=============
! LITERALS
!=============
StringLiteral = '"' ( {String Char} | '""' )* '"'
ID = {Letter} {ID Tail}*
!==========
! RULES
!==========
<program> ::= <NLOpt> <GlobalStmtList>
<GlobalStmtList> ::= <GlobalStmt> <GlobalStmtList>
|
<GlobalStmt> ::= <UseStmt>
| <ImportStmt>
| <DefineBlock>
| <ProcdureDecl>
| <FunctionDecl>
<UseStmt> ::= 'Use' StringLiteral <NL>
<NL> ::= {NewLine}+|{NewLine}* <EOF_key>
<NLOpt> ::= <NL>
|
<ProcedureDecl> ::= 'Procedure' ID <MethodArgList> <NL> <MethodStmtList> 'End' 'Procedure' <NL>
<FunctionDecl> ::= 'Function' ID <MethodArgList> <Type> <NL> <MethodStmtList> 'End' 'Function' <NL>
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
دوستان با توجه به مشغله خیلی خیلی زیادی که دارم فکر میکنم دیگه نتونم برای این پروژه وقت بزارم. دوستانی که مایل هستند میتونند پروژه رو ادامه بدند.
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
راستش منم می خوام ide (ساخت بازی و برنامه برای موبایل)درست کنم که با زبان بیسیک فارسی باشه و کدها رو تبدیل به جاوا کنه بعد با ماشین جاوا برنامه ساخته شده رو اجرا کنه .
دوستان کمکم کنید .
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
سلام دوست عزیز.
ساخت زبان برنامه نویسی فارسی یه سری مشکلات یا بهتره بگم نکات ریز برای خودم داشت که بی خیالش شدم
به نظرم غربی ها خیلی خوش شانس هستن از نظر ویژگی های زبانشون!
باید به نام گذاری متغیر ها فکر کنید
به بیوند با کتابخانه های خارجی هم همین طور
و مسایل ریز دیگه
مثلا این که باید کد برنامه خوانا باشه
دستورات و عملگر های ریاضی چه جوری باشه
...
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
دوست عزیز کاظم فلاحی , با سلام
اینکار کار خیلی سختی نیست البته اینجوری:شما یک برنامه ی جاوا که تصاویر پازل یا مثلا اسلاید شو باشه رو تولید کنین
بعد نرم افزاری که مینویسید باید فایل جاوا رو باز کنه و تصاویری که کاربر انتخاب میکنه رو جایگزین کنه
اینجوری براحتی کارتون درست میشه
نرم افزار Fbook هم همچین کاری میکنه
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
نقل قول:
نوشته شده توسط
amin32
اکه سرعت براتون مهم نباشه فاز جلو بندی رو میتونید با هر زبانی پیاده سازی کنید ولی احتمالا تو فاز عقب بندی (به خاطر تولید کد ) نمیتونید روی هر زبانی حساب باز کنید.
اگه شما با فازها و زیر فازهای کامپایلر و کاربردشون آشنا نیستید میتونم براتون توضیح بدم. من اطلاعاتم بیشتر در فاز جلوبندی هست. یعنی تا جایی که بتونید یه
مفسر بنویسید.وقتی حرف از کاپایلر میشه معمولا شما باید بتونید برای سیستم عامل مورد نظر یه برنامه اجرایی تولید کنید.که من اطلاعات زیادی در این مورد ندارم. ولی در مفسر شما
فقط فاز جلوبندی و زیر شاخه های اونو دارید.و در آخر کد میانی تولید شده رو مستقیم اجرا میکنید.
در کل فکر میکنم c یا ++c برای ایجاد کامپایلر مناسب باشه. ولی مفسر رو میتونید از هر زبانی استفاده کنید.البته باید به سرعت اجرا دقت کنید.
سلام.من این مطلب شمارو توآرشيو اينجا پيدا کردم و در حال حاضر برای درس کامپايلر بايد ی مفسر ساده بسازم
درواقع سوال استاد اين که ی فايل txt. بديم ب مفسر بعد ی فايل با ی زبان برنامه نويسی تحويل بگيريم که ترجيحا از خانواده C باشه
می خواستم بدونم شما ميتونی کمک کنی؟
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
من هستم،من حاضرم که باهم زبان برنامه نویسی جدید بسازیم ولی باید به من میل بدی!
smhak11@gmail.com
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
بچه ها, چه کاریه,
اینجا
رو ببینید, یه سری به آموزشاش بزنید, خیلی کارو راحت میکنه
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
سلام دوستان هم وطن اگه پول درست حسابی تو کار هست من هستم چون هم علمش و هم حوصله اش را دارم من به عنوان یه نیمچه استاد ایرانی تو کشور خودم کسی نیست که بهمون بها بده ولی از سایر جاها بهم خیلی پیام میدن و اومدهاند به شهرمون و منو دیده اند و خواسته اند که با اونها کار کنم البته پس از امتحان اینو خواسته اند نه الکی من هم چون به پول نیاز دارم فکر میکنن که با اونها میرم ولی تا حالا استقامت کردهام پس اگه پول بدین میتونم باهاتون کار بکنم ببخشین ولی
آنچه شیران را کند روبه مزاج
احتیاج است احتیاج
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
my mail is
hacando60@gmail.com
please if u willl please call
thanks a lotttttttttttttttttttttttttttt
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
سلام.
من می خوام برای زبان -c کامپایلر طراحی کنم.فاز scanner ,parser , semantic analyser نوشتم و درست کار میکنه این فازو نوشتم وقتی فایلهای خروجی رو کامپایل میکنم تا قبل از تابع yyparse() کار میکنه ولی بقیه اش تو console چاپ نمیشه یعنی خروجی نمیده لطفا کمک کنید.
-
نقل قول: ساخت Compiler و یک زبان برنامه نویسی جدید
سلام.
من داشتم توی گوگل "برنامه نویسی open source" رو جستجو می کردم، که به این انجمن رسیدم و بعدا شانسی این پست رو پیدا کردم.
من پست آقای lamOverlord رو در اینجا خوندم که در مورد نوشتن یه نسخته جدید از VB نوشته بودند. و بیشتر بخش های این پست رو هم خوندم.
آقا منم هستم. اصلا خودم دارم سعی می کنم به زبان برنامه نویسی جدید بسازم به اسم Rest. سینتکسی (syntax) که برای Rest در نظر گرفتم می شه گفت تقریبا چیزی شبیه به VB هست. ولی من اصلا VB رو کار نکرده بودم و سینکس رو تاحالا ندیده بودم. و چیزی که من می خواستم بسازم یه ورژن دیگه از python بود که به C یا Assembly تبدیل بشه. من مشکلی که داشتم این بود که نوشتن برنامه توی C سخت بود چون که هی باید سمی کلن می زاشتم و حافظه برنامه رو به صورت دستی free و allocate می کردم. و نوشتن برنامه توی python راحت تره، ولی زمان اجرای برنامه بیشتر می شه. و برنامه بهینه نیست اصلا. کاری که من می خواستم بکنم این بود که یه زبان برنامه نویسی بسازم که سینتکسش در حد پایتون ساده باشه و به C تبدیل بشه و تمام بهینه سازی های لازم رو انجام بده.
البته سینکسی که در نظر گرفتم از python راحت تره و دیگه مثل پایتون لازم نیست که همه جملات داخل یه بلاک با یه tab جلو بره، به جاش آخر هر بلاک یه end اضافه می کنیم. مثلا اگه تعریف کردن function توی python این شکلی باشه:
کد HTML:
def sum(a, b):
return a + b
چیزی که توی Rest در نظر گرفته بودم اینه:
کد HTML:
def sum(a, b)
return a + b
end
چندین تا زبان برنامه نویسی دیگه هم با سینتکس های ساده تر داره ساخته می شه، وجود دارند که اینا هستن: vlang, nim و crystal
nim تا یه حد خیلی زیادی جلو رفته و یه کتاب هم برای آموزشش نوشته شده، و به زبان C و javascript هم تبدیل می شه. ولی بهینه نمی شه. یا می شه گفت یه سری قابلیت براش در نظر گرفتن برای بهینه سازی، ولی بهینه سازی حداکثر رو انجام نمی ده. و می تونم بگم که می شه زبان برنامه نویسی نوشت که خیلی بهینه تر باشه.
crystal هم سینتکس خیلی ساده ای داره و مثل Ruby می مونه و به native byte code تبدیل می شه. سینتکسش رو هم یه نگاهی بکنید، بدک نیست.
vlang رو زیاد نخوندم در موردش ولی خیلی بهینه شده کامپایل می شه. و سینکس خیلی راحتی نداره.
ولی طرحی که من برای نوشتن Rest در نظر گرفتم، یه جوری در برگیرنده بیشتر ویژگی های زبان های برنامه نویسی بالا هست. یا شاید بشه گفت هر ویزگی که به نظرم خوب اومده رو توی نوشتن Rest در نظر گرفتم. البته در بعضی از قسمت هاش هنوز شک دارم، یا نوشتن بعضی از ایده ها خیلی وقت گیر خواهد بود. اما هنوز اول کارم، توی نوشتن مرحله Tokenizer ام. نمی دونم شما بهش می گید مترجم معنوی یا لغوی، ولی اینجا می تونید پیدا کنید که منظورم چی هست.
نمی دونم که می تونیم باهم هم کاری داشته باشیم یا نه، یا اصلا اسم زبانی که می خوایم بسازیم رو، چی بزاریم. ولی من آماده همکاری هستم اگه ایده و نظری دارید بگید که با هم گفت و گو کنیم. و در ضمن اسم Rest رو برای این انتخاب کردم که انگاری که استراحت برنامه نویس ها باشه. بشه توی یه سینتکس ساده برنامه نویسی کرد و به بهترین شکل ممکن بهینه بشه. :متفکر: البته هنوز ایده است تا به پروژه کامل برسه. :چشمک:
اینجا می تونید سورس Rest رو که دارم می نویسم ببنید. و اینجا هم می تونید طرحی که در نظر گرفتم رو ببنید. اگه چیزی رو متوجه نشدید بگید که توضیح بدم.
و یه پیشنهاد دارم توی پست هاتون رو که می خوندم:
بین FASM و MASM شک داشتید که به کدوم کامپایل بشه، به نظر من به NASM کامپایل بشه بهتره. چون که اولا NASM خیلی معروف تره و افراد بیشتری روش کار کردند و open source هم هست، و هم به خاطر این که هم برای ویندوز و هم برای لینوکس کامپایل می کنه. ولی MASM برای لینوکس کامپایل نمی کنه، open source هم نیست و FASM هم به اندازه NASM پیشرفته نیست. یه اسمبلر دیگه هم وجود داره به اسمه GAS که وقتی C یا Cpp می خود کامپایل بشه به اون تبدیل می شه، ولی اصلا راحت نیست و بیشتر برای C ساخته شده. یه راه حل دیگه هم وجود داره اونم اینه که از library هایی که برای تولید byte code استفاده می شه، بهره ببرید که بستگی به این داره که با کدوم راحت تر باشید.
منتظر نظرتون هستم.