프로그래밍을 하면서, "아, 내가 한 번 프로그래밍 언어를 만들면 어떨까?" 라는 생각을 한 번이라도 하셨나요?
그렇다면 반갑습니다. 저도 그래요.
C/C++/Go언어를 맛보면서, 이들만의 장점을 합치면 정말 어마어마한 언어가 탄생할 것 같았습니다. 물론 그게 말처럼 쉽진 않지만, 일단 제가 작성한 컨셉 사진들을 봐 주세요.
말 그대로 "컨셉"입니다. 실제로 존재하는 프로그래밍 언어가 아닙니다!
Ola 언어의(Over LAnguage) 기능을 간단하게 소개합니다. 더 간단해진 main() 함수, var/ptr/ref/arr/func/type 키워드, 향상된 for문, 쉬운 주석, 헤더 없는 print/scan 연산자, 그리고 C/C++/C#/Go의 편리한 기능 탑재 등등이 있는데요,
일단 하나하나씩 살펴봅시다.
더 단순해진 main() 함수
C언어에서 Hello, world!를 출력하려면 왼쪽에서 보다싶이 헤더를 포함하고, printf() 함수를 사용해야 합니다. Ola 언어에서는 그럴 필요 없이 entry 블록을 정의하면 다른 언어들의 main() 함수로 취급됩니다. 실행할 문장이 한 문장이면 중괄호를 생략할 수 있고, print는 연산자로써 별다른 헤더나 using, import 등을 필요로 하지 않습니다.
키워드
예시를 보시죠.
// C/C++
int age; // 정수형 변수 나이 선언
char *str; // char* 선언
std::string sstr; // 문자열 (인스턴스) 선언
double arr[5]; // 길이가 5인 실수 배열 선언
auto n = 10; // 10을 갖는 int형 변수로 자동 추론
// Go 언어
var age int // 정수형 변수 나이 선언
var sstr string // 문자열 선언
var arr [5]double // 길이가 5인 실수 배열 선언
var n = 10 // 10을 갖는 int형 변수로 자동 추론
// Ola 언어
var int age // 정수형 변수 나이 선언
ptr char *str // char* 선언
var string sstr // 문자열 선언
arr double array[5] // arr이 예약어, 변수 이름은 array
var n = 10 // 10을 갖는 int형 변수로 자동 추론
var 키워드는 C# 및 Go언어에서 따왔습니다. 변수를 어디서 선언했는지 검색할 때 편하더라고요.
향상된 for문
C스타일 for문에서 세미콜론 ; 을 구분자로 쓰지 않습니다. | 을 대신 사용합니다.
그리고, Go언어의 for문처럼 괄호가 필요 없고, 모두 생략하면 무한반복, 조건식만 남기면 while문처럼 동작합니다.
또한, C++11의 범위기반 for문이나 C#의 foreach처럼 사용하려면 a <= arr 이렇게 하면 됩니다. arr 배열에서 a 변수를 사용하겠다는 겁니다. 용법은 아시리라 믿습니다.
쉬운 주석
그 쓰지도 않는 ` 을 주석으로 사용합니다.
` = //
`` ~ `` = /* ~ */
한 개 쓰면 한줄 주석, 두 개 쓰면 범위 주석입니다.
헤더 없이 작동하는 print, scan연산자
결국엔 연산자도 함수죠(...)
C++에서 C언어의 malloc() 함수를 new 연산자가 대체하는 걸 보고 기겁을 했습니다. 차라리 간단한 입출력정도는 언어 차원에서 연산자로 만들어줬으면 하는 마음에서 이렇게 만들어봤네요.
참고로, C#과 유사하게 using 키워드를 사용해 기능을 가져올 수 있으며, C++의 #include "" 를 대체하는 $using이 있습니다. 작업 디렉터리 내에서 using을 합니다.
물론 print 연산자는 using basic io 구문을 사용하지 않아도 작동합니다. 연산자니까요.
물론 헤더파일을 포함해야 작동하는 C++의 typeid나 <=>도 있습니다만....
C/C++/C#, Go의 편리한 기능 탑재
auto a = 10; // C++ auto
var a = 10 ` Ola auto declare
[]{ std::cout << "HI"; }(); // C++ lambda
func() { fmt.Print("HI") }() // Go closer
func{ print "HI" }() ` Ola closer
using C
C.printf("%s", "Ola with C func") ` using C functions in Ola
std::list<int> lt; // C++ STL
var list lt<int> ` Ola SGC (약자를 까먹었습니다...Standard 뭐시기)
int *p = nullptr;
ptr int* p = null
끝으로 다양한 언어로 배열에 값을 입력받아 합계를 출력하겠습니다.
// C언어
#include <stdio.h>
int main() {
int arr[5] = {0,}, sum = 0;
for (int i = 0; i < 10; i++) {
printf("값 입력: ");
scanf("%d", &arr[i]);
sum += arr[i];
}
printf("입력된 정수의 합계는 %d입니다.", sum);
return 0;
}
// C++20
#include <array>
#include <iostream>
#include <format>
using namespace std;
int main() {
int sum{};
array<int, 5> arr;
for (auto &n : arr) {
cout << "값 입력: ";
cin >> n; sum += n;
}
cout << format("입력된 정수의 합계는 {}입니다.", sum);
}
// C#
using System;
class Program
{
static void Main()
{
int sum = 0;
int[] arr = new int[5];
for (int i = 0; i < 5; i++)
{
Console.Write("값 입력: ");
arr[i] = Console.Read();
sum += arr[i];
}
Console.Write($"입력된 정수의 합계는 {sum}입니다.");
}
}
// Go 언어
package main
import "fmt"
func main() {
var sum = 0
var arr [5]int
for _, n := range arr {
fmt.Print("값 입력: ")
fmt.Scan(&n)
sum += n
}
fmt.Printf("입력된 정수의 합계는 %d입니다.", sum)
}
// Ola
entry {
var sum = 0
arr int array[5]
for n <= array {
print "값 입력:"
scan n
sum += n
}
print $"입력된 정수의 합계는 {sum}입니다."
}
'기타' 카테고리의 다른 글
[카루의 HTML 5] 마크업 언어 첫걸음 (0) | 2023.01.11 |
---|---|
AutoHotKey로 프리미어 프로 단축키 쉽게 사용하기 (exe 공유) (0) | 2022.11.13 |