Сгенерированный код должен быть человекочитаемым?

Я работаю в Android Studio и столкнулся с этой ошибкой при попытке создать подписанный APK для выпуска. Мне удалось создать и протестировать отладочную APK без проблем, но как только я захочу создать APK выпуска, процесс сборки будет работать в течение нескольких минут подряд, а затем окончательно завершится с помощью «Ошибка java.lang.OutOfMemoryError: GC превышение верхнего предела ". Я увеличил размеры кучи как для VM, так и для компилятора Android DEX, но проблема не устранена. Наконец, после многих часов и кружек кофе выяснилось, что проблема была в моем файле buildGradle на уровне приложения. У меня был параметр minifyEnabled для типа сборки релиза, установленного на «ложь», и, следовательно, работа с продуктами Proguard по коду, который не прошел через процесс сжатия кода (см. https://developer.android.com/studio/build/shrink-code.html ). Я изменил параметр «minifyEnabled» на «true», а сборка релиза была выполнена как сон:)

. Короче, мне пришлось изменить файл «build.gradle» на уровне приложения из: //. ..

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.sign_config_release
    }
    debug {
        debuggable true
        signingConfig signingConfigs.sign_config_debug
    }
}

//...

-

    //...

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.sign_config_release
    }
    debug {
        debuggable true
        signingConfig signingConfigs.sign_config_debug
    }
}

//...

6
задан Richard Chambers 16 July 2016 в 17:07
поделиться

22 ответа

Я думаю, что для сгенерированного кода столь же важно быть читаемым и следовать за нормальными стилями кодирования. В какой-то момент кто-то или испытывает необходимость, чтобы отладить код или иначе видеть то, что происходит "негласно".

17
ответ дан 8 December 2019 в 02:37
поделиться

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

0
ответ дан 8 December 2019 в 02:37
поделиться

Я думаю, что ответ: это зависит.

*Это зависит от того, необходимо ли настроить и сохранить сгенерированный код как артефакт. Например, люди очень редко сохраняют или настраивают вывод объектного кода от компилятора C, потому что они знают, что могут воспроизвести его из источника каждый раз. Я думаю, что здесь может быть подобная аналогия. *Это зависит от того, необходимо ли сертифицировать код к некоторому стандарту, например, Misra-C или DO178. *Это зависит от того, будет ли источник сгенерирован через Ваш инструмент каждый раз, когда код компилируется, или если это будет Вы быть сохраненным для включения в сборку в более позднее время.

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

0
ответ дан 8 December 2019 в 02:37
поделиться

Сгенерированный код является кодом, и нет никакой причины, любой код не должен быть читаемым и приятно отформатирован. Это дешево особенно в сгенерированном коде: Вы не должны применять форматирование себя, генератор делает это для Вас каждый раз!:)

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

0
ответ дан 8 December 2019 в 02:37
поделиться

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

0
ответ дан 8 December 2019 в 02:37
поделиться

Как фактически все другие здесь, я говорю, делают это читаемым. Это не стоит ничего дополнительного в Вашем процессе поколения, и Вы (или Ваш преемник) будете ценить его, когда они пойдут, роя.

Для примера реального мира - смотрят на что-либо, что Visual Studio генерирует. Хорошо отформатированный, с комментариями и всем.

0
ответ дан 8 December 2019 в 02:37
поделиться

Если этот код, вероятно, будет отлажен, то необходимо серьезно рассмотреть для генерации его в человекочитаемом формате.

0
ответ дан 8 December 2019 в 02:37
поделиться

Существуют различные типы сгенерированного кода, но самые простые типы были бы:

  1. Сгенерированный код, который не предназначен, чтобы быть замеченным разработчиком. например, код xml-выхода, который определяет разметки (думают .frm файлы или ужасные файлы, сгенерированные SSIS),
  2. Сгенерированный код, который предназначен, чтобы быть основанием для класса, который будет позже настроен Вашим разработчиком, например, код, сгенерирован для сокращения скуки ввода

При создании последнего Вы определенно хотите, чтобы Ваш код был человекочитаем.

Классы и интерфейсы, неважно, как "от пределов" разработчикам Вы думаете, что они должны быть, почти наверняка подпали бы под сгенерированный тип номер 2 кода. Они будут поражены отладчиком однажды другого - применение форматирования кода является наименьшим, можно сделать простоту, что процесс отладки, когда компилятор поражает те сгенерированные классы

0
ответ дан 8 December 2019 в 02:37
поделиться

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

Я не провел бы слишком много времени с кодом, который никогда не будет читаться, но если бы это не слишком много времени, я прошел бы сгенерированный код. В противном случае, по крайней мере, сделайте комментарий для возмещения ущерба удобочитаемости.

