Replies: 4 comments 4 replies
-
Having it be
|
Beta Was this translation helpful? Give feedback.
-
I voted for words: std::vector<std::string> = ("Adam", "Betty");
// for enumerate(words) do ([i, word]) { // some destructuring syntax maybe?
// for words | std::views::enumerate do (entry) { // pipe operator instead
for std::views::enumerate(words) do (entry) {
i := std::get<0>(entry);
word := std::get<1>(entry);
std::cout << i << ": " << word << "\n";
} Not to say that there aren't other cases where |
Beta Was this translation helpful? Give feedback.
-
Yeah, I like the destructuring syntax you suggested. I've been playing around with converting example code from cppreference into Cpp2, and here's another case I came across where the Cpp2 translation of std::condition_variable example from cppreference#include <thread> // Not sure yet why this is needed in my Godbolt setup
m: std::mutex = ();
cv: std::condition_variable = ();
data: std::string = ();
ready: bool = false;
processed : bool = false;
worker: () = {
(copy lk: std::unique_lock = (m))
{
cv.wait(lk, :() -> bool = ready);
std::cout << "Worker is processing data\n";
data += " after processing";
processed = true;
std::cout << "Worker thread signals data processing completed\n";
_ = lk.mutex(); // Workaround for UFCS and last-use std::move bug
}
cv.notify_one();
}
main: () -> int = {
worker_thd: std::thread = (worker);
data = "Example data";
(copy _: std::lock_guard = (m))
{
ready = true;
std::cout << "main() signals data ready for processing\n";
}
cv.notify_one();
(copy lk: std::unique_lock = (m))
{
cv.wait(lk, :() -> bool = processed);
_ = lk.mutex(); // Workaround for UFCS and last-use std::move bug
}
std::cout << "Back in main(), data = " << data << '\n';
worker_thd.join();
_ = m.native_handle(); // Workaround for UFCS and last-use std::move bug
_ = cv.native_handle(); // Workaround for UFCS and last-use std::move bug
return 0;
} The relevant parts look like this: // m: std::mutex = ();
// cv: std::condition_variable = ();
(copy lk: std::unique_lock = (m))
{
cv.wait(lk, :() -> bool = some_condition);
} |
Beta Was this translation helpful? Give feedback.
-
Thanks, everyone! I'll close this as "status quo" for now, and we can always reopen it again in the future if we get new information. |
Beta Was this translation helpful? Give feedback.
-
[edited to add Case 4]
This poll arises from #1000, and concerns statement scope parameters, such as a
counter
for a loop or :The question is, should the default
/*...*/
parameter passing qualifier bein
orcopy
?If
in
(the current status quo):in val
would be the default)inout val
copy counter
copy val
and is not consistent with a local variableval := value;
which meanscopy
If
copy
(as it has been in the past before this commit):in val
inout val
copy counter
would be the default)copy val
would be the default) and is consistent with a local variableval := value
which meanscopy
16 votes ·
Beta Was this translation helpful? Give feedback.
All reactions