Hacker News

چگونه دادا مراجع داخلی را فعال می کند

نظرات

1 min read Via smallcultfollowing.com

Mewayz Team

Editorial Team

Hacker News

مشکل خودارجاعی که دهه هاست برنامه نویسی سیستم ها را درگیر کرده است

اگر تا به حال سعی کرده اید یک نمودار، یک لیست با پیوند دوگانه، یا یک الگوی ناظر به زبانی با قوانین مالکیت دقیق بسازید، درد را می دانید. ساختارهای داده خودارجاعی - که در آن بخشی از یک ساختار نشانگر را به قسمت دیگری از همان ساختار نگه می‌دارد - بیان ایمن بسیار دشوار است. توسعه‌دهندگان Rust سال‌ها با این مشکل دست و پنجه نرم کرده‌اند و به بلوک‌های Pin، ناامن یا تخصیص‌دهنده‌های عرصه فقط برای مدل‌سازی الگوهایی که در زبان‌های جمع‌آوری شده بی‌اهمیت به نظر می‌رسند، دست یافته‌اند. Dada، ​​زبان برنامه نویسی تجربی ایجاد شده توسط نیکو ماتساکیس، رویکردی اساسا متفاوت دارد. دادا با بازنگری درباره مالکیت و مجوزها از پایه، مراجع داخلی را بدون به خطر انداختن ایمنی حافظه فعال می‌کند - و پیامدهای آن بسیار فراتر از کنجکاوی آکادمیک است.

مراجع داخلی چیست و چرا اهمیت دارد؟

یک مرجع داخلی زمانی اتفاق می‌افتد که یک فیلد در ساختار داده به فیلد دیگری در ساختار همان اشاره می‌کند. تجزیه‌کننده‌ای را در نظر بگیرید که هم یک رشته منبع و هم یک قطعه را در آن رشته نگه می‌دارد، یا یک مؤلفه رابط کاربری که فهرستی از ویجت‌های فرزند را همراه با اشاره‌گر به فرزند متمرکز فعلی ذخیره می‌کند. این الگوها دائماً در نرم‌افزارهای دنیای واقعی ظاهر می‌شوند: سیستم‌های رویداد، مدل‌های سند، درختان پیکربندی، و موتورهای گردش کار، همگی به نوعی از خود مرجع متکی هستند.

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

چالش صرفاً نظری نیست. تیم‌هایی که پلت‌فرم‌های مدولار می‌سازند - مانند معماری 207 ماژوله در پشت Mewayz - به طور مداوم به مراجع داخلی وابسته هستند. یک ماژول CRM که به رکوردها در یک زمینه داده ارجاع می‌دهد، یک موتور صورت‌حساب که موارد خط را به سند اصلی خود پیوند می‌دهد، یا یک داشبورد تحلیلی که به جریان‌های داده زنده در یک شی وضعیت مشترک اشاره می‌کند: همه این‌ها نمونه‌های واقعی الگوی مرجع داخلی هستند که در مقیاس کار می‌کنند.

چگونه مدل‌های مالکیت سنتی کوتاه می‌آیند

جستجوگر قرض Russt یکی از مشهورترین نوآوری‌ها در طراحی زبان مدرن است که کل دسته‌بندی اشکالات حافظه را در زمان کامپایل حذف می‌کند. با این حال، معنای دقیق تک مالکی، قرض گرفتن یا حرکت، ارجاعات داخلی را واقعاً دردناک می کند. لحظه ای که یک ساختار در حافظه جابجا می شود، هر نشانگر داخلی نامعتبر می شود. پاسخ Rust - Pin API معرفی شده در نسخه 1.33 - مکانیزمی را برای تضمین عدم جابه‌جایی مقدار ارائه می‌کند، اما پیچیدگی را بر روی آنچه باید یک کار مدل‌سازی ساده باشد، لایه‌بندی می‌کند.

توسعه دهندگان اغلب گزارش می دهند که 30 تا 40 درصد از زمان خود را صرف مبارزه با جستجوگر وام بر روی الگوهای مربوط به خود ارجاع می کنند. کتابخانه‌های تخصیص Arena مانند typed-arena و رویکردهای مبتنی بر فهرست (که در آن شاخص‌ها را به جای مراجع واقعی در یک Vec ذخیره می‌کنید) راه‌حل‌های عملی اما ناقص هستند. آنها بیانگر بودن ارجاعات مستقیم را با غیرمستقیمی که کامپایلر می تواند تأیید کند، عوض می کنند، اما وضوح را نیز با boilerplate مبادله می کنند.

