COMPΞZ 🧬
393 subscribers
1.85K photos
52 videos
24 files
736 links
متخصص کامپیوتر و نرم‌افزار • سازنده • هنرمند و طراح • مجموعه‌دار • نویسنده • تحلیل‌گر • مشاور استارتاپی و ایده‌پرداز

𐎲𐎴𐎠𐎼𐎴𐎫𐎹 𐏃𐎢𐎶𐎠𐎫𐎹

We create because the world deserves better code.

https://linktr.ee/compez
Download Telegram
ویژگی std::unreachable به عنوان یک ابزار پشتیبانی

قبل از هر چیز بهتر است بدانیم که در برنامه نویسی کامپیوتری، کدِ غیرقابل دسترسی، بخشی از کد منبع یک برنامه است که هرگز نمی‌تواند اجرا شود، زیرا هیچ مسیر کنترلی برای جریان کد از بقیه برنامه وجود ندارد. در سی‌پلاس‌پلاس نیز بعضاً در صورت نقض برخی از قوانین زبان، کل برنامه در مورد آن بخش بی‌معنی می‌شود. بنابراین ابزار std::unreachable که به عنوان گزینه‌ای در سرآیند (هدر) <utility> معرفی شده است وضعیت نامشخص را فرا می‌خواند.

هدف از به کارگیری این ویژگی:
- نشان دادن به کامپایلر که مسیر کد فعلی در شرایط عادی اجرای برنامه غیرقابل دسترس است.
- فعال کردن کامپایلر برای انجام بهینه‌سازی‌ها بر اساس این دانش (به عنوان مثال، حذف کد غیرقابل دسترس در ساخت‌های Release).
- ممکن است برای ابزارهای تحلیل ایستا (Static Analyzer) برای تشخیص خطاهای احتمالی یا کد مرده استفاده شود.
- مزیت این ویژگی برای استفاده در بهبود مدیریت خطا، دستورات سوئیچ و یا حلقه‌هاست.

فرض کنید تابعی داریم که یک عدد صحیح را به عنوان ورودی می‌گیرد و باید آن را بین ۰ و ۱۲۸ بررسی کند. اگر عدد خارج از این محدوده باشد، تابع باید یک خطا را به کاربر گزارش دهد.

import std;

void validateInput(int value)
{
if (value < 0 || value > 128)
{
std::cerr << "Error: Value must be between 0 and 128.\n";
std::unreachable();
}
}

auto main() -> int {
validateInput(128);
validateInput(-128);
}


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


#cpp20 #cpp23 #ub #unreachable #چالش #سی‌روزه #روز_دوازدهم
2
COMPΞZ 🧬
ویژگی std::unreachable به عنوان یک ابزار پشتیبانی قبل از هر چیز بهتر است بدانیم که در برنامه نویسی کامپیوتری، کدِ غیرقابل دسترسی، بخشی از کد منبع یک برنامه است که هرگز نمی‌تواند اجرا شود، زیرا هیچ مسیر کنترلی برای جریان کد از بقیه برنامه وجود ندارد. در سی‌پلاس‌پلاس…
بخش تخصصی دوم (به‌روز رسانی Solidity) |ساختار (Struct)

در Solidity راهی برای تعریف انواع جدید در قالب ساختار ارائه می‌شود؛ یک ساختار یک نوع سفارشی تعریف شده است که به شما امکان می‌دهد گروهی از متغیرها را تحت یک نام واحد کپسوله کنید. این شبیه به ساختار در زبان های برنامه نویسی دیگر مانند C یا ++C است.

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.6.0 <0.9.0;

// Defines a new type with two fields.
// Declaring a struct outside of a contract allows
// it to be shared by multiple contracts.
// Here, this is not really needed.
struct Funder {
address addr;
uint amount;
}

