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

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

We create because the world deserves better code.

https://linktr.ee/compez
Download Telegram
بعضی وقتا توی زندگی،
احساس می‌کنیم که رسیدیم به بن بست،
احساس می‌کنیم راه و گذشته‌ای که ما رو تا اینجا آورده اشتباه بوده،
غـافل از اینکه خوشبختی‌، همیشه پشت بلندترین دیوار انتظار مارو می‌کشه.
پرواز کنید. پَـر باز کنید، رد شید و عبور کنید از تمام محال‌ها و نشدنی‌های زندگیتون.
👍133👏2😢1
درود 👊🏼 روز بخیر!

https://warpcast.com/compez.eth/0x2eab67ad
1
COMPΞZ 🧬
درود 👊🏼 روز بخیر! https://warpcast.com/compez.eth/0x2eab67ad
سوألی بود که با چه نرم‌افراری این طرح‌ها رو ساختی! راستش اینا اصلاً نرم‌افزاری نیست، هوش مصنوعی هم نیست! همشون کد‌نویسی خالص و انتزاعی هستن که از ذهنم بیرون اومده. من گفتم کارهای سخت رو دوست دارم! حتی یادمه زمانی که این فارمر‌های کله نخودی در مورد این کار‌ها نقد می‌کردن و می‌گفتن چهارتا خط کشیده با هوش مصنوعی فکر کرده کیه... یا به اون دایره‌هارو از مجموعهٔ Spectral Tapestry رو مسخره می‌کردن... خب من هیچ‌وقت در مورد نحوهٔ ساخت اینا صحبت نکردم چون کسی که هنرمند یا کالکتور باشه یکم به منطق ساخت این چیزا اهمیت میده.

سبک این طرح هست Generative Art، هنر مولد بهش می‌گیم. به هنری که نه با قلم هست و نه با هوش مصنوعی، کاملاً با کد‌نویسی شکل می‌گیره. مثل نسخه‌های Fidenza و یا حتی خود پیکسل‌آرت‌های معروف Punk.

این سری مجموع برد‌های دیجیتالی Superboard نام داره و انحصاراً روی پلتفرم سوپر‌ریر مینت شدن که توی ۵ نسخه هستن. روشن، تاریک، آبی، قرمز و سبز.
دو نسخهٔ روشن با ۶۴ قطعه و نسخهٔ تاریک با ۱۲۸ قطعه روی سوپر‌ریر هم رونمایی شدن.

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

خلاصه الگوریتم کاملاً خودکار هست و وقتی هر بار تولید میشه یک طرح منحصربفرد ایجاد می‌کنه.

با چه زبانی برنامه‌نویسیش کردم؟ الگوریتم اولیه رو روی ++C محک زدم اما به خاطر پیچیدگیش روی وب از JavaScript برای تولید نسخهٔ نهایی استفاده کردم، چون قرار بود کاملاً on-chain باشه.

در واقع کتابخانهٔ p5js که مختص هنر‌های برنامه‌نویسی هست.

با این مجموعه من خیلی کار‌ها دارم که قراره انجام بدم، تمام کسانی که اینارو خریدن روی پروژه‌های بعدی حتی توکن‌های احتمالی امتیاز ویژه بهشون خواهم داد به عنوان حمایت از مجموعه‌داران خودم.

نسخه‌های آبی، قرمز و سبز رو هم منتشر خواهم کرد اما در زمان مناسب، چون اصلاً فصلِ NFT نیست الآن.
3🔥3
COMPΞZ 🧬
سوألی بود که با چه نرم‌افراری این طرح‌ها رو ساختی! راستش اینا اصلاً نرم‌افزاری نیست، هوش مصنوعی هم نیست! همشون کد‌نویسی خالص و انتزاعی هستن که از ذهنم بیرون اومده. من گفتم کارهای سخت رو دوست دارم! حتی یادمه زمانی که این فارمر‌های کله نخودی در مورد این کار‌ها…
قبل از مجموعهٔ برد‌ها، من یه قطعه اختصاصی داشتم به نام پردازندهٔ ۳۶۸۶۴ که پانک ۶۵۲۹ اون رو در سال ۲۰۲۱ خریداری کرد.
چون اون قطعه دقیقاً بر مبنای یک پردازنده طراحی شده بود، این برد‌ها رو هم برای تکمیل اون قطعه و معنا دهی بیشتر براش طراحی کردم.

