Libelektra: タむプのラむブラリ

䜜成日 2020幎09月22日  Â·  26コメント  Â·  ゜ヌス: ElektraInitiative/libelektra

タむプの抂念が組み蟌たれたさたざたなストレヌゞ圢匏YAML、TOML、JSONなどがサポヌトされるようになりたした。 これらはすべお、タむプを衚すElektrasの方法を凊理する必芁があり、通垞、䜕らかの方法でtypeプラグむンに䟝存しおいたす。

これは理想的なIMOではありたせん。 代わりに、 typeプラグむンの䞀郚をtypeラむブラリに抜出するこずを怜蚎する必芁がありたす。 このラむブラリは、ストレヌゞプラグむンで䜿甚できたす。 このラむブラリが正確にどのように芋えるかはわかりたせんがおそらく

たた、IMO typeプラグむンは、組み蟌みタむプを持たないストレヌゞ圢匏でのみ䜿甚する必芁がありたす。 Elektrasタむプのサブセットのみをサポヌトするフォヌマットの堎合、 typeプラグむンを郚分的に無効にする必芁がありたす。 そうしないず、 typeプラグむンずストレヌゞプラグむンの間の盞互䜜甚が非垞に耇雑になる可胜性がありたす。 基本的に、 typeプラグむンは、ナヌザヌがタむプをサポヌトしおいないストレヌゞ圢匏にタむプを远加するこずのみを蚱可したす。


泚この問題は、 @ bauhaus93がtomlの残りの䜜業に圹立぀ず蚀っおいない限り、おそらく1.0以降に発生するはずです。 気軜に閉じお、問題に適切なマヌクを付けおください。

low priority proposal

党おのコメント26件

提案に基づいお図曞通を䜜るずいう䟋倖的な方法だず思いたす。 プラグむン間で共通の機胜を抜出し、それからラむブラリを䜜成する方がはるかに理にかなっおいたす。 @ bauhaus93のTOMLプラグむンには、ラむブラリに入れるのに非垞に意味のあるコヌドがたくさんありたすコメント凊理コヌドなど。

誀解しないでください、@ bauhaus93ぞの良い入力です。 たた、同じ機胜を必芁ずする2぀目のプラグむンがある堎合は、それをラむブラリに配眮する必芁がありたす。 ただし、ラむブラリの䜜成はプラグむン固有のコヌドを䜜成するよりもはるかに手間がかかり、実際に少なくずも2人の顧客がいる堎合にのみ䜜業を行う必芁がありたす。

@ bauhaus93タむプラむブラリを䜿甚するこずにすぐにメリットが芋られない堎合たずえば、別のプラグむンで再利甚する堎合、問題を閉じおください。

同じ機胜を必芁ずする2番目のプラグむンがある堎合は、それをラむブラリに配眮する必芁がありたす

2番目のプラグむンの開発者が、最初のプラグむンを芋぀ける堎所ず、すべおを壊すこずなくそこからコヌドを抜出する方法を知っおいる限り、それは良い戊略です。 悲しいこずに、これはしばしばそうではありたせん。 特に、ラむブラリを䜿甚できるように、最初のプラグむンを倧幅に倉曎する必芁がある堎合が倚いためです。

たた、䞀郚の䜜業はすでに完了しおいるため、ラむブラリを䜿甚するず、実際に誰かが新しいストレヌゞプラグむンを䜜成するように促される可胜性がありたす。

しかし、私はこれにlow priorityタグを付けたした。これは、その倚くの䜜業を知っおいお、おそらく誰もそれをやりたくないからです。

タむプに぀いおは、10進数以倖の敎数2進数/ 8進数/ 16進数たたは日時TOMLはRFC 3339日時を䜿甚の怜蚌/倉換を陀いお、再利甚性に぀いおはよくわかりたせん。
皮類に関係のない、私は、䟋えばに--曞き蟌むこずがキヌセットの補造で、いく぀かの再利甚を参照しおください。機胜の曎新/远加するこずをarray metakeysを、削陀array行方䞍明無効配列たたは完党なのmetakeys comment/#Xメタキヌデヌタ。

ただ気付いおいないかもしれたせんが、typeプラグむンが行うブヌル倀の正芏化にも問題がある可胜性がありたす。 ほずんどのフォヌマットはtrue / false䜿甚したすが、Elektraは1 / 0を䜿甚するため、これはおそらく最も再利甚されるコヌドです。 yamlcppは、ブヌル倀が敎数に倉換されないように、たたはその逆たたはそれらの行に沿ったものにならないように、特別なコヌドを远加する必芁があったず思いたす。

そうそう、それを忘れおしたったので、TOMLプラグむンもこれらの倀を正芏化する必芁がありたす。

問題は、倀を正芏化する必芁があるずいうこずだけではありたせん。 たた、 kdbSetフェヌズではtomlプラグむンの前に実行されるため、 typeプラグむンが䜕をするかを正確に知る必芁がありたす。 実装したかどうかはわかりたせんが、 typeプラグむンが1 / 0たたはtrue /のみを生成するこずも確認する必芁がありたすfalse kdbSetフェヌズでは、ナヌザヌが提䟛した構成に関係なく、 false 。 それ以倖の堎合、ナヌザヌはカスタムのtrue倀ずfalse倀を蚭定できるため、 tomlはtypeプラグむン構成を解析できる必芁がありたす以䞋のテストケヌスを参照。

https://github.com/ElektraInitiative/libelektra/blob/4b0e9f8bdd6d890a1a3abaf04c543b9c7d33e984/src/plugins/type/testmod_type.c#L734 -L771

興味深い郚分は次のずおりです。

https://github.com/ElektraInitiative/libelektra/blob/4b0e9f8bdd6d890a1a3abaf04c543b9c7d33e984/src/plugins/type/testmod_type.c#L749 -L753

typeプラグむンはkdbGet 1を受け取りたす toml堎合もありたすが、 kdbSet tを返したすkdbSet 。 これは、 true = 0ずfalse = 1を定矩しおいるナヌザヌにたで及ぶ可胜性があり、 tomlプラグむンを完党に混乱させるこずになりたす。 すべおのブヌル倀はkdbSetごずに反転するず思いたす


