분류 전체보기 (7) 썸네일형 리스트형 [Haskell] 프로그래밍 언어론 - 하스켈 언어(4) - Type class, func, instance 본 글은 프로그래밍 언어론과 하스켈 언어에 대해 학습하는 글입니다.이번엔 하스켈의 유형중 타입과 타입클래스, 인스턴스에 대해 설명해봅니다.타입은 기본적으로 하스켈 라이브러리에서 지원되는 built in 타입이 있다.하지만 개발자의 임의대로 사용자정의 타입을 생성할수 있는데 이 방법에 대해서는 이전 문서를 통해 설명하였다. 타입은 data 키워드를 통해 정의되는데 먼저 다음 예시를 보자. data Numbers = None | One Int | Two Int Int 이 코드를 보면 Numbers 라는 기존에 존재하지 않던 타입을 새롭게 정의한것으로,이때 None, One, Two 은 사용자가 정의한 데이터 생성자이다.그런데 이렇게 타입 Numbers 를 정의해두면 자유롭게 해당 타입을 쓸수 있을까?그리고.. [리버스엔지니어링] 파일구조(2) 본 문서는 링커의 동작에 대해 다룬다. 먼저 링커가 하는일을 전부 알아보기는 힘드니까, 정적 파일에서 Symbol Table Section과 Relocation Table Section이 왜 필요하고 어떻게 동작하는지 알아보자. 파일구조는 다음과 같다. 본 문서에서는 링커의 아주 부분적인 기능인 Symbol Table Section과 Relocation Table Section 부분만 확인할것이다. 먼저 소스코드가 링킹 되기 직전의 시간대로 가보자. cl.exe /c 옵션을 이용해서 링킹 직전의 파일 상태를 확인할수 있다. 예를들어 전역변수 int bar = 10; 가 초기화 되어있다면,이전 글을 통해 변수 bar는 data섹션에 존재할것임을 예상할수 있다. 그런데 bar는 실제로 data섹션에 저장되.. [리버스엔지니어링] 파일구조(1) 데이터를 물리디스크에 저장할때 가능한한 파일의 크기를 줄일필요가 있었다.때문에 다양한 기법들이 발명되었는데, 본 글에서는 bss섹션의 등장을 알아본다. data 섹션과 bss섹션이 구분된 이유는 결국 프로그램이 최대한 적은 디스크용량을 차지하도록 조정하기 위해서이다. 예시: 전역변수...int a = 1234; double b;short c;...라는 코드가 있을때,과거에는 세개의 변수는 모두 data섹션에 저장되었었다.a는 값이 존재하는 초기화된 변수로 물리 디스크에서 4바이트를 차지했고b와 c도 각각 8바이트, 2바이트를 물리 디스크 공간에 할당되었다. 그러나 실제로 b와 c는 어떠한 값도 저장하지 않은상태이고 프로그램의 경량화 시각에서는 이게 굉장한 낭비로 보인다.저런 값없는 변수들이 물리디스크를 .. [Haskell] 프로그래밍 언어론 - 하스켈 언어(3) - Types 본 글은 프로그래밍 언어론과 하스켈 언어에 대해 학습하는 글입니다.이번엔 하스켈의 유형중 타입에 대해 설명해봅니다. 타입은 크게 기본타입과 조합타입이 존재한다. 1. 기본 타입 Type 종류값Bool 타입True, FalseInt 타입0, 1, -6Char 타입'A', 'b', '!'String 타입"", "aabb"Double 타입0.0, -1.2, 5.7() 타입() 실제로 타입을 사용해보자. 슬프게도 티스토리에서 기본으로 하스켈 언어을 지원하지 않아서.. 추후에 코드 블럭을 만들어보겠음..b1 :: Bool -- b1 변수가 Bool 타입이라고 선언b1 = True -- b1 변수에 True 값을 대입i1 :: Int -- i1 변수가 Int 타입이라고 선언i1 = 20 -.. [Haskell]프로그래밍 언어론 - 하스켈 언어(2) - GHCI 와 Stack 본 글은 프로그래밍 언어론과 하스켈 언어에 대해 학습하는 글입니다. 하스켈은 프로젝트를 빌드하고 관리하는데 몇가지 유용한 툴을 제시한다. 1. GHCI하스켈은 본래 전통적인 프로그래밍 언어처럼 컴파일이 필요한 언어이다.(by ghc) 그런데 하스켈에서 제공하는 ghci 는 즉시 코드조각을 실행해볼 수 있는 REPL(Read-Eval-Print Loop) 환경이다. 이말은 기능적으로 인터프리터와 유사하게, 코드를 바이트코드나 중간표현으로 컴파일하여 즉시 실행할수 있게끔 지원한다. 2. stack 스택은 ... [Haskell]프로그래밍 언어론 - 하스켈 언어(1) - Compile, translate 본 글은 프로그래밍 언어론과 하스켈 언어에 대해 학습하는 글입니다. haskell 은 함수형 언어로 무엇보다 함수가 우선시 되는 언어이다. 함수형 언어라 하면, python과 같이 컴파일이 없고 인터프리터의 활용이 예상되지만 전혀 아니다. 하스켈은 GHC라는 컴파일러를 통해 여러 중간 변환을 거쳐 기계어가 되는데 다음은 그 절차에 대한 나열이다. 더보기1. 소스코드 전처리 : 주석 제거, CPP 확장(전처리기 지시자 변환 등) 2. 파싱 : 전처리된 코드를 파싱해서 AST 생성(소스코드 토큰화 및 구조 분석) 3. 타입검사 : AST에 대한 정적 타입 시스템 4. core 생성 : desugaring을 거쳐서 단순화된 함수형 언어 표현 생성 5. 최적화 : 함수인라이닝 및 재귀 최적화 등 최적화 기법 .. 블로그 첫글이 테스트글이라니.. 정말 낭만없군 이전 1 다음