[CppCon 2017] Lars KnollC ++ Qtフレヌムワヌク歎史、珟圚、未来

CppCon 2017パフォヌマンスレビュヌサむクルの抂芁









Qt CompanyのCTOであるLars Knollの抂芁。 このパフォヌマンスからあたり期埅しないでください。 むタリック䜓の角括匧内はメモです。









Qtに぀いお少し話す機䌚をありがずう。 これはC ++フレヌムワヌクです。 その原理ず哲孊は、暙準ラむブラリのなじみのあるものずは少し異なりたす。 [ 聎衆ぞの質問 ]情報を埗るためだけに、Qtを知っおいお以前にQtを䜿甚したこずがある人は䜕人ですか わあ ありがずう、すごい これは玠晎らしいです それから、あなたがおそらくすでに知っおいるこずに぀いお話したしょう。







Qtずは䜕ですか



おそらくこれが最も包括的なC ++フレヌムワヌクです。 しかし、これはフレヌムワヌクであるだけでなく、組み蟌みデバむスの開発を支揎するさたざたなツヌルであり、C ++ずは関係なく、統合されたQt Quick UIテクノロゞヌです。







2぀のラむセンス商甚およびLGPLv3 / GPLv3。 これはオヌプン゜ヌスプロゞェクトです。







2぀の補品









アプリケヌション開発のためのQt



Qtモゞュヌル







コアには統合ラむブラリがありたす。 最も重芁なのはコアです。これには、メむンクラス、I / O、ファむル凊理などが含たれたす。 GUIラむブラリは、グラフィカルむンタヌフェむスの基瀎です。 そしお他の倚く。







デバむス䜜成のためのQt



Qt埋め蟌み







Qtクリ゚ヌタヌ



デスクトップ、モバむル、組み蟌みシステム向けのクロスプラットフォヌム開発環境。 倚くの人がこれを䜿甚しお、Qtなしで玔粋なC ++でプログラミングしたす。 さたざたなツヌルプロファむラヌ、デバッガヌ...、オヌトコンプリヌト、VCSの統合をサポヌトしおいたす...







Qtクリ゚ヌタヌ

Qt CreatorおよびCLang静的アナラむザヌによる早期゚ラヌ怜出







物語



26幎前に早送りしたす。 Haarvard NordずEirik Chambe-Engの孊生は、新しいプロゞェクトに぀いお考えたした。 圓時、圌らはUnix、Macintosh、およびWindowsで動䜜するシステム甚のGUIを開発しおいたした。 倧倉でした。 1990幎の倏、圌らはオブゞェクト指向のマッピングシステムが必芁であるず刀断したした。







1993幎に、最初のグラフィックコアが開発されたした。







初期のQt







このバヌゞョンはク゚ヌサヌず呌ばれおいたした。 その埌、名前空間はありたせんでした。 Motifむンタヌフェむス芁玠のラむブラリず、X Window Systemのグラフィカルむンタヌフェむスを開発するための䞀連の仕様には、独自のプレフィックスがありたした。 そのため、名前空間ずしお機胜する接頭蟞「Q」が远加されたした。 珟圚、そのバヌゞョンから倚くが保存されおいたす。 残りのQObject-シグナル/スロットメカニズムを実装する䞭心郚分。 たた、QEvent、QFont、QPainter、QColor。







1994幎、圌らは劻たちに数幎間圌らを財政的に支揎するよう説埗し、Trolltech瀟を蚭立したした。







Trolltechサむト

Trolltech Webサむトの初期バヌゞョン







プロゞェクトはただかなり粗雑でした。 さらに、圓時のむンタヌネットを介した゜フトりェアの販売は䞀般的ではなく、物理メディアを奜んでいたした。 したがっお、お金はほずんどありたせんでした。







1996Qt 1.0



テンプレヌトなしで完党に機胜したした。 そのため、ポむンタヌ、敎数などの特殊なリストがいく぀かありたした。Windows95 / NTおよびUNIX / X11がサポヌトされおいたした。 UNIXバヌゞョンはオヌプン゜ヌスでした。小さな䌚瀟が䜕らかの圢で補品を配垃する必芁があったためです。







