-
"V" 프로그래밍 언어 (vlang)컴퓨터/V language 2020. 8. 18. 12:37728x90반응형
V
1. 소개
V언어 특징
- 안정성 : no null, no globals, no undefined behavior, immutability by default
- C/C++ to V 변환 가능 (v.exe translate hello-world.c)
- 핫 코딩 리로딩 가능 [live]
- 크로스 플랫폼 UI 라이브러리
- built-in 그래픽 라이브러리
- REPL (read-eval-print loop)
- built-in ORM (object-relational mapping) (sqlite가 내장)
- built-in 웹 프레임워크 (홈페이지 제작 가능)
- C/JS 백엔드 (라이브러리 공유해서 씀)
우선 아래 V언어 코드를 보면 Go언어와 비슷하게 생겼다. (Go와 차이점)
(Go언어를 알면 V언어를 80% 이해한다고 봐도 된다고 한다.)fn main() { println('hello world') } fn fib(a int, b int) { val := a + b println(val) if val < 1000 { fib(b, val) } } fib(0, 1) fn sum(a ...int) int { mut total := 0 for x in a { total += x } return total } println(sum()) // Output: 0 println(sum(1)) // 1 println(sum(2,3)) // 5
특히 소개한 바와 같이 자체 컴파일러 속도가 엄청 빠른 것 같다.
2. 문법
1. print Hello World
println('hello world')
2. 주석 (comment)
// 싱글 라인 /* 멀티 라인 주석 /* 파생 가능 */ */
3. 함수 지정 (fn)
Go, C와 같이 함수 오버로딩 불가능
main 함수 다음에 add, sub 함수가 지정돼있어도 실행 가능
기본적으로 private고 pub 키워드를 통해 public 함수로 만들 수 있다.
fn main() { println(add(77, 33)) println(sub(100, 50)) } fn add(x int, y int) int { return x + y } fn sub(x, y int) int { return x - y } pub fn public_function() { }
4. 변수 지정
기본적으로 V언어에서 변수는 불변개체이다. mut 키워드를 사용하여 mutable 객체를 지정할 수 있다.
※:= 는 delcaring + initalizing, = 는 assigning이다.
name := 'Bob' age := 20 large_number := i64(9999999999) println(name) println(age) println(large_number) // mutable mut age := 20 println(age) age = 21 println(age)
5. 타입
V언어의 int는 32비트 정수이다.
bool string i8 i16 int i64 i128 (soon) byte u16 u32 u64 u128 (soon) rune // represents a Unicode code point f32 f64 any_int, any_float // internal intermediate types of number literals byteptr, voidptr, charptr, size_t // these are mostly used for C interoperability any // similar to C's void* and Go's interface{}
6. String
V언어에서 String은 기본적으로 immutable, read-only bytes이고, 자동으로 UTF-8로 인코딩 된다.
name := 'Bob' println('Hello, $name!') // `$` is used for string interpolation println(name.len) bobby := name + 'by' // + is used to concatenate strings println(bobby) // "Bobby" println(bobby[1..3]) // "ob" mut s := 'hello ' s += 'world' // `+=` is used to append to a string println(s) // "hello world" println('x = ${x:12.3f}') println('${item:-20} ${n:20d}') // String interpolation println('age = $age')
7. 배열 (Array)
.len 함수는 read-only이므로, 수정 불가
1. 배열 지정
mut nums := [1, 2, 3] println(nums) // "[1, 2, 3]" println(nums[1]) // "2" nums[1] = 5 println(nums) // "[1, 5, 3]" println(nums.len) // "3" nums = [] // nums 배열은 이제 비어있음. println(nums.len) // "0" // 빈 배열 초기화 users := []int{} // 크기 5의 -1 초기 값으로 아래처럼 만들 수 있다 arr := []int{ len: 5, init: -1 } // `[-1, -1, -1, -1, -1]`
2. 배열 operations
append 함수는 "<<", in 키워드,
mut nums := [1, 2, 3] nums << 4 println(nums) // "[1, 2, 3, 4]" println('Alex' in nums) // "false" // 정렬 mut numbers := [1, 3, 2] numbers.sort() // 1, 2, 3 numbers.sort(a > b) // 3, 2, 1 // 3D 배열 mut a := [][][]int{len:2, init: [][]int{len:3, init: []int{len:2}}} a[0][1][1] = 2 println(a) // [[[0, 0], [0, 2], [0, 0]], [[0, 0], [0, 0], [0, 0]]]
8. IF, FOR, WHILE
1. IF (괄호 불필요, parenthesis-less)
a := 10 b := 20 if a < b { println('$a < $b') } else if a > b { println('$a > $b') } else { println('$a == $b') } // 아래는 expression으로 쓰기 num := 777 s := if num % 2 == 0 { 'even' } else { 'odd' } println(s) // "odd"
2. FOR
numbers := [1, 2, 3, 4, 5] for num in numbers { println(num) } names := ['Sam', 'Peter'] for i, name in names { println('$i) $name') // Output: 0) Sam } // 1) Peter
3. WHILE
for문으로 쓰인다.
mut sum := 0 mut i := 0 for i <= 100 { sum += i i++ } println(sum) // "5050"
3. highlightJS
highlightJS for V lang을 만들었다.
4. 참고
V 공식 홈페이지 : https://vlang.io/
V 오픈소스 홈페이지 : https://github.com/vlang/v
V playground : https://v-wasm.now.sh/
728x90'컴퓨터 > V language' 카테고리의 다른 글
V language : Introspective Sort (0) 2020.08.20 V language : Insertion Sort (0) 2020.08.19 V langauge : Bubble Sort (0) 2020.08.18