"بهترین ویژگی زبان این است که الگوی صحیح را آسان‌ترین الگو برای نوشتن می‌کند. وقتی توسعه‌دهندگان به راه‌حل‌هایی متوسل می‌شوند، به این معنی است که مدل زبان و مدل ذهنی آنها از هم جدا شده است." - نیکو ماتساکیس، درباره فلسفه طراحی پشت Dada

رویکرد مبتنی بر مجوز دادا برای مالکیت

دادا مالکیت را نه به عنوان یک تصمیم باینری خود یا قرض گرفتن، بلکه به عنوان طیفی از مجوزها تصور می کند. به جای انتقال مالکیت یا ایجاد وام‌های موقت، Dada به مقادیر اجازه می‌دهد حاشیه‌نویسی‌های مجوزی را داشته باشند که توصیف می‌کند چه کاری می‌توانید با آن‌ها انجام دهید - خواندن، نوشتن، یا مالکیت - و به طور بحرانی، این مجوزها می‌توانند در قسمت‌های همپوشانی از یک ساختار داده وجود داشته باشند.

بینش کلیدی مفهوم اجاره است. اجاره در دادا به یک ارزش دسترسی موقت می دهد در حالی که مالک اصلی حقوق آن را حفظ می کند. برخلاف وام های Rust، اجاره نامه ها به گونه ای طراحی شده اند که به طور طبیعی با ساختار داخلی ترکیب شوند. وقتی فیلد یک ساختار را اجاره می‌کنید، سیستم نوع دادا می‌فهمد که محدوده اجاره به طول عمر والدین بدون نیاز به حاشیه‌نویسی صریح در طول عمر است. این امر زنجیره‌های پارامتر طول عمر بدنام 'a را که خواندن امضاهای تابع Rust را دشوار می‌کند، حذف می‌کند.

به‌خصوص برای مراجع داخلی، دادا آنچه را که زبان اجاره‌های مشترک با مسیرهای داخلی نامیده می‌شود، معرفی می‌کند. یک ساختار می تواند یک اجاره نامه را برای یکی از فیلدهای خود نگه دارد زیرا کامپایلر رابطه بین ظرف و داده های موجود را به عنوان یک مفهوم درجه یک دنبال می کند. نه نیازی به پین، نه نیازی به غیر ایمن و نه نیازی به غیرمستقیم مبتنی بر ایندکس وجود ندارد. شما به سادگی کد را همانطور که در مورد داده ها فکر می کنید می نویسید و کامپایلر آن را تأیید می کند.

الگوهای عملی که در دادا بی اهمیت می شوند

با استفاده از ارجاعات داخلی کاملاً فعال، پیاده سازی چندین الگوی دشوار تاریخی آسان می شود. اینها الگوهایی هستند که سیستم های تولید روزانه با آنها مواجه می شوند:

  • تکرارکننده‌های خودارجاعی — تکرارکننده‌ای که مرجعی را به مجموعه‌ای که از آن عبور می‌کند، نگه می‌دارد، به عنوان یک ساختار واحد، بدون ژیمناستیک مادام العمر ذخیره می‌شود
  • الگوهای مشاهده‌گر - ارسال‌کننده رویدادی که فهرستی از تماس‌های برگشتی را که به وضعیت خود ارجاع می‌دهند، نگهداری می‌کند و برنامه‌نویسی واکنشی را بدون پوشش‌های Rc/RefCell فعال می‌کند
  • مدل‌های سند با مکان‌نما - ساختار سند ویرایشگر متنی که هم بافر و هم یک یا چند موقعیت مکان‌نما را در خود دارد
  • سلسله مراتب والد-فرزند — ساختارهای درختی که در آن کودکان به گره والد خود ارجاع می دهند، که مستقیماً به جای نشانگرها یا شاخص های ضعیف مدل سازی شده است
  • موتورهای گردش کار با ماشین‌های حالت — یک ساختار خط لوله که به مرحله فعلی، نتایج قبلی و اقدامات معلق در یک مدل داده منسجم اشاره می‌کند

برای معماران پلتفرم، این الگوها لبه نیستند - آنها ستون فقرات نرم افزار مدولار هستند. هنگامی که تیم مهندسی Mewayz ویژگی‌هایی مانند سازندگان جریان کار کشیدن و رها کردن یا همکاری بلادرنگ را در ماژول مدیریت پروژه خود ایجاد می‌کند، مدل‌های داده زیربنایی ناگزیر شامل ساختارهای خودارجاعی می‌شوند. زبان‌ها و چارچوب‌هایی که این الگوها را مدیریت می‌کنند، زمان توسعه را کاهش می‌دهند و مساحت سطح اشکالات را به حداقل می‌رسانند.

