저급, 고급 언어의 정의는 시대적으로 다릅니다.
기계, 즉 하드웨어 시스템과 얼마나 가까운 곳에서 작업하느냐의 분류에 따라
고전적 정의에서는 어셈블리나 기계어가 저급언어, C 언어가 고급언어였지만,
<- 저급언어 고급언어 ->
[ Machine Code ][ Assembly ][ Pascal, C 등등등 ][ LISP ]
지금은 보다 더 고급형 언어들이 속속 출현했기 때문에 ( 아래 숫자가 낮을수록 저급 언어 )
1. [ Machine Code ][ Assembly ][ Pascal, C 등 address ( 포인터 )를 직접 다루는 언어 ]
2. [ Java, C# 등 Garbage Colloector 가 있는 언어 ]
3. [ Python, JavaScript 처럼 어지간한 것들은 이미 준비되어 활용과 조립만 신경쓰면 되는 언어 ]
4. [ 함수형 언어 처럼 논리 체계 위주로 다루는 언어 ]
로 표현되어 오히려 저급언어에 속하게 됩니다.
본인이 이과 특성이 강하다면,
저급언어인 C/C++ 이나 수학과 아주 유사한 함수형언어에서 출발하는게 재미있을 수 있습니다.
양극성은 치밀한 계산과 시스템적 이해를 필요로하기 때문이죠.
그런걸 알아야 재밌다고 느끼는 사람들이 이과적 특성이 강하다고 보여집니다.
본인이 문과적 특성이 강하다면,
2번과 3번쯤에서 골라잡으면 됩니다.
무난한 이해와 논리에서 출발하는게 편안한 사람들이죠.
결국은? 저 1,2,3,4 단계를 모두 정복하기 위해 확장을 시도하시게 됩니다.
궁극에는 절대적으로 유리한 언어나 개념체가 존재하지 않아요.
특별한 경우에 유리한 각각의 방법들이 존재할 뿐이거든요.
c++은 가비지컬렉터없엉?
나는 이런 문과멸시가 좋더라
문과멸시 ㅋㅋㅋㅋㅋㅋㅋ
자바스크립트도 가비지 컬렉션을 해용
ㅋㅋ 난 문과성향도 강한데... 베이직 없었으면 내가 프로그래밍 자체를 좋아하기 쉽지 않았을듯.
고급으로 갈수록 가비지 컬렉팅을 하거나 필요없는식으로 기본으로 깔고 간다고 보시면 됩니다.
C++은 아직 GC가 공식적으로는 없는데 스마트포인터로 가비지 관리를 하고 있는 상황 - return 0;
근데 자바환경이면 unique shared weak를 걍 언어에서 깔아줄 수 있을거같은데
이게 생각보다 까다로운 작업임?
인스턴스 만들면 알아서 shared로 잡아주고 그러면 될거같은데
자바로 weak refernce 있더라
자바도 Garbage Collector 를 무력화할 방법이 있슴다~ 그렇게 최적화 하는 경우도 있죠. 근데 그럴거면 C++ 이 편한건 함정. 다만 기존의 Java Resource 를 활용할 수 있다는게 그걸 시도하는 사람들의 가치죠.
C++ 로 가비지 컬렉터 구현한 라이브러리나 프레임웍들이 있는데, 그걸 사용하는건 옵션입니다~
스마트 포인터도 떡칠하면 별로라 하더라구여 레퍼런스콜 연산에 자원소모가 크다함
당연히 레퍼런스는 큰 덩어리 기준으로 전달해야 최대의 효율을 얻을 수 있죠. 레퍼런스를 던지지 않으면 오히려 성능이 떨어지는 경우도 있습니다.
물론 레퍼런스는 포인터의 Syntactic Sugar 일 뿐이지만요.