توی V کیوورد nil رو unsafe در نظر گرفتن چون مستعد پنیک و UB هستش. در عوض معادلش که یه صفر (zero) هست رو safe تلقی میکنه و کاملا اوکیه😂🤦
یه آرتیکل برای نقد زبان برنامه نویسی V
https://justinas.org/the-bizarre-world-of-v
همچنین اینم هست که بیشتر تکنیکال بررسیش کرده (اپدیت ۲۰۲۳) :
https://n-skvortsov-1997.github.io/reviews
و اینکه تا دلتون بخواد داره برای ایده های V ایراد میگیره. همین emit C و در کنارش کامپایل کردن به machine code روی معماری x64 کافی نبود؟ رفتن emit Go و emit JS هم نوشتن😂 توی آرتیکل به وضوح نشون میده چطوری مدل کانکارنسی ش تبدیل به Promise توی جاوا اسکریپت میشه و این totally does not make sense😂🤦.
از مموری منیجمنت ش هم که نگم. دیدگاه م کلا به V تغییر کرد بعد از خوندن این مقاله ها! توی وی اومدن یه فلگ گذاشتن به اسم autofree. در واقع نه GC هست و نه RC. و حتی شبیه Rust هم نیست. در واقع میگه ما میتونیم مموری روی توی compilation time بیایم مدیریت بکنیم. ینی میاد خودش free() اضافه می کنه.
ایا لازمه بگم که این نمیشه و چقد UB میخوره؟😂
اخه جدا ازین... اومدن با GC شون هم ترکیب کردن! یعنی اگر خودش فری نمیشه... GC مسعولیت شو به عهده میگیره😂🤦
اینم بگم که از BoehmGC بعنوان مموری منیجمنت دیفالت استفاده میکنن.
دیگه بقیش تو دوتا آرتیکل هست میتونید چکش کنید :)
Strangely, nil requires unsafe, but the equivalent 0 literal in a pointer context does not. This suggests very primitive reasoning by the compiler: an "evil" keyword is forbidden, but completely equivalent code without the keyword is allowed.
یه آرتیکل برای نقد زبان برنامه نویسی V
https://justinas.org/the-bizarre-world-of-v
همچنین اینم هست که بیشتر تکنیکال بررسیش کرده (اپدیت ۲۰۲۳) :
https://n-skvortsov-1997.github.io/reviews
و اینکه تا دلتون بخواد داره برای ایده های V ایراد میگیره. همین emit C و در کنارش کامپایل کردن به machine code روی معماری x64 کافی نبود؟ رفتن emit Go و emit JS هم نوشتن😂 توی آرتیکل به وضوح نشون میده چطوری مدل کانکارنسی ش تبدیل به Promise توی جاوا اسکریپت میشه و این totally does not make sense😂🤦.
از مموری منیجمنت ش هم که نگم. دیدگاه م کلا به V تغییر کرد بعد از خوندن این مقاله ها! توی وی اومدن یه فلگ گذاشتن به اسم autofree. در واقع نه GC هست و نه RC. و حتی شبیه Rust هم نیست. در واقع میگه ما میتونیم مموری روی توی compilation time بیایم مدیریت بکنیم. ینی میاد خودش free() اضافه می کنه.
ایا لازمه بگم که این نمیشه و چقد UB میخوره؟😂
اخه جدا ازین... اومدن با GC شون هم ترکیب کردن! یعنی اگر خودش فری نمیشه... GC مسعولیت شو به عهده میگیره😂🤦
اینم بگم که از BoehmGC بعنوان مموری منیجمنت دیفالت استفاده میکنن.
دیگه بقیش تو دوتا آرتیکل هست میتونید چکش کنید :)
We can conclude that autofree is a very crude technology.
skvortsov
V Language Review (2023)
Review about V programming language in 2023
👍8
Why not rewrite LLVM in Rust?😐😂
https://www.reddit.com/r/rust/comments/5z2yvw/why_not_rewrite_llvm_in_rust
پ.ن: عجب!
https://www.reddit.com/r/rust/comments/5z2yvw/why_not_rewrite_llvm_in_rust
پ.ن: عجب!
Reddit
From the rust community on Reddit
Explore this post and more from the rust community
👍3🤣2❤1💊1
Forwarded from DevTwitter | توییت برنامه نویسی
اگه از hyprland استفاده میکنید، حتما این کانفیگ رو ببینید که میتونه زیباترین و پرکاربرد ترین دسکتاپ عمرتون رو بسازه!
من هرچی خودم کانفیگ کرده بودم ریختم دور...
https://github.com/end-4/dots-hyprland
@DevTwitter | <Mohsen Khodabakhshi/>
من هرچی خودم کانفیگ کرده بودم ریختم دور...
https://github.com/end-4/dots-hyprland
@DevTwitter | <Mohsen Khodabakhshi/>
❤6👎2🗿1
رفرنس کانتینگ یا به اصطلاح RC چیه؟
یک روش مدیریت مموری هست که توی بک گراند شامل یک counter میشه. کامپایلر بطور هوشمندانه میاد پوینتر ها و رفرنس هایی که به آبجکت مورد نظر هست رو شناسایی میکنه (در پروسه کامپایل)، و بعد به ازای هر رفرنس میاد counter رو یک واحد increment میکنه. و زمانی که از اسکوپ مورد نظر خارج میشه، counter رو یک واحد decrement میکنه.
و اگر counter به صفر برسه ینی هیچ رفرنسی به این آبجکت وجود نداره و بی استفاده ست. پس بلافاصله free میشه allocation ش. همونطور که توی این سورس کد میبینید پیاده سازی ش راحته. یه Mutex Lock هم بهش اضافه میشه که توی محیط مولتی ترد هم مشکلی پیش نیاد.
مزایای RC اینه که وقفه یا به اصطلاح Stop the world ای که توی GC هست، توی RC بوجود نمیاد و ازاد سازی حافظه قابل پیشبینی تر هست.
معایبش :) در واقع اگر دوتا آبجکت به همدیگه رفرنس بدن که به اصطلاح Reference Cycling گفته میشه، درین صورت هیچ یک ازین دو آبجکت free نخواهند شد. معایب دیگه ش اینه که مخصوصا در محیط های مولتی ترد overhead خیلی زیادی داره. البته اگر سینگل ترد باشه هم درکل خیلی مکانیزم بهینه ای نیست.
در نتیجه نسبت به GC مکانیزم سنتی تر و پرفرمنس کمتری داره.
زبان هایی که از Reference Counting استفاده میکنند:
- Swift (Automatic RC)
- ObjectiveC
- Python (
Combination of GC and RC.
)
- C++ (Smart Pointers)
یک روش مدیریت مموری هست که توی بک گراند شامل یک counter میشه. کامپایلر بطور هوشمندانه میاد پوینتر ها و رفرنس هایی که به آبجکت مورد نظر هست رو شناسایی میکنه (در پروسه کامپایل)، و بعد به ازای هر رفرنس میاد counter رو یک واحد increment میکنه. و زمانی که از اسکوپ مورد نظر خارج میشه، counter رو یک واحد decrement میکنه.
و اگر counter به صفر برسه ینی هیچ رفرنسی به این آبجکت وجود نداره و بی استفاده ست. پس بلافاصله free میشه allocation ش. همونطور که توی این سورس کد میبینید پیاده سازی ش راحته. یه Mutex Lock هم بهش اضافه میشه که توی محیط مولتی ترد هم مشکلی پیش نیاد.
مزایای RC اینه که وقفه یا به اصطلاح Stop the world ای که توی GC هست، توی RC بوجود نمیاد و ازاد سازی حافظه قابل پیشبینی تر هست.
معایبش :) در واقع اگر دوتا آبجکت به همدیگه رفرنس بدن که به اصطلاح Reference Cycling گفته میشه، درین صورت هیچ یک ازین دو آبجکت free نخواهند شد. معایب دیگه ش اینه که مخصوصا در محیط های مولتی ترد overhead خیلی زیادی داره. البته اگر سینگل ترد باشه هم درکل خیلی مکانیزم بهینه ای نیست.
در نتیجه نسبت به GC مکانیزم سنتی تر و پرفرمنس کمتری داره.
زبان هایی که از Reference Counting استفاده میکنند:
- Swift (Automatic RC)
- ObjectiveC
- Python (
Combination of GC and RC.
)
- C++ (Smart Pointers)
Telegram
👾 Geek Engineers
با C یه Reference Counting بسازیم
https://github.com/jeraymond/refcount
https://github.com/jeraymond/refcount
👾8👍2
اخرین تلاش های من برای فهمیدن دات نت🥲🤞🏿
https://www.youtube.com/watch?v=TH5118PhzYs
https://www.youtube.com/watch?v=BeuNvhd1L_g
https://www.youtube.com/watch?v=TH5118PhzYs
https://www.youtube.com/watch?v=BeuNvhd1L_g
YouTube
I tried .NET on Linux and Died Inside
Streamed Live on Twitch: https://twitch.tv/tsoding
Enable Subtitles for Twitch Chat
Chapters:
- 00:00:00 - Installing .NET on Linux
- 00:08:32 - C# Hello World
- 00:18:19 - C# Standard Library Reference
- 00:21:46 - C# Loops
- 00:34:19 - C# Console.WriteLine…
Enable Subtitles for Twitch Chat
Chapters:
- 00:00:00 - Installing .NET on Linux
- 00:08:32 - C# Hello World
- 00:18:19 - C# Standard Library Reference
- 00:21:46 - C# Loops
- 00:34:19 - C# Console.WriteLine…
👍6🤡2
درسته از دات نت بدمون میاد... ولی به احتمال زیاد از coreclr/gc برای سایروس استفاده کنم. فعلا گزینه بهتر ازین پیدا نکردم (از BoehmGC خیلی بهتره)
https://github.com/dotnet/runtime/tree/main/src/coreclr/gc
https://github.com/dotnet/runtime/tree/main/src/coreclr/gc
GitHub
runtime/src/coreclr/gc at main · dotnet/runtime
.NET is a cross-platform runtime for cloud, mobile, desktop, and IoT apps. - dotnet/runtime
👍6👎1🔥1🤡1
تو این ویدیو یه درایور ساده برای کرنل ویندوز مینویسه با زبان C
(صرف نشون دادن kernel debugger).
باید بگم باحال بود :) تا حالا یه درایور ننوشتم...
https://www.youtube.com/watch?v=GTrekHE8A00
(صرف نشون دادن kernel debugger).
باید بگم باحال بود :) تا حالا یه درایور ننوشتم...
https://www.youtube.com/watch?v=GTrekHE8A00
YouTube
Making Simple Windows Driver in C
In this video I will demonstrate how you can write a simple "Hello, World" driver for Microsoft Windows 10 using the C Programming Language.
The code is just for fun and not suitable for production.
For the installation of the dependencies check out the…
The code is just for fun and not suitable for production.
For the installation of the dependencies check out the…
🫡5👍1
اینم یه درایور داره مینویسه برای کنترل کردن نور یه کیبورد مکانیکی.
چون خودمم بلد نیستم... فقط میتونم بگم سیستم پروگرمینگ خیلی باحاله. و خب سعی میکنم یاد بگیرم :)
https://www.youtube.com/watch?v=is9wVOKeIjQ
چون خودمم بلد نیستم... فقط میتونم بگم سیستم پروگرمینگ خیلی باحاله. و خب سعی میکنم یاد بگیرم :)
https://www.youtube.com/watch?v=is9wVOKeIjQ
YouTube
[stream] USB: Reverse Engineering and Writing Drivers
=[ 🔗 Links 🔗 ]=
Book: USB Complete by Jan Axelson
Marcan reverse engineering a MIDI controller: https://www.youtube.com/watch?v=cUVuTBH51GY
USB 2.0 Spec: https://www.usb.org/document-library/usb-20-specification
Blog with useful resources: https://hackernoon.com/usb…
Book: USB Complete by Jan Axelson
Marcan reverse engineering a MIDI controller: https://www.youtube.com/watch?v=cUVuTBH51GY
USB 2.0 Spec: https://www.usb.org/document-library/usb-20-specification
Blog with useful resources: https://hackernoon.com/usb…
👾6👍1
اینا تلاش های من در برابر burn out شدن و افسردگی ناشی از دولوپ طولانی مدته. گرچه خیلی روم کار ساز نیست ولی فعلا همین از دستم بر میاد :)
https://www.youtube.com/watch?v=i7kh8pNRWOo
دولوپر گیم آمریکایی و سازنده زبان Jai شخص Jonathan Blow که حداقل ۳۰ سال سابقه برنامه نویسی و سیستم پروگرمینگ ش هست راجب کنترل افسردگی و عدم انگیزه برای ادامه دادن توضیح میده.
https://www.youtube.com/watch?v=i7kh8pNRWOo
دولوپر گیم آمریکایی و سازنده زبان Jai شخص Jonathan Blow که حداقل ۳۰ سال سابقه برنامه نویسی و سیستم پروگرمینگ ش هست راجب کنترل افسردگی و عدم انگیزه برای ادامه دادن توضیح میده.
YouTube
Techniques for dealing with lack of motivation, malaise, depression
After this talk came a Question + Answer session, which you can find here: https://www.youtube.com/watch?v=ECwHZlvvVH4
👾4❤1
پارتنر Chris Lattner خانوم Tanya هم مثل کریس یه دولوپر کامپایلر هست. و در حال حاضر مدیر اجرایی LLVM میباشد. فارغ التحصیل دانشگاه Portland آمریکا.
https://github.com/tlattner
پ.ن: اصلا هم حسادت نکردم...🤦
https://github.com/tlattner
پ.ن: اصلا هم حسادت نکردم...🤦
GitHub
tlattner - Overview
Executive Director of the LLVM Foundation, compiler engineer, advocate for diversity and inclusion in compilers, programming languages, tools, and open source. - tlattner
🫡7🤣1
سرگذشت مرحوم Terry A. Davis و سیستم عامل و زبان برنامه نویسی که ساخته بود :)
https://templeos.org
https://holyc-lang.com
https://www.youtube.com/watch?v=LtlyeDAJR7A
https://www.youtube.com/watch?v=YMUhbIAA9-8
اولا. تری حدود ۱۲۱ هزار خط کد رو تنهایی توی حدود ۱۰ سال نوشته برای درست کردن سیستم عامل معبد.
دوما. اینکار رو با استفاده از زبانی که خودش ساخته بود ینی HolyC انجام داده بود. یک زبان برنامه نویسی سیستمی با شباهت زیاد به C.
سوما. سیستم عامل معبد یکی از پیچیده ترین پروگرام های نوشته شده توسط یک single developer هست. در همین حین ویندوز ۷ با هزاران مشارکت کننده و ساپورت مالی ساخته شد...
چهارم. دیگه حرفی ندارم |: فقط میتونم بگم باععععع💀🫡
https://templeos.org
https://holyc-lang.com
https://www.youtube.com/watch?v=LtlyeDAJR7A
https://www.youtube.com/watch?v=YMUhbIAA9-8
اولا. تری حدود ۱۲۱ هزار خط کد رو تنهایی توی حدود ۱۰ سال نوشته برای درست کردن سیستم عامل معبد.
دوما. اینکار رو با استفاده از زبانی که خودش ساخته بود ینی HolyC انجام داده بود. یک زبان برنامه نویسی سیستمی با شباهت زیاد به C.
سوما. سیستم عامل معبد یکی از پیچیده ترین پروگرام های نوشته شده توسط یک single developer هست. در همین حین ویندوز ۷ با هزاران مشارکت کننده و ساپورت مالی ساخته شد...
چهارم. دیگه حرفی ندارم |: فقط میتونم بگم باععععع💀🫡
Holyc-Lang
HolyC Lang | HolyC
HolyC documentation and guide
🫡9🔥1
یه ایده خفن که پیشنهاد میکنم امتحانش کنید.
نوشتن یه لایبرری IO با اسمبلی (x86)
https://www.youtube.com/watch?v=LigH48lyJ0M
پ.ن: کلی چیز میشه یاد گرفت ازین پروژه :>
نوشتن یه لایبرری IO با اسمبلی (x86)
https://www.youtube.com/watch?v=LigH48lyJ0M
پ.ن: کلی چیز میشه یاد گرفت ازین پروژه :>
YouTube
Writing an IO Library in x86 Assembly #4 (+ ANNOUNCEMENT!)
Book: Low Level Programming, by Igor Zhirkov.
#programming #assembly #c #coding #programmer #software #engineering #softwareengineer #x86 #educational #code #python #dev #developer
#programming #assembly #c #coding #programmer #software #engineering #softwareengineer #x86 #educational #code #python #dev #developer
🫡10
ویدیو یک واکنش از ThePrimeagen به انتقادات جاناتان بلو نسبت به نرمافزار متنباز است. بلو درباره فرهنگ، خلاقیت و مدل مشارکت در پروژههای متنباز صحبت میکند.
https://youtu.be/kn59Yn55Pos?si=WiBYdIl_JpQvJXDF
موضوعات مهم مطرح شده:
۱. رکود و کمبود خلاقیت
جاناتان بلو میگوید نرمافزار متنباز بیش از ۲۰ سال است که درجا میزند و کار خلاقانه واقعی خیلی کم در آن دیده میشود و بیشتر پروژهها فقط کپی هستند. ThePrimeagen تا حدی موافق است اما اشاره میکند که نوآوری هم وجود دارد، مخصوصاً در زمینههایی مثل فریمورکهای جاوااسکریپت.
۲. مدل Pull Request و سلسلهمراتب پروژهها
بلو از مدل Pull Request انتقاد میکند و میگوید این مدل باعث ایجاد یک هرم قدرت میشود که در آن تعداد کمی (حافظان پروژه) قدرت اصلی را دارند و این با دموکراتیک بودن متنباز در تضاد است. ThePrimeagen موافق است که این فرایند میتواند بیپاداش و سلسلهمراتبی باشد و مشارکتکنندگان معمولاً قدرت و شناخت کافی ندارند.
۳. مدلهای جایگزین مشارکت
بلو پیشنهاد میدهد که مشارکت فقط به گروهی مورد اعتماد محدود شود، مثل روشی که بعضی شرکتهای بزرگ (مثل گوگل) دارند. ThePrimeagen میگوید این کار میتواند کیفیت را بالا ببرد و اصطکاک را کم کند، اما الزاماً بهتر یا بدتر نیست، فقط متفاوت است.
۴. دینامیک اجتماعی و انتقاد
بحث درباره چالشهای اجتماعی متنباز است، مثل موانع فرهنگی و زبانی و اینکه انتقاد از کد میتواند شخصی تلقی شود. هر دو موافقاند که قضاوت فنی قوی مهم است اما نحوه بیان بازخورد برای سلامت جامعه اهمیت دارد.
۵. نقش شخصیتهای سختگیر
بلو معتقد است بسیاری از مشارکتکنندگان عالی، کار کردن با آنها سخت است چون به کارشان اهمیت زیادی میدهند و استانداردهای بالایی دارند. ThePrimeagen هم موافق است و میگوید این شدت علاقه میتواند باعث رفتار تند شود، اما همین باعث پیشرفت پروژهها میشود.
۶. حمایت از متنباز
همچنین ThePrimeagen تأکید میکند که باید از پروژههای متنبازی که به آنها وابسته هستید، مالی حمایت کنید چون نگهداری آنها زحمت زیادی دارد و معمولاً بدون دستمزد انجام میشود.
https://youtu.be/kn59Yn55Pos?si=WiBYdIl_JpQvJXDF
موضوعات مهم مطرح شده:
۱. رکود و کمبود خلاقیت
جاناتان بلو میگوید نرمافزار متنباز بیش از ۲۰ سال است که درجا میزند و کار خلاقانه واقعی خیلی کم در آن دیده میشود و بیشتر پروژهها فقط کپی هستند. ThePrimeagen تا حدی موافق است اما اشاره میکند که نوآوری هم وجود دارد، مخصوصاً در زمینههایی مثل فریمورکهای جاوااسکریپت.
۲. مدل Pull Request و سلسلهمراتب پروژهها
بلو از مدل Pull Request انتقاد میکند و میگوید این مدل باعث ایجاد یک هرم قدرت میشود که در آن تعداد کمی (حافظان پروژه) قدرت اصلی را دارند و این با دموکراتیک بودن متنباز در تضاد است. ThePrimeagen موافق است که این فرایند میتواند بیپاداش و سلسلهمراتبی باشد و مشارکتکنندگان معمولاً قدرت و شناخت کافی ندارند.
۳. مدلهای جایگزین مشارکت
بلو پیشنهاد میدهد که مشارکت فقط به گروهی مورد اعتماد محدود شود، مثل روشی که بعضی شرکتهای بزرگ (مثل گوگل) دارند. ThePrimeagen میگوید این کار میتواند کیفیت را بالا ببرد و اصطکاک را کم کند، اما الزاماً بهتر یا بدتر نیست، فقط متفاوت است.
۴. دینامیک اجتماعی و انتقاد
بحث درباره چالشهای اجتماعی متنباز است، مثل موانع فرهنگی و زبانی و اینکه انتقاد از کد میتواند شخصی تلقی شود. هر دو موافقاند که قضاوت فنی قوی مهم است اما نحوه بیان بازخورد برای سلامت جامعه اهمیت دارد.
۵. نقش شخصیتهای سختگیر
بلو معتقد است بسیاری از مشارکتکنندگان عالی، کار کردن با آنها سخت است چون به کارشان اهمیت زیادی میدهند و استانداردهای بالایی دارند. ThePrimeagen هم موافق است و میگوید این شدت علاقه میتواند باعث رفتار تند شود، اما همین باعث پیشرفت پروژهها میشود.
۶. حمایت از متنباز
همچنین ThePrimeagen تأکید میکند که باید از پروژههای متنبازی که به آنها وابسته هستید، مالی حمایت کنید چون نگهداری آنها زحمت زیادی دارد و معمولاً بدون دستمزد انجام میشود.
YouTube
Why I DONT LIKE Open Source Software w/ Jonathan Blow | Prime Reacts
Recorded live on twitch, GET IN
https://twitch.tv/ThePrimeagen
original: https://www.youtube.com/watch?v=XLVjSeusPYg
author: https://www.youtube.com/@swifton
MY MAIN YT CHANNEL: Has well edited engineering videos
https://youtube.com/ThePrimeagen
Discord…
https://twitch.tv/ThePrimeagen
original: https://www.youtube.com/watch?v=XLVjSeusPYg
author: https://www.youtube.com/@swifton
MY MAIN YT CHANNEL: Has well edited engineering videos
https://youtube.com/ThePrimeagen
Discord…
👍5🔥1
جایگزین اوپن سورس Heroku اومده :)
وان کلیک دیپلویمنت و رول بک ساپورت میکنه. اینتگریشن خوبی هم با گیت هاب داره.
https://canine.sh
باید بگم واقعا فوق العاده ست!
فقط همین یه جمله رو هم از Jonathan تکرار بکنم که، نرم افزار اوپن سورس در اغلب موارد صرفا از نو سازی نرم افزار های تجاری هست :) خلاقیت و نوآوری کمتر چیزی ست که به چشم میخورد...
وان کلیک دیپلویمنت و رول بک ساپورت میکنه. اینتگریشن خوبی هم با گیت هاب داره.
https://canine.sh
باید بگم واقعا فوق العاده ست!
فقط همین یه جمله رو هم از Jonathan تکرار بکنم که، نرم افزار اوپن سورس در اغلب موارد صرفا از نو سازی نرم افزار های تجاری هست :) خلاقیت و نوآوری کمتر چیزی ست که به چشم میخورد...
canine.sh
Canine - An open source alternative to Heroku
Canine is an open source deployment platform that makes it easy to deploy and manage your applications.
❤5
یک کامپایلر خیلی خیلی کوچولو برای C که codegen assembly داره. برای یادگیری و ساختن یک C-like programming language خیلی مفیده خوندن سورس کدش و حتی فورک گرفتنش
https://github.com/rui314/chibicc
https://github.com/rui314/chibicc
GitHub
GitHub - rui314/chibicc: A small C compiler
A small C compiler. Contribute to rui314/chibicc development by creating an account on GitHub.
🔥4
لیستی از بهترین کورس های آموزشی ساخته شده برای Computer Science‼️
https://github.com/Developer-Y/cs-video-courses
https://github.com/Developer-Y/cs-video-courses
GitHub
GitHub - Developer-Y/cs-video-courses: List of Computer Science courses with video lectures.
List of Computer Science courses with video lectures. - Developer-Y/cs-video-courses
🔥3
کاش میشد بگم میتونم دو خط کد با Brainfuck بنویسم |:
ولی در حال حاضر تو خوندنش گیر کردم.
https://en.wikipedia.org/wiki/Brainfuck
ولی در حال حاضر تو خوندنش گیر کردم.
https://en.wikipedia.org/wiki/Brainfuck
🥴3🔥2
👾 Geek Engineers
کاش میشد بگم میتونم دو خط کد با Brainfuck بنویسم |: ولی در حال حاضر تو خوندنش گیر کردم. https://en.wikipedia.org/wiki/Brainfuck
بگذارید یک توضیحات ابتدایی بدم خدمتتون |:
این Brainfuck یک زبان esoteric هست. حالا این ینی چی؟ اینا یه سری زبان های برنامه نویسی هستن که برای تست کردن محدودیت های language design و تجربه و نشون دادن هنر ساخته شدن. (به زبان خودمون مرض داشتن در حقیقت :\)
حالا خود Brainfuck چجوری کار میکنه؟ BF یه نوار داره. بهش Cells میگن. تعداد این سلول ها محدودیت نداره. و شما یه pointer داری. که مسلما به سلول ها پوینت میکنه. و داخل هر سلول شما میتونی مقدار عددی ذخیره کنی. پس کاراکتر و استرینگ و ساده ترین فیچر هایی که اسمبلی داره رو هم نداریم اینجا :) اصل کارش اینه که کلا ۸ تا instruction دارین.
نکته: حواستون باشه که اگرگ current cell مقدارش 0 بشه از لوپی که با براکت ساخته شده بود خارج میشه!
حالا به این مثال توجه کنید. اون اولش یه لوپ زده که میگه اگر متن بنویسید مث کامنت میمونه. فقط کامند هایی که ولید هست به حساب میان. بعدش ۸ تا + نوشته. ینی Cell#0 مقدارش مساوی میشه با ۸. بعدش یه لوپ میشه. و توی iteration ش هر دفعه بر میگرده به Cell#0 و مقدار رو یه واحد کم میکنه (تا لوپ نهایی فقط ۸ بار اجرا بشه).
بعد بقیه ش به همین منواله. منتها یه nested loop هم میبینید :) اینو برا این خاطر زده که بتونه پروگرام ش رو کوتاه تر بنویسه! اون لوپ اولی میاد در واقع ضربدر ۸ ش میکنه. و تو لوپ داخلی هم باز به همین منوال به صورت دوره ای میاد اعدادی رو به سلول ها اضافه میکنه. تا چی بشه؟!
تا بیاد برسه به بخش نهایی:
که میگه Cell#2 در حال حاضر مقدارش 72 هست. همینجاس که میگی 72 نمنه؟ خب 72 رو توی ASCII Table پیداش بکنید بر اساس Decimal ش میبینید که همون کاراکتر 'H' هست. حالا همین
ینی چی؟ اگر یادتون باشه از لوپی که قبل از این کدا بود به برگشته بودیم به Cell#0 و الان این میگه برو Cell#2 و مقدارش رو put کن (نمایش بده).
بقیش هم عینا همینه. فقط یه گاها برای چندتا از سلول ها لازم شده که چندتا مقدار رو دستی کم و زیاد بکنه که برسه به کاراکتر مورد نظرش! ولی سیستم کار کردنش همین بود که گفتم :)
اینی هم که اینجا میبینید ساده شده همین کده. فرقی ندارن. و اینم بگم که این ساده ترین شکل و بهینه ترین شکل نمایش Hello World با Brainfuck نیست و راه های دیگری هم هست.
امیدوارم لذت برده باشید :) لایک و کامنت فراموش نشه!
این Brainfuck یک زبان esoteric هست. حالا این ینی چی؟ اینا یه سری زبان های برنامه نویسی هستن که برای تست کردن محدودیت های language design و تجربه و نشون دادن هنر ساخته شدن. (به زبان خودمون مرض داشتن در حقیقت :\)
حالا خود Brainfuck چجوری کار میکنه؟ BF یه نوار داره. بهش Cells میگن. تعداد این سلول ها محدودیت نداره. و شما یه pointer داری. که مسلما به سلول ها پوینت میکنه. و داخل هر سلول شما میتونی مقدار عددی ذخیره کنی. پس کاراکتر و استرینگ و ساده ترین فیچر هایی که اسمبلی داره رو هم نداریم اینجا :) اصل کارش اینه که کلا ۸ تا instruction دارین.
Command Meaning
> Move pointer right
< Move pointer left
+ Increment current cell
- Decrement current cell
[ Begin loop (if current cell ≠ 0)
] End loop (jump back if cell ≠ 0)
. Output current cell as ASCII character
, Input one character into cell
نکته: حواستون باشه که اگرگ current cell مقدارش 0 بشه از لوپی که با براکت ساخته شده بود خارج میشه!
حالا به این مثال توجه کنید. اون اولش یه لوپ زده که میگه اگر متن بنویسید مث کامنت میمونه. فقط کامند هایی که ولید هست به حساب میان. بعدش ۸ تا + نوشته. ینی Cell#0 مقدارش مساوی میشه با ۸. بعدش یه لوپ میشه. و توی iteration ش هر دفعه بر میگرده به Cell#0 و مقدار رو یه واحد کم میکنه (تا لوپ نهایی فقط ۸ بار اجرا بشه).
بعد بقیه ش به همین منواله. منتها یه nested loop هم میبینید :) اینو برا این خاطر زده که بتونه پروگرام ش رو کوتاه تر بنویسه! اون لوپ اولی میاد در واقع ضربدر ۸ ش میکنه. و تو لوپ داخلی هم باز به همین منوال به صورت دوره ای میاد اعدادی رو به سلول ها اضافه میکنه. تا چی بشه؟!
تا بیاد برسه به بخش نهایی:
قبلش
The result of this is:
Cell no : 0 1 2 3 4 5 6
Contents: 0 0 72 104 88 32 8
>>. Cell #2 has value 72 which is 'H'
>---. Subtract 3 from Cell #3 to get 101 which is 'e'
+++++++..+++. Likewise for 'llo' from Cell #3
ادامه ش
که میگه Cell#2 در حال حاضر مقدارش 72 هست. همینجاس که میگی 72 نمنه؟ خب 72 رو توی ASCII Table پیداش بکنید بر اساس Decimal ش میبینید که همون کاراکتر 'H' هست. حالا همین
>>.
ینی چی؟ اگر یادتون باشه از لوپی که قبل از این کدا بود به برگشته بودیم به Cell#0 و الان این میگه برو Cell#2 و مقدارش رو put کن (نمایش بده).
بقیش هم عینا همینه. فقط یه گاها برای چندتا از سلول ها لازم شده که چندتا مقدار رو دستی کم و زیاد بکنه که برسه به کاراکتر مورد نظرش! ولی سیستم کار کردنش همین بود که گفتم :)
اینی هم که اینجا میبینید ساده شده همین کده. فرقی ندارن. و اینم بگم که این ساده ترین شکل و بهینه ترین شکل نمایش Hello World با Brainfuck نیست و راه های دیگری هم هست.
امیدوارم لذت برده باشید :) لایک و کامنت فراموش نشه!
Wikipedia
Brainfuck
esoteric, minimalist programming language
❤6🔥2
این هم یک esolang دیگر که خیلی جالبه /:
اینستراکشن های معتبرش space, tab و linefeed هست.
نمونه کدش:
https://github.com/Romejanic/Whitespace/blob/master/helloworld.ws
ویکی پدیا:
https://en.wikipedia.org/wiki/Whitespace_(programming_language)
اینستراکشن های معتبرش space, tab و linefeed هست.
نمونه کدش:
https://github.com/Romejanic/Whitespace/blob/master/helloworld.ws
ویکی پدیا:
https://en.wikipedia.org/wiki/Whitespace_(programming_language)
GitHub
Whitespace/helloworld.ws at master · Romejanic/Whitespace
A programming language composed entirely of whitespace. - Romejanic/Whitespace
💊5
اینجا یک سری کامپوننت آماده TailwindCSS خیلی خوب گذاشتن که هیچ دیپندنسی خارجی ای نداره. کافیه کپی پیست کنید و کار میکنه.
https://preline.co
https://preline.co
Preline
Preline UI - Tailwind CSS components library
Preline UI is an open-source Tailwind CSS components library for any needs. Comes with UI examples & blocks, templates, plugins, Figma design system and more.
❤7