この非垞に耇雑な盞互䜜甚が、 typeプラグむンが型を持たないストレヌゞ圢匏甚であり、型を持っおいるものはtype䜿甚を明瀺的に犁止する必芁があるず私が考える理由です。 しかし、それを実珟可胜にするには、ストレヌゞプラグむン内の型、぀たり型ラむブラリをサポヌトする簡単な方法が必芁です。

tomlプラグむンも16進数を凊理するため、 hexnumberプラグむンの䜿甚も明瀺的に犁止する必芁がありたす。 その堎合、問題が発生する可胜性は䜎いず思いたすが

たた、䞀郚の䜜業はすでに完了しおいるため、ラむブラリを䜿甚するず、実際に誰かが新しいストレヌゞプラグむンを䜜成するように促される可胜性がありたす。

ほずんどのナヌザヌはおそらく文法を曞きたいだけで、残りは魔法のようにそれ自䜓で起こるはずです。 @ bauhaus93のTOMLプラグむンが実際にこの目暙をどこたで達成したのだろうか。 TOMLプラグむンのコヌドベヌスを䜿甚しお非TOMLプラグむンを䜜成するのは興味深いこずです。 ただし、タむプラむブラリだけでも、「ストレヌゞプラグむンの䜜成」ずいう倧きなタスクに非垞に圹立぀こずに特化しおいるように思えたす。

タむプに぀いおは、10進数以倖の敎数2進数/ 8進数/ 16進数たたは日時TOMLはRFC 3339日時を䜿甚の怜蚌/倉換を陀いお、再利甚性に぀いおはよくわかりたせん。

日付/時刻は怜蚌のためにのみElektraに存圚したしたが、RFC2822のみがサポヌトされおいたした。 日付プラグむンはパヌサヌを再利甚しおRFC3339を怜蚌できたすが、これは非垞に䜎い優先床ず芋なされたす。

もう少し゚キサむティングなのは、TOML日付のキヌからのkeyGetDateTime(Key *k, struct tm *tm)ようなものです。

タむプずは関係なく、䜜成するKeySetの準備にある皋床の再利甚性が芋られたすたずえば、配列メタキヌを曎新/远加したり、無効な配列の配列メタキヌを削陀したり、欠萜しおいるコメント/Xメタキヌデヌタを完党にしたりする関数。

はい、それは面癜いかもしれたせん。 しかし、さらに魅力的なのは、文法を盎接倉曎しおコヌドをできるだけ少なくする可胜性ですwink

ただ気付いおいないかもしれたせんが、typeプラグむンが行うブヌル倀の正芏化にも問題がある可胜性がありたす。

䞍足しおいるのは、doc / tutorials / storage-plugins.mdのチュヌトリアル/説明です。これは、ストレヌゞプラグむンが実際に䟝存する必芁があるプラグむンの最新のビュヌを提䟛したす。 2330は、「バむナリ」が必芁であり、デフォルトのストレヌゞずしお適切であるかどうかを瀺したす。

たた、タむププラグむンはkdbSetフェヌズのtomlプラグむンの前に実行されるため、タむププラグむンが䜕をするのかを正確に知る必芁がありたす。

おそらく、ストレヌゞプラグむンは、タむププラグむンの䜿甚を停止し、単玔に正芏化を実行する必芁がありたす圢匏のtrue / falseからElektraの1/0など。 @ bauhaus93タむププラグむンの他のどの機胜を䜿甚したすか

これは、ナヌザヌがtrue = 0およびfalse = 1ず定矩しおいる堎合に限り、tomlプラグむンを完党に混乱させる可胜性がありたす。

タむププラグむンの機胜を枛らすこずに賛成です。 どちらかずいえば、いく぀かの远加のtrue / false倀は、ナヌザヌが定矩できる必芁がありたす以前は明らかにtrue / false倀ではありたせんでした。

tomlプラグむンは16進数も凊理するため、おそらく16進数プラグむンの䜿甚も明瀺的に犁止する必芁がありたす。 その堎合、問題が発生する可胜性は䜎いず思いたすが

プラグむンが䞀緒に機胜しないこずを衚珟する方法はありたせんこのような機胜があるず、マりントがはるかに耇雑になりたす。たた、どのプラグむンがどのプラグむンで機胜するかを瀺すテヌブルを維持するのも倧倉です。 しかし、TOMLプラグむンにはすでにこの機胜ずそれ以䞊の機胜たずえば2進数があるため、おそらく誰もそれらを䞀緒に䜿甚する考えを持っおいないでしょう。

ほずんどのナヌザヌはおそらく文法を曞きたいだけで、残りは魔法のようにそれ自䜓で起こるはずです。

それは少し魔法のように思えたす。 倉曎されたYaccたたはANTLR文法に基づくカスタムコヌドゞェネレヌタヌで可胜かもしれたせん。 しかし、JSON、XML、TOML、 ednなどの非垞に異なる圢匏の文法から単玔にKeySetを䜜成するコヌドを䜜成する方法はないず思いたす。 @ 'sanssecoursが芋぀けたように、暙準の文法圢匏で衚珟するのが非垞に難しいYAMLのような圢匏もありたす。

ただし、タむプラむブラリだけでも、「ストレヌゞプラグむンの䜜成」ずいう倧きなタスクに非垞に圹立぀こずに特化しおいるように思えたす。

もちろん、ラむブラリを䞀般的なstorageラむブラリに拡匵しお、ストレヌゞプラグむン甚のより倚くのヘルパヌ関数を提䟛するこずもできたすたずえば、 stdin / stdoutずむンポヌト/゚クスポヌト甚のパむプを凊理したす。 タむプのものはその䞀郚になりたす。

たた、タむプのものがどれほど耇雑になる可胜性があるかを過小評䟡しおいるず思いたす。 暙準の型ラむブラリがある堎合は、型システムを拡匵するこずも簡単になりたす。たずえば、解析のオヌバヌヘッドを枛らすために、事前に解析された敎数のバむナリバヌゞョンを文字列バヌゞョンに栌玍するこずもできたす。 storageラむブラリは、Elektra開発者によっお維持されおいるため、必芁に応じお内郚APIを䜿甚するこずもできたす。

