COMPΞZ 🧬
بخش تخصصی دوم (بهروز رسانی Solidity) |الفاظ آرایهای آرایه لفظی فهرستی از یک یا چند عبارت است که با کاما از هم جدا شده است که در کروشه ([...]) قرار داده شده است. برای مثال [1, a, f(3)] که به طور کل نوع آرایهٔ تحتاللفظی به صورت زیر تعیین میشود: - همیشه…
بخش تخصصی دوم (بهروز رسانی Solidity) |تخصیص آرایههای حافظه
در سالیدیتی آرایههای حافظه با طول پویا میتوانند با استفاده از عملگر new ایجاد شوند. برخلاف آرایههای ذخیرهسازی، امکان تغییر اندازه آرایههای حافظه وجود ندارد (برای مثال توابع عضو push در دسترس نیستند). شما باید یا اندازه مورد نیاز را به طور پیشفرض محاسبه کنید یا یک آرایه حافظه جدید ایجاد کنید و هر عنصر را کپی کنید.
همانطور که همه متغیرها در Solidity، عناصر آرایههای تازه تخصیص داده شده همیشه با مقدار پیشفرض مقداردهی میشوند.
در این کد uint یک آرایه حافظهای از اعداد صحیح به نام a ایجاد میکند که دارای طول ۷ است. با استفاده از new uint، حافظهٔ مورد نیاز برای آرایه a را اختصاص میدهد و سپس به a اشاره میکند. در خط بعد bytes memory b = new bytes(len) یک آرایه حافظهای از بایتها به نام b ایجاد میکند که طول آن برابر با مقدار len است. با استفاده از new bytes(len)، حافظه مورد نیاز برای آرایه b را اختصاص میدهد و سپس به b اشاره میکند.
در مثال فوق از کلمهٔ کلیدی
#solidity #web3 #update #ether #اتریوم
در سالیدیتی آرایههای حافظه با طول پویا میتوانند با استفاده از عملگر new ایجاد شوند. برخلاف آرایههای ذخیرهسازی، امکان تغییر اندازه آرایههای حافظه وجود ندارد (برای مثال توابع عضو push در دسترس نیستند). شما باید یا اندازه مورد نیاز را به طور پیشفرض محاسبه کنید یا یک آرایه حافظه جدید ایجاد کنید و هر عنصر را کپی کنید.
همانطور که همه متغیرها در Solidity، عناصر آرایههای تازه تخصیص داده شده همیشه با مقدار پیشفرض مقداردهی میشوند.
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.16 <0.9.0;
contract C {
function f(uint len) public pure {
uint[] memory a = new uint[](7);
bytes memory b = new bytes(len);
assert(a.length == 7);
assert(b.length == len);
a[6] = 8;
}
}
در این کد uint یک آرایه حافظهای از اعداد صحیح به نام a ایجاد میکند که دارای طول ۷ است. با استفاده از new uint، حافظهٔ مورد نیاز برای آرایه a را اختصاص میدهد و سپس به a اشاره میکند. در خط بعد bytes memory b = new bytes(len) یک آرایه حافظهای از بایتها به نام b ایجاد میکند که طول آن برابر با مقدار len است. با استفاده از new bytes(len)، حافظه مورد نیاز برای آرایه b را اختصاص میدهد و سپس به b اشاره میکند.
در مثال فوق از کلمهٔ کلیدی
memory استفاده شده است تا به کامپایلر اعلام شود که این آرایهها در حافظه داخلی (حافظه موقت) ایجاد شوند و نه در حافظه دائمی (ذخیرهسازی). این به این معناست که آرایههای a و b فقط در زمان اجرای تابع f وجود دارند و پس از اتمام تابع، از حافظه موقت حذف میشوند.#solidity #web3 #update #ether #اتریوم
👍1
کامپز قبلاً فکر اینو کرده! ☺️
https://github.com/genyleap/bitcoin-rpc
با این کتابخونه میتونید با شبکهٔ بیتکوین ور برید!
https://github.com/genyleap/bitcoin-rpc
با این کتابخونه میتونید با شبکهٔ بیتکوین ور برید!
🔥2
پس از تحمل آنهمه درد، کسی که به مقصد میرسد، دیگر همانی نیست که به راه افتاده بود. 😎 من هرچقدر تحریم میشم، هرچقدر فشار روم وارد میشه احساس میکنم قویتر شدم! قبلاً اینطور نبود، افسرده میشدم میزدم تو کلهٔ خودم که چرا اینطوری شد... اما الآن مدتیه هرچقدر بیشتر روم فشار وارد میشه یک سطح جدیدی از مغزم Unlock میشه که برای ترکوندن و صاف کردن دهن همه اینایی که تحریم رو کردن اسباب بازی برای خودشون. 😐
🔥2💯2
COMPΞZ 🧬
اتر 👀 شکسته جایی رو که نباید میشکست!
چه توصیهای میتونم بکنم جز اینکه بگم FOMO نشید!
فکر نکنم کسی به اندازه من ضرر کرده باشه! دقیقاً الآن هیچی حس نمیکنم از شدت ضررهای سنگینی که گذاشتم نه استرس دارم نه خوشحالم نه بدحال. 😜 انقدر از این تجربهها داشتم که پودر شدن از اول ساختمشون که تا دلت بخواد. فقط صبر!!! شده بخشی از مسیرمون! یه روز هوا بارونیه یه روز آفتابی دیگه چه کنیم!
بازار همیشه هست، فرصت همیشه هست! مهم اینه بپذیریم که زندگی هم ضرر داره هم سود! کاش باشه همه ضررها مالی باشه فقط! 😉❤️ غم به دلتون راه ندین اینم درست میشه! 😎 به فرصتهایی که ایجاد خواهد شد فکر کنید. 😌👊🏼
فکر نکنم کسی به اندازه من ضرر کرده باشه! دقیقاً الآن هیچی حس نمیکنم از شدت ضررهای سنگینی که گذاشتم نه استرس دارم نه خوشحالم نه بدحال. 😜 انقدر از این تجربهها داشتم که پودر شدن از اول ساختمشون که تا دلت بخواد. فقط صبر!!! شده بخشی از مسیرمون! یه روز هوا بارونیه یه روز آفتابی دیگه چه کنیم!
بازار همیشه هست، فرصت همیشه هست! مهم اینه بپذیریم که زندگی هم ضرر داره هم سود! کاش باشه همه ضررها مالی باشه فقط! 😉❤️ غم به دلتون راه ندین اینم درست میشه! 😎 به فرصتهایی که ایجاد خواهد شد فکر کنید. 😌👊🏼
❤5
به من میگن اینا مهم نیست بگو چقدر سود کردی...
خب من واقعیت رو بگم بهت، هیچوقت نیومدم نمودار بکشم بگم ببین اینهمه سود گرفتم! هرچی بوده ساخت و ساز کردم خوابوندم کف جامعه و کدهام! طی ۶ ماه اخیر ۳۵ هزار دلار سود کردم! زحمت شبانه روزیم پشت سیستم بوده دهنم سرویس شده! اما چون همرو خوابوندم روی بازار الآن ۳۲ هزار دلار توی ضررم! در واقع سودی نکردم! نظاره گر بودم و تجربهگر! اون ته موندش هم همون دیجن هست و بقیش هم یه جای دیگه به چوخ رفته. ☺️
ولی خب من ذهنم سازندست! به این چیزا شاید افسوس بخورم، اما هیچوقت آخر راهم نیست! دوباره میسازشم! 😎 سالها اینارو دیدم! خیلی بدتر از ایناشو! انقدر راهی بیمارستان شدم سر این چیزا تا بدونم وقتی ضرر میکنی چه حسی داره! وقتی سود میکنی چه حسی داره! سود کردن توی این بازارها دهن آدمو صاف میکنه! روی خوشش رو بهت نشون میدن اما اون اصل واقعیت رو هیچوقت بهت نمیگن. با خودمون رو راست باشیم! مهم اینه که جرأت داشته باشی اینارو هم به ملت بگی که فکر نکنن خبریه!
توی ضرریم، خب باشیم! جهنم و درک! ضرر جانی نخوریم پول همیشه به دست میاد، صد بار هم از بین میره صد بار هم به دست میاد! چرا اینهمه مطمئنم؟ چون مهارت دارم! روی مهارتهات اعتماد داشته باش درست میشه. دارم کد مینویسم که سیستم توسعه بدم تا بتونم جامعه رو بسازم! فرض میکنم ۶ ماه اخیر تلاشهام همش با خاک یکسان شد... هیچ اشکالی نداره چون مسئولیت همهٔ اینها به گردن خودم هست نه کس دیگه.🔥😎 مسئولیت همه چیزها رو خودت بپذیر خواهی دید که در شرایط بحرانی حالت خیلی بهتر میشه.
خب من واقعیت رو بگم بهت، هیچوقت نیومدم نمودار بکشم بگم ببین اینهمه سود گرفتم! هرچی بوده ساخت و ساز کردم خوابوندم کف جامعه و کدهام! طی ۶ ماه اخیر ۳۵ هزار دلار سود کردم! زحمت شبانه روزیم پشت سیستم بوده دهنم سرویس شده! اما چون همرو خوابوندم روی بازار الآن ۳۲ هزار دلار توی ضررم! در واقع سودی نکردم! نظاره گر بودم و تجربهگر! اون ته موندش هم همون دیجن هست و بقیش هم یه جای دیگه به چوخ رفته. ☺️
ولی خب من ذهنم سازندست! به این چیزا شاید افسوس بخورم، اما هیچوقت آخر راهم نیست! دوباره میسازشم! 😎 سالها اینارو دیدم! خیلی بدتر از ایناشو! انقدر راهی بیمارستان شدم سر این چیزا تا بدونم وقتی ضرر میکنی چه حسی داره! وقتی سود میکنی چه حسی داره! سود کردن توی این بازارها دهن آدمو صاف میکنه! روی خوشش رو بهت نشون میدن اما اون اصل واقعیت رو هیچوقت بهت نمیگن. با خودمون رو راست باشیم! مهم اینه که جرأت داشته باشی اینارو هم به ملت بگی که فکر نکنن خبریه!
توی ضرریم، خب باشیم! جهنم و درک! ضرر جانی نخوریم پول همیشه به دست میاد، صد بار هم از بین میره صد بار هم به دست میاد! چرا اینهمه مطمئنم؟ چون مهارت دارم! روی مهارتهات اعتماد داشته باش درست میشه. دارم کد مینویسم که سیستم توسعه بدم تا بتونم جامعه رو بسازم! فرض میکنم ۶ ماه اخیر تلاشهام همش با خاک یکسان شد... هیچ اشکالی نداره چون مسئولیت همهٔ اینها به گردن خودم هست نه کس دیگه.🔥😎 مسئولیت همه چیزها رو خودت بپذیر خواهی دید که در شرایط بحرانی حالت خیلی بهتر میشه.
❤6👍2🔥1
یکم پیش یه گفتگویی از آرتیستها داشتیم؛ توش یه موضوعی اشاره شد که فارکستر باید موضوع شناسایی آرتیستها و افراد مفید و محتواساز رو بتونه تشخیص بده تا با اینهمه اسپم و اسکم و فلان مواجه نشیم.
خب این انتظارِ به جایی هست، اما از نظر من فارکستر به عنوان یک پروتکل وظیفهٔ این رو نداشته و نداره که دستهبندی رو شکل بده! این فقط یک پروتکل هست که یک سری چهارچوب ارتباطی رو تعریف میکنه نه بیشتر! اما در عوض با ماهیت متنباز بودنش، این امکان وجود داره که ما توسعهدهندهها این کار رو انجام بدیم!
با چه شیوهای؟
- شناسایی مشکل
- ارائه راهکار
- توسعه و انتشار
هر ایدهای که شکل بگیره، ساخته بشه و در اختیار جامعه قرار بگیره، این میتونه نیازمندی رو پوشش بده.
در واقع منتظر ارائه نباید بود، باید ساخت!
خب این انتظارِ به جایی هست، اما از نظر من فارکستر به عنوان یک پروتکل وظیفهٔ این رو نداشته و نداره که دستهبندی رو شکل بده! این فقط یک پروتکل هست که یک سری چهارچوب ارتباطی رو تعریف میکنه نه بیشتر! اما در عوض با ماهیت متنباز بودنش، این امکان وجود داره که ما توسعهدهندهها این کار رو انجام بدیم!
با چه شیوهای؟
- شناسایی مشکل
- ارائه راهکار
- توسعه و انتشار
هر ایدهای که شکل بگیره، ساخته بشه و در اختیار جامعه قرار بگیره، این میتونه نیازمندی رو پوشش بده.
در واقع منتظر ارائه نباید بود، باید ساخت!
👍5
درود و روز بخیر! 👊🏼
https://warpcast.com/compez.eth/0xee39f439
همینکه نشستم پشت سیستم شات از بن شدن خیلیها دریافت کردم!
واقعاً متأسفم از این وضعیت. :) نمیدونم چی باید بگم اصلاً...
https://warpcast.com/compez.eth/0xee39f439
همینکه نشستم پشت سیستم شات از بن شدن خیلیها دریافت کردم!
واقعاً متأسفم از این وضعیت. :) نمیدونم چی باید بگم اصلاً...
Warpcast
C O M P Ξ Z on Warpcast
GM ~ RM | Superboard #26 owned by @maheshb on @superrare
Stay Rare with red candles! https://imagedelivery.net/BXluQx4ige9GuW0Ia56BHw/feb90ef6-0b97-41b6-0b76-e9834a670d00/original
Stay Rare with red candles! https://imagedelivery.net/BXluQx4ige9GuW0Ia56BHw/feb90ef6-0b97-41b6-0b76-e9834a670d00/original
😢1
COMPΞZ 🧬
خب یه نشانهای از امید میشه دید! ۱) واگرایی مثبت داریم ۲) کف کانال کندلمون حمایتی و برگردان هست. DYOR.
در مورد Rare، اگه اون خط زرد رنگ بالا رو بشکنه و تثبیت بده، میتونه رشد دوباره کنه.
دلیل منطقیش هم روی نمودار همین واگرایی مثبتش بود! 😉
دلیل منطقیش هم روی نمودار همین واگرایی مثبتش بود! 😉
🔥3
خب، امروز سرم به شدت شلوغه اما در مورد موضوع این شماره تلفن و احراز هویت وارپکست و کلاً قوائدش یک توضیح میدم که روشن بشید!
اولاً که موضوع تأیید حساب دیگه جدی شده! و این یکی از راههای مقابله با اسکمرها و اسپمرهاست. پس قسمت Verifications موجود در Settings سه بخش داره به صورت زیر:
برای اینکه نشون بدی واقعاً یه آدم واقعی هستی (نه ربات یا اسپم)، میتونی حسابهای دیگهات رو وصل کنی و تأییدشون کنی.
هر تأیید، یه امتیاز بهت میده. بسته به اینکه چقدر امتیاز بگیری، حسابت تو یکی از این سه دسته قرار میگیره:
- سطح ۰: ناشناس، معلوم نیست واقعی هستی یا نه.
- سطح ۱: به احتمال زیاد آدم واقعی هستی، تقلب کردن سخته. (۱۰۰۰ امتیاز)
- سطح ۲: مطمئنن آدم واقعی هستی، تقلب خیلی سخت میشه. (۲۰۰۰ امتیاز)
🔥 چرا بهتره تأیید کنی؟
- اگه امتیاز بالا داشته باشی، احتمال اینکه بهت برچسب اسپم بخوره خیلی کم میشه.
- حسابهایی که امتیاز بالا دارن، تو الگوریتم بیشتر دیده میشن (بهزودی فعال میشه).
- اگه شمارهت تأیید شده باشه، ممکنه واجد شرایط دریافت جایزه هم بشی، چون نشون میده کشورت محدود نیست.
امتیازها چجوری حساب میشن؟
هر چیزی که وصل میکنی، بسته به اعتبارش یه مقدار مشخصی امتیاز میگیری. مثلاً:
- یه حساب X (توییتر سابق) خالی امتیاز کمی میده.
- ولی اگه حسابت قدیمیه و کلی فالوور داره، امتیاز بیشتری میگیری.
- یه کیف پول رمزارز خالی امتیاز کمی میده، ولی اگه قدیمی باشه و توش پول باشه، امتیاز خوبی میگیری.
🔒 اطلاعات من امنه؟
- شماره تلفنت کاملاً خصوصی میمونه و فقط داخل خود Warpcast نگهداری میشه.
- ولی تأیید توییتر و کیف پول رمزارز، عمومی هستن و تو شبکه Farcaster نمایش داده میشن.
در مورد شماره تلفن، پیشنهاد من استفاده از شمارههای آمریکایی هست که با تابعیت وارپکست هماهنگی داره.
در حد پیشنهاد و نه تأیید) اگه هیچ فامیلی در خارج از کشور ندارید که از شماره تلفنش برای تأیید استفاده کنید، به جاش میتونید از شمارههای VOIP گوگل استفاده کنید یا در بهترین حالت سیمکارتهای انگلیس خریداری کنید (تا جایی که میدونم توی ایران پاسخ میده). این تنها راهی هست که فعلاً به ذهن من میرسه، راهحلهای دیگه هر طور خودتون فکر میکنید بهتره انجامش بدین.
نکته) نوع VPN باید با موقعیت زمانی و مکانی شماره تلفن یکسان باشه تا user-agent ارسالی توسط دستگاه شما تطبیق داده بشه.
نکته) حداقل سطح ۱ رو باید تأیید کنی، در این صورت خیالت راحت که از امتیازات عمومی وارپکست محروم نمیشی.
اولاً که موضوع تأیید حساب دیگه جدی شده! و این یکی از راههای مقابله با اسکمرها و اسپمرهاست. پس قسمت Verifications موجود در Settings سه بخش داره به صورت زیر:
1) X Account
2) Phone number
3) Verification addresses
برای اینکه نشون بدی واقعاً یه آدم واقعی هستی (نه ربات یا اسپم)، میتونی حسابهای دیگهات رو وصل کنی و تأییدشون کنی.
هر تأیید، یه امتیاز بهت میده. بسته به اینکه چقدر امتیاز بگیری، حسابت تو یکی از این سه دسته قرار میگیره:
- سطح ۰: ناشناس، معلوم نیست واقعی هستی یا نه.
- سطح ۱: به احتمال زیاد آدم واقعی هستی، تقلب کردن سخته. (۱۰۰۰ امتیاز)
- سطح ۲: مطمئنن آدم واقعی هستی، تقلب خیلی سخت میشه. (۲۰۰۰ امتیاز)
🔥 چرا بهتره تأیید کنی؟
- اگه امتیاز بالا داشته باشی، احتمال اینکه بهت برچسب اسپم بخوره خیلی کم میشه.
- حسابهایی که امتیاز بالا دارن، تو الگوریتم بیشتر دیده میشن (بهزودی فعال میشه).
- اگه شمارهت تأیید شده باشه، ممکنه واجد شرایط دریافت جایزه هم بشی، چون نشون میده کشورت محدود نیست.
امتیازها چجوری حساب میشن؟
هر چیزی که وصل میکنی، بسته به اعتبارش یه مقدار مشخصی امتیاز میگیری. مثلاً:
- یه حساب X (توییتر سابق) خالی امتیاز کمی میده.
- ولی اگه حسابت قدیمیه و کلی فالوور داره، امتیاز بیشتری میگیری.
- یه کیف پول رمزارز خالی امتیاز کمی میده، ولی اگه قدیمی باشه و توش پول باشه، امتیاز خوبی میگیری.
🔒 اطلاعات من امنه؟
- شماره تلفنت کاملاً خصوصی میمونه و فقط داخل خود Warpcast نگهداری میشه.
- ولی تأیید توییتر و کیف پول رمزارز، عمومی هستن و تو شبکه Farcaster نمایش داده میشن.
در مورد شماره تلفن، پیشنهاد من استفاده از شمارههای آمریکایی هست که با تابعیت وارپکست هماهنگی داره.
در حد پیشنهاد و نه تأیید) اگه هیچ فامیلی در خارج از کشور ندارید که از شماره تلفنش برای تأیید استفاده کنید، به جاش میتونید از شمارههای VOIP گوگل استفاده کنید یا در بهترین حالت سیمکارتهای انگلیس خریداری کنید (تا جایی که میدونم توی ایران پاسخ میده). این تنها راهی هست که فعلاً به ذهن من میرسه، راهحلهای دیگه هر طور خودتون فکر میکنید بهتره انجامش بدین.
نکته) نوع VPN باید با موقعیت زمانی و مکانی شماره تلفن یکسان باشه تا user-agent ارسالی توسط دستگاه شما تطبیق داده بشه.
نکته) حداقل سطح ۱ رو باید تأیید کنی، در این صورت خیالت راحت که از امتیازات عمومی وارپکست محروم نمیشی.
👍1
این اگه بگیره، براتون شیرینی میدم. 😄
https://warpcast.com/compez.eth/0x7879b63d
لامصبا همه جا از آتآشغالا استفاده میکنن، چیه آخه ریاکت شخمی! 😏
https://warpcast.com/compez.eth/0x7879b63d
لامصبا همه جا از آتآشغالا استفاده میکنن، چیه آخه ریاکت شخمی! 😏
❤🔥6🔥1
الگوریتمهای std::shift_left و std::shift_right در استاندارد ۲۳
استاندارد سی۲۳ دو الگوریتم جدید به نامهای std::shift_left و std::shift_right برای جابجایی عناصر در محدودههای مختلف ارائه میدهد. این الگوریتمها مشابه الگوریتمهای std::copy و std::move عمل میکنند، اما به جای کپی یا انتقال عناصر، آنها را در محل جابجا میکنند.
- این الگوریتمها برای جابجایی عناصر در آرایهها، لیستها و سایر مخازن داده مفید هستند.
- الگوریتم std::shift_left عناصر را از سمت چپ محدوده به سمت راست جابجا میکند.
- الگوریتم std::shift_right عناصر را از سمت راست محدوده به سمت چپ جابجا میکند.
در این کد مقداردهی الگوریتم به صورت زیر است:
۱) پارامتر arr: اشارهگر به ابتدای آرایه.
۲) پارامتر arr + 5: اشارهگر به انتهای آرایه.
۳) پارامتر با مقدار ۲، تعداد عناصری که باید جابجا شوند.
ماکروی اختصاصی برای بررسی این ویژگی به صورت زیر است:
#چالش #سیروزه #روز_دهم
استاندارد سی۲۳ دو الگوریتم جدید به نامهای std::shift_left و std::shift_right برای جابجایی عناصر در محدودههای مختلف ارائه میدهد. این الگوریتمها مشابه الگوریتمهای std::copy و std::move عمل میکنند، اما به جای کپی یا انتقال عناصر، آنها را در محل جابجا میکنند.
- این الگوریتمها برای جابجایی عناصر در آرایهها، لیستها و سایر مخازن داده مفید هستند.
- الگوریتم std::shift_left عناصر را از سمت چپ محدوده به سمت راست جابجا میکند.
- الگوریتم std::shift_right عناصر را از سمت راست محدوده به سمت چپ جابجا میکند.
import std;
auto main() -> int {
int arr[] = {1, 2, 3, 4, 5};
std::shift_left(arr, arr + 5, 2);
for (int i : arr) {
std::print("{}", i);
}
}
در این کد مقداردهی الگوریتم به صورت زیر است:
۱) پارامتر arr: اشارهگر به ابتدای آرایه.
۲) پارامتر arr + 5: اشارهگر به انتهای آرایه.
۳) پارامتر با مقدار ۲، تعداد عناصری که باید جابجا شوند.
ماکروی اختصاصی برای بررسی این ویژگی به صورت زیر است:
#ifdef __cpp_lib_shift
//TODO...
#endif
#چالش #سیروزه #روز_دهم
COMPΞZ 🧬
الگوریتمهای std::shift_left و std::shift_right در استاندارد ۲۳ استاندارد سی۲۳ دو الگوریتم جدید به نامهای std::shift_left و std::shift_right برای جابجایی عناصر در محدودههای مختلف ارائه میدهد. این الگوریتمها مشابه الگوریتمهای std::copy و std::move عمل…
بخش تخصصی دوم (بهروز رسانی Solidity) |ارجاعات معلق به عناصر آرایه ذخیرهسازی
زمانی که با آرایههای ذخیرهسازی کار میکنید، باید مراقب باشید که از ارجاعهای معلق پرهیز کنید. ارجاع معلق ارجاعی است که به چیزی اشاره میکند که دیگر وجود ندارد یا منتقل شده است اما ارجاع بهروزرسانی نشده است. به عنوان مثال، ارجاع معلق ممکن است رخ دهد اگر یک ارجاع به عنصری از آرایه را در یک متغیر محلی ذخیره کنید و سپس از آرایه مورد نظر ()pop کنید.
رفرنس معلق (Dangling Reference) در برنامهنویسی به وضعیتی گفته میشود که در آن یک اشارهگر (pointer) یا مرجع (reference) به ناحیهای از حافظه اشاره میکند که دیگر معتبر نیست.
در کد فوق، نوشتن در ptr.push(0x42) بر خلاف اینکه ptr دیگر به یک عنصر معتبر از s اشاره نمیدهد، باز نمیگردد. از آنجا که کامپایلر فرض میکند که فضای ذخیرهسازی استفاده نشده همیشه صفر است، بنابراین یک ()s.push پس از آنکه صریحاً صفر را به ذخیرهسازی نمینویسد، عمل نخواهد کرد، بنابراین عنصر آخر s پس از آن ()push طول ۱ را خواهد داشت و شامل 0x42 به عنوان عنصر اول خود خواهد بود.
بنابراین Solidity امکان اعلام ارجاع به انواع مقادیر در ذخیرهسازی را فراهم نمیکند. این نوع ارجاعهای معلقِ صریح به انواع مرجع متداخل محدود شدهاند. با این حال، ارجاعهای معلق ممکن است، زمانی که از عبارتهای پیچیده در اختصاصهای تاپل استفاده میکنید موقتاً هم رخ دهند.
#solidity #web3 #update #ether #اتریوم
زمانی که با آرایههای ذخیرهسازی کار میکنید، باید مراقب باشید که از ارجاعهای معلق پرهیز کنید. ارجاع معلق ارجاعی است که به چیزی اشاره میکند که دیگر وجود ندارد یا منتقل شده است اما ارجاع بهروزرسانی نشده است. به عنوان مثال، ارجاع معلق ممکن است رخ دهد اگر یک ارجاع به عنصری از آرایه را در یک متغیر محلی ذخیره کنید و سپس از آرایه مورد نظر ()pop کنید.
رفرنس معلق (Dangling Reference) در برنامهنویسی به وضعیتی گفته میشود که در آن یک اشارهگر (pointer) یا مرجع (reference) به ناحیهای از حافظه اشاره میکند که دیگر معتبر نیست.
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.0 <0.9.0;
contract C {
uint[][] s;
function f() public {
// Stores a pointer to the last array element of s.
uint[] storage ptr = s[s.length - 1];
// Removes the last array element of s.
s.pop();
// Writes to the array element that is no longer within the array.
ptr.push(0x42);
// Adding a new element to ``s`` now will not add an empty array, but
// will result in an array of length 1 with ``0x42`` as element.
s.push();
assert(s[s.length - 1][0] == 0x42);
}
}
در کد فوق، نوشتن در ptr.push(0x42) بر خلاف اینکه ptr دیگر به یک عنصر معتبر از s اشاره نمیدهد، باز نمیگردد. از آنجا که کامپایلر فرض میکند که فضای ذخیرهسازی استفاده نشده همیشه صفر است، بنابراین یک ()s.push پس از آنکه صریحاً صفر را به ذخیرهسازی نمینویسد، عمل نخواهد کرد، بنابراین عنصر آخر s پس از آن ()push طول ۱ را خواهد داشت و شامل 0x42 به عنوان عنصر اول خود خواهد بود.
بنابراین Solidity امکان اعلام ارجاع به انواع مقادیر در ذخیرهسازی را فراهم نمیکند. این نوع ارجاعهای معلقِ صریح به انواع مرجع متداخل محدود شدهاند. با این حال، ارجاعهای معلق ممکن است، زمانی که از عبارتهای پیچیده در اختصاصهای تاپل استفاده میکنید موقتاً هم رخ دهند.
#solidity #web3 #update #ether #اتریوم
COMPΞZ 🧬
الگوریتمهای std::shift_left و std::shift_right در استاندارد ۲۳ استاندارد سی۲۳ دو الگوریتم جدید به نامهای std::shift_left و std::shift_right برای جابجایی عناصر در محدودههای مختلف ارائه میدهد. این الگوریتمها مشابه الگوریتمهای std::copy و std::move عمل…
عملگر []static در استاندارد ۲۳
عملگر
قبل از C++23، عملگرهای زیرنویس (
مثال:
#cpp20 #cpp23 #static #operator #چالش #سیروزه #روز_یازدهم
عملگر
[]static operator یک ویژگی نسبتاً جدید است که در C++23 معرفی شده است. این به شما امکان میدهد یک عملگر زیرنویس ([]) را تعریف کنید که میتوان آن را بدون نیاز به نمونه ای از کلاس، مستقیماً روی نام کلاس (مانند یک تابع عضو استاتیک) فراخوانی کرد. به طور کلی این ویژگی امکان تعریف عملگر [] را برای چند پارامتر را فراهم میکند.قبل از C++23، عملگرهای زیرنویس (
[]operator) معمولاً توابع عضو بودند، به این معنی که روی یک شیء خاص از کلاس عمل میکردند. با این حال، در برخی موارد، عملکرد عملگر زیرنویس ممکن است به وضعیت شیء (متغیرهای عضو) وابسته نباشد.مثال:
import std;
class StringLength {
public:
static size_t operator[](const char* str) {
return strlen(str);
}
};
int main() {
std::string_view message = "Hello, world!";
std::size_t length = StringLength::operator[](message.data());
std::println("Length of {0} : {1}", message, length);
return 0;
}
#cpp20 #cpp23 #static #operator #چالش #سیروزه #روز_یازدهم