Stroika ist ein modernes, tragbares C ++ -Anwendung -Framework. Das Schreiben von C ++ - Anwendungen erleichtert die Bereitstellung von sicheren, flexiblen Bausteinen sowie Verpackungen in anderen nützlichen Bibliotheken, die ihnen helfen, alle scheinbaren zusammenzuarbeiten.
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 " }));Kuh (Kopie auf dem Schreiben verbessert in den meisten häufigen Fällen häufig signifikant)
APIs definiert durch Zugriffsmuster, wie Stack = Push/Pop, Sequence = Array-ähnlicher Zugriff, MAP = {von: bis} usw.
Repräsentative Transparenz
Stroika bietet eine Reihe von Container -Archtypen und Datenstruktur -Auswirkungen.
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 }); Weitere Informationen finden Sie unter Behälter
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);
}Weitere Informationen finden Sie in der Serialisierungsprobe
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); }}},Weitere Informationen finden Sie unter Webservices Beispiel.
Macht Komprimierung, Verschlüsselung, IO, Netzwerk, Datenverarbeitung, alle scheinbar zusammenpassen
// @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))Stylistisch unterscheidet sich Stroika von der Standard-C ++-Bibliothek, dem Boost und vielen anderen C ++-Bibliotheken, da sie (relativ) objektorientierte Abstraktionen über die vorlagenbasierte Generatität umfasst (siehe Stroika-Ansatz-zu-Performance.md). Die Abstraktion von Typhierarchien ist besser dazu geeignet, wie Menschen die Vernunft haben, und Vorlagen und Konzepte - obwohl mächtig - können fummelige und dunkle Programmiererabsichten sein. Außerdem betont Stroika die Trennung der Schnittstelle von der Implementierung: sorgfältig die Schnittstelle in den Headern dokumentieren und die Implementierung in andere Dateien trennen.
Stroika besteht aus 2 Ebenen: der Stiftung, die Gebäudeblockungsklassen für die meisten Anwendungen und eine Reihe von domänenspezifischen Frameworks anbietet, die eine umfassende Sammlung von Code in verschiedenen Domänen bieten.

Die Rahmenbedingungen hängen von der Fundament ab; Fundamentmodule hängen häufig voneinander ab; Der Foundation Layer Code enthält jedoch keine Abhängigkeiten außerhalb der Fundament (außer in der Standard -C ++ - Bibliothek und verschiedenen Bibliotheken von ThirdPartyComponent enthalten optional enthalten oder referenziert, wie OpenSSL).
Ich möchte nicht lesen - möchte nur codieren. Schritt -für -Schritt -Anweisungen zum Erstellen Ihrer ersten Stroika -basierten Anwendung auf Ihrem Computer (weniger Download/Kompilierzeiten -, die variieren).
Stroikas größte Stärke ist auch die größte Schwäche:
Stroika V3 in der aktiven Entwicklung ( nicht stabil ) und benötigt C ++ 20 oder später.
Stroika v2.1 ist stabil (in Wartung) und erfordert C ++ 17 oder höher. Version 2.1 unterstützt auch konditionell viele C ++ 20-Funktionen (z. B. Drei-Wege-Vergleich usw., falls verfügbar).
Stroika v2.0 ist sehr stabil und benötigt C ++ 14 oder höher. Stroika v2.0 wird verwendet, um eine Vielzahl von Open Source- und kommerziellen Anwendungen zu versorgen.
Linux, MacOS, Windows
Stroika V3
TBD, aber bisher sieht es aus wie VS2K22 (17,9) oder später auf Windows, Xcode 15 (.2) oder später auf MacOS und G ++ 11 oder höher sowie Clang ++ 15 oder höher.
Stroika v2.1
Getestet an x86, arm (+m1), gcc 8 bis gcc 12, clang 6 bis clang 14, visual studio.net 2017, visual studio.net 2019 und visual studio.net 2022, xcode 13, 14, 15.
Stroika v2.0
Getestet auf x86, Arm, GCC 5 bis GCC 8, Klang 3 bis Klang 6, Xcode 8 bis 9.
Github -Aktionen
| Zweige | Status | |
|---|---|---|
| V3-Release | ![]() | .Github/Workflows/Build-N-Test.yml |
| v3-dev | ![]() | .Github/Workflows/Build-N-Test.yml |
Weitere Informationen zu Änderungen der individuellen Veröffentlichung finden Sie unter:
Release-notes.md
"Erste Schritte", erstellen Sie Anweisungen, Design und andere Dokumentation:
Dokumentation/
Das Schauen der Proben ist auch ein guter Start:
Proben/
Bitte melden Sie Fehler/Probleme unter:
http://stroika-bugs.sophistists.com