contract CrowdFunding {
// Structs can also be defined inside contracts, which makes them
// visible only there and in derived contracts.
struct Campaign {
address payable beneficiary;
uint fundingGoal;
uint numFunders;
uint amount;
mapping(uint => Funder) funders;
}

uint numCampaigns;
mapping(uint => Campaign) campaigns;

function newCampaign(address payable beneficiary, uint goal) public returns (uint campaignID) {
campaignID = numCampaigns++; // campaignID is return variable
// We cannot use "campaigns[campaignID] = Campaign(beneficiary, goal, 0, 0)"
// because the right hand side creates a memory-struct "Campaign" that contains a mapping.
Campaign storage c = campaigns[campaignID];
c.beneficiary = beneficiary;
c.fundingGoal = goal;
}

function contribute(uint campaignID) public payable {
Campaign storage c = campaigns[campaignID];
// Creates a new temporary memory struct, initialised with the given values
// and copies it over to storage.
// Note that you can also use Funder(msg.sender, msg.value) to initialise.
c.funders[c.numFunders++] = Funder({addr: msg.sender, amount: msg.value});
c.amount += msg.value;
}

function checkGoalReached(uint campaignID) public returns (bool reached) {
Campaign storage c = campaigns[campaignID];
if (c.amount < c.fundingGoal)
return false;
uint amount = c.amount;
c.amount = 0;
c.beneficiary.transfer(amount);
return true;
}
}


انواع ساختاری می‌توانند در داخل نگاشت‌ها (mappings) و آرایه‌ها استفاده شوند و خود ممکن است شامل نگاشت‌ها و آرایه‌هایی باشند.

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

البته، می‌توانید نیز به طور مستقیم به اعضای ساختار دسترسی داشته باشید بدون این که آن را به یک متغیر محلی اختصاص دهید، مانند

campaigns[campaignID].amount = 0

#solidity #web3 #update #ether #اتریوم
1
COMPΞZ 🧬
ویژگی std::unreachable به عنوان یک ابزار پشتیبانی قبل از هر چیز بهتر است بدانیم که در برنامه نویسی کامپیوتری، کدِ غیرقابل دسترسی، بخشی از کد منبع یک برنامه است که هرگز نمی‌تواند اجرا شود، زیرا هیچ مسیر کنترلی برای جریان کد از بقیه برنامه وجود ندارد. در سی‌پلاس‌پلاس…
ابزار کمکی std::to_underlying در C++23

در استاندارد ۲۳، تابع std::to_underlying برای تبدیل مقادیر شمارشی به نوع پایه ای آنها معرفی شده است. این تابع می‌تواند برای تبدیل انواع شمارشی مانند enum و enum class به نوع پایه‌ای آنها مانند int یا unsigned int استفاده شود.

برای مثال، فرض کنید می‌خواهیم مقدار Color::Green در شمارنده را به عنوان یک عدد صحیح ۸ بیتی ذخیره کنیم. در این صورت می‌توانیم از تابع std::to_underlying برای تبدیل Color::Green به نوع std::uint8_t استفاده کنیم:

import std;

enum class Color : std::uint8_t {
Red = 0,
Green = 1,
Blue = 2
};

auto main() -> int {

std::uint8_t colorIndex = std::to_underlying(Color::Green);
std::println("Color Index:{}", colorIndex);

}


از مزایای این ویژگی می‌تواند به افزایش خوانایی کد، جلوگیری از خطاهای تبدیل و افزایش کارآیی کد اشاره کرد.

#cpp20 #cpp23 #to_underlying #چالش #سی‌روزه #روز_سیزدهم
1🔥1
COMPΞZ 🧬
بخش تخصصی دوم (به‌روز رسانی Solidity) |ساختار (Struct) در Solidity راهی برای تعریف انواع جدید در قالب ساختار ارائه می‌شود؛ یک ساختار یک نوع سفارشی تعریف شده است که به شما امکان می‌دهد گروهی از متغیرها را تحت یک نام واحد کپسوله کنید. این شبیه به ساختار در…
بخش تخصصی دوم (به‌روز رسانی Solidity) |انواع نگاشت‌ها (Mapping)

در Solidity، از نوع داده‌های Mapping برای ایجاد یک نوع داده کلید-مقدار استفاده می‌شود. این نوع داده‌ها با نحو دستوری زیر تعریف می‌شوند:

mapping(KeyType KeyName? => ValueType ValueName?)


و متغیرهای از این نوع با دستور زیر اعلام می‌شوند:

mapping(KeyType KeyName? => ValueType ValueName?) VariableName


سایر انواع تعریف شده یا پیچیده توسط کاربر، مانند نگاشت (mapping)، ساختارها یا انواع آرایه مجاز نیستند. ValueType می‌تواند هر نوعی باشد، از جمله نگاشت، آرایه و ساختار. KeyName و ValueName اختیاری هستند (بنابراین نگاشت (KeyType => ValueType) نیز کار می‌کند) و می‌تواند هر شناسه معتبری باشد که یک نوع نیست.

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

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