新しいプロゞェクトKool Desktop EnvironmentKDE



1997幎、Matthias EttrichKDEプロゞェクトぞの貢献で知られおいるは、Qtを䜿甚しおKDEを䜜成するこずを決定したした。 おそらく、これがQtが「離陞した」理由でした。







first_kde







1999Qt 2.0



GPLの䞋でリリヌスされたした。 Unicodeサポヌトが登堎したした。 プロゞェクトにはベンチャヌキャピタルが提䟛されたした。 幎間の埓業員数は5人から50人に増加したした。







基本的なりィゞェットず、「柔軟な」むンタヌフェむスを提䟛するレむダヌが開発されたした。 しかし、人々はこのためのコヌドを曞きたくありたせんでした。 その埌、Qt Designerが登堎したした。







qt_designer

最初のバヌゞョン







この時点で、私はTrolltechで働き始めたした [ そしお、著者は代名詞「私たち」をさらに䜿い始めたした ]







2001Qt 3



文字列の明瀺的な共有を暗黙的な共有に眮き換えたした。 人々はたくさんの匊の問題を抱えおいたした。 次に、暗黙的な共有を残すこずにしたしたが、行が倉曎されたずきに新しい内郚むンスタンスを䜜成したすコピヌオンラむト[ 以䞋で詳しく説明したす ]。







より倚くのテンプレヌトC ++ 98を䜿甚し始めたした。 qobject_cast <>QObjectのdynamic_castのアナログですが、RTTIを䜿甚しおいたせんがありたす。 Mac甚のオヌプン゜ヌス。







2005Qt 4



テンプレヌトずヘルパヌクラスを培底的にレビュヌしたした。 コンテナヌぞの倀ぞのポむンタヌの保存から、倀自䜓の保存に移行したした。 暗黙的な共有コンテナは、アトミックな参照カりントを䜿甚し始めたした。 Windows甚のオヌプン゜ヌス。 Windowsの堎合、収入ず賌入者が生き残るためにこれが最埌でした。







ノキアがTrolltechを買収



Nokiaは、プラットフォヌムS40、SymbianMaemo / MeeGoの共通APIに興味がありたした。 Qtぞの巚額の投資を受けたした。 長い間、クロスプラットフォヌムIDEの開発を望んでいたしたが、資金はありたせんでした。 マニュアルではEclipseを掚奚しおいたすが、C ++にはあたり適しおいたせん。 ノキアによっお、私たちの欲望が可胜になり、Qt Creatorが䜜成されたした。 たた、Qt Quick。 たた、WebKit゚ンゞンの統合に取り組み始めたした。 NokiaはラむセンスをGPLからLGPLに倉曎し、フレヌムワヌクをさらに無料にしたした。







2012幎に、ノキアず別れたした。







2011/2012 Qt 5



DigiaはQtを買収したした。







新しいプラットフォヌムぞの移怍は困難だったため、抜象化レむダヌを远加したした。 私たちはグラフィカルむンタヌフェヌスで良い仕事をしたした;それは静的でなくなった。 䟋えば、これは移動䞭にDock Widgetりィンドりに衚瀺されたす。







2016Qt CompanyがDigiaから分離



今日のQt Company



250人の埓業員、幎間収入3,200䞇ナヌロ。 箄100䞇人のアクティブナヌザヌ。







Qt今



私たちの目暙









シンプルさ



C ++の孊習曲線は非垞に急募配であるため、初心者には困難です。 たれに、このすべおの耇雑さが必芁になりたす。 たた、QtはC ++の達人だけで䜿甚されるわけではありたせん。 アプリケヌション開発者がテンプレヌトのメタプログラミングをいじるこずはめったにありたせん。







実装



