AXForum  
Вернуться   AXForum > Прочие обсуждения > Курилка
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

Результаты опроса: К какому типу Вы относите язык X++ ?
К компилируемому 15 45.45%
К интерпретируемому 11 33.33%
Затрудняюсь ответить 7 21.21%
Голосовавшие: 33. Вы ещё не голосовали в этом опросе

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.04.2009, 17:01   #1  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
К какому типу языка Вы относите X++ ?
Родилось здесь
Старый 20.04.2009, 18:21   #2  
Megacrusher is offline
Megacrusher
NavAx
Аватар для Megacrusher
NavAx Club
 
175 / 19 (1) ++
Регистрация: 18.08.2003
Адрес: Москва
Думаю, что ближе всего что это интерпретатор компилирующего типа. Проголосовал.
Цитата:
Интерпретатор компилирующего типа — это система из компилятора, переводящего исходный код программы в промежуточное представление, например, в байт-код или p-код, и собственно интерпретатора, который выполняет полученный промежуточный код (так называемая виртуальная машина). Достоинством таких систем является большее быстродействие выполнения программ (за счёт выноса анализа исходного кода в отдельный, разовый проход, и минимизации этого анализа в интерпретаторе). Недостатки — большее требование к ресурсам и требование на корректность исходного кода. Применяется в таких языках, как PHP, Python, Perl (используется байт-код[источник?]), а также в различных СУБД (используется p-код[источник?]).
http://ru.wikipedia.org/wiki/%D0%98%...82%D0%BE%D1%80
Старый 20.04.2009, 18:39   #3  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
Цитата:
Сообщение от Megacrusher Посмотреть сообщение
Думаю, что ближе всего что это интерпретатор компилирующего типа. Проголосовал.
полностью согласен.

Не существует чисто "компилируемых" и "интерпретируемых" языков.
Существуют компиляторы и интерпретаторы. Да, некоторые проще реализуются в виде интерпретаторов, но и только.
Вот спрошу с чего вы взяли С++ компилируемый? С того что на него чаще обращали внимание разработчики компиляторов?
Ну так никто не мешает написать интерпретатор для С++. А уж написание компиляторов с бейсика это любимая
практическая задача при обучении теории компиляторов. Так что все зависит от конкретной реализации. И ничто не мешает в одной реализации использовать и компилятор и интерпретатор.

В аксапте исходный код на Х++ заранее целиком преобразуется в нечто промежуточное, которое потом исполняется машиной
внутри аксапты без обращения к исходному коду. Т.е компиляция есть.
Просто компиляция не в машинный код, а промежуточный

Вот простой пример, доказывающий что при исполнении исходники не юзаются никаким боком
создаем baseEnum baseenumtest, в нем Element1, enumvalue = 0

пишем джоб

X++:
static void Job24(Args _args)
{
    ;
    info(int2str(baseenumtest::Element1 +0));
}
запускаем, видим в инфологе 0, радуемся
обязательно закрываем редактор кода

идем и меняем enumvalue на 1
запускаем наш джоб из аот (ctrl-o). именно из аот, при запуске из редактора сначала случится компиляция
и что мы види в инфологе? Правильно, 0

компилируем джоб, и снова запускаем. в инфологе отображатся 1


PS. Ответил компилятор, хотя все три варианта правильные
За это сообщение автора поблагодарили: Megacrusher (1), belugin (3).
Старый 20.04.2009, 19:07   #4  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Спор чисто терминологический. Сейчас в основном принято компилятором называть также то, что в википедии называется "Итерпретатором третьего типа" (сначала компиляция в байткод, потом интерпретация или компиляция байткода). По крайней мере, так считают авторы таких языков: Java, C#, F#, Scala и т.д. даже питон.
Старый 20.04.2009, 20:47   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Холиварить, так холиварить.

Цитата:
Сообщение от belugin Посмотреть сообщение
Спор чисто терминологический.
Не совсем.
В компилируемых реализациях нельзя выполнить строку, как кусок кода на исходном языке.
В компилируемых реализациях нельзя на лету поменять выполняемый код на исходном языке (только на языке хоста - обычно в машинных кодах).

