Dev Perfects – Telegram
Dev Perfects
41 subscribers
9.23K photos
1.26K videos
468 files
13K links
بخوام خیلی خلاصه بگم
این کانال میاد مطالب کانالای خفن تو حوزه تکنولوژی و برنامه نویسی رو جمع میکنه

پست پین رو بخونید
https://news.1rj.ru/str/dev_perfects/455


ارتباط:
https://news.1rj.ru/str/HidenChat_Bot?start=936082426
Download Telegram
Forwarded from SoniaCircuit (Sony)
نظر‌ شخصی:

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

از یه دلیلی هم غلطه بخاطر اینکه همیشه پایه مفهوم مهندسی و معماری کامپیوتر مهم بوده اما باز هم نسبیه چون یه فرد میتونه خود اموز‌ هم اینارو طی کنه

بحث مهم دیگه ای که میاد وسط کانکشن سازیه که معمولا این فضا خیلی خوب توی دانشگاه توسط افراد پیاده میشه

ولی باز هم دانشگاه به دانشگاه فرق داره و باز هم این یه نظر نسبیه پس نمیشه گفت خوبه یا بده.
Forwarded from SoniaCircuit (Sony)
معمولا هدف افراد توی ایران از دانشگاه فرار کردنه ( از رفتن هم گذشته )

خودمم اگه ایران بودم قطعا با همین هدف رویکردی مثل ( تحصیل ) رو ادامه میدادم.
Forwarded from یه شعر (Poem Bot)
مولانا | دیوان شمس | رباعیات | رباعی شمارهٔ ۱۷۶۷

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

#مولانا | گنجور
📍@iipoem
#5min_Rust

تفاوت Stack, Heap, Static در Rust:

اولین نکته اینه که خیلی از دوستان به اشتباه فکر می‌کنند که این ۳ مورد حافظه‌های متفاوتی هست و این مشکل از اینجا میاد که راجب سرعت صحبت می‌شه.

توی تصویر مثال بالا اگر دقت کنید؛ هر ۳ مورد داخل RAM هستند فقط ویژگی‌های مختلفی دارند که بهشون می‌پردازیم:
وقتی شما کد رو اجرا می‌کنید اول یک سری فضا به برخی موارد اختصاص داده می‌شه؛ برای مثال خود دستورالعمل‌های کد شما که توی تصویر سمت چپ Stack هستند؛ این بخش شامل static, global variable و ... هم میشه.
از مثال زدن data type ها پرهیز می‌کنم چون هنوز باهاشون آشنا نشدیم.
بعد از اینکار برای Rust یک فضای 8MB پشت سرهم درخواست داده می‌شه که این فضا بعنوان Stack اصلی توسط برنامه استفاده خواهد شد.
دیفالت 8mb هست برای ترد اصلی و 2mb برای تردهای دیگه توجه کنید که لزوما همون لحظه کل 8mb رزرو نخواهد شد اما برنامه شما تا 8mb دسترسی به استک داره و اگر بیشتر بشه stack overflow رخ میده و برنامه kill میشه.

با ویژگی‌های اصلی استک شروع کنیم و بعد به سراغ مثال بریم:
۱- سرعت؛ توی تصویر دقت کنید؛ یک بخشی بین stack, heap نوشتم Stack Pointer؛ یکی از رجیسترهای CPU وظیفه نگهداری آدرس شروع Stack رو به عهده می‌گیره و هموراه به آدرس انتهایی آخرین دیتای موجود در استک اشاره می‌کنه.

۲- هر نوع داده‌ای که می‌خواد داخل استک قرار بگیره باید سایز مشخصی داشته باشه. در زمان کامپایل باید مشخص بشه چقدر جا می‌خواد.

ترکیب دو مورد بالا باعث میشه که بتونیم خیلی سریع به دیتاهای روی Stack دسترسی بگیریم اما یک محدودیت هم هست؛ Stack مثل بشقاب چینی می‌مونه وقتی روی هم میچینی نمی‌‌تونی از آخر ی دونه رو بکشی بیرون؛ باید به ترتیب از بالاترین بشقاب برداری تا به پایینی (آخری برسی).

مورد بعدی Heap اما داستان متفاوتی داره؛ برخلاف Stack که خودش بصورت خودکار حافظه اختصاص میده و میگیره heap اینطوری نیست و هروقت به این حافظه نیاز داشته باشه باید به سیستم عامل بگه که یک همچین حافظه‌ای لازمه تا سیستم عامل اون میزان رو پیدا کنه و بهش بگه از اینجا به بعد رو می‌تونی استفاده کنی.

توی عکس بالا توی بخش heap خونه‌های قرمز بخش‌های از حافظه‌ هست که برای کارهای دیگه اختصاص داده شده و ما نمی‌تونیم دسترسی بگیریم؛ همین بررسی اینکه کجا رو به ما اختصاص بده باعث میشه سرعت این حافظه کندتر باشه.
پاک کردن داده از Heap هم توسط ownership, borrowing توی Rust مدیریت میشه که بعدا راجبش صحبت می‌کنیم.

توی پست بعدی راجب نمونه کد و جزئیاتش توی تصویر بالا صحبت خواهیم کرد.

پینوشت:
من سعی کردم خیلی ساده توضیح بدم تا کلیات و تفاوت‌های اصلی رو همه متوجه بشوند و از بحث راجب نحوه دقیق عملکرد در اینجا خودداری کردم (باشه برای آینده)
‏این آقای Dijkstra یه جمله‌ای داره که میگه علم کامپیوتر همانقدر در مورد کامپیوتر هاست که نجوم در مورد تلسکوپ هاست
خیلی جمله پر مغزیه

@DevTwitter | <وحید باقی/>
‏بک‌اند؟ چهار تا کد کپی پیست میکنی.
فرانت‌اند؟ چهار خط تو paint نقاشی میکنی.
سیس ادمین؟ چهار تا سیم به هم وصل میکنی.
مارکتینگ؟ ۴ تا استوری اینستاگرام میذاری.
پروداکت منیجر؟ چهار تا داک Word میسازی دیگه.
دیتا؟ ۴تا مدل لرن میکنی دیگه.‏
پزشک؟ ۴ تا پنی سیلین و دگزا میدی.
مهندسی شیمی؟ یه شیشه درست کردن این حرفا داره؟
مهندس هوافضا؟ خواهر زاده فلانی هم بلده با کاغذ هواپیما درست کنه.
معماری؟ ۴ تا مدل سه بعدی میذاری کنار هم.

@DevTwitter | <The Big Rad/>
Forwarded from a pessimistic researcher
On the cruelty of really teaching computing science

By Edsger Wybe Dijkstra

https://www.cs.utexas.edu/~EWD/ewd10xx/EWD1036.PDF

این مقاله با دست خط مرحوم دانشمند فقید دایکسترا نوشته شده
Forwarded from a pessimistic researcher
فراز هایی از سخنان Knuth درباره Dijkstra

I suspect that the first two people in history whose brains were perfectly adapted for computer science were Alan Turing (1912–1954) and Edsger Dijkstra (1930–2002). Thus it was a great privilege for me to have had many encounters with Edsger, beginning in the early 1960s.

متن کامل این صحبت ها را می توانید در فایل زیر بخوانید
Forwarded from a pessimistic researcher (Kc)
آقای دایکسترا سال ۱۹۶۵ با همین مقاله یک صفحه ای در مجله communicatios of the ACM میاد برای اولین بار مسئله ای به نام Mutual Exclusion رو در دنیای علم کامپیوتر مطرح میکنه.
بدون حتی یک ارجاع به مقاله ای دیگه. همین یک صفحه که دارید میبیند باعث شکل گیری یک دنیای جدید در علم تئوری همروندی شد و هنوز که هنوز دارن روش کار میکنن
حتی سال ۲۰۲۰ جایزه Dijkstra Prize رو به یک مقاله ای دادن که موضوعش Mutual Exclusion بود و توی کنفرانس PODC چاپ شد
Forwarded from a pessimistic researcher (Kc)
حالا الان میرم پایین هوا بخورم
اومدم بالا براتون یه کتاب میذارم کیف کنید
Forwarded from a pessimistic researcher (Kc)
انتشارات Springer سال ۲۰۰۱ اومد یه حرکت قشنگی زد و اینکه مقالاتی که تو حوزه نرم افزار خیلی کلیدی بودند و به نوعی هر کدومشون در یک دنیای جدید رو به رومون باز کردند و جمع کرد و با یک کیفیت خوب چاپ کرد. چون اکثر این مقالات مال سال هزار و نهصد و بوق هستند و ورژن با کیفیتی ندارند.
اگر بخوام به بعضی از مقالات مهمش اشاره کنم میتونم اینا رو اسم ببرم:

مقاله‌ی آقای Codd که بحث دیتابیس Relational رو مطرح کرد. مقاله آقای Fred Brooks که بحث ساختار یکی از مهم ترین OS های دنیا یعنی OS/360 رو مطرح کرد. دو تا مقاله از Dijkstra که یکیش همینی بود که تو پست بالایی گفتم و اون یکیش یه مقاله است در مورد اینکه دستور goto چقدر بولشت عه و نباید ازش استفاده کرد :)))
مقاله آقای Hoare که بحث Hoare Logic رو مطرح کرد. مقاله آقای Wirth که یکی از مهم ترین زبان های برنامه نویسی یعنی Pascal رو مطرح کرد.

همه اینایی که اسم بردم جایزه Turing هم بردند.

حتی مقاله آقای Gamma که بحث Design Pattern رو مطرح کرد هم هست.
Forwarded from a pessimistic researcher (Kc)
یادمه یه بار توی یه مصاحبه‌ای knuth گفت به نظرم از ابتدی تاریخ کلا دو نفر بودند که مغزشون برای کامپیوتری فکر کردن ساخته شده، یکی Turing و دیگری Dijkstra

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

We beg the challenged reader to stop here for a while and have a try himself
Forwarded from a pessimistic researcher (Kc)
به باور صاحب نظران اولین بار این مسئله را Dijkstra در سال ۶۵ مطرح کرد، اما اینکه در کجا اولین بار مطرح شد اختلاف است.

عده‌ای معتقدند که این مسئله برای اولین بار در مقاله‌ای که ایشان در سال ۶۵ با عنوان “Solution of a problem in concurrent programming control” در مجله‌ی Communications of the ACM چاپ کردند مطرح شد.

عده‌ای دیگر معتقدند که این مسئله اولین بار به عنوان یک تمرین کلاسی در سال ۶۵ توسط دایکسترا به دانشجویان کلاسش داده شد. مسئله‌ای که بعدها غولی دیگر به نام Tony hoare آن را مسئله‌ی Dinning Philosophers نامید. این مسئله در نوت‌های دایکسترا با شماره‌ی EWD123 آمده است.
نصفه ارسال شد؛ آپدیت میشه پست قبل
Forwarded from a pessimistic researcher
حالا داستان دقیقا چیه
مرحوم دایکسترا (ارواحنا الفدا) یک مقاله ای سال ۱۹۸۸ بیرون میدن و از وضع تدریس برنامه نویسی توسط دانشگاه ها گله می کنن.
ایشان ادعا داشتن که برنامه نویسی می بایست یکی از زیرشاخه های علوم ریاضی تلقی بشه و مدرسین علاوه بر تدریس سینتکس یک زبان مباحثی مانند اثبات درستی یک برنامه با ابزارهای صوری مانند منطق Hoare رو هم تدریس کنن.

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

خلاصه متن این مناظره ها هست و لینکش رو براتون میذارم
توی اونایی که مناظره کردن نام یک دانشمند فقید دیگه یعنی ریچارد همینگ هم به چشم میخوره که خوندن حرفاش خالی از لطف نیست
https://www.psy.gla.ac.uk/~steve/educ/dijk/Dijkstra89cacm.pdf
در آخر هم دایکسترا مثل احمدی نژاد برمیگرده میگه چه خبرتونههههههه چه خبرتوننننننننه؟
و از مخاطبین میخواد که زیاد جدی نگیرن و به جهالتشون ادامه بدن

اینم جا داره بگم که توی مقاله ای که بالا فرستادم حضرت دایکسترا در اصل یک پروپوزال هم برای نحوه تدریس یک دوره برنامه نویسی برای افراد مبتدی ارائه دادند
#5min_Rust

درنهایت نکات مهمی که راجب Stack باید یادتون بمونه :

۱- سرعت بالاتری داره نسبت به heap؛ چون برای دیتاهاش نیازی نداره به سیستم عامل بگه براش حافظه پیدا کنه ( system call کمتری داره )
۲- داده‌هایی می‌تونند روی Stack قرار بگیرند که از قبل سایزشون مشخص باشه؛ یعنی بدونیم چقدر فضای حافظه رو نیاز دارند.
۳- نمی‌تونیم از یک تابع به داده‌ای داخل تابع دیگر که روی استک هست اشاره کنیم؛ چون همونطور که دیدیم وقتی اجرا اون بخش کد تموم بشه تمام مقادیر از Stack حذف میشه و ما می‌مونیم و اشاره‌گر به خانه حافظه‌ای که یا خالی هست یا نباید بهش اشاره می‌شده و این موضوع امن نیست.
stack_vs_heap.png
166 KB
#5min_Rust

خب توی این مثال؛ اول از همه یک مقدار حافظه از Stack به تابع main اختصاص داده می‌شه؛ توی اولین دستور داخل main یک متغییر داریم به اسم a و مقدار 22 که داخل Stack قرار می‌گیره (نوع داده int چون سایزش زمان کامپایل مشخص هست همیشه داخل stack قرار میگیره)

بعد از اون برای بدست آوردن مقدار b باید تابع دیگری صدا زده بشه؛ که اینبار add_one هست و یک فضای اختصاصی روی Stack بهش داده می‌شه؛ و کاری که می‌کنه اینه که ورودی رو +1 می‌کنه و برای کسی که صداش زده برمی‌گردونه پس یک متغییر به اسم i داره که آرگومان ورودی تابع هست و توی استک قرار میگیره و خروجی هم توسط return برای آدرس b توی main ارسال میشه 0x23f توی این مثال؛ توی این بازه که داشتیم روی add_one کار میکردیم پشت صحنه SP هم جابجا شد و بجای اینکه به آخر main روی stack اشاره کنه به انتهای آدرس add_one اشاره میکرد.
وقتی کارمون با تابع add_one تموم شد و مقدارش رو برگردوندیم؛ این بخش از Stack حذف میشه؛ باتمام متغییرها و مقادیری که توی این بخش بود (درک این موضوع به lifetime, ownership, ... کمک می‌کنه پس یادتون بمونه)
و SP دوباره بر میگرده و انتهای main رو نشون میده و b 23 داخل استک main قرار میگیره.

بعد از اون متغییر answer_universe رو داریم؛ این مقدار رو چون می‌خواستیم بمونه و با حذف Stack پاک نشه تصمیم گرفتیم بفرستیمش روی Heap اما یادتون باشه بالاتر گفتم int روی stack جا داره چون سایزش از قبل معلوم هست؛ برای اینکه به زور ببریمش روی Heap از چیزی به اسم Box استفاده می‌کنیم (درآینده راجبش حرف میزنم)

وقتی on_heap صدا زده میشه؛ استک فقط و فقط شامل main هست و add_one حذف شده ازش (توی تصویر نمی‌شد این رو نشون داد) on_heap داخل خودش b رو داره (آپدیت کردن SP یادمون نرفته فقط دوباره توضحیش نمیدم) و b رو میخوایم روی heap بفرستیم پس به سیستم درخواست میدیم یک فضایی به اندازه i32 نوع داده integer 32bit برامون روی heap پیدا کنه و بهمون بده وقتی سیستم این رو پیدا کرد دیتای 42 رو اونجا مینوسه و آدرسش 0x5f21 رو بهمون بر میگردونه و بعد هم که return , ....

بعد از این مرحله تابع on_heap هم از روی stack حذف میشه و فقط main ‌می‌مونه روی main چون answer_universe هنوز به دیتای 42 روی heap نیاز داره پس اون دیتاهم روی heap وجود داره.

در نهایت وقتی این کارها تموم شد (اینجا print, ... نداریم) برنامه بطور کامل اجرا شده و main هم تموم می‌شه و تمام مموری پاک میشه.


پینوشت:
منبع نمونه کد بالا؛ این رو قبلا گذاشته بودم بنظرم خوبه دوباره زیر این پست هم باشه.
Forwarded from Syntax | سینتکس (Daimon)
شما بزرگ ترین دشمنان و خلافکاران در علیه شرکت های تولید نرم افزار در جهان رو در تصویر میبینید!

رئیس سایت سافت ۹۸ و پی سی دانلود در یک قاب

#fun

@Syntax_fa