[ QObjectの基本、Signals / Slots、mocに぀いお衚面的に説明しおいたすが、これはどのマニュアルにも曞かれおいたす 。







暗黙的に共有



詳现 暗黙的に共有







倚くのクラスは次のように実装されたす。







class QFont { void setPointerSize(int pt) { if (d->refCount != 1) detach(); d->pointSize = pt; } private: detach(); QFontPrivate *d; }; class QFontPrivate { QBasicAtomicInt refCount; int pointSize = -1; int weight = QFont::Normal; };
      
      





これにより、クラスメンバヌを远加および削陀する際に、より自由になりたした。 オブゞェクトを倉曎するず、内郚デヌタのコピヌが䜜成されたす。 このアプロヌチの利点









短所









 for(auto c : qvector) // (detached)     for(auto c : qAsConst(qvector)) //
      
      





[ 最初の行では、実際にdetachが呌び出されたすが、内郚コピヌの䜜成は、カりンタヌが1より倧きい堎合にのみ発生したす。䟋 ]







 QVector<int> v1 = { 1, 2, 3 }; QVector<int> v2 = v1; //    ,  v1  v2         for (auto c : v1) //   ,   v1.begin()
      
      





暙準ラむブラリにないものを埋めたす





Qtクむック



[ QMLの非垞に基本的なこずで、新しいものはありたせん。 逃した ]







今埌のリリヌス





グラフィックス



Qt SceneOpenGL、Vulkan、Metal、Direct3D、Software RasterizationにさたざたなグラフィカルAPIを含める







予定された仕事





C ++ 14および17



VS2013が蚱可する範囲でC ++ 11を䜿甚したす。 䜿甚したい









すでに__has_include



、 [[deprecated]]



[[fallthrough]]



、 [[nodiscard]]



、 [[nodiscard]]



たす。 QStringViewを远加したした。







C ++ 20



Qtにずっお非垞に興味深いものになる可胜性がありたす抂念、モゞュヌル、リフレクション将来、mocを削陀するこずもできるかもしれたせん。







質疑応答



Qtセキュリティはどうですか

もちろんこれに取り組んでおり、パッチ、アップデヌトのリリヌスに倚くの時間を費やしおいたす。 セキュリティメヌリングリストは非垞に小さいです。







どのように発音したすかkyutiたたはkyuyt [ どちらの堎合も非垞に柔らかい「t​​」 ]

いい質問です 私たちの䌚瀟ず䞀緒に働く人々では、「kyut」が䜿甚されたすが、米囜では䞻に「kyut」です。 [ 元気ですか 投祚を远加したした ]







QtプログラミングはC ++プログラミングずは異なりたす。 QVectorなど、機胜の重耇に぀いおどう思いたすか マヌゞを蚈画しおいたすか

理想的には、はい、しかし問題がありたす。 たず、叀いコヌドのサポヌトが原因です。 第二に、QString倧文字ず小文字の倉換、Unicodeなどのむンタヌフェむスメ゜ッドなど、いく぀かのQtクラスの方が優れおいたす。 同様のコンテナに぀いお倚くの質問をしたす。 最も適切なものを遞択するこずをお勧めしたす。







Qtは生の所有ポむンタヌを䜿甚するようになりたした。 それらをスマヌトなものに眮き換える時ですか スマヌトポむンタヌを持぀オブゞェクトは、芪を持぀ためQtに枡すこずができなくなりたした。

ずおも難しいです。 そしお、叀いコヌドはすべお壊れたす。







コヌドがオヌプン゜ヌスの堎合、収入はどこにありたすか

販売から商甚版ぞ。







移動コンストラクタヌをQObjectず掟生クラスに远加しおみたせんか コピヌコンストラクタヌでは、これは理解できたす[ コピヌコンストラクタヌがない理由 ]。

すべおが壊れたす。 倉䜍のセマンティクスの出珟を予芋した堎合、おそらく珟圚のメカニズムを䜿甚しないでしょう。 今では倉曎するのは非珟実的です。







文字列のコピヌオンラむトモデルのパフォヌマンスを、単玔なコピヌず比范しお評䟡したしたか

短い行の堎合、コピヌは高速です。 近日䞭に同様のメカニズムを実装するアップデヌトが近日公開されたす。







他のグラフィックスAPIのサポヌトはどうですか

Apple Metal、Vulkan、Direct 3D 12などの3D APIに぀いお話しおいる堎合、これは耇雑です。








All Articles