digitalmars.D.learn - C++ std::string_view equivalent in D?
- 0xFFFFFFFF (5/5) Feb 21 2018 What is the equivalent of C++17 std::string_view (an object that
- Smaehtin (3/9) Feb 21 2018 Perhaps you are looking for slices:
- rikki cattermole (8/14) Feb 21 2018 Think of string_view as a poor man's slice support.
- Kagamin (4/10) Feb 21 2018 Strings were always slices in D even in version 1.0, what's
- Jonathan M Davis (20/25) Feb 21 2018 strings in D are that way by their very nature, because they're dynamic
- 0xFFFFFFFF (12/18) Feb 21 2018 Wow! Thanks guys.
- rikki cattermole (4/18) Feb 21 2018 string sv = "some string";
- 0xFFFFFFFF (5/25) Feb 21 2018 Thanks, it took time before I updated my reply to prevous answers.
- Jonathan M Davis (10/29) Feb 21 2018 As I said in my previous response, read this article:
- 0xFFFFFFFF (5/9) Feb 21 2018 Sorry, I didn't see this before I replied.
- ketmar (14/30) Feb 21 2018 and that is exactly what slices are for! ;-)
- 0xFFFFFFFF (3/19) Feb 21 2018 Gotta save this too.
- rikki cattermole (4/31) Feb 21 2018 +X (typically just 1) means that you agree.
- Kagamin (2/4) Feb 21 2018 👍
- 0xFFFFFFFF (3/9) Feb 21 2018 Thanks guys @all. I completed the task.
- rikki cattermole (3/14) Feb 21 2018 Hop on to IRC (FreeNode #d) or Discord https://discord.gg/sVMHUD (invite...
What is the equivalent of C++17 std::string_view (an object that can refer to a constant contiguous sequence of char-like objects with the first element of the sequence at position zero) in D? PS: I'm getting back to D after years (since DMD 1 days). A lot changes since v1.0.
Feb 21 2018
On Wednesday, 21 February 2018 at 09:21:58 UTC, 0xFFFFFFFF wrote:What is the equivalent of C++17 std::string_view (an object that can refer to a constant contiguous sequence of char-like objects with the first element of the sequence at position zero) in D? PS: I'm getting back to D after years (since DMD 1 days). A lot changes since v1.0.Perhaps you are looking for slices: https://dlang.org/spec/arrays.html#slicing?
Feb 21 2018
On 21/02/2018 9:21 AM, 0xFFFFFFFF wrote:What is the equivalent of C++17 std::string_view (an object that can refer to a constant contiguous sequence of char-like objects with the first element of the sequence at position zero) in D? PS: I'm getting back to D after years (since DMD 1 days). A lot changes since v1.0.Think of string_view as a poor man's slice support. Slices are essentially just dynamic arrays, a length and a pointer. char* ptr = cast(char*)malloc(32); char[] array = ptr[0 .. 32]; char[] anotherArray = array[16 .. $]; assert(anotherArray.length == 16); It isn't limited to just char's either :)
Feb 21 2018
On Wednesday, 21 February 2018 at 09:21:58 UTC, 0xFFFFFFFF wrote:What is the equivalent of C++17 std::string_view (an object that can refer to a constant contiguous sequence of char-like objects with the first element of the sequence at position zero) in D? PS: I'm getting back to D after years (since DMD 1 days). A lot changes since v1.0.Strings were always slices in D even in version 1.0, what's changed is that string data is immutable now - guaranteed to not change.
Feb 21 2018
On Wednesday, February 21, 2018 09:21:58 0xFFFFFFFF via Digitalmars-d-learn wrote:What is the equivalent of C++17 std::string_view (an object that can refer to a constant contiguous sequence of char-like objects with the first element of the sequence at position zero) in D? PS: I'm getting back to D after years (since DMD 1 days). A lot changes since v1.0.strings in D are that way by their very nature, because they're dynamic arrays, and in D, dynamic arrays are just poiner and a length. Effectively, a dynamic array is struct DynamicArray(T) { size_t length; T* ptr; } They're slices of some piece of memory - usually GC-allocated memory, though you can slice any memory and get a dynamic array out of it. I'd suggest reading this article: https://dlang.org/articles/d-array-article.html It does not use the official terminology, because it refers to the GC-managed buffer as the dynamic array rather than the T[] as being the dynamic array (whereas the official terminology is that T[] is a dynamic array, regardless of what memory it's a slice of), but otherwise, what it says is quite good and should give you a solid idea of how arrays work in D. - Jonathan M Davis
Feb 21 2018
On Wednesday, 21 February 2018 at 09:21:58 UTC, 0xFFFFFFFF wrote:What is the equivalent of C++17 std::string_view (an object that can refer to a constant contiguous sequence of char-like objects with the first element of the sequence at position zero) in D? PS: I'm getting back to D after years (since DMD 1 days). A lot changes since v1.0.Wow! Thanks guys. Those are handy, but I specifically want to do something like: ``` string_view sv = "some string"; ``` So I can query it's size, make it point to sth else, use it in callbacks etc. Of course I'm aware of scoping etc... I'm NOT doing any dynamic allocations, I just want a situation where a string allocation string would be a little bit expensive. [I believe I still have to study D more in that case to come up with sth better, enjoying my ride so far]
Feb 21 2018
On 21/02/2018 10:17 AM, 0xFFFFFFFF wrote:On Wednesday, 21 February 2018 at 09:21:58 UTC, 0xFFFFFFFF wrote:string sv = "some string"; assert(sv.length == 11); Or just "some string".length ;)What is the equivalent of C++17 std::string_view (an object that can refer to a constant contiguous sequence of char-like objects with the first element of the sequence at position zero) in D? PS: I'm getting back to D after years (since DMD 1 days). A lot changes since v1.0.Wow! Thanks guys. Those are handy, but I specifically want to do something like: ``` string_view sv = "some string"; ```
Feb 21 2018
On Wednesday, 21 February 2018 at 10:22:56 UTC, rikki cattermole wrote:On 21/02/2018 10:17 AM, 0xFFFFFFFF wrote:Thanks, it took time before I updated my reply to prevous answers. I didn't see these before I did. [I'm not that dumb] :winks:On Wednesday, 21 February 2018 at 09:21:58 UTC, 0xFFFFFFFF wrote:string sv = "some string"; assert(sv.length == 11); Or just "some string".length ;)What is the equivalent of C++17 std::string_view (an object that can refer to a constant contiguous sequence of char-like objects with the first element of the sequence at position zero) in D? PS: I'm getting back to D after years (since DMD 1 days). A lot changes since v1.0.Wow! Thanks guys. Those are handy, but I specifically want to do something like: ``` string_view sv = "some string"; ```
Feb 21 2018
On Wednesday, February 21, 2018 10:17:55 0xFFFFFFFF via Digitalmars-d-learn wrote:On Wednesday, 21 February 2018 at 09:21:58 UTC, 0xFFFFFFFF wrote:As I said in my previous response, read this article: https://dlang.org/articles/d-array-article.html You clearly do not understand at all how strings work in D. Strings in D basically _are_ string_views where most strings have the actual memory buffer managed by the GC. If you do string sv = "some string"; then _zero_ heap allocations take place. - Jonathan M DavisWhat is the equivalent of C++17 std::string_view (an object that can refer to a constant contiguous sequence of char-like objects with the first element of the sequence at position zero) in D? PS: I'm getting back to D after years (since DMD 1 days). A lot changes since v1.0.Wow! Thanks guys. Those are handy, but I specifically want to do something like: ``` string_view sv = "some string"; ``` So I can query it's size, make it point to sth else, use it in callbacks etc. Of course I'm aware of scoping etc... I'm NOT doing any dynamic allocations, I just want a situation where a string allocation string would be a little bit expensive. [I believe I still have to study D more in that case to come up with sth better, enjoying my ride so far]
Feb 21 2018
On Wednesday, 21 February 2018 at 10:23:23 UTC, Jonathan M Davis wrote:As I said in my previous response, read this article: https://dlang.org/articles/d-array-article.htmlSorry, I didn't see this before I replied. Had I, I wouldn't have done that.string sv = "some string"; then _zero_ heap allocations take place.I think u've answered my question.
Feb 21 2018
0xFFFFFFFF wrote:On Wednesday, 21 February 2018 at 09:21:58 UTC, 0xFFFFFFFF wrote:and that is exactly what slices are for! ;-) you are probably better to use `const(char)[]`, tho. like this: // don't store `s`, as it's contents may change after exiting of `myfunc` // (this is what `const` implies here) void myfunc (const(char)[] s) { ... } ... string s = "test string"; myfunc(s); // yep, this works s = s[2..4]; // this doesn't allocate myfunc(s); myfunc(s[3..6]); // or this, it doesn't allocate myfunc("abc"); // or this, doesn't allocate you got the idea.What is the equivalent of C++17 std::string_view (an object that can refer to a constant contiguous sequence of char-like objects with the first element of the sequence at position zero) in D? PS: I'm getting back to D after years (since DMD 1 days). A lot changes since v1.0.Wow! Thanks guys. Those are handy, but I specifically want to do something like: ``` string_view sv = "some string"; ``` So I can query it's size, make it point to sth else, use it in callbacks etc. Of course I'm aware of scoping etc... I'm NOT doing any dynamic allocations, I just want a situation where a string allocation string would be a little bit expensive.
Feb 21 2018
On Wednesday, 21 February 2018 at 10:24:39 UTC, ketmar wrote:0xFFFFFFFF wrote:Gotta save this too. [BTW how do I post a thumbs up emoji][...]and that is exactly what slices are for! ;-) you are probably better to use `const(char)[]`, tho. like this: // don't store `s`, as it's contents may change after exiting of `myfunc` // (this is what `const` implies here) void myfunc (const(char)[] s) { ... } ... string s = "test string"; myfunc(s); // yep, this works s = s[2..4]; // this doesn't allocate myfunc(s); myfunc(s[3..6]); // or this, it doesn't allocate myfunc("abc"); // or this, doesn't allocate you got the idea.
Feb 21 2018
On 21/02/2018 10:43 AM, 0xFFFFFFFF wrote:On Wednesday, 21 February 2018 at 10:24:39 UTC, ketmar wrote:+X (typically just 1) means that you agree. But here we just say "thanks". This "forum" is backed by an NNTP server, so lots of the more newer concepts don't exist here.0xFFFFFFFF wrote:Gotta save this too. [BTW how do I post a thumbs up emoji][...]and that is exactly what slices are for! ;-) you are probably better to use `const(char)[]`, tho. like this: // don't store `s`, as it's contents may change after exiting of `myfunc` // (this is what `const` implies here) void myfunc (const(char)[] s) { ... } ... string s = "test string"; myfunc(s); // yep, this works s = s[2..4]; // this doesn't allocate myfunc(s); myfunc(s[3..6]); // or this, it doesn't allocate myfunc("abc"); // or this, doesn't allocate you got the idea.
Feb 21 2018
On Wednesday, 21 February 2018 at 10:43:14 UTC, 0xFFFFFFFF wrote:Gotta save this too. [BTW how do I post a thumbs up emoji]👍
Feb 21 2018
On Wednesday, 21 February 2018 at 09:21:58 UTC, 0xFFFFFFFF wrote:What is the equivalent of C++17 std::string_view (an object that can refer to a constant contiguous sequence of char-like objects with the first element of the sequence at position zero) in D? PS: I'm getting back to D after years (since DMD 1 days). A lot changes since v1.0.Thanks guys all. I completed the task. Glad to know there are lots people helping out here.
Feb 21 2018
On 21/02/2018 10:41 AM, 0xFFFFFFFF wrote:On Wednesday, 21 February 2018 at 09:21:58 UTC, 0xFFFFFFFF wrote:Hop on to IRC (FreeNode #d) or Discord https://discord.gg/sVMHUD (invite expires in a day) if you'd like a more interactive conversation :)What is the equivalent of C++17 std::string_view (an object that can refer to a constant contiguous sequence of char-like objects with the first element of the sequence at position zero) in D? PS: I'm getting back to D after years (since DMD 1 days). A lot changes since v1.0.Thanks guys all. I completed the task. Glad to know there are lots people helping out here.
Feb 21 2018