برنامه نویسی

گزارش هفتگی توسعه 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.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا