TGViewer
Channel Public Channel
نوشته‌های ترمینالی

نوشته‌های ترمینالی

@terminal_stuff

virgool.io/@rsharifnasab
github.com/rsharifnasab
Subscribers
3.52K
Photos
434
Videos
12
Links
2.4K

Showing posts older than #2663 · Back to latest

Older Posts 20 shown
Post #2662 775
نوشته‌های ترمینالی خیلی از زبون‌ها رو می‌شنویم که از llvm استفاده می‌کنن؟ این چی بود اصلا که همه کامپایلرها رو گرفت؟ ماجرا از اینجا شروع می‌شه که کامپایلرها باید برای کامپایل کردن یک فایل از زبون مبدا (مثلا راسط) به زبان ماشین، این عملیات رو انجام بدن: ۱- خوندن کیلدواژه به…
اگر دوست داشتید با ساختار LLVM IR بیشتر آشنا بشید این اسلایدهای خیلی جالب رو بهتون توصیه می‌کنم.

https://llvm.org/devmtg/2019-04/slides/Tutorial-Bridgers-LLVM_IR_tutorial.pdf
Post #2661 741
نوشته‌های ترمینالی در مورد llvm بیشتر بدانیم. https://www.infoworld.com/article/3247799/what-is-llvm-the-power-behind-swift-rust-clang-and-more.html
پس به عنوان جمع‌بندی: حالا که rust و هسکل به عنوان بک‌اند از llvm استفاده می‌کنن چه مزایایی داره براشون؟
+ اگه پردازنده‌ی جدیدی بیاد و بخوان ساپورتش کنن، کافیه صبر کنن تا llvm اون رو ساپورت کنه و بعدش دیگه خیلی کاری ندارن.
+ اگر امکان بهینه‌سازی جدیدی توی یک پردازنده یا به شکل عمومی ابداع بشه، کافیه که توی llvm پیاده‌سازی بشه و بعدش دیگه نیاز نیست فرانت‌اند تغییر خاصی بکنه.
+ اگر می‌خوان به زبونشون قابلیت جدید اضافه کنن لازم نیست نگران این باشن که چطوری کد اسمبلیش توی پلتفرم‌های مختلف چطوری می‌شه، بلکه فقط کافیه بتونن کد LLVM IR معادلشو بسازن که چون خیلی چیزها رو خودش پشتیبانی می‌‌کنه کار خیلی ساده‌تریه.

شاید بپرسید که کامپایلر هسکل که قدیمی‌تر از این حرفاس، چطوری خودش بک‌اند نداشت و منتظر llvm بود. اتفاقا خودش هم بک‌اند داشت و هنوزم امکان code generation داره ولی امکان تولید کد با llvm هم اضافه شده و برنامه‌نویس می‌تونه کدی که براش بهینه‌تره رو انتخاب کنه.

در کنار اینجا llvm قابلیت پیاده‌سازی بهینه‌سازی متنوعی هم می‌ده مثل JIT یا transform passes که من خیلی بلد نیستم!
  • 🔥 7
  • 👍 5
  • ❤‍🔥 1
Post #2660 672
نوشته‌های ترمینالی در مورد llvm بیشتر بدانیم. https://www.infoworld.com/article/3247799/what-is-llvm-the-power-behind-swift-rust-clang-and-more.html
خیلی از زبون‌ها رو می‌شنویم که از llvm استفاده می‌کنن؟
این چی بود اصلا که همه کامپایلرها رو گرفت؟

ماجرا از اینجا شروع می‌شه که کامپایلرها باید برای کامپایل کردن یک فایل از زبون مبدا (مثلا راسط) به زبان ماشین، این عملیات رو انجام بدن:
۱- خوندن کیلدواژه به کلیدواژه‌ی سورس‌کد مبدا
۲- پارس کردن ساختار‌های مختلف با کمک کلیدواژه‌ها (parsing خیلی مفصله ماجراش و الگوریتم‌های متنوعی داره که باشه برای بعد)
۳- بررسی اینکه این کدی که نوشته شده چیه، مثلا تایپ‌هاش درست هستن؟ معنی میده اصلا؟ بهینه‌سازی‌ای نیاز نداره و اینا.
۴- تبدیل کد ماشین

