Stroika هو إطار تطبيق C ++ حديث ومحمول. إنه يجعل كتابة تطبيقات C ++ أسهل من خلال توفير لبنات بناء آمنة ومرنة ، بالإضافة إلى أغلفة على المكتبات الأخرى المفيدة التي تساعدها على العمل معًا بشكل أكثر وضوحًا.
String a = u8" abc " ;
String b = u32 " abc " ;
CallFunction (a+b);
// trim whitespace, and convert to u16string for some legacy API
std::u16string uuu = (a+b).Trim ().As<u16string>();
// tokenize
String t{ " ABC DEF G " };
Assert (t.Tokenize ()[1] == "DEF"); // most Stroika types automatically support formattable<>
DbgTrace ( " v = {} " _f, v); // to a tracelog file, or debugger
cerr << " v = {} " _f (v) << endl; // OR iostreams (unicode mapped automatically) // nb: String is an Iterable<Character>,
// despite internally representing the characters very differently
bool IsAllWhitespace (String s) const
{
return not s. Find ([] (Character c) -> bool { return not c. IsWhitespace (); });
}
Iterable< int > c { 1 , 2 , 2 , 5 , 9 , 4 , 5 , 6 };
EXPECT_TRUE (c.Distinct ().SetEquals ({ 1 , 2 , 4 , 5 , 6 , 9 }));
Iterable< int > c { 3 , 4 , 7 };
// Map iterates over 'c' and produces the template argument container
// automatically by appending the result of each lambda application
EXPECT_EQ ((c.Map<vector<String>> ([] ( int i) { return " {} " _f (i); }), vector<String>{ " 3 " , " 4 " , " 7 " }));البقرة (نسخ على الكتابة غالبا ما يحسن الأداء بشكل كبير لمعظم الحالات شيوعا)
واجهات برمجة التطبيقات المحددة بواسطة نمط الوصول ، مثل Stack = push/pop ، sequence = Array-like Access ، map = {from: to} ، etc
الشفافية التمثيلية
يوفر Stroika مجموعة غنية من أنواع القوس الحاويات ، وتثبات بنية البيانات.
extern void f (Set< int >);
// use the default Set<> representation - the best for type 'int'
Set< int > s{ 1 , 2 , 3 };
f (s); // data not actually copied - Stroika containers use 'copy-on-write (COW)'
s = Concrete::SortedSet_SkipList< int >{s}; // Use a skiplist to represent the set
f (s); // call f the same way regardless of data structure used for implementation
// set equality not order dependent (regardless of data structure)
Assert (s == { 2 , 3 , 1 }); انظر عينة الحاويات لمزيد من التفاصيل
MyClass someObject = ...;
VariantValue v = mapper.FromObject (someObject); // Map object to a VariantValue
// Serialize using any serialization writer defined in
// Stroika::Foundation::DataExchange::Variant (we selected JSON)
Streams::MemoryStream:: Ptr <byte> tmpStream = Streams::MemoryStream::New<byte> ();
Variant::JSON::Writer{}.Write (v, tmpStream);
// You can persist these to file if you wish
{
using namespace IO ::FileSystem ;
FileOutputStream:: Ptr tmpFileStream =
FileOutputStream::New ( WellKnownLocations::GetTemporary () / " t.txt " );
Variant::JSON::Writer{}. Write (v, tmpFileStream);
}انظر عينة التسلسل لمزيد من التفاصيل
Route{ " variables/(.+) " _RegEx,
// explicit message handler
[ this ] (Message& m, const String& varName) {
WriteResponse (m. rwResponse (), kVariables_ , kMapper . FromObject ( fWSImpl_ -> Variables_GET (varName)));
}},
Route{HTTP::MethodsRegEx:: kPost , " plus " _RegEx,
// automatically map high level functions via ObjectVariantMapper
ObjectRequestHandler::Factory{ kBinaryOpObjRequestOptions_ ,
[ this ] (Number arg1, Number arg2) { return fWSImpl_ -> plus (arg1, arg2); }}},راجع عينة ويب لخدمات الويب لمزيد من التفاصيل.
يجعل الضغط ، التشفير ، IO ، الشبكات ، معالجة البيانات ، كلها تتناسب مع بعضها البعض
// @todo INCOMPLETE - BAD EXAMPLE---
const OpenSSL::DerivedKey kDerivedKey =
OpenSSL::EVP_BytesToKey{ OpenSSL::CipherAlgorithms::kAES_256_CBC (), OpenSSL::DigestAlgorithms:: kMD5 , " password " };
const Memory::BLOB srcText =
Memory::BLOB::FromHex ( " 2d ... " ); // ...
// EncodeAES takes a stream, and produces a stream
// which can be chained with the gzip Transformer, which takes a stream, and produces a
Compression::GZip::Compress::New ().Transform (EncodeAES ( kDerivedKey , srcText.As<Streams::InputStream:: Ptr <byte>> (), AESOptions::e256_CBC))من الناحية الأسلوبية ، تختلف Stroika عن مكتبة C ++ القياسية ، والزيادة ، والعديد من مكتبات C ++ الأخرى ، حيث تتبنى (نسبيًا) التجريدات الموجهة نحو الكائنات على الرصول المستندة إلى القالب (انظر Stroika-approach-to-performance.md). يعد تجريد التسلسلات الهرمية من النوع أكثر ملاءمة لكيفية تفكير الناس ، والقوالب والمفاهيم - على الرغم من أنها قوية - يمكن أن تكون نية مبرمجة غامضة. أيضًا ، تؤكد Stroika على فصل الواجهة عن التنفيذ: توثيق الواجهة بعناية في الرؤوس ، وفصل التنفيذ إلى الملفات الأخرى.
يتكون Stroika من طبقتين: الأساس ، الذي يوفر فئات كتلة المباني المطبقة على معظم التطبيقات ، وسلسلة من الأطر الخاصة بالمجال التي توفر مجموعة غنية من التعليمات البرمجية في مجالات مختلفة.

