Уменьшение размера исполняемого файла

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Уменьшение размера исполняемого файла

Сообщение Mikhail » 23.10.2015 15:39:35

Лекс Айрин писал(а):Да нет, как раз таки, все методы известны. Иначе их бы нельзя было откомпилировать.

Вы что, издеваетесь? :evil:
Например
Код: Выделить всё
procedure DrawFigure(const s: string);
begin
case S of
  'point': DrawPoint;
  'line':   DrawLine;
  'rect':  DrawRect;
  'circle': DrawCircle;
else
  RunError();
end;
end;


А теперь расскажите мне как тут компилятор или линкер должен мертвый код выбрасывать. :)

Лекс Айрин писал(а):Угу... поколения программировавшие на/для ЕС ЭВМ|System/360 дружно кричат: "Да ты гонишь!" и показывают пальцы. Тогда была чистая итерактивность, мультизадачность, и многопользовательность...

Такое ощущение что Вы не понимаете о чем пишете... :?
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Re: Уменьшение размера исполняемого файла

Сообщение vitaly_l » 23.10.2015 15:49:59

Mikhail писал(а):А теперь расскажите мне как тут компилятор или линкер должен мертвый код выбрасывать. Такое ощущение что Вы не понимаете о чем пишете...

В программе - нет никаких имён. там только адреса. А имена, программе, нужны только в крайних случаях, когда нужна идентификация по имени (например для dll ). А без этого всё под адресами. Адреса скармливаются процессору, там нет имён, там нет string. там "ноли" и "единички", которые обрабатываются процессором.
Последний раз редактировалось vitaly_l 23.10.2015 16:06:32, всего редактировалось 3 раз(а).
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Уменьшение размера исполняемого файла

Сообщение Лекс Айрин » 23.10.2015 15:53:38

Mikhail, Вот если у Вас в проге, даже теоретически, не может быть вызван один из четырех методов, то его можно безболезненно вырезать.
Кстати, у вас логическая ошибка при проектировании программы. Процедура/метод RunError тут абсолютно лишняя. При правильно спроектированной программе это как раз и есть недостижимый код, который программист должен убрать. То есть, либо ветки else нет, либо она пустая.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Уменьшение размера исполняемого файла

Сообщение скалогрыз » 23.10.2015 16:06:42

Лекс Айрин писал(а):Mikhail, Вот если у Вас в проге, даже теоретически, не может быть вызван один из четырех методов, то его можно безболезненно вырезать. Кстати, у вас логическая ошибка при проектировании программы. Процедура/метод RunError тут абсолютно лишняя. При правильно спроектированной программе это как раз и есть недостижимый код, который программист должен убрать. То есть, либо ветки else нет, либо она пустая.

а если "s" читается из произвольного файла (например инструкции к шейдерам) и на момент компиляции программы не известно какие значения будут в файле?
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Уменьшение размера исполняемого файла

Сообщение vitaly_l » 23.10.2015 16:07:45

скалогрыз писал(а):а если "s" читается из произвольного файла и на момент компиляции программы не известно какие значения будут в файле?

Это исключение и его нужно описать заранее, вот только в примере речь о string а string - не удаляется, т.к. не является названием функции или класса.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Уменьшение размера исполняемого файла

Сообщение Mikhail » 23.10.2015 16:12:23

Лекс Айрин писал(а):Mikhail, Вот если у Вас в проге, даже теоретически, не может быть вызван один из четырех методов, то его можно безболезненно вырезать.
Кстати, у вас логическая ошибка при проектировании программы. Процедура/метод RunError тут абсолютно лишняя. При правильно спроектированной программе это как раз и есть недостижимый код, который программист должен убрать. То есть, либо ветки else нет, либо она пустая.

Вам уже ниже отметили, что данные могут читаться из некоторого произвольного источника данных, например, загрузка формы в VCL и LCL именно так реализована.
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Re: Уменьшение размера исполняемого файла

Сообщение vitaly_l » 23.10.2015 16:12:52

Оптимизацию можно описать вот так:
Код: Выделить всё
procedure адрес0(const s: string);
begin
case S of
  'point': адрес1;
  'line':   адрес2;
  'rect':   адрес3;
  'circle': адрес4;
else goto MyLovelyGoto;
end;

MyLovelyGoto:
end;
Последний раз редактировалось vitaly_l 23.10.2015 16:15:46, всего редактировалось 1 раз.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Уменьшение размера исполняемого файла

Сообщение скалогрыз » 23.10.2015 16:13:54

vitaly_l писал(а):Это исключение и его нужно описать заранее, вот только в примере речь о string а string - не удаляется, т.к. не является названием функции или класса

я старался, но не понял что ты имеешь ввиду.
НО рекомендую почитать как работает язык Objective-C. К паскалю он имеет отношение, потому что FPC умеет так называемый Objective Pascal.
К этой теме, Objective-C имеет отношение в том, что всякий метод, имеет своё имя (string), и очень часто имя приходится переводить в некий бинарный вид, чтобы вызвать конкретный код.
Но почему-то программисты на Objective-C (читай разработчики под iOS) никогда не жалуются на размеры бинариков (имён методов в бинарике и необходимость обфускации)

