<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title>LangDev</title>
		<link>http://langdev.net/board/discussion</link>
		<description>The latest posts from LangDev</description>
		<pubDate>Mon, 30 Aug 2010 17:33:53 +0900</pubDate>
		<item>
			<title><![CDATA[가입했습니다!]]></title>
			<link>http://langdev.net/post/359</link>
			<description><![CDATA[
	
<p>저는 웹 언어에 관심이 많습니다.</p>
<p>php, css, jQuery 말이죠.</p>
<p>이곳은 느무느무 어려워 보입니다!</p>
<p>아무튼 잘 부탁드립니다!</p>
]]></description>
			<author><![CDATA[엘카]]></author>
			<pubDate>Mon, 30 Aug 2010 17:33:53 +0900</pubDate>
		</item>
		<item>
			<title><![CDATA[질문글 “우린 실제로 이걸 소련에 팔아서 소련의 컴퓨터 과학기술을 20년이상 퇴보하게 만들 생각이었거든요.”]]></title>
			<link>http://langdev.net/post/358</link>
			<description><![CDATA[
	
<p>인용구</p>
<hr />
<p>for(;P(“\n”),R-;P(“|”))for(e=C; e-; P(“_”+(<em>u++/8)%2))P(“|”+(</em>u/4)%2);</p>
<p>현대의 프로그래머들이 이렇게 암호같은 문장을 허용하는 개떡같은 언어를 사용할 것이라고는 전혀 생각지 못했습니다.</p>
<p>그건 우리의 상식밖이었죠. 우린 실제로 이걸 소련에 팔아서 소련의 컴퓨터 과학기술을 20년이상 퇴보하게 만들 생각이었거든요.</p>
<hr />
<p>검색처: http://blog.bagesoft.com/340</p>
<p>C언어에 대해 C언어 및 UNIX 창시자인 Ritchie나 Kernighan이 한말이라고 하는것 같은데, 정말 설계자들이 보기에부터도 C언어의 구문형태가 암호같고 개떡같은가요?? 제가 보기엔 꽤나 간결하고 PHP, Java, Javascript같은 제가 알고 있는 많은 프로그래밍언어들이 C문법과 유사할 정도로 syntax design이 성공적이어 보이는데요?aa</p>
<p>liftrasiir님으로부터 여기에 대해 #langdev IRC채널에서 얼핏 들은말은, 그냥 농담으로써 C나 C++의 저자들은 다 부정하는 말이라는데 더 자세히 여기에 대해 듣고 싶어서 질문글을 올립니다..aa</p>
]]></description>
			<author><![CDATA[cartes]]></author>
			<pubDate>Sat, 28 Aug 2010 23:31:16 +0900</pubDate>
		</item>
		<item>
			<title><![CDATA[안녕하세요. 가입했습니다!]]></title>
			<link>http://langdev.net/post/357</link>
			<description><![CDATA[
	
<p>여기 주인장 홍민희님을 알게 되어서 구글링하다가 여기까지 흘러 들어왔습니다.</p>
<p>실력은 많이 부족하지만 앞으로 잘 부탁드립니다!</p>
]]></description>
			<author><![CDATA[김태훈]]></author>
			<pubDate>Mon, 09 Aug 2010 00:17:37 +0900</pubDate>
		</item>
		<item>
			<title><![CDATA[안녕하세요. 글만 읽다가 얼마 전 가입했습니다.^^]]></title>
			<link>http://langdev.net/post/356</link>
			<description><![CDATA[
	
<p>반갑습니다. ^^</p>
]]></description>
			<author><![CDATA[김현준]]></author>
			<pubDate>Wed, 04 Aug 2010 23:08:30 +0900</pubDate>
		</item>
		<item>
			<title><![CDATA[질문) Scala를 Yacc에서 알아먹도록 하고 있는데 …]]></title>
			<link>http://langdev.net/post/340</link>
			<description><![CDATA[
	
<p>갑자기 문득 Scala Lexer와 Parser를 구현해보고 싶다는 생각이 들어서… 구현중에 문의를 드립니다. 짧은 지식으로 할려고 하니 힘드네요…</p>
<p>ScalaReference.pdf파일에서 가져온 EBNF문법은 다음과 같습니다.</p>
<p>Path&nbsp;: [id ‘.’] ‘this’ | StableId</p>
<p>StableId&nbsp;: id | Path ‘.’ id | [id ‘.’] ‘super’ [‘[’ id ‘]’] ‘.’ id</p>
<p>인데… 보시면 아시겠지만 Shift/Reduce Conflict가 나도록 되어 있습니다. (공식 문서에 나온 문법도 모호성이 있는 문법을 쓰고 있고… Scala구현은 손수 Parser를 만드셨더군요…)</p>
<p>이것을 모호하지 않은 문법 즉, Conflict가 안나도록 바꿔야 하는데 ㅠㅠ 잘모르겠더군요 ㅠㅠ 도움을 주세요!(아니 용기를…)</p>
]]></description>
			<author><![CDATA[dyanos]]></author>
			<pubDate>Fri, 19 Feb 2010 11:19:08 +0900</pubDate>
		</item>
		<item>
			<title><![CDATA[OOP 언어 모음]]></title>
			<link>http://langdev.net/post/349</link>
			<description><![CDATA[
	
<p>&nbsp; 초기 OOP 언어 Smalltalk</p>
<p>스크립트 언어들이 받아들인 OOP Ruby Python</p>
<p>CLOS 스타일의 객체 시스템을 갖는 언어 Factor</p>
<p>대중적인 하지만 뭔가 아쉬운 언어들 Java C++</p>
<p>정적 언어이면서도 동적 언어의 특성을 갖는 언어들 Objective-C</p>
<p>프로토타입 OOP 언어 Javascript Lua</p>
]]></description>
			<author><![CDATA[wookay]]></author>
			<pubDate>Thu, 13 May 2010 08:20:38 +0900</pubDate>
		</item>
		<item>
			<title><![CDATA[땅콩 프로그래밍 언어]]></title>
			<link>http://langdev.net/post/354</link>
			<description><![CDATA[
	
<p>2명이서 약 3달간 틈틈히 만들던 언어가 있는데, 일단락(?)되어서 github에 저장소를 만들었습니다. 향후 몇년간(?) 틈틈히 업데이트 하고싶긴 합니다만, 몇달간은 손을 못 댈 것 같아서…(…)</p>
<p>아이폰/안드로이드/윈도모바일에서 사용하는게 목적이었기 때문에, lua처럼 C/C++과 섞어서 쓰는 것이 타겟이었고, 언어적 컨셉은 dynamic typing, prototype-based 입니다만, 별로 특징은 없고, “일단 돌아가는것”이 목적이었… 개발자 두명 다 바빠서 덕지덕지 붙여나가다보니, 코드는 좀 많이 개판이네요. ㅠㅠ 메모리 관리도 반쯤 포기 상태;; 사실은, 좀 많이 부끄러워서, 여기에 안 올리려고 했… -_-;; …지만, 그래도 일단은 올려봅니다. 나중에 업데이트 열심히 해서 만회하죠 뭐.</p>
<ol>
<li>설명&nbsp;: <a href="http://jong10.com/482">http://jong10.com/482</a></li>
<li>저장소&nbsp;: <a href="http://github.com/peanut-lang/peanut">http://github.com/peanut-lang/peanut</a></li>
<li>예제코드&nbsp;: <a href="http://github.com/peanut-lang/peanut/blob/master/example.pn">예제1</a>, <a href="http://github.com/peanut-lang/peanut/blob/master/example2.pn">예제2</a></li>
</ol>
<p>설계 없이 만들다보니, 몇가지 치명적인 실수가 있었는데, 가비지컬렉션이 절반만 되는 점;;과, 중간코드를 만들지 않아서 AST가 영원히 남아있는 치명적인 점이 있네요. REPL에서 문법이 한줄만 틀려도, 그 후로 계속 에러 복구가 안되기도 하고… yacc(bison)의 에러 복구 방법이 잘 안되더라고요. 엉엉.</p>
<p>p.s. 안정성은 좀 문제가 있어요. -_-; 툭하면 세그먼테이션폴트 ㅠㅠ</p>
]]></description>
			<author><![CDATA[종텐]]></author>
			<pubDate>Fri, 16 Jul 2010 11:20:33 +0900</pubDate>
		</item>
		<item>
			<title><![CDATA[C언어를 저만(한글화)의 프로그래밍 언어로 개발하고 싶습니다]]></title>
			<link>http://langdev.net/post/243</link>
			<description><![CDATA[
	
<p>예를들어</p>
<p>printf(“Hello World\n”); 이 있다면</p>
<p>출력하다&nbsp;:</p>
<p>“안녕 세상”</p>
<p>이런식으로 바꿔 저만(한글화)의 프로그래밍언어로 개발하고 싶은데… C언어로 개발해야 하니까 C언어로 API나 MFC로 만들어야 하나요??</p>
<p>비베언어도 C언어로 개발된 언어잖아요…(맞나? ㅎㄷㄷ)</p>
<p>아, 그리고 게시글 보니까</p>
<p>개발 언어는 어디까지 진행하시나요..? G: 문법규격까지만 제정 P: Parser까지도 구현 아마 메뉴얼도 만드실텐데 문서화 도구로서 어떤 것을 진행 혹은 염두하고 계신지요..?</p>
<p>문법규격, parser, 메뉴얼 이란건 또 뭔가요;;;</p>
<p>제가 만들어 제가 사용할 것이기 때문에 할거면 parser까지 구현과 메뉴얼도 만들꺼거든요„,(뭔진 모르겠지만…)</p>
<p>질문이 좀 많았는데 다 알려주시면 감사효 ㅠㅠ</p>
]]></description>
			<author><![CDATA[t00722]]></author>
			<pubDate>Sat, 17 Jan 2009 08:40:47 +0900</pubDate>
		</item>
		<item>
			<title><![CDATA[Factor 다루는 대학]]></title>
			<link>http://langdev.net/post/339</link>
			<description><![CDATA[
	
<p>Factor 다루는 대학교 간단히 정리 좀 합니다.</p>
<h1>프랑스 Telecom ParisTech</h1>
<p>INF355 Paradigmes et langages non classiques 관습에 얽매이지 않는 패러다임의 언어들 <a href="http://www.rfc1149.net/inf355/">http://www.rfc1149.net/inf355/</a></p>
<p>Articles에 대충 언급되는 언어로는</p>
<p>FACTOR, HASKELL, ADA, ERLANG, PROLOG, IO, LISP, SCHEME, PYTHON, RUBY, ICON, JAVA, SCALA, C++</p>
<ul>
<li>교수 홈페이지 Samuel Tardieu <a href="http://www.rfc1149.net/">http://www.rfc1149.net/</a></li>
</ul>
<h1>독일 Heilbronn University</h1>
<p>Software Engineering of Complex Systems</p>
<p><a href="http://denkspuren.blogspot.com/2010/01/factor-heilbronn-university.html">http://denkspuren.blogspot.com/2010/01/factor-heilbronn-university.html</a></p>
<blockquote>
<p>… During the project week, my students (about 30 persons) worked with Factor four out of five days almost 8 hours per day. For my students it was full contact combat with an almost unknown programming paradigm and an exotic language. But they did really well. On day 1, the students worked through the introductory material supplied with Factor. On day 2, we studied types and object-orientation in Factor. On day 3, parsing and macros were studied in Factor. For these two days, the students worked with tutorials and worked their way through a number of exercise, which required them to write tiny programs in Factor to pass unit tests. On day 4, we worked on a topic unrelated to Factor. On day 5, two students thoroughly presented their project work, a real-world application in Factor, they had done in another course in the previous semester. We concluded the week with discussing and reflecting Factor’s capabilities and the power of the concatenative paradigm in general.</p>
<p>Before I forget to mentioned it: Tim, research assistant in the software engineering department and PhD student, created the tutorials and the exercises and helped out a lot in class. Without him, the course wouldn’t have been possible! …</p>
</blockquote>
]]></description>
			<author><![CDATA[wookay]]></author>
			<pubDate>Fri, 29 Jan 2010 04:05:43 +0900</pubDate>
		</item>
		<item>
			<title><![CDATA[퍼키짱]]></title>
			<link>http://langdev.net/post/341</link>
			<description><![CDATA[
	
<p>일명 복 받은 사람들이 되겠습니다.</p>
<p>이런 코스가 필요한데..</p>
<p><a href="http://me2day.net/hyeshik/2010/02/20#00:56:25">http://me2day.net/hyeshik/2010/02/20#00:56:25</a></p>
<p>첫 번째 1월 9일 10시 20분~12시 45분 •공부모임 소개 •컴퓨터 •지식의 종류 •컴퓨터의 구조 •프로그램 내장형 컴퓨터 •메모리와 프로그램 실행 •프로그래밍 언어의 분류 •문법과 의미 •타입 •프로그래밍 •파이썬 깔기 •기본 연산 •(연습) 올해 나이 구하기 •비교 •변수 •조건 분기 •(연습) 루저 가려내기</p>
<p>두 번째 1월 23일 10시~12시 30분 •프로그래밍 •(연습) 나이, 이름, 루저 다시 해 보기 •블럭/조건분기 •(연습) T4 PNK 반응 농도식 계산하기 •루프 •(연습) 구구단</p>
<p>세 번째 1월 30일 10시~12시 30분 •컴퓨터 안에서의 숫자 나라~ •정수의 2진법 표현 •정수 덧셈 •2의 보수, 정수 뺄셈 •(연습) 2의 보수를 이용한 8비트 뺄셈 계산 •고정소수점 실수 •부동소수점 실수, IEEE754 연산 주의점 •프로그래밍 •문자열 포매팅 •(연습) PCR 시뮬레이션 •리스트 타입 •반복 •문자열 메쏘드: split, strip •(연습) miRNA 이름 목록에서 miRNA*, -3p miRNA 골라내기 •문자열 메쏘드 •파일 입출력 •(연습) miRBase hairpin.fa 에서 GGAG 모티프찾기</p>
<p>네 번째 2월 6일 10시~12시 30분 •논리회로 (1시간 동안 할 수 있는 곳까지만) •트랜지스터 •논리 게이트 •4비트 덧셈 회로, 캐리 •(연습) 캐리 룩어헤드 회로 설계해 보기 •RS래치 •클럭과 에지 트리거 •프로그래밍할 수 있는 논리 칩 (PLA, PAL) •(연습) 앞에서 설계한 회로 PAL로 변환하기 •프로그래밍 연습 •파일 입출력 더 연습 •(연습) BanI 이어붙이기 클로닝할 수 없는 miRNA 찾기 •(연습) 앞에서 찾은 miRNA도 클로닝할 수 있는 제한효소 골라주기 •딕셔너리 타입 •딕셔너리 반복 •(연습) CDS를 아미노산 서열로 번역하기 •(연습) CDS 받아서 코돈 최적화하기 (가장 많이 쓰이는 코돈만 쓰는 방법으로)</p>
<p>다섯 번째 2월 20일 10시~12시 30분 •프로그래밍 연습 •(연습) 소수성 분석으로 막단백질 위상 예측하기 •(연습) 피보나치 수열 •함수와 재귀호출 •(연습) 재귀로 구현한 피보나치 수열과 팩토리얼 •(연습) 재귀호출로 구현하는 간단한 RNA 2차구조 예측</p>
<p>여섯 번째 2월 27일 10시~12시 30분 •자료구조와 알고리즘 •스택 •큐 •(연습) BAS 플레이트 대여 순서 시뮬레이션 (환형 큐) •복잡도 •이분검색 •(연습) 이분검색으로 알맞는 버퍼 조성 추천하기 •이진검색트리 •(연습) 유전체에 정렬된 전사체 데이터에 주석달기 (입력과 트리 만드는 부분은 간단하게 템플릿으로 주어짐)</p>
<p>일곱 번째 3월 6일 10시~12시 30분 •트리 •(연습) neighbor joining으로 비슷한 seed를 가진 miRNA끼리 묶기 •정렬 •버블소트 •(연습) 버블소트 •머지소트 •time 모듈 •(연습) 머지소트, 시간재서 비교하기 •(연습) 서로 다른 세포에서 공통적으로 발현되는 miRNA 찾기 •(연습) mRNA, miRNA, rRNA, tRNA 등으로 분리되어 있는 정렬되어 있는 유전체 주석 (gff) 데이터 합쳐서 하나로 만들기</p>
<p>여덟 번째 3월 13일 10시~12시 30분 •정규표현식 •(연습) Trypsin으로 잘리는 최대 조각수 계산하기 •기초 정규표현식 •(연습) Trypsin 연습 정규식으로 다시 풀기 •(연습) TeV protease로 잘리는지 확인하기 •텍스트 파일 파싱 •(연습) PDB 파일 읽어서 서로 가까이에 있는 시스틴 쌍 찾기</p>
<p>아홉 번째 3월 20일 10시~12시 30분 •테스팅, 테스트 주도 개발 •프로그래밍 연습 •(연습) 숫자 영어로 읽기 •(연습) 만년 달력 그리기 •(연습) 스크래블 풀기</p>
<p>열 번째 3월 20일 10시~12시 30분 •동적 프로그래밍 •동적 프로그래밍을 이용한 퍼즐 풀기 알고리즘의 예 •Smith-Waterman 서열 정렬법 •다중 중첩 리스트/뮤터블 타입과 참조 •(연습) let-7 hairpin 서열 정렬하기 •(연습) 클로닝 중 시퀀싱한 데이터에서 정렬로 변이 금방 찾아내기</p>
<p>열한 번째 3월 20일 10시~12시 30분 •그래프 그리기 •matplotlib의 plot함수, scatter함수 •시스템 생물학 •주요 네트워크 모티프 •기본적인 선형미분방정식 세우기 •(연습) Dicer 절단과 RISC 로딩 과정 시뮬레이션 •시간차 지연을 포함한 선형미분방정식 세우기 •(연습) 음성 자가제어 되먹임 루프(negative autoregulatory feedback loop)를 구성하는 miRNA와 단백질 의 관계 시뮬레이션</p>
<p>열두 번째 3월 20일 10시~12시 30분 •파일 데이터베이스 •bsddb와 shelve •바이오파이썬 •SeqIO 모듈 사용법 •(연습) Illumina FastQ 파일 읽어서 나쁜 품질 리드 모두 버리고 리드 수 세기 •Pubmed 모듈 사용법 •(연습) 유방암과 가장 자주 같이 언급되는 miRNA 찾기 (shelve로 임시 저장 사용)</p>
<p>열세 번째 3월 27일 10시~12시 30분 •2세대 시퀀싱 •간단한 시장 상황 •데이터 분석 측면에서의 각 플랫폼별 특성 •샘플 준비 과정에서의 편향성 •프로그래밍 연습 •(연습) 작은RNA 시퀀싱 데이터에서 21U RNA 수 세기 •(연습) 작은RNA 시퀀싱 데이터 매핑하기 (bwa사용) •(연습) 여러 군데 매핑되는 리드를 뺀 리드수 세기 •(연습) 작은RNA 시퀀싱 데이터에서 mRNA 각각의 유래 조각수 세기</p>
<p>열네 번째 4월 3일 10시~12시 30분 •기초생물통계 분포 •균일분포, 포아송분포, 기하분포, 정규분포, 지수분포 •(연습) TBA •기초생물통계 가설검정 (1) •p-값 •t-검정 •(연습) TUT4를 KD했을 때 가장 유의미하게 늘어나는 miRNA 찾기</p>
<p>열다섯 번째 4월 10일 10시~12시 30분 •기초생물통계 가설검정 (2) •Mann-Whitney U-검정 •(연습) GGAG를 포함한 miRNA의 유리딘 첨가 경향의 유의미함 검정 •데이터 교환 •csv 읽고 쓰기 •(연습) 위에서 만든 프로그램을 모든 4염기 모티프로 확장해서 엑셀로 보내기</p>
<p>열여섯 번째 4월 17일 10시~12시 30분 •지속가능한 프로그램 (예시와 함께) •유지 가능한 소스코드 •이름 짓기 •함수, 모듈 인터페이스 설계 •중간파일/데이터베이스 저장 •(연습) TBA 중간파일이 유용한 사례 •모듈 •파이썬 모듈의 기본 개념 •(연습) TBA •패키지 구조 •(연습) TBA - 앞에서 만든 복잡한 프로그램 중의 하나를 패키지로 조금 과도하게 분해함</p>
<p>열일곱 번째 4월 24일 10시~12시 30분 •기초소프트웨어공학 •요구사항 분석, 의존성 분석 •(연습) TBA •프로젝트 진행 관리, 이슈 관리 •회고 •(연습) TBA •비교유전체학 데이터 다루기 •다중 서열 정렬, 데이터 다루기 •(연습) miRNA family의 seed 보존/비보존 miRNA 찾기 (pygr 사용)</p>
<p>열여덟 번째 5월 1일 10시~12시 30분 자유 팀 프로젝트</p>
]]></description>
			<author><![CDATA[wookay]]></author>
			<pubDate>Sat, 20 Feb 2010 10:32:36 +0900</pubDate>
		</item>
		<item>
			<title><![CDATA[Multi method for ruby]]></title>
			<link>http://langdev.net/post/342</link>
			<description><![CDATA[
	
<p>http://d.hatena.ne.jp/yuushimizu/20100316/1268755475</p>
<p>입니다.</p>
<p>멀티메서드라는 개념보다도, 그걸 구현하는데 사용된 루비 코드가 더 재밌어보이는건 왜일까요.</p>
]]></description>
			<author><![CDATA[mithrandir]]></author>
			<pubDate>Sat, 20 Mar 2010 22:00:46 +0900</pubDate>
		</item>
		<item>
			<title><![CDATA[함수형 언어 사용자 채용공고 (물론 국외입니다만 …)]]></title>
			<link>http://langdev.net/post/343</link>
			<description><![CDATA[
	
<p><a href="http://cufp.org/jobs">http://cufp.org/jobs</a></p>
<p>여기 여름 인턴쉽을 포함해서 새로 뜬 듯 한데 F#이 꽤 있군요.</p>
]]></description>
			<author><![CDATA[안기영]]></author>
			<pubDate>Fri, 09 Apr 2010 04:35:26 +0900</pubDate>
		</item>
		<item>
			<title><![CDATA[중위표현식과 메시징을 같은 문법으로 표현하고 싶은데요.]]></title>
			<link>http://langdev.net/post/344</link>
			<description><![CDATA[
	
<p>ruby에서의 1+2 는 <strong>1.+(2)</strong> 와 같죠. io에서는 <strong>1 +(2)</strong> 와 같고요. 원래는 괄호를 쓰지만, 수식에서만 syntax sugar인가봐요. 전 괄호도 없애고 싶어서.. 생각을 조금 해봤는데요.</p>
<p>보통, 메소드를 동사로 많이 구분하잖아요? 영문법에서, SVO 로 생각해보면,</p>
<p><strong>anObject.aMessage(파라미터)</strong> 라는 코드는,</p>
<pre>
<code>anObject : 주어
aMessage : 동사
파라미터 : 목적어
</code>
</pre>
<p>가 될 것 같네요.</p>
<pre>
<code>&lt;A&gt; student.drink(beer)
&lt;B&gt; student drink beer
</code>
</pre>
<p>대부분 A스타일로 표현되는 코드를 B스타일로 쓰면 어떨까 하고 생각해 봤어요. 이게, 파라미터가 한개일땐, 영어문장과 비슷한데, 여러개면, 콤마나 띄어쓰기로 구분이 필요하더라고요.</p>
<pre>
<code>&lt;B-1&gt; student drink beer, water
&lt;B-2&gt; student drink beer water
</code>
</pre>
<p>이런 두가지 방법이 있겠죠. 중간에 콤마가 나오면 이상하니깐, B-2 가 괜찮을 것 같고요. 눈으로 보기에 잘 구분이 안 가니깐, 메소드를 <strong>대문자</strong>로 시작해야 하고, 변수는 소문자로 해야한다고 강제할 수도 있겠네요. erlang은 변수를 대문자로 시작한다고 강제하잖아요. 컨벤션을 강제하는 것도 나쁘지 않다고 생각해요.</p>
<pre>
<code>&lt;A&gt; student.drink(beer, water)
&lt;B-3&gt; student Drink beer water
</code>
</pre>
<p>이걸 주변 사람들 몇명에게 물어봤더니, 어렵(?)다고 하네요. ㅠㅠ 기존의 A스타일이 B-1, B-2, B-3 스타일보다 눈에 훨씬 잘 들어온다고. (학습된 이유도 있긴 하겠지만요.). 에디터에서 syntax highlighting이 된다면, (주어/동사/목적어의 색깔을 달리 한다면) 그렇게 나쁘지만은 않을 것 같긴 한데.. 어떤가요?</p>
<p>이렇게 하는 것의 장점은, 중위표현식을 같은 문법으로 표현이 가능하다는 거죠. Syntax Sugar 없이.</p>
<p>즉, <strong>1 + 2</strong> 라는 중위표현식은,</p>
<pre>
<code>1 : object(리시버, 주어)
+ : 메소드(동사)
2 : 파라미터(목적어)
</code>
</pre>
<p>..인거죠. ruby에서 실제로는 1.+(2) 인 것과, io에서 실제로는 1 +(2) 인 것과 다르게요. student Drink beer water 와 같은 파서로 처리할 수 있겠죠. 물론, 파라미터가 2개 이상이면, 1 + 2&nbsp;3 이렇게 되서 곤란하겠지만, <strong>+ 메소드</strong>에서, 파라미터를 하나만 받기로 하면 상관 없겠죠.</p>
<p>근데, 흠.. 가만 보면, 그냥 단지, 주어만 달린 Lisp 같기도 하고, 주어나 동사나 목적어에, 다른 expression이 들어온다면, 괄호가 필요할 수 밖에 없고.. 좀 애매하긴 해요. 단지, 중위표현식과 메시징을 <strong>이쁘게</strong> 같은 문법 안에 넣고 싶을 뿐인데, 잘 안되네요.</p>
<p>….. 정말 이상한가요?; 뭔가 괜찮은 방법 없을까요.</p>
]]></description>
			<author><![CDATA[jong10]]></author>
			<pubDate>Tue, 13 Apr 2010 05:56:31 +0900</pubDate>
		</item>
		<item>
			<title><![CDATA[정적 타입 언어에서의 덕타이핑.]]></title>
			<link>http://langdev.net/post/347</link>
			<description><![CDATA[
	
<p>안녕하십니까. 그간 눈팅으로 많은 것들을 배우다가 처음으로 글을 올려봅니다.</p>
<p>요즘 관심사 중 하나가 정적 타입 언어에서 효율적인 덕타이핑을 구현할 수 있는가입니다. 여기에서 효율적이라 함은 실행 시간에서 유한한 단계 내로, 즉 O(1)의 시간 복잡도로도 효율적으로 해당 함수를 호출할 수 있음을 의미하고, 정적 타입이라 함은 (유보되었지만) C++0x의 컨셉트와 비슷하게 타입 체킹까지 컴파일 시점에 완전하게 이루어짐을 의미합니다. 물론 모든 클래스-모든 함수 심볼에 대한 2차원 함수 포인터 배열을 만들면 무척 간단하게 구현이 가능합니다만 이건 제외하도록 합시다 OTL</p>
<p>이에 대해 관심을 가지는 이유로는 타입 안전성의 우월함 때문… 은 아니고 남들도 다 할 수 있는 주제는 별로 재미가 없어서 그렇습니다. (…) 그리고 정적 타입 언어의 지향점 중 하나가 요구 인터페이스와 구현 인터페이스의 우아한 분리인데, 덕 타이핑이 그 끝에 닿아있기 때문이죠.</p>
<p>일단 일반적인 OOP의 다형성 구현은 가상 함수 테이블을 이용하는데, 이 경우는 적용 가능한 모든 타입들에 대해 가상 함수들이 가지는 vtable상의 오프셋이 완전히 일치하기 때문에 1번의 간접 호출만으로 원하는 함수가 불려 나오는, 비교적 효율적인 구현이 가능합니다. 하지만 덕타이핑으로 넘어간다면 이렇게 간단한 해법이 나오질 않습니다.</p>
<p>이에 대해 C++0x의 컨셉트(이건 보류되었지만요.) 및 타 언어의 유사 기능들은 아예 각각의 타입들에 대해 똑같은 코드 판본을 찍어내는 방식으로 대응합니다. 하지만 이 경우는 코드 비대화가 발생하죠. 물론 수행 시간에 어휘 심볼들을 일일히 뒤지는 것보단야 효율적이겠지만.</p>
<p>Go 같은 경우도 덕타이핑을 구현했다고 해서 구경을 해봤는데, 어떻게 구현을 했는지는 잘 모르겠습니다. Haskell의 타입 클래스 역시 비슷한 느낌이지만 역시나 구현이 어떻게 되었는지는 잘 모르겠네요.</p>
]]></description>
			<author><![CDATA[summerlight]]></author>
			<pubDate>Sat, 08 May 2010 16:46:23 +0900</pubDate>
		</item>
		<item>
			<title><![CDATA[Haskell로 만들어본 초간단 G-Machine]]></title>
			<link>http://langdev.net/post/348</link>
			<description><![CDATA[
	
<p><a href="http://research.microsoft.com/en-us/um/people/simonpj/papers/pj-lester-book/">Implementing Functional Languages&nbsp;: a tutorial</a> 에 있는 G-Machine도 꽤나 복잡해서 조금 더 간단하게 만들어봤습니다. 정확하게 따지자면 G-Machine과 동작이 약간 다릅니다. 그래도 개념은 완전히 같으니 그냥 G-Machine이라고 하는게 맞을 것 같네요. 원래 처음부터 C++로 작성하다가 꿈이 너무 높아서 좌절하던 와중에, 더 간단한 버전을 만들기 위한 노력의 결과물입니다.(그래봐야 어제 하루) 이제는 C++로 어떻게 만들어야할지 좀 감이 올 것 같네요.</p>
<p>모듈이름은 세모(semo)입니다. 원래 셈모(셈하는 기계)라고 할려고 했는데, 어감이 안좋아서 그냥 세모로 했지요. 앞으로 semmal에 abstract machine이 올라간다면 그 이름은 세모입니다.</p>
<p>compiler는 만들지 않았습니다. 단지 G-Machine만 테스트하기 위한 코듭니다. 초간단 lexer와 parser는 만들었는데, indentation때문에 고민중이라서 compiler까지는 못나가고 있어요. keyword(또는 key operator)가 거의 없는 syntax를 만들려고하니 보통 문제가 아닙니다. 죽기전까지 만들 수 있을라나 모르겠네요.</p>
<pre>
&gt; eval initState
</pre>
<p>하면 답을 구할 때까지 실행한 기계 상태가 모두 나옵니다.</p>
<p>대충 설명하자면</p>
<pre>
Main = S K I 3 -- 이건 주석처리중
Main = If False 4 3
</pre>
<p>Main함수는 이걸 처리합니다.</p>
<pre>
S f g x = f x (g x)
K x y = x
I x = x

If p c a = p c a
True c a = c
False c a = a
</pre>
<p>이런 함수(supercombinator)가 이름자리(namespace)에 들어가 있고, 이름자리에 있는 이름과 heap에 있는 함수의 index는 대응합니다. G-Machine은 코드를 뒤에서부터 만드는데, 제껀 앞에서부터 만듭니다. stack spine의 방향이 반대라고 보는게 맞을지도 모릅니다. 이편이 훨씬 보기 쉬워서 그렇게 만들었습니다. 또한 G-Machine의 Push 명령도, Pusharg로 바꾸고 스택에서의 높이를 입력하게 만듭니다. 그래서 조금 더 스택을 해석하기 쉽습니다.</p>
<p>이를 위해서, 인자의 차례도 바뀌었는데요.</p>
<p>If p c a</p>
<p>에서 맨마지막 인자가 index 0을 부여받고, c와 p가 1, 2를 부여받아서 Pusharg가 동작하게 됩니다.</p>
<p>이렇게 하면 partial application이나 다른 확장에 대한 고려가 없기 때문에, 나중에 문제가 생길 수 있다는 거겠지요. 그러면 또 완전히 재작성해야할 수도 있겠네요. 생각하면 머리가 복잡해져서 일단 머리속에서는 지웠습니다.</p>
<pre>
module Semo where

type IntValue = Int
type Index = Int
type Number = Int
data Instruction
    = Pushname String
    | Pushlit IntValue
    | Pusharg Index
    | MkAp
    | Unwind
    | Slide Number
    deriving Show

data Node
    = SC Number [Instruction]
    | Lit IntValue
    | Ap Index Index
    deriving Show

initCode = [Pushname "Main", Unwind]
--heapMain = SC 0 [Pushname "S", Pushname "K", MkAp, Pushname "I", MkAp, Pushlit 3, MkAp, Slide 1, Unwind]
heapMain = SC 0 [Pushname "If", Pushname "False", MkAp, Pushlit 4, MkAp, Pushlit 3, MkAp, Slide 1, Unwind]
heapS = SC 3 [Pusharg 2, Pusharg 0, MkAp, Pusharg 1, Pusharg 0, MkAp, MkAp, Slide 4, Unwind]
heapK = SC 2 [Pusharg 1, Slide 3, Unwind]
heapI = SC 1 [Pusharg 0, Slide 2, Unwind]
heapIF = SC 3 [Pusharg 2, Pusharg 1, MkAp, Pusharg 0, MkAp, Slide 4, Unwind]
heapTRUE = SC 2 [Pusharg 1, Slide 3, Unwind]
heapFALSE = SC 2 [Pusharg 0, Slide 3, Unwind]
initState = (initCode,[],[heapMain,heapS,heapK,heapI,heapIF,heapTRUE,heapFALSE],["Main","S","K","I","If","True","False"])

code (c,s,h,n) = c
stack (c,s,h,n) = s
heap (c,s,h,n) = h
name (c,s,h,n) = n

setCode c' (c,s,h,n) = (c',s,h,n)
setStack s' (c,s,h,n) = (c,s',h,n)
setHeap h' (c,s,h,n) = (c,s,h',n)
setName n' (c,s,h,n) = (c,s,h,n')

