Repository navigation
Expand file tree
/
Copy pathNOW
More file actions
78 lines (42 loc) · 5.13 KB
/
Copy pathNOW
File metadata and controls
78 lines (42 loc) · 5.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
برای طراحی و تثبیت زبان Raz، بهتر است موضوع را به ۱۲ بخش اصلی تقسیم کنیم. این دستهبندی بر اساس مباحث طراحی زبانهای برنامهنویسی در علوم کامپیوتر است؛ نه صرفاً فهرست قابلیتهایی که میخواهیم به زبان اضافه کنیم.
## دستهبندی طراحی زبان Raz
۱. Syntax — نحو و دستور زبان
قواعد نوشتن کد: متغیرها، فراخوانی توابع، پرانتزها، آکولادها، کامنتها، تقدم عملگرها، `include`، تفاوت دستور و عبارت و قواعد تجزیه (Parsing).
۲. Types — سیستم انواع داده
انواع پایه مثل `int`، `float`، `bool` و `string`؛ انواع ترکیبی مثل `struct`، آرایه و لیست؛ توابع بهعنوان مقدار، تبدیل نوع، نوعهای تهیپذیر، استنباط نوع و قوانین سازگاری انواع.
۳. Semantics — معنای زبان
معنی دقیق هر دستور چیست؟ تفاوت مقدار و متغیر چیست؟ چه زمانی عملیاتی معتبرند؟ محدودهٔ اثر عبارتها چیست؟ رفتار برنامه در موارد مرزی باید چگونه باشد؟
۴. Control Flow — جریان اجرای برنامه
`if`، `else`، حلقهها، `break`، `continue`، `return`، بلوکها، ترتیب اجرا و قوانین مسیرهای مختلف اجرای برنامه.
۵. Functions — توابع و فراخوانیها
تعریف تابع، پارامترها، مقدار بازگشتی، توابع بازگشتی، توابع بهعنوان مقدار، closureها، overload، قوانین فراخوانی و دامنهٔ دسترسی نامها.
۶. Memory Model — حافظه و مالکیت
مدیریت حافظه، طول عمر مقادیر، stack و heap، اشارهگرها، referenceها، مالکیت (Ownership)، اشتراکگذاری داده، جمعآوری زباله و ایمنی حافظه.
۷. Safety & Errors — ایمنی و خطاها
تفاوت خطای زمان کامپایل و زمان اجرا، مدیریت خطا و استثنا، رفتار تعریفشده و تعریفنشده، اعتبارسنجی، محدودهٔ `unsafe` و نحوهٔ کار با کدهای خارج از کنترل زبان.
۸. Modules & Libraries — ماژولها و کتابخانهها
`include` و `use`، محدودهٔ ماژول، `public` و `private`، ساختار پروژه، وابستگیها، کتابخانههای استاندارد و نحوهٔ افزودن کتابخانههای خارجی.
۹. Runtime & Execution — زمان اجرا و اجرای برنامه
نحوهٔ اجرای برنامه، مقداردهی اولیهٔ متغیرهای سراسری، ورودی و خروجی، ترتیب مقداردهیها، مدل اجرای توابع و رفتار محیط زمان اجرا.
۱۰. Compilation & Interoperability — کامپایل و تعامل با زبانهای دیگر
مراحل کامپایل، نقش RIR و C++ در پیادهسازی فعلی، تولید کد، ارتباط با C/C++، ABI، لینککردن و امکان پشتیبانی از هدفهای اجرایی دیگر. این بخش دربارهٔ پیادهسازی است و باید از قواعد خود زبان جدا بماند.
۱۱. Standard Library — کتابخانهٔ استاندارد
رشتهها، مجموعهها، فایلها، JSON، شبکه، زمان، سیستمعامل و ابزارهای عمومی. همچنین مشخص میکنیم چه چیزهایی جزو خود زباناند و چه چیزهایی کتابخانه محسوب میشوند.
۱۲. Language Specification — مشخصات رسمی زبان
نسخهبندی زبان، قواعد قطعی و موارد نامشخص، رفتار الزامی کامپایلر، مثالهای معتبر و نامعتبر، سازگاری نسخهها و مجموعهٔ آزمونهای انطباق با مشخصات.
---
# TODO
See: doc/raz
---
# TODO
- نام متغیرها فقط از حروف ASCII، رقم و _ تشکیل میشود؛ شناسههای Unicode و $ پشتیبانی نمیشوند.
- قالبهای عددی مانند 0xFF، نمایش دودویی، جداکنندهٔ _ و توان علمی مانند `1e5 در Lexer فعلی تعریف نشدهاند.
- قواعد دقیق رشتهها، کاراکترها و Escapeها محدودند؛ برای مثال، Escapeهای ناشناخته با حذف بکاسلش پردازش میشوند.
- مجموعهٔ عملگرها محدود است؛ مواردی مانند ++، +=، عملگر سهتایی ?: و عملگرهای بیتی در Grammar فعلی وجود ندارند.
---
# TODO
تکمیل نیست:
حلقهٔ for — Syntax فعلی ندارد
break و continue — Syntax فعلی ندارند
switch و do-while — Syntax فعلی ندارند
---