프로그래밍 구조를 가지는 알고리즘 편집기를 만들고 있어요..

착한아이의 이미지

안녕하세요..
저는 컴터관련전공학생도 아니고요.. Windows 환경 외에는 써본적은 없어요..
다만 숙제같은거 하다보면 간단한 코딩같은건 해보는 중이예요..
그래서 C 나 Java 같은 컴파일형 언어보다는 Matlab같은 인터프리터형 언어를 자주 쓰는 편이예요..

제가 비록 전문 프로그래머는 아니지만, 코딩하는 과정이 좀 불편해서 그러는데요..
코딩의 생산성을 도와줄 좋은 에디터가 있었으면 해서
몇가지 제가 원하는 기능을 가진 에디터를 만들어보려고 하는데요..

제가 AcroEdit정도 외의 다른 에디터들은 써본적이 없어서 여기 분들에게 좀 여쭈어 보려고 해요..
컴터계통에 계시는 분들은 VI, emacs 등을 추천하시는것 같은데요..
아래 기능 혹은 매크로가 가능한 에디터를 알고 계시면
해당 번호와 함께 짧막히 소개해 주셨으면 고맙겠습니다..
모든 번호를 가지는 에디터가 있으면 개발을 중단하려고요..

목표: 프로그래밍 구조를 가지는 알고리즘 편집기

1. Windows에서 동작한다.
(아마 거의 대부분이겠죠.. ^^;)

2. 어떤 텍스트 언어든 코딩할수 있어야 한다.

3. 키보드만으로 코딩이 가능해야 한다.
탈락편집기: LabVIEW, Simulink, ...

4. indent같은 구조적 표현을 자동으로 유지해야 한다.

5. 코딩중 사용중인 변수,함수등의 선언 위치로 이동할수 있어야 한다.
Go to Definition 같은..

6. 블럭문도 폴딩할수 있어야 한다.
함수폴딩 편집기는 많은것 같은데 블럭문도 폴딩되는게 있는지 모르겠어요..
예) [+] if (a) ...

7. 현재 위치에서 입력가능한 유효한 변수,함수를 목차해주고 선택할수 있어야 한다.

8. 코드상에서 보이는 변수,함수의 값타입을 알수 있도록 항상 표시하고 있어야 한다.

9. 형지정이 일치하지 않거나 존재하지 않는 변수,함수의 입력이 불가능 해야한다.
예) s="asdf"; tan(); 여기서 tan에 s 입력을 거부하는 기능.

10. 해당 언어의 문법상 오류를 일으킬만한 입력이 100%불가능 해야한다.

11. 코딩중 어떤 구간을 블럭문으로 묶거나 선택한 블럭문을 함수로 분리하는 기능이 있어야 한다.

12. 선언없이 코딩중에 변수를 사용할수 있어야 한다.
예) a=3; 이라고 입력되었다면 int a; 가 자동으로 입력되는 기능.

13. 인자나 요소입력을 하지 않아도 기본값을 자동으로 입력할수 있어야 한다.
예) power(x, ); 제곱, a[2, ] 매트릭스의 2번째 모든 행.

14. 연산결과나 함수의 리턴값을 받는 변수를 직적 지정하지 않아도 해당 변수를 자동으로 생성해야한다.
예) tan(a); tan_a 라는 변수를 이후부터 사용가능함.

15. 입력한 주석문은 코딩상에 보이지 않게 할수 있어야 한다.

16. Run하지 않고 코딩중에 현재 라인의 계산결과를 볼수 있어야 한다.
해당편집기: Matlab, Maple, Mathematica, MathCAD, R (Worksapce형 언어)

17. 명명이 자유로와야 한다. (한글,공백을 허용)
해당편집기: Mathematica (한글변수허용)

18. With 같은 그룹핑 매크로가 지원되어야 한다.
예) { ListBox1, ComboBox1 }.ItemIndex = -1;

19. 소스 압축기능이 있어야 한다.
예) zip 같은 압축이 아니라 f((a)) => f(a) 처럼 불필요한 기호를 줄여나가는 기능.

20. 불완전한 기호를 완성하거나, 불완전한 입력이 불가능 해야한다.
예) b=1+(a*2 ; 일때 b=1+(a*2); 로 완성.

21. 주석문 찾기로도 변수,함수를 목차할수 있어야 한다.

22. 사용된 변수,함수의 위치를 목차하고 해당위치로 이동할수 있어야 한다.

23. 브라우져 처럼 이전 위치로 이동하거나 여러개의 북마크를 할수 있어야 한다.
해당편집기 : BDS, VS

현재 1,2,3,4,6,7,8,9,10,12,15,20 는 제작되었고요..
5,11,13,14,16,17,18,19,21,22,23 는 진행중이예요..

고수님들께서 알고 계시는 이런 기능이 가능한 에디터 소개,의견 부탁드려요..

====추가====
24. 코드내에 사용된 변수명,함수명 변경시 정확하게 일괄 변경될수 있어야 한다.
예) a, aa 라는 변수들이 사용되고 있을 경우,
a 변수를 b 이름으로 변경시 aa 변수가 ba 로 되는 일은 발생하지 않아야 한다.

25. 보편적으로 알려진 창,편집관련키 이외에 편집기에서만 사용하는 독자적인 키가 가급적 적어야한다.
예) 익숙하기 쉬웠으면 해서요.. 제작중인 편집기는 현재 대략 8개 정도로 예상중..

26. class member 입력시 member변수부터 입력하고 상위클래스를 입력할수 있어야 한다.
예) Listbox1.Items.Count 가 있으면 Count Items ListBox1 순서로 입력하려해요..
클래스수는 무한하지만 맴버는 유한하지요.. 따라서 맴버부터 입력하면 입력목차를 굉장히 줄일수 있을것 같아서요..

jick의 이미지

"해당 언어의 문법상 오류를 일으킬만한 입력이 100%불가능 해야한다."

이건 컴파일을 해서 돌려보기 전에는 절대 알 수 없는 건데요. 심지어 gcc만 따져도 버전이 올라가면서 컴파일이 되던 코드가 안되고 합니다.

게다가 "컴파일이 되는 코드"에서 뒷부분을 잘라내고 앞부분만 남기면 이건 더 이상 "컴파일이 되는 코드"가 아니죠. 그렇다고 입력을 안 받을 수도 없지요. 혹시 "현재까지 친 것을 L이라고 할 때 L을 prefix로 가지는 올바른 프로그램이 없으면 입력을 거부해라." 같은 걸 생각하고 계신다면 이건 아마 halting problem과 맞먹지 않을까 싶은데... -.-

그냥 몇몇 패턴을 이용해서 "이 패턴에 어긋나면 문법상 오류로 간주하고 입력 거부"라는 뜻이라면, 잘 돌아가는 수많은 소프트웨어 프로젝트의 코드가 처음 봐서는 "이게 어떻게 컴파일이 돼?"라고 거품을 물 만한 코드를 포함하고 있음을 지적하고 싶습니다. C만 해도 macro 좀 꼬아서 사용하면 벼라별 기상천외한 짓들이 가능하죠.

나그네나그네의 이미지

마지막 문장의 예시 코드가 몹시 궁금합니다 :)
----------------
agidari.wordpress.com

착한아이의 이미지

알고리즘상 오류는 Run을 해야 알수 있겠지만
문법상 표기오류는 Run과 무관하게 알수 있겠지요..

제가 논지를 올릴 때는 논지에 관련된 의견을 듣고자 함이지, 논지의 여부를 논쟁하기 위함이 아니예요.
논지의 취지를 이해하지 못한 의견에는 가급적 답글 달지 않겠어요. :P

auditory의 이미지

문법상오류는 컴파일과 상관이 있는거죠..

그래서 컴파일러가 아니면 이게 오류인지 아닌지 알 수 없다는겁니다..

에디터가 문법상 오류를 완벽히 알고 있으면 더 이상 에디터가 아니죠..

착한아이의 이미지

에디터임에도 불구하고, 컴파일러와 무관하게 문법적 오류입력을 불가능하게 할수 있을것 같아요..

제가 논지를 올릴 때는 논지에 관련된 의견을 듣고자 함이지, 논지의 여부를 논쟁하기 위함이 아니예요.
논지의 취지를 이해하지 못한 의견에는 가급적 답글 달지 않겠어요. :P

jsj3579의 이미지

states := states + state

이런 걸 state를 타이핑하는 중에 문법적 오류가 있다는 것을 어떻게 알 수 있는지 궁금합니다.
관련 링크를 볼 수 있을 까요??

착한아이의 이미지

언급하신 문장은.. 문법적 오류가 없어보이는데요..??

제가 논지를 올릴 때는 논지에 관련된 의견을 듣고자 함이지, 논지의 여부를 논쟁하기 위함이 아니예요.
논지의 취지를 이해하지 못한 의견에는 가급적 답글 달지 않겠어요. :P

익명 사용자의 이미지

두 sequence point 사이에 동일한 변수가 두번 수정되는 행동은
문법적으로 오류입니다.