که نتیجش میشه یه چیزی مثل همین تصویر که به وقتش اینارو مینت می‌کنم.
🔥2
👀 BTC 😏

ممکنه تا دهانهٔ کادر فیروزه‌ای شیپور پیش بریم.
👍3🔥1
توی هر شبکه‌ای که هستید، نسبت Following باید نسبت به Followers خیلی پایین‌تر باشه.
اگه برعکس هست، بشین حسابتو پاکسازی کن هر چی نخاله هست رو بریز دور.
👍8
👍51🔥1
👍41
COMPΞZ 🧬
Photo
👍2💯1
👍5🥰1🙏1
وسط پروژه برق میره، اینترنت قطع میشه! من با جفت دستام تا آستین توی کد دارم با ۰ و ۱ ور میرم و بعد یهو ضد حال! 😐

حالا تا برق بیاد سیستم روشن کنم ببینم تو کدوم خط داشتم چه غلطی می‌کردم باید بشینم همش مرور کنم که فلان خطا و فلان خط فلان موضوع رو چطوری داشتم بررسی می‌کردم!

دیروز هم اینطور بود امروز هم اصلا هر روز همینه!

مملکت همه چیزش عذاب‌آوره! اینارو تو‌ی فارکستر بگم که تو چه شرایطی داریم تلاش می‌کنیم، شاخ در میارن کلی تیپ میدن بهم! 🤣😬

این وضعیت تنها مزیتی که داره اینه که باعث میشه کتاب بیشتری بخونم.👊🏼 اینطوری میشه عصبی نشد و فحش نداد حداقل 🤣
😁5😢2
وقتی گزینهٔ خوبی وجود نداشته باشه، بدترین گزینه بهترین گزینه به نظر می‌رسه.

گزینهٔ دیجن هم همینطوره.🙃
👍7
یکم دیگه ساخت‌و‌ساز کنم ۱۰۰ رو زدم!
چک کنید ببینید مال شما چنده.

https://www.onchainscore.xyz

https://warpcast.com/compez.eth/0xd162fa77
🔥4
خب!
درود بر برنامه‌نویس عالم!

چالش سی روزه رو آغاز می‌کنم 🫵🏼✍🏼 اما هدف آموزش نحوهٔ کد‌نویسی با C++23 و Solidity.

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

هیچ سخت نیست، تنهایی پیش برو یا با من پیش بیا، مهم اینه عمل کنی.✌🏼اگر هم برنامه‌نویس نیستی فقط به مفهومی که یک قرارداد می‌تونه ارائه بده دقت کن.
چرا باید اینارو یاد بگیری؟ چون اینارو اگه بلد باشی بهتر می‌تونی در مورد پروژه‌ها تصمیم‌گیری کنی که روی چی سرمایه‌گذاری کنی، یا حتی چی بسازی!

جزئیات از برداشتم رو در طول روز منتشر خواهم کرد.👇🏼
یک فهرست هم برای این موضوع مرحله به مرحله اضافه می‌کنم که دسترسی به مباحث پین شده ساده‌تر بشه.
هدف من از تولید این فهرست در طول ۱ ماه، به اشتراک‌گذاری ویژگی‌های جدید سی‌پلاس‌پلاس ۲۳ و همچنین بررسی ساختار و نحو زبان برنامه‌نویسی سالیدیتی است.

این فهرست برای کسانی که می‌خواهند با کمترین زمان ممکن سرنخ‌های مربوط به به‌روز رسانی‌های C++23 و یادگیری Solidity را در اختیار داشته باشند مناسب خواهد بود. امیدوارم به عنوان بخشی از جعبه‌ابزار خودم و دیگران مفید واقع شود.

📘 به‌روز رسانی‌‌ها برای استاندارد C++23

