|
|
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 ... 14 . 15 . >> |
| Посл.отвђт | Сообщенiе |
|
|
Дата: Мар 24, 2004 18:03:01 JaDS представь что у тебя около сотни контролов (ну или тысячи), с десяток форм, вот и будешь сидеть и думать, List1 - это на какой форме? List1 был взят для примера. Имя конкретного элемента задаётся при объявлении. (хотя я не знаю как у тя реализованны макросы) Скоро я закончу таки статью описывающую данный элемент управления. |
|
|
Дата: Мар 24, 2004 18:38:26 "...Давно существует OOP by Nan & Thomas для MASM..." Этот тип ООП имеет неверные подходы в принципе. Например, адреса методов находятся внутри самого объекта (!). А если есть (как было упомянуто) сотни элементов на форме - тогда таблица методов будет бесполезно занимать место. К тому же: как наследовать от такого класса добавляя другие методы - смещение к данным объкта будет нарушено. Кроме этого, каждый раз вызывая конструктор объкта надо инициализировать таблицу таким количеством MOVs, сколько есть методов. И ещё: нет нормальных (не виртуальных) методов - все методы вызываются через CALL DWORD PTR [EBX+...]- не всегда оправдано. Кстати, на моём сайте выложена неплохая статья по ООП - но на английском: http://www.codexxi.com/Oop.html |
|
|
Дата: Мар 24, 2004 19:05:39 masquer Я с подозрением отношусь ко всему, что что-то делается "автоматом". У меня это вызывает комплекс неполноценности смешанный с паранойей :) Дык это я так выражаюсь - "автоматом". Макрос этот пишем сами, так что паранойи места не должно быть. FASM дает стандартные средства позволяющие проверить, например, задана ли метка где-либо и использовалась ли она где-либо в другом месте. Т.е. позволяет, в принципе, построить библиотеку, где есть 500 подпрограмм, засунуть ее в один include, а при компиляции из нее в экзешник пойдут, ТОЛЬКО реально используемые, скажем 20 шт. И не надо линкер даже! По такому принципу, например, построен весь FRESH. Да что говорить - FASM может и другие интересные штуки: Draw.SetCooperativeLevel [.EBX],DDSCL_NORMAL ;; вызываем COM метод (прям так, без invoke). Макросы такие "автоматически" можно создать при включении подправленных Сишных хидеров (ну, то есть посредством других макросов) А скоро Privalov обещает добавить еще одну новую директиву - проект развивается и это радует :-) |
|
|
Дата: Мар 24, 2004 19:26:56 AsmGuru62 Я с вашими замечаниями согласен, но ведь та модель очень старая еще времен MASM v7.. зачем же ее повторять? ЗЫ А статья хорошая, как раз для таких как я, кто не понимает слово абстракция. Только я за EBP :-) |
|
|
Дата: Мар 25, 2004 04:33:33 JaDS Ваши речи знакомы до боли - флейм Флейм в ответ на твой флейм. Как иначе можно назвать твои аргументы в Для чего это надо ... и твои ответы на детский лепет в Что обычно говорят противники .... Я хотел узнать о вашем отношении к ооп и всё. У меня сложилось впечатление, что об ООП применительно к ассемблеру. Или я не прав? Мое мнение: Всему свое место. ну очень охота асм с нормальным ООП ... я щас говорю ... о наследовании, полиморфизме и инкапсулировании. 1) Твои критерии нормального ООП? 2) Ты хочешь написать новый ассемблер? S_T_A_S_ что-то сделать самому или хотя бы подумать, последнее время мало кто хочет ... imho делать-то - делают, но не думают. |
|
|
Дата: Мар 25, 2004 11:22:45 У меня сложилось впечатление, что об ООП применительно к ассемблеру. Или я не прав? Абсолютно прав. Твои критерии нормального ООП? Я не спец в теории ООП, но из практики - очень бы хотелось видеть абстрактные типы данных, переопределяемые в потомках, это первое, а вообще в данном случае я говорил что реализация ООП в TASM'е убогая, в MASM'е и FASM'е её вообще нет, про другие компиляторы не знаю. Ты хочешь написать новый ассемблер? Да я бы с удовольствием, но пока это мне не по силам:( |
|
|
Дата: Мар 25, 2004 11:25:54 А и вот ещё что: Как иначе можно назвать твои аргументы в Для чего это надо ... и твои ответы на детский лепет в Что обычно говорят противники .... Это не флейм, это моё мнение, я интересовался вашим, и высказал своё. Просто у меня обычно мнения не бинарного типа (да/нет, надо/ненадо), вот я его развёрнуто и высказал, а то что это агитация - агитация первого мая будет |
|
|
Дата: Мар 25, 2004 12:05:44 JaDS очень бы хотелось видеть абстрактные типы данных, переопределяемые в потомках Для чего в язык низкого уровня добавлять высокоуровневые понятия? Да я бы с удовольствием, но пока это мне не по силам Т.е. ты создал тему в надежде, что есть готовые решения? Это не флейм, это моё мнение imho это не мнение, а диалог с воображаемым противником ООП, которому ты доказываешь полезность/перспективность ООП, но доводы за (и против) ООП - дилетантские. |
|
|
Дата: Мар 25, 2004 14:28:23 AsmGuru62 Вы здесь единственный, кто предложил конкретные приемы реализации, поэтому попробую задать несколько вопросов.. Например, адреса методов находятся внутри самого объекта Я думаю, в некоторых случаях это оправданно на ассемблере. Every class must have its own VMT Здесь я думаю - should have. При аккуратном использовании это может принести определенную выгоду. Таким образом, я планирую реализовать (возможно, только в какой-то мере) все 4 возможных варианта. Так же, надеюсь, в некоторых случаях, можно будет обойтись без явно определенных деструкторов. Теперь собственно сам вопрос : Как, назвать такие методы ^^ . Положим есть "нормальные" и "виртуальные", а вот эти 2 - ? По первому приходит на ум - indirect (тогда нормальные - direct), по второму - пока ничего.. (в терминологии я не силен, так что если что - сорри) q_q 2) Ты хочешь написать новый ассемблер? Зачем изобретать колесо? Такой уже есть. Автор - Tomasz Grysztar aka Privalov. Да еще добавлю. Тему лучше бы назвать Асм и ооп. Так будут более явно расставлены приоритеты. JaDS очень бы хотелось видеть абстрактные типы данных, переопределяемые в потомках, это первое, А вот, собственно, и ОНО. Свежий результат 2х дневной медитации - пока в зачаточном состоянии, определяются только данные (методами займусь в ближайшее время). Макросы CLASS/ENDC создают одноименные стуктуру и макрос для дальнейшего использования / наследования. Пока не могу уйти от $ в начале имени (см. как пример, последнюю строку) из-за конфликтов имен с зарезервированными операторами FASM'а, но думаю это не так важно для ООП - с объектами все ОК. Самое главное - работает наследование данных, с возможностью переопределения (см. CLASS WORD2). Для указания, что структура наследуется, используется знак "!". Есть ли другие предложения? Как будет готовый рабочий пример - покажу, а пока жду bug reports, если таковые будут..
;;==================================================================== =======
;; ..\#A+\class.inc
;; version 0.2 alpha
;;
;; Based on Privalov's "struct" macro.
;; by mythrillus mailto: s_t_a_s_<SHIFT+2>inbox.ru
;;==================================================================== =======
FALSE = 0
TRUE = 1
macro CLASS name
{ __class.name fix name
__class.size fix sizeof.#name
__class.fields fix
__class.macro = TRUE }
macro ENDC
{ __class.macro = FALSE
__class.define __class.name, __class.fields }
macro __class.define name, dummy, [type,field,default,inherited]
{ forward local arg
common
struc name arg _%
forward if field eq
if arg eq & default eq
type inherited
else if arg eq
type default
else
type arg
end if
else
if arg eq & default eq
.#field type inherited
else if arg eq
.#field type default
else
.#field type arg
end if
end if
common %_
;; used internally by CLASS macro
struc __#name arg _%
forward if field eq
if arg eq
type default
else
type arg
end if
else
if arg eq
.#field type default
else
.#field type arg
end if
end if
common %_
virtual at 0
$#name name
__class.size = $
end virtual
macro name arg,extra _%
TAICHI __#name,arg,extra
forward
if __class.macro = FALSE
if ~ extra eq
'error: too many macro arguments.'
end if
if arg eq & default eq
type inherited
else if arg eq
type default
else
type arg
end if
end if
common %_
;; used internally by CLASS macro
macro __#name arg _%
forward
if arg eq
type default
else
type arg
end if
common %_
;; inherit
macro !#name arg _%
forward !TAICHI type
!TAICHI field
!TAICHI arg
!TAICHI default
common %_ }
_% fix {
%_ fix }
macro !TAICHI [arg]
{ common __class.fields fix __class.fields,<arg> }
macro TAICHI type,field,[arg]
{ common __class.fields fix __class.fields,type,field,<arg>, }
;; EOF
;;==================================================================== =======
;;==================================================================== =======
;; Пример использования
CLASS BYTE
TAICHI db,,?
ENDC
foo BYTE 2
BYTE 22h
CLASS WORD
BYTE lobyte, 77h
BYTE hibyte, 88h
ENDC
CLASS WORD5
BYTE ;, 77h
BYTE , 88h
ENDC
bar2 WORD5
WORD5 77h,78h
bar WORD 55h,66h
WORD 5,6
CLASS DWORD
WORD loword, 67h,68h
WORD hiword, 06h,66h
ENDC
some DWORD <25h,>,<,28h>
DWORD <56h,57h>,<58h,60h>
CLASS WORD2
!WORD 82h;, 82h
ENDC
another WORD2 2,7
WORD2
end_file: db 255
mov al,[foo]
mov al,[some.hiword.lobyte]
mov al,[bar.lobyte]
mov al,[another.hibyte]
mov al,sizeof.DWORD
mov al,[ebx+$DWORD.hiword.hibyte]
|
|
|
Дата: Мар 25, 2004 17:35:04 2q_q: Для чего в язык низкого уровня добавлять высокоуровневые понятия? ну как видишь нужны Т.е. ты создал тему в надежде, что есть готовые решения? а) надежда умирает последней, б) а вдруг я, ломо, живу и не знаю что это уже есть? Да и, как ктото верно заметил, зачем велосипед изобретать? в) а вообще я тему создал чтоб понять, одного меня так плющит или единомышленники имеются - имеются. И раз уж тебя так эта тема завела, выскажу своё мнение для чего мне, ну или комуто ещё может быть, нужен объектный асм: 1) Как ктото тут писал: большинство не умеют формализовать алгоритмы в асме, и поэтому юзают или си или масмовский изврат. 2) Большинство программистов (это я только про ассемблерщиков говорю) на работе пишут в сях, а асм - это скорее хобби, так чисто для расширения "кругозора". Эти две (может ещё что есть, но пока на этом остановлюсь) создают довольно извратную ситуацию, которую кстати такие как вы делают ещё более радикальной - или асм или си. Причем искусственно (здесь и далее имхо) создавая стандарт - асм: значит вся прога на голом асме, си - значит прога на си, а асм ну отсилы встроенный, и то лучше без него. Было бы идиально создать такой ассемблер, чтобы он позволял писать программу на голом асме (или вообще в опкоды удариться) с одной стороны, а с другой, можно было бы с легкостью использовать высокоуровневые структуры для быстрой разработки. Это дает две схемы поведения: 1) Используя высокоуровневые конструкции быстро разрабатывается алгоритм или приложение. Первое нужно в образовательных целях (а то эта схема бейсик->паскаль->си->асм меня лично добивает, а так будет один язык только "многоуровневый"). Второе нужно для практического применения. Так же это может пригодиться для проверки чего-нибудь - накидал вкратце задачку, проверил, если пашет, то переделываешь в асме (лично я так щас и делаю, тока приходиться для этих целей делфю юзать - сакс) - и это точно нужно! не все ж родились с профессиональным знанием асма! И эти высокоуровневые конструкции помогли бы начинающим писать проги, постепенно углублясь... 2) Значит эти самые "углубившиеся" начинают писать на асме. Причем например загрузчик какой-нить, тогда вообще на голом асме. Вобщем это ломает стандартную схему "си с ассемблерными вставками" на схему "асм с высокоуровневыми конструкциями". Что довольно выгодно, не надо учить с десяток языков, а можно ограничиться только одним. По поводу консервативности, тут всё двойственно, особо консервативные утверждают примерно следующее: q_q: Для чего в язык низкого уровня добавлять высокоуровневые понятия? - но ведь добавлены они уже! Процедуры, макросы, структуры, масмовские приколы - это элементы ЯВУ. Менее консервативные (и более правильно поступающие) используют всё это дело, и как мы видим пишут макросы для квазиобъектности. Но первых повидимому уже не переделать, а почему из-за них должны страдать вторые? - да если честно они и не страдают, просто приходиться постить такую вот лабуду как я щас, хотя заранее знаю что те кому это надо они и так это делают, а те кому это не надо - будут всю жизнь утвержадть что асм должен быть голым - хз почему так, это уже глубины психики, своего рода садомазо. Вобщем надоело спорить на тему надо не надо, НАДО! По крайней мере мне, а разводить демагогию зачем и почему - тоже самое что спорить о сущьности бытия, кроме как флеймом я это назвать не могу. А проза жизни показывает, что чем легче программировать, тем больше людей этим занимаются, а таланты они ж в процентах на душу населения, да ламаков пишущих на асме станет толпа, особенно если иде визуальное сделать, но глядишь очередная домохозяйка занявшись таким асмом и поняв что он ей по силам, станет лет через десять толковым программистом - кто от этого потеряет? А так, погнавшись за легкостью разработки, многие (как и ваш покорный слуга) поподают под сильное влияние vcl и mfc. И сколько талантливых программистов пишут в этой гадости? Прально, а ведь они могли бы писать на асме. Скажем так: утечка мозгов PS: на мой взгляд тема закрыта. |
|
|
Дата: Мар 25, 2004 17:55:28 1) Как ктото тут писал: большинство не умеют формализовать алгоритмы в асме, и поэтому юзают или си или масмовский изврат. А те, кто умеют - кодят в бинари? :) 2) Большинство программистов (это я только про ассемблерщиков говорю) на работе пишут в сях, а асм - это скорее хобби, так чисто для расширения "кругозора". Я по работе вообще не программист, и асм для меня отнюдь не хобби. Резюме - я пока для себя не увидел пользы в ООП (особенно в асм.) "асм с высокоуровневыми конструкциями" Например? for, while, if? Процедуры, макросы, структуры, масмовские приколы - это элементы ЯВУ Ну так сами инструкции - тоже элемент яву, нулями и единичками утомительно будет писать. Я, например, знаю как работают так называемые масмовские приколы, и когда мне нужно я их применяю а ведь они могли бы писать на асме Упаси Господь! :) очередная домохозяйка занявшись таким асмом и поняв что он ей по силам, станет лет через десять толковым программистом За такими домохозяками-ассемблерщиками особенно забавно на форумах наблюдать - они разбавляют сухость тем, так сказать :)) Я только ЗА! Но первых повидимому уже не переделать Ну, в общем, понятно - по весне и осени, когда обострения идут, всегда появляется кто-то, кто хочет все разломать и все переделать, тут уже, действительно, тему закрывать надо... |
|
|
Дата: Мар 25, 2004 18:19:46 JaDS Высокоуровневый ассемблер HLA. |
|
|
Дата: Мар 25, 2004 18:49:01 · Поправил: S_T_A_S_ JaDS Сказать честно я так и не понял, зачем создавалась тема: - подобные на форуме уже были. - были по делу - были просто ля-ля Поэтому я несколько озадачен вашими постами. Если вас действительно интересует вопрос, то стоит IMHO: - посмотреть линк выше - сделать поиск по форуму - сходить на _http://board.win32asmcommunity.net/ - там много по теме было постов - не устраивать здесь флейм. Учитывая, что всего этого не было, прихожу к выводу, что q_q & masquer делали объективные замачания в вашу сторону: Т.е. ты создал тему в надежде, что есть готовые решения Да, готовые решения есть. Их много. И даже человек постарался привел линк на одно из них. А вот по поводу такого: Было бы идиально создать такой ассемблер, чтобы он позволял писать программу на голом асме (или вообще в опкоды удариться) с одной стороны, а с другой, можно было бы с легкостью использовать высокоуровневые структуры для быстрой разработки. Еще Козьма Прутков говорил: "Никому не объять.." И от чистого ООП/HLL в ассемблере начинающим (да и ассемблеру - а будет ли это ассемблер?) пользы не будет никакой, так же как и от IF/ELSE etc.. Я например, пытаюсь что-то делать в этом направлении, не потому, что мне нравится концепция ООП (я вообще слабо понимаю абстракцию и т.п.) - просто потому, что кое-какие идеи из этого я использую и так, причем по-своему (кроме этого - это хорошая практика макросов). А то что мне не надо - я и не буду заимствовать. Например, CALL LABEL занимает больше места, чем CALL [EBX+8]. Вот еще пример: align 16 proc foo ret some useful code endpВыглядит странно? Теперь положим где-то в таблице хранится указатель на эту ф-цию (DWORD) и вызывается он так: CALL [ptr_to_foo]. Что будет в таком случае делать ф-ция? На первый взгляд ничего. А где-то есть еще OR [ptr_to_foo],1 и AND [ptr_to_foo],#FFFFFFFE. После выполнения OR ф-ция делает some useful code, а после AND - ret. Такие приемы позволяют упрощать логику работы программы. Вот для удобства таких вещей я и делаю макросы подобные ^^ А доказывать что-то или спорить - есть раздел HEAP и топик captain cobalt'а. Я надеялся от вас что-то по делу услышать все же :( pas Там еще букву "м" надо добавить ;-) |
|
|
Дата: Мар 25, 2004 19:15:34 По мойму реализация OOP на MASM32 это полный бред, хороших результатов не добиться, это должно быть реализовано в самом компиляторе. А вот у FASM в этом плане по мойму есть будущее. |
|
|
Дата: Мар 25, 2004 19:21:15 есть раздел HEAP и топик captain cobalt'а топик читал, а насчет раздела - сорри, я пока не разобрался со структурой форума. |
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 ... 14 . 15 . >> |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.191 |