1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

docs: enhance the .vsh section, as well as the description of the V's script mode (no fn main(){}) (#15788)

This commit is contained in:
Delyan Angelov 2022-09-17 00:21:31 +03:00 committed by GitHub
parent 289f8f2f24
commit fda39bfb82
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -181,6 +181,11 @@ This means that a "hello world" program in V is as simple as
println('hello world') println('hello world')
``` ```
Note: if you do not use explicitly `fn main() {}`, you need to make sure, that all your
declarations, come before any variable assignment statements, or top level function calls,
since V will consider everything after the first assignment/function call as part of your
implicit main function.
## Running a project folder with several files ## Running a project folder with several files
Suppose you have a folder with several .v files in it, where one of them Suppose you have a folder with several .v files in it, where one of them
@ -5871,27 +5876,35 @@ libraries and include files for Windows and Linux. V will provide you with a lin
V can be used as an alternative to Bash to write deployment scripts, build scripts, etc. V can be used as an alternative to Bash to write deployment scripts, build scripts, etc.
The advantage of using V for this is the simplicity and predictability of the language, and The advantage of using V for this, is the simplicity and predictability of the language, and
cross-platform support. "V scripts" run on Unix-like systems as well as on Windows. cross-platform support. "V scripts" run on Unix-like systems, as well as on Windows.
Use the `.vsh` file extension. It will make all functions in the `os` To use V's script mode, save your source file with the `.vsh` file extension.
module global (so that you can use `mkdir()` instead of `os.mkdir()`, for example). It will make all functions in the `os` module global (so that you can use `mkdir()` instead
of `os.mkdir()`, for example).
V also knows to compile & run `.vsh` files immediately, so you do not need a separate
step to compile them. V will also recompile an executable, produced by a `.vsh` file,
*only when it is older than the .vsh source file*, i.e. runs after the first one, will
be faster, since there is no need for a re-compilation of a script, that has not been changed.
An example `deploy.vsh`: An example `deploy.vsh`:
```v wip ```v oksyntax
#!/usr/bin/env -S v run #!/usr/bin/env -S v
// The shebang above associates the file to V on Unix-like systems,
// so it can be run just by specifying the path to the file // Note: the shebang line above, associates the .vsh file to V on Unix-like systems,
// once it's made executable using `chmod +x`. // so it can be run just by specifying the path to the .vsh file, once it's made
// executable, using `chmod +x deploy.vsh`, i.e. after that chmod command, you can
// run the .vsh script, by just typing its name/path like this: `./deploy.vsh`
// print command then execute it // print command then execute it
fn sh(cmd string){ fn sh(cmd string) {
println(" $cmd") println(' $cmd')
print(execute_or_exit(cmd).output) print(execute_or_exit(cmd).output)
} }
// Remove if build/ exits, ignore any errors if it doesn't // Remove if build/ exits, ignore any errors if it doesn't
rmdir_all('build') or { } rmdir_all('build') or {}
// Create build/, never fails as build/ does not exist // Create build/, never fails as build/ does not exist
mkdir('build')? mkdir('build')?
@ -5974,7 +5987,8 @@ module abc
pub struct Xyz { pub struct Xyz {
pub mut: pub mut:
a int a int
d int [deprecated: 'use Xyz.a instead'; deprecated_after: '2999-03-01'] // produce a notice, the deprecation date is in the far future d int [deprecated: 'use Xyz.a instead'; deprecated_after: '2999-03-01']
// the tags above, will produce a notice, since the deprecation date is in the far future
} }
``` ```