۱) بررسی و کار با جریان‌های std::print و ترکیبی از خاصیت‌های std::format
۲) کلمهٔ کلیدی constinit
۳) جزئیات constinit و مقایسه با constexpr، const و consteval
۴) پیش پردازنده‌های elifdef# و elifndef# و warning#
۵) بررسی عبارت شرطی جدید if consteval / if not consteval
۶) صفت (assume)
۷) پسوند تحت‌الفظی‌ (لیترال‌ها) برای std::size_t
۸) کلاس std::mdspan و زیر عضو extents
۹) پارامتر شیء صریح this
۱۰) الگوریتم‌های std::shift_left و std::shift_right
۱۱) عملگر []static
۱۲) ابزار کمکی std::unreachable
۱۳) ابزار کمکی std::to_underlying
۱۴) اعلان مستعار (alias)
۱۵) ویژگی std::move_only_function
۱۶) تابع std::forward_like
۱۷) ابزار کمکی std::invoke_r
۱۸) تابع کمکی std::bind_back
۱۹) تابع std::byteswap
۲۰) عضو std::contains
۲۱) عضو std::is_scoped_enum
۲۲) عضو std::views::zip
۲۳) عضو std::views::adjacent
۲۴) مدیریت خطا با std::expected
۲۵) ویژگی std::basic_stacktrace
۲۶)مخازن تخت std::flat_map
۲۷) تابع std::ranges::starts_with
۲۸) تابع std::ranges::end_with
۲۹) تابع std::ranges::find_last

📗 مباحث بررسی از زبان برنامه‌نویسی Solidity

۱) پیش‌تعریف و ساختاری از قرارداد
۲) انواع داده
۳) اعضای آدرس (address)
۴) الفاظ یونیکد، هگزادسیمال و شمارنده‌ها (Enum)
۵) انواع تابع
۶) انواع مرجع (Reference Types)
۷) توابع bytes.concat و string.concat
۸) الفاظ آرایه‌ای
۹) تخصیص آرایه‌های حافظه
۱۰) ارجاعات معلق به عناصر آرایه ذخیره‌سازی
۱۱) برش‌های آرایه (Array Slices)
۱۲) ساختار (Struct)
۱۳) انواع نگاشت‌ها (Mapping)
۱۴) کلمهٔ کلیدی delete
۱۵) نگاشت‌های تکرار پذیر (Iterable Mappings)
۱۶) تبدیل ضمنی (Implicit Conversions)
۱۷) تبدیل صریح (Explicit Conversions)
۱۸) دید کلی توابع (Function Visibility)
۱۹) توابع گیرنده (توایع گیرنده | Getter Function)
۲۰) متغیرهای حالت ثابت و تغییرناپذیر (Constant/Immutable)
۲۱) متغیرهای بازگشتی
۲۲) توابع خالص (Pure)
۲۳) دریافت اتر در سالیدیتی (دریافت تابع)
۲۴) تابع بازگشتی (Fallback)
۲۵) سربار‌گذاری توابع (Function Overloading)
۲۶) حل توابع اضافه بار (Overloaded Functions) و تطبیق آرگومان
۲۷) جایگزین‌‌سازی (باز‌نویسی) توابع
۲۸) ارث‌بری چندگانه
۲۹) بلاک اسمبلی درون خطی (Inline Assembly)

⚡️ این پست به صورت مداوم به‌روز رسانی خواهد شد.

#چالش #سی‌روزه #رمضان
👍6🔥1🙏1
COMPΞZ 🧬
خب! درود بر برنامه‌نویس عالم! چالش سی روزه رو آغاز می‌کنم 🫵🏼✍🏼 اما هدف آموزش نحوهٔ کد‌نویسی با C++23 و Solidity. شما هم می‌تونید نکته برداری کنید، منم هدفم اینه هرچی به روز رسانی کردم رو یادداشت کنم تا دوباره برای خودم مرور بشه. هیچ سخت نیست، تنهایی پیش…
بخش تخصصی اول (به‌روز رسانی سی‌پلاس‌پلاس ۲۳)

بررسی و کار با جریان‌های std::print و ترکیبی از خاصیت‌های std::format و کنار گذاری std::cout برای همیشه!

ویژگی std::print یک تابع جدید در سی++ ۲۳ است که برای چاپ مقادیر مختلف به طور قالب‌بندی‌شده به کنسول یا هر خروجی دیگری استفاده می‌شود. این تابع از انواع قالب‌های مختلف برای کنترل نحوه نمایش مقادیر استفاده می‌کند.

همچنین std::println مشابه std::print است، اما با این تفاوت که یک کاراکتر خط جدید n\ به انتهای خروجی اضافه می‌کند. این تابع برای چاپ مقادیر به طور جداگانه در خطوط جدید مفید است.

### مزایای std::print:

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

### موارد استفاده:
- چاپ مقادیر به طور جداگانه در خطوط جدید
- چاپ اطلاعات اشکال‌زدایی
- چاپ گزارش‌ها

