ActionScript: Shock and awe
C…더 이상 이 주제로 글을 쓰고 있지만 아마도, 그리고 기원하건데 마지막 글일 듯.
지역 변수의 스코프 문제
지역 변수의 선언이 유효한 범위(local variable scope) 가 굉장히 괴악하다. 다음은 너무나도 적절한 mtasc.com에서 제시하는 예제.
function f() {
var x = 1;
if (true) {
var x = "hello";
// ...
}
trace(x+1);
}
trace 의 결과가1 좀 충격적이다. 일반적인 프로그래밍 언어2에 익숙한 사람이라면 출력되는 결과를 “2” 라고 생각할 것이다.
하지만 결과는 hello1 … 생각없이 짜다 또 한 방 먹었고 Orz
문자열의 길이
문자열의 길이는 보통 두 가지 의미를 갖는다.
- (의미 단위인) 글자 단위의 길이
- (저수준 단위인) 메모리 상의 bytes 길이
저수준 메모리 접근이 가능하거나, 해당 추상화가 존재하는 어느 정도 성숙된 언어들 — 예를 들어 C 와 그 자손들 혹은 최근의 일부 VM 언어들(C#/Java), 혹은 python이나 PHP 같은 언어들 — 에서는 저 두 가지를 구하는 방법이 모두 존재한다.
하지만 기대를 저버리지 않고 ActionScript 에는 메모리 상의 bytes길이를 인코딩에 맞게 구하는 방법이 없다. 정말 소켓 연결해서 쓰기가 !@#$%^&* 스럽다.
UTF-8 문자의 bytes 길이 경계에 해당하는 0x7F, 0x07FF 랑 비교해서 1~3 byte(s) 로 쪼개지게해서 일일이 길이를 구하고 직렬화하게 수정해야했다.3