· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ASSEMBLER —› ООП и асм

<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 ... 14 . 15 . >>

Посл.отвђт Сообщенiе


Дата: Мар 25, 2004 19:27:32

JaDS
На счет раздела - я про то, что здась как бы ожидалось обсуждние реализации, а не за/против

Chib777
Я с вами согласен. Макросы там очень мощные.


Дата: Мар 25, 2004 19:51:00

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

Я согласен с JaDS - это нужно для повышения производительности написания кода и наверное полезно дла популяризации Ассемблера.

Как-то возникла у меня одна идейка, но было это давно...

Поскольку не хочется делать новый компилятор (слава Privalov-у!), может быть легче сделать генератор кода, переводящий текст (скрипт) в АСМ. Пример:
class TBase
	{
	vars {
		uiMsg:UINT
		wParam:WPARAM
		lParam:LPARAM
		}

	vmt {
		OnWmCreate
		OnWmPaint
		OnWmCommand
		}

	verbs {
		DoVerb1
		DoVerb2
		DoVerb3
		}
	}

; --- Inheritance
class TFrame:TBase
	{
	vars {
		rcClient:RECT	; In addition to 'vars' section of 'TBase'
		}

	vmt {
		OnWmCommand	; Overriden virtual entry
		OnWmSize	; New virtual entry
		}

	; In addition to 'verbs' section of 'TBase'
	verbs {
		FrameVerb1
		FrameVerb2
		}
	}

; --- Using it in some function:
proc foo
	{
	locals {
		frame:TFrame
		} ; Here all constructors called for 'locals' section

	frame.FrameVerb1	; Call 'TFrame' method
	frame.DoVerb1	; Call 'TBase' method
	} ; Here all destructors called for 'locals' section

После пропуска такого скрипта через генератор кода получаем все структуры объектов, все методы присоединены, и т.п. а 'голый' ASM код просто копируется как есть. Всё, где обьекты используются - сгенерировано.

Самое интересное, это если сделать генератор кода как Plug-In. Тогда из одного и того же скрипта получаем код на TASM, MASM, FASM, NASM, ... - и компилируем соответствующим компилятором.

Вот где можно добиться переносимости библиотек классов! Но идейка заглохла... а ведь неплохо было бы иметь один IDE с одним исходным кодом и иметь выход на любой АССЕМБЛЕР - всё что надо это написать Plug-In для нужного компилятора.

Ногами только не бейте!..


Дата: Мар 26, 2004 05:09:54

S_T_A_S_
Такой уже есть. Автор - Tomasz Grysztar aka Privalov.
И каковы результаты?
Можешь назвать критерии, по которым компиляторы вроде BC++/MSC++/IntelC++/VectorC генерируют код хуже?


JaDS
НАДО! По крайней мере мне, а разводить демагогию зачем и почему ... кроме как флеймом я это назвать не могу.
Демагогию говоришь, ну-ну.
До сих пор твои попытки сформулировать ответ на вопрос "Зачем?" я не могу назвать четкими/обоснованными.
Ты не хочешь макросов, т.е. нужен новый компилятор. Ты представляешь, во что это выливается?

на мой взгляд тема закрыта
С какими выводами?


AsmGuru62
Я согласен с JaDS - это нужно для повышения производительности написания кода
imho использование ООП не входит в лидеры по повышению производительность написания кода.

.. и наверное полезно дла популяризации Ассемблера
Докатились: Для популяризации Ассемблера к нему нужно прикрутить ООП!

может быть легче сделать генератор кода, переводящий текст (скрипт) в АСМ.
И скрипт-программист автоматически станет асмером да еще с приставкой ООП?


Дата: Мар 26, 2004 06:39:46

AsmGuru62
может быть легче сделать генератор кода, переводящий текст (скрипт) в АСМ..

Слава Privalov-у! Такое в FASM можно возложить на макросы.
Некоторые (пока требующие доработок / изминений) успехи уже есть.

Получается достаточно компактный листинг на асме, с возможностью использовать такие вот вставки:
frame.FrameVerb1 ; Call 'TFrame' method



q_q
И каковы результаты?

В результате имеем для начала "чистый" ассемблер лишенный неоднозначности в синтаксисе.
Далее - этот ассемблер имеет мощное средство управления препроцессором - макросы.
Возможности этих макросов выходят за узкие рамки MS философии.
В частности: macro, struc, даже equ и (новая) fix - всё это директивы для определения макроинструкций.
Посредством макросов можно делать что угодно, от переопределения мнемоник ассемблера до создания новых макросов.

Если вас интересуют результаты непосредственно в ООП, то скажу, что Privalov свою задачу выполнил. Реализация же всяких HLL наворотов (коими являются также INVOKE, ADDR, .IF, PROC, etc) - дело рук пользователя.

Можешь назвать критерии, по которым компиляторы вроде BC++/MSC++/IntelC++/VectorC генерируют код хуже?

Для начала стоит уточнить, а не кроется ли в этом очень обширном вопросе сомнительное УТВЕРЖДЕНИЕ, что эти ^^ компиляторы производят ОДИНАКОВО эфииктивный код? ;-)

Еще хочу повторить, что если в VTable хранится "указатель на метод", то в асме я в этот DWORD смогу еще кое-какую информацию добавить. Как в си без извращений реализовать мой пример на предыдущей странице с "proc foo" ??

Еще, мне непонятно, к чему в этом топике ВООБЩЕ СС+?
Я видел и флейм Вирт vs Страуструп - такие жа пустые аргументы там. Я думаю мы тут про асм говорим ;-)


Дата: Мар 26, 2004 07:12:36 · Поправил: q_q

S_T_A_S_
В результате имеем ...
Опять аргументы, которые мне говорят только, что проект реализован ради проекта. Где примеры кода генерируемого этим ассемблером для ООП и их сравнение с кодом, например, С++ компилятора.

Для начала стоит уточнить, а не кроется ли в этом очень обширном вопросе сомнительное УТВЕРЖДЕНИЕ, что эти ^^ компиляторы производят ОДИНАКОВО эфииктивный код?
Все мои вопросы - попытка выяснить зачем ассемблеру (программистам на ассемблере) ООП если есть компиляторы С++, которые генерируют код лучше, чем большей части людей называющих себя программистами на ассемблере.
Перефразирую вопрос: "Насколько (и по каким критериям) эффективно использовать указанный тобою ассемблер, чем указанные мною С++ компиляторы?"

мне непонятно, к чему в этом топике ВООБЩЕ СС+? ... Я думаю мы тут про асм говорим
afik ООП и ассемблер.


Дата: Мар 26, 2004 09:16:44 · Поправил: S_T_A_S_

q_q

Где примеры кода генерируемого этим ассемблером для ООП и их сравнение с кодом, например, С++ компилятора.
Какие примеры?? AFAIK, пытались обсуждать как это реализовать..

попытка выяснить зачем ассемблеру (программистам на ассемблере) ООП если есть компиляторы С++, которые..
Зачем обобщать всех людей называющих себя программистами на ассемблере?
Вам не надо - кому-то другому надо.
Зачем надо лично мне - повторю - см. пример с "proc foo" - и это лишь видимая мною вершина айсберга.
А самому языку ассемблера, IMHO, совершенно все равно для каких целей его используют - лишь бы в печь не ставили.

"Насколько (и по каким критериям) эффективно использовать указанный тобою ассемблер, чем указанные мною С++ компиляторы?"
Лично для меня - это вопрос предпочтений.
Никак не могу дорасти использовать DWORD в случае, когла мне хватает флага C.
И все не могу толком понять философию этого языка 70х.
А по поводу эффективности - сравните для начала хоть BC++ & IntelC++ ;-)

afik ООП и ассемблер.
Вы утверждаете, что ООП == С++??


Дата: Мар 26, 2004 10:39:14 · Поправил: q_q

S_T_A_S_
Какие примеры??
Т.е. ассемблера с ООП нет? Не удивляет почему?

Зачем обобщать всех людей называющих себя программистами на ассемблере?
Какая из моих фраз создала такое впечатление?

Зачем надо лично мне - повторю - см. пример с "proc foo" ...
Так это пример иллюстрирующий необходимость ООП, а полагал, что это иллюстрация реализации ООП.

Никак не могу дорасти использовать DWORD в случае, когла мне хватает флага C.
Лет 10-12 назад у меня тоже чесались руки, когда я видел код генерируемый Си'шным компилятором, и понимал, что способен написать более эффективный (по размеру и быстродействию). С тех пор процессоры доросли до PIV (тогда завидовали 386'ым, а если был сопроцессор, то ...) появилась и поучила распространение windows, появился и стал доступным на PC unix'а - linux, с возрастом приходит понимание, что готовить для работы инструменты можно всю жизнь и может не остаться времени на их использование.

философию этого языка 70х
Грубо.

А по поводу эффективности - сравните для начала хоть BC++ & IntelC++ ... Вы утверждаете, что ООП == С++??
Ни в каком из своих сообщений я не агитировал за С/С++, не пытался завести диспут за или против ООП. Я пытаюсь понять какие усилия необходимо приложить для получения удобного (какие критерии удобства? кому-то достаточно макросов, JaDS не формулирует свои критерии) союза ООП и ассемблера и какие выгоды сулит этот союз, а С++ указываю для сравнения, т.к. считаю его наиболее близким (из ООП) по духу к ассемблеру.


Дата: Мар 26, 2004 13:50:08

q_q
Т.е. ассемблера с ООП нет? Не удивляет почему?

Асм с ООП есть. Но существующие модели заимствованы из HLL без адаптации к низкоуровневости ассемблера.
Я имею ввиду, что нет смысла копировать. Взять то, что действительно полезно, а что-то и выкинуть.

Так это пример иллюстрирующий необходимость ООП, а полагал, что это иллюстрация реализации ООП.
Правильно, пример необходимости мне. Таким способом я ухожу от лишних флагов / проверок условий и экономлю место. И именно поэтому я и изучаю возможность использовать макросы для упрощения таких вещей.

с возрастом приходит понимание, что готовить для работы инструменты можно всю жизнь и может не остаться времени на их использование.
Когда завидовали 386'ым и ковырялись в 16битных сегментах ДОСа, а более счастливая часть человечества писало на асме под нормальные процы применяемые в баллистических ракетах, я делал одну демку для Speccy и для ее успешной реализации мне пришлось написать свой музыкальный редактор (поскольку существующие не устраивали).
Безусловно, вторая задача была на порядок сложнее первой и заняла приличное количество времени.
Однако пользы (мне) принесла заметно больше.
Так что и в данном случае я просто считаю, что это хорошая школа программирования для меня (!)
К тому же, те макросы, которые я делаю, возможно, окажутся полезными другим людям для других целей.

Я пытаюсь понять какие усилия необходимо приложить для получения удобного (какие критерии удобства? кому-то достаточно..
Вот это, я думаю ключевой момент. Прелесть ассемблера, IMHO - отсутствие стереотипов.
Поэтому я не считаю, что будет толк от "внедрения ОБЩЕЙ модели ООП".
Для конкретных категорий задач могут оказаться полезными какие-то конкретные приемы реализации..
Для других - полное отсутствие и тени ООП.
А если делать "универсальный инструмент", то мы опять придем к С.

А вот какие усилия затритить.. Для меня - избавиться от остатков МАСМовской модели макросов в памяти, поскольку она порой все еще мешает пользоваться совершенно другой идеологией. Новый ассемблер создавать не надо :)

FASM дает возможность использовать в полях структур не только DD/DB, но так же и макросы (!).
Грамотно написанные макросы struc - позволят создавать "объекты" на базе этих структур.
С возможностью наследовать / изменять заданные по умолчанию свойства полей.
А так же избавиться от типичных ограничений для структур в МАСМ.
Моя цель сейчас - решить некоторые существующие еще проблемы с этим
А вот с постами сюда, я вероятно поторопился..

Какое будет удобство - это уже совсем субъективно, IMHO. Мне удобно писать программу так, кому-то иначе..
Если мне не удобно каждый раз писать на асме однообразный код - я пишу макрос. Вот и все..

JaDS не формулирует свои критерии
Вот это и плохо.. Я не начинал эту тему, а предложил кое-какие наброски которые у меня имелись (у него тоже FASM) - но он что-то быстро охладел..


Дата: Мар 26, 2004 13:57:32

А так же избавиться от типичных ограничений для структур в МАСМ.
А какие там ограничения?


Дата: Мар 26, 2004 14:29:47

А какие там ограничения?
Да они не только там. Синтаксис FASM:
struc	foo
{	.first	dd ?
	.second	dd ?	}

struc	bar
{	.old	foo
	.new	dd ?	}

data	bar
mov	eax,[data.old.second]

А я хочу:
struc	bar2
{	old	foo	;; 
	new	dd ?	}

data2	bar2
mov	eax,[data.second]

Последний вариант, нереален стандартными средствами (если не считать COPY/PASTE)
Поэтому я делаю макрос, способный мне заменить стандартный struc и справиться с этой задачей.
В DD, конечно, можно задавать и реальные данные, а не ?

А вот в использование макроса в качестве поля структуры - интересная штука - только в FASM:
data2.GetFromFile


Дата: Мар 26, 2004 14:46:00

Ну, я так делаю
struc bar2
old foo<> 
new dd ?
ends
...
lea eax, bar2
mov edx, [eax].bar2.foo.second


Дата: Мар 26, 2004 15:02:27 · Поправил: q_q

S_T_A_S_
Для других - полное отсутствие и тени ООП
Наконец-то. А то тема начиналась с того, что ООП - панацея от всех бед, а ассемблер с ним не дружит.

А я хочу ...
Т.е. хочешь избавиться от промежуточного поля old, выполняющего роль "базового класса"?


Дата: Мар 26, 2004 15:38:52

masquer
Во.. так любой может. А вот так: mov edx, [eax].bar2.second ?



q_q

тема начиналась с того, что ООП - панацея от всех бед, а ассемблер с ним не дружит.
Ну.. это не мое мнение было. И я никогда не считал, что ООП - это панацея.

Т.е. хочешь избавиться от промежуточного поля old, выполняющего роль "базового класса"?
Уже избавился. Не для всех случаев пока нормально оттестировано и/или работает.


Дата: Мар 26, 2004 16:25:24

S_T_A_S_
но он что-то быстро охладел.. - я не охладел, просто спорить на тему плюсы минусы мне надоело, а щас пытаюсь востановить те макросы которые у меня были (помнишь про то что я вечно начинающий - я просто когда чтото забрасываю а потом возвращаюсь, я перым делом стираю старое).

FASM дает возможность использовать в полях структур не только DD/DB, но так же и макросы (!). - кинь пример, а то я чтото этого не догнал, я то без struc делал:
macro TForm [name, caption ...]
{
  name#.caption=caption; не проверял но чтото типа того
}

Твой пример я делал примерно так:
macro	foo, [name]
{	name#.first	dd ?
	name#.second	dd ?	}

macro	bar, [name]
{	foo		bar
	name#.new	dd ?	}

bar	data
mov	eax,[data.second]

за работоспособность кода не ручаюсь не проверял, но схему я обрисовал. Была идея и с полиморфизмом, но ... забыл как делал, помню что пользвовался тем что макросы можно переопределять, типа:
macro TForm_Create, [name, tmp]
{
  name#.tmp  db tmp
}

macro TForm_Create, [name, tmp]
{
  name#.tmp  dd tmp
}

Но было неудобно что приходилось делать так: <макрос> <имя объекта>, <[параметры]> Хотелось бы <имя объекта>.<переменные> - походу со структурами так можно будет сделать, так что кинь пример (попрощеее, твой первый пример я не догнал :( )

2q_q:
Я пытаюсь понять какие усилия необходимо приложить для получения удобного (какие критерии удобства? кому-то достаточно макросов, JaDS не формулирует свои критерии) союза ООП и ассемблера и какие выгоды сулит этот союз
ну вообщето я их уже не раз тут высказал, но ещё раз повторю:

Мои критерии удобного союза:
в идеале чтоб в препроцессор были встроены дерективы описания сложных структур данных (классов короче, про шаблоны не знаю, я с ними толком не знаком, вообще помоему шаблоны - это классы с абстрактными полями данных, зачем название новое придумали? - но это я в сторону ушёл). Впринцыпе похожие вещи можно и макросами сделать - но если это будет встроенно в препроцессор, то это сделает код более стандартным, а не так что у каждого своё.

Выгоды от союза:
опять двадцать пять:( ну скока можно??? ладно, повторенье мать ученья:
1) скорость разработки продукта
2) не требуется знать как устроен объект для работы с ним, достаточно знать его интерфейс - легче разбираться с чужим кодом
3) вложенность названий: MainForm.ButtonCancel.Handle - более понятно чем h307
4) ну куча ещё чего...

Я знаю что всё из этого можно реализовать в асме и так, если бы хоть чтото из этого нельзя было бы реализовать в асме, я бы полез разбираться в опкодах, но мы же говорим не о возможности/невозможности, а о нашем с вами удобстве.

Т.е. хочешь избавиться от промежуточного поля old, выполняющего роль "базового класса"?
В данном примере от лишнего слова в названии (data.old.second). Но зачастую под этим кроется лишний код, от которого и надо избавляться. (в этом беда VCL и MFC)

Наконец-то. А то тема начиналась с того, что ООП - панацея от всех бед, а ассемблер с ним не дружит.
Начинал я, значит намек на меня? я прально понял? - и где это я такую глупость спорол? я вроде бы говорил "идиально...многоуровневый язык". Чтоб где надо - ООП юзаешь, где надо - опкоды, по середине на асме, НО ГЛАВНОЕ в одной среде, в одном языке, чтоб не учить десяток языков и библиотек, и чтоб программисты всего мира работали друг на дружку (вот это точно агитация:) - а то какой мне толк от всего что написано на си, если я в асме пишу (верней пытаюсь).


Дата: Мар 26, 2004 18:19:31

S_T_A_S_
А мне не в лом набрать первые буквы, а там ИДЕ достроит :)

JaDS
По поводу выгод:
1. По поводу скорости - спорный вопрос. Получается, что мне не только написать десяток процедур нужно, а и распихать их по классам и держать в голове кроме самой задачи еще кучу лишних данных? Вообще, на ассеблере, как правило, крупные проекты не пишутся (хотя исключения есть :)), а в мелочевке ООП ну 100% не нужно. Имхо, даже сама идея утопична.
2. Это на высокоуровненых языках так, я на асме почему и пишу - мне гибкость нужна и отсутствие ограничений - я сам себе и оптимизатор, и компилятор и еще Бог знает кто :) И потом - у меня своих глюков хватает, чем чужие вылавливать :)
3. Покажи мне хоть одно ИДЕ которое будет такое поддерживать для ассемблера.

и чтоб программисты всего мира работали друг на дружку
Ага, щаз, все всё бросили и начали друг на дружку работать - мне еще ассеблерные сорцы индусов и прочих китайцев осталось почитать :)))

<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 ... 14 . 15 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.263