### مزایا:
- استفاده آسان
- قالب‌بندی قدرتمند
- کارآمد
- قابل استفاده با انواع مختلف خروجی

### معایب:
- پیچیدگی بیشتر نسبت به توابع printf سنتی
- نیاز به یادگیری قالب‌ها

### چند مثال به شکل و انواع مختلف

#### ساده‌ترین حالت، پیش‌فرض بدون کد‌بندی قالب:

const std::string_view name {"Kambiz"};
const unsigned int age {34};
std::print("Hello, {}! You are {} years old.\n", name, age);


در این حالت یک رشته و یک عدد صحیح داریم و بدون قالب‌بندی خاص توسط تابع std::print چاپش می‌کنیم. در اینجا قالب‌بندی بر مبنای اولویت اعمال میشه، یعنی name در اولین آکولاد و دومین گزینه از اون یعنی age رو دریافت می‌کنه! یعنی اگه شما ترتیب دو متغیر رو به عنوان پارامتر‌ها تغییر بدین، نتیجه متفاوت خواهد شد!

#### در حالت اولویت‌بندی هم به این شکل آکولاد‌ها رو با شماره‌گذاری تعیین موقعیت کنید:

const std::string_view name {"Kambiz"};
const unsigned int age {34};
std::print("Hello, {1}! You are {0} years old.\n", age, name);


این روش در کار‌های چند زبانه و کار با رشته‌های پیچیده به شدت کاربردیه!

#### یک مثال تبدیلی بر مبنای قالب‌بندی:

const unsigned int year{2024};

std::println("default:{:}" , year);
std::println("decimal:{:d}" , year);
std::println("binary:{:b}" , year);
std::println("octal:{:o}" , year);
std::println("hexadecimal:{:x}" , year);


خروجی:

default:2024
decimal:2024
binary:11111101000
octal:3750
hexadecimal:7e8


#### یک مثال دیگه شرطی

#include <print>

auto main() -> int {
bool is_admin = true;
std::string role = is_admin ? "Admin" : "Regular User";
std::println("User Role: {}", role);
}


#### و یا مثالی با قالب‌بندی مشخص اعشاری!

#include <iostream>
#include <print>

auto main() -> int {
const double pi = 3.14159;
std::cout << std::format("Pi is approximately {:.2f}.", pi) << std::endl;
// OR
std::println("Pi is approximately {:.2f}.", pi);
}


این هم یک مثال از سفارشی‌سازی بیشتر از قالب‌بندی که در کد فوق ۳ کاراکتر از فضای خالی رو قبل از مقدار عددی اعمال کردیم:

const unsigned int temperature = 20;
std::println("Current temperature: {:+3d} degrees Celsius.", temperature);


یعنی خروجی عملاً به این صورت خواهد بود:

Current temperature: +20 degrees Celsius.


قبل از 20+ سه کاراکتر فاصله بعد از : اعمال شده.

#### یکم بیشتر از خصوصیات std::format در چاپ بخوای استفاده کنی به این شکل هم ممکن هست که در تراز‌بندی رشته‌ها به کار میره:

std::println( "{:<20}", "left");
std::println( "{:^20}", "centered");
std::println( "{:>20}", "right");


خروجی همچین چیزی خواهد بود:

left                
centered
right


#### یا تعیین بر مبنای کاراکتر هم با استفاده از {:>تعداد کاراکتر}`، یا {:<تعداد کاراکتر}`ممکن هست.

خروجی با استاندارد جدید، ایمن و شیک بر مبنای ویژگی‌های ۲۰ به بعد به این صورت می‌تونه باشه:

import std;

auto main() -> int {
bool is_admin {true};
std::string_view name { is_admin ? "Compez" : "Kambiz"};
std::println("Hello,{:>7}!", name);
}
👍3🔥1
COMPΞZ 🧬
بخش تخصصی اول (به‌روز رسانی سی‌پلاس‌پلاس ۲۳) بررسی و کار با جریان‌های std::print و ترکیبی از خاصیت‌های std::format و کنار گذاری std::cout برای همیشه! ویژگی std::print یک تابع جدید در سی++ ۲۳ است که برای چاپ مقادیر مختلف به طور قالب‌بندی‌شده به کنسول یا هر…
🔥 بخش دوم: یادگیری زبان برنامه‌نویسی Solidity