در مثال زیر، قرارداد MappingExample یک نگاشت balances عمومی را با نوع کلید یک address، و نوع مقدار یک uint، نگاشت یک آدرس اتریوم به یک مقدار صحیح بدون علامت تعریف می‌کند. از آنجایی که uint یک نوع مقدار است، دریافت‌کننده مقداری را برمی‌گرداند که با نوع مطابقت دارد، که می‌توانید آن را در قرارداد MappingUser مشاهده کنید که مقدار را در آدرس مشخص شده برمی‌گرداند.

contract MappingExample {
mapping(address => uint) public balances;

function update(uint newBalance) public {
balances[msg.sender] = newBalance;
}
}

contract MappingUser {
function f() public returns (uint) {
MappingExample m = new MappingExample();
m.update(100);
return m.balances(address(this));
}
}


مثال زیر یک نسخه ساده شده از توکن ERC20 است. allowances_ نمونه‌ای از یک نوع نگاشت در داخل یک نوع نقشه برداری دیگر است. در آن KeyName و ValueName اختیاری برای نگاشت ارائه شده است. این بر هیچ عملکرد قرارداد یا بایت کد تأثیر نمی‌گذارد، فقط فیلد نام ورودی و خروجی را در ABI برای دریافت کننده نقشه تعیین می‌کند.
مثال زیر از allowancesـ برای ثبت مبلغی استفاده می‌کند که شخص دیگری مجاز است از حساب شما برداشت کند.

contract MappingExample {

mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;

event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);

function allowance(address owner, address spender) public view returns (uint256) {
return _allowances[owner][spender];
}

function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
require(_allowances[sender][msg.sender] >= amount, "ERC20: Allowance not high enough.");
_allowances[sender][msg.sender] -= amount;
_transfer(sender, recipient, amount);
return true;
}

function approve(address spender, uint256 amount) public returns (bool) {
require(spender != address(0), "ERC20: approve to the zero address");

_allowances[msg.sender][spender] = amount;
emit Approval(msg.sender, spender, amount);
return true;
}

function _transfer(address sender, address recipient, uint256 amount) internal {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
require(_balances[sender] >= amount, "ERC20: Not enough funds.");

_balances[sender] -= amount;
_balances[recipient] += amount;
emit Transfer(sender, recipient, amount);
}
}


#solidity #web3 #update #ether #اتریوم
1
آدم‌ها وقتی نا امید می‌شوند؛
به خیلی کمتر از آنچه لیاقتش را دارند راضی می‌شوند.

شب شیک 🚀🌹🌘
8👍3
👍2
خب امیدوارم با راهکار‌هایی که گفتیم واسه همتون حل شده باشه! 🙂🤌🏼
🥰1
خب، دیروز من سه تا جلسه داشتم که یکیش مربوط به موضوع Base و همراهی جامعش بود؛ بنابراین از طرف من هم ورود به دنیای base و فعالیت به صورت جدی در اون بخش از امروز شروع میشه. 😎🚀👊🏼

https://warpcast.com/compez.eth/0x510c7bde
🔥41
خب همینجا بمونه تا اینو ۱ رقمیش کنم. 😉
2
COMPΞZ 🧬
خب همینجا بمونه تا اینو ۱ رقمیش کنم. 😉
وقتی می‌گم بیس، یعنی چیزی حدود ۶.۲ برابر بزرگتر از جامعهٔ سوپر ریر در شاخهٔ فارکستر!

یعنی همون وقتی که من روی ریر گذاشتم رو بیارم روی بیس تا ۶ برابر پتانسیل رشد بیشتری در اون می‌بینم. 🔥

حالا به چی نیاز داریم؟
۱) بستر سازی و گسترش صنعت بیس
۲) آموزش و گسترش محتوا در مورد بیس
۳) ساخت و توسعه بر مبنای شبکهٔ بیس برای رسیدن به ۱ میلیارد تراکنش به عنوان هدف جامعه

تابستون قبلی حرکت‌هایی زده شد اما این تابستون مطمئنم یه چیز دیگه‌ای در انتظار هست.

ما شروع می‌کنیم، شماهم سعی کنید در خصوص بیس جدی باشید.
👍6❤‍🔥1
این رو هم الآن به چشمم خورد که روی شبکهٔ بیس تشویق می‌کنه برای تراکنش ایجاد کردن در قالب چالش‌ها؛ ممکنه در آینده امتیازات خوبی براتون بده.

برنامهٔ Blockscout Merits یک سیستم پاداش‌دهی است که به کاربران برای تعامل و کاوش در بلاک‌چین از طریق پلتفرم Blockscout امتیازاتی به نام "Merits" اعطا می‌کند. این امتیازات نشان‌دهندهٔ مهارت و مشارکت کاربران در استفاده از کاوشگر بلاک‌چین هستند و می‌توانند در آینده برای دسترسی به ویژگی‌های انحصاری، کالاها، تخفیف‌ها و فرصت‌های ویژه مورد استفاده قرار گیرند.

نحوهٔ کسب Merits:


ثبت‌نام در برنامه Merits: با ثبت‌نام در برنامه، ۱۰۰ Merits دریافت می‌کنید. استفاده از کد معرف در هنگام ثبت‌نام، ۱۰۰ Merits اضافی به همراه دارد.

دریافت پاداش روزانه: هر روز با مراجعه به داشبورد Merits و کلیک بر روی دکمهٔ مربوطه، می‌توانید ۱۰ Merits دریافت کنید.

شرکت در کمپین‌ها و مأموریت‌ها: با انجام وظایف مشخص‌شده در کمپین‌ها و مأموریت‌های اعلام‌شده، Merits بیشتری کسب کنید.

استفاده از Swapscout: با استفاده از Swapscout برای تبادل یا پل‌زدن دارایی‌ها، به‌صورت خودکار Merits دریافت خواهید کرد.

معرفی دوستان: با اشتراک‌گذاری کد معرف خود و دعوت از دوستان، ۱۰٪ از Merits کسب‌شده توسط آن‌ها را به‌عنوان پاداش دریافت می‌کنید.

https://eth.blockscout.com?ref=WXQ0WT

خودم شاید فرصت انجامش رو هم نداشته باشم! صرفاً جهت اطلاع بود.
👍2🙏1
COMPΞZ 🧬
وقتی می‌گم بیس، یعنی چیزی حدود ۶.۲ برابر بزرگتر از جامعهٔ سوپر ریر در شاخهٔ فارکستر! یعنی همون وقتی که من روی ریر گذاشتم رو بیارم روی بیس تا ۶ برابر پتانسیل رشد بیشتری در اون می‌بینم. 🔥 حالا به چی نیاز داریم؟ ۱) بستر سازی و گسترش صنعت بیس ۲) آموزش و گسترش…
باهوش باشی، می‌تونی حدس بزنی که چه اتفاقی خواهد افتاد. 👇🏼👇🏼👇🏼

در ژانویه ۲۰۲۵، تیم Base مأموریت، چشم‌انداز و استراتژی خود را برای سال ۲۰۲۵ اعلام کرد. هدف آن‌ها ساخت یک اقتصاد جهانی بر بستر بلاک‌چین است که نوآوری، خلاقیت و آزادی را افزایش دهد—اینترنتی جدید که توسط مردم و برای مردم ساخته می‌شود.

اهداف بزرگ و چالش‌برانگیز برای سال ۲۰۲۵:


۱) ۲۵ میلیون کاربر
۲) ۲۵ هزار توسعه‌دهنده
۳) ظرفیت بلوک ۲۵۰ مگاگس در ثانیه
۴) ۱۰۰ میلیارد دلار دارایی در پلتفرم
۵) ۱ میلیارد تراکنش در ماه اکتبر

پنج رکن استراتژیک برای دستیابی به این اهداف:


شبکهٔ Base برای توسعه‌دهندگان: ارائه ابزارهای قدرتمند و باز برای ساخت برنامه‌های برتر بر بستر بلاک‌چین.
شبکهٔ Base برای برنامه‌ها: حمایت از اکوسیستم متنوعی از برنامه‌های متصل و باز برای جذب کاربران بیشتر.
شبکهٔ Base برای مالکیت: ایجاد حساب‌های کاربری قدرتمند با تأمین مالی، هویت و مدیریت یکپارچه.
شبکهٔ Base برای بازارها: تبدیل Base به مرکز اقتصاد بلاک‌چین با بازارهای سرمایه جهانی و همیشه فعال.
شبکهٔ Base برای همه: تمرکز بر تمرکززدایی، مقیاس‌پذیری و تسریع Base برای دسترسی همگان به بلاک‌چین.
این استراتژی‌ها نشان‌دهنده تعهد Base به ساخت یک اقتصاد جهانی و باز بر بستر بلاک‌چین است که برای همه قابل دسترسی باشد.
2🔥1
COMPΞZ 🧬
باهوش باشی، می‌تونی حدس بزنی که چه اتفاقی خواهد افتاد. 👇🏼👇🏼👇🏼 در ژانویه ۲۰۲۵، تیم Base مأموریت، چشم‌انداز و استراتژی خود را برای سال ۲۰۲۵ اعلام کرد. هدف آن‌ها ساخت یک اقتصاد جهانی بر بستر بلاک‌چین است که نوآوری، خلاقیت و آزادی را افزایش دهد—اینترنتی جدید…
در نهایت، مهم نیست که در سال ۲۰۲۵ چه کارهایی انجام می‌دهیم؛ بلکه مهم است چگونه آن‌ها را انجام می‌دهیم. در سال ۲۰۲۵، ما به اصول خود پایبند خواهیم ماند. این به معنای:

