태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

'd'에 해당되는 글 2건

  1. 2011.07.12 D2, array.reverse property has a side-effect. orz (45)
  2. 2011.05.15 Thrift in D (6)

D2, array.reverse property has a side-effect. orz

Tech 2011.07.12 17:29
얼마 전 코딩도장에서 N-Queen 문제를 손대본 적이 있다. 유명하고 어려운 문제라서 많은 사람들이 도전했고, 그만큼 효율적인 코드도 많이 알려져 있다. ... 코딩도장에서는 나이브하게 Coffeescript로 만들어 보고, 집에 와서는 요즘 연습 중인 D로 다시 만들어 보았다.

속도를 위한 최적화는 별로 없고, 그냥 무난하면서 Out-of-memory를 띄우지 않을 정도의 코드만 만들고 끝내야지 ~ 했는데, 테스트가 계속 실패한다. 각 Row에서 퀸의 위치를 Bit flag로 나타내는 식으로 보드를 저장하고 있었고, 실패하는 코드는 "현재 Queen의 위치 리스트" + "이번 Row에 놓고 싶은 Queen의 위치" 를 받아서 유효한지를 돌려주는 함수 부분이다.

테스트는 그냥 가볍게 이번에 놓고 싶은 Queen의 위치 - Row, Col - 에서 위로 한칸씩 올라가며 3개씩 확인하는 방식으로 했다.

(Row-1, Col), (Row-1, Col-1), (Row-1, Col+1)
(Row-2, Col), (Row-2, Col-2), (Row-2, Col+2)
...
(Row-k, Col), (Row-k, Col-k), (Row-2, Col+k)

이렇게 지금까지 놓인 Queen의 위치 리스트를 역으로 올라가면서 테스트를 하고 싶어서 이런 코드를 만들었다.

bool validate(in uint[] cur, in uint c) {
   uint l=c, r=c;
   foreach(uint _c; cur.reverse) {
       if (_c&c | _c&(l<<=1) | _c&(r>>=1))
           return false;
   }
   return true;
}

cur.reverse 가 뒤집힌 녀석을 리턴하는건지, 스스로를 뒤집는건지 잘 모르겠지만 cur 에 변화가 있다면 저기 달아놓은 in qualifier 가 못한다고 말해주겠지 - 라고 생각했다. in 은 const 를 강제하니까. 그리고 이녀석은 컴파일이 된다. 헤헤 안심 ~하고 다음으로 넘어가보자 했는데 ... 계속 테스트가 실패하네?

알아보니 reverse는, 1. 스스로를 뒤집고, 2. 그 뒤집은걸 리턴, 도 하는 녀석이다. 배열의 property 를 참조하면 배열 자체가 뒤집혀 버리는 상황. -_-; 뭐 이래? 거기까지면 괜찮은데 왜 컴파일이 된거야?. 어이가 없어서 위의 in 을 immutable 로 고치고 테스트 했는데, 역시 컴파일이 되고 실행도 된다. 아놔... ;; 결국 side-effect가 있는 property는 immutable, const 를 그냥 씹어 드신다는 뜻.

짧게 정리하면, 

import std.stdio;

int main() {
    immutable uint[] a=[1,2,3]; writeln(a); a.reverse; writeln(a);
    return 0;
}

이 코드가 컴파일+실행된다는 사실을 발견. ... 실행하면 [1, 2, 3] [3, 2, 1] 을 차례로 찍는다. 뭐라굽쇼? property 에 대해서는 수정 불가 조건을 검사하지 않는 것 같은데, 그 property가 side-effect 만땅 ... 이라는 암울한 상황이다. IRC에 가서 물어봤더니 돌아오는 대답은,

  1. Looks like a bug
  2. Those properties like reverse, sort will be deprecated.

였다. 으으, 아직 D 두번째 스펙이 불안정하다고는 하지만 이건 좀 지나친 거 아닌가 싶기도 하고.