البته من از ۱ سال قبل شروعش کردم و این پست بازیابی شدست، ولی اینجا به‌روز‌رسانی میدم.

## سالیدیتی چیه؟
سالیدیتی یک زبان برنامه‌نویسی سطح بالا، شیءگرا و کامپایل‌شده‌ است که برای نوشتن قراردادهای هوشمند در بلاک‌چین اتریوم استفاده می‌شه.
این زبان شباهت‌های زیادی به زبان‌های برنامه‌نویسی محبوب مثل ++C، جاوا و جاوا اسکریپت داره، و ساختارش خیلی شبیه ++C هست. ذاتاً هم با ++C ساخته شده و قدرتش رو ازش به ارث برده.

ویژگی‌های Solidity:
🔹 زبان سطح بالا مخصوص بلاک‌چین
🔹 شیءگرای کامل
🔹 مختص نوشتن قراردادهای هوشمند

## سالیدیتی کجا کاربرد داره؟
همونطور که قبلاً در مورد بلاک‌چین و وب۳ گفته بودم، قرارداد‌های هوشمند به یک زبان ایمن و اختصاصی نیاز دارن که فقط متمرکز روی این موضوع باشه.

📌 قراردادهای هوشمند چیه؟
برنامه‌هایی که روی بلاک‌چین به‌طور خودکار اجرا می‌شن و هیچ‌کس نمی‌تونه اون‌ها رو تغییر بده.

📌 عنوان DApps (برنامه‌های غیرمتمرکز)
برنامه‌هایی که روی بلاک‌چین اجرا می‌شن و توسط هیچ فرد یا سازمانی کنترل نمی‌شن. یعنی اگه برنامه‌ای رو روی بلاک‌چین اجرا کنی، دیگه قابل تغییر نیست!

📌 نوشتن توکن‌های هوشمند
توکن‌های دیجیتالی که روی بلاک‌چین اجرا می‌شن و به‌عنوان دارایی دیجیتال استفاده می‌شن.

## مزایای Solidity
امن و قابل اعتماد
کامپایلری و سریع
دارای جامعه توسعه‌دهندگان فعال

## معایب Solidity
پیچیدگی بالا و نیاز به دانش تخصصی بلاک‌چین
زبان نسبتاً جدید و در حال توسعه

## نمونه کد ساده در Solidity

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

contract SimpleStorage {
uint storedData;

function set(uint x) public {
storedData = x;
}

function get() public view returns (uint) {
return storedData;
}
}

📌 توضیحات کد:
🔹 خط اول مشخص می‌کنه که کد تحت لایسنس GPL نسخه ۳.۰ منتشر شده.
🔹این قسمت pragma solidity >=0.4.16 <0.9.0; یعنی این کد فقط روی نسخه‌های خاصی از Solidity اجرا می‌شه.
🔹این قسمت SimpleStorage یک قرارداد هوشمند است که مقدار storedData رو ذخیره و بازیابی می‌کنه.

📌 مقایسه با ++C
در C++ اگه get() رو به سبک Solidity بنویسی، به این شکل می‌شه:

uint get() const {
return storedData;
}

یعنی const برای مشخص کردن تابع فقط خواندنی مشابه view در Solidity استفاده شده.


🔥 نتیجه‌گیری:
این زبان فوق‌العاده مهمه، مخصوصاً برای قراردادهای هوشمند و پروژه‌های Web3. به نظرم برنامه‌نویس یا حتی سرمایه‌گذارهای حرفه‌ای باید بتونن کدهای Solidity رو بخونن، چون بررسی قراردادها توی پروژه‌های توکنی، ایردراپ‌ها و... خیلی مهمه. 😌

این فقط یه شروع بود، توی یک ماه آینده باید این مبحث رو ببندم و برم سراغ کارهای مهم‌تر.

#Solidity #Web3 #Update
🔥2
خب هم زمان با تأیید ترامپ رنگ بازار رو ببینید. 😉 ۸۸ ک!
این صحبت‌ها صرفاً توجیه احمق بودن رو داره! هرچیزی تخصص لازم داره! چرا فکر می‌کنی چون اگه پول میدی پس پول در میاری؟!!

چه بیت‌کوین، چه طلا، چه صد‌ها ارز یا سهم دیگه یک قانونی دارن! اون هم اینه که بازار پول رو از دست احمق‌ها می‌گیره و میده به دست کسانی که منطق مدیریت ریسک، طمع و صد‌ها جور دیگه رو داره.

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

