전체 글 (21) 썸네일형 리스트형 컴파일러 최적화 종류와 기법 정리 컴파일러 Back-end에서는 어떻게든 머신 인스트럭션의 갯수를 하나라도 줄이고자 노력한다. 컴파일러 최적화 기법은 컴파일러마다 다양하지만, 일반적으로 많이 사용되는 것은 주로 상수 연산을 최대한 줄이는 것이다. 다음 기법들은 일반적인 컴파일러에서 통용되는 최적화 기법들이다. 1. Copy propagation Copy propagation은 직접 할당의 대상을 해당 값으로 대체하는 최적화 과정이다. 아래와 같이 y = x의 직접 할당은 해당 값으로 대체될 수 있다. 최적화 이전 최적화 이후 2. Constant folding Constant Folding은 런타임에 계산 전, 컴파일 타임에 상수 표현을 인식하고 처리하는 최적화 과정이다. 최적화 이전 1스텝 진행 결과 2번째 줄, b의 할당 값인 9 -.. 웹 프론트엔드 프레임워크, Bootstrap 예쁘고 안깨지는 반응형 웹 페이지를 만들자! 부트스트랩 깃허브 리퍼지토리 부트스트랩, 깃허브에서 2번째로 별을 많이 받은 리퍼지토리이다. 깃허브에서의 별 갯수가 보여주듯이, 부트스트랩의 인기는 전 세계 웹 개발자들 사이에서 정말 뜨겁다. 부트스트랩은 개인 블로그 개발자 뿐만 아니라, 여러 대기업 웹페이지에서도 사용된다. 예를 들면, NBA.com, Wal-Mart, Target 이 있는데, 이는 모두 부트스트랩을 사용해 웹 프론트엔드를 구축한 홈페이지들이다. 부트스트랩의 장점은 잘 구조화 된 컴포넌트 배치와 디자인에 있다. 하지만 그 중에서 가장 큰 장점은 브라우저 해상도에 따라서 반응하여 컴포넌트를 재배치시켜주는 반응형 웹 프론트엔드라는 것이다. 노트북 모니터와 핸드폰에서의 페이지 비교 사진 본 홈페이.. 구글신의 축복, 구글 크롬 웹 브라우저계의 선두주자, 과연 계속될지? 2017년 11월 웹 브라우저 점유율표(출처:W3Counter) 구글 크롬은 웹 브라우저 시장에서의 점유율에서의 우위를 꾸준히 점하고 있다. 2017년 11월을 기준으로 크롬 브라우저의 점유율은 59.2%를 차지하고 있는 데, 이는 과반을 넘은 압도적인 수준이다. 크롬의 사용성은 높은 사용자수가 보여주듯이 우수성을 보여주는데, 내가 개인적으로 사용하고 느낀 바로는 현존하는 브라우저 중에 제일 사용하기 편하고, 빠른편에 속한다.(제일 빠른 브라우저는 파이어폭스 퀀텀) 구글 크롬을 사용하면서 가장 피부에 와닿게 느끼는 좋은 점 두가지는 속도와 기능성이다. 일단 페이지 로딩 속도나 이벤트 처리 속도가 매우 빠르다. 크롬 브라우저는 캐시를 저장해놓고 해당 페이지에 대한.. OCaml 컴파일과 빌드 OCaml 컴파일러 ocamlc - OCaml 바이트코드 컴파일러. .byte를 만들어낸다. ocamlopt - OCaml 네이티브코드 컴파일러. .native를 만들어낸다. 파일 확장자명 종류 .c - c source를 나타냄 .cc - c++ source를 나타냄 .C - c++ source를 나타냄(.c와 구분 주의) .o - c object를 나타냄 .a - c archive를 나타냄(archive란 오브젝트 파일들을 모아 하나의 파일로 만든 것) .cmi - mli object를 나타냄 (mli는 ml 인터페이스 파일) .cmo - ocaml object를 나타냄 (byte code) .cmx - ocaml object를 나타냄 (native code) .cmxs - native plugin을 .. Neovim, 리눅스 에디터의 미래 Vim 호환성을 갖춘 hackable Vim 리눅스에서 단연 많이 사용되는 에디터로 Vim을 빼놓고 말할 수가 없을 것이다. Vim의 장점은 가벼우면서도 강력한 여러가지 기능들, 텍스트 편집 기능과 여러 정규 표현식 문법, 그리고 다양한 편집 환경 변경 자유도를 제공한다는 것이다. 이러한 Vim을 개선시킨 것이 Neovim인데, Neovim을 사용해야 하는 이유 중 가장 큰 것은 이전 Vim에서 개선되지 않았던 Vim에서의 작업 중 비동기적으로 실행 중인 작업에 대한 엑세스일 것이다. 오늘 리뷰에서는 내가 Neovim을 사용하면서 겪었던 경험과 후기를 공유해보고자 한다. 기본적으로는 나는 Neovim을 사용하는데 만족하고 있는데, Neovim은 여러가지 장점을 가지고 있기 때문이다. Neovim위에서의 .. NP 문제에 대한 쉬운 설명 P 문제 Polynominal complexity의 알고리즘을 가지고 있는 쉬운 문제. 즉, 다항 시간내에 풀리는 문제. NP 클래스 Non-deterministic Polynominal complexity를 가지는 문제들. 운에 기대면 현실적인 비용으로 해결할 수 있는 문제들. 예를 들자면 주어진 지도 위의 도시(그래프)를 한 번씩만 방문하는 경로 찾기 문제인 해밀턴 경로(Hamilton path) 문제가 대표적이다. 이를 다항시간 내에 푸는 알고리즘은 아직 없다. 건너풀기(Problem Reduction) 문제 A를 푼 알고리즘으로 동일하게 B 문제를 해결할 수 있다면, 그 문제는 간접적으로 풀 수 있는 것이다. 단, A 문제로 푼 답을 B 문제의 답으로 옮기는 건 다항 시간내에 되야한다. NP 완전.. Flickr 이미지 서버와 Flickr API 개인 블로그에서 빠르고 대용량의 이미지 서버를 찾는다면 개인 블로그를 구성함에 있어서 여러 고려할 점이 있겠지만, 나의 경우 사진 갤러리에 수많은 사진들을 게시하면서 이런 이미지 파일들에 대해서(특히나 고화질, 고용량의) 관리에 대해서 고민을 많이 하게 되었다. 약간의 고민을 통해 생각해낸 결론은, 나처럼 자그마한 개인 블로그를 운영하는 경우에는 외부 서비스를 통해 이미지 호스팅을 지원받는 편이 효율적이라는 것이었다. 나는 휴대폰으로 사진을 자주 찍는 편인데, 내가 본 블로그에 사진들을 업로드하기 위해서는 휴대폰에서 사진을 컴퓨터로 옮겨서 서버로 업로드하거나, 혹은 이를 바로 올릴 수 있는 웹서비스를 만들어야 했는데, 둘 다 너무 귀찮았고, 만들어도 크게 의미없는 일이라 외부 서비스를 이용하기로 결정했다.. GNU make GNU make는 기본적으로 프로그램 그룹 중에서 어느 부분이 새롭게 컴파일되어야 하는지를 자동적으로 판단해서 필요한 커맨드를 실행한다. GNU make에 그 프로그램의 타겟과 의존성들을 알려주는 것이 Makefile이다. Makefile의 기본적인 구조는 아래와 같다. 타겟은 말 그대로 명령이 수행되어 얻을 결과 파일이고 의존성은 타겟이 의존하고 있는, 즉 타겟이 컴파일되기 위해 필요한 파일들을 의미한다. 참고로 타겟에는 결과 파일만 올 수 있는 것뿐 아니라 clean과 같은 레이블도 올 수 있다. 명령 부분은 앞에 반드시 TAB으로 구분한다. make는 명령어를 앞단에서 TAB으로 구분하기 때문이다. 나의 경우처럼 TAB 기본 설정이 nvim.init 에디터 설정에.. 이전 1 2 3 다음