적절한 언어 선택법...

sadrove의 이미지

뭔가 만들고 있는 프로그램이 있는데요...
언어 선택에서 고민중입니다..
여러 언어를 능숙하게 다룰 수 있는 실력이 아니라서요..
대충 만들려는 프로그램은.. 음 뭐랄까...
일종의 링크드리스트 비슷한 구조를 같는 프로그램인데..
그 양이 좀 많습니다...(프로그램이라기 보다 엔진입니다.)
리스트가 많아지면 수만개 이상이 될 수도 있고요..
리스트간의 연결은 수십만개 이상이 될 수도 있거든요..
언어간의 차이가 실제로 속도나 리소스에 얼마나 지대한 영향을 미치는지 잘 모르겠습니다...
고려중인 언어로는 C/자바/파이썬 입니다..
개인적으로 파이썬이 제일 단순해서 좋긴 한데...
엔진을 제작하기에는 좀....
데이터 구조가 복잡해지고 많을 때 C가 자바나 파이썬에 비해서 속도차이가 많이 나나요..?...
C로 구현하려니.. 데이터가 한글이라 한글처리문제도 그렇고..메모리 관리를 잘 할 수 있을까도 걱정되고.. 여러가지 복잡하네요..
많은 조언 부탁드립니다.

espereto의 이미지

C로 잘 만드실 수 있거나, C를 써야만 하는 상황이라면 C를 선택해야겠죠.
그러나 C로 어설프게 하는 것 보다는 자바나 파이썬으로 잘 만드는 게 나을 수도 있습니다.

언어간의 차이가 속도나 리소스에 어떤 영향을 주는 지는 딱히 미리 짐작하기는 어려울 듯 합니다.

일반적으로, 자바나 파이썬이 C로 잘 작성한 것보다 메모리를 더 잡아먹을 수는 있습니다만, 속도에 대한 건 C로 잘 작성한 게 자바보다 더 느릴 수도 있고, 파이썬보다 더 느릴 수도 있을 겁니다. (리소스 잡아먹는 것도 역시나... C로 잘못짜면 더 잡아먹을 수 있겠지요.)

어떤 언어를 써도 상관없다면 최대한 개발이 쉽고 개발 기간이 단축될 수 있는, 자신있는 언어를 선택해서 개발하고, 이후에 속도나 메모리 사용량에 대한 최적화를 해 보고, 만족스럽지 않다면 개발된 프로그램을 참고로 해서 C를 잘 하는 사람이 재작성 혹은 재개발하는 방법도 있겠습니다.

cinsk의 이미지

Quote:
리스트가 많아지면 수만개 이상이 될 수도 있고요..
리스트간의 연결은 수십만개 이상이 될 수도 있거든요..

어떤 언어를 쓰느냐보다, 왜 이러한 자료 구조가 필요한지 곰곰히 생각해봐야 할 것 같습니다. 이 정도 분량을 list로 유지한다는 것, overhead가 상당할 것 같습니다.
sadrove의 이미지

cinsk wrote:

어떤 언어를 쓰느냐보다, 왜 이러한 자료 구조가 필요한지 곰곰히 생각해봐야 할 것 같습니다. 이 정도 분량을 list로 유지한다는 것, overhead가 상당할 것 같습니다.

프로그램이 신경망의 일종입니다..
수많은 뉴런(신경세포)를 동작시키기 위해 어쩔 수 없습니다..ㅠ.ㅠ..

espereto의 이미지

sadrove wrote:
cinsk wrote:

어떤 언어를 쓰느냐보다, 왜 이러한 자료 구조가 필요한지 곰곰히 생각해봐야 할 것 같습니다. 이 정도 분량을 list로 유지한다는 것, overhead가 상당할 것 같습니다.

프로그램이 신경망의 일종입니다..
수많은 뉴런(신경세포)를 동작시키기 위해 어쩔 수 없습니다..ㅠ.ㅠ..


( 허헉... 미리 애도를 ...... ; )

궂이 리스트여야 하느냐에 대해서는 저도 의문을 가지게 됩니다.

잘 알지는 못하는 분야지만, 리스트처럼 쓸 수 있는 다른 자료구조를 쓰는 방법도 있을 것 같거든요. 음.. 사실은 리스트의 다른 형태의 구현...이라고 해야 할까요......

최근 트리 구조가 필요한 일을, bit단위의 필드들로 이루어진 bitmap 구조로 처리하는 걸 만들고 있어서...... 메모리 사용량에서 무척이나 큰 이득이 있어서 말이죠. 100KB가 들어가야 할 게 단지 수십 바이트로 끝나니까 말이죠. 몇 가지 전제 조건들이 있긴 하지만...... (임베디드쪽이라 이 정도면 무척이나 해볼만한 일이라서......)

