background preloader

프로그래밍

Facebook Twitter

씹어먹는 C++ TIOBE Software: Tiobe Index. TIOBE Index for January 2016 January Headline: Java is TIOBE's Programming Language of 2015! Java has won the TIOBE Index programming language award of the year. This is because Java has the largest increase in popularity in one year time (+5.94%). Java leaves runner ups Visual Basic.NET (+1.51%) and Python (+1.24%) far behind. At first sight, it might seem surprising that an old language like Java wins this award. Especially if you take into consideration that Java won the same award exactly 10 years ago. Java's rise goes hand in hand with Objective-C's decline (-5.88%). So what is the outlook for 2016? The TIOBE Programming Community index is an indicator of the popularity of programming languages. The index can be used to check whether your programming skills are still up to date or to make a strategic decision about what programming language should be adopted when starting to build a new software system.

TIOBE Programming Community IndexSource: www.tiobe.com Java Python JavaScript Ruby. 프로그래밍 언어. 명령형 언어가 튜링머신에 기반하고 있다면, 함수형 언어는 람다 칼큘러스에 기반하고 있는 언어에 대한 총칭이다. 현업에서 많이 쓰이는 명령형 언어와는 대조적으로 몇가지 특징이 있다. 순수 함수형 언어는 변수가 없다.순수 함수형 언어에는 변수와 변수를 바꾸는 대입 연산자(C 언어를 예로 들면 =)가 없다. 명령형 언어에서 a=3 이 a 에 3 을 대입하라는 명령인 반면, 순수 함수형 언어에서는 a=3 을 수학에서 let a be 3. 같이 a 를 3 으로 '정의'하는것으로 본다. 즉 한번 a를 뭐라고 정의했으면 그 정의는 유효 범위 내에서 값이 바뀌지 않는다! 이게 불러오는 가장 큰 차이가 명령의 '순서'가 의미없다는점이다. 이런 특징에서 나오는 장점으로 표현식의 의미가 명료해진다는 것이 있다.

Destructive update두번째로 동반되는 명령형 언어와의 차이점이 destructive update 인데, 예를 들어 일반적인 명령형 언어에서 a=a+1는 a라는 변수에 a를 1만큼 증가시키라는 의미를 가지며 이 명령을 시행하는 시점에서 변수 a의 값이 바뀌게 된다. 하지만 순수 함수형 언어인 하스켈의 경우 a=a+1는 말그대로 a는 자기자신보다 1만큼 더한 수라는 것을 의미하며, a의 값을 구해서 출력하게 하면 a=a+1=(a+1)+1=((a+1)+1)+1=(((a+1)+1)+1)+1=... 일반 프로그래머의 상식으로는 도저히 이해가 안 될 결정인데 일부러 난해한 프로그래밍 언어라도 만들 생각으로 만들었을까? Int inc(int a) { static int c=0; c=c+a; return c; } 이 함수에 1을 넣어 여러 번 호출하면 1, 2, 3, 4, 5, ...가 나온다. 자료구조 상 destructive update 가 허용되지 않기때문에 효율적인 자료구조와 알고리듬도 명령형 언어에 비해 상당히 달라지게 된다. 참고로 객체지향 언어와 함수형 언어는 서로 배타적인 개념이 아니다.

프로그래밍 언어/코드 예제. C(프로그래밍 언어) 현재 시점 기준으로 C의 주요한 특징은 현대 주류 언어 중 거의 유일한 네이티브 컴파일 언어라는 것이다. 자바나 파이썬 등은 다 가상머신 위에서 실행이 되는 반면, C/C++는 기계어로 바로 컴파일된다. 따라서 현대 고급 언어들과 단순 비교하기엔 포지션 자체가 다르다고 할 수 있다. 가상머신 자체가 C/C++로 만들어지니깐… 어쨌든, 매우 속도가 빠르고 코드가 작지만, 컴파일 시간이 오래 걸리며 디버깅도 어려워 생산성이 비교적 낮다. 이러한 특성 때문에 속도가 다른 무엇보다 (심지어는 생산성보다도) 중요한 임베디드 혹은 모바일 계열, 또는 시스템 프로그래밍 등에서 주로 사용된다. 이러저러한 고급 언어들이 나오는 상황에서도 아직 저수준의 제어를 위해 C가 필요한 경우도 많다. 또한 대부분의 운영체제가 제공하는 API 혹은 시스템 콜은 C 기반이기 때문에 이를 직접 사용하려면 어찌되건 C를 래핑하는 방식으로 밖에 쓸 수 없다.

안정성보다는 퍼포먼스를 골수까지 뽑아내야 하는 게임 프로그래밍 분야 또한 C/C++가 대세. 속도와 시스템 제어가 필요한 코어 부분은 다들 C/C++로 제작하고 UI나 콘트롤러같은 건 고급 언어를 쓰는 게 현상황. 현시점에서 C의 가장 큰 의의는 다른 많은 언어들의 모체가 되었다는 것과 더불어 거의 모든 시스템과 운영체제에서 지원하는 언어라는 것이다. 이렇게 이미 한물 간 언어처럼 보이지만, 여전히 '프로그래밍' 입문으로 C 를 추천하는 사람이 많다. 다만, 요즘 대학에서는 신입생들 프로그래밍 입문 강의로 C 언어를 기피하는 현상이 있는데, 대학은 '특정 프로그래밍 언어'를 배우거나 '프로그래머'를 양성하는 기관이 아니기 때문이다. Joinc Wiki: 시작하려는 이를 위해서.