17.03.2010, 10:05 | #1 |
Участник
|
X++: More help needed from community: Do you rely on string truncation?
Источник: http://blogs.msdn.com/x/archive/2010...runcation.aspx
============== Previously the X++ language allowed the LEFT and RIGHT keywords on definitions of string variables. That is no longer valid X++. However, we still allow specifying an explicit string length. The X++ language runtime implicitly does string truncation on assignment, both directly and when passing parameters. Consider the following example: { str 5 s; s = ‘124567890"; } The resulting string will only contain the first 5 characters, i.e. ‘12345'. Normally the user would not explicitly provide the length of the string in this way, but the behavior is exactly the same when using an extended type that has a particular length. One example is the SysGroup type, that is defined as having length 10 in the properties for the extended data type. If you run { SysGroup g = ‘1234567890ABCDEFGHIJ"; print g; } You will only get the first 10 characters printed. The remaining ones are lost to truncation. The compiler is currently very weak in its support for these extended datatypes (EDTs). There is no validation that you are not assigning apples to oranges (so to speak). It would be natural for the compiler to respect the hierarchy that is expressed in the extended data types as is the case for class hierarchies, but that semantic check is not currently done: The compiler will base its checking on the base types of the EDTs. Introducing extra checks for the EDT hierarchies would be pleasing from a correctness perspective, but it would be an unreasonably daunting task for the eco-system to clean up the errors that would be the result of adding this check. On the other hand, using the EDTs does allow for a degree of documentation and customization. It is quite easy for the X++ interpreter to provide these truncation semantics; it is not as easy to do in managed code. If we did, it would both compromise performance, and introduce considerable complexity into both the generation of the IL code and its execution. Consider the following example, in which the interpreter and IL will provide different results: { str 5 s = ‘1234’; // Interpreter: ‘1234’; IL: ‘1234’ s += ‘ABCDE’; // Interpreter: ‘1234A’; IL: ‘12345ABCDE’ s = strrem(s, ‘1’); // Interpreter: ‘234A’; IL: ‘2345ABCDE’ } No truncation would take place when assignments are made to bound strings, neither for direct assignments or by passing parameters. Only when the string is persisted into the database will the truncation take effect. The question for you to answer is: Do you rely on these semantics in your code? Would your code run well if all string types were equal and unbound? Do we need to muddy the waters for IL by introducing the same behavior in IL? Источник: http://blogs.msdn.com/x/archive/2010...runcation.aspx
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору. |
|
18.03.2010, 13:14 | #2 |
Участник
|
Цитата:
Сообщение от Blog bot
The X++ language runtime implicitly does string truncation on assignment, both directly and when passing parameters. It is quite easy for the X++ interpreter to provide these truncation semantics; it is not as easy to do in managed code. If we did, it would both compromise performance, and introduce considerable complexity into both the generation of the IL code and its execution.
The question for you to answer is: Do you rely on these semantics in your code? Do we need to muddy the waters for IL by introducing the same behavior in IL? |
|
18.03.2010, 14:05 | #3 |
Moderator
|
Цитата:
Сообщение от gl00mie
Кажется, публикация прошла незамеченной, хотя она говорит о том, что идея о переходе от интерпретатора в ядре к CLR и к трансляции p-кода в IL живет и здравствует - люди уже вычищают "мелкие несоответствия", замалчивая, правда, более интересные вопросы относительно того, как они перейдут от нынешнего способа взаимодействия клиента и сервера к модели взаимодействия наподобие веб-сервисов.
Я, правда, знаю только одно место в Аксапте, где производительность определяется производительностью исполнения p-кода, а не обменом с БД - производственное планирование. И я по прежнему считаю что полноценной миграции системы в .net они не смогут сделать без переписывания всего приложения, а прозрачная для прикладного программиста миграция (при которой просто виртуальная машина подспудно меняется) не очень выгодна по соотношению прирост производительности/затраты на реализацию. |
|
18.03.2010, 23:00 | #4 |
Участник
|
а я вот по процедурному вопросу, товарищи, если можно (стучит по графину).
вот мы тут разговариваем с телевизором по сути: человек там в блоге написал, нам сюда упало, мы обсуждаем, а он там и знать не знает о комментариях. надо либо обратную трансляцию комментариев делать, либо как-то по-другому автора сюда приглашать. (садится, утирая пот со лба)
__________________
Felix nihil admirari |
|
19.03.2010, 10:50 | #5 |
Участник
|
Цитата:
Ну а если какая-либо животрепещущая тема всполошит общественность на столько, что молчать не будет сил, то тут уже и коллективный ответ, можно написать. "А если вы на него бочку катите, то это уже контейнерная перевозка. Этим Трансагентство занимается в сельской местности." Печкин И.И. P.S.: Хотя идея с приглашением авторов сюда мне нравится. Этакие виртуальные вечера встреч с интересными людьми. |
|