Aaron H. Kim Fearless Integration Maniac

XLANG/S와 C#의 차이점

2007-06-02
Aaron Kim

초보 비즈톡 개발자가 가장 쉽게 범할 수 있는 오류는..
Orchestration내에서 Expression Shape의 코드를 작성할 때
본인이 C# 코딩을 하고 있다고 생각하는 것입니다.

사실 Orchestration에서 쓰이는 언어는 XLANG/S이라는 것으로
process 흐름을 표현하는데 적합한 언어입니다.(BPEL처럼)

또 C#을 모방하고 있기 때문에 닷넷 개발자들이 사용하기가 쉽습니다.
사실 문제에 부딪히기전에는 거의 차이가 없기 때문에 이 사실을 잘 인식하지 못하지만,
본인이 C# 코딩을 하고 있다고 믿는 경우,
문제에 부딪히면 원인을 찾기 위해 많은 시간을 낭비하게 됩니다.

아직까지 이 둘의 차이에 대해 극명하게 보여주는 공식적인 문서가 없는 것으로 알고 있기 때문에
여기서 간단히 그 차이를 정리 해 드리겠습니다.

XLANG/S는..

  1. Array는 지원되지 않습니다.

  2. Simple Type들(string, float, int)은 dot 연산자를 사용할 수 없습니다. 예를 들면 1.ToString() 같은 것은 항상 System.Convert.ToString()를 사용해야 합니다.

  3. using문을 지원하지 않습니다. 때문에 항상 System.Diagnostic.Debug.WriteLine()과 같은 식으로 항상 namespace.class 구문을 사용하셔야 합니다.

  4. break,continue,do,fixed,for,foreach,goto,lock,return,switch,try/catch/finally,unsafe,using은 사용불가합니다.

  5. expression shape내에 주석을 다는 것은 허용하지만 항상 한 줄 이상의 코드가 있어야 합니다.

  6. 복합 할당문(+=, -=, *=, …)등의 사용은 허용되지 않습니다.

  7. ++, — 도 사용할 수 없습니다.  x = x + 1 과 같은 형태로 사용합니다.

  8. static variable은 지원되지 않습니다. Orchestration은 그 자체로 하나의 Type이기 때문에 Orchestration의 변수들은 항상 현재 Orchestration Instance의 변수들로 compile됩니다.

   따라서 프로그래밍적으로 현재 Active한 모든 Orchestration instances들에서 공통의 정보를 공유한다는 것은 불가능합니다.

  1. Scope 바깥에서 A라는 이름으로 변수를 생성했을 경우, Scope 안에서 A라는 이름으로 변수를 생성하는 것은 불가능합니다. 일반적으로 C#의 {} Scope과는 차이가 있습니다.

  2. Label은 지원되지 않습니다.

  3. 다음의 Literal들은 지원됩니다. true, false, null

  4. 다음의 Pre-Processor는 지원됩니다. #if, #else, #elif, #endif, #define, #undef, #warning, #error, #region, #endregion

  5. 다음의 Pre-Processor는 지원되지 않습니다. #line

제 경험상 XLANG/S로 너무 복잡한 Business Logic을 짜는 것은 추천하고 싶지 않습니다.
C#으로 Component를 짜고 얼마든지 그걸 호출해서 사용할 수 있기 때문입니다.
XLANG/S은 원래의 목적에 맞게 Business 흐름을 보여주는데 사용하는데 의의가 있습니다.


Similar Posts

Comments