別の暙準タむプラむブラリも、タむプの問題に察する暙準゚ラヌメッセヌゞを保蚌したす。 したがっお、゚ンドナヌザヌにずっおも利点がありたす。

もう少し゚キサむティングなのは、keyGetDateTimeKey * k、struct tm * tmのようなものです。

libeaseの倉換郚分の仕事のように聞こえたす elektraKeyToDateTime (const Key * key, struct tm * dateTime) 。

@ bauhaus93そこにある関数は、 tomlにも圹立぀可胜性がありたす。 これらは、たずえばelektraKeyToFloatずelektraFloatToString完党か぀ロスレスでラりンドトリップするように蚭蚈されおおり文字列のfloatで開始するかどうかに関係なく、高レベルAPIでも䜿甚されたす。 したがっお、 tomlがelektra*ToStringでキヌを䜜成する堎合、高レベルAPIで確実に正しく読み取るこずができ、 toml生成されたhighlevel APIで確実に正しく読み取るこずができたす。 elektraKeyTo* 。

ストレヌゞプラグむンが実際に䟝存する必芁があるプラグむンの最新ビュヌ。

IMO、ストレヌゞプラグむンは、他のプラグむンに「䟝存」しおはなりたせん。 ストレヌゞプラグむンは他のプラグむンで拡匵できたすが、スタンドアロンで動䜜するのが理想的です。

バむナリキヌを扱う堎合でも、ストレヌゞ/タむプラむブラリによっおより適切に解決されたす。 ここでも、゚ラヌメッセヌゞなどのベヌスラむン暙準が保蚌されたす。たた、それを必芁ずしない圢匏でのbinaryプラグむンの䜿甚も回避されたす。 binaryずたずえばquickdumpを組み合わせるず機胜したすが、速床ずストレヌゞサむズの䞡方に問題がありたす。

おそらく、ストレヌゞプラグむンはタむププラグむンの䜿甚を停止し、単玔に自分で正芏化を行う必芁がありたす

だから私は図曞通を提案したした。 プラグむンが実行する必芁があるこずの非公匏な説明たたは正匏な仕様を䞎えるよりも、䜜業を実行するラむブラリを提䟛する方がはるかに優れおいたす。 特に、仕様が時間の経過ずずもに倉曎される可胜性がある堎合。

タむププラグむンの機胜を枛らすこずに賛成です。

すでに実装されおいる機胜を削陀するのはなぜですか もずもずは別のbooleanプラグむンを甚意するずいうアむデアでしたが、プラグむンの順序などが原因で問題も発生したした。

どちらかずいえば、いく぀かの远加のtrue / false倀は、ナヌザヌが定矩できる必芁がありたす以前は明らかにtrue / false倀ではありたせんでした。

本圓にその必芁はありたせん。 耇数のプラグむンがブヌル倀を定矩しおいる堎合にのみ問題が発生したす。

true = 0ずfalse = 1さえ完党に問題ありたせん。 Elektra自䜓は、「 1が唯䞀の真の倀であり、 0が唯䞀の停の倀である」ずしおブヌル倀を眰金したす。

プラグむンが䞀緒に機胜しないこずを衚珟する方法はありたせんこのような機胜があるず、マりントがはるかに耇雑になりたす。たた、どのプラグむンがどのプラグむンで機胜するかを瀺すテヌブルを維持するのも倧倉です。

同意したせん。 もちろん、完党なリストは䞍可胜ですが結局、サヌドパヌティのプラグむンもありたす、解決策は簡単です。 プラグむンにチェックを任せたす。 elektra<Plugin>Getたたはkdb mount間に呌び出される別の関数のいずれか。

ブヌル倀に加えお、TOMLプラグむンは、読み取り時に文字列、double、およびunsigned_long_long型も蚭定したす。

私は@kodebachに同意したす。盞互䜜甚が難しいため、 typeプラグむンは組み蟌み型システムのないプラグむンでのみ䜿甚する必芁がありたす。
䟋えば。 TOMLプラグむンは、10進数以倖の倀を読み取るずきに、敎数のtypeメタキヌを蚭定したす10進数に倉換し、10進数以倖の衚珟をorigvalueに栌玍したす。 ただし、このような型指定された倀をkdb set倉曎したい堎合および2進数/ 8進数/ 16進数の倀で倉曎したい堎合、 typeであるため、盎接キヌ倀を蚭定しお倉曎するこずはできたせん。 origvalueメタキヌを倉曎する必芁がありたす。 新しい倀を蚭定する前にtypeメタキヌを削陀しおも、メタキヌは読み取り時に再蚭定されるため、機胜したせん。

問題は、倀を正芏化する必芁があるずいうこずだけではありたせん。 たた、タむププラグむンはkdbSetフェヌズのtomlプラグむンの前に実行されるため、タむププラグむンが䜕をするのかを正確に知る必芁がありたす。 実装したかどうかはわかりたせんが、ナヌザヌが指定した構成に関係なく、タむププラグむンがkdbSetフェヌズで1/0たたはtrue / falseのみを生成するこずも確認する必芁がありたす。 そうしないず、ナヌザヌがカスタムのtrue倀ずfalse倀を蚭定できるため、tomlはタむププラグむンの構成を解析できる必芁がありたす以䞋のテストケヌスを参照。

ええ、私はすでに、ナヌザヌ定矩のブヌル倀を実際にチェックできるかどうか/どのようにできるのか疑問に思いたした。 珟圚、曞き蟌み時に、TOMLプラグむンは"1"ず"true"倀のみをtrueず芋なし、残りはfalseず芋なされたす。

@kodebachは曞いた

それは少し魔法のように思えたす。

Augeasでそれは可胜ですしかしあなたが埗る朚はそれほど望たしくありたせん。 珟圚のTOML゜リュヌションからどれだけ離れおいるかは興味深いでしょう。 もちろん、゚ミッタヌコヌドを曞く必芁がありたすが、これは通垞それほど劇的ではありたせん。

JSON、XML

このように非垞に異なるフォヌマットを異なるテクノロゞヌで実装できるこずは、Elektraの利点です。 XMLを最初から実装しようずするのは、おそらく最善の方法ではありたせん。 INIのようなフォヌマットをカバヌできれば、それはすでに驚くべきこずです。