덕분에 머리는 매우 아픕니다만......

까막의 이미지

C++/Boost Graph는 어떨까요?

신경망에 대헤 잘 모르지만, 그래프로 표현이 될거 같기도 한데 말이죠.
(긁적)

Crow's Maniacal World.
http://crowmania.cafe24.com

Let's be engineers!

cinsk의 이미지

sadrove wrote:

프로그램이 신경망의 일종입니다..
수많은 뉴런(신경세포)를 동작시키기 위해 어쩔 수 없습니다..ㅠ.ㅠ..

좀 더 자세하게 필요한 연산(operation)들과 data의 특성을 올리면 좀 더 도움이 될 것 같습니다.

sadrove의 이미지

espereto wrote:
궂이 리스트여야 하느냐에 대해서는 저도 의문을 가지게 됩니다.

잘 알지는 못하는 분야지만, 리스트처럼 쓸 수 있는 다른 자료구조를 쓰는 방법도 있을 것 같거든요. 음.. 사실은 리스트의 다른 형태의 구현...이라고 해야 할까요......

최근 트리 구조가 필요한 일을, bit단위의 필드들로 이루어진 bitmap 구조로 처리하는 걸 만들고 있어서...... 메모리 사용량에서 무척이나 큰 이득이 있어서 말이죠. 100KB가 들어가야 할 게 단지 수십 바이트로 끝나니까 말이죠. 몇 가지 전제 조건들이 있긴 하지만...... (임베디드쪽이라 이 정도면 무척이나 해볼만한 일이라서......)

덕분에 머리는 매우 아픕니다만......

링크드리스트는 단지 예를 든 것 뿐이고요..
대부분 신경망 구현 소스를 보면 배열로 구현되어 있는데..
그냥 제 생각에 뉴런을 클래스(혹은 구조체)로 정의하고 객체간의 연결로 구현하면 될 것 같아서.. 구조가 복잡하다는 걸 마땅히 표현할 것이 없어서 링크드리스트를 말했던 겁니다..^^;....
좀 더 고민해봐야겠네요...
신경망쪽을 다루어신 분들 있으면 많은 조언 부탁드립니다..

sadrove의 이미지

cinsk wrote:
좀 더 자세하게 필요한 연산(operation)들과 data의 특성을 올리면 좀 더 도움이 될 것 같습니다.

대충 말하자면...
하나의 구조체(C의 structure가 아니라 마땅히 표현할 말이 없어서 객체라고 보셔도 좋습니다.)가 있을 때 다른 구조체를 가리킬 수 있는 링크값(여러개가 될수도 있습니다. 갯수의 제한이 없어야하고요.)을 갖고 있고요.. 링크값마다 연결가중치라는 특별한 float 정도의 데이터값이 있어야 합니다.
그리고 구조체마다 특정한 value를 갖고 있고요.. 데이터형은 그때그때 다릅니다. 기본적으로 대충 이러한 구조를 갖고 있습니다.. 물론 몇가지 더 있지마는요..

이러한 구조체들이 수만개가 복잡하게 얽혀 있다고 보시면 됩니다..
구조체의 개수는 고정되어 있는 것이 아니라 상황에 따라 동적으로 계속 추가되거나 삭제될 수도 있습니다.

연산부분은 기본적으로 value를 검색할 수 있는 부분이 있고..
value를 갖고 있는 구조체에 대한 각종 데이터들을 가져오거나 계산하는 부분이 필요합니다.

아직 머릿속으로 완전한 설계가 끝나지 않아서 설명드리기 힘드네요..^^...다소 어처구니 없는 설계 같아도 이해해 주세요.. :wink:

cinsk의 이미지

일단 list 형태를 쓸 수 밖에 없다는 전제 아래에서, 제 경험상 말씀드리면, lisp이나 scheme과 같이 lisp를 전문적으로? 취급하는 언어가 어떤 식으로 구현되어 있는지 살펴보시면, 많은 도움이 될 것 같습니다. 이들 언어는 수 많은 list를 처리하기 때문에, list operation들을 효과적으로 수행하기 위해서 많은 technique들을 씁니다. 개인적으로 내부 소스에 대한 문서화도 그럭저럭? 잘 되어 있는 guile source를 한 번 훑어 보시기 바랍니다. 시간이 많지 않다면, 아래 info page를 보시는게 아주 많이 도움이 됩니다.

Guile Data Representation

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.