Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Для непосвященных - объекты это структуры. 27.10.05 15:19 Число просмотров: 1260
Автор: Den <Денис Т.> Статус: The Elderman
|
> Структуры это структуры. Объекты это объекты. Связь только > в том, что и то и то занимает память.
Разница между объектами и структурами лишь в том, что первый член структуры объекта - указатель на таблицу виртуальных методов, а обычные методы объекта вообще компилируются, как самые обыкновенные функции без всякой информации о привязке к конкретному объекту. Всякие там префиксы типа public, private и т.д. работают лишь на этапе компиляции (прошу не тыкать пальцем в сторону .NET и говорить что там все по другому).
> Вот как раз об эмуляции инкапсуляции, полиморфизма и > наследования.
Это не эмуляция, а полноценная низкоуровневая поддержка (реализация). Эмуляция - это как раз использование макросов для создания подобия объектов.
> Макросы могут помочь, но это именно эмуляция. То есть > человеку придется соблюдать довольно много соглашений, > чтобы использовать эту библиотуку макросов
Да, это именно эмуляция, а то, что "выше" - реализация.
> http://en.wikipedia.org/wiki/Assembly_language > Assembly language or simply assembly is a > human-readable notation for the machine language that a > specific computer architecture uses. Machine language, a > pattern of bits encoding machine operations, is made > readable by replacing the raw values with symbols called > mnemonics.
Не вижу противоречий с тем, что я написал выше.
Ключевое слово - human-readable
По твоим словам, так ассемблер должен соответствовать машинным кодам с точностью до префиксов адресации и операндов машинных кодов. Это абсурд! Вот несколько примеров:
1. Даже в старых версиях masm'а под DOS во многих случаях не обязательно указывать размерность операнда, т.к. компилятор и сам может это определить и скомпилировать верную последовательность машинных кодов.
2. Очень многие компиляторы ассемблера понимают директивы компиляции EVEN и ALIGN для выравнивания кода или данных на указанную границу, при этом для кода компилируется последовательность "пустых" машинных кодов типа NOP или пустого ADD, а для данных 0x0. Эти директивы тоже не должны восприниматься компиляторами ассемблера? Я уже не говорю о директивах сегментации...
3. "Поддержка" коментариев в исходнике. (без комментариев)
4. Условные директивы компиляции тоже не относятся к машинным кодам.
Список можно продолжить, но для начала хватит.
К слову о "human-readable": в masm'е есть что-то типа встроенного макроса под названием invoke, позволяющего программисту вызывать функцию по указанному в заголовке программы соглашению без написания кучи push и call - invoke все это делает сам при компиляции. И это уже не эмуляция, а полноценная реализация - полезная возможность для программиста.
> А про "реализацию инструментария" это вообще что-то с > чем-то. Компилятор ЛЮБОГО языка программирования является > таким инструментарием, тем не менее все эти языки не > являются ассемблерами.
Ну и? Microsoft C++ и Borland С++ перестали быть "Си" от того, что каждый производитель привнес что-то своё? Сишный ассемблер перестанет называться ассемблером, если ты начнешь использовать в нем сишные типы данных?
> Когда в C появились объекты его честно назвали сначала > Objective-C, а потом и C++, когда в Caml появились объекты > его честно назвали другим именем OCaml, когда в Pascal > появились объекты его честно назвали другим именем Object > Pascal, а потом и Delphi. Это все разные языки и только > ассемблеру по фига, что он уже не имеет ничего общего с тем > названием которое носит?
Программы называют не столько по их содержимому, сколько руководствуясь маркетинговой политикой.
Смысл называть компилятор ассемблера Borland Object TASM или Microsoft Object MASM32???
|
|
|