0
ответ дан 8 December 2019 в 02:37
поделиться

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

0
ответ дан 8 December 2019 в 02:37
поделиться

Я думаю для контейнеров данных или объектов с очень простыми работами, человеческая удобочитаемость не очень важна.

Однако, как только разработчику, вероятно, придется прочитать код, чтобы понять, как что-то происходит, это должно быть читаемо. Что, если логика имеет ошибку? Как кто-либо будет когда-либо обнаруживать его, если никто не сможет прочитать и понять код? Я пошел бы, генерировав комментарии для более сложных логических разделов, для выражения намерения, таким образом, легче определить, существует ли действительно ошибка.

0
ответ дан 8 December 2019 в 02:37
поделиться

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

0
ответ дан 8 December 2019 в 02:37
поделиться

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

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

0
ответ дан 8 December 2019 в 02:37
поделиться

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

Нет абсолютно никакой причины НЕ сделать это человеческим parseable, итак, почему в мире Вы хотели бы сделать так?

- Adam

1
ответ дан 8 December 2019 в 02:37
поделиться

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

Я находил полезным много раз перепроверить diffs в сгенерированном коде по сравнению с исходным кодом.

Тем путем Вы могли даже иногда находить ошибки в инструментах, которые генерируют код.

1
ответ дан 8 December 2019 в 02:37
поделиться

Ищите активную генерацию кода по сравнению с пассивной генерацией кода. Относительно пассивной генерации кода, абсолютно да, всегда. Относительно активной генерации кода, когда код достигает цели того, чтобы быть прозрачным, который действует точно как зарегистрированный API, затем нет.

2
ответ дан 8 December 2019 в 02:37
поделиться

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

1
ответ дан 8 December 2019 в 02:37
поделиться

Смысл сгенерированного кода должен сделать что-то "сложное", которое является легче определенный на некотором высокоуровневом языке. Из-за него сгенерированный, фактическое обслуживание этого сгенерированного кода должно быть в подпрограмме, которая генерирует код, не сгенерированный код.

Для этого человеческая удобочитаемость должна иметь более низкий приоритет; вещи как скорость во время выполнения или функциональность намного более важны. Это особенно имеет место при рассмотрении инструментов как бизон и гибкий провод которые используют сгенерированный код, чтобы предварительно генерировать быстрые справочные таблицы, чтобы сделать сопоставление с образцом, которое просто было бы безумно для ручного поддержания.

1
ответ дан 8 December 2019 в 02:37
поделиться

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

2
ответ дан 8 December 2019 в 02:37
поделиться

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

0
ответ дан 8 December 2019 в 02:37
поделиться

Да!, абсолютно!; я могу даже добавить историю для Вас для объяснения, почему важно, чтобы человек мог легко прочитать автоматический сгенерированный код...

Я когда-то получил возможность работать над новым проектом. Теперь, одна из первых вещей, которые необходимо сделать при запуске написания кода, состоит в том, чтобы создать своего рода соединение и представление данных к и от базы данных. Но вместо того, чтобы просто писать этот код вручную, у нас был кто-то, кто разработал его собственный генератор кода для автоматического создания базовых классов из схемы базы данных. Это было действительно аккуратно, утомительное задание написания всего этого кода было теперь вне наших рук... Единственная проблема была, сгенерированный код был совсем не читаем для нормального человека.

Конечно, мы не сделали об этом, потому что эй, это просто сохранило нас большая работа. Но через некоторое время вещи начали идти не так, как надо, данные были неправильно считаны с ввода данных пользователем (или таким образом, мы думали), повреждения произошли в базе данных в то время как мы где только чтение.Странно.. потому что чтение не изменяет данных (снова, таким образом, мы думали)...

Как любой хороший разработчик мы начали подвергать сомнению наш собственный код, но после дней поиска.. даже переписывая код, мы ничего не могли найти..., и затем он рассветал на нас, автоматический сгенерированный код был взломан!

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

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

Вот ссылка, которую я просто нашел о теме под рукой; я на самом деле искал ссылку на одну из глав от "прагматически настроенного программиста" книга для указания, почему мы смотрели в нашем коде сначала.

7
ответ дан 8 December 2019 в 02:37
поделиться

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

На самом деле создание сгенерированного "нечитабельного" кода может быть преимуществом, потому что это отговорит людей "взламывать" сгенерированный код и скорее реализует их изменения в генераторе кода вместо этого — который очень полезен каждый раз, когда необходимо повторно создать код по любой причине и не потерять изменения коллега сделал, потому что он думал, что сгенерированный код был "закончен".

3
ответ дан 8 December 2019 в 02:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: