Re: нужно объяснение | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
() почему все так не любят макро, точнее, называют макро "никогда не было особенно хорошим"? Мтк, макрос (динамически создаваемый код программы) - вполне жизнеспособная парадигма программирования, как и вынесение части констант кода в внешние параметры, или выполнение какого-то файла метаданных их исполнителем, компилятором метаданных в код "на-лету"... Что не так?
Если единственный аргумент типа "это не понятно", или "это долго компилируется", то в некоторых задачах (не требующих "машинного" кодирования для скоростного исполнения) вполне себе удобно, и не всегда непонятно... |
Re: нужно объяснение | |
---|---|
Ydin Сообщений: 7648 Откуда: Киев Дата регистрации: 16.12.2005 |
Не все! Когда хочется мало писать и это для себя на тот момент ... Джазовая штучка Исправлено 1 раз(а). Последнее : Ydin, 06.10.21 21:05 |
Re: нужно объяснение | |
---|---|
akvvohinc Автор Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Цитата: В основном рассуждают иначе - макро ничем не лучше других способов, если их можно использовать наряду с макро, но при этом макро "тормозит". Вывод - зачем в этих случаях использовать макро? А вот против использования макро в тех случаях, когда других способов нет, или они значительно усложняют реализацию (понимание) того же самого, вряд ли кто будет возражать. Я чаще всего использую макро в тех случаях, когда это ускоряет выполнение программы, такие случаи тоже не редкость. Исправлено 1 раз(а). Последнее : akvvohinc, 06.10.21 22:06 |
Re: нужно объяснение | |
---|---|
Ydin Сообщений: 7648 Откуда: Киев Дата регистрации: 16.12.2005 |
|
Re: нужно объяснение | |
---|---|
Taran Сообщений: 13626 Откуда: Красноярск Дата регистрации: 16.01.2008 |
Интересно бы хоть один пример увидеть. А иначе это просто треп. |
Re: нужно объяснение | |
---|---|
akvvohinc Автор Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Любая команда типа "цикл" (SCAN FOR, REPLACE FOR и т.п.) с "динамически формируемым" условием, включающим выражение над полями таблицы и т.п. В общем, это те случаи, когда предстоит выбрать между макро и EVAL() Естественно, результат будет зависеть от количества обрабатываемых записей и сложности выражения FOR (количества вызовов EVAL() в FOR).
Тоже хотел бы, чтобы ты привел хоть один пример моего трёпа. Исправлено 5 раз(а). Последнее : akvvohinc, 07.10.21 12:18 |
Re: нужно объяснение | |
---|---|
danton1973 Сообщений: 143 Откуда: Пермь Дата регистрации: 10.08.2020 |
а так:
|
Re: нужно объяснение | |
---|---|
akvvohinc Автор Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
1) это та же макроподстановка (отложенная компиляция), есть еще EXECSCRIPT() из той же серии;
Исправлено 3 раз(а). Последнее : akvvohinc, 07.10.21 12:11 |
Re: нужно объяснение | |
---|---|
Ydin Сообщений: 7648 Откуда: Киев Дата регистрации: 16.12.2005 |
макроподстановка сегодня тормозит так мало, что можно не обращать внимания!
И не спорить тут. Кому как удобно! Я пишу (программирую) так, как мне хочется. Чтоб быстрее написать и получить результат. Если надо потом по времени выполнения ускорить, может, и макро заменю. Там, где явно это! В большом цикле, скане... По ситуации. Посмотрите на часы - вторая половина 2021 года. Уже тех EC1018, Правецов, XT, AT нет! А если у Вас есть еще, то боритесь с макро. Но тут мы должны разделиться... Исправлено 2 раз(а). Последнее : Ydin, 07.10.21 20:54 |
Re: нужно объяснение | |
---|---|
Владимир Максимов Сообщений: 14100 Откуда: Москва Дата регистрации: 02.09.2000 |
99% времени программист тратит вовсе не написание нового, а на попытку понять уже написанное и как-то вписаться со своими изменениями. И вот здесь макро - это крайне не удобно. Требует дополнительного времени на понимание. Иногда - очень существенного. Вот только не надо сразу возражать, мол "мне все понятно". В том-то и дело. Здесь ключевое слово "мне". Причем, еще стоит добавить "сейчас". В смысле, пока ты именно этой задачей занимаешься. Спустя пару месяцев, если переключился на другую задачу, сам же будешь смотреть на этот макро как баран на новые ворота Чтобы было понятно, приведу простой пример. На своем компьютере ты знаешь в какой папке какой файл лежит. "Здесь и сейчас" тебе "все понятно". А если тебя попросить найти файл, содержащий определенный текст на чужом компьютере? Быстро получится? Даже если поисковик включишь... |
Re: нужно объяснение | |
---|---|
Владимир Максимов Сообщений: 14100 Откуда: Москва Дата регистрации: 02.09.2000 |
Это невозможно. Макро не способен ускорить выполнение программы. Макро - это способ уменьшить количество знаков в коде. Т.е. это способ ускорить написание программы. Но! Повторюсь, 99% времени программист тратит вовсе не на первичное написание кода, а на его чтение и внесение изменений. Поэтому когда гонятся именно за ускорением первичного написания, как правило, это приводит к обратному эффекту. И время и объем кода начинает катастрофически расти. PS:
Если речь об этом, то это не корректное использование терминов. И Evaluate() и выражение имени - это тоже "макроподстановка". Только менее универсальная. Специализированная. В данном случае вторая команда, конечно, будет медленнее по той причине, что при использовании символа макроподстановки & формируется вся строка целиком, а не ее фрагмент. Причем только и исключительно из-за evaluate(). Выражение имени как раз наоборот, работает несколько быстрее, чем & Но когда говорят, что "макро работает быстрее", то я понимаю это так, что сравнение идет с прямой командой
И вот здесь никакого выигрыша в скорости быть не может А вообще, согласен вот с этим
Вовсе не в скорости дело-то... Исправлено 1 раз(а). Последнее : Владимир Максимов, 07.10.21 21:25 |
Re: нужно объяснение | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
В скорости тоже, но это не самая частая проблема. Хотя, если кто-то ставит макро чуть ли не в каждую вторую команду - то очевидно и со скоростью у него будут проблемы.
Рассуждения в духе "Кому как удобно" имеют смысл лишь при работе одиночек. При любой коллективной работе всегда вырабатываются некоторые стандарты, которым обязаны следовать все - иначе "самого умного" просто выгонят, т.к. он реально будет мешать работать остальным. Конечно же запрещать макро никто не будет, да и на "глупое" его использование (например там где вполне можно обойтись выражением имени) вряд ли будут делать большой акцент... Нет, конечно. Сравнение с альтернативными способами написания динамического кода. Сравнивать со статическим кодом совершенно бессмысленно - т.к. если кто-то использует макро для написания статического кода, то это выглядит очень, очень странно - вероятно он преследует цель сделать код нечитаемым, неотлаживаемым или закладывает какую-то тайм-бомбу Я бы не стал делать таких обобщений. Эти команды/опции могут использоваться для написания динамического кода, но это не делает из них "макроподстановку". Так то можно и execscript или собственно компиляцию в рантайме вспомнить - но не "макроподстановкой", конечно же, называть это. ------------------ WBR, Igor |
Re: нужно объяснение | |
---|---|
akvvohinc Автор Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Приведенный мною пример показывает, что макро ускорило выполнение команды по сравнению с возможной альтернативой, несмотря на "невозможность" этого. Но если вы можете реализовать то же, но без макро, и чтобы работало быстрее, чем с макро, то приведите пример - мне придется согласиться, что макро не ускорило выполнение этой задачи. А до тех пор получается, что вы отрицаете очевидное.
Допускаю, что какое-то количество людей использует макро только с такой целью. Во всяком случае, я использую макро в основном для достижения двух целей: 1) ускорить выполнение программы (пример выше); 2) построить команду в Run-time для последующей компиляции и выполнения, если это недостижимо другими способами. Не припомню случая (хотя возможно, и были такие), когда бы я использовал макро для уменьшения количества знаков в коде. В этих случаях пользуются #DEFINE. Ведь макро обычно замедляет работу.
Сравнение макроподстановки с другими способами достижения "динамики" обычно, да и в этой теме, проводится по критерию скорости выполнения кода. "Настоящее" макро "тормозит" из-за того, что команда должна быть предварительно откомпилирована. И поэтому я вполне корректно сравниваю ее с вариантом с EVAL(), который обычно выполняется быстрее (ведь такая команда уже откомпилирована). Обычно, но не в указанных мною выше случаях. Сравнивать с "прямой командой", конечно, тоже можно, но неинтересно, так как здесь и так всё понятно. Но вы не всегда можете заменить макро "прямой командой", а в этих случаях тоже можно выбрать более быстрый вариант, то есть сравнить макро с другими способами достижения цели. И если вы ещё раз вернётесь к написанному мною выше: то согласитесь, что я ничего не писал о том, с каким способом я сравнивал макро. Напишите аналог с использованием "прямой команды", получите более быстрый результат - я скажу "Спасибо большое!" и далее буду пользоваться вашим способом вместо макро.
"Фрагменты" тут ни при чём. И если бы здесь не было "цикла", то не только ваш "вывод", но и само заключение о скорости выполнения этих вариантов было бы ошибочным. Макро работает здесь быстрее по той причине, что сначала команда один раз компилируется (это потери времени), но затем миллионы раз исполняется как "прямая команда". При выполнении команды с EVAL() время на компиляцию не тратится, но затем миллионы раз отрабатывает EVAL(), а это дольше, чем получение значения поля "напрямую". Да, если речь идет о разовом исполнении команды, так как временнЫе потери на компиляцию не успевают компенсироваться более быстрым выполнением "прямой команды", получившейся после макроподстановки. Но если речь идет о цикле, то макроподстановка может сработать быстрее, так как многократное исполнение "прямой команды" способно компенсировать время, потраченное на её компиляцию.
Если два заказчика предлагают вам договор на одно и то же задание - один за $1000, а другой - за $1005, и вы можете заключить его лишь с одним из них, то вы выберете первого, я правильно понимаю? Исправлено 10 раз(а). Последнее : akvvohinc, 08.10.21 02:12 |
Re: нужно объяснение | |
---|---|
danton1973 Сообщений: 143 Откуда: Пермь Дата регистрации: 10.08.2020 |
Я в этом случае использую SET FILTER TO + SCAN. Причём SET FILTER тоже можно собрать через _vfp.DoCMD. По моим замерам работает быстрее, чем SCAN FOR с макроподстановками.... |
Re: нужно объяснение | |
---|---|
Владимир Максимов Сообщений: 14100 Откуда: Москва Дата регистрации: 02.09.2000 |
akvvohinc
Это забавно, когда сам себе придумываешь неправильные ответ, а потом героически бросаешься его опровергать. Вы вообще заметили, что начали отвечать на одно, а потом оказалось, что речь о другом?
А вот это правильный вопрос. Только на практике, это означает, что в данном случае цена перестает быть критерием выбора. И в этом случае при принятии решения начинают учитывать другие критерии. Ну, там, надежность заказчика в плане оплаты, вменяемые сроки реакции при уточнении постановки, знакомства и т.д. и т.п. Я правильно понимаю, что Вы в этой ситуации выберите второго не глядя на все остальные условия? ;) Честно не понимаю, что Вы так уперлись в скорость работы макро? Ситуации, когда это критически важно скорее исключение. И говорит прежде всего о том, что само приложение как-то не правильно организовано. Приходится "костыль" ставить. |
Re: нужно объяснение | |
---|---|
akvvohinc Автор Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Цитата: Нет, не заметил. Цитата: Условия этой задачи определяю я, а поэтому сообщаю дополнительно - все остальные условия равны.
На мой взгляд, это бессмысленно - и суть, и результат должны быть одинаковыми. Но если вы готовы доказать, что фильтр, установленный до команды SCAN, и тот же фильтр, установленный в самой команде, работают с разной скоростью (я этого никогда не проверял, считая невозможным), то пожалуйста - пример в студию. И вообще непонятно, зачем явно устанавливать, а затем явно снимать фильтр, если можно этого не делать. Если только ради того, чтобы не использовать макро, то вы ошибаетесь - _vfp.DoCMD - это то же макро, ничем не отличающееся от обычной макроподстановки - команда компилируется "на лету". Исправлено 4 раз(а). Последнее : akvvohinc, 08.10.21 13:37 |
Re: нужно объяснение | |
---|---|
akvvohinc Автор Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Я тоже не понимаю, в каком месте этого топика я во что-то упёрся. Мне казалось, что я просто сообщил некоторые факты о работе макро с примерами, которые, возможно, будут кому-то интересны. А когда вы голословно попытались их опровергнуть ("Это невозможно."), предложил вам сделать это не на словах. Вместо этого вы спрашиваете, зачем я привел пример, касающийся скорости работы макро. |
Re: нужно объяснение | |
---|---|
Владимир Максимов Сообщений: 14100 Откуда: Москва Дата регистрации: 02.09.2000 |
А Вы о чем?
"Сферический конь в вакууме"? Ново... Свежо... Оригинально... |
Re: нужно объяснение | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
> Вот только не надо сразу возражать, мол "мне все понятно". В том-то и дело. Здесь ключевое слово "мне". Причем, еще стоит добавить "сейчас". В смысле, пока ты именно этой задачей занимаешься. Спустя пару месяцев, если переключился на другую задачу, сам же будешь смотреть на этот макро как баран на новые ворота
Владимир, я это и имел ввиду, что парадигма "макро" непростая (как при чтении книги - апостроф вверху заставляет нас сделать в уме подстановку лирического отступления автора в этой точке текста. Это не каждый способен сделать, тем более в уме ), но и не сложная. Но люди заворачивают более тонкие (...как они их сейчас называют... "сахарок" что-ли?) и более сложные синтаксические конструкции в своем си, например... Поэтому, аппелировать к тому, что "сам же не поймешь потом" - это не повод этим не заниматься. Да, все сложно стало. Даже налево не повернешь без "если", и "как бы не", и "надо знать ПДД"... Да, надо знать и в уме подставлять после амперсанда тексты... вроде уже можно говорить, что это ПРОСТО... ) |
Re: нужно объяснение | |
---|---|
akvvohinc Автор Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Вам уже двое ответили на этот вопрос - достаточно было просто прочитать. Если этого мало, то сами привлеките "независимых экспертов".
Теперь понимаю, о чем вы. Ведь со времени этих ответов и двух недель не прошло. Исправлено 1 раз(а). Последнее : akvvohinc, 20.10.21 17:06 |
© 2000-2024 Fox Club  |