굿바이 로봇, 만세 광기 - 페이지 11

 

변수 이름 숨기기에 관하여:

simpleton 은 이미 인텔 컴파일러에 대해 썼습니다. gcc와 clang은 비슷한 상황입니다. 매우 엄격한 모드에서 컴파일할 때(메시지 측면에서):

gcc(clang) -Wall -Wextra

컴파일러는 이 문제에 대해 불평하지 않습니다. 숨기기 불만 사항은 별도의 -Wshadow 옵션으로 활성화됩니다. 저것들. C++ 컴파일러(MSVC 제외)에서 검증 자체는 어렵지 않습니다. 그러나 -Wshadow가 기본적으로 활성화되어 있는 (gcc 기반, 예를 들어 qt 작성자, 코드 블록...) 어떤 아이디어도 보지 못했습니다.

왜요? 아마도 대다수에게 이 메시지의 유용성이 의심스럽기 때문일 것입니다.

 
Pavlick :

변수 이름 숨기기에 관하여:

simpleton 은 이미 인텔 컴파일러에 대해 썼습니다. gcc와 clang은 비슷한 상황입니다. 매우 엄격한 모드에서 컴파일할 때(메시지 측면에서):

분명히, 당신은 오해의 소지가 있는 "엄격한 컴파일러 모드"와 정적 분석기의 실제 작업을 혼동하고 있습니다. 왜냐하면 당신이 그것들을 사용한 적이 없기 때문입니다.

컴파일러는 1-2분 안에 컴파일을 완료하는 반면 동일한 코드의 분석기는 몇 시간(PVS Studio) 및 수십 시간(CPP 확인) 동안 작동합니다. 따라서 결과의 품질과 깊이가 다릅니다.

 

모두를 환영합니다.

MQL4의 혁신에 대한 "도약"과 광기가 멈추지 않는지 거의 1년이 되었습니다. "그리고 변한 건 없어!" (와 함께).

이전에는 Metaquotes가 약한 언어 때문에 꾸지람을 받았지만 이제는 추가 "물"에 대해 꾸짖었습니다. 더 적은 문제는 없었습니다.

나 자신으로부터 다음을 추가할 수 있습니다.

트레이더, 프로그래머가 아닌 프로그래머 및 초보 프로그래머 도 간단한 알고리즘과 코드를 구현할 수 있습니다.

새 빌드에서 컴파일되지 않는 칠면조, 올빼미 등의 대규모 데이터베이스가 있는 경우 자세히 살펴보고 "가슴을 흔드는" 것이 좋습니다. 유용한 정보는 남겨두고 시간을 내어 새 빌드를 다시 작성하고 디버그하세요.

진짜 노련한 프로그래머 또는 그 프로그래머가 되고 싶은 사람들은 항상 혁신을 따르고 버그와 결함은 빵입니다. 좋은 프로그래밍으로 간주되는 오류 없는 코드를 작성하는 것입니다. Metaquotes의 모든 혁신을 탐구할 힘, 시간, 기회 또는 열망이 없다면 유창한 언어를 사용하십시오. DLL이 취소되지 않았습니다. 디버깅된 알고리즘을 연결하십시오.

 
Andrei01 :

테스트 환경은 코드 품질에 대한 요구 사항이 매우 높은 칩의 소프트웨어 설계 기능 검증을 위한 소프트웨어 제품에서 널리 사용됩니다. 또한 기능적 쉘은 칩 설계 코드 개발의 필수적인 부분입니다. 일반 소프트웨어 프로젝트를 작성할 때 많은 프로그래머는 이러한 기능 테스트에 대한 아이디어조차 없습니다. 이는 이러한 테스트를 처음부터 작성하는 것이 프로젝트를 작성할 때 직접 작성하는 것보다 더 많은 시간이 소요될 수 있고 있을 때만 정당화된다는 사실 때문입니다. 고품질 코드를 작성하기 위한 요구 사항이거나 여러 버전이 계획되어 있으며 동일한 프로젝트입니다. 반면에 잘 작성된 테스트 환경은 디버깅 및 코드 검증 시간을 크게 절약합니다.

정적 분석도 사용되지만 매우 피상적이고 기본 구문 검사로만 사용됩니다.

테스트 환경은 테스트 환경입니다. 테스트 환경은 테스트 중인 제품에 대해 "날카롭게"됩니다.

분석된 제품에 대해 "모르는" 일반 도구를 의미하므로 모든 제품에서 문제를 분석하고 찾을 수 있습니다.

 
Renat :

심플턴, 무슨 말도 안되는 소리야.

"무슨 말도 안되는 소리"- 이것은 분명히 위치의 완전한 불일치를 의미합니다.

레나트 :

전체 품질 관리 수준에 도달해야 비로소 이를 이해할 수 있습니다. 그 동안 당신은 자랑스러운 개별 프로그래머의 인식 수준에 머물며 "나를 제어하지 않는 것이 현명합니다. 제어는 실행되지 않는 별도의 유틸리티로 두는 것이 현명합니다."

"전체 품질 관리"가 왜 그렇게 낮은 수준을 허용합니까?

예를 들어:

 #property strict

/******************************************************************************/
class A {
private :
  A() { Print ( "A::A()" ); }

public :
   static void method1() {
     //A a; // 'A::A' - cannot call private member function      3.mq4   10      7
  }

   static void method2() {
    A *a = new A; // А здесь private member function великолепно вызывается
     delete a;
  }
};

/******************************************************************************/
void OnStart () {
  A::method1();
  A::method2();
}

생성자는 method2에서 객체 가 생성될 때 호출됩니다.

 00 : 50 : 23 Script 3 EURUSDm,M5: loaded successfully
00 : 50 : 23 3 EURUSDm,M5: initialized
00 : 50 : 23 3 EURUSDm,M5: A::A()
00 : 50 : 23 3 EURUSDm,M5: uninit reason 0
00 : 50 : 23 Script 3 EURUSDm,M5: removed

개체를 동적으로 생성할 때 모든 것이 괜찮은 이유, 즉 개체 메서드에서 private 생성자를 사용할 수 있고 자동일 때 private 생성자를 갑자기 사용할 수 없는 이유는 무엇입니까?

저는 개인적으로 MQL에서 단순한 것보다 조금 더 복잡한 것을 하는 것을 거부했습니다. 왜냐하면 저에게는 매우 어렵기 때문입니다. 저는 항상 작동하지 않는 것을 우연히 발견했습니다.

그러나 C/C++ 컴파일러에서는 그런 문제가 없습니다.

"저를 제어하지 않는 것이 합리적입니다. 제어를 실행하지 않는 별도의 유틸리티로 두십시오"라는 문제는 심리학과 직접 관련이 있습니다. 여기서 프로그래머가 스스로를 강제할 수 있도록 심리를 교정해야 하며, 이 심리를 우회하기 위해 기술을 심리에 맞추려고 하지 않아야 합니다.

나는 발명하지 않고 별도의 유틸리티가 내 눈앞에서 정기적으로 성공적으로 사용되며 작업 결과도 오류를 제거하는 데 성공적으로 사용됩니다.

레나트 :

우리는 결함으로 어려움을 겪고 있지만 동시에 많은 것을 추가하고 개선하고 있습니다.

아마도 우선 순위는 품질을 희생하면서 추가 및 개선으로 옮겨질 것입니다. 그러나 그것은 더 이상 그의 완전한 통제가 아닙니다.

레나트 :

금요일에는 실행 및 테스트 속도가 확실히 개선된 MT4가 릴리스됩니다.

그리고 언어 성능의 향상 - 이 경우 개체를 동적으로 생성하는 경우뿐만 아니라 개체의 메서드에서 개인 생성자를 사용할 수 있음을 의미합니다. 이미 존재할까요?

레나트 :

C++와 달리 MQL은 원시 참조의 거부로 인해 (dll에 종료가 없는 경우) 절대 위험하지 않으며 일반적으로 관리되는 언어입니다.

글쎄, "C++은 위험하고 자살적이다"와 "MQL은 절대 위험하지 않다"라고 가정해보자.

보안 면에서, 즉 정확히 "위험하고 자살적인" 기반으로 "절대적으로 안전한" 언어를 만드는 것과는 거리가 먼 언어를 MQL의 기반으로 삼아야 했던 이유는 무엇입니까? ?

 
Pavlick :

좋아요?


  안녕 공작님!

여기 내가 또 판사야!

다른 MT4에서 스크립트를 호출하여 코드를 테스트했습니다.

그리고 밝혀진 기이한 일들!

