Computer Science 387

OCaml | Reference call in OCaml

목표 : 아래 표현을 이해하기 let _ = reachable_locs := [] in let _ = loc_id := !loc_id + 1 in OCaml에서는 평소에 포인터를 쓰지 않고도 프로그래밍을 할 수 있다. 명시적 포인터가 필요한 경우는 드물다. 예를 들면, 고전적인 명령형 언어로 설명된 알고리즘을 OCaml로 번역할 때는(지금 내가 하려는 것) 명시적인 포인터가 필요하다. OCaml의 ref type ref 참조를 이용해서 reference call을 할 수 있다. 초기화 ref true ref 0 ref "foo" let eof = ref false in ... 대입 eof := true ref된 값을 업데이트하기 위해 := 연산자를 활용한다. !eof = false !(ref false)..

Garbage Collection의 정의와 알고리즘

메모리 재활용 Garbage Collection을 어떻게 정의할까? function gc(M) = 다음 프로그램 실행에서 쭉 사용되지 않을 메모리 M의 영역들을 재활용한다그러나 미래에 가보지 않고는 어떤 메모리의 영역들이 실행될 것인지 정확하게 알 수 없다. 그래서 대략 맞는 안전한 장치를 만들어낸다. 이때 이름을 통해서 메모리에 접근한다는 사실을 이용한다. M(E(x)), M(E(x)(age))그리고 현재 Env 환경이 이름에 들어있는 내용을 결정한다. 접근할 수 있는 메모리 영역은 현재 Env 환경에서 접근할 수 있는 영역과 같다. 이런 과정을 통해 fun gc는 다음과 같이 정의한다. fun gc(E, M) = E (Env)에서 접근할 수 있는 부분을 제외하고 M을 재활용한다. Mark & Swee..

컴퓨터과학이 여는 세계(이광근, 2015) 노트

컴퓨터과학이 여는 세계 - YES24 컴퓨터과학이 여는 세계 - YES24 컴퓨터/소프트웨어의 근본을 알려주는 교양과학서로 디지털 문명을 탄생시킨 동시대 청년 과학도 이야기이다. 정보이론, 암호, 개인인증 등 컴퓨터과학이 보여주는 풍경 아래 흐르는, 원천 아 www.yes24.com 고민할 부분 1. 알게된 점 2. 느낀 점 3. 떠오르는 질문들 01. 마음의 도구 02. 400년의 축적 컴퓨터의 디자인이 출현한 원조 논문의 배경과 내용(p.20) 컴퓨터는 20세기 수학자들의 큰 꿈이 철저하게 좌절되는 과정에서 나온 부산물이었다(p.25) 도대체 컴퓨터의 모델을 튜링기계라 부르고, 컴퓨터 분야의 노벨상을 튜링상이라고 부르는 연유는 뭘까? (p.27) 크루크 궤델의 불완전성 정리, '기계적인 방식만으론 수..

람다 대수 Lambda Calculus란 무엇인가? (ft. Church Encodings)

(참고) What is Lambda Calculus? (ft. Church Encodings) - YouTube what is lambda calculus 람다 계산법이란, 계산을 이해하는 한 가지 수학적인 모델이다. 람다 계산법은 3개의 간단한 규칙으로 구성된다. 람다 계산법은 Ocaml, Haskel 같은 함수형 프로그래밍 언어에 큰 영향을 주었다. lambda calculus의 규칙들 1. Variable 변수 x, y, z와 같은 변수를 둔다. 2. Abstraction 추상화 λ 람다 기호와 함께 무언가를 함수로 정의한다. 함수의 유일한 기본 데이터 형식은 함수이다. λ를 사용하는 기본적인 방식은 λ parameter.return 형태이다. 즉, λx.x는 f(x) = x를 표현하는 방식이며, ..

노마드코더 ReactJS | #3 State

#3 State 준비물 #3.0 Understanding State step 1. 바인딩 Total click : {counter} Click me step 2. UI 업데이트 function render(){ ReactDOM.render(, root);// 페이지에 위치시키기 } React.JS는 딱 변경된 부분만 업데이트된다. => 이걸 이용해서 인터렉티브한 웹을 만들 수 있다. #3.1 setState part One 1. 컴포넌트를 추가하고 싶을 때 {} 안에 넣으면 됨 2. UI를 업데이트하고 싶다면, render()를 호출할 것 리랜더링을 하는 더 효율적인 방식이 있을까? 어디에 데이터를 받을 수 있을까? 리액트 js에는 적절한 툴이 있음. const data = React.useState()..

한 권으로 읽는 컴퓨터 구조와 프로그래밍 | 3장 메모리와 디스크의 핵심 : 순차 논리

들어가며 순차 논리 Sequential Logic을 이용해서 "기억"이 생긴다 순차 논리 Sequential Logic은 "시간"을 만들어내고 "과거"를 기억하는 회로이다. "기억"이라는 목적을 달성하기 위해 어떤 기술이 만들어졌을까? 그 역사를 추적해보자. 시간 표현과 상태 기억 주기 함수를 이용하면 시간을 측정할 수 있다. 컴퓨터에서도 시간을 측정하기 위한 주기적인 전기 신호가 필요한데, 어떻게 신호를 만들어낼까? 발진자 osciliator 인버터(NOT)를 사용한 트릭 0이 들어갔다가 인버터를 지나 1이 되고 다시 1이 들어가면 인버터를 지나 0이 되고 를 무한 반복하는 feedback loop 결국 0과 1 사이를 무한히 oscillate (진동한다) 한다 크리스탈 발진자가 발진자를 만드는 효율적..

Unit Test | 유닛 테스트를 통해 신뢰할 수 있는 프로그램 만들기

참고 50. unittest - 단위테스트 ## 1. 테스트와 단위테스트 - 테스트란? - 소프트웨어가 요구사항에 의해 개발된 산출물이 요구사항과 부합하는지 여부를 검증하기 위한 작업 - 단위 테스트란? - 모듈 ... wikidocs.net [파이썬] 단위 테스트의 기본 (unittest) Engineering Blog by Dale Seo www.daleseo.com 컴공 수업을 들으면서, 신뢰할 수 있는 프로그램을 만드는 것이 중요하다는 걸 배웠다. 이를 위한 주요한 방법이 단위테스트인데, 안그래도 낯선 언어인 OCaml로 하자니 잘 손이 가지 않았다. 그래서 익숙한 언어인 파이썬으로 시작해보려고 한다!! unittest 단위테스트 단위테스트는 모듈이나 개별 코드가 예상대로 작동하는지 확인하는 과정..

드림코딩 엘리 | 어떤 기준으로 회사를 선택해야 할까?

내가 구글보다 스타트업을 선택한 이유 | 회사를 선택하는 방법 (feat. 플랫폼잉글리시) - YouTube #1 무엇을 만드는가? 회사에서 어떤 제품을 만들고 있는가? 구글 - 구글맵 스타트업 - 쉽게 디자인할 수 있는 소프트웨어 구글은 유지보수 + 기능 추가 처음부터 개발을 시작하는 건 드문 일이다. #2 어떤 스택을 사용하는가? 내가 잘 할 수 있는 스택인지 경력에 추가하고 싶은 스택인지 -> 마이너한 스택을 사용하고 있는 경우, 나중에 이직에 어려움을 겪을 수 있음 #3 누구와 일하는가? 팀원, 동료 개발 커뮤니티, 오픈챗 면접을 볼 때 확인할 수 있다. 면접을 보면서 회사를 판단할 수 있기도 하다. #4 어떻게 일하는가? 일하는 방식, 프로세스를 배워갈 수 있다. 개발 블로그가 있는지 확인해볼 ..

Computer Science 2022.04.08

한 권으로 읽는 컴퓨터 구조와 프로그래밍 | 15장 훌륭한 프로그래머가 되기 위한 팁과 경험담

들어가며 프로그래머가 된다는 것에 대한 철학적인 문제와 실용적인 문제 가치 제안 "내가 가치를 더하고 있는가?" 사이드 프로젝트를 통해 다양한 기술을 잘 배워두기 도구 만들기 - 가능하다면 기존 도구를 개선할 것 코드를 배포하는 생태계에 가치를 더하면서 생태계를 더럽히지 말 것 rule of least astonishment : 사용자 인터페이스/소프트웨어가 가능한 한 사람들의 예상과 다른 결과를 내놓지 말아야한다는 규칙 소프트웨어 개발의 발자취 간추린 역사 UNIX 운영체제 : 최소주의와 모듈화 => 첫번째 이식 가능한 운영체제가 되었음. PC : 1980년대 중반부터. FOSS Free and Open Source Software Copyleft : 다른 사람이 소프트웨어를 자유롭게 변경할 수 있도록..