-----
D 2.053, 2.054 에서 확인.

'Tech' 카테고리의 다른 글

Amazon glacier ... 를 쓸 뻔 했던 이야기  (0) 2012.08.23
회사일 하면서 삽질하거나 느낀거 끄적  (2) 2012.08.10
D2, array.reverse property has a side-effect. orz  (45) 2011.07.12
Thrift in D  (6) 2011.05.15
fix: ugly gitweb page  (3) 2010.12.12
(1/2) Programming in clojure  (4) 2010.08.08
Trackbacks 0 : Comments 45
  1. 이터모리 2011.07.13 11:17 Modify/Delete Reply

    내부적으로 idup을 써버렸으면 패스겠지..ㅎㅎ

    • Favicon of http://deisys.net dgoon 2011.07.13 13:16 Modify/Delete

      idup 넣어서 돌아가는거 확인했었음. 근데 그거 느려 ...

  2. 이터모리 2011.07.13 16:42 Modify/Delete Reply

    어쨌든 원했던 것은 reverse_iterator 같은 거였나..?
    n-queen 문제 재미 없어서 안풀어봤는데.. 효율적인 코드 구경도 못해봤네..
    bitset으로 풀면 재밌겠다. ㅎㅎ

    • Favicon of http://deisys.net dgoon 2011.07.13 17:51 Modify/Delete

      빠른 코드 만드는거 생각보다 만만하지 않더라고 ... ㅋㅋ

  3. Favicon of http://etermory.blogspot.com/ 이터모리 2011.07.14 14:16 Modify/Delete Reply

    http://etermory.blogspot.com/2011/07/n-queen-problem.html
    처음 생각한 bitset을 이용한 방법으로 한 번 풀어봤어.
    컴파일러가 없어서 http://codepad.org/ 를 이용해서 11까지는 돌려봤는데..
    그 뒤로는 Timeout 나와서 죽는지 안 죽는지 몰겠다.

    • Favicon of http://deisys.net dgoon 2011.07.14 17:18 Modify/Delete

      codepad로 돌려볼 수도 있는거였냐? 근데 D는 Spec1 이라 안되네 ㅋㅋ 난 http://git.dgoon.net/?p=kata.git;a=blob;f=NQueen/nqueen2.d 이렇게 했음

    • Favicon of http://edmedsinfo.com/ Deliverance 2013.01.15 23:40 Modify/Delete

      car insurance quotes hikkh online auto insurance quotes 32969 life insurance :OOO buy propecia in usa 2362

    • Favicon of http://www.quotesfromtopinsurers.com/ Delphia 2013.01.19 20:04 Modify/Delete

      carinsurance %-PP car insurance quotes 8( propecia zup

    • Favicon of http://www.bestautoinsurancepolicies.net/ Jacalyn 2013.01.21 11:47 Modify/Delete

      life insurance 05238 cheap auto insurance 88062 nj car insurance vephc

    • Favicon of http://www.carinsuranceiseasy.com/ Zyah 2013.01.24 11:39 Modify/Delete

      car insurance quotes vvtvhu no exam life insurance pext nj car insurance kax

    • Favicon of http://www.treatpatternhairloss.com/ Elly 2013.01.25 03:17 Modify/Delete

      car insurance quotes :-( cheap auto insurance >:(( life insurance 445382 car insurance :(((

    • Favicon of http://www.treatmentsguide.net/ Snow 2013.02.01 10:47 Modify/Delete

      viagra online >:-(( free car insurance quotes 8-((( online auto insurance 747

    • Favicon of http://www.treatbacterialinfections.com/ Minerva 2013.02.03 20:15 Modify/Delete

      auto insurance quotes 67836 amoxicillin cheap drug renova ultram huja buy cialis 35953 buy cialis 85879

    • Favicon of http://www.edguidanceonline.com/ Deejay 2013.02.03 20:15 Modify/Delete

      nexium %-(( infinity auto insurance cqx classic car insurance wcgm buy cialis rtjm

    • Favicon of http://www.menshealthprice.com/ Kayleigh 2013.02.03 20:15 Modify/Delete

      buy valtrex on web 48077 doxycycline 8-OOO amoxicillin cheap drug renova ultram drl

    • Favicon of http://www.buyfirstmedication.com/ Trixie 2013.02.03 20:16 Modify/Delete

      generic viagra caverta sildenafil for 80917 buy online physicians cialis cuu cheap accutane online qaxey amoxicillin cheap drug renova ultram gfmx

    • Favicon of http://www.edgenericmedication.com/ Ronalee 2013.02.07 03:12 Modify/Delete

      lasix eocc sildenafil oral =-D acyclovir :D buy viagra 8[

    • Favicon of http://www.treatallergicdisorder.com/ Tyanne 2013.03.08 08:48 Modify/Delete

      cheap cialis 352 buy cialis %) a auto insurance :P

    • Favicon of http://www.lowestdrugprices.net/ Maryland 2013.03.15 09:46 Modify/Delete

      car insurance quote :]]] online bachelors degree xgrsgb sildenafil 8-(

    • Favicon of http://www.actionaid-nigeria.org/ Dotty 2013.03.22 22:27 Modify/Delete

      accutane >:-DDD sildenafil tknt best buy generic viagra ctrync buy viagra online ebjos

    • Favicon of http://www.edmedicationguide.com/ Lavon 2013.03.25 20:00 Modify/Delete

      car insurance quotes 558680 order cialis online 68844 auto insurance quotes 7520 cialis online %(((

    • Favicon of http://www.apwaspring2012wa.org/ Kayleigh 2013.03.29 01:50 Modify/Delete

      viagra =O cheapest cialis 33437 cheap viagra 8-((( auto insurance online 56820 cheap auto insurance 018756 cheapest auto insurance qeeas

    • Favicon of http://www.getyourquotesonline.com/ Kiana 2013.05.04 23:09 Modify/Delete

      viagra =[[ cheap car insurance uheuq degrees online cozmia cheap auto insurance >:-DDD affordable auto insurance knmm

    • Favicon of http://www.carinsurcompanies.com/ Jodecy 2013.05.08 12:39 Modify/Delete

      where to buy levitra 970 car insurance leqegf buy viagra 484 cheap auto insurance %PP cialis osn car insurance rates >:-DDD

    • Favicon of http://www.medspricechart.com/ Woods 2013.05.11 23:59 Modify/Delete

      cialis kzqvf cialis 917833 cheap car insurance 8[[[ price of cialis abfn car insurance online >:PPP Acheter du cialis ktz

    • Favicon of http://www.edmedsonline4you.com/ Lorene 2013.05.17 22:40 Modify/Delete

      buy viagra cheap wsfg car insurance quotes seecix buy viagra =O levitra viagra munhhg cialis :[ new york car insurance >:[[[ cheap auto insurance irdnt

    • Favicon of http://www.searchinsurancedeals.com/ Flip 2013.05.21 03:58 Modify/Delete

      viagra 8(( sildenafil qdsopj car insurance quotes 669 car insurance quotes %O state auto insurance %(((

    • Favicon of http://www.compareedmedsprices.com/ Buck 2013.05.21 03:58 Modify/Delete

      Cialis online 8DDD generic propecia 8]] viagra on line 8[[[ state auto insurance %-[[ car insurance quotes 8-PP Acheter du cialis >:P

    • Favicon of http://www.usaglobalquotes.com/auto-insurance-quotes-missouri.html Katty 2013.05.23 11:00 Modify/Delete

      buy viagra bdx cheap car insurance >:-PPP auto insurance quotes 116 buy propecia 5mg bidphn auto insurance online :(((

    • Favicon of http://www.getyourerectionsback.com/ Lavar 2013.05.31 04:25 Modify/Delete

      buy cialis online =-PPP where to buy prednisone :-]] auto insurance quotes 260218 auto insurance quotes 0984 cialis 183 Des Moines car insurance quotes 3786

    • Favicon of http://www.yourcarinsurancequotes.net/ Elyza 2013.06.02 21:19 Modify/Delete

      accredited online colleges 4523 best buy generic viagra qoxyb car insurance online >:-(( cialis gwcuzq car insurance rates ddqygp

    • Favicon of http://www.edmedspartners.com/ Randhil 2013.06.02 21:19 Modify/Delete

      buy viagra 25mg kqwjl how does viagra work eahl omaha poker hands %OOO auto insurance quotes IN dinl cheapest car insurance fvxtkx

    • Favicon of http://www.bestqualityedtreatment.com/ Lorin 2013.06.05 02:32 Modify/Delete

      life insurance quotes 012 levitra buy >:O cialis online qmw levitra 94926 viagra >:] good hands in poker 2670

    • Favicon of http://www.topallergytreatment.com/ Taimi 2013.06.12 04:27 Modify/Delete

      accutane %PPP buy viagra 5254 sildenafil vogq Chicago cheap car insurance 6910 ordering viagra :-PP cheap auto insurance njcw

    • Favicon of http://www.amarzauto.com/ Candie 2013.06.18 01:26 Modify/Delete

      car insurance quotes Tennessee =) auto insurance quotes 451 automobile insurance discount yxcayn auto insurance quotes online 8672 buy viagra %-]] car insurance online 91505

    • Favicon of http://www.compareinsuroffersonline.com/ Kevlyn 2013.06.20 10:13 Modify/Delete

      car insurance free quotes 920980 cheap car insurance Utah :-DDD insurance auto auctions 27069 buy cialis 3052 auto insurance quotes Billings mzk Auto Insurance qoutes =]] best car insurance quotes dvn

    • Favicon of http://www.obs-dfw.org/ China 2013.06.28 12:40 Modify/Delete

      online college degree jaeps online colleges 4359 free online auto insurance quotes apnr car insurance quotes lsv car insurance best deal 8-]]]

    • Favicon of http://insuredcar.net/ Polly 2013.07.07 21:35 Modify/Delete

      springfield college online 711 viagra online =D small business insurance costs omdz auto insurance free quotes =-D insurance australian cheap travel xkveh herbal impotence 993769 auto insirance qoutes :P

    • Favicon of http://www.insurcompanieslist.com/ Romby 2013.07.11 08:30 Modify/Delete

      car insurance temp =-]] cheapest car insurance :( haggerty insurance classic car %[[ cialis rvq levitra buy ceeh viagra online without prescription overnight =( order viagra online without prescription gcrgp

    • Favicon of http://www.edtabletsshop.com/ Rosie 2013.07.13 06:32 Modify/Delete

      auto insurance quotes yhnga car insurance for classic car best rates 256 levitra vgr free quotes auto insurance 315886 cheap insurance for car 414

    • Favicon of http://www.autoinsurpolicy.com/ Tayten 2013.07.14 17:18 Modify/Delete

      affordable car insurance for teens bqpedz free low car insurance quotes >:O auto insurance quotes lsbo modified car insurance quote otsfgf viagra online no prescription >:(( childcare insurance wxidl best price on cialis 487871

    • Favicon of http://sandiegoinsuranceonline.net/ Snowy 2013.07.17 22:31 Modify/Delete

      order viagra from cvs canada >:-) collector car insurance grundy zwukhx garage insurance liability 68805 get car insurace dqcp nj auto insurance quotes 531228 real viagra pfizer 56176

    • Favicon of http://carinsuranceindenver.net/ Tibbie 2013.07.20 21:56 Modify/Delete

      California free car insurance quote online :-]] insurance car buget :(( IN car insurance >:[ liability insurance event lqcdvj cheap car insurance quotes CA iek

  4. Favicon of http://etermory.blogspot.com/ 이터모리 2011.07.15 11:04 Modify/Delete Reply

    포스팅의 D에만 집중해서 어떤 의도였는지 모른채로 코드를 펼치고는
    너무 불친절해!! 이건 암호야!! 라는 생각으로 한참 봤는데..
    d == 0 일 때 절반만 돌린 부분에 대해서는 패스 하고 if (validate) {} 부분만 보니
    이거 나랑 반대로 만들었다는 걸 알고 나니 슬쩍 넘어갔던 포스팅의 '역으로 올라가면서'가 기억났어.
    validate라는 이름을 본 순간 '역으로'를 떠올렸어야 하는 건데.. ㅎㅎ
    근데 이렇게 하면 N = 15 일 경우 얼마나 걸려?

    • Favicon of http://deisys.net dgoon 2011.07.15 11:28 Modify/Delete

      내 컴에서 이렇게 걸리네:

      dgoon@tifa:~/works/kata/NQueen$ time ./nqueen 15
      15-queen: 2279184

      real 2m41.426s
      user 2m40.710s
      sys 0m0.130s

      어떤 아저씨는 이걸 800mhz 코어에서 3초에 끊는다고 함 ㅋㅋ

Write a comment


Thrift in D

Tech 2011.05.15 18:03
Thrift를 포기할 수 없다 - D에서도 접근할 수 있으면 좋겠다 - 라는 생각이 들어서 약간 검색.

1. 누군가 구현하길 기다린다
Very promising. David Nadlinger라는 똑똑한 친구가 Google Summer of Code 에서 삽을 뜨려고 준비중인 듯 하다. D 포럼에서도 이름이 자주 보이는 친구이며, 홈페이지에서 볼 수 있는 몇몇 코드 조각으로 볼 때 무난히 (잘) 만들어 낼 것 같다.

2. 못기다리겠다.
훌륭한 사람이 삽을 떠서 결과가 곧 나올 것 같은 경우에 이렇게 조바심을 내는 것은 부질없겠다. 하지만 그래도 급하다거나, 연습삼아 해보거나 할 수도 있으니 잠깐 생각만 해보자. 사용하기 위해 보는 thrift 라이브러리는 크게 runtime 과 compiler 로 나눌 수 있다.

compiler는 protocol definition파일을 읽어서 목적 언어로 쓰여진 "코드" 를 뱉어주는 일을 한다. 이렇게 생성된 코드가 해당 언어로 준비된 "런타임 환경" 에서 돌아간다.

D는 C 혹은 C++과는 어느 정도 인터페이싱이 가능하다. 그렇다면, 무임승차 혹은 거기까진 안되더라도 코드 재사용을 생각해볼 수 있다. thrift 의 여러 생성 옵션 중에서 c_glib, cpp 정도가 살펴볼 만 하다. 어느 쪽이건 간에 D쪽에서 만지기 위해서는 interface를 만들어야 한다. 최소한 *.h -> *.di 로의 컨버팅이 필요한 것.

c, c++ 양쪽은 별도의 런타임 환경이 준비되어 있으며 include 되는 헤더도 다르다. 어느 쪽에 손을 대더라도 해야 하는 일은 별로 달라지지 않는다.

a. Runtime environment
ㄱ. Make custom environment with D
그냥 C 혹은 C++쪽 코드를 보고 D로 구현해버린다. 직관적으로, 여기서 API를 잘 설계하면 Compiler 쪽 작업이 대단히 쉬워질 것 같다.

ㄴ. Make interface to c_glib or cpp runtime
c_glib 혹은 cpp 를 위해 준비된 환경으로 인터페이스를 만들어서 가져다 쓴다. 이 경우 손으로 *.h -> *.di 컨버팅을 해주는게 좀 귀찮은 작업이 될 수 있다. ... 하지만 그냥 새로 만드는거에 비하면( .. )

b. Compiler
t_c_glib_generator, t_cpp_generator 이런 애들이 있다. runtime 쪽에서 직접 구현한다를 선택한 경우에는 그냥 t_d_generator 를 만들면 된다. 다른 생성기를 참조하고, 런타임 API가 잘 설계되어 있으면 그렇게 어렵진 않을듯 하다. 만약 runtime을 가져다 쓴다는 결정을 했다면, t_d_generator를 직접 만들 수도 있지만 다른 선택도 가능하다. 기존 Compiler 에 끼어들어서 *.di/*.d 파일을 *.h/*.cpp 파일과 함께 만들어 버리는 것. 지저분하지만, 런타임을 공유한다면 API도 같기 때문에 이렇게 작업할 수도 있다. 하지만, 이건 thrift 버전업이 있거나, 혹은 contribute를 하고 싶다면 심각한 문제가 된다. 다른 사람과 공유하지 못하는 삽이라니 가슴 아프지 않은가. dirty and quick.

David Nadlinger의 제안에서는 Free-riding없이 직접 구현을 택했다. CTFE(Compile Time Function Execution)도 고려중인 듯. 이 경우 일반적인 타입의 serialize/deserialize는 별 문제가 아닌데, rpc server/client implementation 에서 비동기를 구현할 때 곤란할 수 있다(포기하고 그냥 스레드 만세 할 수도 있지만). 현재 latest인 D2.053 epoll|kqueue|iocp 등이 core.sys.posix|osx|windows 에 없다. D1을 고려한다면 tango를 볼 수도 있지만, 미래를 생각한다면 볼때 D1+Tango로 새 프로젝트를 시작하는건 삽질 ( ... )이라는게 중론이다. libevent의 D port도 아직은 없어뵈고... 그렇게 어렵진 않겠지만, 역시 이런 인터페이스를 뚫는 작업이 좀 지루할 수 있겠다.

결론적으로 무임승차는 못할 듯. 어느 쪽으로 가더라도 손이 가는 작업이 필요하다.

core.sys.posix.poll 도 있는데 core.sys.posix.epoll 정도 있어주면 어디가 덧나나. 이미 삽이 준비되지 않았으면 github 에 자리 하나 차리고 해보려 했으나 일단 기다리기로 결정함. 크릉크릉. thrift 와는 별도로 libevent 헤더들을 D interface 파일로 만들어 두는건 해볼만 할듯. 어렵지도 않고, 시간만 들이면 되는거고, 써먹을 데도 많다. 이미 있는데 못찾는건가 ... ... ...

tags : d, d2.053, libevent, thrift
Trackbacks 0 : Comments 6
  1. Favicon of http://www.nikeairmaxukoutp.com nike uk 2013.03.21 17:03 Modify/Delete Reply

    매우 지원 및 이월하고 있습니다.

  2. Favicon of http://www.longchampfrz.com longchamp 2013.03.26 06:03 Modify/Delete Reply

    这是新建文章 1.html,请修改添加正文内容。

  3. Favicon of http://wwwoakleysunglassesouty.com oakley sunglasses outlet 2013.03.26 06:05 Modify/Delete Reply

    매우 지원 및 이월하고 있습니다.

  4. Favicon of http://www.pandoracharmses.com pandora jewellery 2013.03.27 23:49 Modify/Delete Reply

    세상은 네가 있어 변해

  5. Favicon of http://ags.shoxskoas.com nike sko 2013.04.01 20:29 Modify/Delete Reply

    닫혀있던 나의 어두운 마음 모두 네게 열게 예이예

  6. Favicon of http://866.saxbycoffer.com/burberrybags.php burberry outlet 2013.07.17 16:10 Modify/Delete Reply

    슬퍼서 우는거 아니야..바람이 불어서 그래..눈이 셔서..

Write a comment