Hello, are there any update on this? Thanks!

On Tuesday, January 25, 2022 at 11:17:48 PM UTC+1 Mike Kruskal wrote:

> We have no plans set to support arena-based strings yet.  This would be 
> blocked on finishing the migration to string_view accessors, but *that* is 
> planned for 2022.
>
> On Tuesday, January 18, 2022 at 7:12:16 PM UTC-8 [email protected] 
> wrote:
>
>> Hi, I have a question. When arena-based strings are expected to be 
>> released ? 
>> On Wednesday, September 9, 2020 at 6:17:26 AM UTC+8 [email protected] 
>> wrote:
>>
>>> Our StringPiece type has been made obsolete by the std::string_view type 
>>> introduced in C++17, so we will eventually get rid of StringPiece and 
>>> replace it with std::string_view (or absl::string_view, which has the same 
>>> API but is available in C++11). So if you are making a local modification 
>>> to support allocating strings on arenas, it would probably be best to go 
>>> straight to std::string_view and avoid our StringPiece type. To handle both 
>>> the arena and non-arena case, the simplest solution would be to store both 
>>> a std::string_view and a std::string. When arenas are used, you can have 
>>> the string_view point into arena-allocated memory, and when arenas are not 
>>> used, it can just point to the std::string's data.
>>>
>>> On Thu, Sep 3, 2020 at 3:19 AM X Ah <[email protected]> wrote:
>>>
>>>> Hi Feng,
>>>> I have an API design problem, Since StringPiece doesn't own the data 
>>>> and it's impossible to get memory from it, So how should the behavior be 
>>>> if 
>>>> I do ParseFromString and the message is not in arena? I think the 
>>>> StringPiece field should be empty if current message doesn't own an arena, 
>>>> but it is strange for user. Could you introduce how Google internal use 
>>>> StringPiece in protobuf?
>>>> Thanks!
>>>> On Saturday, January 16, 2016 at 3:32:39 AM UTC+8 [email protected] 
>>>> wrote:
>>>>
>>>>> On Thu, Jan 14, 2016 at 6:06 PM, Austin Schuh <[email protected]
>>>>> > wrote:
>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> I've got an application where I can't allocate memory while using 
>>>>>> protobufs.  Arenas have been awesome for doing that.  I'm able to 
>>>>>> allocate 
>>>>>> a big block of memory at startup time or stack allocate memory for the 
>>>>>> arena, and then use that for allocating protobufs.  Thanks!
>>>>>>
>>>>>> I'd like to be able to allocate strings in the arena.  I'm willing to 
>>>>>> do the implementation, and wouldn't mind up-streaming if my 
>>>>>> implementation 
>>>>>> is complete enough and there is interest.  It looks like I should start 
>>>>>> by 
>>>>>> implementing ctype=STRING_PIECE and then allocate memory in the arena to 
>>>>>> back it.  The class in //src/google/protobuf:arenastring.h looks like 
>>>>>> the 
>>>>>> place to do all the operations.  It looks like I need to modify the 
>>>>>> interface to provide setters and getters to support STRING_PIECE there.
>>>>>>
>>>>>> Is that the right place to start?  Is there any more guidance that 
>>>>>> you can give me?
>>>>>>
>>>>> Hi Austin,
>>>>>
>>>>> Thanks for contacting us and offering help!
>>>>>
>>>>> You are looking at the right direction. We actually already 
>>>>> opensourced the StringPiece implementation not very long ago:
>>>>>
>>>>> https://github.com/google/protobuf/blob/master/src/google/protobuf/stubs/stringpiece.h
>>>>>
>>>>> It's intended to be used to implement "ctype = STRING_PIECE" for 
>>>>> string fields and since it's merely a <const char*, size_t> pair, it can 
>>>>> be 
>>>>> directed at the buffer in the arena. Such features are implemented inside 
>>>>> Google but unfortunately it's not opensourced due to dependency issues. 
>>>>> We 
>>>>> plan to get them out eventually but hasn't have enough time to work on 
>>>>> it. 
>>>>> Since we already have an internal version of it, we probably won't be 
>>>>> able 
>>>>> to accept your contributions. I can't give a concrete timeline about when 
>>>>> we will get our implementation opensourced also. Sorry for that...
>>>>>
>>>>> If you need this soon, I suggest you try to implement it as simple as 
>>>>> possible. Better to only support lite runtime with arena enabled. Some 
>>>>> changes you want to make:
>>>>> 1. Make ArenaStringPtr work with StringPiece, or introduce an 
>>>>> ArenaStringPiecePtr which might be easier to implement.
>>>>> 2. Update protocol compiler to use ArenaStringPtr/ArenaStringPiecePtr 
>>>>> to store ctype=STRING_PIECE fields and expose a StringPiece API:
>>>>> // proto
>>>>> message Foo {
>>>>>   string bar = 1 [ctype = STRING_PIECE];
>>>>> }
>>>>> // generated C++ code
>>>>> message Foo {
>>>>>  public:
>>>>>   StringPiece bar() const;
>>>>>   void set_bar(StringPiece value);  // Note that we need to do a deep 
>>>>> copy here because StringPiece  doesn't own the underlying data.
>>>>>   void set_alias_bar(StringPiece value);  // Make the field point to 
>>>>> the StringPiece data directly. Caller must make sure the underlying data 
>>>>> outlives the Foo message.
>>>>>
>>>>>  private:
>>>>>   ArenaStringPiecePtr bar_;
>>>>> };
>>>>>
>>>>> Look at the string_field.cc implementation in the compiler directory 
>>>>> <https://github.com/google/protobuf/blob/master/src/google/protobuf/compiler/cpp/cpp_string_field.cc>
>>>>>  
>>>>> and you can create a string_piece_field.cc implementation based on that. 
>>>>> Most of the work will be done here, including not only the generated API 
>>>>> but also all the parsing/serialization/copy/constructor/destructor 
>>>>> support.
>>>>>
>>>>> That's pretty all that needed to support StringPiece in lite-runtime + 
>>>>> arena. A lot more work will be needed to support other combinations 
>>>>> (lite-runtime + no arena, full-runtime + arena, full-runtime + 
>>>>> non-arena), 
>>>>> but since you have a specific targeted platform and we will opensource 
>>>>> the 
>>>>> StringPiece support eventually, it's probably not worthwhile to invest 
>>>>> time 
>>>>> to support anything you don't actually need right now.
>>>>>
>>>>> Hope this helps.
>>>>>
>>>>> Regards,
>>>>> Feng 
>>>>>
>>>>>
>>>>>> Thanks,
>>>>>>   Austin
>>>>>>
>>>>>> -- 
>>>>>> You received this message because you are subscribed to the Google 
>>>>>> Groups "Protocol Buffers" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it, 
>>>>>> send an email to [email protected].
>>>>>> To post to this group, send email to [email protected].
>>>>>> Visit this group at https://groups.google.com/group/protobuf.
>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>
>>>>>
>>>>> -- 
>>>> You received this message because you are subscribed to the Google 
>>>> Groups "Protocol Buffers" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>> an email to [email protected].
>>>>
>>> To view this discussion on the web visit 
>>>> https://groups.google.com/d/msgid/protobuf/ccc70ecc-873a-4297-8102-8e2319ffd760n%40googlegroups.com
>>>>  
>>>> <https://groups.google.com/d/msgid/protobuf/ccc70ecc-873a-4297-8102-8e2319ffd760n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>>

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/protobuf/e517c272-340a-4f84-8500-76133a239089n%40googlegroups.com.

Reply via email to