💡 DID YOU KNOW?

Mewayz replaces 8+ business tools in one platform

CRM · Invoicing · HR · Projects · Booking · eCommerce · POS · Analytics. Free forever plan available.

Start Free →

تاثیر گسترده تر بر معماری نرم افزار

رویکرد دادا به مراجع داخلی نشان‌دهنده گرایش بزرگ‌تری در طراحی زبان برنامه‌نویسی است: ارگونومیک کردن الگوهای ایمن به جای غیرممکن کردن الگوهای ناایمن. این فلسفه پیامدهای مستقیمی بر نحوه معماری نرم افزار مدرن دارد. وقتی یک زبان یک الگو را آسان می کند، توسعه دهندگان از آن استفاده می کنند. هنگامی که یک الگو را دردناک می کند، توسعه دهندگان از آن اجتناب می کنند - گاهی اوقات به قیمت وضوح معماری.

بحث میکروسرویس ها در مقابل بحث یکپارچه مدولار را در نظر بگیرید. یکی از دلایلی که تیم ها سیستم ها را به سرویس های جداگانه تقسیم می کنند، اجتناب از پیچیدگی مدیریت وضعیت مشترک در یک فرآیند واحد است. اما اگر زبان الگوهای حالت مشترک را ایمن و قابل خواندن کند، استدلال تجزیه زودهنگام ضعیف می‌شود. تیم ها می توانند سیستم های منسجم و ماژولار - با 50، 100 یا حتی 207 ماژول به هم پیوسته - را در یک واحد قابل استقرار ایجاد کنند و به مزایای سازمانی ماژولار بودن بدون سربار عملیاتی سیستم های توزیع شده دست یابند.

این دقیقاً همان معماری است که پلتفرم‌هایی مانند Mewayz را تقویت می‌کند، جایی که ماژول‌های شامل CRM، صورت‌حساب، حقوق و دستمزد، منابع انسانی، مدیریت ناوگان و تجزیه و تحلیل همگی در یک زمینه داده یکپارچه عمل می‌کنند. هر ماژول به نهادهای مشترک - مخاطبین، سازمان‌ها، تراکنش‌ها - از طریق روابط داخلی ارجاع می‌دهد که مدیریت آن‌ها در سراسر مرزهای سرویس کابوس‌وار است، اما در یک ساختار یکپارچه به خوبی ساختار یافته هستند. پیشرفت در طراحی زبان که این مراجع داخلی را ساده می کند، مستقیماً به نفع این دسته از نرم افزارها است.

برنامه‌نویسان چه چیزی را باید تماشا کنند

دادا همچنان آزمایشی است و ایده های آن هنوز از طریق توسعه عمومی و بازخورد جامعه در حال اصلاح است. با این حال، چندین نوآوری آن در حال حاضر بر طراحی زبان اصلی تأثیر گذاشته است. کار در حال انجام Rust بر روی انواع مشاهده و polonius (نسل بعدی جستجوگر وام) مفاهیم را از همان فضای تحقیقاتی به عاریت گرفته است. مدل مالکیت سوئیفت، که در سوئیفت 5.9 معرفی شد، به طور مشابه سیستم‌های مجوز دقیق‌تری را بررسی می‌کند. حتی سیستم نوع TypeScript به سمت مدل‌سازی دقیق‌تر روابط داده‌ها در حال تکامل است.

برای تیم‌هایی که امروزه نرم‌افزار تولید می‌کنند، نکات کاربردی واضح است. اول، از زبان‌ها و چارچوب‌هایی استفاده کنید که مدل مالکیت آن‌ها را با مدل داده‌های شما همسو می‌کنند – مبارزه با سیستم نوع مالیات بر بهره‌وری است که در طول زمان ترکیب می‌شود. دوم، روی درک الگوهای مورد نیاز دامنه شما سرمایه گذاری کنید. اگر برنامه شما اساساً نموداری از موجودیت های به هم پیوسته است (همانطور که اکثر پلتفرم های تجاری هستند)، ابزارهایی را انتخاب کنید که نمودارها را به طور طبیعی مدل می کنند تا راه حل های درختی شکل را اجباری کنند.

در نهایت، مراقب دادا و تحقیقاتی که نشان می دهد باشید. مشکلاتی که حل می کند - ارجاعات داخلی، ترکیب مجوزها، ایمنی ارگونومیک - نگرانی خاصی نیستند. آنها دقیقاً مشکلاتی هستند که هر تیمی هنگام ساختن نرم افزارهای بلندپروازانه و به هم پیوسته در مقیاس با آنها روبرو می شود. خواه ناوگانی از وسایل نقلیه تحویل را مدیریت می‌کنید، خط لوله استخدام چند مرحله‌ای را تنظیم می‌کنید یا داده‌ها را در یک پلت‌فرم کسب‌وکار 207 ماژول همگام‌سازی می‌کنید، روشی که ابزارهای شما روابط داخلی را مدیریت می‌کنند، کیفیت هر چیزی را که در بالای آنها می‌سازید شکل می‌دهد.

از تئوری زبان تا واقعیت تجاری

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

برای بیش از 138000 کسب‌وکار که از پلت‌فرم‌هایی مانند Mewayz برای مدیریت عملیات خود استفاده می‌کنند، این پیشرفت به معنای نرم‌افزاری است که قابل اعتمادتر، ویژگی‌های غنی‌تر و سریع‌تر تکامل می‌یابد. هر پیشرفتی در نحوه مدیریت پیچیدگی زبان‌های برنامه‌نویسی، در نهایت به تجربه بهتری برای کاربر نهایی تبدیل می‌شود - صاحب کسب‌وکار کوچکی که به سادگی می‌خواهد سیستم‌های CRM، صورت‌حساب و رزرو آن‌ها به طور یکپارچه با هم کار کنند. این یکپارچگی محصول هزاران مرجع داخلی خوب مدل‌سازی شده است و زبان‌هایی مانند دادا ساخت آنها را ایمن‌تر و آسان‌تر از همیشه می‌کنند.

کسب و کار خود را با Mewayz ساده کنید

Mewayz 207 ماژول کسب و کار را در یک پلتفرم - CRM، صورتحساب، مدیریت پروژه و غیره آورده است. به 138000+ کاربر بپیوندید که گردش کار خود را ساده کرده اند.

استارت امروز رایگان

سوالات متداول

دقیقاً "مشکل خود ارجاعی" چیست؟

مشکل خود ارجاعی زمانی رخ می‌دهد که یک ساختار داده حاوی یک مرجع به خود باشد، مانند گره‌ای در گراف که به گره دیگری در همان ساختار اشاره می‌کند. در زبان‌هایی با قوانین مالکیت سخت‌گیرانه مانند Rust، این یک تضاد ایجاد می‌کند: ضمانت‌های ایمنی زبان نمی‌تواند به راحتی تعیین کند که آیا مرجع از داده‌هایی که به آن اشاره می‌کند یا نه، زنده خواهد ماند یا خیر. این امر باعث می‌شود الگوهای به ظاهر ساده، که در ماژول‌های 207+ Mewayz رایج است، به‌طور شگفت‌آوری دشوار و ناامن اجرا شوند.

دادا چگونه این مشکل را متفاوت از Rust حل می کند؟

در حالی که Rust اغلب به راه‌حل‌های پیچیده مانند Pin یا کد ناامن برای مدیریت ارجاع‌های خود نیاز دارد، Dada یک راه‌حل را مستقیماً در مدل مالکیت خود ایجاد می‌کند. دادا مفهوم «اجاره» را معرفی می کند که ارجاعات موقتی و مبتنی بر مجوز هستند. این به کامپایلر اجازه می دهد تا به طور ایستا ایمنی نشانگرهای داخلی را بدون نیاز به انواع خاص یا نقص ایمنی حافظه تضمین کند، و آن را برای این الگوهای رایج بسیار ارگونومیک تر می کند.

آیا امروز می توانم از Dada برای پروژه هایم استفاده کنم؟

دادا در حال حاضر یک زبان آزمایشی است و هنوز برای استفاده در تولید آماده نیست. این یک پروژه تحقیقاتی است که ایده های جدید در مالکیت را بررسی می کند. برای برنامه نویسی سیستم های قوی و آماده تولید، Rust انتخاب پیشرو باقی می ماند. برای نیازهای برنامه های سطح بالاتر، سرویسی مانند Mewayz (19 دلار در ماه) کتابخانه وسیعی از ماژول های از پیش ساخته شده را برای سرعت بخشیدن به توسعه بدون درگیر شدن با نگرانی های حافظه سطح پایین فراهم می کند.

آیا رویکرد دادا محدودیتی دارد؟

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

Start managing your business smarter today

Join 30,000+ businesses. Free forever plan · No credit card required.

Ready to put this into practice?

Join 30,000+ businesses using Mewayz. Free forever plan — no credit card required.

Start Free Trial →

Ready to take action?

Start your free Mewayz trial today

All-in-one business platform. No credit card required.

Start Free →

14-day free trial · No credit card · Cancel anytime