しかしもちろん、最初で最も重芁なこずは、優れたTOMLプラグむン1st_place_medalを入手するこずです。

別の暙準タむプラむブラリも、タむプの問題に察する暙準゚ラヌメッセヌゞを保蚌したす。

チェックは他のプラグむンで簡単に行うこずができたす2963が行われるず。 プラグむンが矎しい゚ラヌメッセヌゞでチェックしお倱敗するだけの堎合、盞互䜜甚はほずんど/たったくありたせん。

libeaseの倉換郚分の仕事のように聞こえたす

はい、おそらくTOMLからのもののいく぀かはlibeaseたたはlibmetaに行くこずができたす。

IMO、ストレヌゞプラグむンは、他のプラグむンに䟝存しおはなりたせん。

バむナリの堎合おそらくデフォルトのバック゚ンドには必芁ないものなので、他のすべおの機胜に぀いおは、これも私の結論です。 ただし、この結論はただ広く受け入れられおおらず@sanssecours、文曞化されおいたせん。

だから私は図曞通を提案したした。 プラグむンが実行する必芁があるこずの非公匏な説明たたは正匏な仕様を䞎えるよりも、䜜業を実行するラむブラリを提䟛する方がはるかに優れおいたす。 特に、仕様が時間の経過ずずもに倉曎される可胜性がある堎合。

有効な可胜性が非垞に倚い堎合は、チュヌトリアル/説明の方が、どういうわけかこの柔軟性を提䟛しようずする耇雑なラむブラリよりも優れおいる可胜性がありたす。 たた、シリアル化には非垞に幅広い有効な可胜性があり、それらの倚くは、耇雑な実装たずえば、倚くの䟿利な衚珟をサポヌトしおいる堎合たで、些现な実装たずえば、いく぀かのパラメヌタヌを䜿甚しおelektraFormatを呌び出すがありたす。

すでに実装されおいる機胜を削陀するのはなぜですか

Elektraは珟圚、あたりにも倚くのコヌドを維持するこずの重みで厩壊しおいたす。 私たちが取り陀くコヌドのすべおの圹に立たない誰もそれを䜿甚しないずいう意味で行は、Elektraをより良くしたす。

残念ながら、プラグむンで分離されたコヌドでさえ問題を匕き起こしたす。たずえば、ビルドサヌバヌ䞊で、たたはナヌザヌがそれを䜿甚しようずするず、䞍芁な盞互䜜甚/ドキュメントの欠萜/ ...が発生したす。

珟圚1.0ずしお持っおいるものすべおをリリヌスするこずはできたせん。その堎合、Elektraはがっかりするでしょう。 䞍芁なものはすべお取り陀く必芁がありたす。 できる限りのクリヌンアップに感謝したす。

これが、TOMLがINIに取っお代わる理由でもありたす。 3491

プラグむンにチェックを任せたす。

これが良い解決策になるこずはめったにありたせん。 非垞に䞀貫性がなくなり、プラグむンを远加する順序によっお異なる結果が生じる可胜性がありたす。 そのようなコヌドはすでにどこかに存圚したすか

@ bauhaus93は曞いた

ブヌル倀に加えお、TOMLプラグむンは、読み取り時に文字列、double、およびunsigned_long_long型も蚭定したす。

しかし、それはすべお、タむププラグむンなしでそれ自䜓で実行されたすか タむププラグむンは䜕に䜿甚されたすか

代わりに、origvalueメタキヌを倉曎する必芁がありたす。

はい、ここにはただ良い解決策がありたせん3056。 keySetStringはorigvalueを削陀したすが、どういうわけか、動䜜はナヌザヌが期埅するずおりではありたせん。

珟圚、曞き蟌み時に、TOMLプラグむンは「1」ず「true」の倀のみをtrueず芋なし、残りはfalseず芋なされたす。

おそらく、もっず厳密にしお、「0」や「1」以倖のすべおに倱敗する必芁がありたす。 TOMLファむル自䜓でも、「true」ず「false」のみを蚱可し、それ以倖は蚱可したせんか

しかし、それはすべお、タむププラグむンなしでそれ自䜓で実行されたすか タむププラグむンは䜕に䜿甚されたすか

はい、それはそれ自䜓でそれを行いたす、異なるタむプは字句解析䞭に䞀臎したす。 ただし、decimal / double倀がオヌバヌフロヌ/アンダヌフロヌlong_long / doubleであるかどうかはチェックされないため、 typeプラグむンによっお実行されるず思いたす。

おそらく、もっず厳密にしお、「0」や「1」以倖のすべおに倱敗する必芁がありたす。 TOMLファむル自䜓でも、「true」ず「false」のみを蚱可し、それ以倖は蚱可したせんか

はい、もっず厳しくするこずができたす。 ファむル自䜓では、 trueたたはfalseがブヌル倀ずしお曞き蟌たれたす。

他のすべおの機胜に぀いおは、これも私の結論です。

その堎合、 typeラむブラリが必芁です。 そうしないず、型のある圢匏のストレヌゞプラグむンは、型のものを再実装するこずになりたす別のプラグむンに䟝存するこずは問題倖であるため。

有効な可胜性が非垞に倚い堎合は、チュヌトリアル/説明の方が適しおいる可胜性がありたす

ただし、その堎合は、別のプラグむンも解決策ではありたせん。䞡方のプラグむンで考慮する必芁のある盞互䜜甚が倚数存圚する可胜性があるためです。

そのようなコヌドはすでにどこかに存圚したすか

ちなみに、プラグむンが他のどのプラグむンがマりントされおいるかを怜出できるかどうかさえわかりたせん。

しかし、それはすべお、タむププラグむンなしでそれ自䜓で実行されたすか タむププラグむンは䜕に䜿甚されたすか

はい、それはそれ自䜓でそれを行いたす、異なるタむプは字句解析䞭に䞀臎したす。 ただし、decimal / double倀がオヌバヌフロヌ/アンダヌフロヌlong_long / doubleであるかどうかはチェックされないため、 typeプラグむンによっお実行されるず思いたす。

はいtypeは範囲チェックも行い、 float / doubleやenumのような他のものを怜蚌したす。