귀하의 코드는 Pepperstone의 MT4 빌드 670에서 잘 작동합니다.

(호주) 하지만 Alpari의 MT4 빌드 670에서 작업하고 싶지 않습니다!

알파리 챌린지에서     사용자 32.dll _                 이상해!

2개의 DLL이 먼저 호출됩니다(코드에 제공되지는 않지만!)

그 다음에   ~라고 불리는     사용자 32.dll _            그러나 그들은 그를 도서관에 던졌습니다!

그러나 당신은 또한 도서관에서 전화해야합니다!

Alpari가 도전에 맞서고 있는 것 같습니다.

즉, 코드 작업에 명백한 간섭이 있습니다!

비교를 위해 2장의 사진을 첨부합니다.

나는 당신에게 성공을 기원합니다!

판사

oo-bild zu 그로스!

MT4-페퍼스톤-user32.dll

MT4-Alpari- KERNEL32 .dll, GDI.dll, E:\metaQuotes\Terminal\F.......OBO\MQL4\Libraries\user32.dll

















 
simpleton :

"무슨 말도 안되는 소리"- 이것은 분명히 위치의 완전한 불일치를 의미합니다.

이것은 누군가가 많은 소프트웨어 제품을 경쟁 시장으로 출시하는 데 더 많은 경험을 갖고 있다는 것을 의미합니다.


"전체 품질 관리"가 왜 그렇게 낮은 수준을 허용합니까?

품질 관리의 일반 원칙에 대한 논의에서 특정 솔루션의 특정 단점으로 주제를 옮길 필요는 없습니다. 모든 제품에서 항상 결함을 찾을 수 있기 때문에 이 방법은 허용되지 않습니다.

예를 들어:

생성자는 method2에서 객체가 생성될 때 호출됩니다.

개체를 동적으로 생성할 때 모든 것이 괜찮은 이유, 즉 개체 메서드에서 private 생성자를 사용할 수 있고 자동일 때 private 생성자를 갑자기 사용할 수 없는 이유는 무엇입니까?

이것은 "클래스 의 정적 메서드는 클래스의 내용으로 올라갈 권리가 없습니다"라는 과잉 보호의 결과일 뿐입니다. 이 경우 액세스 제어를 약화시킬 필요가 있습니다.

저는 개인적으로 MQL에서 단순한 것보다 조금 더 복잡한 것을 하는 것을 거부했습니다. 왜냐하면 저에게는 매우 어렵기 때문입니다. 저는 항상 작동하지 않는 것을 우연히 발견했습니다.

"나는 모든 것을 구체적으로 비틀고, 접근을 차단하고, 경계선 행동에 호소하기 시작했습니다."와 같은 경우가 아닌 실제 사례를 제시하십시오.


그러나 C/C++ 컴파일러에서는 그런 문제가 없습니다.

다른 종류의 문제가 있습니다. 또한 정적 분석기를 사용하지 않는다는 사실을 고려하면 분명히 훨씬 더 많은 숫자가 있습니다.


"저를 제어하지 않는 것이 합리적입니다. 제어를 실행하지 않는 별도의 유틸리티로 두십시오"라는 문제는 심리학과 직접 관련이 있습니다. 여기서 프로그래머가 스스로를 강제할 수 있도록 심리를 교정해야 하며, 이 심리를 우회하기 위해 기술을 심리에 맞추려고 하지 않아야 합니다.

나는 발명하지 않고 개별 유틸리티가 내 눈앞에서 정기적으로 성공적으로 사용되며 작업 결과도 오류를 제거하는 데 성공적으로 사용됩니다.

아마도 우선 순위는 품질을 희생하면서 추가 및 개선으로 옮겨질 것입니다. 그러나 그것은 더 이상 그의 완전한 통제가 아닙니다.

그냥 단어 게임입니다. 당신의 입장은 앞서 "나는 통제할 수 없다"에서 이미 명확하게 설명되었으므로 "누군가 앞에서, 어딘가에서 사용하지만 막대기로 내 위에 서 있는 사람이 없고 나는 그것을 사용하지 않습니다."


그리고 언어 성능의 향상 - 이 경우 개체를 동적으로 생성하는 경우뿐만 아니라 개체의 메서드에서 개인 생성자를 사용할 수 있음을 의미합니다. 이미 존재할까요?

"단순한" 프로그램에 "나는 생성자를 비공개로 숨기고 정적 메서드를 만든 다음 숨겨진 생성자에 망치로 두겠습니다"에 의도적인 여행을 하고 싶습니까?


글쎄, "C++은 위험하고 자살적이다"와 "MQL은 절대 위험하지 않다"라고 가정해보자.

보안 면에서, 즉 정확히 "위험하고 자살적인" 기반으로 "절대적으로 안전한" 언어를 만드는 것과는 거리가 먼 언어를 MQL의 기반으로 삼아야 했던 이유는 무엇입니까? ?

일반 언어에 대한 "다른 기반"을 생각해낼 수 있습니까?

그래서, 모든 두 번째 프로그래머에게 언어를 제공하고 몇 시간 안에 그는 혐오와 학대로 그를 버리지 않고 즐겁게 쓰기 시작할 것입니다. 그래서 거래자들은 Easy Language를 보고 버렸고 MQL4/MQL5는 기꺼이 그것을 사용하고 개발했습니다.

널리 사용되는 대부분의 언어는 C/C++에서와 같이 구성을 구축하는 기본 원칙을 기반으로 합니다. 그래서 우리는 잘 알려진 기반을 취하고 링크로 가장 위험한 것을 제거하고 DRM을 추가하고 안전하고 안전한 언어를 얻었습니다.

결과적으로 우리는 말을 타고 있고 경쟁자들은 잘못된 방향으로 가고 있지만 그들에게 보이는 것처럼 더 저렴합니다.

 
Renat :
이는 누군가가 많은 소프트웨어 제품을 경쟁 시장으로 출시하는 데 더 많은 경험을 갖고 있다는 것을 의미합니다.

그건 그렇고, 리더십 경험에 대해. 5년 전 우리는 mql5 포럼에서 MT5의 전망에 대해 논쟁한 적이 있습니다. 그때 저는 시간이 말해줄 것이라고 말했습니다. 5년이 지났고 커뮤니티가 MT5를 거부했음을 알 수 있습니다. 리더십 경험은 실수를 보장하지 않습니다. 사람이 어떤 분야에 경험이 있더라도 여전히 실수를 할 수 있습니다. 경쟁 시장, 아니 오히려 경쟁자에 관해서는, 맨 마지막에.

그러나 이 경우 우리는 많은 소프트웨어 제품을 출시한 경험에 대해 이야기하는 것이 아니라 제품의 품질, 특히 고품질을 달성하기 위한 컴파일러와 도구 및 방법에 대해 이야기합니다.

레나트 :
품질 관리의 일반 원칙에 대한 논의에서 특정 솔루션의 특정 단점으로 주제를 옮길 필요는 없습니다. 이 방법은 모든 제품에서 항상 결함을 찾을 수 있기 때문에 허용되지 않습니다.


이것은 "클래스의 정적 메서드는 클래스의 내용으로 올라갈 권리가 없습니다"라는 과잉 보호의 결과일 뿐입니다. 이 경우 액세스 제어를 약화시킬 필요가 있습니다.

나는 이론 자체가 아니라 실제 적용을 위해 일반 원칙, 이론을 번역하지 않습니다. 동일한 C/C++ 컴파일러에서는 그러한 심각한 "결함"을 찾지 못할 것입니다.

이 경우 "정적 클래스 메서드는 클래스의 내용으로 올라갈 수 있는 권한이 없다"고 말하면 객체를 동적으로 생성할 때 왜 이미 이 권한을 가지고 있습니까?

그러나 non-static 것이 같은 방식으로 행동한다는 사실은 어떻습니까?

 #property strict

/******************************************************************************/
class A {
private :
  A() { Print ( "A::A()" ); }
  ~A() { Print ( "A::~A()" ); }

public :
   void method() { // Метод - обычный, никакой не статический
    A a;
  }

};

/******************************************************************************/
void OnStart () {
}

동일한 오류:

'3.mq4' 3.mq4   1       1
'A::~A' - cannot call private member function   3.mq4   11      7
'A::A' - cannot call private member function    3.mq4   11      7
2 error(s), 0 warning(s)                3       1

좋습니다. "클래스 내용으로 올라가는 것"에 대한 금지를 고려해 보겠습니다.

 #property strict

/******************************************************************************/
class A {
private :
  A() { Print ( "A::A()" ); }
  ~A() { Print ( "A::~A()" ); }
  A( const A &a) { Print ( "A::A(const A &)" ); }
   void operator =( const A &a) { Print ( "A::operator =()" ); }
   void f() { Print ( "A::f()" ); }

public :
   static void assign(A &l, const A &r) {
    l = r;
  }

   static void method() {
    A *p = new A, b(p);

    b = p;
    b.f();
     delete p;
  }

};

객체 b는 복사 생성자를 호출하여 생성되고 "operator ="를 호출하여 할당이 완료되고 f() 메서드가 호출되며 이러한 모든 생성자, 연산자 및 메서드는 비공개, 즉 정적 메서드() 메소드는 "콘텐츠 클래스로 올라갑니다":

 00 : 59 : 18 Script 3 EURUSDm,M5: loaded successfully
00 : 59 : 18 3 EURUSDm,M5: initialized
00 : 59 : 18 3 EURUSDm,M5: A::A()
00 : 59 : 18 3 EURUSDm,M5: A::A( const A &)
00 : 59 : 18 3 EURUSDm,M5: A:: operator =()
00 : 59 : 18 3 EURUSDm,M5: A::f()
00 : 59 : 18 3 EURUSDm,M5: A::~A()
00 : 59 : 18 3 EURUSDm,M5: A::~A()
00 : 59 : 18 3 EURUSDm,M5: uninit reason 0
00 : 59 : 18 Script 3 EURUSDm,M5: removed

첫 번째에 매우 가까운 또 다른 예를 고려하십시오.

 #property strict

/******************************************************************************/
class A {
private :
  A( int i = 0 ) { Print ( "A::A(int i = " , i, ")" ); }
  ~A() { Print ( "A::~A()" ); }
public :

   static void method() {
    A a;
  }
};

/******************************************************************************/
void OnStart () {
  A::method();
}

컴파일 오류 - 생성자와 소멸자를 모두 사용할 수 없습니다.

'3.mq4' 3.mq4   1       1
'A::~A' - cannot call private member function   3.mq4   11      7
'A::A' - cannot call private member function    3.mq4   11      7
2 error(s), 0 warning(s)                3       1

이제 아무 것도 변경하지 않고 생성자의 기본값이 아닌 다른 값으로 변수 a를 초기화합니다.

 #property strict

/******************************************************************************/
class A {
private :
  A( int i = 0 ) { Print ( "A::A(int i = " , i, ")" ); }
  ~A() { Print ( "A::~A()" ); }
public :

   static void method() {
    A a( 1 );
  }
};

/******************************************************************************/
void OnStart () {
  A::method();
}

이제 예제가 컴파일되고 실행됩니다.

 00 : 20 : 35 Script 3 EURUSDm,M5: loaded successfully
00 : 20 : 35 3 EURUSDm,M5: initialized
00 : 20 : 35 3 EURUSDm,M5: A::A( int i = 1 )
00 : 20 : 35 3 EURUSDm,M5: A::~A()
00 : 20 : 35 3 EURUSDm,M5: uninit reason 0
00 : 20 : 35 Script 3 EURUSDm,M5: removed

얼마나 갑자기 정적 메서드가 "클래스의 내용으로 올라오도록" 허용되었습니까?

이 경우 이것은 "과도한 보호"가 아니라 평범한 버그임이 분명합니다. 물론 전체 품질 관리에 대한 말은 시끄럽지만 사실은 완고한 것입니다.

레나트 :
"나는 모든 것을 구체적으로 비틀고, 접근을 차단하고, 경계선 행동에 호소하기 시작했습니다."와 같은 경우가 아닌 실제 사례를 제시하십시오.

C++ 예제 섹션에서 참조로 설명된 클래식 싱글톤 , 즉 Myers 싱글톤을 사용하세요.

 class OnlyOne
{
public :
         static const OnlyOne& Instance()
        {
                 static OnlyOne theSingleInstance;
                 return theSingleInstance;
        }
private :        
        OnlyOne(){};
        OnlyOne( const OnlyOne& root);
        OnlyOne& operator =( const OnlyOne&);
};

새로 열린 기능으로 MQL4++로 이동합니다.

 #property strict

