# Ben Boyter يجعل أداة scc أسرع من منافستها خلال يومين بتعديل الـ syscalls

> **المغزى:** حين يكون المنطق سليمًا والأداء بطيئًا، يكمن البطء غالبًا في الـ syscalls التي تنفذها المكتبات خلف الكود، وأداة مثل strace تكشف ذلك بسرعة.

- المصدر: المغزى (https://almaghza.com/a/2026-09-09-scc-strace-syscall-speedup/)
- التاريخ: 27 ربيع الأول - 9 سبتمبر 2026 (2026-09-09)
- القسم: برمجيات
- الوسوم: Go، تحسين الأداء، المصادر المفتوحة، أدوات المطورين

نشر Ben Boyter، مطور أداة scc لعدّ أسطر الكود، في 7 سبتمبر 2026 مقالة عن تحسين أداتها. بدأت القصة بـ issue على GitHub يقول إن أداة منافسة اسمها mezura أسرع منها بـ 2.56 مرة. وبعد يومين صارت scc أسرع من mezura، ولم يأتِ التسريع من الخوارزمية بل من الـ syscalls، أي الاستدعاءات التي يوجهها البرنامج إلى نظام التشغيل.

شغّل Boyter أداة strace، التي تسجّل هذه الاستدعاءات، على scc، وخرج بثلاث ملاحظات:

1. بلغ عدد استدعاءات futex نحو 134,000، وهي علامة على تزاحم الـ threads على الموارد. فوزّع عملية stat على الملفات على عدد أكبر من الـ goroutines، فانخفض العدد إلى نحو 5,500 ووفّر نحو 160 ميلي ثانية.

2. كانت الأداة تستخدم os.Open، التي تستدعي في Go أيضًا fcntl وepoll لأن الـ runtime يجهّز الملف للـ async I/O. فاستبدلها بـ syscall.Open مباشرة، ووفّر ذلك وحده نحو 25%.

3. كانت الـ state machine العامة التي تفهم كل اللغات أبطأ من كود مخصص. فكتب counters مخصصة للغتي C وJava تعتمد على IndexByte بتعليمات AVX2، بمساعدة Claude.

وكانت النتيجة على الكود المصدري لنواة Linux أن scc أنهت العمل في 166.7 ميلي ثانية مقابل 203.4 لـ mezura، مع عدّ نحو 86,000 ملف مقابل نحو 67,000. أي أنها صارت أسرع بـ 1.22 مرة وهي تعالج ملفات أكثر.

والدلالة تتجاوز هذه الأداة. فحين يكون المنطق سليمًا والأداء بطيئًا، قد لا يكون البطء في الكود المكتوب، بل في الاستدعاءات التي تجريها المكتبات خلفه دون أن يظهر ذلك في الكود. وقد تكشف أداة مثل strace ذلك في دقائق.

وردّ Boyter على صاحب الـ issue بالشكر، لأن المقارنة هي ما دفعه إلى التحسين.

## المصادر

- [مقالة Ben Boyter الأصلية](https://boyter.org/posts/did-i-just-get-buster-scrugged/)
- [أداة scc على GitHub](https://github.com/boyter/scc)
- [أداة mezura المنافسة](https://github.com/mezura-dev/mezura)
- [strace](https://strace.io)
- [توثيق os.Open في Go](https://pkg.go.dev/os#Open)
- [توثيق bytes.IndexByte في Go](https://pkg.go.dev/bytes#IndexByte)
