살다 보니 C#이나 파이썬도 아니고 비주얼 베이직으로 작성된 코드를 C++로 포팅해야 할 일이 있었다. C/C++로 갈아탄 뒤로는 베이직 코드는 다시는 볼 일이 없을 줄 알았는데 이거 정말 몇 년 만이냐.

들여다봐야 하는 코드는 닷넷도 아니고 비주얼 베이직 6으로 만들어진 코드였다. 하지만 GUI가 아니라 계산 알고리즘을 포팅하는 것이기 때문에 포팅이 크게 어려운 건 없었다. VB6에서 닷넷으로 넘어가면서 완전히 뒤집어엎어진 건 API 체계이지, 언어 자체가 그렇게 많이 바뀐 건 우려한 것만치 많지 않아 다행이었다. 자바와 자바스크립트의 관계에 필적하는 이질감은 아닌 것 같다.

언어가 바뀐 것은,
- 첫째, statement이던 것이 C 언어의 영향을 받아 다 일관된 함수 호출 형태로 바뀜. 그래서 매개변수 전체를 괄호로 싸야 됨. (파이썬도 3.0에서는 print가 statement에서 함수로 바뀜)

- 둘째, 타입이 예전보다 더 엄격해지고, 모든 변수는 반드시 사용 전에 선언을 해 줘야 함. 베이직은 원래 그런 걸 안 하는 언어이다가 하는 걸로 바뀌었다 보니, 변수를 선언하는 키워드가 Var이 아니라 Dim...이다. 원래는 배열을 선언할 때만 쓰는 키워드였지.
이런 추세를 정면으로 역행하는 GWBASIC의 잔재인 DefINT A-Z 같은 명령문은 당연히 퇴출이다.

- 셋째, 그리고 객체지향 패러다임에 맞춘 API의 전면 재구성이다. 예전엔 그냥 global 단위로 곧바로 호출하던 함수도 다 분야가 나뉘어서 클래스나 namespace에 소속된 메소드로 바뀌었다. 그래서 수학 함수도 바로 Sqrt라고 하면 안 되고 Math.Sqrt라고 써 줘야 하며, Math를 자주 쓴다면 Using 선언을 한 뒤에 생략해야 한다. 하긴, 비베에는 예전부터 With 키워드는 있긴 했다만.

이 정도.
요즘 언어들은 C/C++ 영향을 받아서 다들 대소문자 구분을 하는 게 유행이기 때문에, 혹시 비주얼 베이직도 그렇게 바뀌지 않았으려나 생각했다만...
의외로 명칭에 대소문자 구분을 안 하는 건 VB6이나 닷넷이나 마찬가지이다.

베이직은 원래 좀 가볍고 동적인 언어였는데, MS의 닷넷 입맛대로 대수술을 거치다 보니 그냥 C#의 표현력에 필적하는 전형적인 절차형 언어가 된 것 같은 느낌이 든다. 예전의 베이직 같은 느낌은 파이썬이 더 잘 간직하고 있는 듯.

배열 첨자도 ()로 싸고, 함수 호출 인자도 ()로 싸는 건 베이직의 특징이다. 언뜻 보기에 굉장히 혼동될 것 같은데 C++처럼 [] () 따로 연산자 오버로딩이라도 해야 하는 게 아니라면 의외로 둘이 문법 차원에서 혼동될 일은 없다. 참고로 본인은 ::와 .의 구분이 없는 객체지향 언어들에 대해서도 의아해한 적이 있었는데 이 구분 역시, 포인터만 없다면 거의 필요하지 않다.

그러고 보니 베이직은 대입도 =, 동등 비교도 =이다. A=B=1이라고 하면 C언어 식으로 치자면 A=B==1처럼 해석된다. 원래 베이직의 대입문은 Let A=1 처럼 써 줘야 맞는데 Let이 C언어의 auto만큼이나 캐잉여로 전락하는 바람에 지금 같은 꼴이 된 것이다. 그러고 보니 Let을 Dim처럼 변수 선언 키워드... 아니 C++0x의 auto처럼 쓰는 것도 괜찮을 것 같다?

Dim A as Double
Dim I as Integer

뿐만 아니라

Let A = 0.52 '자동으로 실수 확정
Let I = 5    ' 자동으로 정수 확정

이렇게도 되게 말이다. 타입이 이랬다저랬다 바뀌는 Variant가 아님. 기발하지 않은지? ㄲㄲ

베이직처럼 구문 분석이 쉬운 언어는 IDE의 인텔리센스나 코드 자동 완성 같은 기능이 C++의 그것과는 비교할 수 없이 안드로메다급으로 훨씬 더 빠르고 똑똑하고, 돌아가는 게 손에 착착 달라붙는다. 도스 시절의 퀵베이직이 이미 인텔리센스만 없을 뿐이지 그런 꿈의 프로그램 개발 환경을 어느 정도 제공하고 있었다. 빌드 속도는 두말 할 나위도 없음.

그러나 C++ 코드는 실시간으로 코드 변경 사항을 IDE가 따라잡으려면, 비주얼 스튜디오든 Source Insight든, 어쨌든 background에서 소스를 다 까 보는 작업을 하지 않으면 안 된다. 그래서 어떻게든 처리 속도를 올리려고 덕지덕지 남기는 부가 정보 데이터가 많다. 함수 이름을 바꾼 게 C/C++은 복잡한 절차를 거쳐 최소한 수 초 뒤에 IDE의 ClassView에 반영되는 반면, 베이직은 ‘즉시’이다.

이런 생산성과, C++ 특유의 졸라 가볍고 효율적인 네이티브 코드라는 두 마리 토끼를 모두 잡은 프로그래밍 언어 + 개발 환경은 정녕 없는 것일까.
하긴, 윈도우 환경에서 베이직 언어로 네이티브 코드를 생성하는 컴파일러는 MS 제품 중에는 없고 파워베이직이라는 브랜드가 있다. 하지만 인지도가 안습한 수준.

Posted by 사무엘

2012/01/26 08:45 2012/01/26 08:45
,
Response
No Trackback , 6 Comments
RSS :
http://moogi.new21.org/tc/rss/response/632

Trackback URL : http://moogi.new21.org/tc/trackback/632

Comments List

  1. Lyn 2012/01/26 09:16 # M/D Reply Permalink

    Delphi 있네요. 생산성과 Native 코드 양쪽을 다 잡은

    1. 사무엘 2012/01/26 09:40 # M/D Permalink

      네, 그렇네요. 델파이는 RAD 툴이라는 특성상 오버헤드가 좀 크긴 하지만, 그 두 특성은 만족하네요. ^^
      MFC를 static link한 정도의 덩치이긴 하지만, 그래도 닷넷 프레임워크 같은 덩치를 새로 설치하는 급은 물론 아니고 나름 독립 실행 exe이기까지 하죠.
      델파이에 대해서는 나중에 또 글이 올라올 겁니다.

  2. 주의사신 2012/01/26 10:05 # M/D Reply Permalink

    1. Java와 JavaScript는 Java 홍보의 일환으로 이름을 맞추었기 때문에 전혀 다른 언어가 비슷한 이름을 쓰게 된 거라고 합니다.

    요즘 웹 공부하는데, JavaScript를 조금 더 쉽게 쓰게 해 주는 CoffeeScript라는 것도 나왔더군요.

    http://coffeescript.org/

    Java = Coffee이다 보니 그런 이름이 붙은듯 합니다.


    2. 누가 저에게 "너는 처음으로 공부해 본 프로그래밍 언어가 뭐니?"라고 묻는다면 조금 난감합니다. 답이 두 개이기 때문입니다. 프로그래밍 언어인지도 모르고 봤던 Ruby(RPG 만들기라는 일본 툴에서 사용된 언어입니다. Ruby 창조자가 잘 아시다시피 일본인이죠)라고 답해야 할 지, 아니면 제대로 공부하기 시작했던 C일지...


    3. 그런데 뭘로 시작했든 간에 BASIC은 한 번도 접해 본 적이 없습니다. 그냥 가끔 책 읽다가 나오면, 한 번 이해하고 넘어가는 정도로밖에 본 적이 없네요.

    1. Lyn 2012/01/26 10:13 # M/D Permalink

      자바스크립트가 원래는 live script 라는 이름이었다더군요 : )

      전 원래 프로그래밍을 turbo pascal 로 시작해서 basic 은 접한적이 없네요. 지금은 C++이지만 ...

    2. 사무엘 2012/01/26 16:50 # M/D Permalink

      음, 두 분 다 도스 시절 GWBASIC을 경험한 적이 없으시다니.. 세월의 흐름을 좀 느꼈습니다. 저는 하이텔 시절에 베이직 동호회 활동도 한 적이 있는데. ^^;;
      베이직으로 프로그래밍을 시작했다가 파스칼을 거친 후 C/C++로 넘어갔습니다.
      물론 지금은 생성자와 소멸자, 가상 함수와 상속, 템플릿 같은 게 없으면 불편해서 코딩을 못 하는 C++ 유저로 정착했지요.
      Lyn 님은 꽤 고수 프로그래머이신 것 같네요. 처음 뵙게 되어 반갑습니다. ^^

  3. Lyn 2012/01/27 11:18 # M/D Reply Permalink

    저도 제가 고수엿으면 좋겠습니다 ㅜㅜ

Leave a comment
« Previous : 1 : ... 1292 : 1293 : 1294 : 1295 : 1296 : 1297 : 1298 : 1299 : 1300 : ... 1841 : Next »

블로그 이미지

철도를 명절 때에나 떠오르는 4대 교통수단 중 하나로만 아는 것은, 예수님을 사대성인· 성인군자 중 하나로만 아는 것과 같다.

- 사무엘

Archives

Authors

  1. 사무엘

Calendar

«   2022/01   »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

Site Stats

Total hits:
1734759
Today:
450
Yesterday:
506