/******************************************************************************/
class OnlyOne
{
public :
         static OnlyOne *Instance()
        {
                 static OnlyOne theSingleInstance( 1 );
                 return GetPointer (theSingleInstance);
        }
private :        
        OnlyOne( int i = 0 ) { Print ( "Создан" ); };
        ~OnlyOne() { Print ( "Уничтожен" ); };
        OnlyOne( const OnlyOne &);
         void operator =( const OnlyOne &);
};

/******************************************************************************/
void OnStart () {
  OnlyOne *p = OnlyOne::Instance();
}

컴파일 및 실행:

 01 : 31 : 49 Script 3 EURUSDm,M5: loaded successfully
01 : 31 : 49 3 EURUSDm,M5: Создан
01 : 31 : 49 3 EURUSDm,M5: initialized
01 : 31 : 49 3 EURUSDm,M5: uninit reason 0
01 : 31 : 49 3 EURUSDm,M5: Уничтожен
01 : 31 : 49 Script 3 EURUSDm,M5: removed

OnlyOne::Instance() 호출 이외의 다른 방법으로 개체를 만들려고 하면 컴파일 오류가 발생합니다.

그리고 "특별히 모든 것을 왜곡하고 접근을 차단한 다음 경계선 행동에 호소하기 시작했습니다"에 대해 - 무언가가 불법적으로 사용되었습니까?

언어에는 메커니즘이 있습니다. 허용되는 언어의 범위 내에서 원하는 대로 사용할 권리가 있습니다. 어쨌든 이것은 C++ 컴파일러의 경우입니다.

언어 구현에 오류가 있으면 글쎄요, 오류입니다. 당신은 전체 품질 관리에 대해 이야기하고 있습니다. 따라서 실제로 MQL4++ 컴파일러의 구현 오류를 제거하여 C++ 컴파일러에서와 같이 오류를 찾기가 거의 어려울 것입니다. 왜냐하면 그러한 제어가 있기 때문입니다. 나는 여전히 파서가 내가 보여준 것과 같은 오류를 제거하는 데 도움이 될 수 있다고 생각하지 않습니다.

레나트 :
"단순한" 프로그램에 "나는 생성자를 비공개로 숨기고 정적 메서드를 만든 다음 숨겨진 생성자에 망치로 두겠습니다"에 의도적인 여행을 하고 싶습니까?

좋아하고 싫어하고의 문제가 아닙니다. 도구가 있습니다. 모든 기능 사용을 거부해야 하는 이유는 무엇입니까?

이 경우 "좋아요"도 아닙니다. 그 점에서 이것은 Myers가 그토록 좋아하는 것입니다. 그리고 어떤 이유로 C ++ 컴파일러에 "고의적인 여행"을 시도했다고 아무도 그를 비난하지 않습니다.

레나트 :
일반 언어에 대한 "다른 기반"을 생각해낼 수 있습니까?

그래서, 모든 두 번째 프로그래머에게 언어를 제공하고 몇 시간 안에 그는 혐오와 학대로 그를 버리지 않고 즐겁게 쓰기 시작할 것입니다. 그래서 트레이더들은 Easy Language를 보고 버렸고 MQL4/MQL5는 기꺼이 그것을 사용하고 개발했습니다.

널리 사용되는 대부분의 언어는 C/C++에서와 같이 구성을 구축하는 기본 원칙을 기반으로 합니다. 그래서 우리는 잘 알려진 기반을 가지고 링크로 가장 위험한 것을 제거하고 DRM을 추가하고 안전하고 안전한 언어를 얻었습니다.

결과적으로 우리는 말을 타고 있고 경쟁자들은 잘못된 방향으로 가고 있지만 그들에게 보이는 것처럼 더 저렴합니다.

이것은 쉬운 일이 아니며 직접 해결되지도 않습니다. 여기서 많은 노력을 기울여야합니다. 대다수의 MQL 사용자는 프로그래머가 아닙니다. 그리고 언어를 디자인할 때, 이것은 상당한 정도로 고려되어야 합니다. 하지만 문제는 확실히 해결되었습니다.

그 문제에 대해서는 이전 MQL4에 구조를 추가하고 MQL4++에 대해 수행된 것처럼 작업 우선 순위와 같은 것을 정리하는 것으로 충분합니다. 이는 합리적인 절충안이 될 것입니다. MT4의 성공은 무엇보다도 언어의 "속임수"가 부족했기 때문입니다. 이제 그렇지 않습니다. 그리고 컴파일러의 구현에 훨씬 더 많은 오류가 있습니다. MQL4++가 이전 MQL4보다 훨씬 더 복잡하고 개발 팀이 많이 변경되었을 가능성이 없기 때문입니다.

레나트 :
결과적으로 우리는 말을 타고 있고 경쟁자들은 잘못된 방향으로 가고 있지만 그들에게 보이는 것처럼 더 저렴합니다.

여기에서 나는 당신에게 동의하지만 이것은 주로 경쟁자들이 이해할 수없는 일을하고 있다는 사실 때문이라고 생각합니다.

 
Renat :
이것은 누군가가 많은 소프트웨어 제품을 경쟁 시장으로 출시하는 데 더 많은 경험을 갖고 있다는 것을 의미합니다.


품질 관리의 일반 원칙에 대한 논의에서 특정 솔루션의 특정 단점으로 주제를 옮길 필요는 없습니다. 이러한 방법은 모든 제품에서 항상 결함을 찾을 수 있기 때문에 받아 들일 수 없습니다.

이것은 "클래스의 정적 메서드는 클래스의 내용으로 올라갈 권리가 없습니다"라는 과잉 보호의 결과일 뿐입니다. 이 경우 액세스 제어를 약화시킬 필요가 있습니다.

"나는 모든 것을 구체적으로 비틀고, 접근을 차단하고, 경계선 행동에 호소하기 시작했습니다."와 같은 경우가 아닌 실제 사례를 제시하십시오.


다른 종류의 문제가 있습니다. 또한 정적 분석기를 사용하지 않는다는 사실을 고려하면 분명히 훨씬 더 많은 숫자가 있습니다.


그냥 단어 게임입니다. 당신의 입장은 이미 앞에서 "나는 통제할 수 없다"고 명확하게 설명되었으므로 "누군가 앞에서, 어딘가에서, 그러나 아무도 막대기로 내 위에 서 있지 않고 나는 그것을 사용하지 않습니다."


"단순한" 프로그램에 "나는 생성자를 비공개로 숨기고 정적 메서드를 만든 다음 숨겨진 생성자에 망치로 두겠습니다"에 의도적인 여행을 하고 싶습니까?


일반 언어에 대한 "다른 기반"을 생각해낼 수 있습니까?

그래서, 모든 두 번째 프로그래머에게 언어를 제공하고 몇 시간 안에 그는 혐오와 학대로 그를 버리지 않고 즐겁게 쓰기 시작할 것입니다. 그래서 거래자들은 Easy Language를 보고 버렸고 MQL4/MQL5는 기꺼이 그것을 사용하고 개발했습니다.

널리 사용되는 대부분의 언어는 C/C++에서와 같이 구성을 구축하는 기본 원칙을 기반으로 합니다. 그래서 우리는 잘 알려진 기반을 취하고 링크로 가장 위험한 것을 제거하고 DRM을 추가하고 안전하고 안전한 언어를 얻었습니다.

결과적으로 우리는 말을 타고 있고 경쟁자들은 잘못된 방향으로 가고 있지만 그들에게 보이는 것처럼 더 저렴합니다.

 

안녕하세요 포럼입니다!

이용하고 싶다   있음   이 스레드에서   레나타

MT4를 개선하기 위해 몇 가지 제안을 하십시오!

모두가 알고   시간이 지남에 따라 MT4는 점점 더 나빠집니다.   그리고 더 나쁜

그러면 mouse-finito는 순종하지 않습니다!

새로운 MT4로 이동하고 드래그해야 합니다.

모든 쓰레기 (지표, 전문가)!

그것은 며칠의 작업입니다!

비록 지금   DLL, DRIVER 등의 복구 프로그램이 있습니다 ...

왜 MT4 자체용 컴파일러를 만들지 않습니까?

이를 위해 설치하는 동안 2MT4(표준 1개와 작동하는 2개)가 있어야 합니다.

그리고 주기적으로   그것들을 비교하고 작동하는 MT4에서 오류를 수정하십시오.

두 번째 제안은 가격 차트뿐만 아니라

빌드 그래프 가격에 볼륨 증가를 곱하십시오!

그러면 무슨 일이 일어나고 있는지(실제 거래 또는 현금화)

dts를 중지)

이해도가 높으신 분들에게는 간단한 문제라고 생각합니다!

판사

사유: