-
انتخاب های ما
-
ترکیب کدهای ++C با وردپرس بدون شکستن کد آن
کامبیز اسدزاده ارسال شده توسط نوشته وبلاگ در برنامه نویسی،
سادهترین راه برای افزودن کد سفارشی به سایتهایی که بر پایهٔ وردپرس ساخته شدهاند، بدون شکستن کد آن چیست؟-
-
- 0 پاسخ
انتخاب شده توسط
کامبیز اسدزاده, -
-
نهاییسازی استاندارد ۲۳ (استاندارد ۲۶ در راه است)
کامبیز اسدزاده ارسال شده توسط نوشته وبلاگ در فناوری،
در این مقاله قصد داریم در رابطه با استاندارد ۲۶ و نهاییسازیهای ۲۳ یک جمعبندی داشته باشیم که بسیار در شناخت و بهروز رسانی سریع از پیشرفت این زبان را به ما نشان میدهد.-
- 0 پاسخ
انتخاب شده توسط
کامبیز اسدزاده, -
-
نهاییسازی ویژگیهای استاندارد ۲۳ و خلاصهای از جلسهٔ استانداردسازی WG21
کامبیز اسدزاده ارسال شده توسط نوشته وبلاگ در فناوری،
خلاصهای از جلسهٔ ماه جولای با هدف نهایی شدن استاندارد ۲۳ که نشان میهد پیشرفت بزرگی به عنوان ویژگیهای جدید استاندارد ۲۳ وجود دارد ارائه شده است.-
-
- 0 پاسخ
انتخاب شده توسط
کامبیز اسدزاده, -
-
جایزهٔ زبان برنامهنویسی سال TIOBE به ++C تعلق یافت!
کامبیز اسدزاده ارسال شده توسط نوشته وبلاگ در ابزارها،
در سالی که گذشت (۲۰۲۲)، سیپلاسپلاس محبوبترین زبان برنامهنویسی با رشد شاخص محبوبیت ۴.۶۲٪ انتخاب شد!-
-
- 0 پاسخ
انتخاب شده توسط
کامبیز اسدزاده, -
-
خلاصهای از ملزومات و نقشهٔ راه ساخت و ساز محصول نرمافزاری
کامبیز اسدزاده ارسال شده توسط نوشته وبلاگ در علم و دانش،
سلام و درود،
این اواخر راجع به مشورت و راهنماییها خیلی ساده به قضیه نگاه میشه، همه فکر کردن کشکه و فقط با دونستن JS یا QML میشه محصول ساخت. البته این مثال JS و QML یک مثال هست و این مسئله در همهٔ ابزارها و حول محور حوزهٔ کامپیوتر و نرمافزار به چشم میخوره، هرچند روی داستان ساده هست اما حتی پشت این کارهای ساده کلی زمان باید صرف بشه. همین گرفتن یک دادهٔ ساده از سمت سرور و تجزیه کردنش سمت JS نیاز به یک دانش خوب در مورد معماری Apiداره، نیاز به آگاهی از استانداردهای Http داره، نیاز به تخصص کافی در ریز به ریز مسائل داره، نیاز به آگاهی لازم در مورد شبکه و نحوهٔ مدیریتش داره، نیاز به درک خوب راجع به کلاسهای شبکه و نحوهٔ مدیریت بستهها داره و صدها جور مسئلهٔ دیگه.
یا راهنمایی نکنیم یا میکنیم همه چیز رو ساده نشون ندیم!
به خصوص برای کسایی که سالها یه چیز دیگه خوندن و الآن قراره وارد این حوزه بشن.
قشنگ واقعیت رو باید به نمایش گذاشت، و اگرنه به اشتراک گذاری چهارتا UI خفن که بگین با QML هم میشه کاری نداره، سه سوته میشه اینها رو طراحی کرد.-
- 1 پاسخ
انتخاب شده توسط
کامبیز اسدزاده, -
-
آیا زبان برنامهنویسی ++C قابل جایگزین شدن است؟
کامبیز اسدزاده ارسال شده توسط نوشته وبلاگ در فناوری،
یک سوأل بسیار مهم و پر مخاطب در بارهٔ زبانبرنامهنویسی سیپلاسپلاس در سالهای اخیر این است که «آیا جایگزینی برای این زبان وجود دارد و یا قابل جایگزین است»؟
در بسیاری از پاسخها نشان از گزینههایی مانند Go، Rust و D دیده میشود که بهتر است نسبت به نظرات متخصصهای برنامهنویسی به این موضوع پرداخته شود، ابتدا باید در نظر گرفت که هر ابزاری میتواند جایگزینی داشته باشد اما شرایط و نحوهٔ استفادهٔ آن در رابطه با نیاز متفاوت است.-
-
- 1 پاسخ
انتخاب شده توسط
کامبیز اسدزاده, -
-
رونمایی از اولین درگاه پرداختِ ارزی توسط بایننس
کامبیز اسدزاده ارسال شده توسط نوشته وبلاگ در فناوری،
ما ایرانیها به خصوص توسعهدهندهها در حوزهٔ فناوری همیشه با مشکلاتی دست و پنجه نرم میکنیم، قطعاً میتوان در این باره توضیحات بسیار جامعی ارائه کرد، اما یکی از این مسائل بحث محدودیتهای شدید در پرداخت به شیوهٔ ارزی و بینالمللی است و به همین خاطر به سختی میشود به مشتریان خارج از کشور خدمات ارائه و هزینهای در قبال آن دریافت کرد بنابراین، معمولاً دسترسی به ارائهٔ خدمات در خارج از کشور امکانپذیر نیست.
با تفکرِ به این که، روزی خواهد رسید درگاههای پرداختیِ فعلی به شیوههای کاملاً مردمی بدون در نظر گرفتن موقعیت، قومیت و سیاستهای خارجی در اختیار همگان قرار خواهند گرفت و این یعنی آزادی در دنیای تجارت، به گونهای که با اهداف و شعار این بستر و ارزهای دیجیتالی همخوانی داشته و به نظر میرسد پیشبینیها در رابطه با شکل و قالب پولهای نسل جدید واقعاً به این سمت سوق پیدا کند.-
- 2 پاسخ
انتخاب شده توسط
کامبیز اسدزاده, -
-
قابلیتهای ممتاز و پیشرفتهٔ ++C در استانداردهای جدید
کامبیز اسدزاده ارسال شده توسط یک موضوع در برنامه نویسی در C و ++C،
اگر شما توسعه دهنده سیپلاسپلاس هستید، توصیه میکنیم این سری از مقالات را دنبال کنید زیرا در این تاپیک قصد داریم به آخرین تغییرات مرتبط با سیپلاسپلاس مدرن اشاره کنیم. بنابراین در بخش اول، مهمترین موارد منسوخ شده و اشکلات رفع شده و ویژگیهای سی++ را پوشش خواهیم داد.-
-
- 2 پاسخ
انتخاب شده توسط
کامبیز اسدزاده, -
-
معرفی و کار با فایلسیستمها در استاندارد C++17
کامبیز اسدزاده ارسال شده توسط یک موضوع در برنامه نویسی در C و ++C،
اگرچه که زبان برنامهنویسی سیپلاسپلاس به عنوان یک زبان بسیار قدرتمند و قدیمی شناخته شده است، اما کتابخانهٔ استاندارد و پیشفرض آن برخی از موارد واقعاً مهم را به تازگی تعبیه کرده است. ویژگیهایی که در زبانهایی مثل جاوا و یا سیشارپ داتنت سالهاست وجود دارند. به هر حال این ویژگیها در سی++ ۱۷ موجود شدهاند و این یک بهبود و پیشرفت بسیار خوب است. برای مثال ما الآن فایلسیستم استانداردی را در اختیار داریم.-
-
- 0 پاسخ
انتخاب شده توسط
کامبیز اسدزاده, -
-
معرفی و کاربرد صفتهای خاص در استاندارد ۱۷
کامبیز اسدزاده ارسال شده توسط یک موضوع در برنامه نویسی در C و ++C،
با سلام و درود،
همانطور که میدانید ویژگیهای اخیر در استانداردهای ۱۷ و ۲۰ بسیار عظیم و کاربردی هستند. هدف ما در مرجع آیاواستریم این است که با توجه به بهروزرسانیهای زبان سیپلاسپلاس مهمترین مواردی که نیاز است معرفی کنیم.
بنابراین در این بخش به یکی از کاربردیترین موارد مرتبط در استاندارد ۱۷ با عنوان صفتهای ویژه اشاره میشود که در ادامه به تعریف هر یک از آنها میپردازیم.-
-
- 0 پاسخ
انتخاب شده توسط
کامبیز اسدزاده, -
-
اکنون ++C سریعترین رشد را بین زبانهای برنامهنویسی دارد
کامبیز اسدزاده ارسال شده توسط نوشته وبلاگ در فناوری،
طبق شاخص محبوبیت طی چند سال گذشته، ++C با توجه به شاخص TIOBE در سپتامبر، سریعترین زبان در حال رشد در بسته برنامهنویسی است. این زبان در سالهای گذشته، محبوبیت سهم خود را در فراز و نشیبها داشته است. اما با مقیاسه با سالهای گذشته در حال حاضر رسماً سریعترین رشد را در بین تمامی زبانهای تحت پوشش اتوماسیون QA در شرکت Tobie را دارد.-
-
- 0 پاسخ
انتخاب شده توسط
کامبیز اسدزاده, -
-
سریعترین فریمورکهای وب!
کامبیز اسدزاده ارسال شده توسط نوشته وبلاگ در فناوری،
در این مقاله من قصد دارم به معرفی ده فریمورک برتر جهان در بازهٔ سالهای ۲۰۱۹ و ۲۰۲۰ اشاره کنم که در حوزهٔ صنعت وب کاربرد دارند. معمولاً در سایتها، وبلاگها و گروههای تلگرامی حرف از فریمورکهای شناخته شدهای مانند Asp.net core و یا Laravel به گوش میرسد. اما واقعیت این است که فریمورکهایی که در مورد آنها بحث میشود جایگاه خاصی در بین فریمورکهای قدرتمند و به عنوانی ناشناخته مانند Drogon، h2o، ulib و غیره ندارند!-
-
- 0 پاسخ
انتخاب شده توسط
کامبیز اسدزاده, -
-
کدام زبان برنامهنویسی را یاد بگیریم؟
کامبیز اسدزاده ارسال شده توسط یک مقاله در زبانهای برنامه نویسی،
سلام و درود خدمت دوستان عزیز،
همانطور که میدانید مهمترین و شاید بزرگترین سوال در حوزهی برنامهنویسی این است که من باید کدام زبان برنامهنویسی را انتخاب کنم؟!-
-
- 2 پاسخ
انتخاب شده توسط
کامبیز اسدزاده, -
-
چگونه با مشتریِ خود صحبت کنیم
کامبیز اسدزاده ارسال شده توسط یک مقاله در استارتاپی،
با سلام و درود،
همهی ما میدانیم که امروزه کسبوکارهای اینترنتی و وابسته به فناوریهای مبتنی بر نرمافزار، یکی از حوزههایی به شمار میرود که در چهارچوب خود میتوانند پیشرفت بسیار چشمگیری داشته باشند.-
-
- 0 پاسخ
انتخاب شده توسط
کامبیز اسدزاده, -
-
آیندهٔ توسعهٔ وب تحت فناوری WebAssembly
کامبیز اسدزاده ارسال شده توسط نوشته وبلاگ در فناوری،
وباسمبلی یا وَسم (Wasm، اغلب به طور مخفف) استانداردی باز است که یک قالب جدید دستورالعملهای باینری را معرفی میکند. این فناوری نوید این را میدهد که برنامهها با کارآیی (پرفرمنس) بومیِ خود در بستر وِب اجرا شوند. به عبارت سادهتر میتوان گفت، این فناوری امکان این را میدهد که کدهای نوشته شده با زبانهای سطح بالاتر مانند C و ++C یا Rust به ماژول Wasm کامپایل شوند که مستقیماً در مرورگرهای مدرن قابل اجرا هستند.-
-
- 2 پاسخ
انتخاب شده توسط
کامبیز اسدزاده, -
-
معرفی زبان ++C و مزیت آن نسبت به دیگر زبانهای برنامهنویسی
کامبیز اسدزاده ارسال شده توسط یک موضوع در برنامه نویسی در C و ++C،
با توجه به پیشرفت و توسعهی زبانهای برنامهنویسی، به ویژه ظهور زبانهای جدید که جهت حل مشکلات زبانهای موجود و یا با هدف ایجاد انقلاب و یا سهولت برنامهنویسی، یکی از سوألاتی که مدام به ذهن میآید این است که چه زبانی را باید انتخاب کرد که از لحاظ بُعد علمی، اقتصادی و فنی بهترین انتخاب باشد تا با یک خیال راحت به یادگیری آن بپردازیم.-
-
- 0 پاسخ
انتخاب شده توسط
کامبیز اسدزاده, -
-
مدیریت منابع در ++C و آشنایی با اصطلاحات مدرن
کامبیز اسدزاده ارسال شده توسط یک مقاله در زبان برنامهنویسی ++C،
اصطلاحاتی که بهتر است در مورد C++ مدرن بدانید!
داشتم به این فکر میکردم که برخی از مبتدیان برنامهنویسی به خصوص کسانی که به سراغ زبانهایی مثل سی++ میروند معمولاً مستقیم وارد کد نویسی میشوند و به این گمان که آغاز برنامهنویسی یعنی نوشتن یک کد با خروجی «سلام، دنیا»! دریغ از آن که بعضی از موارد مانند «معرفی کامپایلر و انواع آن» و حتی «ساختار برنامههای نوشته شده تحت سیپلاسپلاس» و یا حتی «مدیریت حافظه» را در نظر بگیرند! من معمولاً در مقالات و آموزشهای خودم به این اشاره میکنم که قبل از هر چیز باید با ساختار برنامههای نوشته شدهی یک زبان آشنا شد و سپس به بررسی موارد دیگر مانند نحو زبان و یا دیگر ویژگیهای آن.-
-
- 0 پاسخ
انتخاب شده توسط
کامبیز اسدزاده, -
-
چشمانداز فنی برای کیوت ۶
کامبیز اسدزاده ارسال شده توسط نوشته وبلاگ در برنامه نویسی،
این چشمانداز احتمالاً برای دوستداران کتابخانهی قدرتمند Qt و طرفدارانش جذاب باشد! بنابراین من سعی کردهام تا نتایج پست رسمی کیوت را در رابطه با چشمانداز فنی برای آیندهی کیوت نسخهی ۶ است در اختیار شما قرار دهم.-
-
- 6 پاسخ
-
-
پشت پردهٔ تحریمهای اپل و وضعیت کنونی اپلیکیشنهای ایرانی
کامبیز اسدزاده ارسال شده توسط نوشته وبلاگ در نرمافزار و اپلیکیشن،
مدتی است در مورد مسدود شدن اپلیکیشنهای ایرانی برای iOS از طرف شرکت اپل خبرهایی به گوش میرسد که در سایتها و پایگاههای خبری از سمت نویسندگان و افراد غیرفنی تجزیه تحلیل و روشهای دور زدن آنها ارائه میشود. واقعیت بر دلیل نوشتن این مقاله این است که این فرصت و مشکلات کنونی آبی گلآلود برای سودجویانی شده است که کاربران از آن بیخبرند! هر روز یک توسعهدهنده یک سایت جدید راهاندازی میکند و با ادعای ارائه بستری نامحدود اقدام به تبلیغات میکند. بنده نیز به عنوان توسعهدهنده وظیفهی خودم میدانم که یک بار برای همیشه توضیحات شفاف و روشنی را در اختیار کاربران iOS قرار دهم تا متوجه اصلِ موضوع باشند (بعد از آن تصمیم با خود شما).😉-
-
- 0 پاسخ
-
-
ساخت و توسعهٔ وبسایت توسط ++C
کامبیز اسدزاده ارسال شده توسط یک موضوع در برنامه نویسی در C و ++C،
مزایای یک وبسایت تحت سیپلاسپلاس نسبت به دیگر زبانهای رایج
- سرعت خارقالعاده و غیر قابل مقایسه با زبانهای رایج
- امنیت بهتر کدهای شما
- مدیریت سادهتر و انعطافپذیری بالا
- مصرف بسیار بهینه و غیر قابل تصور از منابع سرور
- دسترسی نامحدود به کتابخانهها
- عدم محدودیت در دسترسی به برنامهنویسی سطح پایین
- عدم محدودیت در استفاده از توابع سیستمعامل
- عدم محدودیت در مدیریت سیستم
- و هر ویژگی دیگری که در زبانهای اسکریپتی اگر به آن نیاز داشته باشید مجبور هستید تا به صورت اکستنشن آن را تحت سیپلاسپلاس باز نویسی کنید.
-
-
- 13 پاسخ
انتخاب شده توسط
کامبیز اسدزاده, -
-
-
فایل
-
پر بازدیدترین موضوعات
-
سیپلاسپلاس مدرن معرفی زبان ++C و مزیت آن نسبت به دیگر زبانهای برنامهنویسی
توسط کامبیز اسدزاده، در برنامه نویسی در C و ++C
- جدید
- سیپلاسپلاس
- (و 9 مورد دیگر)
- 0 پاسخ
- 15,955 بازدید
-
آموزش نصب و راه اندازی کتابخانه در ++C
توسط کامبیز اسدزاده، در برنامه نویسی در C و ++C
- کتابخانه
- سیپلاسپلاس
- (و 6 مورد دیگر)
- 0 پاسخ
- 14,918 بازدید
-
سیستم مدیریت محتوا ساخت و توسعهٔ وبسایت توسط ++C
توسط کامبیز اسدزاده، در برنامه نویسی در C و ++C
- سیپلاسپلاس
- وبسایت
- (و 3 مورد دیگر)
- 13 پاسخ
- 10,508 بازدید
-
سیپلاسپلاس مدرن چرا و چگونه باید ++C را یاد بگیریم؟
توسط کامبیز اسدزاده، در برنامه نویسی در C و ++C
- برنامهنویسی
- یادگیری
- (و 4 مورد دیگر)
- 0 پاسخ
- 8,767 بازدید
-
معرفی و راهاندازی OpenCL
توسط کامبیز اسدزاده، در کتابخانهی OpenCL
- نصب
- اوپن سی اِل
- (و 2 مورد دیگر)
- 0 پاسخ
- 7,953 بازدید
-
- 0 پاسخ
- 7,333 بازدید
-
سیپلاسپلاس مدرن قابلیتهای ممتاز و پیشرفتهٔ ++C در استانداردهای جدید
توسط کامبیز اسدزاده، در برنامه نویسی در C و ++C
- 2 پاسخ
- 6,639 بازدید
-
- 0 پاسخ
- 4,814 بازدید
-
- 0 پاسخ
- 3,859 بازدید
-
- 0 پاسخ
- 3,763 بازدید
-
-
موضوع ها
-
- 10 پاسخ
- 127 بازدید
-
- 1 پاسخ
- 78 بازدید
-
سوال: بهترین پایگاه داده برای سی پلاس پلاس چیه؟
توسط Hamed123، در سوالات عامیانه در رابطه با ++C مدرن
- در انتظار بهترین پاسخ
- برنامهنویسی
- برنامه سیپلاسپلاس
- (و 2 مورد دیگر)
- 0 رای
- 1 پاسخ
-
سوال: خطا در اجرای qt creator8 و assistant در کیوت 6.4
توسط chikar، در عمومی و دسکتاپ
- در انتظار بهترین پاسخ
- 0 رای
- 4 پاسخ
-
- 0 رای
- 4 پاسخ
-
- 1 پاسخ
- 121 بازدید
-
- 1 پاسخ
- 128 بازدید
-
- 0 رای
- 1 پاسخ
-
- 0 پاسخ
- 297 بازدید
-
idle چرا کاراکتر های کنترلی در پایتون کار نمی کنند؟
توسط Magnet_code، در برنامه نویسی با Python
- کاراکتر کنترلی
- پایتون
- (و 1 مورد دیگر)
- 0 پاسخ
- 260 بازدید
-
نوشتههای ویژه
-
فرق بین کامپایل استاتیک و داینامیک
توسط کامبیز اسدزاده
فرق بین کامپایل استاتیک و داینامیک قبل از اینکه فرق بین ایستا (استاتیک) - Static و پویا (داینامیک) - Dynamic را بدانیم لازم است در رابطه با چرخهٔ زندگی نوشتن یک برنامه و اجرای آن آشنا شویم. هر برنامه برای اولین بار توسط یک محیط توسعه (Editor) یا IDE توسط برنامهنویسان انتخاب و به صورت فایل متنی قابل ویرایش میباشد. سپس فایل متنی که شامل کدهای نوشته شده توسط برنامهنویس تحت زبان برنامهنویسی مانند C، C++ و غیره... میباشد توسط کامپایلر به کد شیء ای تبدیل میشود که ماشین بتواند آن را درک کرد- 0 دیدگاه
- 3,453 مشاهده
-
پشت پردهٔ تحریمهای اپل و وضعیت کنونی اپلیکیشنهای ایرانی
توسط کامبیز اسدزاده
مدتی است در مورد مسدود شدن اپلیکیشنهای ایرانی برای iOS از طرف شرکت اپل خبرهایی به گوش میرسد که در سایتها و پایگاههای خبری از سمت نویسندگان و افراد غیرفنی تجزیه تحلیل و روشهای دور زدن آنها ارائه میشود. واقعیت بر دلیل نوشتن این مقاله این است که این فرصت و مشکلات کنونی آبی گلآلود برای سودجویانی شده است که کاربران از آن بیخبرند! هر روز یک توسعهدهنده یک سایت جدید راهاندازی میکند و با ادعای ارائه بستری نامحدود اقدام به تبلیغات میکند. بنده نیز به عنوان توسعهدهنده وظیفهٔ خودم میدانم که- 0 دیدگاه
- 1,293 مشاهده
-
چشمانداز فنی برای کیوت ۶
توسط کامبیز اسدزاده
این چشمانداز احتمالاً برای دوستداران کتابخانهٔ قدرتمند Qt و طرفدارانش جذاب باشد! بنابراین من سعی کردهام تا نتایج پست رسمی کیوت را در رابطه با چشمانداز فنی برای آیندهٔ کیوت نسخهٔ ۶ است در اختیار شما قرار دهم. تقریباً ۷ سال پیش کیوت نسخهٔ ۵.۰ منتشر شد! از آن زمان بسیاری از چیزها در دنیای اطراف ما تغییر پیدا کرده است. و اکنون وقت آن رسیده است که چشمانداز جدیدی را از نسخهٔ جدیدتر تعریف کنیم. بنابراین در این پست ما به معرفی مهمترین مواردی که به کیوت ۶ مرتبط است را میپردازیم. به نق- 6 دیدگاه
- 2,748 مشاهده
-
آیندهٔ توسعهٔ وب تحت فناوری WebAssembly
توسط کامبیز اسدزاده
با توجه به محبوبیت صنعت وِب، سالهاست زبانهای برنامهنویسی در این زمینه پیشرفتها و کاربردهای چشمگیری را داشتهاند، از جمله جاوااسکریپت (JS) به عنوان یک زبان قابل اجرا در داخل مرورگر شناخته میشود. هرچند بسیار محبوب و کاربردی است، اما این زبان قطعاً مشکلات خودش را دارد که برخی از آنها عدم انعطافپذیر بودن، سرعت پایین اجرا و همچنین انواع غیر ایمن آن است که این باعث میشود برای محاسبات و کارهای پیچیده جوابگو نباشد. هرچند گزینههایی مانند CoffeeScript و TypeScript وجود دارند و نسبتا- 2 دیدگاه
- 2,315 مشاهده
-
از تلفن همراه تا سکوی گیت هاب!
توسط Max Base
سلام. عدم دسترسی به یک سیستم مناسب و با خبر نبودن از حساب کاربری گیت هاب خود یکی از مشکلاتی بود که در این چند ساله برنامه نویسان با آن روبرو بودند. چک کردن حساب ایمیل در تلفن همراه می توانست تا حدودی به این موضوع کمک کند. اما یک اپلیکیشن اختصاصی برای این مورد می تواند این امر را به بهترین شکل پوشش دهد. بعد از کارهایی که برروی اپلیکیشن رسمی شرکت گیت هاب برای پلتفرم iOS انجام شد و خوشبختانه بدون هیچ مشکلی در بزرگ رویداد و کنفرانس شرکت و مایکروسافت - GitHub Universe 2019 در تاریخ Nov- 1 دیدگاه
- 607 مشاهده
وبلاگهای سایت ما
-
با سلام و درود،
پیرو مقالهٔ قبلی در رابطه با بخشی از نهاییسازیهای استاندارد ۲۳
در این مقاله قصد داریم در رابطه با استاندارد ۲۶ و نهاییسازیهای ۲۳ یک جمعبندی داشته باشیم که بسیار در شناخت و بهروز رسانی سریع از پیشرفت این زبان را به ما نشان میدهد.
طبق جلسات اخیر از کمیتهٔ استانداردسازی، در اولین جلسه، کمیته بر اصلاح ویژگیهای C++23 متمرکز شد که عبارتند از:
-
عملگر
static operator[]
-
ویژگی
static constexpr
در توابعconstexpr
-
محدودهٔ ایمن range-based در
for
-
تعامل
std::print
با سایر خروجی های کنسول -
رابط الگوی مونادیک برای
std::expected
-
خاصیت
static_assert (false)
و سایر ویژگیها
در جلسهٔ دوم، کمیته بر روی توسعه ویژگیهای جدید برای C++26 کار کرد، از جمله:
-
ویژگیهای
std::get
وstd::tuple_size
-
ماکروی
#embed
-
بدست آوردن
std::stacktrace
از استثناءها - کرووتینهای (coroutines) پشتهای
در ویژگیهای سیپلاسپلاس ۲۳ (
static operator[]
)تابستان گذشته، کمیته ویژگی
static operator()
را به استاندارد C++23 اضافه کرد و امکان تعریفoperator[]
را برای چندین آرگومان فراهم کرد. مرحلهٔ منطقی بعدی دادن فرصتهای برابر به این عملگرها بود، یعنی اضافه کردن توانایی نوشتنِstatic operator[]
.enum class Color { red, green, blue }; struct kEnumToStringViewBimap { static constexpr std::string_view operator[](Color color) noexcept { switch(color) { case Color::red: return "red"; case Color::green: return "green"; case Color::blue: return "blue"; } } static constexpr Color operator[](std::string_view color) noexcept { if (color == "red") { return Color::red; } else if (color == "green") { return Color::green; } else if (color == "blue") { return Color::blue; } } }; // ... assert(kEnumToStringViewBimap{}["red"] == Color::red);
آیا این کد واقعاً کارآمد برای تبدیل رشته به
enum
است؟ممکن است تعجب آور باشد، اما کد فوق در واقع بسیار کارآمد است. توسعهدهندگانِ کامپایلر از رویکردهای مشابهی استفاده میکنند و ما نیز تکنیک مشابهی را در چارچوب userver پیادهسازی کردهایم. ما یک کلاس جداگانه به نام
utils::TrivialBiMap
با رابطکاربری راحتتر ایجاد کردهایم.constexpr utils::TrivialBiMap kEnumToStringViewBimap = [](auto selector) { return selector() .Case("red", Color::red) .Case("green", Color::green) .Case("blue", Color::blue); };
راندمان بالا به لطف ویژگی کامپایلرهای بهینهسازی مدرن به دست میآید (اما هنگام نوشتن یک راه حل کلی باید بسیار مراقب بود). پیشنهاد در سند P2589R1 تمام جزئیات لازم را شرح میدهد.
ویژگی static constexpr در توابع constexpr
استاندارد C++23 عملکرد خود را با افزودن
constexpr
به_chars/from_chars
گسترش داده است. اما برخی از اجرا کنندهگان با مشکل مواجه شدند. چندین کتابخانهٔ استاندارد حاوی آرایههای ثابتی برای تبدیل سریعstring<>number
بودند که به عنوان متغیرهای ثابت در توابع اعلام شدند. متأسفانه، این مانع استفاده از آنها در توابعconstexpr
شد. این مسئله قابل حل است، اما راه حل ها واقعاً ناشیانه به نظر میرسید. در نهایت، کمیته با اجازه دادن به استفاده از متغیرهایstatic constexpr
در توابعconstexpr
، همانطور که در سند P2647R1 مشخص شد که مشکل را حل کرده است. یک پیشرفت کوچک، اما خوشایند.محدودهٔ ایمن range-based در حلقهٔ for
این احتمالاً هیجان انگیزترین خبری است که از دو نشست جلسهٔ استانداردسازیهای گذشته منتشر میشود! در مورد آن، اجازه دهید با یک معمای سرگرم کننده شروع کنیم: آیا میتوانید اشکال موجود در کد را شناسایی کنید؟
class SomeData { public: // ... const std::vector<int>& Get() const { return data_; } private: std::vector<int> data_; }; SomeData Foo(); int main() { for (int v: Foo().Get()) { std::cout << v << ','; } }
هرچند پاسخ آن در اینجا آمده است:
The Foo() function returns a temporary object, and when the Get() method is called on this object, it returns a reference to the data inside the temporary object. The range-based for loop is then transformed into a code close to this one: auto && __range = Foo().Get() ; for (auto __begin = __range.begin(), __end = __range.end(); __begin != __end; ++__begin) { int v = *__begin; std::cout << v << ','; } Here, the first string is equivalent to this: const std::vector<int>& __range = Foo().Get() ; The result is a dangling reference.
حلقههای مبتنی بر محدوده (Range-based for) شامل فرآیندهای زیربنایی زیادی هستند و در نتیجه، این نوع باگها ممکن است همیشه آشکار نباشند. در حالی که میتوان این مشکلات را از طریق آزمایشهای مربوط به sanitizersها به طور مؤثر تشخیص داد، پروژههای نوین معمولاً آنها را بهعنوان روش استاندارد شامل میشوند (پروژههای مطرحی مانند Yandex، از این قاعده مستثنی نیستند). با این حال، ایدهآل است که در صورت امکان از چنین اشکالاتی به طور کامل اجتناب کنید. در RG21، ما اولین تلاش خود را برای بهبود این وضعیت چهار سال پیش با سند D0890R0 انجام دادیم. متأسفانه، این روند در مرحله بحث متوقف شد. خوشبختانه، Nicolai Josuttis ابتکار عمل را انتخاب کرد و در C++23، کدهای مشابه دیگر مرجع معلق (dangling reference) ایجاد نمیکنند. تمام اشیایی که در سمت راست
:
در یک حلقه for مبتنی بر محدوده (ranges) ایجاد میشوند، اکنون فقط هنگام خروج از حلقه از بین میروند. برای جزئیات فنیِ بیشتر، لطفاً به سند P2718R0 مراجعه کنید.ویژگی std::print
در C++23، یک بهروزرسانی کوچک اما قابل توجه برای
std::print
وجود دارد: خروجی آن برای «همگامسازی» با سایر خروجیهای داده تنظیم شده است. در حالی که بعید است کتابخانههای استاندارد در سیستمعاملهای نوین تغییرات قابل توجهی را تجربه کنند، استاندارد بهروز شده اکنون تضمین میکند که پیامها به ترتیبی که در کد منبع ظاهر میشوند به کنسول خروجی ساطع میشوند:printf("first"); std::print("second");
رابط الگوی مونادیک برای std::expected
یک ویژگی نسبتاً مهم در آخرین لحظه به C++23 اضافه شد: یک رابط مونادیک برای
std::expected
، مشابه رابط مونادیک که قبلاً برایstd::optional
موجود بود، اضافه شده است.using std::chrono::system_clock; std::expected<system_clock, std::string> from_iso_str(std::string_view time); std::expected<formats::bson::Timestamp, std::string> to_bson(system_clock time); std::expected<int, std::string> insert_into_db(formats::bson::Timestamp time); // Somewhere in the application code... from_iso_str(input_data) .and_then(&to_bson) .and_then(&insert_into_db) // Throws “Exception” if any of the previous steps resulted in an error .transform_error([](std::string_view error) -> std::string_view { throw Exception(error); }) ;
میتوانید شرح کاملی از تمام رابطهای مونادیک برای
std::expected
را در سند P2505R5 بیابید.خاصیتstatic_assert (false) و سایر ویژگیها
علاوه بر تغییرات قابل توجهی که در بالا ذکر شد، تعداد زیادی بازنگری برای حذف لبههای ناهموار جزئی و بهبود توسعه روزمره انجام شده است. به عنوان مثال، فرمتکنندهها برای
std::thread::id
وstd::stacktrace
(P2693 سند) تا بتوان از آنها باstd::print
وstd::format
استفاده کرد. به ویژهstd::start_lifetime_a
بررسیهای زمان کامپایل اضافی را در سند P2679 دریافت کرده است. قابل توجه است که خاصیتstatic_assert(false)
در توابع الگو (template function) دیگر بدون نمونهسازی تابع فعال نمیشود، به این معنی که کدی مانند زیر فقط در صورت ارسال نوع داده اشتباه، عیبیابی را کامپایل و صادر میکند:template <class T> int foo() { if constexpr (std::is_same_v<T, int>) { return 42; } else if constexpr (std::is_same_v<T, float>) { return 24; } else { static_assert(false, "T should be an int or a float"); } }
علاوه بر تغییراتی که قبلاً ذکر شد، بهبودهای بیشماری در خاصیت (ranges) از C++23 انجام شده است. مهمترین آنها گنجاندن
std::views::enumerate
در سند P2164 است:#include <ranges> constexpr std::string_view days[] = { "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun", }; for(const auto & [index, value]: std::views::enumerate(days)) { print("{} {} \n", index, value); }
ویژگیهای سیپلاسپلاس ۲۶
ویژگیهای std::get و std::tuple_size برای (aggregates) تجمیع
یک ایدهٔ جدید و هیجان انگیز برای بهبود ++C وجود دارد که در حال حاضر به طور فعال در Yandex Go و چارچوب userver استفاده میشود و به لطف Boost.PFR برای هر کسی که آن را میخواهد در دسترس است.
اگر در حال نوشتن یک کتابخانهٔ مبتنی بر الگو (template) و عمومی هستید، به احتمال زیاد باید از
std::tuple
وstd::pair
استفاده کنید. با این حال، برخی از مشکلات در این نوع وجود دارد. اولاً، آنها خواندن و درک کد را دشوار میکنند زیرا ورودیهای نامِ واضحی ندارند، و تشخیص معنای چیزی مانندstd::get<0>(tuple)
میتواند چالش برانگیز باشد. علاوه بر این، کاربران کتابخانهٔ شما ممکن است نخواهند مستقیماً با این انواع کار کنند و درست قبل از فراخوانیِ روشهای شما، اشیاءای از این نوع ایجاد میکنند که به دلیل کپی کردن دادهها میتواند ناکارآمد باشد. ثانیاً،std::tuple
وstd::pair
بیاهمیت بودن انواعی را که ذخیره می کنند، «تبلیغ نمی کنند». در نتیجه، هنگام ارسال و برگرداندنstd::tuple
وstd::pair
از توابع، کامپایلر ممکن است کدی را با کارآیی پایینتر تولید کند. با این حال، aggregates (تجمیعها) - ساختارهایی (struct) با میدانهای عمومی و بدون عملکرد خاص - عاری از اشکالات ذکر شده هستند.ایدهای که پشت سند P2141R0 وجود دارد، این است که با کار کردن
std::get
وstd::tuple_size
آنها، امکان استفاده از تجمیعها در کدهای عمومی را فراهم میکند. این به کاربران امکان میدهد تا ساختارهای خود را مستقیماً بدون کپی برداری غیر ضروری به کتابخانهٔ عمومی شما منتقل کنند. این ایده به خوبی توسط کمیته مورد استقبال قرار گرفت، و ما در آینده روی آزمایش و رسیدگی به هرگونه لبهٔ ناهموار و بالقوه در این زمینه کار خواهیم کرد.ماکروی
#embed
در حال حاضر، توسعهٔ فعالی روی یک استاندارد زبان C جدید (یک استاندارد بدون کلاس، بدون ++) وجود دارد که شامل بسیاری از ویژگیهای مفیدی است که مدتهاست در ++C وجود داشته است (مانند:
nullptr، auto، constexpr، static_assert، thread_local، [[noreturn]).]
)، و همچنین ویژگیهای کاملاً جدید برای ++C. خبر خوب این است که برخی از ویژگیهای جدید از استاندارد جدید C به C++26 منتقل میشوند. یکی از این موارد جدید،#embed
است - یک دستورالعمل پیش پردازنده برای جایگزینی محتویات یک فایل به عنوان یک آرایه در زمان کامپایل:const std::byte icon_display_data[] = { #embed "art.png" };
شرح کامل این ایده در سند P1967 موجود است.
بدست آوردن std::stacktrace از استثناءها
در اینجا، ایدهٔ سند P2370 در WG21 با یک شکست غیرمنتظره روبرو شده است. توانایی به دست آوردن ردیابی پشته از یک استثناء در اکثر زبانهای برنامهنویسی وجود دارد. این ویژگی فوقالعاده مفید است و به جای پیامهای خطای غیر اطلاعاتی مانند
Caught exception: map::at
تشخیصهای آموزندهتر و قابل فهمتر را امکانپذیر میکند که نمونه مثال آن به صورت زیر است:Caught exception: map::at, trace: 0# get_data_from_config(std::string_view) at /home/axolm/basic.cpp:600 1# bar(std::string_view) at /home/axolm/basic.cpp:6 2# main at /home/axolm/basic.cpp:17
هنگامی که در محیط یکپارچه سازی پیوسته (CI) استفاده میشود، این ویژگی میتواند فوقالعاده مفید باشد. این به شما امکان میدهد تا به سرعت مسائل را در آزمون شناسایی کنید و از دردسر بازتولید مشکل به صورت محلی اجتناب کنید، که ممکن است همیشه امکانپذیر نباشد. متأسفانه کمیتهٔ بینالمللی به طور کامل از این ایده استقبال نکرد. اما تیم توسعه نگرانیها را بررسی میکند و روی اصلاح این ایده کار خواهد کرد تا بتواند حمایت بیشتری را کسب کند.
کسانی که معمولاً میپرسند چه تفاوتی بین زبانهای دیگر و استانداردهای سی++ وجود دارد، در اینجا میتوانند به این موضوع دقت کنند که زبانی مانند سیپلاسپلاس دارای کمیتهٔ استانداردسازی بینالمللی است و هر تغییری باید قابل توجیه باشد.
کروتینهای (coroutines) پشته
سرانجام، پس از سالها کار، استاندارد سیپلاسدلاس به افزودن پشتیبانی اولیه برای برنامههای پشتهای در C++26 نزدیک شده است (به سند P0876 مراجعه کنید). ارزش آن را دارد که بیشتر در مورد روالهای پشتهای یا بدون پشته بررسی کنیم. برنامههای بدون پشته به پشتیبانی کامپایلر نیاز دارند و نمیتوانند به تنهایی به عنوان یک کتابخانه پیادهسازی شوند. از سوی دیگر، کروتینهای پشتهای را میتوان به تنهایی پیادهسازی کرد - برای مثال، با Boost.Context.
در حالتهای قبلی، تخصیص حافظه کارآمدتر، بهینهسازی بالقوه بهتر کامپایلر و توانایی تخریب سریع آنها را ارائه میدهد. آنها همچنین در حال حاضر در C++20 در دسترس هستند. ادغام نمونههای اخیر در پروژههای موجود بسیار آسانتر است، زیرا نیازی به بازنویسی کامل در یک اصطلاح جدید مانند برنامههای بدون پشته ندارند. در واقع، آنها جزئیات پیادهسازی را به طور کامل از کاربر مخفی میکنند و آنها را قادر میسازند تا کد خطی سادهای را که در لایههای زیرینِ ناهمزمانی هستند بنویسند.
بدون پشته (Stackless)
auto data = co_await socket.receive(); process(data); co_await socket.send(data); co_return; // requires function to return a special data type
پشتهای (Stackfull)
auto data = socket.receive(); process(data); socket.send(data);
سند P0876 قبلاً در زیرگروه اصلی قرار داشته است. پس از بحث و گفتگو، تصمیم گرفته شد که مهاجرت این گونه برنامهها (coroutines) بین رشتههای اجرایی ممنوع شود. دلیل اصلی این ممنوعیت این است که کامپایلرها دسترسی به TLS را بهینه کرده و مقادیر متغیرهای TLS را در حافظه پنهان ذخیره میکنند:
thread_local int i = 0; // ... ++i; foo(); // Stackful coroutines can switch execution threads assert(i > 0); // The compiler saved the address in a register; we’re working with the TLS of another thread
جمعبندی
در نهایت استاندارد C++23 رسماً به مقامات بالاتر از کمیتهٔ ISO ارسال شده است و به زودی به عنوان یک استاندارد کامل منتشر خواهد شد. در همین حال، توسعه C++26 در نوسان کامل است و چشماندازهای هیجانانگیزی برای خاصیتهای متنوع وجود دارد. اگر ایدههای نوآورانهای برای بهبود ++C دارید، با خیال راحت آنها را به اشتراک بگذارید. یا - حتی بهتر - ارسال یک پیشنهاد را در نظر بگیرید.
- ادامه مطلب...
-
- 0 دیدگاه
-
عملگر
-
در سالی که گذشت (۲۰۲۲)، سیپلاسپلاس محبوبترین زبان برنامهنویسی با رشد شاخص محبوبیت ۴.۶۲٪ انتخاب شد!
جایزه زبان برنامهنویسی سال TIOBE به ++C تعلق گرفت! این جایزه به زبان برنامهنویسی تعلق میگیرد که بیشترین افزایش محبوبیت را در یک سال تجربه کرده است.
شاخص TIOBE میزان محبوبیت زبانهای برنامهنویسی را اندازهگیری میکند. با این حال، قبل از نتیجهگیری، توجه به این نکته مهم است که Index (شاخص) نه چیزی در مورد کیفیت یک زبان برنامهنویسی میگوید و نه ادعا میکند. این رتبهبندی با تجزیه و تحلیل تعداد مهندسان ماهر در یک زبان خاص، تعداد دورههای آموزشی در آن زبان و تعداد فروشندگان شخص ثالثی که محصولات یا خدمات مرتبط با آن زبان را ارائه میدهند، محاسبه میشود. این فهرست ماهانه بهروز میشود و بر اساس دادههای موتورهای جستجوی محبوب مانند گوگل، بینگ و یاهو است. جایزهٔ زبان برنامهنویسی سال TIOBE در ژانویه هر سال بر اساس رتبهبندی سال قبل اعلام میشود.
سیپلاسپلاس یک زبان برنامهنویسی در سال ۲۰۲۲ انتخاب شد که با محبوبیت رشد ۴.۶۲ درصد و بیشترین رشد انتخاب شده است. این زبان برنامهنویسی سطح بالا با کارایی بالا و چندمنظوره برای توسعهٔ نرمافزارهای سیستمی، برنامههای کاربردی و بازیهای ویدیویی با انعطافپذیری و قابلیت کنترل سطوح پایین است. این زبان در نوامبر ۲۰۲۲ جاوا را پشتسر گذاشت و به رتبهٔ سوم شاخص رسید و محبوبیت آن به طور پیوسته در حال افزایش است. نایب قهرمان در سال ۲۰۲۲ به ترتیب C با رشد ۳.۸۲ و پایتون با ۲.۷۸ درصد رشد بودهاند.
- ادامه مطلب...
-
- 0 دیدگاه
-
سلام و درود،
این اواخر راجع به مشورت و راهنماییها خیلی ساده به قضیه نگاه میشه، همه فکر کردن کشکه و فقط با دونستن JS یا QML میشه محصول ساخت. البته این مثال JS و QML یک مثال هست و این مسئله در همهٔ ابزارها و حول محور حوزهٔ کامپیوتر و نرمافزار به چشم میخوره، هرچند روی داستان ساده هست اما حتی پشت این کارهای ساده کلی زمان باید صرف بشه. همین گرفتن یک دادهٔ ساده از سمت سرور و تجزیه کردنش سمت JS نیاز به یک دانش خوب در مورد معماری Apiداره، نیاز به آگاهی از استانداردهای Http داره، نیاز به تخصص کافی در ریز به ریز مسائل داره، نیاز به آگاهی لازم در مورد شبکه و نحوهٔ مدیریتش داره، نیاز به درک خوب راجع به کلاسهای شبکه و نحوهٔ مدیریت بستهها داره و صدها جور مسئلهٔ دیگه.
یا راهنمایی نکنیم یا میکنیم همه چیز رو ساده نشون ندیم!
به خصوص برای کسایی که سالها یه چیز دیگه خوندن و الآن قراره وارد این حوزه بشن.
قشنگ واقعیت رو باید به نمایش گذاشت، و اگرنه به اشتراک گذاری چهارتا UI خفن که بگین با QML هم میشه کاری نداره، سه سوته میشه اینها رو طراحی کرد.اگر کسی اطلاعات کافی و پایهٔ تخصصی نداشته باشه و همینطور متکی به یک ابزار یا زبان پیش بره چه اتفاق میافته؟ از نظر من قطعاً بهتون از نظر تجربی آسیب میزنه، ساخت یک محصول واقعاً به این سادگیها نیست که تو گروههای تلگرامی داریم راجع بهش صحبت میکنیم! قضیه خیلی پیچیدهتر از اینهاست. فراموش نکن در این حوزه اگه یک کار ساده رو سریع انجام میدیم یا به نتیجه میرسونیم دلیلش به خاطر سالها زمان و تلاشه، امکان نداره کسی حتی با ۲..۳ سال تجربه یک کار رو سریع بتونه صفر تا صد انجام بده و مشکلی نداشته باشه یا نتیجهٔ اون در سطح یک استاندارد معتبر باشه.
ساخت محصول اصول داره که اولین مرحلش شفافسازی و نقشهٔ توسعه و ایدهپردازی درسته، نباید مثل بعضی از مشتریها باشه که پشت تلفن زنگ میزنن میگن یه سایت میخوایم یا یه اپلیکیشن چند میگیری و بعدش شروع کنن به چک و چونه زدن و شما هم کیف کنی بگی که آره دیگه مشتری دارم!
شما تا زمانی که جزء به جزء محصول رو آگاه نباشید، یعنی تا زمانی که دقیق متوجه نشید نیاز چی هست و روش حلش رو متوجه نباشید منطقی نیست که واردش بشید. چون همین مرحلهٔ نیازسنجی به قدری مهمه که فرآیند مسیر و نقشهٔ توسعهٔ یک محصول رو نشونتون میده و اگه درست تشخیص ندین و ابزارها و راهکارها رو درست انتخاب نکنید بی برو برگرد با مشکل مواجه میشید.
مشکلاتش میتونه به این صورت باشه:
- سردرگمی
- عدم توانایی کالبدشکافی مسئله
- عدم توانایی حل مسئله
- عدم توانایی انتخاب یک روش یا ابزار صحیح و مناسب
- عدم تعامل شما با مشتری
- عدم رضایت شما از حقالزحمه
- عدم رضایت مشتری از نتیجهٔ کار
- عدم توانایی در پاسخدهی به اعضا و شرکای کلیدی دیگه در محصولات تجاری و بزرگ!
- و هزاران مسئلهٔ دیگه که همشون نتیجهٔ تشخیص نا درسته.
- در کنارش مهمترین خاصیتی که پیدا میکنه این خواهد بود در اوج نادانی احساس خواهد کرد که همه چیز دان هست! به قولی همه چیز گیگ!از نظر من حداقل مواردی که (به طور خیلی خیلی خلاصه و محدود) نیاز هست تا یک متخصص بتونه پاسخگوی تصمیمگیری نقشهٔ توسعهٔ یک محصول برای مشتری در ابعاد مختلف و سطوح متفاوت از حوزههای موجود در قالب اصولی باشه به صورت زیر هستند:
۱- آشنا مبانی کامپیوتر که امر طبیعیه (شامل درک و فهم مسائل و نحوهٔ حلشون متناسب با پلتفرم اجرایی محصول)
۲- آشنا به ساختار نوع محصول استاندارد در یک حوزه مثل: وب، آیاواس، اندروید یا دسکتاپهای مختلف مثل لینوکس، مک و ویندوز، اینترنت اشیاء و دیگر موارد.
۳- آشنا به فلسفهٔ بکاند و فرانتاند یا ترکیبی از این دو به همراه ابزارهای مناسب.
۴- آشنا به اصول طراحی UI/UX به عنوان یک نیاز و یک فاکتور مهم در ساخت محصولی که وابسته به عملکرد کاربر داره و در حوزهٔ فرانتاند مهم و کاربردی هست.
۵- آشنا به اصول SOLID و امثالش مهم هستند.
۶- آشنا اصول برنامهریزی ساخت بانک اطلاعاتی، اینکه از چه بانک اطلاعاتیای استفاده کنی و چرا؟
۷- آشنا به ارتباطات دادهای، جداول و ارتباط بین فیلدها، جدوال و روشهای درست تبادل اطلاعات مابینی دادهها.
۸- آشنا و تسلط کافی به یک محیط توسعه و ادغام ابزارها و محیط طراحی برای هدف.
۹- آشنا به معماری ساختار و رابطهای برنامهنویسی (Api)
۱۰- آشنا به استانداردهای Http، درک و مدیریت درخواست، پاسخها و ...
۱۱- آشنا به الگوهای طراحی برنامهنویسی (DP)
۱۲- آشنا به روشهای نگهداری و آزمایش نرمافزار و کدها به خصوص درک مبحث Fault tolerance.
۱۳- آشنا به روشهای اطمینانسازی و ایمنسازی پردازشهای داخلی نرمافزار برای جلوگیری یا دشوار سازی نفوز و خرابکاری
۱۴- آشنا به روشها و معماریهای احراز هویت و نحوهٔ ادغامش با نرمافزار مثل:JWT, OAuth, AWS و غیره...
۱۵- آشنا به نوع پارادایمهای زبان برنامهنویسی، در قالبهای (دستوری) Imperative و (اعلانی) Declarative مثل OOP، functional و دیگر موارد.
۱۶- آشنا به سبک معماری نرمافزاری (Microservice یا مثلاً Monolith) مزایا و معایبشون.
۱۷- آشنا به سبک معماری طراحی مانند MVC در طراحی بدنهٔ محصول.
۱۸- آشنا به سبک و الگوهای طراحی ساختاری در بکاند مانند Builder، Abstract، Factory و غیره.
۱۹- آشنا به ساختار یک زبان (در صورتی که میخواین جوابگوی مسائلِ پیش آمده باشید) کالبدشکافی زیرپوستی و عمیق یک زبان مهمه.
۲۰- آشنا و درک کامپایلرها و مفسرها، تفاوتها و شیوههای عملکردیشون نسبت به کدهای بهینه شده و عادی.
۲۱- آشنا و درک مدلهای مختلفی از سیستمهای توزیع شده مثل IaaS، PaaS، SaaS یا FaaS.
۲۲- آشنا به ابزارهای ساخت و فرآیند کاری اونها مثل CMake، NMake، QMake و غیره.
۲۳- آشنا به روشهای مدیریت وابستگیهای نرمافزار و ابزارهای لازم برای بستهبندی بهتر خروجی.
۲۴- آشنا به روشهای کدنویسی قابل آزمایش (Unit Test) و استفاده از ابزارهایی مثل CTest, GTest, Catch2 و غیره.
۲۵- آشنا به توسعهٔ آزمون محور (Test Driven- Development)
۲۶- آشنا به گامها و شرایط نسخهنگاری و مراحل توسعهٔ نرمافزار (SDP)
۲۷- آشنا به روشهای امنیت در کد و توسعه به شیوههای بررسی از طریق Fuzz-Test، Sanitizer، آنالیزرهای پویا و ایستا و غیره...
۲۸-آشنا به قوائد طراحی بر پایهٔ خدمات مبتدی بر معماری ابری برای خدمات پیامی، وبسرویسها، پردازش و غیره.
۲۹- در سطوح وب آشنا به مکانیزم شاخص بندی، فاکتورهای SEO و شیوههای درست بهبود صفحات وب.
۳۰- آشنا به روشهای به کار گیری و پیادهسازی ثبت کنندهٔ وقایع در دل محصول و روشهای بازخورد برای توسعهٔ بهتر به همراه مانیتورینگ، نظارت و تریسینگ.
۳۱- در شرایط لزوم آشنا به نحوهٔ به کار گیری و دلیل استفاده از فناوریهایی مثل Redis، Memcached و غیره.
۳۲- آشنا و درک صحیح از مفاهیم همزمانی (Concurrency) و روشهای به کار گیری آن نسبت به زبان برنامهنویسی و شرایط مناسب استفاده.
۳۳- آشنا به سبک و قوائد و ساختار زبانهای برنامهنویسی و فرآیند ساخت و ترجمه.
۳۴- و تا صدها گزینهٔ دیگه میتونم لیست کنم اینجا که اگه انتخابتون زبانهای نزدیک به سیستم باشه این داستان در ادامهٔ این توضیحات سر به فلک میکشه نمونش کامپایلرها خودشون شونصد جور مباحث دارند، پلتفرمها ومعماریهای پردازندهای هم در این زبانها مهمن و شما حتی تا عمق سیستمعامل و رابطهای اونها و نحوهٔ رفتارشون باید اطلاعات کافی داشته باشید که هر کدوم به نوبهٔ خودشون هزاران صفحه میشه راجع بهشون کتاب معرفی کرد.این لیست چیزی بود که به زبان بسیار بسیار ساده شده و خیلی خلاصه به ذهنم رسید تا بدانید همچین هم الکی نیست ای عزیزانی که فتواهای صد من یه غاز میدین و این مسائل رو حل شده میدونید!
در ادامه اصل ماجرا خیلی فراتر از اینها هم هست که بخوای حساب کتاب کنی میبینی باید هفت خان رستم رو فتح کنی تا در تمامی سطوح پاسخگو باشی، این امر شدنی هست اما زمانی که شما محدود به یک موضوع باشید قطعاً درک همهٔ مسائل محدود و ناتوان در اجرای آن خواهید شد.
* وقتی میگم آشنا قطعاً در حد حروف الفبا کافی نیست، باید در حد نیاز تسلط و درک کافی ازشون وجود داشته باشه.
* همهٔ اینها رو باید در کمترین زمان ممکن نسبت به یک مشتری، محصول و نیاز تشخیص بدین و انتخاب کنید، به این کار میگن ارزیابی محصول بر اساس دانستههای فنی که تماماً متکی بر دانش و تجربهٔ شماست. (کارشناسی پروژه دقیقاً همین موضوع است).
* برای بهتر شدن و حرفهای تر شدن هم باید فراتر از اینها پیش برید و در قالب «مثلث دانش» بهبودش بدهید.
* محصولات معتبر جهانی حاصلِ چنین نقشههای پیشبردی هستند و اصول تخصصی و مهندسی رو رعایت میکنن تا به یک درجهٔ کیفی موفق و زبان زد میرسند. شاید این مسائل از نظر یک برنامهنویس ساده و نه چندان با تجربه مهم نباشه، اما در سطح کیفی یک محصول نرمافزاری همهٔ این مسائل مهم تلقی میشوند.برای همین میگم گولِ توصیههای ساده و ظاهر چهارتا برنامه یا کیوت، داتنت و امثال این ابزارها رو نخورید، پشت همهٔ نیازهای یک محصول به فاکتورهای بسیاری باید توجه کنید. فردا بخواهید بدون آگاهی در این مسائل وارد پروژههایی بشید که به ظاهر ساده هستند یا باید دست به گریبان دیگران باشید و توی گروهها مدام سوأل پرسی کنید و یا باید بیخیال آن شوید؛ چون به هیچ یک از این فاکتورهای مورد نیاز توسعه توجه نکردین! پس این اصول رو به عنوان سر نخ مطالعه کنید تا بخش بزرگی از سرگردانیهای شما حل شود.
این مواردی که این جا اشاره کردم، همونطور که گفتم بخش بسیار کوچکی از دنیای نیازمندیهای ساخت و ساز و طراحی یک محصول واقعی در پیرامون نرمافزار و کامپیوتر هست، اما یک دلگرمی بدم به کسایی که با خودشون فکر میکنند چنین مسیر یا نقشهای از راه که قراره پیش بگیرند سخته و همهٔ ماجرا این نیست (جزئیات رو در کتابها، موقعیت و فرصتهای شغلی، شکستها، موفقیتها و آزمون و خطاها یاد خواهند گرفت) و نتیجهٔ اون میتونه مطابق همین حکایت زیر باشه:
نقل قولحکایت برنامهنویسان، ابزارها، تجربه و تخصصی که در بازار بی ارتباط با آن نیست!
یک روز موتور یک کشتی بزرگی خراب شد.
مهندسان زیادی تلاش کردند تا مشکل را حل کنند اما هیچکدام موفق نشدند!
سرانجام صاحبان کشتی تصمیم گرفتند مردی را که سالها تعمیر کار کشتی بود، بیاورند...وی با جعبه ابزار بزرگی آمد و بلافاصله مشغول بررسی دقیق موتور کشتی شد.
دو نفر از صاحبان کشتی نیز مشغول تماشای کار او بودند.
مرد از جعبه ابزارش آچار کوچکی بیرون آورد و با آن به آرامی ضربه ای به قسمتی از موتور زد، بلافاصله موتور شروع به کار کرد و درست شد.یک هفته بعد صورتحسابی ده هزار دلاری از آن مرد دریافت کردند، صاحب کشتی با عصبانیت فریاد زد:
او واقعا هیچ کاری نکرد!
ده هزار دلار برای چه می خواهد بگیرد؟بنابراین از آن مرد خواستند ریز صورتحساب را برایشان ارسال کند؟
مرد تعمیر کار نیز صورتحساب را اینطور برایشان فرستاد:ضربه زدن با آچار: ۲دلار
تشخیص اینکه ضربه به کجا باید زده شود: ۹۹۹۸ دلارو ذیل آن نیز نوشت:
تلاش کردن مهم است.
اما دانستن اینکه کجای زندگی باید تلاش کرد میتواند همه چیز را تغییر بدهد. -
سادهترین راه برای افزودن کد سفارشی به سایتهایی که بر پایهٔ وردپرس ساخته شدهاند، بدون شکستن کد آن چیست؟
زبان برنامهنویسیِ ++C یکی از محبوبترین زبانهای برنامهنویسی است. آخرین آمار نشان میدهد که این زبان با سرعت بسیار زیادی در حال توسعه و پوستاندازی است.
این زبان، علیرغم اینکه بیش از 40 سال از عمرش میگذرد، همچنان زبان انتخابی برای بسیاری از برنامهنویسان در سراسر جهان است. برای بسیاری از موارد مانند برنامههای کاربردی دستکاری تصویر، بازیهای سه بعدی، شبیه سازیها، مرورگرهای وب و نرمافزارهای سازمانی استفاده میشود.
دلیلش این است که سیپلاسپلاس در حال تکامل است، به انرژی سبز اهمیت میدهد و در عین حال کارآیی بسیار بالا و بهینهای دارد. از آنجایی که این زبان پیچیدهتر از سایر زبانهای برنامهنویسی است، یک کمیتهٔ فرعی از یک سازمان چند سطحی وظیفه استانداردسازی آن را بر عهده دارد. سیپلاسپلاس اکنون از یک مدل قطار پیروی میکند و هر سه سال یکبار نسخههای جدید دریافت میکند که در مورد استانداردهای جدید، اخیراً مقالاتی منتشر شده است.
سیپلاسپلاس معمولاً برای توسعهٔ نرمافزار در مقیاس بزرگ استفاده میشود، اما میتوان از آن برای پروژههای توسعه وب نیز استفاده کرد. ممکن است تعجب کنید که چگونه از آن با وردپرس، یکی از محبوبترین سیستمهای مدیریت محتوا و سازندگان وب سایت امروزه استفاده کنید.
در این باره قبلاً من مقالاتی را منتشر کردهام که به صورت زیر آمدهاند:
در حالی که بسیاری از وب سایتها با استفاده از وردپرس به عنوان پایه ساخته میشوند، این لزوماً به این معنی نیست که اکوسیستم وردپرس تکامل یافته یا کامل است. به عنوان مثال، وردپرس تمرکز زیادی بر تجربهکاربران و نیازهای وبلاگ نویسان دارد، به همین دلیل است که بر چهار زبان HTML، CSS، جاوا اسکریپت و PHP متکی است و این بدان معناست که برای توسعهدهندگانی که میخواهند به طور کامل از قدرت آن استفاده کنند، محدودیتهایی وجود دارد. در حالی که افزونههایی مانند Custom Post Types برای گسترش عملکرد وردپرس وجود دارد و راههای زیادی برای افزودن قابلیتهای جدید بدون شروع از ابتدا وجود ندارد.
همچنین، افزودن کد ++C به طور مستقیم به یک سایت وردپرس توصیه نمیشود زیرا به طور بالقوه میتواند آسیب پذیریهای امنیتی را ایجاد کند و وب سایت را خراب کند. با این حال، اگر نیاز خاصی به اجرای کد ++C در سایت وردپرس شما وجود دارد، در اینجا روشهایی که میتوانید آن را انجام دهید گفته شدهاست:
شما می توانید یک برنامه یا کتابخانه مستقل ++C ایجاد کنید و سپس آن را از طریق وب API در معرض دید قرار دهید، که میتواند توسط وردپرس مصرف شود. بیایید نگاهی به مراحل کلی بیندازیم:
- کد ++C خود را بنویسید و آن را در یک برنامه یا کتابخانه مستقل کامپایل کنید.
-
عملکرد برنامه یا کتابخانه ++C را از طریق وب API به نمایش بگذارید. شما میتوانید از یک کتابخانه به عنوان
cpprestsdk
برای ایجاد نقاط پایانی API استفاده کنید. - برنامه یا کتابخانه ++C را بر روی یک سرور، یا در همان سرور سایت وردپرس خود یا در یک سرور جداگانه، مستقر کنید.
- در سایت وردپرس خود، از یک افزونه یا کد سفارشی برای درخواست HTTP به API و بازیابی نتایج استفاده کنید. شما میتوانید از کتابخانهای مانند cURL برای ارائه چنین درخواستهایی استفاده کنید.
- در صورت نیاز از نتایج بازیابی شده در سایت وردپرس خود استفاده کنید.
راه دیگر برای افزودن قابلیت ++C به سایت وردپرس استفاده از افزونهای است که به شما امکان میدهد کد ++C را مستقیماً در صفحات یا پستهای وردپرس جاسازی کنید. مراحل بسته به افزونهای که استفاده میکنید متفاوت است، اما در اینجا چند مرحله کلی وجود دارد که میتواند کمک کند.
- افزونهای را که از کد ++C پشتیبانی میکند را در سایت وردپرس خود نصب کنید.
- یک صفحه یا پست جدید در وردپرس ایجاد کنید و کد کوتاه [cpp] را به قسمت محتوا اضافه کنید.
-
در کد از نوع برچسبِ
[cpp]
، کد ++C خود را اضافه کنید. - صفحه یا پست را منتشر کنید و آن را مشاهده کنید تا کد جاسازی شده ++C را در عمل ببینید.
مجدداً توجه داشته باشید که افزودن کد ++C به طور مستقیم به یک صفحه یا پست میتواند خطرناک باشد. مهم است که پیادهسازی خود را به طور کامل آزمایش کنید تا مطمئن شوید که ایمن و قابل اعتماد است. از هر روشی که استفاده میکنید، به یک پایه محکم در سیپلاسپلاس و مهارتهای یکپارچه سازی وردپرس نیاز دارد. وقتی صحبت از وردپرس به میان میآید، شاید بهتر باشد از زبانی مانند PHP استفاده کنید.
اگر میخواهید دربارهٔ ++C و نحوهٔ به حداکثر رساندن آن برای پروژهتان بیشتر بدانید، میتوانید به آموزههای مربوط به سیپلاسپلاس در این سایت را بررسی کنید یا کتابهای پیشنهادی در بخش معرفی زبان را بخوانید. فراموش نکنید که سیپلاسپلاس یک زبان جذاب و همیشه در حال تکامل است و افزودن آن به مجموعه مهارتهای شما سودمند است.
- ادامه مطلب...
-
- 0 دیدگاه
-
سلام.
عدم دسترسی به یک سیستم مناسب و با خبر نبودن از حساب کاربری گیت هاب خود یکی از مشکلاتی بود که در این چند ساله برنامه نویسان با آن روبرو بودند.
چک کردن حساب ایمیل در تلفن همراه می توانست تا حدودی به این موضوع کمک کند. اما یک اپلیکیشن اختصاصی برای این مورد می تواند این امر را به بهترین شکل پوشش دهد.
بعد از کارهایی که برروی اپلیکیشن رسمی شرکت گیت هاب برای پلتفرم iOS انجام شد و خوشبختانه بدون هیچ مشکلی در بزرگ رویداد و کنفرانس شرکت و مایکروسافت - GitHub Universe 2019 در تاریخ November 13-14, 2019 رونمایی شد. به عنوان یکی از اعضای شرکت این نوید را می دهم که نوبت به آن رسید تا اپلیکیشن برای اندروید نیز پیاده شود.
در حال حاضر این اپلیکیشن در حال توسعه است و هنوز رونمایی نشده است.
برای این اپلیکیشن میزان پشتیبانی API 21+ Android device در نظر گرفته شده است و خواهد توانست از نسخه Android 5.0 به بالا را پشتیبانی کند.
می توانید پیشنهادات و نظرات خود را نیز ایمیل کنید. Max [@] Asrez {.DOR.} com
Hi, I'm Max Base.
GitHub team did work on the official GitHub application for the iOS platform and fortunately unveiled at the big event and conference(GitHub Universe 2019 on November 13-14, 2019). As a member of the company, I have the promise that the app will launch for Android.
This app is currently under development and has not been unveiled yet.
This app is designed to support Android 21+ API and will support Android 5.0 or later.
You can also email your suggestions and comments. Max [@] Asrez {.DOR.} com
Best,
Max Base
با تشکر
-
پس از انتشار مقاله اختصاصی Intel در زمینه گرافیک مجتمع نسل جدید آن با نام Gen 11 و پس از آن جنجالی که با اولین بنچمارک در رزولوشن 1080p ادامه یافت، در تعطیلات نوروزی حسابی سر و صدایی به پا کرده است؛ این تراشه گرافیکی مجتمع در چند پلتفرم پردازشی CPU محور اینتل نصب خواهد شد و بد نیست بدانید که اولین نسل با نام Ice Lake شناخته خواهند شد.
اینتل به تازگی یک درایور جدید برای تراشه های گرافیکی خود در ویندوز 10 را منتشر کرده است که به همراه داشبورد و برنامه نرم افزاری جدیدی است که به تازگی اخبار آن را برای شما عزیزان پوشش داده بودیم؛ اما نکته ای که در این درایور به چشم می خورد، لو رفتن عمدی یا سهوی اسامی برخی از CPU و تراشه های گرافیکی داخلی است که اینتل به زودی معرفی خواهد کرد.
در این لیست 13 نوع تراشه با معماری جدید گرافیکی Gen11 به چشم می خورند که از نسل Ice Lake خواهند بود. گرافیک مجتمع Iris Plus Graphics 950 قوی ترین پردازشگر این نسل است که دارای 64 واحد EU خواهد بود. این تراشه گرافیکی در پردازنده های Core i7 و Core i9 نیز نصب خواهد شد. گرافیک دوم با نام Iris Plus Graphics 940 شناخته می شود که در پردازنده های Core i5 نیز مورد استفاده قرار می گیرند. Iris Plus Graphics 940 ها با همین تعداد واحد EU دارای فرکانس پایین تری هستند.
سپس Iris Plus 930 و Iris Plus 920 را شاهد هستیم که تعداد واحد های EU آنها نیز 48 و 32 عدد است. iGPUهای Gen11 همچنان در مدل های کلیدی GT1 و GT2 معرفی می شوند. برای اطلاعات بیشتر به زمان بیشتری نیاز داریم. شایان ذکر است که لیتوگرافی تولید در این نسل به 10 نانومتری کاهش یافته است.
- ادامه مطلب...
-
- 0 دیدگاه
-
- 4
نوشته - 0
دیدگاه - 4345
مشاهده
نوشتههای اخیر
دو هفته پیش، نشست ۲۰۱۸ سیپلاسپلاس آغاز شد. شرکت کنندهها مدالهای خودشان را دریافت کردند چرا که همه چیز با هماهنگی بسیار خوبی به پایان رسید. این رویداد به عنوان یکی از چندین رویداد مهم
C++
بشمار میرود که هرساله توسط حامیان و علاقهمندانش برگزار میشود.سخنان کلیدی
امسال در این رویداد سه یادداشت کلیدی وجود داشت، که با حضور Andrei Alexandrescu ،Lisa Lippincott و Nicolai Josuttis ارائه شد.
اولین سخنران Andrei Alexandrescu بود، او این کنفرانس را با افکار و اندیشههای خودش برای شروع آغاز کرد عنوان موضوع آن به بَد بودنِ کپی
constexpr
ازstatic if
اشاره میکرد. او یک سخنران سرگرم کننده است، بنابراین سخنرانی او بسیار طبیعی در مورد یادداشتهای خودش منعکس میشد. همچنین او به عنوان یک توسعهدهندهٔ ++C به نقاط بسیاری اشاره کرد که کمیتهٔ استاندارد سازی زبان حرفهای او را تایید میکرد.سخنران دوم Lisa Lippincott روز دوم را با یک سخنرانی آغاز کرد که دیدگاههای مختلفی در مورد محاسبات و منطق که در آن به کار میرود ارائه داد. زمانی که مُجری لیزا را دعوت کرد، میدانست که این موضوع به عنوان یک نکته مهم برای فکر کردن است، چیزی که همه نمیتوانند به طور مستقیم آن را درک کنند و به آن دسترسی پیدا کنند. اما این تلنگری برای نحوهٔ درک کُد از دیدگاه ریاضی و دیدگاه جدیدی بود.
سخنران سوم و آخر Nicolai Josuttis بود که در مورد، او اولین سخنران در نشست Hartmut Kaiser در سال ۲۰۱۴ بود. در آن سخنرانی بسیار خوب درخشیده، بنابراین در قسمت سوم نقصهایی را با جزئیات در مورد نقاط خشن ++C نشان داد. این سخنرانی بسیار صادقانه بود! چرا که بسیاری از جزئیات خشن بودن سیپلاسپلاس را عنوان کرد که همگی با آن موافق بودند.
مذاکرات، مسابقه و گفتگوهای چند دقیقهای
جلسات و رویدادهای مرتبط با ++C همیشه گفتگوهای بسیار خوبی دارد، و با یک مسیر مشخص که هدفش آوردن سخنرانان جدید با دیدگاههای جدید است برگزار میشود. بازخورد سخنرانها در این رویداد خوب بود چرا که به برخی از نکات در مورد چگونگی بهبودها اشاره کردند.
تصویر بالا مربوط به Hana Dusíková است که میتوان به آن بهترین نمره را داد. بهترین سخنرانی هم مربوط به Andrei Alexandrescu بود که دنبال شد. در اولین عصر این رویداد، امتحان (Quiz) برجستهترین مورد رویداد در آن روز بود. سازماندهی آن توسط Diego و اسپانسری آن توسط Conan است که برای چند سال اخیر حمایت شده است. به نظر میرسید که سوالات امتحانی این سال سختتر از سوالات رویداد قبلی در سال گذشته بوده است. اما بار دیگر این سرگرمی ترکیب بسیار خوبی با ترس از سی++ را داشت.
هر یک از سوالات امتحانی یک خروجی از کُد را تولید میکردند، که هر گروه باید برای کسب امتیاز آن را مینوشتند. ده نوع کُد امتحانی وجود داشت که تهیه کنندهٔ گزارش برای به تصویر کشیدن آنها زیاد خوب عمل نکرده است. بنابراین تصویر زیر مربوط به سوالات چالشی در مورد سیپلاسپلاس است:
گفتگوهای کوتاه در طی جلسات سیپلاسپلاس صورت میگیرد. اما در سالهای گذشته روش به گونهای تغییر یافته است که سوالات پرسیده شده باید با گفتگوها و سوالات دیگر رقایبت میکردند. با این حال این یک قالب و روش جالبی بود که نتیجهٔ موفقیت آمیزی را داشت. همهٔ شرکت کنندهها میتوانستند این سوالات رو ببینند و در مورد آنها تفکر کرده و پاسخ دهند.
-
نقل قول
نتیجه : این رویداد بیشتر به عنوان یک دورههمی و گفتگو در مورد رفتارهای خشن زبان سیپلاسپلاس و پاسخهای سرگرم کننده در مورد آنها را فراهم کرده است و به ویژگیهای جدید زبان در آن پرداخته نشده است.
نکته: شما میتوانید تصاویر ویدیویی مربوط به این رویداد را از کانال رسمی آن در یوتیوب دریافت کنید.
- ادامه مطلب...
-
- 0 دیدگاه
- 4
-
مقالات
-
- 3 دیدگاه
- 15,402 مشاهده
-
- دیدگاه توسط سید محمد
-
- 2 دیدگاه
- 6,009 مشاهده
-
- دیدگاه توسط کامبیز اسدزاده
-
- 0 دیدگاه
- 2,416 مشاهده
-
- نوشته شده توسط کامبیز اسدزاده
-
- 0 دیدگاه
- 1,372 مشاهده
-
- نوشته شده توسط کامبیز اسدزاده
-
- 0 دیدگاه
- 1,322 مشاهده
-
- نوشته شده توسط کامبیز اسدزاده
-
-
آمارهای کاربران
-
لیست گروه ها
-
چه کسانی آنلاین هستند؟ 0 کاربر, 0 مخفی, 40 مهمان (مشاهده لیست کامل)
در حال حاضر هیچ کاربر عضوی آنلاین نیست