امین طهماسبی
امین طهماسبی
خواندن ۳ دقیقه·۱ سال پیش

پیاده‌سازی کتابخانه استاندارد ++C در زبان برنامه‌نویسی C: ارتقاء قدرت و انعطاف‌پذیری

این پروژه با هدف بازآفرینی امکانات کتابخانه استاندارد ++C در زبان برنامه‌نویسی C ایجاد شده است. هدف آن ارائه ابزارها و کتابخانه‌های آشنا و متداول در ++C به توسعه‌دهندگان C است تا امکان مدیریت بهتر ساختارهای داده، پیاده‌سازی الگوریتم‌ها و استفاده از ویژگی‌های مختلف زبان برنامه‌نویسی C را داشته باشند، بدون اینکه نیاز به تغییر زبان باشد.

این پروژه از عشق و علاقه عمیقم به زبان C نشأت گرفته است. اعتقادم بر این است که C همچنان یک ابزار حیاتی برای هر مهندس کامپیوتر یا برنامه‌نویس است و پایه‌ای ضروری برای ساخت نرم‌افزارهای کارآمد و قابل اعتماد فراهم می‌آورد. این پروژه با هدف غنی‌سازی زبان C با امکانات و راحتی‌های موجود در ++C یا چه بسا هر زبان دیگری طراحی شده است.

این پروژه از یک ایده‌ در زمان انجام یک پروژه به ذهنم رسید، شکل گرفت. در آن پروژه، به شدت به ابزارهایی که در ++C یا زبان‌های برنامه‌نویسی سطح بالاتر وجود دارند، نیاز داشتم تا کار را راحت‌تر کنم. اما خب . بنابراین، تصمیم گرفتم که خودم این امکانات را در قالب زبان C ایجاد کنم.

برای دسترسی به کتابخانه C استاندارد، لطفاً به لینک زیر مراجعه کنید:

https://github.com/KaisenAmin/c_std

ساختار پروژه:

پروژه به چندین زیرشاخه تقسیم شده است که هر یک نماینده‌ای از بخش‌های مختلف کتابخانه استاندارد ++C می‌باشد:

  • Array: پیاده‌سازی یک آرایه پویا مشابه std::array.
  • ForwardList: پیاده‌سازی یک لیست پیوندی تک سویه مشابه std::forward_list.
  • List: پیاده‌سازی یک لیست پیوندی دو سویه مشابه std::list.
  • Queue: پیاده‌سازی یک صف بر اساس std::queue.
  • Stack: پیاده‌سازی یک پشته مشابه std::stack.
  • String: پیاده‌سازی یک کلاس رشته ساده که std::string را تقلید می‌کند.
  • Vector: پیاده‌سازی یک آرایه پویا مشابه std::vector.
  • PriorityQueue: پیاده‌سازی یک صف اولویت‌دار بر اساس std::priority_queue.
  • Dqueue: پیاده‌سازی یک دیک (صف دو سر) بر اساس std::deque.
  • CsvFile, CsvRow: برای خواندن، نوشتن و عملیات مختلف روی فایل‌های CSV.
  • ConfigFile: کتابخانه ConfigFile برای مدیریت پرونده‌های پیکربندی در C.
  • Map: این کتابخانه C پیاده‌سازی عمومی یک نقشه یا آرایه مرتبط را فراهم می‌کند.
  • Span: این کتابخانه C پیاده‌سازی عمومی کانتینر span در C++ برای کار با حافظه پیوسته را ارائه می‌دهد.
  • Algorithm: این کتابخانه C طیف گسترده‌ای از قابلیت‌ها را به شیوه‌ای عمومی مانند std::algorithm در cpp ارائه می‌دهد.
  • Tuple: این کتابخانه مشابه std::tuple می باشد در زبان سی پلاس پلاس .
  • Time: این کتابخانه به نحو خیلی زیادی کار با زمان رو راحت میکند با الگو برداری از QTime.
  • Date: این کتابخانه برای کار با تاریخ می باشد که علاوه بر تقویم میلادی کار با تاریخ شمسی نیز در ان گنجانده شده است .
  • Encoding: baes64, base32, base16, base58, base91, utf8, utf16, utf32 .... encoder and decoder.

هر ماژول شامل یک فایل منبع .c و یک فایل هدر .h می‌باشد، همراه با یک فایل README.md که اطلاعاتی در مورد نحوه استفاده از آن ماژول خاص را فراهم می‌کند.

برای دسترسی به کتابخانه C استاندارد، لطفاً به لینک زیر مراجعه کنید:

https://github.com/KaisenAmin/c_std

کامپایل:

برای کامپایل هر ماژول، به پوشه مورد نظر بروید و از دستور زیر استفاده کنید:

gcc -std=c11 -O3 -march=native -flto -funroll-loops -Wall -Wextra -pedantic -s -o module_name module_name.c

استفاده:

برای استفاده از یک ماژول در پروژه خود، فایل هدر مربوطه را در فایل‌های منبع C خود قرار دهید و آن‌ها را با پیاده‌سازی ماژول کامپایل کنید.

مجوز:

این پروژه تحت مجوز GNU General Public License v3.0 می‌باشد

وضعیت فعلی و امکانات:

تاکنون کتابخانه‌های مختلفی را پیاده سازی کرده ام و هر روز در حال بهبود هستند. این پروژه به توسعه‌دهندگان C این امکان را می‌دهد که از ساختارهای داده پیچیده و الگوریتم‌های پیشرفته بهره‌مند شوند، که پیش از این تنها در زبان‌های شیء‌گرا مانند ++C قابل دسترسی بودند. این کتابخانه‌ها به صورت مداوم توسعه داده می‌شوند تا قابلیت‌های بیشتر و بهتری را به زبان C اضافه کنند. و اینکه در پایان خوشحال می شود که افراد دیگری در این پروژه سهیم شوند .


زبان برنامه‌نویسیزبان برنامه نویسی ccالگوریتم
اکثر اوقات درحال برنامه نویسی باقیش هم گیم و فیلم .
شاید از این پست‌ها خوشتان بیاید