addr i ss = ss!!i
arg i ss = (reverse ss)!!i

slide 0 ss = ss
slide i ss = slide (i-1) (init ss)

eval ([],[],[],[]) = []
eval s = s:eval (eval' s cs)
    where
        cs = code s
        eval' state [] = ([],[],[],[])
        eval' state code@(Pushname nm:cs) = setCode cs $ setStack ((findName nm (name state)):(stack state)) state
        eval' state code@(Pushlit i:cs) = setCode cs $ setHeap ((heap state)++[Lit i]) $ setStack ((length (heap state)):(stack state)) state
        eval' state code@(Pusharg i:cs) = let ss = stack state in setCode cs $ setStack ((arg i ss):ss) state
        eval' state code@(Unwind:cs) =
            case findHeap (addr 0 (stack state)) (heap state) of
                sc@(SC _ _) -&gt; setCode ((sccode sc)++cs) state
                Lit _ -&gt; setCode cs state
                ap@(Ap s0 s1) -&gt; let (s:ss) = stack state in setStack (s0:s1:ss) state
        eval' state code@(MkAp:cs) = let (s1:s0:ss) = stack state in setCode cs $ setHeap ((heap state)++[Ap s0 s1]) $ setStack ((length (heap state)):ss) state
        eval' state code@(Slide n:cs) = setCode cs $ setStack (slide n (stack state)) state

findName n ns = findName' n ns 0
    where
        findName' n' (n:ns) c | n == n' = c
        findName' n' (n:ns) c = findName' n' ns (c+1)


sccode (SC n is) = is

findHeap i hs = hs!!i
</pre>
]]></description>
			<author><![CDATA[semmal]]></author>
			<pubDate>Sun, 09 May 2010 17:53:46 +0900</pubDate>
		</item>
		<item>
			<title><![CDATA[프로그래밍 언어를 음악 장르에 비유한다면?]]></title>
			<link>http://langdev.net/post/345</link>
			<description><![CDATA[
	
<p>각각의 프로그래밍 언어가 어떤 음악 장르에 어울린다고 생각하시나요? 랑데브가 한산해서 그냥 한 번 운을 띄워봤습니다. ^^;;</p>
]]></description>
			<author><![CDATA[wooil]]></author>
			<pubDate>Fri, 30 Apr 2010 11:09:37 +0900</pubDate>
		</item>
		<item>
			<title><![CDATA[(간단한) 컴파일러 구조 r1]]></title>
			<link>http://langdev.net/post/346</link>
			<description><![CDATA[
	
<p>이번 학기에 컴파일러 수업을 듣고 있는데 수업 자료에 나와 있던 컴파일러 구조를 올려봅니다. 한 번에 모두 정리하려면 시간이 오래 걸릴 것 같아 위키에 올리고 천천히 수정하고 싶은데 현재 광고글 때문에 거의 관리가 되지 않고 있어서 게시판에 올립니다.</p>
<pre>
<code>               | 
               | Source Code 
               | 
+--------------V--------------+
|  Lexical Analyzer (Scanner) |
+-----------------------------+
               | 
               | Tokens
               | 
+--------------V--------------+
|   Syntax Analyzer (Parser)  |
+-----------------------------+
               | 
               | Abstract Syntax Tree (AST)
               | 
+--------------V--------------+
|      Semantic Analyzer      |
+-----------------------------+
               | 
               | Decorated AST
               | 
+--------------V--------------+
| Intermediate Code Generator |
+-----------------------------+
               | 
               | Intermediate Representation (IR)
               | 
+--------------V--------------+
|        Code Optimizer       |
+-----------------------------+
               | 
               | Intermediate Representation (IR)
               | 
+--------------V--------------+
|        Code Generator       |
+-----------------------------+
               | 
               | Target Assembly Program
               | 
               V
</code>
</pre>
<h2>Lexical Analyzer (Scnner)</h2>
<p>소스 코드의 문자를 토큰으로 묶습니다.</p>
<pre>
<code>tax = (sale - purchase) * rate
</code>
</pre>
<p>위와 같은 소스 코드는 다음과 같은 토큰이 됩니다.</p>
<ol>
<li>&lt;id, “<code>tax</code>“&gt;</li>
<li>&lt;=&gt;</li>
<li>&lt;(&gt;</li>
<li>&lt;id, “<code>sale</code>“&gt;</li>
<li>&lt;-&gt;</li>
<li>&lt;id, “<code>purchase</code>“&gt;</li>
<li>&lt;)&gt;</li>
<li>&lt;*&gt;</li>
<li>&lt;id, “<code>rate</code>“&gt;</li>
</ol>
<p>토큰은 위에서 보여진 토큰의 종류(위에서 id, =, - 등)와 어휘소(lexeme)로 구성이 되며 이외에도 토큰의 위치(시작 줄과 열(column), 마침 줄과 열) 정보도 포함이 됩니다.</p>
<hr />
<p>앞으로 틈나는대로 내용을 채울께요. 지금은 나가봐야 해서. ^^;</p>
]]></description>
			<author><![CDATA[엽우]]></author>
			<pubDate>Mon, 03 May 2010 19:29:30 +0900</pubDate>
		</item>
		<item>
			<title><![CDATA[RealWorld Haskell]]></title>
			<link>http://langdev.net/post/350</link>
			<description><![CDATA[
	
<p>나름대로 번역 중입니다… http://sites.google.com/site/endihom/home/programming-language/haskell</p>
]]></description>
			<author><![CDATA[andyw]]></author>
			<pubDate>Tue, 25 May 2010 21:31:19 +0900</pubDate>
		</item>
		<item>
			<title><![CDATA[방금 가입했어요! ㅋ]]></title>
			<link>http://langdev.net/post/351</link>
			<description><![CDATA[
	
<p>갑자기 프로그래밍언어는 어떻게 만드는건지 궁금해졌거든여</p>
<p>PHP같은 오픈소스 웹언어를 만들어 보고 싶었거든여ㅋ</p>
<p>가장궁금한게 기본적으로 어떤 프로그램으로 어떻게 하는지 기본적인 예제좀 알려주심 감사하겠습니다 ㅎ</p>
<p>예를들면 print(“abcd”);</p>
<p>이 메서드를 어떻게 구현하고 어떤식으로 작동하는지에 대해서요 ㅎ</p>
]]></description>
			<author><![CDATA[박씨]]></author>
			<pubDate>Thu, 24 Jun 2010 17:53:51 +0900</pubDate>
		</item>
		<item>
			<title><![CDATA[orca 0.3 release & 스터디 모임 모집]]></title>
			<link>http://langdev.net/post/352</link>
			<description><![CDATA[
	
<p>재미삼아 만들기 시작한 프로그래밍 언어가 이번에 0.3 버전까지 릴리즈 했습니다.</p>
<p>[릴리즈 공지] http://orca-lang.or.kr/phpBB3/viewtopic.php?f=6&amp;t=98</p>
<p>상세한 스펙은 튜토리얼을 참조하시면 되고, 이번에 추가된 기능은 포럼, 알림판의 게시글을 참조해주세요.</p>
<p>[튜토리얼] http://orca-lang.or.kr/phpBB3/viewtopic.php?f=6&amp;t=6</p>
<p>그리고, 이제 언어와 관련하여 스터디 모임을 하나 개설하고자 합니다. 사실 스터디 모임을 개설해 보거나, 이끌어 본적이 없어서 초기에는 좀 혼돈이 있을 것 같습니다만, 나름 색다르고 재미있는 경험이 되실거라 생각합니다.</p>
<p>관심있으신 분은 아래의 글을 참조해 주세요. ^^</p>
<p>[관련공지] http://orca-lang.or.kr/phpBB3/viewtopic.php?f=6&amp;t=99</p>
]]></description>
			<author><![CDATA[이기열]]></author>
			<pubDate>Mon, 28 Jun 2010 02:43:03 +0900</pubDate>
		</item>
	</channel>
</rss>