Добавлено спустя 1 минуту 22 секунды:
vitaly_l писал(а):Оптимизацию можно описать вот так:

:mrgreen: :mrgreen: :mrgreen:
вездесущий гото уменьшит размер бинарика
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Уменьшение размера исполняемого файла

Сообщение Лекс Айрин » 23.10.2015 16:20:48

скалогрыз писал(а):а если "s" читается из произвольного файла (например инструкции к шейдерам) и на момент компиляции программы не известно какие значения будут в файле?


И чо? Я же сказал о теоретической достижимости. Тогда будут достижимы все.

Если вы не знаете какое значение, то у вас нет возможности вызвать нужный обработчик --> ничего не будет происходить и программа не сможет нормально отрисовать данную фигуру. В этом случае программа напишет что-то типа "ошибка чтения файла". В моем просто проигнорит и нарисует все возможное.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Уменьшение размера исполняемого файла

Сообщение скалогрыз » 23.10.2015 16:25:21

Лекс Айрин писал(а):И чо? Я же сказал о теоретической достижимости. Тогда будут достижимы все.

об этом Mikhail и говорит, что выкинуть всё нельзя, т.к. очень часто "теоритическая достижимость" 100%.
Например код менеджера потоков даже для однопоточного приложения не выкидывается из RTL-а, а потому что теоритически используется (один же поток всё же есть! :) хотя тут немного подругому... )

...Ну и логической ошибки в программе тоже нет, т.к. согласно тех заданию, программа должна доложить об ошибке, а не выводить недокартину.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Уменьшение размера исполняемого файла

Сообщение vitaly_l » 23.10.2015 16:31:25

скалогрыз писал(а):вездесущий гото уменьшит размер бинарика... программа должна доложить об ошибке, а не выводить недокартину.

Конечно уменьшит потому, что правильно было написать вот так и об ошибке программа тоже неправильно сообщает, надо вот так:
Код: Выделить всё
procedure адрес0 (const s: string);
begin
case S of
  'point': goto адрес1;
  'line':   goto адрес2;
  'rect':   goto адрес3;
  'circle': goto адрес4;
  else goto MyLovelyGoto;
end;
RunError(); // и если это запустится то это будет ошибкой
MyLovelyGoto:
end;


Добавлено спустя 2 минуты 22 секунды:
В смысле в программе нет никаких имён, там только адреса.



.
Последний раз редактировалось vitaly_l 23.10.2015 16:34:46, всего редактировалось 1 раз.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Уменьшение размера исполняемого файла

Сообщение скалогрыз » 23.10.2015 16:34:27

vitaly_l писал(а):Конечно уменьшит потому, что правильно было написать вот так и об ошибке программа тоже неправильно сообщает, надо вот так:

аминь
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Уменьшение размера исполняемого файла

Сообщение Лекс Айрин » 23.10.2015 16:35:57

vitaly_l, выход из процедуры по гото это первейший способ словить исключение общей защиты.

Mikhail писал(а):например, загрузка формы в VCL и LCL именно так реализована.


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

Добавлено спустя 5 минут 34 секунды:
скалогрыз писал(а):...Ну и логической ошибки в программе тоже нет, т.к. согласно тех заданию, программа должна доложить об ошибке, а не выводить недокартину.


о логической ошибке я и не говорю. Соглашусь, если уж так необходимо сообщить об ошибке, то да, но я бы все равно не использовал бы вызов процедуры. Установил бы флаг обработки и пусть обрабатывает процедура вызвавшая некорректную функцию.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Уменьшение размера исполняемого файла

Сообщение vitaly_l » 23.10.2015 16:52:07

Лекс Айрин писал(а): выход из процедуры по гото это первейший способ словить исключение общей защиты.

Я описал принцип, т.к. GoTo - очень хорошо позволяет доказать что в РАБОТЕ программы нет никаких имён! Но они там хранятся для различных РЕДКО ИСПОЛЬЗУЕМЫХ НУЖД, так вот если удалить эти ненужные программе имена, то она будет весить на примерно 33% меньше.
Что 100% доказывает нашу с Вами правду! Скалогрыз по этому поводу, даже молитву спел, системы: "аминь"...
Остальное можно не доказывать, т.к. против GoTo (или asm прыжков) не поспоришь...
Я отвечал на вопрос Mikhail и привёл 100% доказательство.

PS: по поводу кода RunError(); все по своему правы.
Но только у Mikhail - это скорее должно называться не ошибка(RunError), а исключение(RunExclusion)...

.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Уменьшение размера исполняемого файла

Сообщение Лекс Айрин » 23.10.2015 16:56:21

vitaly_l, аминь еще используется в виде предложения реализовать данный подход.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Пред.След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Tango и гости: 1

Рейтинг@Mail.ru