Saturday, February 9, 2013

The future of C++, as I see it

The C++ syntax is too terse with no reason; very simple ideas which can be written down simply are forced to be put in an ugly and incomprehensible form. 
Concepts (a feature to be included in the next standard), is just a hack to put some meaningful compile-time type checking on templates, BEFORE they are instantiated.
The funny things is that they go again and introduce "late_check" to allow bypassing the "BEFORE" part and coming back to the original template type-checking "AT" instantiation. 
Going back and forth, several times, just means they missed the target by a few centimeters (say, to the left) and need to "overshoot" to the other direction (the right) to hit the target. The problem is that they still miss it, again! So they overshoot to the left again! And so on. Even if they eventually converge (I doubt that), C++ will be overloaded with irrelevant historical hacks that no one knows why they were designed in this weird way.
One part of the problem is the unnecessarily terse syntax, but another part is also the perceived need to support legacy code. C++ will be much better if they stopped trying to be backwards compatible (the D language tries to do this, but is not widely adopted yet). The way things are done currently, will turn C++ into a collection of ad-hoc hacks that need deep awareness of the historical reasons to understand: reasons which will not be relevant a few years later, if not already the case now. 
People stick to C++ because of its pass-by-value semantics, const-correctness, compile-time generics, interoperability with C, and wide support, but they are going to abandon it to the next language with same features and better syntax and cleaner slate (with no historical burden). D turns out to be such a candidate (see a comparison).

Wednesday, October 17, 2012

الأرقام المركبة والكيان التجريدي للرياضيات


السؤال بتاع هل الأرقام التخيلية موجودة حقاً سؤال محرج،ليس لأن ليس له إجابة ولكن لأن إجابته ستقتضي بأن يتم كشف حقيقة أن الرياضيات كيان تجريدي. الأرقام الحقيقية نعتبرها "موجودة" لأنها تعبر عن كميات فيزيائية، كالقياسيات (الطول وغيره). بينما الوحدة التخيلية ت لا تعبر "مباشرة" عن كمية يمكن قياسها، ولكنها مُعرفة بدقة ولها معنيين، أحدها تجريدي والآخر غير مباشر. أما المعنى التجريدي للتاء، فتخيل خط الأرقام، ولتحوّل رقم واحد لسالب واحد فإنك تقوم بتدويره في نصف دائرة مركزها الرقم صفر. لو توقفت في المنتصف  فهذا هو الرقم ت: العملية اللتي إذا قمت بها مرتين حصلت على الرقم -1، وهي عملية التدوير ربع دائرة. المعنى الغير مباشر فهو أن الرقم ت يمثل دالة دورية مداها* واحد وطورها** تسعون درجة. في الواقع فإن الكيان التجريدي للرياضيات الحديثة لا يعتبر كثيراً بالمعنى ويهتم بالكيفية، فخصائص الأرقام المركبة مفيدة وجوهرية نظرياً وتطبيقيا. أكتشف علماء الرياضيات قيمة التخلي عن المعنى والتركيز على الكيفية منذ أقل من 500 عام وكان لذلك الأكتشاف أكبر الأثر في تطور الرياضيات والعلوم. للأسف لا يبدو أن فكرة التخلي عن المعنى هذه تروق لغير المتخصصين كما لم ترق للرياضيين في البداية. التخلي عن المعنى قفزة قد لا تبدو أنيقة ولكنها ضرورية.بالتالي الرياضيات الحديثة هي دراسة للكيانات التجريدية في حد ذاتها وليس للواقع الفيزيائي. ومما يستحق التدبّر هو أن تلك الكيانات التجريدية، حتى أسخفها وأبعدها عن الواقع ينتهي بعد 50 أو حتى 100 عام بتطبيق عملي في الفيزياء ! للرياضيات رونق داخلي ولكن كما أثبت التاريخ فهو ليس للأستمتاع فقط وإنما كوننا وحياتنا بها نفس الرونق الجمالي لسبب ما. هذا الترابط الغير متوقع بين الكيانات التجريدية وبين الكون والحياة يستحق التدبر في جمال خلق الله.

* مدى = amplitude
** طور = phase
الوحدة التخيلية = i

Tuesday, September 4, 2012

مشكلة في توليد الأرقام العشوائية بالجافا


for (int i = 0; i < 1000; i ++ )
        {
            Random r = new Random(i);
            System.out.println(r.nextInt(8));
        }

Thursday, August 16, 2012

تردد الحروف العربية

أستعملت ثلاثة مقالات، واحدة من ويكيبيديا وواحدة من الجزيرة وواحدة من الأهرام، بمجموع حوالي 22 ألف حرف عربي، لحساب التردد النسبي للحروف العربية. هذا التقدير تقريبي وغير صالح لأي أستخدام علمي، وإنما هو مجرد إشارة.
{ا,إ,أ,آ,ى}→0.181314
ل→0.109845
{ي,ئ}→0.0855272
{ت,ة}→0.0805501
م→0.0645274
ر→0.0538747
{و,ؤ}→0.0534381
ن→0.0475879
د→0.0366732
ب→0.0361493
ع→0.0327876
س→0.0265881
ق→0.0223969
ف→0.0222659
ح→0.0212181
ه→0.0188605
ك→0.0178127
ص→0.0142327
{ج,چ}→0.0137088
ش→0.0109146
خ→0.00912465
ث→0.00873172
ط→0.00868806
ز→0.00563196
ض→0.00554464
ذ→0.00497708
ظ→0.00340537
غ→0.00336171
Spikey Created with Wolfram Mathematica 8.0


ثم نزلت القرآن من موقع تنزيل.نت وحسبت تردد الحروف فوجدت الآتي:
إاىآأ0.186902
ل0.11609
ن0.0822685
م0.0813341
ؤو0.076572
ئي0.0699051
ه0.0449529
ةت0.0386495
ر0.0379375
ب0.0348609
ك0.031538
ع0.0282571
ف0.0262801
ق0.0211335
س0.0183994
د0.0179998
ذ0.0148181
ح0.0131115
ج0.00996584
خ0.00750217
ش0.0063815
ص0.00622527
ض0.00506554
ز0.00480415
ء0.00474106
ث0.00424833
ط0.00382469
غ0.00366846
ظ0.00256282
چ