Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/neetjn/v-beers
My first v project to learn about the language and package structure.
https://github.com/neetjn/v-beers
journal practice starter v vlang
Last synced: 22 days ago
JSON representation
My first v project to learn about the language and package structure.
- Host: GitHub
- URL: https://github.com/neetjn/v-beers
- Owner: neetjn
- License: mit
- Created: 2019-10-31T17:00:11.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2019-12-21T23:41:24.000Z (about 5 years ago)
- Last Synced: 2024-10-28T16:54:02.409Z (2 months ago)
- Topics: journal, practice, starter, v, vlang
- Language: V
- Size: 277 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# v-beers
This project was created to learn V lang basics, as well as common use cases similar to other languages I use regularly. I'll be recording my experiments and what I've learned while treking through V.
# Practices
* :star: [http.v](https://github.com/neetjn/v-beers/blob/master/practice/http.v) - HTTP client for SWAPI (star wars api).
* :star: [error.v](https://github.com/neetjn/v-beers/blob/master/practice/error.v) - Error handling practice, includes a couple of other concepts.
* [structs.v](https://github.com/neetjn/v-beers/blob/master/practice/structs.v) - Simple structs exercise, includes JSON encoding/decoding.
* [io.v](https://github.com/neetjn/v-beers/blob/master/practice/io.v) - Simple exercises for creating and deleting files + directories, and reading environmental variables.
* [maps.v](https://github.com/neetjn/v-beers/blob/master/practice/maps.v) - Simple exercises for maps.
* [array.v](https://github.com/neetjn/v-beers/blob/master/practice/array.v) - Simple exercises for arrays.
* [num.v](https://github.com/neetjn/v-beers/blob/master/practice/num.v) - Simple arithmetic using vlang, solving a euler problem.
* [string.v](https://github.com/neetjn/v-beers/blob/master/practice/string.v) - Simple exercises for strings.# Experiments
> Could not complete, many documented features and modules in the standard library are currently unavailable (2/21/19).
* [ ] Create a locale package, module, or library and utilize.
* [ ] Leverage vpm package manager for 3rd party packages.
* [X] Read from environmental variables.
* [X] Read from a file in a local directory.
* [x] Create a basic DTO (data transfer object).
* [x] Marshal and unmarshal DTO to string and V struct.
* [ ] Expose REST endpoints for experiment application.
* [ ] Create a service description for my RESt endpoints, following the HATEOAS model.
* [ ] Handle multiple different HTTP verbs.
* [ ] Dockerize application (include 3rd party packages).
* [ ] Create unit tests and execute on a CI/CD platform.
* [ ] Connect to a relational database (Postgres).# What I've Learned
* V has very specific use cases, it's not a widely adopted language.
* V is a very new language, new features are being implemented every week.
* Equality checks for Arrays are still not yet implemented (as of 12/8/19).
* Maps only currently support string keys.
* V's compiler is incredibly fast, and can be used for prototyping or proof of concept. However the language essentially transpiles down into c, and gcc should be used in production.
* It's similar to Go and is also influenced by Oberon, Rust, Swift.
* V is a compiled language, that compiles down into byte code so it can run on any machine.
* Not garbage collected, similar to Rust memory must be managed at compile time.
* Fast, can compile around 1.2 million lines of code per second per CPU core (of an i5-7500).
* API is not yet that robust, certainly still in it's infancy stages. (using V for everyday tasks may not be viable)
* V is type a statically typed, type strict language.
* Types are inferred upon instantiation.
* Variables of a given type cannot be set to a different variable type once intantiated.
* Arrays and sets are also type strict.
* Unfortunately, maps are restricted to a single node type they're inferred by.
* Variables are immutable by default, once inferred they cannot be modified.
* Mutable variables must be denoted by the keyword `mut`.
* V does not support interfaces like Go, but provides implict structures.
* The language ships with it's own linter similar to prettier (see build steps), as well as unit testing utilities.
* Documentation for v is very lacking, not many resources are available (as of 12/12/19).
* ~~None of the standard library is covered explicitly in the official docs.~~
* The standard library is covered [here](https://vlang.io/modules) but does not include db related modules.
* I've had to read the std lib modules to learn what's possible, which is rather inconvenient considering I'm learning the language.
* V ships with it's own ORM for Postgres in the standard library, with plans to support SQLite and MySQL in the future.
* Re: [v-lang orm](https://vlang.io/docs#orm)
* Because v is preprocessed into c at compile time, interop with C is incredibly easy and seamless.# Closing Thoughts
* V is an incredibly immature programming language with some boastful capability and performance benchmarks to boot.
* A market for v developers does not exist, as it stands the language may never reach maturity.
* Support was high when the language was announced, but the language's author has failed to hit his promised performance targets multiple times.
* Even in it's infancy, v can be a very productive language. However, at the time of writing this (12/21/19) many modules in the std aren't available or were misdocumented in the official documentation. This is understandable for such a new language, but I wouldn't personally use V until it's been proofed for production.
* Ecosystem is manageable. The official package manager is baked in with the `v` binary, it's fairly simple to use but is missing some pretty big features that tend to be expected in modern package managers (package config, lock files, versioning).# Resources
v-lang - https://vlang.io/docs
---
Copyright (c) 2019 John Nolette Licensed under the MIT License.