تمامی فعالیت ها
این جریان به طور خودکار بروزرسانی می شود
- هفته گذشته
-
hajsalehi عضو سایت گردید
-
Pouya4879 عضو سایت گردید
-
rezaqomy عضو سایت گردید
-
ZAHRA GOLKAR عضو سایت گردید
- جدیدا
-
erfanmaster81 تصویر نمایه خود را تغییر داد
-
Sorena313 عضو سایت گردید
-
iceCode تصویر نمایه خود را تغییر داد
-
mohammad1383456@gmail.com عضو سایت گردید
-
Daddy69 عضو سایت گردید
-
mojtaba_mza تصویر نمایه خود را تغییر داد
-
hadi439 عضو سایت گردید
-
cheap herbal blends https://forums.dieviete.lv/profils/127605/forum/ sports prescription glasses
-
mahdi0099 عضو سایت گردید
-
triangleC24 عضو سایت گردید
-
alirezahassani95@gmail.com تصویر نمایه خود را تغییر داد
-
همه چیز در مورد مجوز و شرایط استفاده از کتابخانهٔ Qt
کامبیز اسدزاده نوشته وبلاگ را ارسال کرد در ابزارها
یکی از مهمترین و پرمخاطبترین سوألاتی که در مورد فریمورک کیوت پرسیده میشود، شرایط استفاده و مجوزهای مربوط به آن است؛ از آنجایی که این کتابخانه تحت پشتیبانی یک شرکت تجاری است، برخی از شرایط و قوائدی وضع شده است که در استفاده از آن باید دقت لازم را داشت. در این مقاله من قصد دارم به توضیحات و شفافسازی کامل در این خصوص بپردازم که امیدوارم از آن بهرهمند شده و به اشتراک بگذارید. بررسی مجوزهای جامع Qt ابزار Qt، یک چهارچوب قدرتمند برنامهنویسی چندسکویی است که انواع مختلفی از مجوزها را ارائه میدهد تا به نیازهای متنوع کاربران خود پاسخ دهد. با توجه به تاریخچهٔ غنیای که به آغاز توسعهٔ آن باز میگردد، Qt به تدریج به یکی از اصلیترین بازیگران در زمینه توسعه نرمافزار تبدیل شده است که در این مقاله به آن اشاره میکنیم. Qt تحت چندین گزینه مجوز مختلف قرار دارد که برای توسعه نرمافزارهای مختلف مناسب هستند که به صورت زیر تعریف شدهاند. مجوز تجاری Qt فریمورک کیوت، زیر مجوزهای تجاری مناسبی را برای توسعه نرمافزارهای تجاری فراهم کرده است که کاربران نمیخواهند کد منبع خود را با دیگران به اشتراک بگذارند یا نمیتوانند با شرایط نسخه 3 مجوز GNU LGPL (GNU Lesser General Public License) سازگاری یابند. مجوز LGPL Qt این مجوز برای توسعه نرمافزارهای Qt مناسب است، تا زمانی که شما میتوانید با شرایط نسخه 3 مجوز GNU LGPL (یا GNU GPL نسخه 3) سازگار باشید. مجوز بازار Qt (Qt Marketplace) اجزای Qt تحت توافقنامه مجوز بازار Qt مناسب برای توسعه نرمافزارهای Qt هستند، معمولاً با شرایط مجوز تجاری یا GNU LGPL (یا GNU GPL نسخه 3) برنامهریزی میشوند. استفاده از کد، از طریق مجوزهای متنباز فریمورک Qt شامل کدهای شخص ثالثی است که تحت مجوزهای خاص متنباز از نویسندگان اصلی مجوزدهی شدهاند. برخی از سوأل و پرسشهای جامعه و تیم کیوت در رابطه با مجوزها و اهداف آنها در توسعه چرا Qt همچنین زیر مجوز نرمافزار متن باز نیز منتشر میشود؟ ما به جنبش نرمافزار آزاد اعتقاد داریم که استفاده از نرمافزار با حقوق وظایف خاصی همراه است. استفاده از مجوزهای نرمافزار متن باز، به کاربران چهار درجه اصلی از آزادی را در استفاده از برنامهها یا دستگاههای Qt میدهد: آزادی اجرای برنامه برای هر هدفی. آزادی مطالعه نحوه عمل برنامه و سازگارسازی آن با نیازهای خاص. آزادی توزیع نسخههای کپی شده تا بتوانید به همسایه خود کمک کنید. آزادی بهبود برنامه و انتشار بهبودهای خود به عموم، تا کل جامعه بهرهمند شود. این آزادیها غیرقابل مذاکره و مطلق هستند، نمیتوان آنها را به صورت انتخابی یا جزئی تجربه کرد، شما همچنین موظف به انتقال آنها به کاربران خود هستید. چرا شما توافقی با KDE در مورد مجوزهای خود دارید؟ KDE چیست و تاریخچهٔ Qt و KDE چگونه است؟ توافق بین Qt و KDE دربارهٔ مجوزها، ریشه در تاریخچهٔ مشترک این دو نهاد دارد. KDE (kde.org) مخفف محیط کاری دسکتاپ (Desktop Environment) است که یک جامعهٔ بینالمللی نرمافزار آزاد است و در سال ۱۹۹۶ تأسیس شد. KDE به خاطر محیط کاری Plasma Desktop شناخته میشود که به عنوان محیط کاری پیشفرض در بسیاری از توزیعهای لینوکس به کار میرود. نرمافزارهای KDE بر پایهٔ چارچوب Qt ساخته میشوند. در اوایل توسعهٔ Qt، این چارچوب از یک مدل مجوز دوگانه برخوردار بود و کد منبع آن تحت مجوزهای متن باز اختصاصی قابل دسترس بود. با درک اهمیت Qt برای پروژههای خود، KDE تلاش کرد تا توافقاتی برای اطمینان از دسترسی به Qt تحت مجوزهای مناسب متن باز، حتی اگر Trolltech (شرکت بنیانگذار Qt) به تصرف بشود یا ورشکست شود، به دست آورد. نتیجهٔ این تفاهم، بنیاد آزاد KDE Qt (KDE Free Qt Foundation) تأسیس شد و توافقنامه بنیاد آزاد KDE Qt ایجاد شد. بنیاد آزاد KDE Qt یک سازمان با هدف ایمن کردن دسترسی به چارچوب Qt برای توسعهٔ نرمافزارهای آزاد و بهویژه برای توسعهٔ نرمافزارهای KDE است. این بنیاد در ابتدا توسط Trolltech و سازمان غیرانتفاعی حقوقی KDE (KDE e.V.) در سال ۱۹۹۸ تأسیس شد و یک توافقنامهٔ مجوز دارد که تأمین میکند که Qt برای پلتفرمهای اصلی دسکتاپ و موبایل تحت مجوزهای LGPLv3 و GPLv3 در دسترس است. این توافقنامه در طی سالها چندین بار بهروزرسانی شده است، عمدتاً به دلیل انجام معاملات مرتبط با Qt یا بهروزرسانی مجوزها و پلتفرمها. عدم رعایت محدودیتهای مجوزهای LGPL/GPL چه تبعاتی دارد؟ اگر نرمافزاری که از این کتابخانههای مجوز متنباز استفاده میکند، به طور کامل الزامات مجوز را رعایت نکند، شما حق استفادهٔ مجوز و حقوق توزیع مرتبط با آن را از دست خواهید داد. همچنین لازم به ذکر است که در بیشتر کشورها، نقض حقوق نسخهٔ پدیدآورندگان یک نقض تشریعی است، نه نقض قرارداد، و بنابراین تدابیر تشریعی مرتبط با این موضوع اعمال میشود. برای کسب اطلاعات بیشتر در مورد GPL، میتوانید به صفحه FAQ GPL از لینک آن مراجعه کنید. آیا میتوانم از نسخهٔ متن باز جوامع برای توسعه محصول تجاری خود استفاده کنم؟ این بستگی به نحوهٔ ارائه و ارائهٔ محصول شما دارد. نسخهٔ متن باز Qt اصلی به طور عمده تحت مجوز LGPL نسخه 3 و GPLv2/v3 منتشر میشود. شما باید الزامات مجوزهای این گونه را که در زمان استفاده از Qt در محصول خود باید رعایت کنید. تفاوت بین LGPLv2 و LGPLv3 چیست؟ LGPLv3 نسخه فعلی مجوز GNU Lesser General Public License است. LGPLv2.1 یک نسخه قدیمیتر است و برای پروژههای جدید توصیه نمیشود. هر دو مجوز همان هدف را دارند، یعنی حفاظت از آزادی کاربران برای استفاده و اصلاح نرمافزار تحت مجوز LGPL. LGPLv3 این هدف را به وضوح بیان میکند. شما باید چیزهایی را برای کاربر نهایی فراهم کنید تا نسخه اصلاح شدهٔ کتابخانه تحت مجوز LGPLv3 را نصب کرده و نرمافزار خود را با استفاده از آن کتابخانه اصلاح شده اجرا کند. در عمل، این به عنوان مثال به موارد زیر اشاره دارد: Tivoization – به وضوح اجازه ندهید دستگاههای بسته سازیشده ایجاد شود که کاربر نهایی حقوق مجوز LGPL برای کتابخانههای متن باز Qt را ندارد. DRM و رمزگذاری سختافزاری – نمیتوان از این تعهدات برای دور زدن این تعهدات استفاده کرد. انتقام از پتنت نرمافزار – جایی که تمام کاربران نرمافزار مجوزها را دارند، که این باعث بیمعنی شدن انتقام از پتنت نرمافزارهایی که ممکن است در نرمافزار منتشر شده، میشود. وظایف من چیستند هنگام استفاده از Qt تحت مجوز LGPL؟ در ابتدا، باید توجه داشته باشید که تمامی ماژولهای متن باز Qt تحت مجوز LGPLv3 در دسترس نیستند. برخی از ماژولها برای استفاده در نرمافزارهای متن باز تحت GPLv3 قرار دارند و برخی از اجزاء توسعهیافته توسط شخص ثالث مانند موتور وب Chromium تحت مجوز LGPLv2.1 در دسترس قرار گرفتهاند. زمانی که از ماژولها و کتابخانههای Qt تحت مجوز LGPLv3 استفاده میکنید، برخی از وظایفی که باید رعایت کنید به شرح زیر است: هنگام استفاده از نرمافزار متن باز، باید از مجوز هر نمونه، قطعه کد منبع، ماژول و کتابخانهای که در پروژه خود استفاده میکنید، آگاه باشید و مجوزهای مرتبط را ردیابی کنید. باید کد منبع کامل کتابخانههای Qt که استفاده کردهاید را به همراه تمام اصلاحات اعمال شده یا اعمال شده، به کاربران یا مشتریان خود ارائه دهید. به عنوان یک گزینه دیگر، میتوانید پیشنهاد نامهای با دستورالعملهایی در مورد چگونگی دریافت کد منبع ارائه دهید. لطفاً توجه داشته باشید که این باید تحت کنترل شما باشد، بنابراین ارائه یک لینک به کد منبع ارائهشده توسط پروژه Qt یا شرکت Qt کافی نیست. مجوز LGPL به شما این امکان را میدهد که کد منبع خود نرمافزار را به عنوان «کاری که از کتابخانه استفاده میکند» خصوصی نگهدارید. به طور معمول، در اینجا پیشنهاد میشود که از اتصال پویا استفاده کنید (برای کامپایل استاتیک این مورد مجاز نیست و نیاز به تهیهٔ مجوز دارد). کاربر نهایی باید قادر باشد نرمافزار شما را با یک نسخه مختلف یا اصلاحشده از کتابخانه Qt مجدداً لینک کند. با LGPLv3، به وضوح ذکر شده است که کاربر باید قادر باشد باینری مجدداً لینکشده را بر روی دستگاه هدف خود اجرا کند. این وظیفه به شما محول است که کاربر را با همه ابزارهای لازم برای فعال کردن این فرآیند تجهیز کنید. برای دستگاههای جاسازیشده، این شامل فراهمکردن تمام ابزارهایی است که برای کامپایل کتابخانه استفادهشده به کاربران مورد نیاز است. برای اجزاء مجوزده LGPLv3، شما موظف به ارائه دستورالعملهای کامل در مورد نصب کتابخانه اصلاحشده بر روی دستگاه هدف هستید (این با LGPLv2.1 به طور واضح بیان نشده است، اگرچه اجرای برنامه در برابر نسخهٔ اصلاح شدهٔ کتابخانه با هدف اعلام شده در مجوز است). کاربری که از یک برنامه یا دستگاه که از نرمافزار متن باز تحت مجوز LGPL استفاده میکند، باید از حقوق خود مطلع شود، با ارائه یک نسخه از مجوز LGPL به کاربر نهایی و نمایش اعلان مشهور در مورد استفاده شما از نرمافزار متن باز باید اعلام شود. این آزادیها به هیچ وجه توسط شرایط دیگر مجوز گزینشی نمیتوانند محدود شوند؛ اگر یک برنامه به کلی از تمام وظایفی که در بالا ذکر شده است پیروی نکند، اجازه توزیع آن به هیچ وجه داده نمیشود. همچنین باید اطمینان حاصل کنید که از هیچ ماژولی که تحت مجوز GPL استفاده نمیکنید. آیا نیاز است که از مجوز LGPL هنگام استفاده از نسخهٔ تجاری Qt نگران باشم؟ به طور معمول، خیر. هنگام استفاده از نسخهٔ تجاری مجوزگذاری شده Qt، ما تقریباً تمامی بخشها را تحت شرایط یک مجوز تجاری ارائه میدهیم. هرچند، چندین ماژول در Qt از کد منبع پروژههای متن باز شخص ثالث مانند Qt WebEngine استفاده میکنند که از پروژه Chromium با مجوز LGPLv2.1 استفاده میکند. بنابراین، هنگام استفاده از این ماژولها، شما باید از تعهدات مجوز مرتبط رعایت کنید، در مورد Chromium این موضوع به مجوز LGPLv2.1 اشاره دارد. تمامی ماژولها و وابستگیهای شخص ثالثی که توسط ماژولهای مختلف Qt استفاده میشوند، در مستندات Qt برای هر نسخه از Qt مستند شدهاند. به عنوان یک کاربر مجوز تجاری، در عمل، تنها نیاز دارید که به تعهدات مجوز LGPLv2.1 اهمیت بدهید، و تنها اگر از Qt WebEngine استفاده کنید. چه کاری باید انجام دهم؟ مطمئن نیستم که مطابق مجوزهای متن باز هستم؟ از مجوزهای متن باز گیج شدهام، چه باید انجام دهم؟ همیشه خوشحال هستیم که با شما درباره وضعیتتان صحبت کنیم، اما ما در جایی نیستیم که مشاوره حقوقی ارائه دهیم. همیشه توصیه میشود با یک وکیل که با مجوزهای متن باز آشنا است، تماس بگیرید تا یک بررسی کامل از پروژه شما صورت گیرد و تصمیم گیری شود که آیا شما میتوانید تمامی تعهدات مجوزهای متن باز مربوطه (مانند LGPLv/GPLv) را انجام دهید یا خیر. مجوز تجاری Qt چگونه کار می کند؟ آیا همه توسعه دهندگان من باید مجوز معتبر Qt داشته باشند؟ در رابطه با مجوزهای تجاری، هر کاربر Qt باید مجوز تجاری Qt مختص خود را داشته باشد. طراحان رابط کاربری، هنرمندان فنی، توسعهدهندگان نرمافزار یا مهندسان اتوماسیون تست ممکن است انواع مختلفی از مجوزهای Qt داشته باشند، اما هر فرد باید یک مجوز اشتراک معتبر داشته باشد. آیا میتوانم کد نوشتهشده با Qt متن باز را با Qt تجاری مجوزگذاری شده ترکیب کنم؟ خیر. اگر میخواهید از Qt متن باز به یک مجوز تجاری مهاجرت کنید، لطفاً با فروشگاه Qt تماس بگیرید. برای این سوال، موارد بیشتری نیز در لینک FAQ مجوزگذاری تجاری Qt وجود دارد. آیا امکان توزیع برنامههای توسعه یافته با نسخهٔ متن باز Qt از طریق فروشگاههای عمومی وجود دارد؟ هر فروشگاه اپلیکیشن شرایط و مقررات منحصر به فردی دارد که ممکن است با توزیع برنامهها تحت مجوزهای LGPL یا GPL سازگار یا سازگار نباشد. مجوز تجاری Qt با شرایط و مقررات تمامی فروشگاههای اپلیکیشن معتبر سازگار است و بنابراین معمولاً بهترین گزینه برای توزیع یک برنامه به صورت منبع بسته در فروشگاههای مختلف است. من شروع به توسعه یک محصول با استفاده از نسخهٔ متن باز Qt کردهام، حالا میتوانم یک نسخهٔ تجاری از Qt خریداری کرده و کدم را تحت آن مجوز قرار دهم؟ بله. پروژههای توزیعشده تحت نسخهٔ تجاری Qt نیز باید تحت نسخهٔ تجاری Qt توسعه یابند. اگر قبلاً توسعه را با نسخهٔ متن باز Qt شروع کردهاید، ما به همکاری برای یافتن یک راهحل برای انتقال پایه کد شما از حاکمیت متن باز به مجوز تجاری میپردازیم. اگر از ابتدا مطمئن نیستید که از کدام مجوز یا نسخه برای شروع توسعه استفاده کنید، توصیه میشود با The Qt Company تماس بگیرید تا بر اساس نیازهای توسعهی خود شما راهنمایی شود. ممکن است در یک برنامه از کتابخانههای دارای مجوز LGPLv2.1 و LGPLv3 استفاده کرد؟ بله، امکان استفاده از هر دو نسخهٔ مجوز LGPLv2.1 و LGPLv3 در یک برنامه وجود دارد، به عنوان مثال با استفاده از آنها به عنوان کتابخانههای جداگانه به عنوان shared libraries. انجام این کار نیاز به تغییر مجوز در هیچ یک از کتابخانهها ندارد و در صورت نیاز، امکان انتخاب یک مجوز مولد برای برنامه وجود دارد. ماتریس سازگاری GNU نشان میدهد که من نمیتوانم LGPLv2 و LGPLv3 را ترکیب کنم؟ اگر کد LGPLv2.1 و کد LGPLv3 در کتابخانههای جداگانه به عنوان shared libraries قرار داده شوند، میتوانند در یک برنامه استفاده شوند، و شما میتوانید برنامه خود را با یک مجوز مالکیتی / LGPLv2.1 / LGPLv3 به دلخواه خود مجوزگذاری کنید. در مورد نسخهٔ مجوز LGPL/GPL که شما استفاده میکنید، چه کسانی مهم هستند؟ شما، مشتریان شما و کاربران نهایی، مگر اینکه از Qt تحت یک مجوز تجاری استفاده کنید. مجوزهای copyleft مانند LGPL و GPL به این معناست که مجوز با محصول شما به مشتریان و کاربران یا راهحل شما همراه میشود. با توجه به تمامی توضیحات موجود، به طور خلاصه چه زمانی نیاز به تهیهٔ مجوزهای کیوت داریم؟ تهیهٔ مجوز کتابخانه Qt بستگی به نوع کاربرد و نیازهای پروژه دارد. جوانب مختلفی که تعیین میکنند چه زمانی نیاز به مجوز Qt داریم و چه مواردی ممکن است بدون نیاز به مجوز باشند. استفادهٔ شخصی: نیاز به مجوز: اگر برنامهنویس قصد استفاده از Qt را برای توسعهٔ پروژهٔ شخصی و خصوصی دارد بدون انتشار کد منبع، نیاز به مجوز ندارد. در این حالت، میتوان از Qt به صورت رایگان استفاده کرد. بدون نیاز به مجوز: استفاده از Qt برای پروژههای شخصی بدون هدف انتشار کد منبع با محدودیتی همراه نخواهد بود. توسعهٔ نرمافزار باز (Open Source): نیاز به مجوز: اگر قصد توسعهٔ یک نرمافزار منبع باز با Qt را دارید و میخواهید کد منبع خود را نیز تحت یک مجوز Open Source انتشار دهید، نیاز به مجوز GPL یا LGPL خواهید داشت. بدون نیاز به مجوز: اگر نیازی به انتشار کد منبع ندارید و از Qt برای پروژه منبع باز خود استفاده میکنید، میتوانید از نسخهٔ Qt با مجوز LGPL بدون مشکل استفاده کنید. توسعهٔ نرمافزار تجاری (Commercial Software): نیاز به مجوز: اگر قصد توسعهٔ نرمافزار تجاری دارید و نمیخواهید کد منبع خود را انتشار دهید، نیاز به مجوز تجاری Qt دارید. بدون نیاز به مجوز: اگر از Qt برای توسعهٔ یک نرمافزار تجاری استفاده میکنید و توافق به اشتراکگذاری کد منبع ندارید، میتوانید از نسخهٔ تجاری Qt بهرهمند شوید. توسعهٔ نرمافزار تحت LGPL: نیاز به مجوز: اگر میخواهید نرمافزار تجاری توسعه دهید، اما نیاز به استفاده از کتابخانه Qt دارید و میخواهید تغییرات خود را در کتابخانه منتشر کنید، باید از مجوز LGPL استفاده کنید. بدون نیاز به مجوز: اگر قصد استفاده از Qt را در یک نرمافزار تجاری با حفظ محرمانگی کد دارید، میتوانید از مجوز تجاری Qt بهرهمند شوید. برخی از نکات را نیز باید در نظر بگیرید، مانند نوع کامپایل و نوع مجوزهای قابل پذیرش در فروشگاهها که عموماً همهٔ آنها را توضیح دادیم به چه صورت هستند.-
- qt license
- license
- (و 4 مورد دیگر)
-
سیپلاسپلاس مدرن
کامبیز اسدزاده پاسخی برای کامبیز اسدزاده در یک موضوع ارسال کرد در کتابخانههای استاندارد STL
جزئیات، بهروز رسانیها و ویژگیهای C++23 همانطور که می دانیم، مدیریت خطا در سیپلاسپلاس به وسیلهٔ بیانیههای try، catch و throw انجام میشود. این ویژگی به برنامهنویس این امکان را میدهد که خطاها را شناسایی کرده و به دستهبندی کرده و سپس به شکل مناسبی برخورد کند. همچنین کلاسهایی مانند std::exception یک کلاس پایه در سیپلاسپلاس است که برای نمایش استثناءها (خطاها) در هنگام اجرای برنامه استفاده میشود. این کلاس یک رابط عمومی به نام what دارد که متنی که توضیح خطا را حاوی میشود، به عنوان یک رشته C-style (const char*) باز میگرداند. مدیریت خطای جدید std::expected معرفی شده در استاندارد ۲۳ در استاندارد جدید ۲۳ گزینهٔ std::expected معرفی شدهاست که اجازه میدهد خطاها را بهتر مدیریت کنیم. این نوع داده به شما این امکان را میدهد که یک عدد بازگشتی معمولی (نتیجه موفقیتآمیز) یا یک کد خطا (نتیجه ناموفق) را با هم در یک متغیر ذخیره کنید. برای برنامه نویسانی که از این نوع داده استفاده میکنند، کد برنامه خواناتر و قابلفهمتر است. استفاده از std::expected معمولاً در جاهایی مناسب است که خطاها قابل پیشبینی و مدیریت شوند. در زیر یک نمونه کد در قالب مثال بر پایهٔ سیپلاسپلاس جدید آورده شده است: import <print>; import <expected>; enum class ErrorType { InvalidName, NotFound, OtherError }; auto getName(std::string name) -> std::expected<std::string, ErrorType> { if (name != "Kambiz") { return std::unexpected(ErrorType::InvalidName); } return name; } auto main() -> int { auto result = getName("Compez"); if (result.has_value()) { std::println("Result: {}", result.value()); } else { ErrorType error = result.error(); switch (error) { case ErrorType::InvalidName: std::println("Error: Invalid Name!"); break; case ErrorType::NotFound: std::println("Error: Not Found!"); break; case ErrorType::OtherError: std::println("Error: Other Error!"); break; } } return 0; } در اینجا، یک تابع به نام getName تعریف شده است که یک نام به عنوان ورودی دریافت میکند و یک std::expected را باز میگرداند. اگر نام "Kambiz" نباشد، یک std::unexpected با ErrorType::InvalidName ایجاد میشود و اگر نام معتبر باشد، خود نام به عنوان مقدار بازگشتی استفاده میشود. سپس در تابع main، ما از تابع getName برای دریافت نتیجه استفاده میکنیم. اگر نتیجه دارای مقدار باشد (با فراخوانیhas_value())، آن مقدار با استفاده از value() چاپ میشود. اگر نتیجه دارای خطا باشد، ما با استفاده از error() نوع خطا را دریافت کرده و با استفاده از یک switch به تصمیمات مرتبط با نوع خطا میرسیم و پیام مناسب چاپ میشود. توجه داشته باشید که در دسترسی بهerror()، ممکن است بعضی از پیادهسازیهای expected به جای error() از value() برای دسترسی به خطا استفاده کنند. به نظر میرسد این ویژگی میتواند به صورت چشمگیری روش مدیریت خطاها را بهبود سازد. ماژولها و وارد کردن کتابخانههای استاندارد به پروژه به صورت ساده و بهینه توسطimport std; و import std.compat; در استاندارد ۲۳ قبلاً من توی پروژهٔ سل و حتی قالب PT یه بخشی برای بهبود و بهینهسازی فایلهای کتابخانهٔ استاندارد (هدر فایلها) به عنوان pch گذاشته بودم. این کار باعث میشد که پروژه در سرتاسرش هر جا اس کتابخانهٔ STL استفاده میشد رو نیازی به وارد کردن فایلها نباشه. این کار موجب بهینگی کامپایل میشه. حالا توی استاندارد ۲۳ چیزی مشابه این موضوع رو به صورت استاندارد شده تعبیه کردن که از شلوغی و اضافات لازم به شدت جلو گیری میکنه و سرعت کامپایل هم افزایش پیدا میکنه. ️ بهتر بخوام توضیح بدم دیگه نیازی نیست کدی مثل زیر داشته باشید: #include <algorithm> #include <array> #include <print> auto main() -> int { std::array<int, 10> s {5, 7, 4, 2, 8, 6, 1, 9, 0, 3}; std::sort(s.begin(), s.end()); for(auto el : s) { std::println("Sorted Index: {}", el); } } کافیه به شیوهٔ زیر بنویسید: import std; auto main() -> int { std::array<int, 10> s {5, 7, 4, 2, 8, 6, 1, 9, 0, 3}; std::sort(s.begin(), s.end()); for(auto el : s) { std::println("Sorted Index: {}", el); } } در واقع استفاده از ;import std تمامی کتابخانههای استاندارد رو وارد میکنه و استفاده از ;import std.compat مثل همون هست اما با تفاوت این که کتابخانههای عمومی C رو هم وارد خواهد کرد. فکرشو بکن دهها و صدها کتابخانه STL رو وارد فایلها میکنی! اما الآن کافیه همین یه خط رو بنویسی دنیای ماژولها در سیپلاسپلاس جدید خیلی تمیزه!- 4 پاسخ
-
- استاندارد جدید
- مدرن
-
(و 8 مورد دیگر)
برچسب زده شده با :
-
هر آنچه که باید در مورد تفاوتهای ناگفتهٔ سیپلاسپلاس و راست بدانیم
کامبیز اسدزاده نوشته وبلاگ را ارسال کرد در ابزارها
توضیحاتی که در این پست ارائه میکنم، به منظور این نیست که بگم چیزی بد هست یا چیزی خوب! یکی بهتر است و دیگری بدتر! اما دوست دارم بیشتر با جو تبلیغاتی غالب روی چیزی نظر ندیم و در برنامهنویسی هم شخصاً تمایل دارم به بالاترین سطح ممکن از آزادی عمل در یک ابزار برسم که همه چیز رو برای یک برنامهنویس فراهم میکنه. مثالی که قبلاً زده بودم همون بحث باغوحش و حیاط وحش بهترین مثال ممکن هست که میتونستم بزنم ولی خب اهل تفکر باید باشی تا بفهمی چی گفتم. بذار یه چیزهایی در مورد Rust و C و ++C بهتون بگم تا دیگه نیازی برای ادامهٔ بحثهای پیش پا افتاده نباشه (این بحثها مسخرست و صرفاً وقت شما رو میگیره، اما آگاهی داشتن در موردش میتونه دیدگاه بهتری برای پیشروی بهتون بده) اما موضوعاتی که بهش اشاره میکنم رو اگه کمی عمیقتر بهش دقت کنی، خواهی دید که چرا چیزی مثل سیپلاسپلاس واقعاً بیرقیبه. قبل از هر چیز بهتره مروری از به وجود اومدن این زبانها رو داشته باشیم: وقتی در دههٔ ۷۰ میلادی زبان C به وجود اومد، به عنوان یک ابزار به شدت قابل تحسین با ۱۰۰٪ آزادگی عمل معرفی شد، شما هر سیستم و هر ساختاری رو که میخواستی میتونستی باهاش بسازی! به هر حال کامپیوتر یک جهان جدیدی بود و هر چیزی در اون میتونست یک فرصت باشه؛ همین الآن بعد از گذشت ۵۲ سال خیلیها فکر میکنن این زبان منسوخ شده! در حالی که طبق آخرین مستندات N3096 استاندارد C23 در ۲ آوریل ۲۰۲۳ به صورت پیشنمایش منتشر شده و هنوز هم در حال توسعه و پیشرفته! یادتونه گفتم هیچ ابزار و فناوریای تا زمانی که در حال توسعه باشه، غلطه که بهش بگیم منسوخ شد! تقریباً ۳۹ سال پیش، وقتی سیپلاسپلاس به وجود اومد کاملاً ویژگیهای C رو به ارث برد، در واقع هر چیزی که C داره، هم مشکلات و هم مزایا در ++C هم وجود داره اما خیلی فراتر از مباحثی که فکرش رو میکردند به یک باره توسعهپذیر شد. خیلی خب باید بپذیریم مشکلاتی که C داشته را هم در بعضی جاها ++C خواهد داشت، اما نه به صورت یک مانع! چون برای همشون راهکار وجود داره، هیچ چیز بی دلیل ساخته نمیشه، این رو مطمئن باش بهروز رسانیها بی دلیل نیستند. در مورد Rust، که ۸ سال پیش وقتی به وجود اومد که حتی به ۱۰ سال هم عمر و پختگیش نمیرسه صرفاً تمرکزش به ادامهٔ مسیرهای مشابه زبانهای مدیریت شده بود اما در حوزهها و منظورهای متنوعتر که این موضوع جذابش میکنه. راست یک زبان سیستمی هست اما با دارا بودن خاصیت Ownership که به همراه یک سری قوانین مثل Transfer Rules و Borrowing خیال شما رو از بحث ایمنی راحت میکنه. همین موضوع مسیر Rust رو با C و ++C جدا میکنه و قابل قیاس نیستند که در ادامه میگم چرا. موضوع مدیریت خودکار حافظه این بحث برتری حساب نمیشه چون توی سی++ مدرن ما راهکارهای مشخصی برای مدیریت این مسائل داریم. خب یعنی چی یه ابزار داشته باشیم که بیاد امکان برنامهنویسی سیستمی رو بده اما مطمئن؟! قطعاً یه جای کار داره میلنگه! عین اینه که بگی من اینترنت دارم ولی فیلترینگ شدیدی روش هست، بله نمیذاره من آزادانه و اونطور که میخوام پیش برم، هرجا ریسکی بود به عهدهٔ خودمه هرجا خیری بود باز به نفع خودمه. زور و فشار هیچوقت موجب پیشرفت عمیق نمیشه حتی در فناوری! چون شما اختیار عمل ندارید و محبورید با محدودیتهایی که اعمال میشه پیشروی کنید. ساختار مهمی که راست داره بحث موضوع Ownership یا همون مالکیت هست، این یعنی چی؟ یعنی مالک خودش شیءای هست که مسئولیت مدیریت حافظهٔ اختصاص داده شده به یک شیء رو به عهده میگیره. در کنار این موضوع قانون انتقال یا همون Transfer میگه که هر شیءای فقط یک مالک داره و مالکیت اونها تنها میتونه به یک شیء دیگر منتقل بشه! این یک قانون اصلی و مهم در راست هست که برای تضمین این موضوع قانون امانت یا همون Borrowing میگه که اگه میخوای از یک شیء به عنوان مالک نهایی استفاده کنی، میتونی مالکیت به شکل امانت رو به شیء دیگری انتقال بدی که در حالت قرضی یا موقتی ممکن هست اما اجازه نداری هرطور که دلت خواست ازش استفاده کنی. خب این قانون محدودیتهای شدیدی رو ایجاد میکنه، اما در عوض بله تضمین میکنه که مدیریت حافظه مطمئن هست. این باعث میشه خطاهای حافظه به خاطر وجود مالکیت اختصاصی، که در زمان کامپایل، کامپایلر تعیین میکنه که چه زمانی باید حافظه آزاد بشه رو جلوگیری میکنه. شما نمیتونید به صورت آزاد روی مدیریت حافظه حرفی برای گفتن داشته باشید چون شما آزادی عمل ندارید. در مقابل در سیپلاسپلاس بدون هیچ محدودیتی از این موضوع بهره میبرید. دسترسی به لایههای سختافزاری عمیق و پشتیبانی از abiهای سیستمعاملها به صورت کامل تحت راست ممکن نیست مگر اینکه به صورت اختصاصی نسبت به هر abi در اختیار شما خارج از استانداردها قرار بگیره، چیزی که در سیپلاسپلاس همه چیز به صورت استاندارد در اختیار توسعهدهنده قرار میگیره. کتابخانههای استاندارد Rust قابلیت کنترل مستقیم روی ترد (نخ)ها رو ارائه نمیکنه هرچند مدعی هستن که از روشهای crate در کامپایلر راست در زمان اجرا با استفاده از thread_priorityها قابل پیادهسازی هست اما با این حال، هیچوقت در سطح فوریتی به اندازهٔ APIهای استاندارد ++C قابل استفاده نیست، حتی C هم در این حد و اندازه امکان مدیریت سختافزار رو برای شما نمیده. در صورتی که در Rust لایهٔ امنیتی رو فعال هست (چیزی که به صورت پیشفرض در راست فعال هست) دیگه امکان دسترسی به لایههای سختافزاری رو از دست خواهید داد. در حالی که سی++ این امکان رو به صورت کاملاً آزاد در اختیار شما قرار میده و شما با پذیرش خطر اون اگر تسلط خوبی داشته باشید میتونید به بهترین شکل ممکن دسترسی نامحدود به این موضوع رو در اختیار بگیرید. شما در راست فقط حق انتخاب بر مبنای قوائد از پیش تعریف شده رو دارید، یا ایمن باش و محدود باش، یا ایمن نباش و باز هم محدود باش! این در سی++ برعکسه! شما یا باید کد ایمن بنویسی و در عین حال به بالاترین کارآیی دسترسی داشته باشی، یا باید به خاطر عدم داشتن تسلط بالا خطرهاش رو بپذیری که صد البته برای کاهش مسائل راهکارهای استانداردهای جدید بهترین گزینست. تمام چیزی که راست ادعا کرده کلاً بر مبنای محدودیتهای اعمال شده هست، برای مثال شما هیچ راه استاندارد و بومی شدهای برای دسترسی APIهای سیستمی به شیوهٔ مستقل از سکو رو ندارید مگر مواردی چون windows-rs و مشابهش که کاملاً خارج از بحث استاندارد و به نوع سوم در دسترس توسعهدهندهها قرار میگیرند و مناسب چند-سکویی واقعی نیست. جامعهٔ پخته و اکوسیستم راست هیچوقت به اندازهٔ زبانهای C و ++C گسترده نیست و کتابخانههای استانداردِ بیشماری از این بابت در اختیار توسعهدهندهها قرار نگرفته و این قابلیت مقایسه با عمق مستنداتی که طی چندین دهه برای زبانهای دیگه موجود هست رو نداره. راست به معنای واقعی کلمه یک زبان ایمن هست اما با فعال بودن لایهٔ ایمنی، قدرتمند نیست و زیرساختهای سنگین که قدرت مانور کامل روی سختافزار رو به شما بده. راست به هیچ عنوان بهینگی لازم رو به خاطر قوائد ایمنی در زمان اجرا (Run-Time) رو نداره در حالی که در ++C شما بهینگی به شدت بالایی رو برای زمان اجرا میتونید اعمال کنید. در راست که مدعیه یک زبان سطحپایین هست، ما مفهومی به عنوان Placement new نداریم، حتی معنا هم براش نداره چون دیگه محدودیت مالکیت (Onwership) با این موضوع هم خونی نداره و چنین ادعاهایی رو راحت رد میکنه. در سطوح پیشرفته، توسعهدهنده در ++C با استفاده از Placement new، میتونه یک شیء رو در یک مکان خاص از حافظه ایجاد کنه، بدون اینکه حافظه جدیدی بهش اختصاص بده! این امکان به شما اجازه میده که به طور دقیق مشخص کنید کجا باید یک شیء ایجاد بشه! چیزی که حتی در C هم به اندازهٔ ++C در مورد کنترل، سازگاری و انعطافپذیری در مدیریت حافظه رو به ارائه نمیکنه. و اما در مورد بحث مسائل زمان اجرا و کامپایل، بله راست به دلیل ویژگیهایی که داره در زمان کامپایل مشکلات قابل بروز در زمان اجرا رو کنترل میکنه، در مقابل استانداردهای جدید از سیپلاسپلاس نیز ویژگیهایی مثل Contractsها و Conceptsها رو برای این منظور در نظر گرفته که اگه با استاندارد جدید آشنا نباشید طبیعتاً کدهای شما در زمان اجرا ممکنه ایمن نباشه. خلاصهٔ کلام اینه که هر زبانی در جای خودش مزایا و معایب خودش رو داره که معمولاً برای تبلیغات و حمایت شدن توسط جامعه، طبیعیه که باید بعضی از مسائل رو نادیده بگیره و بعضی از مزایا رو بیشتر مطرح کنه. در مورد راست هم همینطور، در مورد سیپلاسپلاس هم همینطور! نا نمیتونیم بگیم همه چیز بده یا همه چیز خوبه! قطعاً در مقابل امنیت شک نکنید باید یک سری چیزها رو در نظر بگیرید و در مورد آزادی توسعه توسط یک زبان هم همچنین. بهروز رسانیهای اخیر سیپلاسپلاس طوری پیش رفته که وقتی بخوای به عنوان یک زبان مدرن ازش استفاده کنی، اصولاً دیگه جای بحثی از نظر ترس و وحشت یا مشکلات حافظه یا چنین مسائلی باقی نمیمونه. این بر میگرده به توسعهدهنده که واقعاً از چه نسل و استانداردی تبعیت میکنه.-
- سپلاسپلاس
- راست
- (و 4 مورد دیگر)
-
چرا ساتوشی ناکاموتو ++C را برای ساخت بیتکوین انتخاب کرد و نظر سازندهٔ سیپلاسپلاس در این باره چیست؟
کامبیز اسدزاده نوشته وبلاگ را ارسال کرد در فناوری
بیتکوین در سال ۲۰۰۹ به عنوان یک ارز دیجیتال و یک پلتفرم غیرمتمرکز همتا به همتا راه انداخته شد که کنترل اموال را به همه افراد میدهد. ساتوشی ناکاموتو این پلتفرم را معرفی کرد و از آن زمان به کاربری گسترده رسیده و سرمایهگذاری با ارزش بازار بیش از ۳۵۳ میلیارد دلاری را به دست آورده است. به عنوان یک گزینه سرمایهگذاری، بیتکوین دارای ماهیت نوسانی است و برای افرادی که حاضر به پذیرش ریسک هستند، ثروتآفرین بوده است. حتی برخی از متخصصان مالی ادعا میکنند که قیمت یک بیتکوین ممکن است در چند سال آینده به بیش از ۴۰۰ هزار دلار برسد، این که این دارایی بهتر از طلا به عنوان یک ذخیره ارز باشد. فناوری مورد استفاده در بیت کوین نیز در نوع خود بی نظیر است. ناکاموتو استفاده از الگوریتم های ++C را برای طراحی این فناوری مالی انتخاب کرد، اما چرا؟ مدیریت حافظه مدیریت منابع یکی از حیاتیترین مسائلی است که توسعهدهندگان در هنگام ایجاد نرمافزار در نظر میگیرند. برای اینکه یک نرمافزار بتواند کلیه ویژگیهای خود را به دست آورده و همچنان در ارائه خدمات بسیار موثر باقی بماند، باید پروتکلهای مناسب مدیریت منابع داشته باشد. در توسعه بلاکچین، وضعیت تا حد زیادی تفاوت ندارد. از آنجا که بلاکچین خدماتی را به میلیونها نفر و نهاد ارائه میدهد، باید برای کارایی در ارائه خدمات بسیار مقیاسپذیر باشد. تحقیقات اخیر از Statista نشان میدهد که شبکه بیتکوین در سومین سهماه سال ۲۰۲۰ بیش از ۳۵۰ هزار تراکنش روزانه داشت. بعضی از این تراکنشها شامل مقادیر زیادی پول دیجیتال هستند و به عنوان نتیجه نیاز به محاسبات طولانی دارند. ایده اصلی ایجاد بلاکچین توسط ناکاموتو، ایجاد یک شبکه برای تسهیل تعاملات مالی و تسریع در فرآیندها بود. بهترین زبان برنامهنویسی برای یک سیستم با این ویژگیها الگوریتمهای سیپلاسپلاس است. الگوریتمهای سیپلاسپلاس میتوانند با استفاده بهینه از منابع و کنترل بر روی استفاده از CPU و حافظه، در سطح بهترین عمل کنند. این الگوریتم همچنین به بلاکچین اجازه میدهد تا بلوکها را پذیرفته یا رد کند، بنابراین هر گونه تفکیک در بلاکچین را از بین میبرد. استفاده از C++ بنابراین به پلتفرم کمک میکند تا با نرخ سریع با نقاط پایان مختلف تعامل کند. جداسازی کد توسعه نرمافزار، شامل بلاکچین، باید فضای کافی برای عملیات تعیینپذیر فراهم کند. در مورد بلاکچین، عملکردهای تعیینپذیر، هنگامی که به درستی اجرا میشوند، تضمین میکنند که تراکنشها و فرآیندهای داخلی مانند قراردادهای هوشمند همواره به یک شیوه خدمت میکنند حتی زمانی که در دستگاههای مختلف قرار دارند. اما تنها راه توسعهدهندگان و متخصصان کد نحوه دستیابی کامل به عملیات تعیینپذیر را اعمال جداسازی کدها میدانند. چه چیزهایی باید توسعهدهندگان جدا کنند؟ از آنجا که عملکردهای اجرا شده تعیینپذیر هستند، توسعهدهندگان باید راهی برای جدا کردن عناصر غیرتعیینپذیر از کد قرار دهند. سیپلاسپلاس از قابلیتهای فضای نام (namespace) بهرهمند است که به برنامههای دیگر قابل انتقال هستند. این فضاهای نام به جلوگیری از تداخل در عملکرد کدها کمک میکنند. همچنین ویژگی کلاس وجود دارد که به جدا کردن و تعیین مرزها بین API کمک میکند. قابلیت اطمینان و رسالت ++C یکی از ویژگیهای حیاتی دیگری که به انتخاب ساتوشی ناکاموتو از سیپلاسپلاس به عنوان زبان اصلی برنامهنویسی بیتکوین کمک کرد، ویرایش و بهروز رسانیهای اساسی سیپلاسپلاس است. ++C اغلب بهروزرسانی میشود تا اطمینان حاصل شود که همواره باقی بماند و قابل اطمینان و بهروز باشد. علاوه بر این، ++C دارای ابزارهای دیباگ و تجزیه و تحلیل مختلف است، تمامی این ابزارها به تقویت عملکرد آن کمک میکنند. این ابزارها همچنین امکان شناسایی هر مشکلی را در زمان برنامهنویسی فراهم میکنند. قابلیت اطمینان و ویرایش سیپلاسپلاس آن را به پایدارترین زبان برنامهنویسی برای توسعه بیتکوین تبدیل میکند که همچنین اطمینان میدهد که نرمافزار ساخته شده دارای امنیت بسیار بالاتری باشد. نخها (Threading) نخها یا ترد، در برنامهنویسی شامل یک مجموعه از دستورالعملها، فعالیتها یا وظایفی هستند که میتوانند به طور صاف یا هماهنگ با یکدیگر اجرا شوند. دو نوع عملکرد باید در هر نرمافزار یکپارچه باشند، یعنی وظایف موازی و غیرموازی. یک پروژه بلاکچین بیتکوین هرگز نمیتوانست کار کند اگر وظایف موازی و غیرموازی هماهنگ عمل نمیکردند. اما یکی از پیچیدهترین چیزها در برنامهنویسی، ادغام این وظایف است و بیشتر زبانهای برنامهنویسی در حال حاضر معمولاً تمرکز بر روی یکی از این دو وظیفه، یعنی موازی یا غیرموازی دارند. اما سیپلاسپلاس یکی از قابلیتهای نخی قابل تحسین دارد که توسعهدهنده را قادر میسازد همزمان از هر دو وظیفه موازی و غیرموازی استفاده کند. سیپلاسپلاس میتواند بهطور کارآمد نخهای چندگانه را اجرا کرده و امکان ارتباط همگانی و قابل اعتماد بین تمام نخها را فراهم کند. علاوه بر این، نخهای ایجاد شده توسط سیپلاسپلاس میتوانند در نقطه بهینهترین عمل کنند، بنابراین کل بلاکچین به طور بهینه عمل میکند. با توجه به عملکرد بهینه این زبان، میتوان گفت یک دلیل دیگر که ساتوشی ناکاموتو از سیپلاسپلاس استفاده کرد، این است که این زبان امکان نخبندی آسان برای وظایف موازی و غیرموازی را فراهم میکند. قابلیت (Move Semantics) قابلیت (Move Semantics) یک عملکرد است که به توسعهدهندگان امکان میدهد محتوا را بین اشیاء جابجا کنند به جای اینکه فقط محتوا را کپی کنند. با استفاده از قابلیت جابهجایی اشیاء و ...، توسعهدهندگان و کاربران بر اساس نیاز دسترسی به کپیهای مختلف اطلاعات دارند، که عملکرد را افزایش داده و تکرار را کاهش میدهد. تبعیت از استانداردها و رعایت قوائد انرژی سبز انرژی سبز یکی از چالشهای اصلی در صنعت بلاکچین و تولید بیتکوین است. به دلیل محاسبات پیچیده و فرآیند استخراج معدنی که برای تولید بیتکوین انجام میشود، مصرف انرژی این فعالیتها به سرعت افزایش مییابد. سیپلاسپلاس به عنوان زبان اصلی برنامهنویسی بیتکوین، به طور چشمگیری به بهینهسازی مصرف انرژی متمایل است. استانداردهای مصرف بهینه انرژی در طراحی و اجرای برنامهها، این زبان را به یک انتخاب پایدار برای پروژههای مرتبط با بلاکچین و ارزهای دیجیتال میکند. این به معنای کاهش آثار منفی بر محیط زیست و همچنین صرفهجویی در هزینههای انرژی مرتبط با فرآیند تولید بیتکوین میباشد. همچنین، با توجه به گستردگی بیتکوین و تاثیر زیاد آن بر مصرف انرژی جهان، تلاش برای استفاده از زبانهای برنامهنویسی با بهینهترین مصرف انرژی، اهمیت فوقالعادهای پیدا کرده است. سیپلاسپلاس با امکانات بهینهسازی و مدیریت منابع به کاربران این امکان را میدهد که به نحوی کارایی انرژی را بهبود بخشند و در طولانی مدت، اثرات محیطی مرتبط با تولید بیتکوین را کاهش دهند. از این رو، اهمیت انتخاب این زبان برای توسعه بیتکوین نه تنها در جنبههای فنی بلکه در جنبههای محیطی نیز بیان میشود. بهتر است نظر سازندهٔ سیپلاسپلاس در مورد استفاده از این ابزار برای ارز دیجیتال را هم بدانیم در اشتراک بین خالق زبان برنامهنویسی سیپلاسپلاس، بیارنه استرواستروپ و ساتوشی ناکاموتو، اشاره به زبان برنامهنویسی ++C و موضوع ماینینگ بیتکوین با تأکید بر مصرف انرژی بالا و تأثیرات آن بر محیط زیست است. چندی پیش در یک پادکست هوش مصنوعی با مجری Lex Fridman، استرواستروپ در مورد نحوهٔ استفاده از سیپلاسپلاس و عدم کنترل بر نحوه استفاده از ابزارهای توسعهدهنده صحبت کرده و بهویژه به ماینینگ بیتکوین اشاره کرده است. او به عنوان خالق زبان سیپلاسپلاس ابراز خوشحالی از برخی از کاربردهای این زبان و ناراحتی از برخی دیگر اشاره کرده و به مصرف انرژی بالای ماینینگ بیتکوین اشاره کرده است. استرواستروپ از مصرف انرژی فعلی ماینینگ بیتکوین به خوشایندی خاصی احساس نمیکند و این موضوع را به دلیل انتخاب سیپلاسپلاس به عنوان زبان برنامهنویسی توسعه بیتکوین توسط ساتوشی ناکاموتو ذکر کرده است. از نظر استراستروپ سیپلاسپلاس، یک زبان برنامهنویسی قدرتمند و گسترده است که در حوزههای مختلف برنامهنویسی مورد استفاده قرار میگیرد. این زبان امکانات بالایی برای مدیریت حافظه، کارایی بالا، و امکانات چندپارادیمی (مانند برنامهنویسی شیءگرا) فراهم میکند که در سراسر منابع کد بیتکوین شاهد آن هستیم. اما عامل ناراحتی او، مصرف انرژی بالا ممکن است که به علت نحوه استفاده یا پیادهسازی خاص از زبان و ابزارهای مرتبط با آن باشد و نه ضعف اساسی زبان سیپلاسپلاس، چرا که این زبان یکی از نامدارترین زبانهای است که مصرف انرژی و منابع را به بهترین حالت ممکن میتوان در آن مدیریت کرد، از طرفی در صورت پیادهسازی نه چندان مطلوب کدها، ممکن است نتیجهٔ عکس بدهد. در واقع معتقد است ممکن است کدنویسی بهینهای صورت نگیرد و منجر به مصرف نسبتاً بالایی داشته باشد. وقتی ساتوشی بیتکوین را نوشت، او بهطور ضروری پیشبینی نکرد که مسابقهای که به وجود آمد باعث ساخت دستگاههای ASIC ماینینگ خواهد شد. در واقع، در صفحهٔ سفید اصلی بیتکوین که تنها 9 صفحه است، ساتوشی کلمه CPU را به مجموع 10 بار اشاره کرد. مصرف انرژی کنونی بیتکوین کمتر بود اگر ماینینگ به شکلی انجام میشد که ساتوشی پیشبینی کرده بود. حتی ساتوشی نیز از همان سرنوشتی که استرواستروپ هشدار داد: عدم کنترل بر نحوه استفاده از ابداع خود در آینده، مصون نبود. احتمالاً ساتوشی هم پیشبینی نکرده بود که بیتکوین در میان مجرمان نیز استفاده خواهد شد. اگرچه ممکن بوده باشد که در یک دوره زمانی بیتکوین محبوبیت زیادی در میان تجار مواد مخدر داشته باشد، اما مونرو به عنوان رمزارز انتخابی در میان بسیاری از گروههای جرمی ظاهر شده است. فعالیتهای بشر که در مقیاس بزرگ بر محیط زیست تأثیر منفی میگذارند، زیاد است. بنابراین، هیچ توجیه منطقی برای اختصاص بهطور خاص به ماینینگ بیتکوین وجود ندارد، بهویژه زمانی که مزیت مثبت آن به حداکثر است. اختصاص مصرف انرژی به ماینینگ رمزارز بهمنظور ایجاد و حفظ یک سیستم همتا به منظور تبادل مالی، یک کار کارآمد است چرا که دقیقاً همان چیزی است که برای حذف واسطههای غیرضروری و غیرتکنولوژیکی لازم است: واسطههایی که روز آنها نهایتاً فرا رسیده است. به طور کلی، ارزیابی یک زبان برنامهنویسی باید با توجه به نیازها و شرایط پروژهها صورت گیرد. سیپلاسپلاس در بسیاری از مواقع یک انتخاب عالی است و اگرچه ممکن است برخی نقدهایی وجود داشته باشد، اما این نقدها به طور کلی به عنوان چالشها و به چشمگیرترین قابلیتهای این زبان میتوانند مطرح شوند. نتیجهٔ نهایی زبان برنامهنویسی سیپلاسپلاس احتمالاً محبوبترین زبان برنامهنویسی در دنیای توسعه نرمافزار است. توسعه بلاکچین نیز شامل کدنویسی است و برخی از بلاکچینها مانند شبکه بیتکوین از سیپلاسپلاس به عنوان زبان برنامهنویسی خود استفاده میکنند. ساتوشی ناکاموتو، خالق بیتکوین، این زبان را به دلیل امنیت و قابلیت مدیریت منابع تراکنشها و عملیات قراردادهای هوشمند انتخاب کرد. به علاوه، این زبان به توسعهدهندگان امکان ادغام وظایف موازی و غیرموازی را به صورت بینقص فراهم میکند. مصرف بهینهٔ منابع و رعایت موضوع انرژی سبز مهم است؛ همچنین، این زبان بهطور منظم بهروزرسانی میشود و ابزارهای تجزیه و تحلیل و اشکالزدائی متنوعی دارد که همگی به بهبود عملکرد آن کمک میکنند. نگاه به بهترین مزایای زبان در بلاکچین، به همه اجازه میدهد که درک کنند چرا ساتوشی ناکاموتو این زبان را در ایجاد بلاکچین بیتکوین انتخاب کرد. ایجاد بلاکچین ناکاموتو یکی از پربارترین اختراعات فناوری مالی زمان ما را ایجاد کرد که شفافیت، تمرکززدایی و ماندگاری تراکنش ها و داده ها را تقویت کرد. ارز متمرکز بر بلاکچین نیز همچنان پر استفاده ترین، قابل اعتمادترین، ارز دیجیتال پرسود و چشم انداز سرمایه گذاری است و در پشت ساخت این فناوری غول زبانهای برنامهنویسی آن را به بهترین نوع خود تبدیل و در همین راستا در مسیر توسعه و پیشرفت هدایت میکند.-
- ساتوشی
- ارزدیجیتال
-
(و 2 مورد دیگر)
برچسب زده شده با :
-
MohammadHossien شروع به دنبال کردن فناوری کرد
-
morrning تصویر نمایه خود را تغییر داد
-
sajjad2830 تصویر نمایه خود را تغییر داد
-
yaiiaj تصویر نمایه خود را تغییر داد
-
Hamed Ashournezhad تصویر نمایه خود را تغییر داد
-
sara8093@hotmail.com تصویر نمایه خود را تغییر داد
-
mohammad_0111 تصویر نمایه خود را تغییر داد
-
luci شروع به دنبال کردن کتابخانهٔ Qt کرد
-
سلام نمی دونی با این راهنمایی ت چه لطف بزرگی در حقم کردی!! دمت گرم! دمت گرم! دمت گرم!
-
این موضوع رو بررسی کنید:
-
Can not find -iGL:no such file or directory Collect 2:erorr:ld return 1 exit status [Makefile:229:اسم برنامه]: Erorr
-
درود، خب خطاها چی هستن؟
-
soroush_m شروع به دنبال کردن مشکل اجرای Qt کرد
-
سلام دوستان تازگیQt رونصب کردم منتها اولین برنامه توی مد ویجت با ارور مواجه میشه. برنامه فقط لود کردن یک پنجره خالی هستش.همه کیت هاشم نصب و آپدیت کردم. از صفحه هم اسکرین شات گرفتم.خیلی ممنون میشم کسی کمکم کنه!!
-
a.roshandelpour شروع به دنبال کردن کامبیز اسدزاده کرد
-
کتابخانهٔ Boost: یک راهکار قدرتمند برای توسعهٔ برنامههای سیپلاسپلاس مقدمه کتابخانهٔ Boost یکی از مهمترین ابزارها در دنیای برنامهنویسی سیپلاسپلاس است. این کتابخانه کاملاً رایگان بوده و مجموعهای گسترده از کتابخانهها و ابزارهای مفید برای توسعهدهندگان این زبان فراهم میکند. در این مقاله، به بررسی ویژگیها، اهمیت و کاربرد کتابخانهٔ Boost در سیپلاسپلاس میپردازیم. ۱. ویژگیهای کتابخانهٔ Boost کتابخانهٔ Boost دارای ویژگیهای فراوانی است که آن را از سایر کتابخانهها متمایز میکند. به برخی از این ویژگیها در زیر اشاره خواهیم کرد: الف. تعداد زیادی ابزار و کتابخانه Boost شامل تعداد زیادی از کتابخانهها و ابزارهای مفید است که برای تسهیل و افزایش کارایی در توسعهٔ نرمافزارهای سیپلاسپلاس به کار میروند. برخی از این کتابخانهها شامل: کتابخانهٔ Boost.Filesystem: برای مدیریت فایلها و دایرکتوریها در سیستم عامل استفاده میشود. کتابخانهٔ Boost.Thread: برای پشتیبانی از نخها (Thread) و همزمانسازی استفاده میشود. کتابخانهٔ Boost.Regex: برای پردازش و مدیریت عبارات باقاعده (Regular Expressions) به کار میرود. ب. پشتیبانی از استانداردهای مدرن Boost به خوبی استانداردهای مدرن سیپلاسپلاس را پشتیبانی میکند. این کتابخانه ابزارها و قابلیتهایی ارائه میدهد که توسعهدهندگان را در استفاده از قابلیتهای جدید و بهبودیافتهٔ زبان کمک میکند. با استفاده از Boost، میتوانید از استانداردهای مدرن مانند C++11 و C++14 بهرهبرداری کنید و کدهای بهتری بنویسید. ۲. اهمیت Boost برای توسعهٔ سیپلاسپلاس کتابخانهٔ Boost اهمیت فراوانی در توسعهٔ سیپلاسپلاس دارد. به دلیل وجود ابزارها و کتابخانههای متنوع، Boost به توسعهدهندگان این زبان کمک میکند تا برنامههای قدرتمندی را با سرعت و کارایی بالا ایجاد کنند. همچنین، استفاده از Boost باعث میشود که کد نوشته شده توسط توسعهدهندگان با استانداردهای مدرن و قابلیتهای بهبودیافتهٔ زبان همخوانی داشته باشد. ۳. کاربرد کتابخانهٔ Boost در سیپلاسپلاس کتابخانهٔ Boost در سیپلاسپلاس در بسیاری از زمینهها کاربرد دارد. در ادامه به برخی از کاربردهای این کتابخانه میپردازیم: الف. توسعهٔ برنامههای شبکه Boost ابزارها و کتابخانههای قدرتمندی برای توسعهٔ برنامههای شبکه در سیپلاسپلاس فراهم میکند. از طریق Boost.Asio میتوانید به راحتی بر نامههایی با استفاده از پروتکلهای مختلف شبکه مانند TCP و UDP بنویسید و با سرعت و کارایی بالا با ارتباطات شبکه کار کنید. ب. پردازش و مدیریت رشتهها Boost.Regex ابزاری قدرتمند برای پردازش و مدیریت رشتهها در سیپلاسپلاس است. این کتابخانه امکان استفاده از عبارات باقاعده را فراهم میکند و کار با رشتهها را بسیار آسان میکند. با استفاده از Boost.Regex، میتوانید الگوهای مورد نظر خود را در رشتهها جستجو کنید و اقدامات لازم را انجام دهید. ۴. مزایای استفاده از کتابخانهٔ Boost استفاده از کتابخانهٔ Boost در توسعهٔ پروژههای سیپلاسپلاس دارای مزایای بسیاری است. به دلیل ویژگیها و قابلیتهای فراوان این کتابخانه، میتوانید از مزایای زیر بهرهبرداری کنید: الف. افزایش کارایی و سرعت کتابخانهٔ Boost ابزارها و الگوریتمهایی را ارائه میدهد که میتواند عملکرد و کارایی برنامهها را بهبود بخشید. با استفاده از این ابزارها، میتوانید بهینهسازیهای لازم را انجام داده و کارایی برنامههای خود را افزایش دهید. این موضوع بسیار مهم است زیرا کارایی و سرعت اجرای یک برنامه بر روی سیستمهای حساس به زمان اهمیت بسیاری دارد. ب. پشتیبانی از چندپلتفرم کتابخانهٔ Boost بر روی چندپلتفرم قابل استفاده است و از این جهت بسیار مفید است. اگر برنامهٔ شما باید روی سیستمعاملهای مختلف اجرا شود، Boost میتواند به شما در این مسئله کمک کند. شما میتوانید از ابزارها و قابلیتهای Boost استفاده کنید تا برنامهٔ خود را به طور مستقل از سیستمعامل مقصد اجرا کنید و از سهولت توسعه و نگهداری برخوردار شوید. ج. جامعیت و پایداری Boost یک کتابخانهٔ بسیار جامع و پایدار است. این به این معناست که شما میتوانید به ابزارها و قابلیتهای Boost برای پروژههای مختلفی با انواع نیازها و مشکلات بهرهبرداری کنید. این کتابخانه توسعه یافته و توسط جامعهٔ سیپلاسپلاس حمایت میشود، بنابراین میتوانید از پشتیبانی و بهروزرسانیهای مداوم برخوردار شوید. ۵. کاربردهای کتابخانهٔ Boost کتابخانهٔ Boost به دلیل قابلیتها و امکانات فراوان خود، در زمینههای مختلفی از جمله زیر استفاده میشود: الف. توسعهٔ برنامههای کاربردی Boost ابزارها و کتابخانههایی را فراهم میکند که میتواند در توسعهٔ برنامههای کاربردی مختلف مفید باشد. مثلاً Boost.Asio برای برنامهنویسی شبکه، Boost.FileSystem برای کار با سیستمفایل و Boost.DateTime برای کار با زمان و تاریخ مورد استفاده قرار میگیرد. با استفاده از این ابزارها، میتوانید برنامههای کاربردی پیچیده را با قابلیتهای خاص و منحصربهفرد طراحی و پیادهسازی کنید. ب. توسعهٔ بسترهای نرمافزاری کتابخانهٔ Boost به عنوان یک بستر نرمافزاری مناسب برای توسعهٔ برنامههای کاربردی و تحت وب استفاده میشود. با استفاده از Boost، میتوانید بسترهای نرمافزاری پویا و پایداری ایجاد کنید که قابلیتها و خصوصیات منحصربهفردی داشته باشند. این کتابخانه شما را قادر میسازد تا بسترهای قابل گسترش، قابل تنظیم و با قابلیت انعطافپذیری بالا را پیادهسازی کنید. ج. توسعهٔ بازیها و گرافیک کامپیوتری Boost در زمینهٔ توسعهٔ بازیها و گرافیک کامپیوتری نیز استفاده میشود. ابزارهایی مانند Boost.Geometry برای کار با هندسه و Boost.Graph برای تحلیل و پردازش گرافها مورد استفاده قرار میگیرند. این ابزارها به توسعهدهندگان کمک میکنند تا الگوریتمهای پیچیده را برای بازیها و سیستمهای گرافیکی پیادهسازی کنند و تجربهٔ کاربری بهتری را ارائه دهند. ۶.اهمیت کتابخانهٔ Boost کتابخانهٔ Boost در دنیای سیپلاسپلاس بسیار اهمیت دارد. استفاده از این کتابخانه میتواند توسعهٔ برنامههای شما را سریعتر، قابل اطمینانتر و کارآمدتر کند. با قابلیتها و امکانات گستردهٔ Boost، میتوانید در توسعهٔ نرمافزارهای پیچیده و با تعامل بالا بهترین عملکرد را به دست آورید. ۷. چگونه از کتابخانهٔ Boost بهرهبرداری کنیم؟ برای بهرهبرداری از کتابخانهٔ Boost و استفاده بهینه از قابلیتهای آن، میتوانید مراحل زیر را دنبال کنید: الف. نصب کتابخانه ابتدا باید کتابخانهٔ Boost را بر روی سیستم خود نصب کنید. میتوانید نسخهٔ مناسب برای سیستمعامل خود را از وبسایت رسمی Boost دریافت کنید و طبق دستورالعملهای نصب آن را انجام دهید. ب. مستندات و منابع آموزشی بهتر است پیش از شروع استفاده از Boost، به مستندات رسمی آن مراجعه کنید. مستندات کتابخانه به شما راهنمایی دقیقی دربارهٔ ویژگیها، توابع و کلاسهای موجود در Boost ارائه میدهد. همچنین، میتوانید از منابع آموزشی آنلاین و کتابهای مرجع موجود برای یادگیری عمیقتر از Boost استفاده کنید. ج. استفاده در پروژهها با نصب کتابخانه و آشنایی با مستندات، میتوانید Boost را در پروژههای خود استفاده کنید. در هر قسمت از پروژه که نیاز به قابلیتها یا الگوریتمهای خاصی دارید، میتوانید به کتابخانهٔ Boost مراجعه کنید و از آن استفاده کنید. با استفاده از توابع و کلاسهای Boost، میتوانید کدهای کوتاهتر، بهینهتر و قابل نگهداریتری ایجاد کنید. ۸. بهترین استفاده از کتابخانهٔ Boost برای بهترین استفاده از کتابخانهٔ Boost، توصیه میشود: با استفاده از نسخهٔ مناسب Boost برای پروژه خود، بهروزرسانیها و بهبودهای ارائه شده را دنبال کنید. با دقت مستندات رسمی Boost کار کنید و قابلیتها و توابع موجود را بهخوبی بشناسید. از منابع آموزشی متنوع استفاده کنید تا مفاهیم و مباحث پیشرفتهتر را بیاموزید. در صورت نیاز، از جامعهٔ سیپلاسپلاس و انجمنهای مرتبط با Boost برای رفع سوالات و دریافت راهنمایی استفاده کنید. نتیجهگیری کتابخانهٔ Boost با ارائهٔ ابزارها و کتابخانههای مفید، اهمیت و کاربرد زیادی در توسعهٔ سیپلاسپلاس دارد. از ویژگیهای برجستهٔ این کتابخانه میتوان به تعداد زیادی ابزار و کتابخانه، پشتیبانی از استانداردهای مدرن و کاربردهای مختلف در برنامهنویسی اشاره کرد. با استفاده از Boost، توسعهدهندگان میتوانند برنامههای قدرتمندی را با سرعت و کارایی بالا ایجاد کنند و از قابلیتهای بهبودیافتهٔ زبان بهرهبرداری کنند. کتابخانهٔ Boost با ویژگیها و قابلیتهای منحصربهفرد خود، نقش بسیار مهمی در توسعهٔ پروژههای سیپلاسپلاس دارد. استفاده از این کتابخانه باعث میشود تا برنامههای قدرتمند، قابل اعتماد و با کارایی بالا ایجاد شوند. همچنین، Boost به توسعهدهندگان کمک میکند تا با استفاده از استانداردهای مدرن، بهترین نتایج را در توسعهٔ برنامهها به دست آورند.
-
- کتابخانه
- سیپلاسپلاس
-
(و 2 مورد دیگر)
برچسب زده شده با :
-
Ali71321 شروع به دنبال کردن مروری بر پنج اصلِ شیءگرایی با عنوان SOLID کرد
-
md.reza.k.rg@gmail.com شروع به دنبال کردن خلاصهای از ملزومات و نقشهٔ راه ساخت و ساز محصول نرمافزاری کرد
-
احساس افسردگی و اسکلی کردم آخه با وجود اینکه تا بحال روی دو تا پروژه کار کردم و شاغلم فهمیدم زیادی سریع فکر کردم دیگه همه چیز دانم و باید کار را شروع کنم حداقل نصف چیزایی که گفتی را بلد نیستم (البته خوشحالم که هنوز راه زیادی برای یادگیری در پیش دارم راه خیلی زیاد ...)
- 2 دیدگاه
-
- پیشنهاد
- برنامهنویسی
-
(و 9 مورد دیگر)
برچسب زده شده با :
-
با سلام و درودهای فراوان بر شما دوستداران طراحی و توسعه، امروز نیاز دیدم یک توضیح در رابطه با تفاوتهای عمدهٔ فناوری ساخت و توسعهٔ رابطکاربری در نرمافزارهای تحت فریمورک کیوت ارائه کنم. در این مقاله من به دو سبک متفاوت با کارآیی و اهمیت آنها مطابق با مستندات فریمورک کیوت میپردازم و شما میتوانید بر اساس نیازمندی و برداشت خود از آن، یکی از فناوریهای لازم را انتخاب و ظاهر برنامهٔ خودتان را با آن آراسته کنید! رابطکاربری (UI) یکی از عوامل اصلی در جذب کاربران و بهبود تجربهکاربری (UX) است. یک طراحی صحیح و مناسب برای واسطکاربری میتواند کاربران را به نرمافزار شما جذب کند و به معنای واقعی کاربران را متقاعد کند که نرمافزار شما صحیح است و قابل استفاده، حتی اگر امر اصلی برنامه اجرای آن باشد. رابطکاربری مناسب، کاربران را به یادگیری آسان فرایندهای نرمافزار و همچنین استفاده از آن ترغیب میکند. با طراحی یک واسط کاربری ساده و کاربر پسند، میتوان زمان و هزینهای برای آموزش کاربرانی که قرار است از نرمافزار شما استفاده کنند, صرفه جویی کرد. در نهایت، رابطکاربری نرمافزار ممکن است انگیزههای کاربران برای استفاده از نرمافزار شما را افزایش دهد. با انتخاب فوقالعاده از کاغذ دیواری و فونتهای جذاب، شما میتوانید به تاثیر خوبی بر روی انگیزههای کاربران برای استفاده از نرمافزار خود داشته باشید. اهمیت رابطهای کاربری مدرن و سنتی رابطکاربری سنتی، یک رابطکاربری ابتدائی است، که چندین دهه است به کار میرود. این سبک برای محیطهای کاربردی نسبتاً پایدار و سادهتر معرفی شده است، با پنجرهها، دستورالعملهای پایه، معمول و منوهای کلاسیک. اما اخیراً، رابطهای کاربری مدرن، تلاش کردهاند تا به کاربرانی که حوصلهٔ کار با رابطکاربری سنتی را ندارند، ارائه شوند چرا که نیاز به تعامل و تجربهکاری بهتر بیشتر و بیشتر میشود. این رابطها، با استفاده از طراحی مدرن، صفحات پویا، و مفهوم سرعت، زیبایی و حتی تحرک مناسب، میخواهند توانایی شما را در مدیریت محیطکاری (کار با نرمافزار) افزایش دهند. بیشتر رابطهای کاربری مدرن، به کاربران محیط کاری تمیز و منظم، صفحه اصلی متحرک، آیکون های جذاب و فهرست منوی منظم، نوع قلم و اندازهٔ مناسب و جذاب را ارائه میدهد تا با اشتیاق بیشتری از کار با محیط مورد نظر لذت ببرید. در این سند، تفاوت بین Widgets Qt و Qt Quick و نحوهٔ انتخاب مناسب برای نیازهای برنامه خود را توضیح خواهیم داد. قبل از اینکه به دلایلی بپردازیم که چرا شما ممکن است بخواهید Widgets Qt را به Qt Quick یا برعکس انتخاب کنید، سپس شروع به بررسی آنچه که هر کدام دقیقاً ارائه میدهند و در چه شرایطی میتوانید از آنها استفاده کنید نیز خواهیم داشت. راهکارهای فریمورک Qt برای طراحی رابطکاربری این فریمورک دارای چندین فناوری برای ایجاد رابطکاربری است. در حالی که میتوان این فناوریهای مختلف را در صورت نیاز ترکیب و مطابقت داد، یک رویکرد اغلب برای نوع خاصی از رابط کاربری مناسبتر از سایرین است. Qt Creator مثال خوبی از برنامهای است که ویجتهای سنتی Qt را با Qt Quick ترکیب میکند. Qt Widgets اساس رابطکاربری را تشکیل میدهند، در حالی که Qt Quick به عنوان مثال برای اجرای حالت خوش آمدگویی استفاده می شود. بخشهای زیر معرفی مختصری از فناوریهای موجود برای ایجاد رابط کاربری و جدول مقایسهای برای کمک به انتخاب بهترین فناوری مناسب ارائه میدهند. دربارهٔ Qt Widget (کیوت ویجت) ماژول Qt Widgets مجموعهای از عناصر رابطکاربری را برای ایجاد رابطهای کاربری کلاسیک به سبکِ پیشفرضِ دسکتاپ فراهم میکند. کلاس QWidget قابلیت اولیه برای رندر کردن (ساخت) روی صفحه و مدیریت رویدادهای ورودی کاربر را فراهم میکند. تمام عناصر UI که Qt ارائه میکند یا زیر کلاسهای QWidget هستند یا در ارتباط با یک زیر کلاس QWidget استفاده میشوند. ایجاد ویجتهای سفارشی با زیر کلاس QWidget یا یک زیر کلاس مناسب و پیادهسازی مجدد کنترل کننده رویداد مجازی انجام میشود. سبکها (پوستهها/ظاهر) سبکها به نمایندگی از ویجتها طراحی میشوند و ظاهر و احساس یک رابطکاربری گرافیکی را دربر میگیرند. ویجتهای داخلی Qt از کلاس QStyle برای انجام تقریباً تمام طراحیهای خود استفاده میکنند و اطمینان حاصل میکنند که دقیقاً شبیه ویجتهای بومی معادل هستند که در زیر تصاویر مربوط به ظاهر پیشفرض سیستمعاملهای ویندوز، لینوکس و مک هستیم. به طور کلی، Qt Style Sheets مکانیزم قدرتمندی است که به شما امکان میدهد ظاهر ویجتها را سفارشی کنید، علاوه بر آنچه که قبلاً با زیر کلاسبندی QStyle امکانپذیر است. لایهبندیها (چیدمان) چیدمانها روشی ظریف و انعطاف پذیر برای مرتب کردن خودکار ویجت های کودک در ظرف خود هستند. هر ویجت مورد نیاز اندازه خود را از طریق خصوصیات sizeHint و sizePolicy به چیدمان گزارش میدهد و طرحبندی فضای موجود را بر این اساس توزیع میکند. محیط Qt Designer یک ابزار قدرتمند برای ایجاد تعاملی و چیدمان ویجتها در طرحبندی است. کلاسهای Model/View معماری model/view کلاسهایی را ارائه میدهد که نحوه ارائه دادهها به کاربر را مدیریت میکنند. برنامههای مبتنی بر داده که از فهرستها و جداول استفاده میکنند، به گونهای ساختار یافتهاند که دادهها و مشاهده را با استفاده از مدلها، نماها و نمایندگان جدا کنند. محیط توسعهٔ Qt Creator و بخش Qt Designer ویرایشگر کد پیشرفته Qt Creator به شما امکان میدهد نرمافزار را به زبانهای C++، QML، جاوا اسکریپت، پایتون و سایر زبانها بنویسید. این ویژگی تکمیل کد، برجسته سازی نحو، refactoring است و دارای اسناد داخلی در نوک انگشتان شما است. دربارهٔ کیوت کوئیک (Qt Quick) ماژول Qt Quick کتابخانهٔ استاندارد برای نوشتن برنامههای کاربردی QML است. در حالی که ماژول Qt QML موتور QML و زیرساخت زبان را فراهم میکند، ماژول Qt Quick تمام انواع اساسی لازم برای ایجاد رابطکاربری با QML را ارائه میدهد. در واقع یک بوم بصری را ارائه میکند و شامل انواعی برای ایجاد و متحرک کردن اجزای بصری، دریافت ورودی کاربر، ایجاد مدلها و نماهای دادهها و نمونهسازی با تأخیر شیء است. ماژول Qt Quick نیز یک API QML ارائه میکند که انواع QML را برای ایجاد رابطهای کاربری با زبان QML فراهم میکند و هم یک رابطبرنامهنویسی (API) از ++C برای گسترش برنامههای QML با کد ++C ارائه میکند. این یک مزیت بزرگ است که به شما اجازه میدهد رابطهای مبتنی بر قدرت سی++ را به خوبی ارائه کنید. پوستهٔ پیشفرض (Default) تا کیوت ۵ و پوستهٔ پایه (Basic) از کیوت ۶ به بعد. سبک پیش فرض یک سبک همه جانبه ساده و سَبُک است که حداکثر عملکرد را برای کنترل های سریع Qt ارائه می دهد. پوستهٔ فیوژن (Fusion) سبک Fusion یک سبک پلتفرم آگنوستیک است که ظاهری بینظیر دسکتاپ را برای کنترلهای کیوت کوئیک ارائه میدهد. پوستهٔ ایمَجین (Imagine) سبک Imagine بر اساس داراییهای تصویر است. این سبک دارای مجموعهای پیشفرض از تصاویر است که به راحتی با ارائه یک فهرست حاوی تصاویر با استفاده از یک قرارداد نامگذاری از پیش تعریف شده قابل تغییر است. پوستهٔ مکاواِس (macOS) از کیوت ۶ به بعد. سبک macOS یک سبک بومی برای macOS است. پوستهٔ آیاواِس (iOS) از کیوت ۶ به بعد. سبک iOS یک سبک بومی برای iOS است. پوستهٔ متریال (Material) سبک Material، طراحی جذابی را بر اساس دستورالعملهای طراحی متریال Google ارائه میکند، اما به منابع سیستم بیشتری نسبت به سبک پیشفرض نیاز دارد. پوستهٔ یونیورسال (Universal) سبک Universal طراحی جذابی را بر اساس دستورالعملهای طراحی جهانی مایکروسافت ارائه میکند، اما به منابع سیستم بیشتری نسبت به سبک پیشفرض نیاز دارد. پوستهٔ ویندوز (Windows) از کیوت ۶ به بعد. سبک Windows یک سبک بومی برای Windows است. اگر هیچ سبکی به صراحت تنظیم نشده باشد، یک سبک پیش فرض استفاده خواهد شد. سبکی که استفاده میشود به سیستمعامل بستگی دارد: سیستمعامل اندروید: Material Style سیستمعامل آیاواِس: iOS Style سیستمعامل لینوکس: Fusion Style سیستمعامل مکاواِس: macOS Style سیستمعامل ویندوز: Windows Style انتخاب سبک در زمان کامپایل انتخاب سبک زمان کامپایل راهی برای تعیین یک سبک برای استفاده با وارد کردن آن در QML است. به عنوان مثال، برای وارد کردن سبک Material: import QtQuick.Controls.Material ApplicationWindow { // ... } انتخاب سبک در زمان اجرا انتخاب سبک زمان اجرا راهی برای تعیین یک سبک برای استفاده با وارد کردن QtQuick.Controls است: import QtQuick.Controls افزونهٔ QtQuick.Controls استایل و استایل بازگشتی را که در زمان اجرا تنظیم شدهاند از طریق یکی از روشهای زیر وارد میکند: دستورQQuickStyle::setStyle() The -style آرگومان خط فرمات QT_QUICK_CONTROLS_STYLE متغیرهای محای qtquickcontrols2.conf پیکربندی از طریف فایل اولویت این رویکردها به ترتیبی است که فهرست شدهاند، از بالاترین به پایینترین. یعنی استفاده از QQuickStyle برای تنظیم استایل همیشه بر استفاده از آرگومان خط فرمان اولویت دارد. برای اجرای یک برنامه با یک سبک خاص، یا با استفاده از QQuickStyle در ++C، پوسته را پیکربندی کنید، یک آرگومان خط فرمان را ارسال کنید، یا یک متغیر محیطی را تنظیم کنید. روش دیگر، سبک ترجیحی و ویژگیهای خاص سبک را میتوان در یک فایل پیکربندی مشخص کرد. اولویت این رویکردها به ترتیبی است که در زیر فهرست شدهاند، از بالاترین به پایینترین. یعنی استفاده از QQuickStyle برای تنظیم استایل همیشه بر استفاده از آرگومان خط فرمان اولویت دارد. استفاده از Qt Quick Style در ++C رابطهای QQuickStyle C++ API پیکربندی یک سبک خاص را ارائه میکند. مثال زیر یک برنامه Qt Quick Controls را با سبک Material اجرا میکند: QQuickStyle::setStyle("Material"); استفاده از روش آرگومانهای خط فرمان ارسال آرگومان خط فرمان-style راه مناسبی برای آزمایش سبکهای مختلف است. این روش بر سایر روش های ذکر شده در زیر ارجحیت دارد. مثال زیر یک برنامه Qt Quick Controls را با سبک Material اجرا میکند: ./app -style material استفاده از روش متغیرهای محیطی تنظیم متغیر محیطی QT_QUICK_CONTROLS_STYLE را میتوان برای تنظیم ترجیح سبک در سراسر سیستم استفاده کرد که بر فایل پیکربندی ذکر شده در زیر ارجحیت دارد. مثال زیر یک برنامه Qt Quick Controls را با سبک جهانی اجرا میکند: QT_QUICK_CONTROLS_STYLE=universal ./app استفاده از روش پیکربندی فایل کنترلهای کیوت کوئیک، از یک فایل پیکربندی خاص پشتیبانی میکند، :/qtquickcontrols2.conf، که در منابع یک برنامه تعبیه شده است. فایل پیکربندی میتواند سبک ترجیحی (ممکن است با یکی از روشهایی که قبلا توضیح داده شد لغو شود) و ویژگیهای خاص سبک را مشخص کند. مثال زیر مشخص می کند که سبک ترجیحی سبک Material است. [Controls] Style=Material سفارشیسازی کنترلهای کیوت کوئیک کنترل کیوت کوئیک از یک سلسله مراتب (درخت) از آیتمها تشکیل شده است. به منظور ارائه ظاهر و احساس سفارشی، پیادهسازی پیشفرض QML هر آیتم را میتوان با یک سفارشی جایگزین کرد. گاهی اوقات شما میخواهید برای یک بخش خاص از UI خود یک ظاهر «یکباره» ایجاد کنید و در هر جای دیگر از یک سبک کامل استفاده کنید. شاید از سبکی که استفاده میکنید راضی باشید، اما دکمه خاصی وجود دارد که اهمیت خاصی دارد. پشتیبانی از High-DPI در کیوت کوئیک کنترلهای کیوت کوئیک، از مقیاسگذاری چند-سکویی با DPI (نقطه در اینچ) بالا که در Qt 5.6 معرفی شده است، پشتیبانی میکند. این ویژگی انتخابی است و میتوان آن را با تنظیم ویژگی برنامه Qt::AA_EnableHighDpiScaling در ++C قبل از ساخت QGuiApplication فعال کرد: #include <QGuiApplication> #include <QQmlApplicationEngine> int main(int argc, char *argv[]) { QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling); // <-- QGuiApplication app(argc, argv); QQmlApplicationEngine engine; engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); return app.exec(); } محیط طراحی اختصاصی Qt Design Studio فرآیند توسعه خود را با پر کردن شکاف بین طراحان و توسعهدهندگان متحول کنید تا دیدگاههای طراحی خود را به رابط های کاربری آماده تولید تبدیل کنید. طراحیهای رابطکاربری را با ابزارهای طراحی مانند Figma، Adobe XD یا Adobe Photoshop ایجاد کنید. آنها را به استودیوی طراحی Qt وارد کنید، جایی که کد به طور خودکار تولید شده و آماده استفاده توسط توسعهدهندگان است. تعاملات و رفتارهای پویا را شبیهسازی و تایید کنید. هر چیزی که در استودیوی طراحی Qt ساخته شده است ذاتاً کراس پلتفرم است و میتواند در هر سختافزار یا محیط سیستمعاملی کامپایل شود. وقتی در مورد ایجاد رابطکاربری صحبت میکنیم، فقط در مورد ایجاد یک ماکت با داراییهای موجود صحبت نمیکنیم. با Qt Design Studio، داراییهای شما تبدیل به یک ترکیب رابطکاربری میشود که آماده عملکرد است. تفاوتهای عمدهٔ Qt Widgets طراحی با این ماژول فقط بر پایهٔ زبانهای برنامهنویسی ++C و Python در امکانپذیر است. .سبک و ظاهر بومی در پلتفرمهای دسکتاپ اما نه در پلتفرمهای موبایل. امکان سفارشی شدن را دارد. به بکاند بومی جهت ساخت نیاز ندارد. میتواند در مواقع لزوم از رابطهای برنامهنویسی بومی بکاندی هر پلتفرم استفاده کند. سبک پایه را ارائه میکند، روان نیست، اما امکان تعریف انیمیشن را ارائه میکند. به واسطهٔ زیر کلاسها یا کلاسهای سفارشی خودتان میتوانید رفتارهای ویجت را باز تعریف کنید. محیط اختصاصی طراحی و توسعهٔ Qt Designer تفاوتهای عمدهٔ Qt Quick طراحی با این ماژول به صورت پایه به واسطهٔ QML امکانپذیر است. هرچند هنوز هم برخی از نیازمندیها به واسطهٔ ++C و Python انجام میشود. شما میتوانید ماژولها و کامپوننتهای سفارشی خوبی به واسطهٔ ++C برای QML طراحی کنید. ظاهر کاربری بومی تحت ماژول Qt Quick Controls از نسل کیوت ۶ به بعد ممکن شده است. تطبیق و دریافت اطلاعات پوسته برای اندروید در زمان نیاز ممکن است. به بکاند بومی و پسزمینه وابسته است. همچنین میتوانید ایتمهای خود را به صورت مستقیم با بکاند بومی ارائه کنید. میتوانید پوستهٔ روان و جذابی را تعریف کنید. پیادهسازی انیمیشنها و جلوههای بصری پیچیده بسیار ساده قابل پیادهسازی شدن است. جلوههای گرافیکی به راحتی قابل تعریف هستند. امکان سفارشیسازی رفتارهای آیتم و کنترلها وجود دارد. به واسطهٔ گسترش و یا ساخت کامپوننتهای سفارشی خود بر اساس انواع موجود در Qt Quick. علاوه بر پشتیبانی از محیط Qt Designer، به محیط اختصاصی و پیشرفتهٔ طراحی و توسعهٔ Qt Design Studio مجهز است. چه زمانی باید یکی از این فناوریها را به دیگری ترجیح دهیم؟ Qt Widgets اگر شما نیاز به یک رابطکاربری ساده و سریع نیاز دارید. اگر نمیخواهید با JavaScript سرو کار داشته باشید. Qt Quick زمانی که میخواهید رابطهای کاربری جذاب و خلاقانه تولید کنید. زمانی که میخواهید برنامهٔ خود را برای موبایل و دستگاههای جاسازی شده (امبد) ارائه کنید. وقتی هدفتان ساخت نرمافزارهای چند-سکویی باشد. زمانی که میخواهید بیشترین جذابیت و کارآیی را از نظر UI و UX ارائه کنید. آشنایی با زیرساخت RHI و کارآیی دو فناوری کیوت ویجت و کیوت کوئیک بسیاری از کاربران با توجه به کدهای سی++ در کیوت ویجت، بر این باورند که ساخت و توسعهٔ رابطهای کاربری با Qt Widgets عموماً سریعتر و از کارآیی بهتری برخوردار است. این حقیقت در قبل از زمان فناوری جدید از نسل کیوت کوئیک اعتبار بسیاری داشت، اما با توجه به توسعهٔ زیرساختهای کیوت در نسلهای ۵.۱۵ و ۶ به بعد، تمامی فرایند رندرینگ به لطف کدهای سیپلاسپلاس به صورت بومی تحت معماری RHI انجام میشوند و این مسأله دیگر حائز اهمیت نیست، مگر اینکه دلایل شما برای انتخاب کیوت ویجت صرفاً دسترسی ساخت به رابطکاربری سادهتر و عدم اهمیت داشتن سبکِ نوین باشد. زیرساخت QRhi، یک رابط سختافزاری رندر Qt، انتزاع گرافیکی داخلی Qt است که در آن APIهای سه بعدی مانند OpenGL، Vulkan، Metal و Direct 3D درگیر هستند. در مقایسه با 5.15، پیشرفتهای اصلی در نسخه 6.0، اصلاحات پولیش زیاد اینجا و آنجا و مهمتر از همه، مجموعه بزرگی از بهینهسازی عملکرد است. این بهینه سازی به طور کامل به صورت بومی و رابطهای برنامهنویسی ترکیبی با ++C پیادهسازی شده است و کارآیی خروجی در تولید رابطهای خلاقانه، جلوههای بصری ۲ و ۳ بعدی بسیار عالی خواهد بود. سخن پایانی ساخت و توسعهٔ یک رابطکاربری امروزه یکی از مهمترین معیارهای سنجش کیفی نرمافزار در سمت کاربر است، اگر این موضوع برای شما اهمیت بسیار دارد، قطعاً باید به روشهای اختصاصی در طراحی سوق پیدا کنید. در غیر این صورت نیاز به کدنویسی بیشتر، درک و بازنویسی انتزاعهای فراوان در سمت کدهای خام به واسطهٔ Qt Widgets بسیار خسته کننده خواهد بود.