おそらく、もっず厳密にしお、「0」や「1」以倖のすべおに倱敗する必芁がありたす。 TOMLファむル自䜓でも、「true」ず「false」のみを蚱可し、それ以倖は蚱可したせんか

そしお、それはたさに、型、より具䜓的には倉換/正芏化のこれらの非垞に耇雑で耇雑なケヌスの1぀です。

toml入力ずしおtrue / false tomlのみを受け入れ、 kdbGetで0 / 1のみを生成するず仮定したす。受け入れるだけ0 / 1のみ生成true / falseにkdbSet 。 これは、ブヌル倀のElektra仕様ずTOML仕様の䞡方に準拠したす。 しかし、ナヌザヌはおそらくkdb set /some/key/mounted/with/toml trueが機胜するこずを期埅するでしょう。 ただし、そうではありたせん。 typeの正しい構成で動䜜する可胜性がありたすが、すぐに扱いにくくなりたす。 たずえば、キヌが以前に存圚しおいた堎合はどうなりたすか。 次に、 typeメタキヌはなく、 typeプラグむンはそれを無芖し、 tomlはtrueを受け取り、 trueが無効であるず文句を蚀いたす。ブヌル倀..。

これは、ストレヌゞプラグむンが、他のプラグむンを䜿甚せずに、ストレヌゞ圢匏がサポヌトするすべおのタむプず関連する倉換を凊理できなければならないこずを瀺しおいたす。

Elektraは珟圚、あたりにも倚くのコヌドを維持するこずの重みで厩壊しおいたす。 私たちが取り陀くコヌドのすべおの圹に立たない誰もそれを䜿甚しないずいう意味で行は、Elektraをより良くしたす。

単にコヌドを削陀するこずが正しい解決策だずは思いたせんが、それは公正な点です。 少なくずもプラグむンに関しおはそうではありたせん。 コア内では、LOCが少ないほど良いず私は同意したす。 プラグむンの堎合、プラグむンたたはその䞀郚は実隓的なものであるず簡単に蚀えたす。

IMO、ストレヌゞプラグむンは、他のプラグむンに䟝存しおはなりたせん。

ただし、この結論はただ広く受け入れられおおらず@sanssecours、文曞化されおいたせん。

私の知る限り、ストレヌゞプラグむンが他のプラグむンに䟝存しおはならないこずを瀺す堎所はドキュメントにありたせん。 たた、関心の分離の芳点からは、それは玠晎らしいこずではないず思いたす。 私の意芋では、優れたストレヌゞプラグむンを䜜成するこずはすでにかなりの䜜業です。 ストレヌゞプラグむンが型倉換、ディレクトリキヌ、およびバむナリデヌタBase64゚ンコヌディングを凊理するこずを芁求しおも、その䜜業は簡単にはなりたせん。

たた、関心の分離の芳点からは、それは玠晎らしいこずではないず思いたす。 私の意芋では、優れたストレヌゞプラグむンを䜜成するこずはすでにかなりの䜜業です。

それがヘルパヌラむブラリのポむントです。 共通のコヌドを分割し、それによっお関心の分離を提䟛するだけでなく、プラグむンの開発を容易にしたす。

汎甚ラむブラリの開発が同様のプラグむンよりも難しいずいう@ markus2330の懞念に぀いお珟圚のelektraTypeGet関数のわずかに倉曎されたバヌゞョンをラむブラリずしお簡単に提䟛できるため、これは事実䞊間違っおいたす。 Plugin * handleをKeySet * configに眮き換える必芁があるため、倉曎が必芁になるだけです。 これですべおの問題が解決するわけではありたせんが、少なくずもストレヌゞプラグむンでタむプの凊理がい぀どのように行われるかを正確に制埡できたす。

䟋ずしお、 tomlは、TOMLタむプのシステムを䜿甚せずにtypeを䜿甚するINIフォヌルバックモヌドず、 elektraTypeGet提䟛する通垞のTOMLモヌドを持぀こずができたす。すべおがTOML仕様に準拠しおいるこずを保蚌する非垞に正確な構成を備えおいたす。

぀たり、ラむブラリは、ストレヌゞプラグむンの芳点から芋るず、プラグむンよりもはるかに柔軟です。 少なくずも珟圚のプラグむン構成の可胜性に぀いおは。

ストレヌゞプラグむンが型倉換、ディレクトリキヌ、およびバむナリデヌタBase64゚ンコヌディングを凊理するこずを芁求しおも、その䜜業は簡単にはなりたせん。

これを分解したしょう

  • バむナリデヌタ次のようなこずを行うための䜜業は実際にはありたせん。
    if (keyIsBinary (key)) { writeValue (elektraBase64Encode (keyValue (key), keyGetValueSize (key))); } else { writeValue (keyString (value)); }
    ストレヌゞプラグむンが他のプラグむンがすべおの状況でマりントされるこずを匷制でき、バむナリキヌがないず単玔に想定できる限り、別のプラグむンも機胜したす。 プラグむンがそれでもkeyIsBinaryを呌び出しお゚ラヌをスロヌする必芁がある堎合、この゜リュヌションには䜕のメリットもありたせん。 たた、別のバむナリプラグむンがKeySet党䜓を䞀床に倉換する必芁があるのも奜きではありたせん。これは、すべおのBase64キヌがかなりのメモリを浪費するためです。
  • ディレクトリキヌ最初に、倀を持぀これらの非リヌフキヌは、ほずんどすべおの状況で奇劙であり、実際には避けるこずをお勧めしたす。 3256で述べたように、これらのキヌの凊理に関しおは、ラむブラリがこの堎合にはるかに適しおいるず思いたす。 メモリず凊理のオヌバヌヘッド、マりントポむントの構成ず柔軟性を䞍必芁に耇雑にするなど、倚くの理由がありたす。 @ markus2330 ややはこの点で私に同意しおいるようです。
  • 型ネむティブ型システムを持぀フォヌマットのストレヌゞプラグむンは、型に察しお少なくずもいく぀かの䜜業を行う必芁がありたす。 これは、最初から完党な倉換を行うこずから、ラむブラリを呌び出すこず、別のプラグむンを構成するこずたで倚岐にわたりたす。 すべおがうたく機胜するこずは決しお䞍可胜です。 タむプの非垞に詳现な正匏な仕様があり、タむププラグむンを盎接構成する必芁がない堎合でも、ストレヌゞプラグむンは䜕らかの方法でこの仕様を実装する必芁がありたす。

ただし、decimal / double倀がover- / underflow long_long / doubleであるかどうかはチェックされないため、typepluginによっお実行されるず思いたす。

さお、基本的にはチェックにのみ䜿甚したす。

しかし、その堎合、別のプラグむンも解決策ではありたせん

いいえ、残念ながら個別のプラグむンは解決策ではありたせん。 そこで倱敗したした。 珟圚の解決策は、すべおのストレヌゞプラグむンがdoc / tutorials / storage-plugins.mdに基づいおすべおバむナリ凊理を陀くを実装するこずです。

しかし、ナヌザヌはおそらくkdb set / some / key / Mounted / with / tomltrueが機胜するこずを期埅するでしょう。

いいえ、ナヌザヌはそれを期埅するべきではありたせん。 Elektraでは1/0はtrue / falseです。 ストレヌゞプラグむンのみがこれを他の䜕かにマップする可胜性がありたす。

理論的根拠少なくずも仕様レベルでは1/0のみが機胜しおいるため、他の堎所ストレヌゞプラグむンを陀くでtrue / falseを機胜させるこずは混乱を招くだけです。

これは、ストレヌゞプラグむンが、他のプラグむンを䜿甚せずに、ストレヌゞ圢匏がサポヌトするすべおのタむプず関連する倉換を凊理できなければならないこずを瀺しおいたす。

はい私は同意する。

単にコヌドを削陀するこずが正しい解決策だずは思いたせんが、それは公正な点です。

もちろん、「正しい」コヌドを削陀する必芁がありたす。それは、それを実珟したり、゚レクトラの他の郚分に問題を匕き起こしたりするこずなく、期埅を䞎えるコヌドです。 たた、タむププラグむンの䞀郚の機胜は、Elektraの他の郚分ず䞀緒に問題を匕き起こすようです。

少なくずもプラグむンに関しおはそうではありたせん。 コア内では、LOCが少ないほど良いず私は同意したす。 プラグむンの堎合、プラグむンたたはその䞀郚は実隓的なものであるず簡単に蚀えたす。

残念ながら、これはただ*機胜したせん。 人々はプラグむンのステヌタスを正しく刀断したせん。たずえば、最近では、メンテナンスされおおらず、バグが倚いINIプラグむン、さらに悪いこずに、掚奚されおいないレガシヌxmltoolプラグむンが完党に機胜するず考えられおいた3472を参照しおください。

  • 666を䜜り盎しお、マりント䞭に譊告を出力するず、うたくいく可胜性がありたす。

ストレヌゞプラグむンが型倉換、ディレクトリキヌ、およびバむナリデヌタBase64゚ンコヌディングを凊理するこずを芁求しおも、その䜜業は簡単にはなりたせん。

@sanssecours YAMLプラグむンは型倉換をどのように凊理したすか

それは事実䞊間違っおいたす

い぀完了するかを確認したすstuck_out_tongue_winking_eye

぀たり、ラむブラリは、ストレヌゞプラグむンの芳点から芋るず、プラグむンよりもはるかに柔軟です。 少なくずも珟圚のプラグむン構成の可胜性に぀いおは。

誰もそれに぀いお議論したせんでした。 しかし、柔軟性には莫倧な代償が䌎う堎合がありたす。

次のようなこずをするのに実際には䜕の努力もありたせん

base64は、バむナリデヌタを゚ンコヌドする唯䞀の方法ではありたせん。 base64が必芁な暙準の堎合、ハヌドコヌディングできたす。  @sanssecours YAMLの堎合ですか

ただし、TOMLの堎合は、単に「Base64たたは別の適切なASCIIたたはUTF-8゚ンコヌディング」ず衚瀺されるため、他のバむナリプラグむンを䜿甚できたす。 したがっお、ナヌザヌが必芁に応じお他のバむナリプラグむンをマりントできるため、珟圚の゜リュヌションには利点がありたす。

@ bauhaus93 - infos/needs = base64は- infos/needs = binary倉曎する必芁がありたす。

たず、倀を持぀これらの非リヌフキヌは、ほずんどすべおの状況で奇劙であり、実際には避けるこずをお勧めしたす。

倚くの圢匏で非垞に䞀般的です。 たた、仕様を拡匵する堎合倀を持぀キヌからサブキヌを䜜成する堎合に非垞に圹立ちたす。

[ディレクトリキヌ] @ markus2330 ある皋床はこの点で私に同意しおいるようです。

私はストレヌゞプラグむンがそれを凊理する必芁があるこずに同意したすおそらくラむブラリではありたすが、゚スケヌプは機胜せず、正しい゚スケヌプはストレヌゞプラグむンの䞻な仕事の1぀であるため、「directoryvalue」プラグむンではそうではありたせん。

さお、基本的にはチェックにのみ䜿甚したす。

「 tomlプラグむンはtypeプラグむンを䜿甚する」ずいうフレヌズに同意しtoml 。 珟圚のバヌゞョンでは、 typeのみを掚奚しおいたす。

https://github.com/ElektraInitiative/libelektra/blob/c61e388c4aa950cf84aa2f00fba7cdd34a47640e/src/plugins/toml/README.md#L5 -L6

typeがneedsずしお宣蚀されたずしおも、私はそれを「䜿甚䞭」ずは呌びたせん。 tomlは、実際にはtype盎接制埡するこずはできたせん。 そのため、 tomlはtype䟝存しおいるず蚀いたした。 typeが特定の方法で特定のこずを行うこずを期埅しおいたすが、そうでない堎合は䜕もできたせん。

666を䜜り盎しお、マりント䞭に譊告を出力するず、うたくいく可胜性がありたす。

同意したす。 特別な「このマりントポむントが実隓的なプラグむンを䜿甚しおいるこずを認めたす」キヌが蚭定されおいない限り、おそらくすべおのkdbGetでもそうです。

base64は、バむナリデヌタを゚ンコヌドする唯䞀の方法ではありたせん。

これは実際にはbinaryプラグむンの議論です。 プラグむンが䞀床に1぀のキヌを凊理できるむンタヌフェむスが必芁ですが、これにより、メモリをいくらか節玄でき、パフォヌマンスも節玄できる可胜性がありたす。 しかし、それは別の問題です

倚くの圢匏で非垞に䞀般的です。

䟋はありたすか

たた、仕様を拡匵する堎合倀を持぀キヌからサブキヌを䜜成する堎合に非垞に圹立ちたす。

本圓ですが、その堎合は、゚ンドナヌザヌのPOVからの「どちらか䞀方」の゜リュヌションをお勧めしたす。 単䞀の倀で叀いキヌを䜿甚するか、サブキヌで新しいバヌゞョンを䜿甚したす。 そうしないず、蚭定が混乱する可胜性がありたす。

明確にするために、倀を持぀非リヌフキヌは絶察に䜿甚すべきではないず思いたすが、可胜であれば回避する必芁があり、たれにあるずしおも掚奚される゜リュヌションです。

ただし、゚スケヌプが機胜しないため、「directoryvalue」プラグむンでは䜿甚できたせん

3256で、゚スケヌプの問題を解決するためにメタデヌタを䜿甚するこずを提案したした。 たた、゚スケヌプの問題 directoryvalueだけでなくすべおのナヌスケヌスやその他の問題を解決する3223のアむデアもありたす。 非垞に正匏な提案も参照しおください。 私はただこれらの倉曎に非垞に賛成しおいるので、今日たたは明日、その文曞にわかりやすい英語の説明を远加したす。

@sanssecours YAMLプラグむンは型倉換をどのように凊理したすか

YanLRずYAMLCPPは、ブヌル倀にtypeプラグむンを䜿甚したす。 YAML CPPは、バむナリデヌタにbase64プラグむンも䜿甚したす。

base64は、バむナリデヌタを゚ンコヌドする唯䞀の方法ではありたせん。 base64が必芁な暙準の堎合、ハヌドコヌディングできたす。  @sanssecours YAMLの堎合ですか

はい、私が知る限り、YAMLのバむナリデヌタは垞にBase64゚ンコヌディングを䜿甚したす。

[倀のある非リヌフキヌ]䟋はありたすか

XMLおよびほずんどのINI方蚀 [key]が存圚する堎合でもkey=valueを蚱可するため

本圓ですが、その堎合は、゚ンドナヌザヌのPOVからの「どちらか䞀方」の゜リュヌションをお勧めしたす。 単䞀の倀で叀いキヌを䜿甚するか、サブキヌで新しいバヌゞョンを䜿甚したす。 そうしないず、蚭定が混乱する可胜性がありたす。

はい、それは合理的に聞こえたす。 䜕かがセクションであるこずがわかったら、通垞、倀をセクション内のどこかに移動したす。

たずえば、 deluser.confはBACKUP = 0ずBACKUP_TO = "."たす。 セクションを䜿甚するず、ほずんどのアプリケヌションは単にBACKUPではなくBACKUP_ENABLE䜿甚したす。

たた、゚スケヌプの問題 directoryvalueだけでなくすべおのナヌスケヌスやその他の問題を解決する3223のアむデアもありたす。

3223の提案を曎新したした。 理解しやすくなったず思いたすただ非垞に長いです。

https://github.com/kodebach/libelektra/blob/dcec6e865bba32f6d83c40c2f711c2e70dde6d62/doc/proposals/keynames.md

倧きな問題は、誰がこれらすべおを実装するかずいうこずです。 それは珟状からかなり離れおいたす。぀たり、倚くの䜜業です甚語の倉曎だけでも膚倧な量の䜜業です。 実装したい堎合は、提案曞を䜿っおPRを䜜成しおコメントしたす。 それ以倖の堎合は、䞀歩䞋がっお、手の届く範囲で実行可胜な゜リュヌションに぀いお考える必芁がありたす。

ずころで。 提案の最初の郚分は、実際にはキヌ名がどのように機胜するかに぀いおの玠晎らしいチュヌトリアルです。 これをチュヌトリアルずしお持っおいるず玠晎らしいでしょう。 sparkling_heart

倧きな問題は、誰がこれらすべおを実装するかずいうこずです。

それは垞に問題です...

それは珟状からかなり離れおいたす。぀たり、倚くの䜜業です甚語の倉曎だけでも膚倧な量の䜜業です。

甚語の倉曎は間違いなく最倧の郚分であり、特にすべおのドキュメントを倉曎したす。 ただし、これは1人で行う必芁はありたせん。 これらの倉曎は非垞に単玔で、面倒なので、コヌドに関する広範な知識がなくおも、誰でも支揎できたす。 ほずんどの堎合、それはすべおのドキュメントを読み、「ベヌス名」のようなものの出珟を眮き換えるこずを意味したす。

実装したい堎合は、提案曞を䜿っおPRを䜜成しおコメントしたす。 それ以倖の堎合は、䞀歩䞋がっお、手の届く範囲で実行可胜な゜リュヌションに぀いお考える必芁がありたす。

PRを始めたすが、予芋できる範囲で䞀人で終わらせる時間があるかどうかはわかりたせん。
keyBaseName 、 keySetBaseName 、 keyAddBaseNameぞのすべおの呌び出しがkeyLastUnescapedPart 、 keySetLastUnescapedPart / keySetLastLiteralPart眮き換えられたロヌカルブランチがすでにありたすkeyAddUnescapedPart / keyAddLiteralPart 。 最初の提案を曞いた埌、半自動の正芏衚珟眮換を䜿甚しおそれを䜜成したした。

しかし、そのブランチでは、新しい関数は叀い関数に察しお#defineであるため、実際の実装を䜜成しおから、テストずおそらくストレヌゞプラグむンを曎新する必芁がありたす。

私にずっお最倧の問題は、ストレヌゞプラグむンです。 コアずテスト、そしおおそらく1぀のストレヌゞプラグむンの曎新を実装できたす。 しかし、すべおのストレヌゞプラグむンのコヌドを調べお、すべおの圢匏のすべおの耇雑さを理解する必芁がない堎合は、私は奜みたす。

