C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
분야별 포럼
C++빌더
델파이
파이어몽키
C/C++
프리파스칼
파이어버드
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[28866] Re: 바이러스 때문이 아니고, 델파이 RTL 에서 닭짓을 해놨기 때문
빌더(TWx) [builder] 4909 읽음    2020-07-02 14:29
1920_9_3MB.rar 4.1MB 샘플 동영상 파일
초보 님이 쓰신 글 :
: 안녕하세요.
: 시드니 10.4 사용중 입니다.
:
: TMediaPlayer 이용해서 비디오 플레이하려고 하는데요
: floating point 에러가 나면서 실행이 안됩니다.
:
: 바이러스 문제일까 싶어서 백신도 돌려봤지만 바이러스 때문은 아닌거 같고요
:
: 해결 방법 좀 알려주시면 감사하겠습니다.




답변:


TMediaPlayer 컴포넌트 이용해서 동영상 플레이 할 때 (샘플 동영상 파일 첨부)

아래와 같이 floating point invalid operation 예외가 발생하는 것은
바이러스 때문이 아니고, 델파이 RTL 에서 닭짓을 해놨기 때문입니다.



수학에서 무한은 매우 유용한 개념으로 사용되는데요.
무한이라는 개념이 없으면 극한을 정의할 수 없고, 극한이 정의되지 않으면 물리, 기계, 우주 등 산업계에서 없어서는 안되는
미분, 적분이란 방정식이 성립할 수 없고 현대물리학이란 것도 존재할 수 없게 되죠. 무한은 수학적으로 매우 중요한 개념입니다.


예전엔 실수연산을 해주는 x87 CoProcessor를 메인보드에 별도로 장착할 필요가 있었고, CoProcessor가 없을 경우엔
컴파일러 벤더에서 소프트웨어적으로 실수형 연산을 에뮬레이션 해주는 라이브러리를 제공해야 했지만
요즘은 하나의 CPU 안에 x87 CoProcessor가 같이 들어있으므로 x87 에뮬레이션이 필요 없게 된 거고.


어떤 실수형 연산결과가 양 또는 음의 무한대가 되면...
CoProcessor가 하드웨어적인 Exception을 발생해 주는데...

컴파일러에서 X87 Exception 을 허용하게 되면

1#INF   Positive infinity
-1#INF  Negative infinity

1#SNAN  Positive signaling NaN
-1#SNAN Negative signaling NaN

1#QNAN  Positive quiet NaN
-1#QNAN Negative quiet NaN

1#IND   Positive indefinite NaN
-1#IND  Negative indefinite NaN

등의  개념을 프로그램 로직에서 수학적으로 직접 다룰 수 없기 때문에...

GCC, minGW, cygwin, Java, C#, VC++ 같은 메인스트림 컴파일러는 x87 Exception이 발생하지 않게 해서
프로그래머가 프로그래밍 시에 무한개념을 수학적으로 처리할 수 있도록 배려를 하고 있습니다.
그래야 dsp 신호처리, Fourier transform(프리에 변환) 등의 알고리즘을 구현하는데 있어서 유용하므로.


이걸 역행해서 보수적으로 거스르고 있는 컴파일러가 하나 있는데, 그게 바로 델파이 파스칼 언어 입니다.


예전엔 C++ 빌더도 델파이와 마찬가지로 닭짓을 했었지만 Rad Studio 10.4 버전에선 개선이 되어 있습디다.
개선이 되어 있더라도...

1#SNAN  Positive signaling NaN
-1#SNAN Negative signaling NaN

1#QNAN  Positive quiet NaN
-1#QNAN Negative quiet NaN

1#IND   Positive indefinite NaN
-1#IND  Negative indefinite NaN

등은 디테일하게 처리하지 못하고 있는 것은 예전이나 마찬가지 이고.
VC++ 2019는 모든 경우를 정확하게 처리하고 있지요.


C++빌더는 그나마 개선이 되어 있음에도 불구하고 델파이와 같은 문제가 발생하는 것은...
C++빌더에서 파스칼로 컴파일 되어있는 VCL을 이용하는 이상, VCL은 델파이 RTL에 종속되어 있기 때문에
델파이 RTL 런타임 라이브러리 Startup 코드가 같이 링크되어 실행되기 때문이죠.


델파이 RTL에서 닭짓을 해놨기 때문에...

다른 컴파일러로 만들어진 codec에서 처리되어야 할 실수형 연산 결과가 codec 내부에서 후속 처리되지 못하고
델파이 RTL에 의해서 Exception으로 박탈 당하고 있는 겁니다.



해결방법...

다음과 같이 constructor에서 코드를 emit 해주면 됍니다.

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
	__emit__(102, 199, 68, 36, 252, 127, 3, 155, 219, 226, 217, 108, 36, 252);
}


코드 emit 후 정상동작.






사견으로...


'마르코 칸투'라는 글쟁이가 맏고있는 것 중에 하나가 델파이 RTL 이라고 하던데...

델파이 사용자들에게 맹신적인 지지를 받고있는 마르코 칸투라는 사람을 프로덕트 매니저라는 자리에 앉힌 것은 또 무슨 닭짓인지.
이 친구가 쓴 책을 인터넷에서 다운 받아 읽어봤는데... 볼 만한 내용도 없고 있어봐야 RTTI 에 관한 내용 정도.
그것도 RTL 소스코드 갖고 짜집기해서 글 써놓은 수준에 불과하던데.

컴파일러 이론 전공한 석학들이나 영입해서 혁신을 기할 생각을 해야지...
델파이 책이나 쓰는 별볼일 없는 친구를 매니저로 앉혀서 뭐하겠다는 건지.

컴파일러 개발하는 회사가 무슨 팬클럽으로 움직이는 조직인가. 이러니 혁신이 안되지.


그 아이 [tsirorret]   2020-07-03 00:51 X
감사합니다. 늘 이렇게 신경써 주시니. 엠바가 좀 정신 좀 차렸으면 합니다.
아직 시드니를 깔지 않았습니다. 제가 쓸 예정이 컴포넌트가 컴파일 되지 않는 데요. 버그 때문에요. 그런데 칸투가 곧 고쳐줄게 해놓고 감감 무소식입니다. ㅎㅎㅎ
빌더(TWx) [builder]   2020-07-05 08:43 X
만들기 쉬운 파스칼 컴파일러에 매몰되어 있는 조직.
그것도 팬클럽 처럼 움직이는 조직에서 뭘 더 기대할 수 있을까요.
델파이 맹신자들을 인질로 삼아 계속 이런 식으로 가지 않겠습니까.
중탱이 [joongtang]   2020-07-20 10:49 X
그러고 보니 MS 는 Chief Architect 가 나와서 제품을 설명하는데 엠바카데로는 빌더님 말에 따르면 글쟁이(?)가 나와서 제품을 설명하네요...
근데 빌더님은 아직 C++ 빌더를 사용하고 계시나요?
엠바카데로의 단점을 너무나도 잘 알고 계시기에 단순히 궁금해서 여쭙습니다.

+ -

관련 글 리스트
28865 시드니 10.4 사용중 에러 초보 3244 2020/06/30
28866     Re: 바이러스 때문이 아니고, 델파이 RTL 에서 닭짓을 해놨기 때문 빌더(TWx) 4909 2020/07/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.