Updated V for CPP developers (markdown)

Turiiya 2024-04-10 02:40:53 +02:00
parent 5d05aa1d42
commit a08193931e

@ -2,234 +2,265 @@
<tr><td colspan="2" align="center">Hello World</td></tr> <tr><td colspan="2" align="center">Hello World</td></tr>
<tr> <tr>
<td> <td>
<pre class="highlight highlight-source-v">
#include &lt;iostream> ```cpp
#include <iostream>
int main() { int main() {
std::cout &lt;&lt; "Hello World!" &lt;&lt; "\n"; std::cout < "Hello World!" < "\n";
} }
</pre> ```
</td> </td>
<td valign="top"> <td valign="top">
<pre>
```v
fn main() { fn main() {
println('Hello World!') println('Hello World!')
} }
</pre> ```
</td> </td>
</tr> </tr>
<tr><td colspan="2" align="center">Vector initialization</td></tr> <tr><td colspan="2" align="center">Vector initialization</td></tr>
<tr> <tr>
<td> <td>
<pre>
std::vector&lt;int> numbers = {1, 2, 3, 4}; ```cpp
</pre> std::vector<int> numbers = {1, 2, 3, 4};
```
</td> </td>
<td valign="top"> <td valign="top">
<pre>
```v
numbers := [1, 2, 3, 4] numbers := [1, 2, 3, 4]
</pre> ```
</td> </td>
</tr> </tr>
<tr><td colspan="2" align="center">Add an element to a vector</td></tr> <tr><td colspan="2" align="center">Add an element to a vector</td></tr>
<tr> <tr>
<td> <td>
<pre>
```cpp
numbers.push_back(5); numbers.push_back(5);
</pre> ```
</td> </td>
<td valign="top"> <td valign="top">
<pre>
numbers &lt;&lt; 5 ```v
</pre> numbers < 5
```
</td> </td>
</tr> </tr>
<tr><td colspan="2" align="center">Printing a vector</td></tr> <tr><td colspan="2" align="center">Printing a vector</td></tr>
<tr> <tr>
<td> <td>
<pre>
```cpp
std::copy(numbers.begin(), numbers.end(), std::copy(numbers.begin(), numbers.end(),
std::ostream_iterator<int>(std::cout, " ")); std::ostream_iterator<int>(std::cout, " "));
std::cout &lt;&lt; '\n'; std::cout < '\n';
</pre> ```
</td> </td>
<td valign="top"> <td valign="top">
<pre>
```v
println(numbers) println(numbers)
</pre> ```
</td> </td>
</tr> </tr>
<tr><td colspan="2" align="center">Filtering a vector</td></tr> <tr><td colspan="2" align="center">Filtering a vector</td></tr>
<tr> <tr>
<td> <td>
<pre>
std::copy_if(numbers.begin(), numbers.end(),
std::back_inserter(bar),
[](int i){ return i % 2 == 0; });
</pre> ```cpp
std::copy_if(numbers.begin(), numbers.end(),
std::back_inserter(bar),
[](int i){ return i % 2 == 0; });
```
</td> </td>
<td valign="top"> <td valign="top">
<pre>
```cpp
numbers.filter(it % 2 == 0) numbers.filter(it % 2 == 0)
</pre> ```
</td> </td>
</tr> </tr>
<tr><td colspan="2" align="center">Reading a file</td></tr> <tr><td colspan="2" align="center">Reading a file</td></tr>
<tr> <tr>
<td> <td>
<pre>
#include &lt;iostream> ```cpp
#include &lt;fstream> #include <iostream>
#include <fstream>
std::ifstream f("path"); std::ifstream f("path");
std::string text; std::string text;
text.assign(std::istreambuf_iterator<char>(f), {}); text.assign(std::istreambuf_iterator<char>(f), {});
if (!f) if (!f)
std::cerr &lt;&lt; "error reading from file\n"; std::cerr < "error reading from file\n";
</pre> ```
</td> </td>
<td valign="top"> <td valign="top">
<pre>
```v
import os import os
text := os.read_file(path) or { text := os.read_file(path) or {
eprintln(err) eprintln(err)
} }
</pre> ```
</td> </td>
</tr> </tr>
<tr><td colspan="2" align="center">Monomorphic function</td></tr> <tr><td colspan="2" align="center">Monomorphic function</td></tr>
<tr> <tr>
<td> <td>
<pre>
template &lt;typename T&gt; ```cpp
template <typename T>
auto simple_fn(T param) { auto simple_fn(T param) {
return param; return param;
} }
auto value = simple_fn&lt;int&gt;(1); auto value = simple_fn<int>1);
</pre> ```
</td> </td>
<td valign="top"> <td valign="top">
<pre>
fn simple_fn&lt;T&gt;(param T) T { ```v
return param fn simple_fn[T](param T) T {
return param
} }
value := simple_fn(1) value := simple_fn(1)
</pre>
```
</td> </td>
</tr> </tr>
<tr><td colspan="2" align="center">Monomorphic struct</td></tr> <tr><td colspan="2" align="center">Monomorphic struct</td></tr>
<tr> <tr>
<td> <td>
<pre>
template &lt;typename T&gt; ```cpp
template <typename T>
struct generic_struct { struct generic_struct {
T value; T value;
void generic_method(); void generic_method();
}; };
template &lt;typename T&gt; template <typename T>
generic_struct&lt;T&gt;::generic_method() { generic_struct<T>:generic_method() {
return; return;
} }
</pre>
```
</td> </td>
<td valign="top"> <td valign="top">
<pre>
struct GenericStruct&lt;T&gt; { ```v
value T struct GenericStruct[T] {
value T
} }
fn (g GenericStruct[T]) generic_method() {
fn (g GenericStruct&lt;T&gt;) generic_method() { return
return
} }
</pre> ```
</td> </td>
</tr> </tr>
<tr><td colspan="2" align="center">Type reflection</td></tr> <tr><td colspan="2" align="center">Type reflection</td></tr>
<tr> <tr>
<td> <td>
<pre>
#include &lt;iostream&gt; ```cpp
#include <iostream>
using Number = int; using Number = int;
template &lt;typename T&gt; template <typename T>
consteval bool is_number(T data) { consteval bool is_number(T data) {
if constexpr (std::is_same&lt;T, Number&gt;()) { if constexpr (std::is_same<T, Number>()) {
return true; return true;
} else { } else {
return false; return false;
} }
} }
std::cout << is_number&lt;Number&gt;(0) << "\n"; std::cout << is_number<Number>(0) << "\n";
</pre> ```
</td> </td>
<td valign="top"> <td valign="top">
<pre>
```v
type Number = int type Number = int
fn is_number&lt;T&gt;(data T) bool { fn is_number[T](data T) bool {
&#36;if T is Number { &#36;if T is Number {
return true return true
} &#36;else { } &#36;else {
return false return false
} }
} }
println(is_number(Number(0))) println(is_number(Number(0)))
</pre>
```
</td> </td>
</tr> </tr>
<tr><td colspan="2" align="center">Standard map</td></tr> <tr><td colspan="2" align="center">Standard map</td></tr>
<tr> <tr>
<td> <td>
<pre>
#include &lt;iostream&gt; ```cpp
#include &lt;map&gt; #include <iostream>
#include <map>
std::map<std::string, int> my_map { std::map<std::string, int> my_map {
{"KEY_1", 0}, {"KEY_1", 0},
{"KEY_2", 10}, {"KEY_2", 10},
}; };
for (const auto &[key, value] : my_map) { for (const auto &[key, value] : my_map) {
std::cout << key << ": " << value << ", "; std::cout << key << ": " << value << ", ";
} }
std::cout << "\n"; std::cout << "\n";
</pre> ```
</td> </td>
<td valign="top"> <td valign="top">
<pre>
```v
my_map := map { my_map := map {
'KEY_1': 0 'KEY_1': 0
'KEY_2': 10 'KEY_2': 10
} }
println(my_map) println(my_map)
</pre> ```
</td> </td>
</tr> </tr>
</table> </table>