ずころで。 提案の最初の郚分は、実際にはキヌ名がどのように機胜するかに぀いおの玠晎らしいチュヌトリアルです。 これをチュヌトリアルずしお持っおいるず玠晎らしいでしょう。

だから私はこのように曞いたのです。 私の蚈画は、この提案の䞀郚を3447のドキュメントに再利甚するこずでした。 いく぀かの非垞に重芁な郚分たずえば、正芏ず非正芏を省略したため、11で䜿甚するこずはできたせん。

私は率盎に話し、間違った垌望を䞎えないようにする必芁がありたす。LCDprocで芋たように、他の人がタスクを完了するためにゞャンプしおいるこずはありたせん。特に退屈なずきはそうではありたせん。 1぀を陀くすべおのストレヌゞプラグむンを砎棄するPRはマヌゞできたせん。 たた、ストレヌゞプラグむンは、このPRからあたりメリットがありたせん。実際には、珟圚解析できるファむルで突然構文゚ラヌが発生するずいう意味で、「悪化」したす。 これは、それが党䜓的に悪い考えであるこずを意味するものではありたせん。 いく぀かの改良を加えるず、珟状よりも優れおいるかもしれたせんが、珟圚私たちが持っおいる他の倚くの緊急の重芁なオヌプンタスクでこのような倧きなタスクを実行する方法がわかりたせん。

ですから、3447docuに集䞭しお、最終的に2969を完成させ、TOMLプラグむンず1.0に必芁なその他の重芁なトピックを改善しおくださいhttps://github.com/ElektraInitiative/libelektra/milestone/12およびhttps// github.com/ElektraInitiative/libelektra/milestone/14。 これが良さそうになるず、他にどのようなアむデアを実珟できるかがわかりたす。

私にずっお、この議論の結論は、プラグむンアプロヌチが機胜しなかったためバむナリを陀いお、ストレヌゞプラグむンを簡単に䜜成できるようにするラむブラリが確実に必芁であるずいうこずです。 この結論は、ストレヌゞプラグむンのチュヌトリアルにあるはずです。
@ bauhaus93ストレヌゞプラグむンのチュヌトリアルを続行するタスクを実行できたすか これで倚くの掞察が埗られたしたが、tomlプラグむンの゜ヌスコヌドを芋おもわかりたせん。

1぀を陀くすべおのストレヌゞプラグむンを砎棄するPRはマヌゞできたせん。

誰かがそのようなPRをマヌゞするこずを期埅しおいたせんでした...他の人がストレヌゞプラグむンの曎新を手䌝っおくれるずいいず蚀っただけです。 理想的には、プラグむンの元の䜜成者です。 3491以降、より耇雑なストレヌゞプラグむンのいく぀かはずにかく削陀されるため、タスク党䜓が簡単になりたす。

たた、ストレヌゞプラグむンは、このPRからあたりメリットがありたせん。実際には、珟圚解析できるファむルで突然構文゚ラヌが発生するずいう意味で、「悪化」したす。

これは圓おはたらないはずです。 提案の最埌に郚分的な説明さえありたす。 それはに翻蚳するこずができないので、私の知る限り、ストレヌゞ・プラグむンはファむルを拒吊しなければならない堎合、存圚しおはならKeySet 。

唯䞀の䟋倖は、Elektraのキヌ名゚スケヌプされおいるか゚スケヌプされおいないかを盎接䜿甚するフォヌマットです。 これらは、この提案の埌、以前よりも少ないファむルを受け入れる可胜性がありたす。 ただし、これらのファむルの構文は垞にキヌ名の構文に䟝存しおいるため、これは完党に予想されるこずです。

いく぀かの改良を加えるず、珟状よりも優れおいるかもしれたせんが、珟圚私たちが持っおいる他の倚くの緊急の重芁なオヌプンタスクでこのような倧きなタスクを実行する方法がわかりたせん。

この提案がすぐに採甚されるずは思っおもみたせんでした。 しかし、1.0より前に実装するこずを確実に怜蚎する必芁があるず思いたす。 1.0がリリヌスされるず、提案は倧きな倧きな倉化になりたす。 Elektraの察象読者を考えるず、1.0から1幎たたは2幎埌でもバヌゞョン2.0をリリヌスするこずはそれより前に気にしないでください良い考えではないず思いたす。

ですから、3447docuに集䞭しお、最終的に2969を完成させ、TOMLプラグむンや1.0に必芁なその他の重芁なトピックを改善しおください。

党くもっお同じ意芋です。 しかし、繰り返しになりたすが、1.0がリリヌスされた埌、重倧な倉曎を远加するこずはかなりの期間非垞に困難になるため、それを考慮する必芁がありたす。

私にずっお、この議論の結論は、ストレヌゞプラグむンを簡単に䜜成できるようにするためのラむブラリが確実に必芁であるずいうこずです。

👍

バむナリを陀いお芋られる

IMO、バむナリ倀の堎合は倧きく異なりたす。 これは、他の倚くの rgbcolor 、 macaddr 、 ipaddrなどず同様に、11のキヌ倀倉換であるため、プラグむンは実際にはここに適しおいたす。 ただし、前述したように、䞀床に1぀のキヌのみを凊理する新しいプラグむンAPIは改善される可胜性がありたす。 ただし、正しく実行すれば重倧な倉曎にはならないため、1.0以降は簡単に远加できたす。

ほずんど->しなければなりたせんか

はい、私はそれを同じように芋おいたす1.0がリリヌスされた埌にこの倉曎が行われるこずは非珟実的であり1.0の党䜓的な目的は、他の人がそれに頌るこずができるようにそのような決定を凍結するこずです、前にそのような改善があるずいいでしょう。 しかし、蚀ったように、私たちは本圓に重芁なこずを成し遂げるこずに集䞭する必芁があり、珟圚の人力では勝おない玠敵な戊いで゚ネルギヌを倱わないようにする必芁がありたす。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡

関連する問題

dmoisej picture dmoisej  Â·  3コメント

mpranj picture mpranj  Â·  3コメント

markus2330 picture markus2330  Â·  4コメント

mpranj picture mpranj  Â·  3コメント

markus2330 picture markus2330  Â·  3コメント