익명 사용자의 이미지

에공 제가 코드를 잘못 봤네요.
전혀 상관없는 뻘플이었습니다

semjase의 이미지

지금 VS2005 C#으로 코딩하는데 타이핑하면서 실시간으로 문법오류 체크해줍니다.
예를들어 if (g_ar.Count <_) 입력중이면 밑의 오류가 나타납니다.

오류	1	식의 ')' 항이 잘못되었습니다.	E:\C#\MainForm.cs	224	33	Test
오류	2	)가 필요합니다.	E:\C#\MainForm.cs	224	34	Test

if (g_ar.Count <= 0) 이렇게 입력하는순간 오류메세지가 사라지죠.

.

bootmeta의 이미지

5. 코딩중 사용중인 변수,함수등의 선언 위치로 이동할수 있어야 한다.

> 가장 잘되어있는 툴은 source insight
emacs, vi등에서는 ctags,etag등의 외부 tagging 툴과 연동해 지원

11. 코딩중 어떤 구간을 블럭문으로 묶거나 선택한 블럭문을 함수로 분리하는 기능이 있어야 한다.

> eclipse 처럼 extreme programming(xp) 지원을 표방하는 툴들

13. 인자나 요소입력을 하지 않아도 기본값을 자동으로 입력할수 있어야 한다.

> visual net에선 가능할 듯

14. 연산결과나 함수의 리턴값을 받는 변수를 직적 지정하지 않아도 해당 변수를 자동으로 생성해야한다.

> ...

16. Run하지 않고 코딩중에 현재 라인의 계산결과를 볼수 있어야 한다.

> 인터프리터 언어 또는 debugging 모드가 아닌 이상 힘들 것 같네요.
이전 실행 상태가 굳이 필요없는 경우 내장 interpreter로 지원하는 경우가 종종 있기는 합니다.

17. 명명이 자유로와야 한다. (한글,공백을 허용)

> 언어 spec에서 unicode나 다국어 지원이 명시되어 있지 않으면 무의미
언어에서 지원된다면 emacs, vi, eclipse, visual studio

18. With 같은 그룹핑 매크로가 지원되어야 한다.

> ?? 그룹핑 개념이 있는 언어에서 지원인지, 단순히 툴 차원에서 지원한지 불분명

21. 주석문 찾기로도 변수,함수를 목차할수 있어야 한다.

> 공통적으로 쓰이기 위해서는 주석문이 일관성있는 tag와 문법을 가져야 합니다.
비슷한 문법을 가진 언어를 위한 공용 툴(예를 들어 doxygen)들이 많습니다만 언급하신 만큼 폭넓은 언어를 지원하는 툴들은 개인적으로 구경을 못해봤네요.

22. 사용된 변수,함수의 위치를 목차하고 해당위치로 이동할수 있어야 한다.

> emacs, vi 같은 경우 5번에서 언급한 것처럼 외부 툴과 연동해 가능합니다만 완벽하지 않습니다.
eclispe 경우 c,c++,java만 제대로 지원되며 다른 언어들은 설사 지원되더라도 기능이 미약
visual studio 경우 공식 지원 언어들만 제대로 지원

23. 브라우져 처럼 이전 위치로 이동하거나 여러개의 북마크를 할수 있어야 한다.

> 인기있는 에디터나 ide 같은 경우 기본적으로 지원

-----

다양한 언어를 지원하면서 언급한 기능들을 많이 지원하는 툴은 visual studio, eclipse, emacs입니다.

자동 완성 기능 측면으로는 visual stuido
키보드 사용 극대화면에서 emacs

이미 구현하셨다고 하는 기능들이 특정 언어에 무관하게 동작한다면 대단하시군요.
전문 프로그래머가 아니라고 하셨지만 대단하다는 감탄만 나옵니다.

혹시 현재 개발 중인 프로그램에서 지원하거나 테스트하는 언어 목록을 알려주실수 있나요?

착한아이의 이미지

제가 써본 것만 대상에 두었어요..
C 가족들은 문법적으로는 비슷비슷하니
일단은 가장 비슷하지 않은 php, matlab, delphi 정도부터 테스트 해보려고요..

[Workspace and interpreter type languages]
R, Matlab, Mathematica, Maple, MathCAD, (.. CemTool, Maxima, Derive)

[Runtime(?) and interpreter type languages]
PHP, Python, Ruby, CLISP

[Runtime and virtual machine type languages]
Java(JBuilder), C#

[Native Compiler type languages]
C/C++(MFC, CBuilder), Pascal(Delphi), (.. Fortan)

[NON languages]
HTML, XML

제가 논지를 올릴 때는 논지에 관련된 의견을 듣고자 함이지, 논지의 여부를 논쟁하기 위함이 아니예요.
논지의 취지를 이해하지 못한 의견에는 가급적 답글 달지 않겠어요. :P

나그네나그네의 이미지

모든 언어에서 가능하다..
그럼 이런 것도 가능한가요?
Java로 선언한 함수 안에서 Python문법을 가진 문장들을 작성한다던지..

그리고 한가지 더 궁금한게,
이 부분이 주석임을 어떻게 판정하나요?
----------------
agidari.wordpress.com

착한아이의 이미지

1.결과적으로는 현재 계획상 가능해요..

2.주석문 표시가 있으면 주석이죠..

제가 논지를 올릴 때는 논지에 관련된 의견을 듣고자 함이지, 논지의 여부를 논쟁하기 위함이 아니예요.
논지의 취지를 이해하지 못한 의견에는 가급적 답글 달지 않겠어요. :P

나그네나그네의 이미지

하나만 더 질문을 드려도 될까요?

#define a 1
python에서 #은 주석문이지만 C에선 아니잖아요?
이런 경우 어떻게 처리되나요?
----------------
agidari.wordpress.com

착한아이의 이미지

각 언어별 기호는 저장시 결정하면 되겠네요..

제가 논지를 올릴 때는 논지에 관련된 의견을 듣고자 함이지, 논지의 여부를 논쟁하기 위함이 아니예요.
논지의 취지를 이해하지 못한 의견에는 가급적 답글 달지 않겠어요. :P

나그네나그네의 이미지

조금 더 상세한 설명 부탁드립니다 :)

int A = 3;
# define A 1
print A
# define b 2
int B = 3;

위 같은 경우에 #define A 1 부분과 print A 부분만을 파이썬 소스로 보고 싶습니다.

저 소스를 주고 실행을 한다고 할 때, 소스 인식에서 실행을 해 나가는 과정을 보고싶습니다.

-- 좀 더 추가를 하자면 :

class A가 있다고 합시다.(어떤 방법이든 : 설정을 하든 뭘 하든, 어쨌든 모든 언어에서 쓰일 수 있는 클래스를 정의를 했다고 합시다.)
주의 할 점이라면,
아래 코드는 C 와 Java가 섞여 있습니다..

class A{
public :
A();
int itsVal;
};

// 이 함수는 Java에서 선언한 것일수도 있고, C++용으로 선언한 것일수도 있씁니다.
void f(A a){
a.itsVal = 1;
}
-- main --
A a;
a.itsVal = 0;
f(a);
cout << a.itsVal << endl;

이 경우에, a의 생성자는 호출이 된겁니까, 안 된겁니까?
그리고, a.itsVal은 0입니까, 1입니까?

----------------
agidari.wordpress.com

착한아이의 이미지

기존파일을 읽을 경우에는 어떤언어로 작성되어있는지 지정해서 읽어야겠지요..
주어진 소스의 언어를 스스로 판단하지는 못할테고요..
사람과 똑같다고 생각하시면 되요.. 사람에게 모호한 건 얘도 모호해 한답니다.

제가 논지를 올릴 때는 논지에 관련된 의견을 듣고자 함이지, 논지의 여부를 논쟁하기 위함이 아니예요.
논지의 취지를 이해하지 못한 의견에는 가급적 답글 달지 않겠어요. :P

나그네나그네의 이미지

위에서 제가 질문드린 'Java로 선언한 함수 안에서 Python문법을 가진 문장들을 작성 가능 여부'에 대해 'yes'라고 말씀하지 않으셨나요?

지금 제가 이렇게 열정적인 모습을 보이는 이유 중에 하나가 에디터가 '주어진 소스의 언어를 스스로 판단'한다는 것에 놀라서입니다..

아니면, 위와 같은 소스가 주어졌을 때
'모호한 코드입니다.'
같은 경고를 출력하는 에디터 먼저 작성해 보세요.
----------------
agidari.wordpress.com

착한아이의 이미지

제가 말씀드리려했던건 자바든 파이선이든 저장할때 결정할수 있다는 의미였어요..
자바로 저장하려하는데 파이선코드가 들어갈리는 없지요..
왜 자바코드내에 파이선 코드를 하셔야하죠? 그건 무의미한 행위같은데요..
자바코드인줄 알고 읽었는데 파이선코드가 들어있으면 당연히 오류가 생기겠지요..
그건 분명 다른 편집기에서 그렇게 하셨을거예요..
이 편집기에서는 다른 언어를 섞어 저장하실수가 없답니다..

제가 좀 실망시켜드린것 같은데요..
그래도.. 아직까지는 위에서 언급한 기능들을 위배한것은 없지요..?

제가 논지를 올릴 때는 논지에 관련된 의견을 듣고자 함이지, 논지의 여부를 논쟁하기 위함이 아니예요.
논지의 취지를 이해하지 못한 의견에는 가급적 답글 달지 않겠어요. :P

M.W.Park의 이미지

편집기 기능과 각종 언어의 기능, 리팩토링 기능 등등이 복잡하게 섞여있는 듯하군요.
디자인 자체를 좀더 다듬을 필요가 있을 것같습니다.

편집기쪽 기능은 emacs에선 대부분 가능할겁니다. 기본으로 제공되는 것도 있고, 비공식적으로 지원되는 것도 있고, 없으면 emacs lisp으로 만들면 됩니다.

-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

jsj3579의 이미지

너무 써보고 싶습니다.회사에서 C랑 파이썬을 많이 쓰는데 테스트 해보겠습니다~

hey의 이미지

저도요. 한 번 써보고 싶습니다.
처음엔 너무 큰 목표라 좀 치기어린 발언이 아닌가! 싶었는데 진지하신 것 같아서 그냥 믿기로 했습니다.

May the F/OSS be with you..



----------------------------
May the F/OSS be with you..


착한아이의 이미지

제가 도입하려는 위 기능들의 실효성에 회의적인 분들이 계신것 같아서
기능들을 가능한한 많이 완성하고 선보일께요..

제가 논지를 올릴 때는 논지에 관련된 의견을 듣고자 함이지, 논지의 여부를 논쟁하기 위함이 아니예요.
논지의 취지를 이해하지 못한 의견에는 가급적 답글 달지 않겠어요. :P

sloth_의 이미지

그래도 최대한 빨리공개를하셔서 피드백을 받으시는게 좋을것같은데요..
왜냐하면 일단 직업프로그래머가 아니시니까 뭔가 놓치시는 부분이 있을수도 있구 하니까요
피드백을 받으시면 플젝의 scope을 조정할수도있구.. 여러가지로 얻는게 많으실거라구생각합니다.

익명 사용자의 이미지

배가 물에 뜰 때까지는 기다려보시죠. 원 글을 작성하신 분이 혼자서도 카누가 아니라 요트를 보여주실 듯 한데요.

착한아이의 이미지

표현 참 멋지세요.. ^^
여기 언급한 카누 외의 요트부분은.. 더 큰 감동을 위해서..

제가 논지를 올릴 때는 논지에 관련된 의견을 듣고자 함이지, 논지의 여부를 논쟁하기 위함이 아니예요.
논지의 취지를 이해하지 못한 의견에는 가급적 답글 달지 않겠어요. :P

cleol의 이미지

말씀하신 조건들을 완전히 만족하는 것은 사실상 불가능합니다. 길게 적지는 않겠지만 조건 자체도 일부 모순이 있거나, 언어에 따라 다르게 적용되야 할 내용도 있는 것 같습니다. 일부만 만족하는 편집기(편집기라기보다 IDE 라고 부르는 편이 좋겠습니다.) 를 만드는 것도 쉽지 않을 겁니다. 하시는 일이 무엇인지 모르겠지만 배보다 배꼽이 훠얼~씬 클겁니다. 하시는 일이 전문적인 프로그래밍은 아닌 것 같은데, IDE 개발을 전문으로 하거나 그걸로 밥먹고 사는 사람들이 있습니다. 굳이 님의 시간과 노력을 여기에 들일 필요가 없습니다. 그냥 포기하시고, eclipse 나 emacs 를 익혀서 사용하세요. 정 불만족스러운 것이 있으시거든 개발팀에 요청하거나 그런 녀석들이 제공하는 확장 기능(플러그인이나 매크로 기능등)을 이용해서 개발하시는 것이 좋을 겁니다. eclipse 는 자바, emacs 는 lisp 을 이용해서 확장기능을 개발할 수 있습니다. 다른 플랫폼들을 후보에 올릴 수도 있겠지만, 아마도 사실상 이 둘 중에 선택하시게 될겁니다.

착한아이의 이미지

그렇게 엄청난 노력이 필요한 일일줄 몰랐네요..
저런 편한 편집기가 세상에 나올때까지 마냥 기다리기만 한다해도
저런 기능들이 필요하고 가능하다고 믿는 개발자님들이 없을것 같아서 시작해봤어요..
지금까지는 별 막힘없이 진행되고 있긴한데.. (재미삼아 해보는중이예요..)
어디가 모순인지 지적해주시면 계획을 좀 수정해볼께요..
그래도 막히는 경우가 생기면 머.. 더 생각할거 없이 말씀하신대로 접어야죠..

근데 될것 같은데.. 되면 어떻게 되는걸까요..?

제가 논지를 올릴 때는 논지에 관련된 의견을 듣고자 함이지, 논지의 여부를 논쟁하기 위함이 아니예요.
논지의 취지를 이해하지 못한 의견에는 가급적 답글 달지 않겠어요. :P

sephiron의 이미지

전공 그만두시고 전문 개발자로 나서셔야죠. 그정도 개발력이면 구글에서도 전용기로 모셔갈겁니다.

착한아이의 이미지

기능을 다시 요약하면요..

1. 프로그래밍적 구조를 가지는 어떠한 텍스트언어든지 작성해요. (다양성)
2. 평균 키입력수/소스코드글자수 가 10% 미만수준으로 최소입력을 위한 다양한 방법을 동원해요. (신속성)
3. 문법적 에러발생을 원천적으로 방지해요. (신뢰성)
4. 명명이 자유롭고, 정확한 이름변경을 수행해요. (편의성)
5. 블럭구조를 유지하고, 코드내 변수형을 한눈에 파악할수 있어요. (가독성)
6. 각 라인별 계산을 수행할수 있어요. (생산성)
7. 독특하고 편리한 네비게이션을 지원해요. (편의성) (시나리오 생각중..)

이정도 수준의 프로그램이면, 이걸 어떻게 알리는게 좋을까요..

1. 입사를 시도한다.
1.1. 구글에.. (프로그래밍 영역에 사업확장을 안하고 있는 중이므로 솔깃할지도..)
1.2. M$에.. (돈이 되는거면 머든 할것이므로..)
1.3. Sun에.. (시장점유에 혈안이므로..)
1.4. CodeGear에.. (기사회생의 대박이 절실하므로..)
1.5. Mathworks에.. (경쟁사를 따돌릴 편집기가 필요하므로..)
1.6. Maple soft에.. (독보적인 편집기가 필요하므로..)
1.7. Wolfram soft에.. (가독성이 향상된 편집기가 필요하므로..)
1.8. 군소 외국 IT기업에.. (대박이 필요하므로..)
1.9. 군소 한국 IT기업에.. (사람이 필요하므로..)

2. 아이디어를 팔도록 해본다.
2.1. 구글에
2.2. M$에
2.3. Sun에
2.4. CodeGear에
2.5. Mathworks에
2.6. Maple soft에
2.7. Wolfram에
2.8. 군소 외국 IT기업에
2.9. 군소 한국 IT기업에

3. 직접 사업을 시작한다.

4. GNU로 공개해버린다.

5. 걍 혼자 쓰면서 투자자를 기다린다..

제가 논지를 올릴 때는 논지에 관련된 의견을 듣고자 함이지, 논지의 여부를 논쟁하기 위함이 아니예요.
논지의 취지를 이해하지 못한 의견에는 가급적 답글 달지 않겠어요. :P

익명 사용자의 이미지

4번.

이솝의 이미지

젖짜는 여인

익명 사용자의 이미지

에디터의 영역과,
언어의 영역을 혼동하시는 것 같아 보이네요.

착한아이의 이미지

어짜피 프로그래밍 언어를 편집하는 거니까
어디 영역이든 편집만 편하게하면 좋겠어요..

제가 논지를 올릴 때는 논지에 관련된 의견을 듣고자 함이지, 논지의 여부를 논쟁하기 위함이 아니예요.
논지의 취지를 이해하지 못한 의견에는 가급적 답글 달지 않겠어요. :P

chadr의 이미지

몇가지 모순점과 언어에 종속성이 강할수 밖에 없는 기능들이 다수 보이지만 시도는 좋다고 생각합니다.
직업적인 것도 아니고 공개로 개발을 하신다면 취미삼아 또는 재미삼아 해보는 것도 괜찮을 것 같네요.

공개로 개발을 진행하실 것이면 간단한 위키같은 피드백 장소를 마련해놓고 소스도 scm을 이용하여 체크아웃 받을 수 있도록
하신다면 많은 피드백을 받으실 수 있을 것 같습니다. :)
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

착한아이의 이미지

이 편집기에 공동개발 기능이 들어가면 참 좋겠네요..
음.. 근데.. 공동개발 표준 기준같은게 있어야 할텐데..
공동개발 기준을 공동개발하면..?? ㅎㅎ