- انجام کارهای درست
- سخت‌کوشی
- حفظ خوش‌بینی
- پیش بردن مرزها با خلاقیت
- قرار دادن تیم بالاتر از فرد
- اگر همه ما به این شیوه عمل کنیم، می‌توانیم سریع‌تر و فراتر پیش برویم.
3🔥2👌1
همهٔ کسانی که مشکلشون حل شده و به من اطلاع دادن شمارهٔ مجازی داشتن.

پس مشکل تا به این لحظه، قابل حل بوده.
😢1
چیزی که توی ذهم هست بین بازهٔ ۶ ماه تا ۱ سال گزینهٔ خوبی نخواهد بود! چون ما هدفمون از ایردراپ شناختن پروژه و تبلیغش هست. که به عنوان حمایت توزیع میشه و در مقابل ارزش آفرینی مورد انتظار ماست.

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

این موضوع حل بشه، یک بازهٔ زمانی ۲ تا ۳ ساله رو هم میشه در نظر گرفت که به صوت روزانه یه نونی سر سفره ملت بره بشینه! 😉 اما برای من اولویت کسانی هستن که زحمت می‌کشن و هم برای رشد خودشون هم برای رشد جامعه تلاش می‌کنن.
👍4
قسمت جالبش می‌دونی کجاست؟

اینه که اگه بتونم Trust value رو خارج از فارکستر و بدون وابستگی به OpenRank و امثالش تعبیه کنم، در این صورت می‌تونیم انتظار داشته باشیم که روی تلگرام هم امکان تعامل شکل بگیره! و حتی شاید یک ابزار اختصاصی روی اکو سیستم خودمون.

این خیلی واسم اهمیت داره که وابستگی‌ها رو به حداقل ممکن برسونیم! چون موضوع تحریم شدن از سمت کیف‌های خارجی همیشه وجود داره.
👍7
هرچند گزینهٔ یک کانال اختصاصی و میزان رتبهٔ کانال می‌تونه گزینهٔ خیلی ساده و شسته رفته‌ای هم باشه!
اما مدیریت خودِ کانال دهن صاف کن خواهد بود! یه بار طعمشو چشیدم کلی فحش بارم شد! پس کار من نیست و باید فکر بهتری کنیم.
نکته) هرکس بتونه راه حل خفن بده بهم، یک میزانی توکن در زمان اجراء بهش میدم که بره عشق کنه نیازی هم به ایردراپ نداشته باشه. 😉

زمان انقضاء ۲۴ ساعت از همین الآن.
COMPΞZ 🧬
نکته) هرکس بتونه راه حل خفن بده بهم، یک میزانی توکن در زمان اجراء بهش میدم که بره عشق کنه نیازی هم به ایردراپ نداشته باشه. 😉 زمان انقضاء ۲۴ ساعت از همین الآن.
گزینه‌های فعلی، تکیه بر فارکستر گزینه‌هایی مانند OpenRank و Spam Label وجود دارن اما هنوز مورد قبول همه نیست! کمی خام هستن.

گزینه‌هایی که خودم روشون کار می‌کنم، Trust Value بر مبنای تراکنش روی بلاک‌چین بیس و توکن اختصاصی خودمون که یک کاربر رو جامعه باید تأیید کنه و یک گواهی اطمینان دریافت می‌کنه با برچسب ویژه مثل Artist، Collector، Developer یا هر چیزی مثل این می‌گیره که می‌تونه تضمین کنه که همیشه واجد شرایط هست.