13.04.2009, 09:51 | #1 |
Administrator
|
Рассуждения на тему: X++ компилируемый или интерпретируемый язык?
******* Выделено отсюда DAX40 #if.never в LedgerBondServer_RU ********
Хм... А я увидел сразу.... Та же самая версия - 4.0 SP2. Безо всяких там перезапусков. Цитата:
Сообщение от DSPIC
Цитата:
Сообщение от sukhanchik
При попытке удаления и создания метода - вызов saveLast() все равно "разрешается" в любом методе - что приводит к выводу - что этот метод в откомпилированном коде сохраняется при самом объекте (метод saveLast и только он был скопирован с родителя, но не был удален при отвязке родителя).
Цитата:
Если взглянуть - сколько всего "пихается" в простой exe-шник на С++ Builder в простой программе Hello world... - то невольно подумаешь - что тут тоже самое. Ведь братья дамгарды не писали с нуля свой компилятор - они (насколько мне рассказывали) - взяли некие заготовки - ведь почему X++ так удивительно похож на Java и С++, а не на бейсик, паскаль, фортран и т.д. Для отладчика добавляется специальная отладочная информация (и это тоже одна из опций компилятора) - поэтому на нее нельзя ориентироваться. Кстати - перед финальной сборкой exe-шника эту отладочную информацию обязательно удаляют (выполняют сборку без указания спецключика) для того, чтобы не давать легкую возможность дизассемблировать + уменьшить размер файла. Цитата:
Тем более, что внешние симптомы не позволяют в ней сомневаться. Цитата:
В данном случае - происходит видимо какая-то перечитка (возможно из axapd.aoi перечитывается UtilElements - не знаю) , после чего все становится в норме. Цитата:
Сообщение от DSPIC
Т.е. для автора темы: попробуйте просто обновить AOD (Tools->DevelopmnetTools->ApplicationObjects->Refresh AOD), затем откомпилировать класс.
sukhanchik, не знаю, как это решение ложится на описанный Вами механизм хранения откомпилированного кода. По большому счету, это всё не так уж важно: как оно там хранится, и как это всё можно объяснить - это более низкий уровень. Главное, что есть проблема (будем надеяться, что её пофиксят) и найдено простое решение. Глобальная компиляция - это пушкой по воробьям. Не думаю, что ее пофиксят. Мне кажется - это больше фича... Тем более - что я к примеру за весь свой стаж с этой проблемой ни разу не сталкивался. Плюс - предлагаемая методология ведения разработки исключает как правило эти грабли. Ошибка может проявляться только ведь на разработческой. Разработческую нужно регулярно глобально компилить с построением перекрестных ссылок (например, ночью). Плюс - разработческое приложение - периодически обновляется приложением с рабочей (тестовой). Во время обновления аос естественно останавливается. Поэтому - думаю, что на это просто надо обратить внимание при разработке. Но не более. Глобальная компиляция - вещь полезная и не сильно долгая. Поэтому ее полезно периодически запускать.
__________________
Возможно сделать все. Вопрос времени Последний раз редактировалось sukhanchik; 13.04.2009 в 09:58. |
|
13.04.2009, 11:08 | #2 |
Боец
|
1.
Цитата:
А т.к. 2 абсолютно независимых человека пришли к одинаковым выводам - я обрел некоторую уверенность в своей гипотезе.
2. Вы уверены что сравнение компилятора С++ и "компилятора" X++ является корректным? Я склонен считать, что С++,Паскаль относится к компилируемому языку. А X++, Java, Бэйсик и т.п. относятся к интерпретируемым. А по сему и откомпилированный код у них выглядит немного по-разному и строится по другим принципам. 3. По теме. Относительно рестарта АОСа. Я рестартовал, эффекта не дало. Только запуск Refresh AOD дал эффект. Последний раз редактировалось DSPIC; 13.04.2009 в 11:27. |
|
13.04.2009, 11:30 | #3 |
Administrator
|
2DSPIC:
1. Да, гипотезой. В общем-то нельзя сказать - что официальная информация лежит на поверхности. Поэтому много чего приходится принимать как гипотезу, но когда видишь что гипотеза работает - вселяется уверенность что так оно и есть. 2. Уверен. А чем они должны отличаться? И Х++ и С++ используют понятие наследования (мы же сейчас это обсуждали). Оба транслируют исходный код в нечто бинарное и нечитабельное При этом - еще раз повторюсь - Дамгарды не писали с нуля свой компилятор - а значит их X++ был взят откуда-то (с С++?). И идеи новые не привносили. Вот сравнивать компилятор Х++ с Дельфевым (паскалевым) было бы действительно некорректно. Как минимум - разные языки, разные подходы. Про бейсик я вообще молчу. Про Java - не знаю. Поэтому и не сравниваю. А.... так вот... Вы относите его к интерпретатируемым.... Вот тут наши представления расходятся. Безо всяких вики - под интерпретатируемым языком я подразумеваю такие языки, изменения в программе которых во время ее выполнения изменяет ход программы. Пример. Зайдите в бейсик (VBA для простоты) и запустив отладчик измените код. И у вас изменится ход программы. Такого в Х++ не получить. Тот VB, который генерит exe-шник - тот логично использует компилятор ... Просто Х++ компилируется в некий промежуточный код (как бы а-ля VBA), но без изменения этого промежуточного кода - ход программы не изменится.
__________________
Возможно сделать все. Вопрос времени Последний раз редактировалось sukhanchik; 13.04.2009 в 11:41. |
|
13.04.2009, 11:44 | #4 |
Боец
|
Цитата:
А чем они должны отличаться?
Цитата:
...а значит их X++ был взят откуда-то (с С++?)
Цитата:
И Х++ и С++ используют понятие наследования
Последний раз редактировалось DSPIC; 13.04.2009 в 11:48. |
|
13.04.2009, 11:51 | #5 |
Administrator
|
Чем отличаются интерпретируемые и компилируемые языки программирования - это понятно.
Вопрос лишь в том, к каким относить X++. Я все время считал (и считаю) - что любой код, который создает промежуточный код - является компилируемым. Пусть даже тот же бейсик. Отсутствие exe-шника не дает право относить язык к интерпретируемым. Напишите Hello world в VBA. И все может измениться в режиме исполнения. В отличие от Х++ По Х++ - я за "компилируемый". Ибо я не вижу ситуации - когда можно поменять программу "на лету" и она изменит свое выполнение. Более того - я с маркетинговой т.з. вообще бы исключил термин компиляция из аксапты - не будь язык компилируемым. Лишний термин - которым незачем загружать головы людям
__________________
Возможно сделать все. Вопрос времени Последний раз редактировалось sukhanchik; 13.04.2009 в 11:53. |
|
13.04.2009, 12:07 | #6 |
Боец
|
Цитата:
По Х++ - я за "компилируемый"
может и не совсем подходит к X++. X++ это скорее скриптовый язык. Его "компиляция" скорее всего сводится к проверке синтаксиса, подстановке и вычислению макросов и ещё чего-нить в этом духе. Скорее всего, на выходе "компилятора X++" получается некий оптимизированный, не читабельный код, понятный интерпретатору X++, но никак не ассемблер, как в C++. Иначе бы, каждый раз, при компилировании какого-нить метода\класса в X++ происходилы бы глобальная компиляция, и на выходе получался бы самомоятельный *.exe файл, ну или м.б. dll... Да, и скорость исполнения бизнес логики была бы в разы выше... |
|
13.04.2009, 12:16 | #7 |
очами вижу
|
Цитата:
Сообщение от sukhanchik
Чем отличаются интерпретируемые и компилируемые языки программирования - это понятно.
Вопрос лишь в том, к каким относить X++. |
|
13.04.2009, 12:23 | #8 |
Administrator
|
Цитата:
Сообщение от DSPIC
Его "компиляция" скорее всего сводится к проверке синтаксиса, подстановке и вычислению макросов и ещё чего-нить в этом духе. Скорее всего, на выходе "компилятора X++" получается некий оптимизированный, не читабельный код, понятный интерпретатору X++, но никак не ассемблер, как в C++.
Хорошо. Но факт остается фактом. Аксапта исполняет некий код, который она предварительно до этого оттранслировала в некий свой промежуточный. То есть - формально - да, наверное этот язык интерпретируемый. НО! И это самое главное. Для разработчика - язык проявляет все свойства компилируемого. И поэтому ожидать от языка фич и особенностей следует как от языка компилируемого.
__________________
Возможно сделать все. Вопрос времени |
|
13.04.2009, 12:43 | #9 |
Участник
|
Цитата:
трансляторы делятся на интерпретаторы и компиляторы интерпретаторы обрабатывают программу по мере выполнения компиляторы всю целиком. наличия делезхной реализации машины, под которую происходит трансляция не является определяющей. Таким образом есть компилятор X++ -> байткод и интерпретатор байткод -> машкод |
|
13.04.2009, 12:44 | #10 |
Боец
|
Цитата:
Ну с этой точки зрения - да - компилятор Х++ скорее правильно назвать транслятором - т.к. он не транслирует в ассемблер или машинный код.
Цитата:
Для разработчика - язык проявляет все свойства компилируемого
Цитата:
И поэтому ожидать от языка фич и особенностей следует как от языка компилируемого.
|
|
13.04.2009, 13:17 | #11 |
очами вижу
|
CPython считывает скрипт, формирует его AST и лишь затем его выполняет. Это называется "интерпретатор компилирующего типа". Даже если X++ строит AST, назвать его компилятором нельзя. Достаточно сравнить быстродействие программ, на них написанных.
|
|
13.04.2009, 13:18 | #12 |
Administrator
|
Цитата:
Компиляция - это превращение класса, в который вносятся изменения в свой obj-файл. Сборка - это слив всех obj-файлов в один exe-шник. В аксапте - сборка отсутствует. Т.е. ядро аксапты исполняет уже имеющиеся "obj-файлы". Что есть "глобальная компиляция"? Это пересоздание уже всех obj-файлов. Что есть "компиляция" или "инкрементная компиляция"? Это пересоздание одного или нескольких obj-файлов. Функцией глобальная компиляция - я к примеру - пользуюсь часто - если можно назвать использование этой функции в еженочном построении перекрестных ссылок
__________________
Возможно сделать все. Вопрос времени |
|
13.04.2009, 13:26 | #13 |
Участник
|
|
|
13.04.2009, 13:30 | #14 |
очами вижу
|
|
|
13.04.2009, 13:36 | #15 |
Administrator
|
Только это не MS сказала... А еще дамгарды. Просто под понятием компиляции в аксапте подразумевается выполнение некоего действия, после сохранения кода, но до его выполнения.
__________________
Возможно сделать все. Вопрос времени |
|
13.04.2009, 13:37 | #16 |
Боец
|
Цитата:
Представьте себе, что уже откомпилированный (в терминах аксапты) код Х++ представляют собой самостоятельные библиотеки. Прям вот каждый класс - свой Obj-файл.
Цитата:
В аксапте - сборка отсутствует. Т.е. ядро аксапты исполняет уже имеющиеся "obj-файлы".
Цитата:
Функцией глобальная компиляция - я к примеру - пользуюсь часто - если можно назвать использование этой функции в еженочном построении перекрестных ссылок
Уфф, к чему мы всё это? Предлагаю мир! |
|
13.04.2009, 13:42 | #17 |
Участник
|
http://en.wikipedia.org/wiki/Compiler
A compiler is a computer program (or set of programs) that transforms source code written in a computer language (the source language) into another computer language (the target language, often having a binary form known as object code). Вы называете компилятором, только компилятор в машкод. |
|
13.04.2009, 13:48 | #18 |
Administrator
|
Я за мир!
Я просто представил себе X++ как полноценный компилируемый код, а классы как полноценные obj-библиотеки. Не спорю что это не так. Но именно это представление мне помогло ответить на вопрос - а где искать грабли (и в чем вероятная причина грабель)
__________________
Возможно сделать все. Вопрос времени |
|
13.04.2009, 13:48 | #19 |
очами вижу
|
Цитата:
PHP код:
PHP код:
|
|
13.04.2009, 14:02 | #20 |
Боец
|
Цитата:
Вы называете компилятором, только компилятор в машкод.
A compiler is a computer program (or set of programs) that transforms source code written in a computer language (the source language) into another computer language (the target language, often having a binary form known as object code). Да, в контексте данной темы именно это мною и предполагается. (Stop explosion ) |
|
Теги |
x++ |
|
Похожие темы | ||||
Тема | Ответов | |||
Продолжаем тему с финансовыми отчетами | 0 | |||
DAX2009 переключение на русский язык | 3 | |||
Язык печатных документов | 3 | |||
Текущий пользователь и язык | 2 | |||
Новый язык для Аксапта 2.5 | 3 |
|