제가 논지를 올릴 때는 논지에 관련된 의견을 듣고자 함이지, 논지의 여부를 논쟁하기 위함이 아니예요.
논지의 취지를 이해하지 못한 의견에는 가급적 답글 달지 않겠어요. :P

thyoo의 이미지

제 소감은 아래 인용에서 유추 가능합니다.

Complex systems that work evolved from simple systems that worked - Grady Booch
Start stupid and evolve - Kent Beck
___________________________________
Less is More (Robert Browning)

___________________________________
Less is More (Robert Browning)

auditory의 이미지


실례되는 말이겠지만,
솔직히 낚시글일지도 모르겠다고 느끼는건 저뿐인가요..
앞부분의 자기 소개와 뒷부분의 스펙이 전혀 안어울리는군요.
본인을 너무 낮추셨든가.. 아니면 뒷부분의 스펙을 잘 모르신다거나
둘 중에 하나인것 같네요.

에디터와 언어를 혼동한다는 위의 어떤분의 의견에 공감합니다.
예를 들어 14의 기능을 에디터 작성자의 입장이라면
double tan_a = tan()로 자동으로 바꾸는 기능이라고 표현하셔야지,
tan_a라는 변수를 사용가능하게 하겠다는것은 에디터의 영역이 아니죠.

C프로그램만 해본 경험에서 말씀드리면.
1~8,11,15,22,23은 이미 흔하게 구현된 기능이고,
9,10,20처럼 입력에 제한을 두는건 대부분의 프로그래머가 싫어할만한 기능이고,(컴파일러의 도움을 받아야하고, 또가능할지도 의문인고..)
12,13,14,19처럼 자기가 맘대로 입력하는건 엄청난 버그를 발생시킬만한 기능이고,(이것도 ambiguity를 어떻게 해결할지난감..)
16은 디버거의 기능이고,
17,18은 컴파일러의 기능이고
21은 잘 모르겠네요..

착한아이의 이미지

자기소개는 사실이고요.. 뒷부분 스펙을 잘 모르는 중이 맞을거예요..

14. 제가 표현이 좀 틀렸네요.. 자동으로 바꾸는 기능이 맞겠어요.. 생각나는대로 적었더니 참.. 두서없네요.. ^^;

9,10,20. 프로그래머님들이 입력제한을 왜 싫어하고 싶으신지는 제가 이해가 잘 안가요.. 어짜피 에러날 문장 고치러 분주히 돌아다니게 될것 같은데..??

12,13,14,19. 자동입력은 키입력을 줄여보고자 생각해본거예요.. emacs같은 편집기도 키입력을 줄이는 많은 장치들을 찬사하는 줄 알았는데.. 자동입력은 작성자가 입력해두는건데요.. 머.. 그럼에도 불구하고 정 불편할것 같으면 옵션으로 해두면 괜찮겠죠..? ㅎㅎ

16. matlab같은 수학툴들은 편집중에 현재문장의 수행결과들을 볼수 있어요.. 매문장마다 전체 Run 해보는건 좀 부담일것 같아서 현재문장의 수행결과를 볼수 있도록 했으면 해서요..
Go to cutsor 같다고나 할까요..

17,18. 일종의 Run전에 수행되는 replace 같은건데.. 머.. replace를 컴파일러에 의존할 필요있나요.. 편집기에서 해줘도 좋을것 같은데.. 그럼 덕분에 명명도 자유로워지고.. ㅎㅎ

제가 논지를 올릴 때는 논지에 관련된 의견을 듣고자 함이지, 논지의 여부를 논쟁하기 위함이 아니예요.
논지의 취지를 이해하지 못한 의견에는 가급적 답글 달지 않겠어요. :P

auditory의 이미지

저는 여전히 회의적입니다만.. 몇가지 코멘트를 달자면..

프로그래머들이 이런 "지능적"인 에디터를 싫어하는 이유는

내가 의도하지 않은 결과를 나도 모르게 발생시키기 때문입니다.

대부분의 경우에 님이 언급하신 문법 오류들은

고치기가 무척 쉽습니다. 굳이 자동으로 하지 않아도 컴파일 한번만해 보면

누구나 다 알 수 있는거죠..

그런데 내가 a = 2*a + b;를 의도했는데 실수로

a = 2*(a+b; 를 쳤는데 에디터가 a = 2*(a+b); 로 바꿨다고 해보죠..

이 에러는 도대체 어떻게 잡아야할까요?

pow(a,) 도 마찬가지 입니다. 그냥 놔두면 누구나 고칠 수 있는 에러를

pow(a,2)로 자기 맘대로 고쳐버리면 이걸 도저히 잡아낼 수가 없습니다.

프로그래밍에서 중요한건 타이핑을 조금 덜 하는게 아니라,

사용자의 의도를 정확히 반영하는겁니다.

착한아이의 이미지

그럼 일단 자동입력해놓고 자동입력된것들은 경고목록을 만들어 두면 어떨까요..
일단 Run은 되는데 결과가 이상할 경우 자동입력된 목차를 쳐다보는게 일일이 고치는것보다는 효율적일것도 같은데..

제가 논지를 올릴 때는 논지에 관련된 의견을 듣고자 함이지, 논지의 여부를 논쟁하기 위함이 아니예요.
논지의 취지를 이해하지 못한 의견에는 가급적 답글 달지 않겠어요. :P

auditory의 이미지

run 되는데 결과가 이상한걸 알면 다행이죠..

그럴려면 미리 결과를 알고 있어야하는군요.. ㅎㅎ

@ 님이 뭔가 구체적인것을 더 보여주신다면, 좀더 진지해질 수도 있는데요..

@ 혹시 scintilla 라고 아시는지요?

착한아이의 이미지

모르고 있었는데 받아서 실행해 봤어요..
좋은 편집기 인것 같네요..
배울점이 있는지 살펴볼께요.. 감사합니다..

제가 논지를 올릴 때는 논지에 관련된 의견을 듣고자 함이지, 논지의 여부를 논쟁하기 위함이 아니예요.
논지의 취지를 이해하지 못한 의견에는 가급적 답글 달지 않겠어요. :P

auditory의 이미지

scintilla는 편집기가 아닙니다.
Scintilla is a free source code editing component.

착한아이의 이미지

제가 이쪽 세계를 잘 몰라서요.. ㅎㅎ

컴포넌트면 무언가의 일부분 이라는 의미같은데.. 무엇의 일부인건가요..?
글고 제가 만드는건 편집기일까요.. 소스코드편집컴포넌트일까요..??

제가 논지를 올릴 때는 논지에 관련된 의견을 듣고자 함이지, 논지의 여부를 논쟁하기 위함이 아니예요.
논지의 취지를 이해하지 못한 의견에는 가급적 답글 달지 않겠어요. :P

bootmeta의 이미지

scinitilla가 component인 것은 맞습니다. 그러나 scintilla 홈페이지 보시면 바로 옆에 scinitilla로 작성된 편집기 SciTE 역시 다운받을 수 있습니다.
굳이 component다 아니다가 중요해 보이진 않는군요.

hanaian이 과연 만들 수 있는지 없는지를 떠나 과민한 반응으로 보입니다.

그리고 모든 사람이 지능적인 편집기를 싫어하는 것은 아닙니다.
사용자의 의도를 살려야 한다는 것은 맞습니다만 hanaian님이 댓글로 언급한 것처럼 가능한 목록을 보여주는 정도는 이미 기존 편집기들에서 구현된 경우도 있고 많은 이들이 좋아하기도 합니다.
예를 들어 emacs 같은 경우 lisp 코드 작성 시 ( 문자를 입력하면 자동으로 )을 닫아주고, mac에서 인기있는 html 편집기는 typing 하는 순간 적절한 tag를 바로 완성시켜주기도 합니다.

모든 언어들을 지원한다는 것은 제가 봐도 좀 무리로 보이기는 합니다만 딱히 문제가 있는 글이거나 낚시로 보이지는 않습니다.

jj의 이미지

좋군요. 열거 하신 기능들 모두 주옥같은 기능들입니다. 하나의 기능만 제대로 구현하셔도 공개할만 하군요. 지금도 이르지 않은듯 싶어요... 지켜보겠습니다.

--
콘쏠의힘

--
Life is short. damn short...

mithrandir의 이미지

상당히 기대가 되네요. 저는 emacs를 좋아하지만, 말씀하신 기능들이 어느정도만 구현이 된다면 사용 에디터를 바꾸고 싶은 생각이 듭니다.

언제나 삽질 - http://tisphie.net/typo/

언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net

lifthrasiir의 이미지

2번에 대해서: Befunge도 편집할 수 있게 만들어 주신다면 써 보도록 하겠습니다.
혹시 모르실까봐... Befunge라는 건 이런 코드를 쓰는 언어입니다.

c>s10>" llaw eht no "v
v2_v#.:g00" of beer" <
>0g>"elttob">:#,_$   |
v"wn pass it around "<
>"od eno ekaT"52*0v!:<
v"n the wall"*5201_, ^
>"o reeb fo selttob"0v
>:v     1<vp00.::-1g0<
^,_$\v   ^_>:#,_@

(David Johnston)

6번(등)에 대해서: 일단 Visual Studio 2008 같은 걸 깔아 보시고 다시 생각해 보세요.

9번에 대해서: Boost.Preprocessor 코드를 보시고 테스트해 보시길 권합니다.

12번에 대해서:

a = "string";

이라고 입력되었다면 어떤 코드가 생성되나요? 다음 중 하나 골라 보세요.
char *a;
const char *a;
void *a;
std::string a;   // C++의 경우, #include <string>도 넣어 주면 금상첨화
CString a;       // C++ + MFC의 경우
QString a;       // C++ + Qt의 경우... 등등

13번에 대해서: C++ 표준에 있는 헤더나 파이썬의 NumPy 같은 라이브러리를 쓰라고 사용자에게 협박하는 기능을 만들어 보세요. 아, 그리고 저는 제곱근을 많이 써서 power(x, ) 하면 제곱이 아니라 제곱근이 되도록 했으면 좋겠군요.

14번에 대해서: log(tan(a))는 어떤 변수를 만드나요? tan_a? log_tan_a? log_tan? (에이 설마 이건 아니겠지.)

17번에 대해서: 가까운 컴퓨터에 있는 자바 런타임이나 비주얼 스튜디오를 써 보시길 바랍니다. 그리고 다음 파이썬 코드는 어떻게 해석되나요?

def printcondandontrueelseonfalse():
    print 'WTF!'
 
cond = 1 < 2
ontrue = 'Yes.'
onfalse = lambda: 'No.'
print cond and ontrue else onfalse()

19번에 대해서: 다음 C 코드를 생각해 보시길 권합니다.
rotated = (value << shift) | (value >> (sizeof(value) * CHAR_BITS - shift));

24번에 대해서: C에서 struct blah와 union blah는 어떻게 구분하나요?

착한아이의 이미지

제가 도통 모르는 의문만 지적하셨어요.. 마치 숙제하는 기분인걸요..

2. befunge는 텍스트판 LabVIEW를 보는 기분이네요..
궁극적으로는 가능할것도 같아요.. 하지만 일단 구조적 텍스트가 아니고
아직은 어떻게 구현해야할지 별 아이디어가 없어서, 현재로선 "작성할수없다"라고 해야겠네요..

6. 제가 Visual Studio 2008 을 구경해볼 길이 없는데
혹시 근처에 있으시면 말씀하시고자하는 기능의 스크린 샷 좀 보여주실수 있을까요..?

9. 제가 프로그래머가 아니라 bpp는 첨 보는데요.. 템플릿의 템플릿쯤인가요..?
아직 템플릿을 고려하고 있지는 않은데 역시 궁극적으로는 가능할것 같아요.. (낙관)
하지만 저로선 완성해야할게 너무 많아서.. 언젠가 다른분들이 해주시겠죠.. ㅎㅎ (무책임)

12. 자동지졍형은 사용자가 선택한 디폴트가 될거예요.. 필요하면 나중에 변경하셔도 될거고요..
자동지정될 형이 무엇일것인가는 별로 중요한 문제는 아닌듯 싶어요..

13. 자동인자입력도 마찬가지겠죠.. 사용자가 지정한 디폴트로..

14. log_tan_a 로 될것 같네요..

17. 무슨코드인지 잘 모르겠네요.. (에궁.. 어렵다..)

19. 역시 무슨코드인지.. 하지만 표현상 오류는 없어보이네요..

24. 변수들이 형지정에 대한 정보를 가지고 있을것이므로, 구분이 가능할거예요..
변수명 변경 역시 특정 변수상에서 시도하는것이기 때문에 변수정보를 참조할수 있을거예요..
단순한 텍스트 Replace는 아니랍니다..

제가 논지를 올릴 때는 논지에 관련된 의견을 듣고자 함이지, 논지의 여부를 논쟁하기 위함이 아니예요.
논지의 취지를 이해하지 못한 의견에는 가급적 답글 달지 않겠어요. :P

lifthrasiir의 이미지

그냥 심심해서...

2번: Befunge는 난해한 프로그래밍 언어라 불리는 언어군에 속하는 간단한 언어입니다. 컴파일이 불가능하도록 (자기 자신을 바꿀 수 있게) 설계된 언어죠. 게다가 2차원 코드 구조를 가지고 있어서 사실 보통 편집기로 편집하려면 인내심이 좀 필요하죠. 이 언어를 예로 들은 것은 착한아이 님께서 추구하시는 범용성이 그냥 불가능하다는 걸 보이기 위해서 써 봤습니다.

6번: 저는 Visual Studio 2008을 안 가지고 있어서 생략합니다. -_-; 그리고 블록 폴딩은 웬만한 IDE에서 다 되는 걸로 알고 있습니다. (제 기억으로 VS.net에서는 C# 코드의 #region, #endregion도 폴딩해 줬던 것 같습니다.)

9번: Boost.Preprocessor는 C/C++ 전처리기를 위한 라이브러리입니다. 이게 무슨 소린가 하면, 컴파일러 없이 전처리기만 있어도 돌아 가는 라이브러리란 말입니다. (gcc의 경우 cpp -- C PreProcessor -- 만으로 구동할 수도 있다 정도로 받아 들이시면 됩니다.) 이 라이브러리에는 이런 종류의 코드들이 난무합니다.

#define BOOST_PP_LIST_FOLD_LEFT_1(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_2, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(2, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
#define BOOST_PP_LIST_FOLD_LEFT_2(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_3, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(3, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
#define BOOST_PP_LIST_FOLD_LEFT_3(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_4, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(4, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
...

매크로에 대해서도 비슷한 것을 고려하고 계신다면 이런 코드의 처리를 어떻게 해야 할 지 고민하셔야 할 겁니다.

12. 사용자가 어떤 값을 원하는지 어떻게 아실 건가요? float pow(float x, float y)라는 함수가 있고 y의 기본값에 (어떤 식으로든) 2를 넣었다고 가정하고 생각나는 예시를 들어 보겠습니다.
- 제가 다른 컴퓨터에 갔을 때 저 기본값을 쓰고 싶으면 어떻게 해야 하나요?
- 제가 (x**y)%z를 구할 수 있는 함수가 필요해서 저 함수에 float pow(float x, float y, float z)를 오버로딩했습니다. 이 함수의 기본값은 어떻게 되나요? (인자 수가 달라서 상관 없다고 생각하신다면 float 대신 BigInteger라는 큰 정수 클래스를 쓰는 오버로딩을 생각해 보세요.)
- 해당 코드를 제가 다른 프로젝트에서 필요해서 복사 붙여넣기 했을 때 그 기본값은 보존되어야 할까요? 보존되지 말아야 할까요?
- 제가 저 함수를 특정한 라이브러리의 일부로 넣었습니다. 이제 같은 에디터를 쓰는 다른 사용자가 그 라이브러리를 받아서 쓴다면 기본값은 보존되어야 할까요?
- 좀 오버같지만, 파이썬의 ctypes 라이브러리 같은 외부 함수 인터페이스(FFI)를 사용해서 해당 함수를 불러 와 쓴다면 기본값은 보존되나요? 아닌가요?
이 모든 질문에 대답하실 수 있다면 정확히 무엇을 만들려고 하시는 건지가 다소 명확해질 것입니다. (그만큼 원래 의도하는 바가 너무나도 광범위하고 불명확한다는 말이죠.)

14. 원래 답변은 조금 농담이었지만 좀 더 실용적인(?) 예제를 들면, 만약 log_tan_a라는 변수가 이미 있었다면 어떻게 하실 건가요? log_tan_a_? log_tan_a_2? 파이썬같이 네임스페이스가 실시간으로 바뀔 수도 있는 언어라면 어떻게 하실 건가요? (예를 들어 저 함수를 사용하기 직전에 제가 globals()['log_tan_' + chr(90)] = 42 같은 코드를 실행했을 수도 있습니다...)

17. print cond and ontrue else onfalse()라는 문장의 공백을 모두 무시하면 printcondandontrueelseonfalse()라는 함수 호출이 됩니다...

19. 저 코드는 모든 괄호를 없애도 같은 의미가 됩니다. (궁금하시면 C/C++ precedence로 구글링해 보시면 자료가 많이 나올 거에요.) 하지만 괄호를 빼고도 저 코드가 하는 일을 알아 볼 수 있을 지는 모르겠군요.
아, 그리고 저 코드는 value를 shift 비트만큼 왼쪽으로 쉬프트하고 넘친 비트들을 반대쪽으로 밀어 넣는, 보통 rol (rotate left) 라고 부르는 코드입니다. int가 32비트면 rol(0x12345678, 8)은 0x34567812가 되겠군요.

24. 흠 여기에 대한 답변은 위에서 다 한 것 같군요.

제가 하고자 하는 말은 뭐 별 거 아니고... 정확히 무슨 물건을 만들 건지, 어떻게 작동하며 그것이 현실적으로 어떻게 가능한 것인지를 생각해 보시라는 말입니다. 님께서 쓰신 글은 말하자면 "이 프로그램을 사용하면 여러분은 정보의 바다를 헤엄쳐 다닐 수 있을 것입니다." 정도의 애매모호한 내용이고, 실제로 언어(의 변형--variant--이라거나)를 만들려는 건지, 컴파일러 내지는 전처리기를 만들려는 건지, 에디터를 만들려는 건지, 셋을 합친 건지 등등이 전혀 드러나 있지 않지요. 그나마 뭘 만들 건지 정해도 실제로 해 보면 정말 말도 안 되는 문제들이 산적해 있다는 건 여러 분께서 보여 주셨으니 생략하고요.

위 기능을 가진 에디터? 언어? 컴파일러? 하여튼 그런 것들의 궁극적인 목표가 알아 보기 좋은 코드를 만들려는 거라면 그냥 새로운 언어를 만들어 보시는 것도 어떨까 싶습니다. http://subtextual.org/ 같은 게 그런 실험 중 하나죠.

착한아이의 이미지

2. 네.. 제목에서처럼 프로그래밍 구조를 가지는 에디터니까 그외 구조에 대해서는 범용성이 없는 셈이지요..

6. VS2005에서는 못봤었는데 하긴 위 다른분이 알려주신 scinitilla Editor만해도 되긴 되네요.. ㅎ

9. 전처리 기능을 고려할때 생각해 볼께요..

12.
- 다른컴터에서 기본값을 쓰고자 할때는 옵션창에서 바꾸시면 될거고요..
- 오버로딩함수는 정의할때 기본값도 정해주면 되겠네요..
- 생략상태를 유지할지는 깊이 생각해보지는 않았는데
명시적으로 자동입력으로 해두면 좀 간단해질 문제같아요..
글고 생략형은 현재도 사용되지 않나요? f(int x=2)
단지 제 시도가 다른점은 중간인자,인덱스의 생략도 지원하자는 취지였어요..

14. log_tan_a 가 이미 존재하는 중이라면 덮어 쓰겠네요.. 이점을 우려하시면 역시 옵션에서 해제..

17. 공백은 늘 인정해야할것 같은데요..

19. 생략형은 옵션일테고요.. 완성형-생략형을 수시로 바꿀수 있도록 하면 되겠네요.. 생략형 지원에는 다른 음모가 있답니다.. ㅎ

제가 좀 동문서답을 한것도 같은데요..
제가 이쪽 분야를 잘 몰라서.. 말씀하시고자 하는 부분을 잘 못알아 들어서 그럴거예요..
이 편집기의 기본철학을 다시 말씀드리면, 이 편집기는 "사람이 할수 있는것 까지만 해낸다" 이어요..
어짜피 사람이 했어야 할 노동을 조금 덜어주는것 뿐이랍니다..
지적하신 내용중 사람도 해낼수 없는 사항이 있었다면, 이 편집기 역시 해낼수는 없겠지요..

알려주신 subText의 제작자 역시 저와 비슷한 동기가 아닐까 싶네요.. (소개 감사해요..^^)
subText에서처럼 다중 case의 표현에 대해서도 저도 고민을 좀 해봤는데..
제 프로그래밍 수준이 초보수준이라.. 손대지 않기로 했어요..

그리고 제가 멀 만들려하는지 대충 알고는 있는데요..
여기 쓴 부분들은 전체기능의 6%정도쯤이고요,
94%는.. 죄송하지만 아직은 알려 드릴수가 없어요..
하지만 말씀하시는 부분들은 늘 경청하고 있고요..
계속 따끔한 지적 부탁드려요..

제가 논지를 올릴 때는 논지에 관련된 의견을 듣고자 함이지, 논지의 여부를 논쟁하기 위함이 아니예요.
논지의 취지를 이해하지 못한 의견에는 가급적 답글 달지 않겠어요. :P

착한아이의 이미지

제가 임의로 추가한 문법이 몇개 있는데요.. 한가지만 소개하면..

do_while_do 라는 명령이 있어요.. (이름이 참.. ^^;)

기존 언어로 표현하면
for (;;) { A; if (a) break; B; } 쯤인데요.. 여기서
A; 가 없으면 while (a) { B; } 로 저장하고요..
B; 가 없으면 do { A; } while (a); 로 저장해요..
사용자는 while do를 쓸건지, do while을 쓸건지 고민할 필요가 없지요..

기존 언어중에 이 do_while_do 라는 명령이 있는지 모르겠네요..

제가 논지를 올릴 때는 논지에 관련된 의견을 듣고자 함이지, 논지의 여부를 논쟁하기 위함이 아니예요.
논지의 취지를 이해하지 못한 의견에는 가급적 답글 달지 않겠어요. :P

segfault의 이미지

IOCCC(http://www.ioccc.org)에 제출되었던 코드도 분석이 가능한지 궁금하네요.

----
http://www.planetmono.org

착한아이의 이미지

재밌는 대회네요.. ^^
제가 만들 편집기는 항상 4.구조적 표현을 유지하고 있기 때문에
코드글자를 위치로 예술적 표현을 하지는 못할것 같네요..
ioccc에 제출할 분들에겐 부적합한 편집기일것 같고요..
오류없는 Run을 목적으로 할 분에게만 적합할거예요..

제가 논지를 올릴 때는 논지에 관련된 의견을 듣고자 함이지, 논지의 여부를 논쟁하기 위함이 아니예요.
논지의 취지를 이해하지 못한 의견에는 가급적 답글 달지 않겠어요. :P

bootmeta의 이미지

현재 님이 구현하려는 광범위한 언어를 지원하는 편집기는 존재하지 않습니다.

실제 구현을 목적으로 한다면 적절한 한계와 범위를 정하고 하셔야 할 것 같군요.

현재 실제 완벽에 가깝게 구현된 경우를 살펴보면
1. java 처럼 virtual machine, 언어 spec이 명확
2. ruby, python 처럼 단일 표준 위원회(?)가 직접 그 구현을 담당하는 경우
- sas나 matalab처럼 자신들 제품에만 도입된 언어 포함
3. visual c++처럼 지원 컴파일러, script 처리기를 직접 제작하는 경우
4. debug, reflection 기능을 처음부터 충분히 고려가 된 상태에서 언어가 개발된 경우

즉 1,2번 처럼 방언이 아닌 표준어만 지원하거나 3번처럼 여러 변종 중 단일 target만 고려하는 경우입니다.
만일 c, c++처럼 macro엔진과 컴파일러가 혼용되어 있는 경우 실제 syntax의 의미를 해석하기 위해서는 고난이도의 기술과 심지어 compile 시간과 비슷한 처리 시간이 필요할 수도 있습니다.

저를 포함해서 회의적인 의견들과 냉소적인 반응들이 나오는 이유는 다른 것이 아닙니다.
1,2,4번과 같은 경우는 가능성이 있으나 3번에서 보듯이 플랫폼등의 이유로 변종이 여러가지이거나 그 구현 과정의 복잡성으로 인해 그 한계를 인정해야된다고 보기 때문입니다.

현재 상업용으로 팔리는 소스 분석기나 편집기들의 경우에도 그 한계, 제한된 환경을 고려해서 만들어졌고 대상 언어 역시 제한적입니다.

이상이 큰 것은 좋습니다만 그 구현을 위해서 차례 차례 가능한 것부터 구현하면서 지인들과 의견 교환을 해 보시는 것이 좋습니다.
그리고 만일 추후 공개할 예정이라면 지금이라도 구현된 코드를 공개하시고 의견과 도움을 구하는 것이 밑그림을 그리는 것에 도움이 될 겁니다.

ps) 님이 말씀하신 목적에 부합하려면 보기좋게 코드를 입력하거나 ioccc 제출 코드처럼 보기힘든 코드에 상관없이 처리해야 합니다.

착한아이의 이미지

Research는 어떤 믿음으로 부터 출발하지요..
제가 믿는건.. 이 편집기는 "사람이 해낼수 있는것 까지만 해낸다." 이어요..
사실 이 편집기 자체는 깡통이고요.. 그냥 사람이 했어야 할 노동을 조금 덜어주는 것 뿐이랍니다..
사람도 모르는 무언가를 대신 해줄것으로 기대하시면 안되고요.. (인공지능 아니어요..)

ioccc용 코드는 4.보기좋은 코드라는 철학에 위배되기 때문에, 대상에 포함시키고 싶지는 않네요..
이 편집기의 목표가 컴파일러는 아니랍니다.. ioccc용 코드는 다른 편집기를 쓰셔야할것 같네요..

제가 논지를 올릴 때는 논지에 관련된 의견을 듣고자 함이지, 논지의 여부를 논쟁하기 위함이 아니예요.
논지의 취지를 이해하지 못한 의견에는 가급적 답글 달지 않겠어요. :P

bootmeta의 이미지

compiler가 목적이 아닌 간단한 script 언어를 위한 편집기라 하더라도 보기좋은 코드가 전제가 될수는 없습니다.
syntax를 처리하는 처리기 입장에서는 사람에게 보기가 좋든 말든 상관없습니다.
문법에 맞게 처리해야할 단순한 코드 덩어리일 뿐이니까요.

착한아이의 이미지

ioccc 코드든 보기좋은 코드든, 결과는 같겠지요..

제가 초보라 그런지..
보기 불편한 코드는 알고리즘 오류도 일으키기기 쉽고, 작업 생산성도 떨어뜨리더라구요..
그래서 syntax처리입장이 아닌 편집자 입장에서 오류를 일으킬만한 요인이 적은 편집기를 나름 정의했었고요..
메모장만으로도 생산성이 높거나, 오류를 거의 일으키지 않으시는 분들에겐 불필요할수도 있겠지요..

제가 논지를 올릴 때는 논지에 관련된 의견을 듣고자 함이지, 논지의 여부를 논쟁하기 위함이 아니예요.
논지의 취지를 이해하지 못한 의견에는 가급적 답글 달지 않겠어요. :P

segfault의 이미지

그 편집기로 obfuscated code를 짤 수 있느냐는 의도로 질문한 것이 아니고..

만들고 계시는 편집기가 만약 obfuscated code 처럼 매크로나 전처리기로 잔뜩 꼬아 놓은 코드도 문제 없이 분석해낼 수 있는지에 대해서 물었던 것입니다.

사실 그게 별 의미는 없지만.. 그래도 궁금하잖아요. :P

----
http://www.planetmono.org

sugarlessgirl의 이미지

머 이런거 저런거 떠나서 나름 고민을 많이 하신거 같습니다.
좋은 결과 있길 바랍니다.

익명 사용자의 이미지

편집기와 언어시스템(컴파일러/인터프리터) 간의 조화가 문제가 되겠네요.
common lisp 개발환경인 emacs+slime 에서는 emacs 가 slime 을 통해서
lisp 구현체와 통신을 하게 됩니다. 제가 접해본 개발환경중 가장 인상적인 환경이었습니다.
lisp 이라 가능한 일이었지만요.

접해보진 못했지만 스몰토크역시 시스템이 아예 편집기능을 포함한 경우가 많다고 들었습니다.

부정적인 의견을 가지신분이 많으신데..
befunge, ioccc 등은 개발 초기에 고려할 사항은 아니죠.
천천히 구현을 해나가서 좋은결과 있으시길 바랍니다.

익명 사용자의 이미지

만선이군요. 월척입니다.

구문분석 기능을 내장한 편집기를 만들고 싶다는 뜻인거 같은데
여러 언어로 동시에 작성하는 것도 지원하게 하겠다는 부분에서 낚시임이 느껴집니다.

어쩌면 구문분석이 무엇인지 모르는 상태이기 때문에 가능한 상상
(초보이기 때문에 가능한 상상)
인건지도 모르겠군요. ^^

이래서 프로그램 설계는 유경험자, 배테랑이 해야 하나 봅니다.
(요구분석을 보는 순간 이런건 안되겠군... 이건 충분히 가능해 같은 느낌이 팍팍 들테니까 말이죠)
그것의 구현은 설계자의 씨다바리들이 야근하며 열심히... =3=3=3

착한아이의 이미지

제가 좀 초보여요.. ^^;
늘 배우는 입장이지요..
말씀하시고자하는 구문분석이 무엇인가요..?

제가 논지를 올릴 때는 논지에 관련된 의견을 듣고자 함이지, 논지의 여부를 논쟁하기 위함이 아니예요.
논지의 취지를 이해하지 못한 의견에는 가급적 답글 달지 않겠어요. :P

익명 사용자의 이미지

구문분석을 모르고 기능을 구현하셨다니 더 놀라운걸요?

부디 공개하셔서 저희에게 가르침을 주시기 바랍니다.

익명 사용자의 이미지

문법을 어떤식으로 파싱하실건지 궁금하네요. 다양한 재귀적인 용법을 지원한다고 생각하니 머리가 아찔

익명 사용자의 이미지

글 올리신 분의 의도는 정말 존경 스럽네요. 저도 평소에 있었으면 좋겠다... 하는 기능들이 한 두개가 아닌데...
그러나 vs.net을 이용한 C++프로그래머인 저에겐 좀 위험한 기능들이 있는듯 합니다.

그래서 한가지 제안해 보는것은, 먼저 각 언어별로 IDE를 따로 만들어 보는것은 어떨까 하는 것입니다.
분명 언어별로 필요한 기능이 다를것으로 판단 되고, 문법도 비슷하면서도 틀린게 많아서 모든 언어를 통합하는 IDE를 처음부터 계획하시면 놓치는 부분이 많을 듯 합니다.
우선 가장 많은 피드백을 받을 만한 언어를 골라서 만들어 보시고, 그 경험을 통해서 통합 언어 IDE를 설계 해 보시는건 어떨가 합니다.

그리고 코드컴플릿 책의 초반에 나온것과 같이 하나의 프로그램을 만들기 위해서는 그 프로그램을 필요로 하는 업체에 한달정도 가서 요구사항에 대해 완벽히 파악하라고 나와 있습니다. 즉, 그 언어를 잘 모르거나 그 언어로 충분히 개발해본 경험 없이 그 언어의 IDE를 만들면 나중에 추가해야 할 기능들이 더 많을 듯 하고, 그렇게 되다 보면 설계의 근본을 바꾸게 될 수도 있습니다.

착한아이의 이미지

몇몇 언어에서는 근본설계를 뒤집게 될 경우도 감안은 하고 있어요..
그래서 그런 경우가 안생기도록 변수구조 설계하는데 좀 헤매는 중이네요.. ^^;
하지만 위에 적은 언어들을 대충 둘러본 바로는 아직은 심각한 부분은 없는듯 해요..
그래서 언어별로 IDE를 별도로 할 생각은 없고요..
이 편집기가 좀 깡통이다보니 C++ 은 완벽지원은 못할지도 모르겠어요..
일단 골격이 완성되면 언어별로 테스트 해볼 생각이어요..

제가 논지를 올릴 때는 논지에 관련된 의견을 듣고자 함이지, 논지의 여부를 논쟁하기 위함이 아니예요.
논지의 취지를 이해하지 못한 의견에는 가급적 답글 달지 않겠어요. :P

케노스의 이미지

둘 중 하나인 것 같습니다.

제 생각에는 절대 불가능입니다.
저건 에티더도 + 인터프리터 + 전처리 모든 과정을 통합시김을 모자라서 동시성도 보장해야합니다.
게다가 언어적 스펙에 따른 문법 자동 ...

낚시라면 월척 축하드리고
잘 모르셔서 그런거라면 이 옛 말이 생각나네요. "모르면 용감해지죠."

Important is HOW. And Real.

Goes on and on and on....

Goes on and on and on....

착한아이의 이미지

제가 그리 대단할만한 걸 만드는건 아니고요..
전 단지 그냥 기존 편집기들의 서비스가 조금 미흡한것 같아서
조금이라도 사용자의 입력을 편하게 하려고 만드는것 뿐이어요..
제가 전문프로그래머가 아닌지라 UI랑 연동되는 코드는 어림도 없고요..
그냥 독립함수정도만 편집하려해요..
현재 실행파일은 1Mb도 안되고요.. 소스파일도 200kb를 안넘어요..
아마 전문프로그래머가 만드시면 1주일도 안걸릴 비교적 간단한 프로그램이어요..
초보인 저 혼자서 해봐야 얼마나 해내겠어요..
모든 언어를 다 완벽히 지원하려면 회사수준의 인력들이 참여해야될거예요..
이 편집기 자체가 실전용이라기 보다는
그냥 이런 편집도 가능하다는 걸 보여주는 정도겠지요..
나중에 정체를 아시면 실망하실텐데.. 어쩌나..

제가 논지를 올릴 때는 논지에 관련된 의견을 듣고자 함이지, 논지의 여부를 논쟁하기 위함이 아니예요.
논지의 취지를 이해하지 못한 의견에는 가급적 답글 달지 않겠어요. :P

익명 사용자의 이미지

어린 것이 꿈을 꾸었구나...

-영화 '다찌마와리'중에서

착한아이의 이미지

과거에 꿈꾸던 상상중에 하나였겠죠..?

1982년쯤 무전기가 유행했었는데요..
그때 그걸보고 미래에는 개인마다 전화기를 휴대할거라 생각했었어요.. 아마 전화번호는 주민번호쯤..
그때는 좀 어릴때라 어떻게 그것이 가능할지에 대해서는 상상하지 못했었죠..
머.. 그때 상상했던거랑 기술은 다르지만 요즘은 확실히 개인마다 전화기를 휴대하고 있지요..

이 편집기.. 제가 완성하지 못하더라도, 누군가는 해내겠지요.. ^^

제가 논지를 올릴 때는 논지에 관련된 의견을 듣고자 함이지, 논지의 여부를 논쟁하기 위함이 아니예요.
논지의 취지를 이해하지 못한 의견에는 가급적 답글 달지 않겠어요. :P

익명 사용자의 이미지

그 긍정적인 마인드가 보기 좋습니다.

마치 이명박씨가 대운하를 행하는듯한 거대한 마인드를 소유하고 계시는군요. :-)

착한아이의 이미지

비유가 적절한건진 모르겠는데요..
그래도 머.. 전 아무에게도 돌이키기 힘든 피해를 남기진 않아요.. ㅎㅎ

제가 논지를 올릴 때는 논지에 관련된 의견을 듣고자 함이지, 논지의 여부를 논쟁하기 위함이 아니예요.
논지의 취지를 이해하지 못한 의견에는 가급적 답글 달지 않겠어요. :P

착한아이의 이미지

비유가 적절한건진 모르겠는데요..
그래도 머.. 전 아무에게도 돌이키기 힘든 피해를 남기진 않아요.. ㅎㅎ

제가 논지를 올릴 때는 논지에 관련된 의견을 듣고자 함이지, 논지의 여부를 논쟁하기 위함이 아니예요.
논지의 취지를 이해하지 못한 의견에는 가급적 답글 달지 않겠어요. :P

JuEUS-U의 이미지

쭉 훑어보니 초보로써의 투정이 엿보입니다.
그리고 사실은 거의 다 있는 기능입니다.
물론 어떤 에디터도 제시된 기능을 한꺼번에 가지고 있지는 않습니다.
그렇지만 그 기능을 다 가질 필요도 없을 뿐더러, 없는게 오히려 더 편합니다.

자동화 기능이 있으면, 코딩하면서 기능을 지속적으로 의식해야만 하고,
그 것은 오히려 코딩에 집중하는 것을 방해합니다.
예를 들자면, 내가 말을 하고 있는데 내가 할 말을 옆에서 하고 있는 꼴인 겁니다.
그렇게 되면 말을 제대로 못하게 되는건 당연한겁니다.
프로그래밍 언어도 일종의 말로써, 코드는 컴퓨터에게 일방적으로 전달하는 명령문입니다.
자동화 기능이 코드에 개입하면 할수록, 그 코드는 자신의 것이 아니게 됩니다.
그 것을 자신의 것으로 만들기 위해 불필요한 행동을 하게되고,
결과적으로는 더 불편해집니다.

이해가 가십니까?
그러니 진정 코딩의 생산성을 바라신다면 언어를 바꾸세요.
Python, scheme, 그리고 lisp도 추천합니다.
하지만 그런 머리만 아파지는 에디터를 만드는 건 죽어도 추천하지 않습니다.

착한아이의 이미지

고수님들은 자동화 기능을 별로 반기지 않는 편들이시군요..
위에도 썼지만 제 편집기에서는 do_while_do 이라는 문장이 있어요..
for (;;) { A; if (a) break; B; } 와 같은 문장인데요..
A, B의 유무에 따라 저장시 while_do, do_while로 자동선택되요..
편집중에는 저것이 while_do일지 do_while일지 몰라도 되지요..
이런 자동화기능들이 코드 집중력을 방해하는지는 제가 잘 모르겠는데요..
머.. 적어도 막 입문하시는 초보님들은 제 편집기를 좋아해주실것 같아요.. ㅎㅎ
scheme은 안써봤는데 기회가 되면 한번 써볼께요..

제가 논지를 올릴 때는 논지에 관련된 의견을 듣고자 함이지, 논지의 여부를 논쟁하기 위함이 아니예요.
논지의 취지를 이해하지 못한 의견에는 가급적 답글 달지 않겠어요. :P

토끼아빠의 이미지

와 ~~~ 넘 대단해요~~
헌데 프로그래머도 아니고 초보자라고 하셨는데~~~ 너무 억측아니세요???
글쎄 제 개인적인 의견이니 넘 신경쓰지 마세요~~
하여튼 이거 완성되면 즉시 알려주시면 고맙겠네요~~
제가 젤첨으로 이용해보고싶네요~~~
がんばてください~~

좋은 하루 되세요!!

착한아이의 이미지

이 편집기의 아이디어를 처음 생각하기 시작한건 꽤 오래전(1992년) 인데요..
막상 만들기 시작한건 한달도 안되요.. ^^;
그때는 이 아이디어를 가능하게할 환경도, 프로그래밍 지식도 없었지요..
더구나 주변에서는 별 관심들이 없었고요..
머.. 지금이라고 크게 다른것 같지는 않지만.. ^^;
어짜피 전공도 아니고 그래서 15년이 넘도록 걍 손 놓고 있었어요..
제가 비록 숙제만 간신히 해내는 초보수준이긴 하지만,
요즘 환경정도면 만들수도 있을것 같다 싶어 시작해봤어요.. (재미로)

제가 논지를 올릴 때는 논지에 관련된 의견을 듣고자 함이지, 논지의 여부를 논쟁하기 위함이 아니예요.
논지의 취지를 이해하지 못한 의견에는 가급적 답글 달지 않겠어요. :P

익명 사용자의 이미지


꿈은 꾸데 깨어 있어라

일장춘몽

간단한 결과 없나요? 최소한 스샷이라도.

1992년도에 이런 아이디어를 생각했다.

저는 1990년도에 진삼국무쌍의 아이디어를 생각했는데.

착한아이의 이미지

이 편집기에는 크게 편집, 계산, replace 기능이 있어요..
그중 아래는 replace 작업중인 스샷이어요..
계산도 되는데 이건 예제가 준비된 후에..

코딩 여유도, 실력도 부족하다보니, 숫자 하나 replace하는데 4달이나 걸렸네요.. ㅎㅎ

담번엔 긴 코드를 얼마나 적은 횟수의 키입력으로 작성하는지 준비해볼께요..
(기존 편집툴이 코드를 50타로 작성하였다면 여기선 아마 10타 이하로 입력할듯해요..)

제가 논지를 올릴 때는 논지에 관련된 의견을 듣고자 함이지, 논지의 여부를 논쟁하기 위함이 아니예요.
논지의 취지를 이해하지 못한 의견에는 가급적 답글 달지 않겠어요. :P

semmal의 이미지

어쨌든 노력하시는 모습이 아름답습니다.

처음에 기대하던 결과가 설령 나오지 않는다고 하더라도 착한아이님은 이미 성공하신 것 같습니다.

제 눈에는 그리 보이는 군요.

착한아이님이 계속 노력만 하시면, 제가 도와드릴 수 있는 날이 올지도 모르겠군요.
------------------------------
How many legs does a dog have?

------------------------------
How many legs does a dog have?

lain07의 이미지

전 왠지
vi조차도 모든 기능을 사용할 정도의 능력이 안되서 ^^;..

해당 프로젝트로 많은 경험과 공부를 하신다면 그것보다 좋은게 어디있겠습니까~
___________________________
I like Small Linux.


___________________________
I like Small Linux.

appler의 이미지

멋지군요..

완성되면 테스터 시켜주삼=333


laziness, impatience, hubris

不恥下問 - 진정으로 대화를 원하면 겸손하게 모르는 것은 모른다고 말하는 용기가 필요하다.


laziness, impatience, hubris

不恥下問 - 진정으로 대화를 원하면 겸손하게 모르는 것은 모른다고 말하는 용기가 필요하다.

익명 사용자의 이미지

지금 이 글타래 관련 내용들 어떻게 진행되는지 궁금하네요 ㅎ

착한아이의 이미지

1차 프로토타입 완성후 동영상 캡쳐한후에
다시 2차 프로토타입 작업중에 있어요. T.T

(2차 프로토타입 자료구죠)

2차 프로토타입에서는 3가지 계층구조(종속클래스, 파일내 종속함수, 함수내 스콮)를 보여주도록 설계했어요.
스콮은 C++ 호환성 때문에 넣긴 했는데, 솔직히 스콮이 왜 필요한지 이해는 안가요. ^^;
어쨌든 인스턴스 생성기준은 함수가 아니라 스콮기준이 되긴 했지만요.
3가지 계층구조를 보여주는 프로그램은 제가 처음 아닐까요? ㅎㅎ

역시 혼자 1년에 1달정도만 작업하다보니 참 많이 더디네요. ^^;

제가 논지를 올릴 때는 논지에 관련된 의견을 듣고자 함이지, 논지의 여부를 논쟁하기 위함이 아니예요.
논지의 취지를 이해하지 못한 의견에는 가급적 답글 달지 않겠어요. :P

cooper의 이미지

회의적으로 보는 댓글이 꽤나 있네요.
이런 접근 너무 좋습니다.

그리고, 지금 제가 댓글을 다는 2018 년 9월에는...
저 기능의 상당 부분이 VC 나 Intelli J 같은 에디터에 들어가 있고,
Kotlin / Swift 등의 Language 에 적용이 되는 개념들도 보이며,

아직은 적용되어 있지 않지만, 적용되면 좋을것 같은 아이디어도 많습니다.

화이팅 입니다.