چقدر خونه زندگی‌ها رو نابود کرده این FOMO... ولی هیچ‌وقت حاضر نیستیم بپذیریم که به این راحتی‌ها نیست.

قانون اول برای ورود به چنین حوزه‌هایی اینه که فقط پولِ مازاد!

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

من هم به نوبهٔ خودم سال‌ها احمق بودم و انقدر احقم‌بازی کردم که به اندازهٔ یه خونه پول از دست دادم تا یاد بگیرم بازار کریپتو یعنی چی.

اگه الآن ۱ دلار رو شما نتونی ۱ ماه حفظش کنی، مطمئن باش ده‌ها میلیون دلار رو حتی ۱ دقیقه هم نمی‌تونی حفظش کنی! چون این مربوط به آگاهی میشه نه رنگ بازار.
👍3💯1
COMPΞZ 🧬
🔥 بخش دوم: یادگیری زبان برنامه‌نویسی Solidity البته من از ۱ سال قبل شروعش کردم و این پست بازیابی شدست، ولی اینجا به‌روز‌رسانی میدم. ## سالیدیتی چیه؟ سالیدیتی یک زبان برنامه‌نویسی سطح بالا، شیءگرا و کامپایل‌شده‌ است که برای نوشتن قراردادهای هوشمند در…
چرا سعی کردم سی++ رو به همراه سالیدیتی به‌روز رسانی کنم؟ اصلاً تعریف و مقایسهٔ این دو باهم چطور می‌تونه باشه؟

پاسخ واضح هست! سی‌پلاس‌پلاس به عنوان یک زبان همه فن حریف و با کلی پتانسیل و دامنهٔ وسیعی که داره به شدت پر کاربرد در تمامی زمینه‌هاست، چون ذاتاً چند-منظوره هستش. قطعاً هم در زیرساخت‌های بلاک‌چینی به شدت کاربردیه و هم در لایه‌های بالا‌تر.

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

شما با این زبان نمی‌تونی وب‌سایت بسازی، نمی‌تونی بازی بسازی، نمی‌تونی هر کاری که با سی++ یا زبان‌های دیگه انجام میدادی رو پیش ببری، اما در عوض می‌تونی باهاش یک قرارداد کاملاً ایمن و خفن بنویسی که روی شبکهٔ وب ۳ حرف‌های بسیاری برای گفتن داره.

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

در زبان‌هایی مثل سالدیتی، چون همه چیز بر مبنای یک زبان قدرتمند‌تر مثل ++C ساخته شده، در نتیجه زمانی که برنامه‌نویس باید صرف کنه، صرفاً بهینه‌نویسی کد‌های قراردادش هست که تا حد امکان هزینه‌های تراکنش رو بیاره پایین! ما در دنیای وب ۳ مهم‌ترین موضوع در بین همهٔ توسعه‌دهنده‌ها یا کاربرانش هزینه‌های گس‌فی هست!

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

در نتیجه، نوشتن یک قرارداد که با بهینه‌ترین هزینه‌های تراکنشی الویت و اهمیت بسیاری در برنامه‌نویسی وب ۳ داره. مثلاً ما وقتی در کد‌های سطح پایین‌تر به فکر کارآیی هستیم، در دنیای سالیدیتی بیشتر به فکر بهبود هزینه‌های تراکنشی هستیم.

این موضوع از جنبه‌های مختلفی قابل بحث هست.

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

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

این طوریه که یکی مثل غول وب ۳ یعنی ۶۵۲۹ میاد ۶۰ هزار دلار فقط صرف هزینهٔ بهبود در باگ‌پانتی چند صد خط کد قرارداد بلاک‌چینش می‌کنه. 😉 چون کارآیی در چنین سطحی تعریف میشه نه در سطوح دیگر.

اینطوریاست که پشت سالیدیتی رو با یک زبان خفن‌تری محکم کردن که توسعه‌دهنده تمام تمرکزش روی بهینه‌سازی هزینه‌ها روی شبکه باشه نه اینکه دیگه بیاد اینجا به فکر این باشه حافظه رو چطور مدیریت کنم! خب اینارو برنامه‌نویسان حرفه‌ای تر تو اون پشت مشتا انجام میدن شما حالشو ببر قرارداد رو بنویس. 😉😁
👍4