گزارش هفتگی توسعه Nim من (3/5)

پیش رفتن
کارهای روزمره
حذف هک های nosinks از کامپایلر
تست تولید DLL با ORC.
اسناد sinkinference را که غیرفعال شده است، برطرف می کند.
قلاب wasMoved را اجرا می کند
رفع #19291; قلاب wasMoved را اجرا می کند.
اکنون می توانید ثبت نام کنید wasMoved
قلاب.
type
Game = object
proc `=wasMoved`(x: var Game) {.error.}
انواع هش بر اساس مسیرهای سفارشی
رفع #20139; انواع هش بر اساس مسیرهای سفارشی
اکنون نوع شی با همان نام در همان نام فایل اما در دایرکتوری های مختلف قرار دارد، دیگر با یکدیگر تضاد ندارند. روابط عمومی مسیر نوع را در نظر می گیرد که از درگیری جلوگیری می کند.
ثابت می کند که متغیرهای سطح بالا در داخل حلقه ها در VM بازنشانی نمی شوند
رفع #10938; رفع #13312; رفع #13918; رفع #20985; همیشه متغیرهای سراسری را با مقادیر تهی در VM مقداردهی اولیه می کند.
static:
for i in '1' .. '2':
var s: set[char]
doAssert s == {}
incl(s, i)
متغیر s
در حلقه به درستی مقداردهی اولیه نشده است. سبب شد s
برای حفظ مقدار قدیمی پس از اولین تکرار. راه حل من مقداردهی اولیه است s
هر بار که بخش var اجرا می شود که برای هر تکرار بازنشانی می شود.
پاک کردن نوع متغیرهای نقل قول را برطرف می کند
رفع #21326; رفع #7375; رفع #11986; رفع #9607; دوباره کاری نقل قول انجام; getAst از نوع اطلاعات برای حاشیه نویسی نوع متغیرهای نقل قول استفاده می کند. دیگر هیچ گونه پاک کردنی برای متغیرهای نقل قول وجود ندارد.
import macros
macro foo(body: untyped): untyped =
let a = body.lineInfoObj()
result = quote do:
echo `a`
foo:
let c = 1
VM یک مجری بدون تایپ است که انواع عبارات را پس از اجرا پاک می کند. در این مورد، a
در VM ارزیابی می شود که نوع خود را از دست می دهد LineInfo
پس از ارزیابی بنابراین باید اطلاعات نوع را جمع آوری کرده و نوع آن را حاشیه نویسی کنیم a
هنگام گسترش quote do
. من اطلاعات نوع را در پارامترهای الگوهای ساختگی که توسط استفاده می شود ذخیره می کنم quote do
، که برای بازیابی نوع متغیرهای نقل قول استفاده می شود.
آرایه پاس ضمنی ثبت شده در زمان اجرا را با فراخوانی تابع صریح جایگزین می کند. ساده سازی خط لوله کامپایل
آرایه پاس ضمنی ثبت شده در زمان اجرا را با فراخوانی تابع صریح جایگزین می کند. ساده سازی خط لوله کامپایل
proc processPipeline(graph: ModuleGraph; semNode: PNode; bModule: PPassContext): PNode =
case graph.pipelinePass
of CgenPass:
result = semNode
if bModule != nil:
genTopLevelStmt(BModule(bModule), result)
of JSgenPass:
when not defined(leanCompiler):
result = processJSCodeGen(bModule, semNode)
of GenDependPass:
result = addDotDependency(bModule, semNode)
of SemPass:
result = graph.emptyNode
of Docgen2Pass, Docgen2TexPass:
when not defined(leanCompiler):
result = processNode(bModule, semNode)
of Docgen2JsonPass:
when not defined(leanCompiler):
result = processNodeJson(bModule, semNode)
of EvalPass, InterpreterPass:
result = interpreterCode(bModule, semNode)
of NonePass:
doAssert false, "use setPipeLinePass to set a proper PipelinePass"
را processPipeline
به صراحت مولد کد را فراخوانی می کند، که کد را واضح تر می کند. این گام دوم به سمت حذف اعلامیه پیشرو است.
مجموعه هفتگی
https://forum.nim-lang.org/t/9908 (2/19)
https://forum.nim-lang.org/t/9940 (2/26)
مشارکت در مشارکت ها
من یک فضای ماتریسی برای مشارکت در پروژه های رسمی Nim ایجاد کرده ام. اگر قبلاً یکی از مشارکتکنندگان پروژههای رسمی Nim هستید، به این فضا خوش آمدید تا در مورد مشارکتها بحث کنید. اگر میخواهید برای سرگرمی تلاش کنید، فهرستی برای شما آماده کردهام که حاوی چند موضوع مرتبط با مشارکت است.
حمایت
با تشکر فراوان از @Yepoleb، @lenis0012، @pietroppeter، @Clonkk، @mode80، @phil، @CxPlanner، @shirleyquirk، @elcritch، @geotre، @thinkwelltwd، @xrfez، @enthus1ast برای حمایت مالی از من در GitHub.