незваный гость писал(а):
Я читаю внимательно. Но, если Вы не заметили, Ваше выражение «НЕ использовать ассемблерные вставки и/или подпрограммы» не однозначно: согласно грамматике русского языка его можно интепретировать как «не использовать ассемблерные вставки и/или ассемблерные подпрограммы» или «не использовать ассемблерные вставки и/или не использовать подпрограммы».
Вот вам и наглядный пример демонстрации неоднозначностей синтаксиса языков семейства С:
в С допустимо выражение вида:
Код:
if (a && b || c)
которое вы, если исходить из вашей логики, не должны знаеть как воспринять
Код:
(a &&b) || c
или
Код:
a && (b || c)
( и не надо вспоминать про то что
Код:
&&
приоритетнее
Код:
||
, потому что в русском языке в случае если идет прилагательное и далее перечисление через "и или ," - то прилагательное относится к каждому и перечисляемых существительных - вот только кто упомнит все эти правила, правда?
)
А вот в паскалевском синтаксисе такие глупости недопустимы
там программист обязан заключить в скобки либо
Код:
a && b
либо
Код:
b || c
.
То есть в приложении к русскому языку, паскаль бы не допустил такой вот фразы, в котрой вы усмотрели неоднозначность, и потребовал бы от меня вот примерно такой коррекции:
НЕ использовать ассемблерные (вставки и/или подпрограммы).
незваный гость писал(а):
Столь же безосновательны и Ваши претензии к ссылам на не win32.
А я вам спешу напомнить что в конце того поста было указано:
_в рамках OS win32_ (правда вы по-видимому это в тот раз опять применили лишь к какой-то части поста... Уточняю - это было сказано в отношении всего поста
)
незваный гость писал(а):
Это Вас кто-то крепко обманул. Просто надул, беззащитного. Или грехи молодости спать не дают. На ассемблере обработчики прерываний писали до конца 80х – начала 90х, по-моему. С тех пор обходятся С, Паскалем, … в общем, что под руку попадется.
Если нужна скорость, то всегда обработка прерываний пишется на asm... А когда на чем попадется - дак такие прожки и работают потом... Как попадется
(И кстати не только обработка прерываний - в ring0 вообще львиная доля кода написана на asm)
незваный гость писал(а):
Может быть, конечно, кто-то и сейчас на ассемблере пишет. Где-то ведь и огонь трением добывают…
А вот с такими высказываниями следует быть осторожней
Когда-то я тоже думал что написать на asm приложение под win32 с окошками иконками, скинами и прочими фенечками - это адова работа. В результате в один прекрасный день мне утерли нос сделав example такого приложения на masm под win32 на моих глазах меньше чем за час
. Секрет оказался прост - просто весь исходник на 40% состоял из вызовов API-функций. А на С++ люди иногда по нескольку дней с этим умудряются возиться - особенно если mfc юзают
. Еще например видел достаточно функциональный proxy-сервер под винду, написанный целиком на masm - опять таки на 1-2 странички asm-кода почти две странички вызовов API. Весит в скомпилированном виде 38кб, по скорости и размерам ни на Delphi ни на С за ним не угнаться как ни старайся. При этом временнЫе затраты на написание - практически такие же
. В общем почитайте про win32 masm... Много неожиданного и интересного узнаете будет судя по "Где-то ведь и огонь трением добывают…"
незваный гость писал(а):
Что касается ответа на мой вопрос об управлении памятью, то большая часть Вашего ответа втуне. Поскольку вопрос был отнюдь не «какие есть средства управления памятью в Delphi». А как бы Вы написали класс с вполне определенным интерфейсом. И с указанной семантикой.
Странный вопрос... если вам нужен точно такой же интерфейс - ну дак тогда просто берется этот менеджер памяти, написанный на С++ и один к одному забивается в Delphi, заменяя "malloc" на "getmem", "{ }" на "begin end" и тд. Все получается один к одному. Скорость работы скомпилированного кода будет одинаковая. В чем тогда смысл вопроса, если не в доступных вариантах реализации какой-либо задачи? В С++ есть еще какие-нибыть варианты кроме такого класса? Я просто показал что Delphi вот есть... Но имхо абсолютно не прикладная задача, если не сказать надуманная и бесполезная - см ниже почему.
незваный гость писал(а):
А с динамическими массивами я тоже не понял — мой alloc() возвращает указатели на объекты
заказанного типа. Я просто пишу в вызове, что мне нужно:
Код:
MyClass* pmc = mm.alloc<MyClass>();
YourClass* pyc = mm.alloc<YourClass>();
mm.free(pmc);
mm.free(pyc);
Как тут Вы используете динамические массивы?
кхм... я видимо в прошлый раз неправльно понял ваш вопрос... тогда все еще проще...
допустим у нас есть два класса: tmyclass и tyourclass... и нам надо динамически создать их экземпляры и поработать с ними... пикантность в том что не знаю как в С, а в Delphi для этого никакой менеджер памяти не нужен в принципе - все и без него предельно просто и удобно
. Вот как например может выглядеть код:
Код:
var
p1,p2:pointer;
begin
//создание экземпляра класса tmyclass
getmem(p1,sizeof(tmyclass));
tmyclass(p1^):=tmyclass.create;
//обращение к полям экземпляра класса:
tmyclass(p1^).my_class_int_field:=12;
//создание экземпляра класса tyourclass
getmem(p2,sizeof(tyourclass));
tyourclass(p2^):=tyourclass.create;
//обращение к полям экземпляра класса:
tyourclass(p2^).your_class_char_field:='r';
уничтожение экземпляров:
tmyclass(p1^).free;
tyourclass(p2^).free;
end;
Все. Не вижу смысла городить огород с "менеджером памяти" только ради того чтобы вместо доп. строчки "getmem(a,b)" писать доп. вставку "mm.alloc"... Изобретать колесо - оно знаете ли... Неблагодарное занятие
незваный гость писал(а):
Против. Времени нет на то, что я считаю не важным. <skipped> А для очень многих проектов я выберу Python, хоть он и проиграет по скорости раз в десять. Зато усилия на разработку и сопровождение сократятся.
Увы... В последнее время этот подход (в духе "плевать на скорость, лишь бы код писался приятно") получил прямо-таки характер эпидемии... Особенно меня .net в этом смысле пугает... Когда банальное окошко с настройками драйвера видяхи открывается на P4 5-6 секунд судорожно дрыгая винтом, особенно в сравнении с тем как оно открывалось субъективно мгновенно без обращений к винту в пред. версии драйвера... Ничего кроме полного недоумения "ЗАЧЕМ?".
незваный гость писал(а):
На мой взгляд, эпоха священных войн за языки программирования отошла в прошлое. <skipped>
Да бог с вами, какие войны
Просто я внес некоторые уточнения в высказывания
Язык C позволяет получить наиболее компактный/быстрый код, уступая только ассемблеру.,
язык C - хорошая замена ассемблеру в случае реализации критичных к эффективности задач.,
язык C++ - огромная гибкость, наряду с и тд (см 1 стр.) - а именно - что они являются ложными если речь идет о программировании под win32 - вот и все
незваный гость писал(а):
Я понял Ваше мнение: Delphi самая быстрая система программирование в wintel.
Нет, у меня нет такого мнения
У меня есть мнение что в wintel Delphi и С++ - абсолютно равноценные языки (в том смысле что в плане реализации нет ничего что было бы возможно в одном языке, и невозможно или существенно более коряво и тормозно - в другом). Разница между ними лишь в том что Delphi проще в освоении, зато для С-шников в MSDN родной синтаксис - да и то эти два преимущества имхо практически уравновешивают друг друга
. Если же я встречаю обратное утверждение (см выше) - то мне всегда интересно подискутировать с его обладателем.
ps Хотя по поводу священных войн - никто не сидит в танке, а все до сих пор залазят на коней и хватают флаги и шашки если речь заходит о том, какой синтаксис лучше
. Опыт показывает (кстати см начало поста
) что независимо от того что говорят про стандарты и удобства сишного, нюансов, исключений, сложночитаемых элементов, двусмысленных трактовок и прочих "удобств" в нем существенно больше - на опыте это выливается в более высокое количество ошибок на тот же объем кода и на более трудоемкий их поиск и исправление, нежели в паскаль/Delphi
pps Когда просматривал другие топики этого раздела форума (да и любого другого по программированию) - очень много веселых минут доставило чтение неиссякаемых вопросов про то, а как бы избавиться от утечек памяти в С/C++, как их отслеживать, как надежнее отлавливать эти утечки и как бы писать код чтобы их было как можно меньше - и при этом серьезные обдуманные ответы с разными вариантами без всяких "RTFM" - то есть эта проблема в С видимо не считается уделом новичков, а остается актуальной и в программах професионалов тоже
. Это так... к слову