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
문자열의 길이는 보통 두 가지 의미를 갖는다.
저수준 메모리 접근이 가능하거나, 해당 추상화가 존재하는 어느 정도 성숙된 언어들 — 예를 들어 C 와 그 자손들 혹은 최근의 일부 VM 언어들(C#/Java), 혹은 python이나 PHP 같은 언어들 — 에서는 저 두 가지를 구하는 방법이 모두 존재한다.
하지만 기대를 저버리지 않고 ActionScript 에는 메모리 상의 bytes길이를 인코딩에 맞게 구하는 방법이 없다. 정말 소켓 연결해서 쓰기가 !@#$%^&* 스럽다.
UTF-8 문자의 bytes 길이 경계에 해당하는 0×7F, 0×07FF 랑 비교해서 1~3 byte(s) 로 쪼개지게해서 일일이 길이를 구하고 직렬화하게 수정해야했다 Orz[3]
문자열이 메모리에 utf-8 형식으로 올라가는데 byte 길이를 구할 방법이 없다는 뜻인건가… 그것 참 문자열의 세부 구현에 전혀 신경 쓰지 않아도 될 좋은 추상화로구나 ;; (반어법임.)
Written by 수원 on May 09, 2008 at 11:27pm
이런저런 것 때문에 사실상 하위호환성이 없는 ActionScript 3.0 / Flex 3.0이 나오는듯…
Written by rein on May 11, 2008 at 12:09am
Jump to comments