В Аксапте есть:
1. runbuf, который позволяет выполнить произвольную строку на ИСХОДНОМ языке Х++
2. Семейство Dict* классов, которое позволяет изменить исполняемый код на исходном языке в run-time.

Кроме того, в Аксапте нет выделенного этапа линковки. Линковка - это преобразование p-кода в язык хоста (Этот этап так характерен для компиляторов). После линковки внесение изменений в код на исходном языке невозможно в компиляторах (только перелинковка).
__________________
полезное на axForum, github, vk, coub.
Старый 20.04.2009, 20:55   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от db Посмотреть сообщение
Вот простой пример, доказывающий что при исполнении исходники не юзаются никаким боком
Юзается p-код. Но это не делает Аксапту компилятором

Цитата:
Сообщение от db Посмотреть сообщение
при запуске из редактора сначала случится компиляция
только не компиляция, а трансляция в p-код

как раз то, что программист не управляет явным образом процессом компиляции и говорит о том, что Аксапта не компилятор.
__________________
полезное на axForum, github, vk, coub.
Старый 20.04.2009, 21:27   #7  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
А какие из компилируемых языков, кроме C++ (и его наследника D) сейчас активно используются?

Я знаю компиляторы Scheme (http://en.wikipedia.org/wiki/Stalin_...mplementation) и http://en.wikipedia.org/wiki/Chicken...implementation)), которые, кстати позволяют делать все то, что написал mazzy:

Цитата:
В компилируемых реализациях нельзя выполнить строку, как кусок кода на исходном языке.
В компилируемых реализациях нельзя на лету поменять выполняемый код на исходном языке (только на языке хоста - обычно в машинных кодах).
но они промежуточный код на C генерят.

Компилятор Haskell (http://ru.wikipedia.org/wiki/Glasgow_Haskell_Compiler), в общем то, тоже промежуточный код на C генерит, хотя заявлено, что может сразу создавать код в машинных кодах.

Вроде и все, если не рассматривать узкоспециализированные Lisp машины.

Все прочее - .Net, Java, Ruby, Python, Erlang, Lua компиляторами не является.
Старый 20.04.2009, 22:18   #8  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от mazzy Посмотреть сообщение
В компилируемых реализациях нельзя выполнить строку, как кусок кода на исходном языке.
При достаточном RTTI почему бы не скомпилироварть и выполнить?
Цитата:
В компилируемых реализациях нельзя на лету поменять выполняемый код на исходном языке (только на языке хоста - обычно в машинных кодах).

В Аксапте есть:
1. runbuf, который позволяет выполнить произвольную строку на ИСХОДНОМ языке Х++
2. Семейство Dict* классов, которое позволяет изменить исполняемый код на исходном языке в run-time.
Не как раз нельзя на лету изхменить - надо сначала перекомпилировать и чтобы он перезакгрузился. Попробуйте в форме или в созданном классе что-нибудь порменять на ходу и не пересоздавать класс.

Цитата:

Кроме того, в Аксапте нет выделенного этапа линковки. Линковка - это преобразование p-кода в язык хоста (Этот этап так характерен для компиляторов). После линковки внесение изменений в код на исходном языке невозможно в компиляторах (только перелинковка).
Считайте, что в аксапте каждый класс - DLL отдельная

Я говорю, спор - терминологический. ваш "компилятор" = мой "компилятор в машинный код". Мой "компилятор" = Объединение(ваш "компилятор", ваш "интерпретатор комипилирующего типа")
Старый 20.04.2009, 22:30   #9  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от Андре Посмотреть сообщение
Все прочее - .Net, Java, Ruby, Python, Erlang, Lua компиляторами не является.
http://java.sun.com/j2se/1.4.2/docs/...ows/javac.html
The javac tool reads class and interface definitions, written in the Java programming language, and compiles them into bytecode class files

http://msdn.microsoft.com/en-us/libr...wd(VS.71).aspx

The C# compiler can be invoked at the command line by typing the name of its executable file (csc.exe) on the command line. You may need to adjust your path if you want csc.exe to be invoked from any subdirectory on your computer.



http://erlang.org/doc/apps/compiler/index.html
The Compiler application compiles Erlang code to byte-code. The highly compact byte-code is executed by the Erlang emulator.

Более того

http://haskell.org/haskellwiki/Yhc/J...Brief_overview

The ycr2js program reads the binary core file specified (.yca or .ycr), and performs conversion of Haskell functions compiled into Core to their Javascript representation storing the generated Javascript code in a file. Resulting Javascript may be embedded on a (X)HTML page to be loaded into a Web browser.
Старый 20.04.2009, 22:32   #10  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
интересно, что вот тут используемые нами термини разведены как два отдельных значения одного и того же слова
Старый 20.04.2009, 22:42   #11  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Это компиляция в некий промежуточный байт-код. Согласен, что граница размыта, так как даже откомпилированной C-программе нужен рантайм для ее запуска, но все такие она есть.

В общем то, в байт-код и Python компилит, а если мы и Erlang будем называть его компилятором, то, mazzy, о боже, я не только динамически строку кода могу выполнить, но и весь код приложения "на лету" подменить, не прерывая работы пользователей.
Старый 20.04.2009, 23:42   #12  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,309 / 3545 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от mazzy Посмотреть сообщение
Юзается p-код. Но это не делает Аксапту компилятором
....
только не компиляция, а трансляция в p-код
...
как раз то, что программист не управляет явным образом процессом компиляции и говорит о том, что Аксапта не компилятор.
Тогда в опросе не хватает термина "транслируемый". Тогда можно было бы честно ответить - "транслируемый в p-код"

Наверное более правильно было бы ответить "Затрудняюсь" - т.к.
а) на мой взгляд - "компилируемый" - легче для понимания "а как это работает"
б) "интерпретируемый" - более правильно было бы ответить (если подходить к вопросу терминологически).
Но проработав с VBA - где код программы можно менять прям в рантайме - я психологически не могу отнести Аксапту к интерпретируемому языку. А компилируемый - мне ближе

Программист также управляет процессом компиляции как и в каких-нибудь С++ или дельфи, где есть интегрированная среда разработки, которая весь процесс компиляции и линковки (и создания exe-шника) делает за программиста, который нажимает всего одну кнопку (как в аксапте). Просто в Аксапте вызов этой кнопки еще "зашит" на сохранении кода в редакторе. Это я к тому, что неделание в явном виде линковки еще не говорит о том, что язык некомпилируемый.

runbuf вызывает код.. Но ведь нет никаких гарантий что исходный код не транслируется в p-код в этом случае (равно как и доказательств трансляции)! Более того - есть утверждение - что отладчик не работает из-под runBuf. Может это следствие того, что трансляция все-таки какая-никакая а есть?
Классы же Dict* лишь позволяют в рантайме запустить тот или иной объект. Их наличие не говорит о том - запускают они исходный код или p-код. Поэтому - их наличие - тоже не доказательство интерпретируемости языка.

Резюме: Голосую за "компилируемый"
__________________
Возможно сделать все. Вопрос времени
Старый 20.04.2009, 23:57   #13  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от belugin Посмотреть сообщение
интересно, что вот тут используемые нами термини разведены как два отдельных значения одного и того же слова
см. interpreted
и interpreted language
Цитата:
interpreted language
A programming language that requires an interpreter in the target computer for program execution. Contrast with native executable. See interpreter and interpreted.
__________________
полезное на axForum, github, vk, coub.
Старый 21.04.2009, 00:02   #14  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Андре Посмотреть сообщение
Это компиляция в некий промежуточный байт-код.
Только в байт-код (p-код) всю жизнь не компилировалось, а транслировалось.
Компиляция - это все-таки в язык хост-машины.

Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Тогда в опросе не хватает термина "транслируемый". Тогда можно было бы честно ответить - "транслируемый в p-код"
Скорее да.
__________________
полезное на axForum, github, vk, coub.
Старый 21.04.2009, 00:12   #15  
Megacrusher is offline
Megacrusher
NavAx
Аватар для Megacrusher
NavAx Club
 
175 / 19 (1) ++
Регистрация: 18.08.2003
Адрес: Москва
2 mazzy, 2 belugin :
Вот вы прям схватлись не на жизнь а на смерть. Попробую вас рассудить ...

Мне кажется стоит себе ответить на следующие вопросы.
Выполняет ли Ax роль компилятора?
Выполняет ли Ax роль интерпретатора?

Я считаю что она выполняет обе роли. Просто роль компилятора нужна лишь для корректной трансляции в p-код, а все остальное время выполнят роль интерпретатора. Так что лично для моего понимания компиляция в Ax выполняет вспомогательную роль. Отрубите ключами разработку и получится у вас сугубо интерпретатор. Будете только скомпилированное приложение копировать ручками и будет счастье...
А вообще то спор какой то бессмысленный имхо
Старый 21.04.2009, 02:17   #16  
Ruff is offline
Ruff
Дмитрий Ерин
Аватар для Ruff
1C
 
475 / 396 (14) ++++++
Регистрация: 18.09.2003
Адрес: Тула
Можно я тоже немного побухчу про терминологию?

Мое мнение, что язык программирования - всего лишь множество лексем и синтаксических правил, определяемых его грамматикой. А семантические правила я бы отнес в ведение транслятора, несмотря на многочисленные определения в википедии, относящие их к языку...
Подтверждением этому служит тот факт, что зачастую одна и та же написанная на "С" программа, дает разные результаты на разных трансляторах.

И вообще, компилятор и интерпретатор - это не тип языка, а тип транслятора (о чем немного другими словами уже упомянул dn в начале ветки), то есть вопрос в теме поставлен некорректно... X++ - это язык. Просто язык программирования. А вопрос заключается в том, к какому типу относится транслятор X++, то есть ядро DAX.

В такой формулировке ответил "затрудняюсь" Имхо, более правильным был бы ответ "компилятор + виртуальная машина".

ЗЫ: К сожалению, слёту не могу вспомнить название и автора одной старой-старой книги, в которой эта тема очень доходчиво изложена (на языке вертится Грин, но не уверен...). А Википедии я бы не очень доверял в некоторых вопросах
За это сообщение автора поблагодарили: db (3).
Старый 21.04.2009, 09:28   #17  
ibc is offline
ibc
Участник
Аватар для ibc
 
472 / 30 (2) +++
Регистрация: 12.05.2003
Адрес: Москва
Еще со школы - после компиляции должен получиться НЕЗАВИСИМО исполняемый код от среды разработки! Сам считаю, что компилируемый яп должен получать программный код, который потом можно дизассемблировать и получить листинг на языке ассемблера! По этому определению даже Java интерпретатор, а уж X++ и подавно! Но если считать, что компиляция - это перевод всей программы в любой пи-код (байт-код) то это интерпретаторы компилируемого типа!
Старый 21.04.2009, 10:02   #18  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,907 / 5717 (196) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Я вот начинал учится программировать еще на MSX-Basic, а потом чуток с фортом побаловался,дык с тех пор для меня интерпретатор - это нечто в чем:
1. Можно остановить программу, поменять кусочек кода (скажем - вставить строку внутрь исполняющегося в данный момент цикла), а потом продолжить выполение этой программы.
2. Аналогичным образом - можно в случае возникновения runtime-ошибки просто подправить ручками значения переменных. То есть - поделили на ноль случайно - можно пока не разбираться, а просто впендюрить не-ноль в нужную переменную.
3. Заметную часть операторов можно исполнять в режиме командной строки. Написал чего-то типа print 45*SIN(29) и тут же получил результат.

То есть - я проголосовал за то что X++ компилятор, просто потому что ни одного из привычных мне плюсов интерпретатора я в нем не вижу
Старый 21.04.2009, 10:19   #19  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Ну если считать по возможности менять значения переменных по ходу отладки, то тогда С++ можно назвать интерпретатором. В Visual C++ это можно в момент отладки делать. в C# уже нельзя.
Старый 21.04.2009, 10:21   #20  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
менять значения переменных по ходу отладки
Там говорилось о runtime-ошибках
__________________
полезное на axForum, github, vk, coub.
Теги
p-код, x++, интерпретатор, компилятор, ядро, трансляция

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
А по какому принципу отбираются блоги axbegin Обсуждение форума 54 14.04.2023 16:23
На главной странице для русского языка объединены блоки... Стало ли лучше? mazzy Информация для участников 4 23.03.2007 19:14
Бьерн Страустрап, один из разработчиков языка С++: KMV Курилка 3 17.03.2006 13:42

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 23:20.