حالا این تبدیل کد ماشین رو ما خیلی ساده می‌گیم ماشین اما کدوم ماشین؟ x86؟ arm؟ پس فردا risc-v و mips چی؟ بعد هر کدوم از اینا نسخه دارن و instruction مختلفی بهشون اضافه می‌شه. اینکه فقط بخوایم یه کدی تولید کنیم شاید خیلی سخت نباشه ولی بهینه‌ کردنش و اطمینان از اینکه درست کار می‌کنه و پشتیبانی از معماری پردازنده‌های مختلف واقعا کار سختیه. این کار سخت رو مثلا کامپایلر GCC خودش انجام میده.

اما همه‌ی کامپایلرها اینطور کار نمی‌کنن. مثلا جاوا یک رویکرد تقریبا منحصر به فرد پیش گرفت. گفت من کامپایلرم نمی‌تونه کد به هر پلتفرم مقصدی تولید کنه، بلکه میام یه «کد میانی» تولید می‌کنم به اسم byte code. یعنی چی؟ یعنی این کد میانی یه جور کد ماشینیه که واقعا هیچ ماشینی بلد نیست اجراش کنه، یه اسمبلیه برای یک پردازنده‌ی فرضی. مزیتش برای کامپایلر اینه که فقط لازمه دغدغه‌ش این باشه که همین رو تولید کنه و همین رو بهینه کنه.
اما در مرحله‌ی بعد چه کسی اینو اجرا کنه؟ مجبوریم یه VM (به اسم JVM یا java virtual machine) دااشته باشیم که اون بایت‌کد رو می‌گیره و ترجمه می‌کنه به زبان ماشین و همونجا هم اجراش میکنه. مثلا JVM برای پردازنده‌ی x86 و الی آخر.
جای تعجب نداره که جاوا اونقدر نمی‌تونه سریع باشه چون این JVM به هر حال سربار داره، هرچقدر هم بهینه‌ش کنن چون به هر حال داره ترجمه‌ای رو انجام می‌ده.

اما حالا فرض کنید که کامپایلر ما همون کار راحت تولید یه bytecode رو انجام می‌داد، اما به جای اینکه خود byte code رو بدیم به ملت و اونجا مجبور باشن VM نصب کنن، این bytecode رو یکی تبدیل می‌کرد به کد ماشین و بهینه‌ش هم میکرد. خب llvm همینجا وارد می‌شه!
یعنی چی؟ یعنی به کامپایلر راسط میگه شما لازم نیست خودت کد اسمبلی/زبان ماشین تولید کنی، بلکه بیا LLVM IR یا LLVM intermediate representation تولید کن. من اینو تبدیل می‌کنم به کد ماشین بهینه!
و اینجا یه مفهوم front-end و back-endی هم شکل می‌گیره. فرانت‌اند به قسمتی که سورس‌کد رو می‌خونه و پارس می‌کنه و ... تا IR تولید بشه میگن و بک اند میشه قسمتی که IR رو می‌خونه و پردازش می‌کنه و کد ماشین تولید می‌کنه. LLVM برای ما نقش یک بک‌اند رو داره.

حالا سینتکس LLVM IR چه شکلیه؟ خیلی برامون مهم نیست ولی می‌تونیم ببینیمش. مثلا به clang بگیم که به جای تولید کد ماشین نهایی، برامون LLVM IR رو خروجی بده. می‌تونه این کارو بکنه. حتما حدس می‌زنید که clang یه کامپایلر بر پایه‌ی llvmئه که این قابلیت رو داره.
clang -S -emit-llvm foo.c

با کمک این دستور می‌تونید IR رو مشاهده کنید و حتی می‌تونید با کمک llvm اجراش کنید. با دستور lli یا llvm interpreter می‌تونید به شکل تفسیری اجراش کنید یا با llc کامپایلش کنید.


اما llvm باز هم کار ما رو ساده‌تر می‌کنه، به جای اینکه از فرانت‌اند بخواد که یکجا بهش IR رو تحویل بده، میاد از visitor design pattern استفاده می‌کنه. خلاصه‌ش اینطوریه که به جای اینکه نهایتا خروجی IR رو ازمون بگیره،‌ در روال ساختش هم مشارکت می‌کنه. مثلا میگه تو می‌دونی که یه تابع داری ولی محتواش رو هنوز نخوندی؟ عیب نداره تا همینجا به من بگو من برات می‌سازم. خب یه if توش داری؟ من داخل تابع اضافه‌ش می‌کنم. و الی آخر. برای اینکه از این قابلیت استفاده کنیم لازم داریم که توابعی که llvm داره مثلا برای ساخت تابع، داخل فرانت‌اندمون صدا کنیم. اینجا یه مشکلی که داریم اینه که به شکل پیش‌فرض کتاب‌خونه‌ش فقط برای cpp وجود داره، که البته چون خیلی از کامپایلرها با cpp هستن برامون کافیه. ولی همچنین یکسری binding (غیررسمی) برای باقی زبون‌ها هم وجود داره مثلا کامپایلر haskell و rust از همین binding ها استفاده می‌کنن چون کامپایلرشون به ترتیب با haskell و rust نوشته شده.
  • 👍 10
  • ❤‍🔥 3
Post #2658 745
اگر میخواهید یه پروژه رو کلون کنید و حجمش زیاده، میتونید برای بهینه سازی، دو تا کار کنید:
۱- فقط کامیت آخر رو دانلود کنید، مثلا اگر می‌خواهیم فقط برنامه رو از سورس دانلود کنید و با تاریخچه‌اش کاری نداریم منطقیه.
۲- فقط برنچ اصلی (master یا main) رو دانلود کنید چون احتمالا با باقی برنچ‌ها کاری نداریم.

دستورش چی میشه؟
git clone --branch master --depth 1 https://github.com/neovim/neovim.git
GitHub GitHub - neovim/neovim: Vim-fork focused on extensibility and usability Vim-fork focused on extensibility and usability. Contribute to neovim/neovim development by creating an account on GitHub.
  • 👍 22
Post #2657 719
دوست دارید توی ترمینال اسکرین‌سیور زیبا داشته باشید؟
می‌تونید از pipes.sh استفاده کنید.
https://github.com/pipeseroni/pipes.sh

نتیجه می‌شه یه چنین چیزی که همیشه هم پویاست و داره شکل‌های قشنگ جدید تولید می‌کنه!
  • 🔥 6
  • 😍 1
  • 😐 1
Post #2656 977
نوشته‌های ترمینالی یه آموزش متنی خوب برای tmux برای کسایی که هنوز شروع به استفاده نکردن: https://www.hamvocke.com/blog/a-quick-and-easy-guide-to-tmux/
با tmux خیلی هامون آشنا هستیم. یه terminal multiplexer قدیمی و خفن.
ولی متاسفانه کار باهاش یه مقداری سخته و راه دست نیست.
یه جایگزین خوب براش با rust نوشتن که البته هنوز در حالت بتا است ولی مشکل خاصی نداره.
اسمش zellij‌ئه.
سایتش:
https://zellij.dev/


صفحه گیتهابش:
https://github.com/zellij-org/zellij

و صفحه معرفیش:
https://www.linuxuprising.com/2021/04/zellij-is-new-terminal-multiplexer.html

البته توی این معرفی هنوز تازه اومده و بتا است. الان بالغ تر شده.
zellij.dev A terminal workspace that doesn't sacrifice simplicity for power. Features floating panes, layouts, multiplayer collaboration, plugins, and works in your browser.
  • 🔥 8
  • 👍 2
  • ❤ 1
  • 👎 1
Post #2655 826
نوشته‌های ترمینالی این لینک دونیت به منه، اگه مطالب این چنل یا وبلاگم توی ویرگول رو دوست داشتین، می‌تونید با دونیت خوشحالم کنید و البته از ادامه فعالیت حمایت کنید. 🙂 https://zarinp.al/rsharifnasab
با تشکر از حمایتتون و توضیحات قشنگی که برام نوشتین ❤️
  • ❤ 5
Post #2653 1K
یه هدری توی http هست که مرورگرها ارسال می‌کنن به اسم user agent که قرار بوده برای سرور مشخص کنه چه مرورگری/کلاینتی داره درخواست اون محتوا رو میده

مثلا شکلش چنین چیزیه:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.1.

و خب خیلی نمیشه فهمید الان این مال چه مرورگریه (این مال اجه)

به قول دوستمون:
No wonder it's hard to do browser detection, they're all pretending to be one another!

اما داستان چیه؟
خلاصه‌شو اینجا بخونید:
https://stackoverflow.com/questions/1114254/why-do-all-browsers-user-agents-start-with-mozilla
Stack Overflow Why do all browsers' user agents start with "Mozilla/"? All popular browsers' user agent strings, even Internet Explorer's, start with Mozilla/. Why is this the case?
  • 👍 11
  • ❤ 2
  • 😁 1
Post #2651 610
Woland's Linux Journal ⚠️خبر: قرار آرچ لینوکس زیرساخت خودش رو از آپاچی SVN به گیت تغییر بده. در پی این مهاجرت اسم برخی از مخازن هم تغییر خواهد کرد. 🔴مخزن community با extra تلفیق می‌شن و فقط extra باقی می‌مونه. 🟡مخزن testing به دوشاخه‌ی core-testing و extra-testing تقسیم میشه.…
آپدیت: الان تموم شده عملیات!
https://archlinux.org/news/git-migration-completed/
  • 🔥 6
Post #2650 631
می‌دونستین با دستور زیر می‌تونید به آخرین پوشه‌ای که داخلش بودید برگردین؟

cd -

مخصوصا وقتی کاربرد داره که یه cd به یه جای دور کردین و می‌خواید برگردین.
  • 👍 26
  • 🔥 6
  • 😁 1
Post #2648 618

Forwarded from Woland's Linux Journal (Woland)

⚠️خبر:
قرار آرچ لینوکس زیرساخت خودش رو از آپاچی SVN به گیت تغییر بده.
در پی این مهاجرت اسم برخی از مخازن هم تغییر خواهد کرد.

🔴مخزن community با extra تلفیق می‌شن و فقط extra باقی می‌مونه.
🟡مخزن testing به دوشاخه‌ی core-testing و extra-testing تقسیم میشه.
🔵مخزن staging هم به core-staging و extra-staging تقسیم میشه.

این پروسه جمعه شروع میشه و تا یکشنبه ادامه داره که در طی این مدت هیچ آپدیتی منتشر نمیشه و اتصال rsync و HTTP به مخازن قطع میشه.
اگه همه‌چیز درست پیش بره از سایت آرچ یک خبر جدید به همراه مراحل ضروری از سمت کاربر اعلام خواهد شد.
  • 👍 9
  • 🔥 1
Post #2645 863
یک visualization خیلی زیبا روی گیتهاب
به این شکل که اومده بر اساس star مشترک آدما، فاصله برای پروژه ها تعریف کرده و به همین ترتیب خوشه بندی کرده.
مثلا این قسمت که من بهش علاقه دارم خوشه‌ی ترمیناله، داخلش از vim و nvim و shell های مختلف و dotfiles ... به چشم میخوره.

https://anvaka.github.io/map-of-github/#4.8/-19.28/-9.98


جالبه که قسمت مربوط به هوش و قسمت فرانت (احتمالا پکیج های node) خیلی بزرگن
anvaka.github.io Map of GitHub This website shows a map of GitHub. Each dot is a project. Two dots within the same cluster are usually close to each other if multiple users frequently gave stars to both projects
  • 👍 4
  • 🤩 1
Post #2642 1.22K
مطالبی که با هشتگ #توصیه‌ها منتشر شده بود رو جمع‌بندی کردم و در قالب یک مطلب ویرگولی منتظر کردم.
اگه دوست داشتید یه مروری کنید یا منتشر کنید می‌تونه گزینه‌ی خوبی باشه.
https://vrgl.ir/v8sZi
ویرگول چند توصیه برای دوستان برنامه‌نویس جوان‌ترم! - ویرگول در این مطلب چند تا توصیه به شما که برنامه‌نویسی می‌کنی یا برنامه‌نویسی رو دوست داری کردم، امیدوارم برات مفید باشه و به پیشرفتت کمک کنه
  • ❤ 10
  • 👍 2
Post #2641 850
من تو تیم طراحی سوالات مسابقه‌ی «هم‌کد Golang» که جمعه‌ی اخیر برگزار شد بودم.
اگه دوست داشتید سوالا رو حل کنید یا ببینید می‌تونید از اینجا پیداشون کنید:
https://quera.org/problemset


به طور خاص سوال «پیپ» رو دوست دارمش و اگه وقت داشتید حلش کنید.
https://quera.org/problemset/181682/
Quera تمرین‌ها و سوالات برنامه‌نویسی مجموعه‌ای از تمرین‌ها و سوالات برنامه‌نویسی برای یادگیری، تمرین و تقویت مهارت حل مسئله.
  • ❤ 7
Post #2640 656
Lack of leak XD وقتی شروع میکنید به ساختن ستاپ خودتون و سیستمتون رو رایس میکنید ، بهتره نگاهی به این لیست داشته باشید : https://github.com/fosslife/awesome-ricing #ricing ➖➖➖➖➖ ✍️ @lack_xd
خیلی این لیست رو پسندیدم و احتمالا تا مدت زیادی هرچی تو این کانال می‌بینید از این لیست باشه :)))
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →