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

 WASM Phorum —› WASM.HEAP —› Ваше мнение...

<< . 1 . 2 . 3 . >>

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


Дата: Окт 10, 2004 22:34:13

>После ассемблера не понять какой-либо язык просто невозможно :)
Ну это как сказать, Я вот уже привык к ячейкам памяти и регистрам. Так мне классы с таким трудом даются, если ваще когда нить дадутся!


Дата: Окт 11, 2004 08:39:41

Дык это потому, что многие авторы книг, которые ты читаешь, знают кучу всяких слов вроде инкапсуляции, агрегирования и прочая. А объяснить русским языком, что такое таблица виртуальных методов им не досуг.


Дата: Окт 15, 2004 13:37:48

IMHO знание внутренних механизмов виртуальных функций МЕШАЕТ при написании программ на C++. Вся его (C++) прелесть именно в инкапсуляции, агрегировании, шаблонах и пр.. Просто очень немногие могут это по русски и доходчиво объяснить.

Жду шишек на свою голову от ассемблерщиков =)


Дата: Окт 15, 2004 13:42:50

S_T_A_S_
Не будет от тебя статьи по этому поводу, обижусь!


Дата: Окт 15, 2004 19:28:02

>После ассемблера не понять какой-либо язык просто невозможно :)

У нас в ВУЗе был язычок для создания экспертных систем (местная разработка, но рельно используемая) - так я ее ни после ассемблера (трех ассемблеров, если быть до конца точным), ни после бутылки понять не смог. Там фичи примерно такие:
1. Более-менее традиционных управляющих структур не было не только в языке, но и в мозгу разработчика ЭТОГО
2. Все "операторы" на каждом шаге исполнялись одномоментно. Даже взаимоисключающие :-)
3. Одна и та же переменная могла
1. "переименоваться" в другую переменную _без_малейших_указаний_ в тексте "программы" (было какое-то правило, которое позволяло постфактум осмыслить, что во что превратилось, но я его так и не смог понять по причине его абсолютной шизофреничности)
2. иметь два равноценных имени одновременно

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


Дата: Окт 15, 2004 20:22:50

EvilsInterrupt

По какому поводу?


Дата: Окт 15, 2004 20:34:15

Стасу:
По вопросам:
1. Классы и структуры(как их представить человеку имеющего только опыт низкого уровня)
2. Их реализация на низком уровне
3. Работа компиляторы когда он видит такие вещи

можно также виртуалные функции!


Дата: Окт 15, 2004 20:36:18

А объяснить русским языком, что такое таблица виртуальных методов им не досуг.

Это почему не досуг? Еще и как досуг! Просто ты не те книжки читаешь :))) Почитай трупа страуса - "Дизайн и эволюция С++" - там все это есть! Может, труп страуса и хреново объясняет - не дано ему, но, тем не менее, информации достаточно много. :)


Дата: Окт 15, 2004 23:05:07

volodya

один чел сказал мы слишком мало живем, чтобы думать и знаешь, он в чем то прав.


Дата: Окт 15, 2004 23:15:59

О-о-о!

Так как истина вечно уходит из рук,
Не пытайся понять непонятное, друг.
Чашу в руки бери, оставайся невеждой,
Нету смысла, поверь, в изученьи наук.


Дата: Окт 15, 2004 23:38:41

EvilsInterrupt

1 & 2 - Предположим, мы пишем игру ТЕТЯIS (название искажено умышленно, т.к. afaik за его использование нужно платить $$)

Есть у нас всякие переменные (ячейки памяти) - время, счёт, уровень, координата фигуры X, координата фигуры Y и т.д.
Наш пример прост, поэтому запутаться в них сложно.

Но, тем не менее, то что перечисленно выше, логично выделить группы:
- статистика игры;
- координаты фигуры.
И объявить свой формат данных:
; fasm

struc	statistic
{
	.time	dd ?
	.score	dd ?
	.level	dd ?
}

struc	sprite
{
	.x	dd ?
	.y	dd ?
}

Теперь, вместо просто имени переменной мы будем использовать имя структуры, и, через точку, имя, гм.. назовём это словом "свойство" :).

Какой в этом смысл, кроме усложнения имени?
Очень простой: когда мы определяем конкретные экземпляры данных в программе, данные одной группы быдут расположены физически в соседних ячейках памяти.
А это плюс, когда данные будут считываться процем из памяти в кэш.


Теперь вспоминаем, что спрайты у нас в игре имеют не только координаты, но и форма у них может быть разная - 2х2, 1х4 и т.д.
Можно сделать так:
struc	sprite
{
	.x	dd ?
	.y	dd ?
	.image	dd ?
}
В последнеё ячейке будем хранить номер, соответствующий фигуре.
Если этот номер 1 - рисуем 2х2, если номер 2, то - 1х4..
Но что-то много тут "Если" - а на каждую нужен свой Jcc вызывающий соответствующую подпрограмму рисования.
Как зделать проще?
А вот так:
struc	sprite
{
	.x	dd ?
	.y	dd ?
	.draw	dd ?
}

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

Если мы хотим сдвинуть спрайт вниз, то мы вызываем соответсятующую ф-цию, для всех фигур она одна (и адрес её тоже один).
Если же нужно нарисовать - то ф-ция тоже как бы одна, но адреса у них разные, для каждой фигуры свой.
Основной же код общий для всех фигур - и ф-ция рисования для него "виртуально" - одна и таже.
Причём, если мы захотим реализовать новую разновидность игры, где фигуры будут из 5 кубиков, нам нужно будет только добавить ф-ции рисования этих кубиков, всё остально е уже готово.

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


> „Работа компиляторы когда он видит такие вещи“

Я как раз и думаю над этим, что он должен делать и, самое главное, как.
Вот только не знаю, сколько над этим нужно будет ещё думать, перед тем как что-то писать :-)

> „один чел сказал мы слишком мало живем, чтобы думать и знаешь, он в чем то прав.“

Думаю, в первой половине %)


volodya > „Просто ты не те книжки читаешь :))) Почитай трупа страуса“

Дык, он у меня есть, но объясняет-то англицким :-)
А поскольку у меня с ним не очень, читаю ISO/IEC14882 там вроде язык понятней, тока вот крыша бы не поехала после этого %)


Дата: Окт 15, 2004 23:49:51

Книга Страуструп'а, по-моему, не лучшая книга по C++ %)


Дата: Окт 15, 2004 23:55:48

S_T_A_S_
> но объясняет-то англицким :-)

Но есть ведь и переведённый, и в сети его навалом, хотя бы на том сайте где книжка 15Mb pdf по BCB лежит ;-)


Дата: Окт 15, 2004 23:59:39

Книга Страуструп'а, по-моему, не лучшая книга по C++ %)

Я бы сказал, что это ХУДШАЯ книга по С++, но,
1) Все пункты освещены
2) Как-никак создатель, мать его за ногу и об угол.

А о "дизайне и эволюции" я сказал в ответ на вопли EvilsInterrupt.
Asterix - а ты учи и С, и С++ - работы много. Я тебя и привлеку тут же :)


Дата: Окт 16, 2004 01:18:04

volodya

„Так как истина вечно уходит из рук,
Не пытайся понять непонятное, друг.
Чашу в руки бери, оставайся невеждой,
Нету смысла, поверь, в изученьи “


Омар Хайям что ли?

<< . 1 . 2 . 3 . >>


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