13.04.2004, 15:14 | #1 |
Участник
|
отличия Х++ от С++
Подскажите пожалуста где есть в Сети какие-нибудь статьи про отличия Х++ от С++, про ограничения Х++ и т.п.
Спасибо. |
|
13.04.2004, 15:52 | #2 |
Участник
|
Очень сомневаюсь, что такие материалы существуют, так как непонятен смысл сравнения универсального языка програмирования с узкоспециализированным языком разработки бизнесс логики одной из ERP систем.
Что вы хотите получить от этого сравнения? |
|
13.04.2004, 16:00 | #3 |
Участник
|
Представители Колумбуса и других внедренцев Аксапты, даже по-моему представитель Микрософт Россия, нас сказал что Х++ это тот же С++, но с определенными ограничениями.
Возник вопрос какие именно ограничения. Сами представители указанных фирм отвечают довольно уклончиво. Типа "ну вот там исключены разные системные возможности, которые для Аксапты не нужны". |
|
13.04.2004, 16:28 | #4 |
Участник
|
Цитата:
Изначально опубликовано afon
Представители Колумбуса и других внедренцев Аксапты, даже по-моему представитель Микрософт Россия, нас сказал что Х++ это тот же С++, но с определенными ограничениями. Возник вопрос какие именно ограничения. Сами представители указанных фирм отвечают довольно уклончиво. Типа "ну вот там исключены разные системные возможности, которые для Аксапты не нужны". Если говорить о синтаксическом родстве, то прародителем X++ является Java. Синтаксис и основные концепции X++ взяты имеено оттуда. Конечно, синтаксически X++ напоминает C++, но ровно на столько же наскольно Java напоминает С++. Насчет ограничений говорить сложно, ибо X++ ограничен самой Аксаптой. Вне Аксапты ни смысла ни применения он не имеет. Например он включает операторы организации запросов к БД зато не имеет очень многих других возможностей, которые существуют в Java. Все это лишь следствия специфики и архитектуры системы для которой он предназначен. Думаю вам стоит прочесть главу "Axapta language reference" в Axapta Develper's Guide, и поиметь собственное мнение по этому поводу. |
|
13.04.2004, 16:45 | #5 |
Участник
|
Понятно. Спасибо.
|
|
14.04.2004, 08:50 | #6 |
1C
|
Плюс ко всему в X++ нет указателей. Это, кстати, одно из ограничений.
|
|
14.04.2004, 09:58 | #7 |
Участник
|
Цитата:
Изначально опубликовано YVAS
Плюс ко всему в X++ нет указателей. Это, кстати, одно из ограничений. |
|
14.04.2004, 11:49 | #8 |
1C
|
В С++ есть. Сравниваем то с С++.
|
|
14.04.2004, 12:30 | #9 |
Участник
|
Цитата:
Изначально опубликовано YVAS
В С++ есть. Сравниваем то с С++. |
|
14.04.2004, 13:40 | #10 |
Участник
|
тогда так:
чем отличается С++ от Java и чем отличается Java от X++ хотя по-моему, если Java это потомок C++, а Х++ потомок Java, то следует что Х++ потомок С++. Извините если сказал глупость. |
|
14.04.2004, 13:59 | #11 |
Участник
|
Цитата:
Изначально опубликовано afon
хотя по-моему, если Java это потомок C++, а Х++ потомок Java, то следует что Х++ потомок С++. Извините если сказал глупость. Цитата:
тогда так:
чем отличается С++ от Java и чем отличается Java от X++ [/B] Например: смогут ли наши С++ программисты успешно программировать в Axapta? вы это хотите понять? |
|
14.04.2004, 14:13 | #12 |
Участник
|
программисты на С++ в Axapta программировать смогут - это я понял.
Вопрос в общем-то в теме обсуждения. Можно сказать проще: насколько ущербен Х++ по сравнению с полнощенными языками (С++) и как по Вашему опыту он подходит для решения разных сложных задач (каких именно сказать не могу по неопытности работы с Аксаптой). Часто ли Вам приходится использовать всякие внешние ActiveX и тому подобное. |
|
14.04.2004, 14:58 | #13 |
Участник
|
Цитата:
Изначально опубликовано afon
программисты на С++ в Axapta программировать смогут - это я понял. Такая непростота обусловлена многими причинами: отсутствием полноценной документации, необходимостью жить в гармонии и уметь использовать обширный стандартный функционал системы и т.д. И именно этой непростотой, думаю, объясняется дороговизна хороших Аксапта-программисов на сегодняшнем рынке труда. Цитата:
Вопрос в общем-то в теме обсуждения. Можно сказать проще: насколько ущербен Х++ по сравнению с полнощенными языками (С++) и как по Вашему опыту он подходит для решения разных сложных задач (каких именно сказать не могу по неопытности работы с Аксаптой). Часто ли Вам приходится использовать всякие внешние ActiveX и тому подобное. Это разные вещи и они решают разные задачи. X++ совершенно не ущербен и для решения любых задач в Аксапте подходит прекрасно, особенно за отсутствием альтернатив. Всякие внешние ActiveX в аксапте (даже в стандарте) используются для раширения возможностей платформы, как правило для отображения графики и интеграции с внешними приложениями, что на мой взгляд абсолютно нормально, очень удобно и ни коим образом не свидетельствует об ущербности языка разработки . |
|
14.04.2004, 15:00 | #14 |
1C
|
Цитата:
Изначально опубликовано afon
насколько ущербен Х++ по сравнению с полнощенными языками (С++) |
|
14.04.2004, 15:24 | #15 |
Участник
|
я думаю, я понял
Начальство что-то напряглось этими заявлениями консультантов про ограничения. А мы то как раз и работаем в основном с языками прикрепленными к СУБД типа FoxPro, T-SQL и т.п. |
|
14.04.2004, 15:38 | #16 |
Шаман форума
|
Цитата:
Изначально опубликовано afon
насколько ущербен Х++ по сравнению с полнощенными языками (С++) Собственно, к сказанному YVAS можно только добавить, что даже не работа с БД, а работа с бизнес-логикой. |
|
09.08.2004, 09:50 | #17 |
Участник
|
// глюки связи
|
|
09.08.2004, 09:56 | #18 |
Участник
|
А вот я уже давно завел практику ведения списков коренных отличий одного языка от другого - сам для себя. Потом гораздо легче вспоминать язык, если вдруг вернулся к нему после долгого перерыва. Беру "за базу" какой нибудь язык, который знаю хорошо (типа C++, Pascal или Java) и составляю список из наиболее сильных отличий, данного языка от этого базового. Массу времени экономит.
Для аксапты у меня получился такой вот список (за базовый язык взята Java, но C++ мне ближе, поэтому многие пункты хотя и есть в Java почти в таком же исполнении как и в X++, но я их всё равно упоминаю): Цитата:
1. объекты создаются через new ObjectType( ... )
2. доступа к полям класса извне невозможен (т.е. они как бы всегда некая смесь private и protected (см. 5) 3. конструктор - метод void new( ... ) 4. метод Finalize явно уничтожает объект (но автоматически системой не вызывается!). В нём может располагаться нужный код. 5. нестатические методы вызываются ВСЕГДА с использованием идентификатора объекта. Даже локальные методы должны вызываться как this.MethodName( ... )! Но в то же время через this нет доступа к полям класса (см. 2) 6. наследование определяется как: class Наследник extends Суперкласс. Множественное наследование не поддерживается. 7. агрегатные типы (массивы, контейнеры) не могут содержать ссылок на объекты (!) для исправления ситуации существуют Axapta Foundation Classes (lists, maps, sets, arrays, and structs) 8. методы всегда виртуальны. ключ слово final запрещает переопределение метода. весь класс может быть объявлен как final 9. к методам применимы ограничители видимости: private, protected, public (public по умолчанию) 10. внутри методов можно вставлять "внедренные функции" (наподобие паскаля) 11. пераметры трактуются как локальные переменные (передаются по значению) 12. существуют параметры по умолчанию: void new( boolean isFemale, date birth = today() ) 13. статические методы могут быть вызваны только через :: например MyClass::MyMethod(); 14. типы данных: - boolean (false, true) - int (32-битное со знаком) - real (BCD числа с 16-ю значащими разрядами (64-бита)) - date (литералы записываются как day\month\year, может быть null) - str (может быть ограничена по длине (str 10 a) в таком случае можно указывать выравнивание (str 10 left a) - enum - определяются в дизайнере, а не в коде - массивы задаются квадратными скобками после определения переменной (как обычно) индексы начинаются с 1! присвоение любого значения элементу с индексом 0 обнуляет весь массив!!! могут быть статическими: int a[ 10 ] динамическими: int a[] частично сохраняемыми на диск: int a[1000, 10] или int a[, 10]- второе число - число элементов хранимых в памяти могут быть только одномерными! при этом синтаксис не поддерживает массив массивов, так что обламываемся - container - может содержать всё, кроме объектов (даже таблицы, или расширенные типы) литерал контейнера - список значений разделенных запятыми в квадратых скобках: [ 1, "abc", ... ] работа с контейнером (очистка, добавление значений, поиск и т.д.) ведется через набор ф-й con*( ... ) плюс: поддерживается множественное присвоение: container c = [1,3.14,"Hello"]; [i,r,s] = c; // Extracts 1 into i, 3.14 into r and "Hello" into s оператор += добавляет значение в конец контейнера: c += "строка"; - Расширенные (Дополнительные) Типы Данных объявляются в конфигураторе в ветке дерева Extended Data Types по сути - typedef-ы за мелкими ограничениями. например завести тип name, как str 100 left - Классы (Объекты) - по сути лишь указатели (как в Delphi, Java). Действует автоматический сборщик мусора. общий (базовый) для всех класс - object. - Таблицы - внешне для программиста выглядат, как объекты. Отличия: - не нужно выделять память через для таблиц - она выделяется автоматически (?) - нельзя наследовать от таблиц - поля в таблицах всегда public и к них можно обращаться отовсюду! - на поля в таблице можно ссылаться используя выражения: tableName.( expression ) вместо tableName.fieldName общая для всех таблица (как object для объектов) - common 15. арифметические операции в отличие от клонов C/C++ имеют операции div и mod, в остальном похожи 16. переменные надо объявлять ДО первых операторов 16.5. т.к. имена переменных могут совпадать с именами типов в языке введена избыточная ; для отделения блока деклараций от тела ф-ии для разрешения конфликтов имен. в других местах лишние ; запрещены 17. Есть abstract классы и методы 18. Есть методы с модификаторами display и edit (отдельная тема) 19. Комментарии в стиле C/C++ , т.е. // и /* */ 20. Основные управляющие операторы (if, for и т.д.) содраны с Java/C/C++ 21. select как оператор языка (выполняется над Таблицами) 22. while select { операторы } выполняет операторы над всеми строками запроса 23. delete_from как быстрая альтернатива while select ... { r.delete() }; и другие DML-операторы 24. ttsbegin/ttscommit/ttsabort - работа с транзакциями 25. try/catch/throw/retry - работа с исключениями - retry - возвращает в начало блока try |
|
|
За это сообщение автора поблагодарили: alex55 (1). |
09.08.2004, 10:54 | #19 |
1C
|
Добавил бы: оператор select ..возвращает не набор записей а первую запись, удовлетворяющую условию where.
|
|
09.08.2004, 11:16 | #20 |
Участник
|
Цитата:
Изначально опубликовано YVAS
Добавил бы: оператор select ..возвращает не набор записей а первую запись, удовлетворяющую условию where. |
|