الأطر تعتمد على الأساس ؛ تعتمد وحدات الأساس بشكل متكرر على بعضها البعض ؛ لكن رمز طبقة الأساس لا يحتوي على أي تبعيات خارج الأساس (باستثناء مكتبة C ++ القياسية ، ومكتبات ThirdpartyComponent المختلفة ضمن أو مشار إليها اختياريا ، مثل OpenSSL).
لا تريد القراءة - فقط تريد رمز. تعليمات خطوة بخطوة لإنشاء تطبيقك الأول المستند إلى Stroika على جهازك ، في دقائق (أقل تنزيل/أوقات التجميع - يختلف).
أكبر قوة في Stroika هي أيضًا أكبر قوة ضعفها:
Stroika V3 في التطوير النشط ( غير مستقر ) ، ويتطلب C ++ 20 أو الأحدث.
Stroika v2.1 مستقر (في الصيانة) ، ويتطلب C ++ 17 أو أحدث. يدعم الإصدار 2.1 بشكل مشروط العديد من ميزات C ++ 20 (مثل ثلاثية الأطوار ، وما إلى ذلك ، إذا كان ذلك متاحًا).
Stroika v2.0 مستقر للغاية ، ويتطلب C ++ 14 أو أحدث. يستخدم Stroika v2.0 لتشغيل مجموعة واسعة من التطبيقات المفتوحة والمصدر التجاري.
Linux ، MacOS ، Windows
Stroika V3
TBD ، ولكن يبدو حتى الآن مثل VS2K22 (17.9) أو في وقت لاحق على Windows و Xcode 15 (.2) أو في وقت لاحق على MacOS ، و G ++ 11 أو الأحدث ، و Clang ++ 15 أو أحدث.
Stroika v2.1
تم اختباره على X86 ، ARM (+M1) ، GCC 8 Thru GCC 12 ، Clang 6 Thru Clang 14 ، Visual Studio.net 2017 ، Visual Studio.net 2019 and Visual Studio.net 2022 ، Xcode 13 ، 14 ، 15.
Stroika v2.0
تم اختباره على X86 ، ARM ، GCC 5 Thru GCC 8 ، Clang 3 Thru Clang 6 ، Xcode 8 Thru 9.
أفعال جيثب
| الفروع | حالة | |
|---|---|---|
| V3-RELEASE | ![]() | .github/سير العمل/build-n-test.yml |
| v3-dev | ![]() | .github/سير العمل/build-n-test.yml |
لمزيد من التفاصيل حول تغييرات الإصدار الفردي ، راجع:
notes.md
"البدء" ، وبناء التعليمات ، والتصميم وغيرها من الوثائق:
توثيق/
يعد البحث في العينات وسيلة جيدة للبدء:
عينات/
الرجاء الإبلاغ عن الأخطاء/القضايا على:
http://stroika-bugs.sophists.com