Как прочесть код программы

Речь пойдёт не о промежуточном коде IL, а об инструкциях процессора, сформированных JIT-компилятором.

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

Если говорить об управляемом коде, например, коде C#, то есть целых три (!) стадии, где нужно проверять код при его оптимизации:

  1. исходный управляемый код (C#, VB.NET и т.п.);
  2. код CIL, сформированный при компиляции исходного кода (как эту стадию использовать, я показывал ранее);
  3. код ассемблера, сформированный JIT-компилятором из кода CIL при выполнении программы.

Сначала в VS создадим новый проект, например, консольное приложение на языке C#.

В файле Program.cs я напишу такой код:

namespace DasmInt
class Program
static void Main(string[] args)
int a = 4;
int b = 8;

Как научиться читать любой код за 30 минут


int r;
r = a + b;
Console.WriteLine(«a + b = » + r);
Console.ReadLine();
>
>
>

Код просто объявляет три целочисленные переменные и затем складывает значения двух из них и записывает результат в третью. После этого код выводит в консоль результат сложения и ждёт реакции пользователя.

Теперь надо включить дизассемблирование. Для этого в меню выбираем команду Debug/Options или Tools/Options. В открывшемся окне настроек надо перейти в раздел Debugging/General. Затем нужно включить опцию Enable address-level debugging.

Теперь я поставлю точку прерывания (breakpoint) на объявлении первой переменной и запущу код на исполнение под отладчиком.

В момент объявления и инициализации переменной выполнение прервётся.

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

Чтобы увидеть дизассемблированный код, нужно в меню Debug/Windows выбрать пункт Disassembly. Откроется окно с дизассемблированным кодом.

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

Кроме того, в дизассемблированном коде указана точка прерывания, т.е. строка кода, на котором было приостановлено выполнение программы. Вы можете в процессе отладки проверить выполнение кода ассемблера. Причём справа будет указываться, сколько времени затрачено на выполнение кода с момента прерывания.

КАК ЧИТАТЬ ИСХОДНЫЕ КОДЫ | СОВЕТЫ ОТ СОЕРА

Остаётся только напомнить, что код, который выполняется под отладчиком в VS, и код, который формируется JIT-компилятором при выполнении релизной версии, могут иметь существенные различия.

Источник: m-i-kuznetsov.livejournal.com

Читаемый код или программирование как искусство. Д. Бозвел, Т. Фаучер

Сейчас я читаю книгу «Читаемый код или программирование как искусство». В ней куча годных мыслей и примеров, которыми хочется поделиться. Но в одну заметку всё не уместится, поэтому я решил пересказывать книгу по несколько глав за раз. В этой заметке 1–4 главы.

Глава 1: код должен быть простым для понимания

  • Компактный код лучше громоздкого;
  • Но читаемый код всегда лучше компактного.

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

Короче — не всегда лучше для понимания:

Читайте также:
Filezilla не найдена ассоциированная программа

// такую строку сложнее понять assert((!(bucket = FindBucket(key))) || !bucket->IsOccupied()); // чем эти две bucket = FindBucket(key); if (bucket != NULL) assert(!bucket->IsOccupied());

Поэтому стремиться к компактности хорошо, но стремиться к высокой читаемости лучше.

Глава 2: подбирайте точные имена для переменных, функций и классов

  • Подбирайте точные слова;
  • Избегайте общих и абстрактных понятий;
  • Уточняйте смысл с помощью суффиксов и префиксов;
  • Не придумывайте слишком длинное название.

Например, в функции GetPage слово get неточное. Оно не объясняет, берётся ли страница из кэша или из сети. Названия FetchPage или DownloadPage лучше объяснят, что происходит.

В примере ниже из тела функции и так понятно, что retval — возвращаемое значение.

var euclidean_norm = function (v) < var retval = 0.0; for (var i = 0; i < v.length; i += 1) retval += v[i] * v[i] >return Math.sqrt(retval); >

Однако неясно, что оно в себе содержит, из-за этого просто пропустить ошибку:

retval += v[i]; // Можно забыть, что внутри, и пропустить ошибку sum_squares += v[i]; // «Сумма квадратов? Но здесь нет квадратов — здесь ошибка»

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

Префиксы и суффиксы уточняют смысл. Например, измеряем скорость загрузки веб-страницы:

var start = (new Date()).getTime(); var elapsed = (new Date()).getTime() — start; document.write(«Загрузилось за: » + elapsed + » секунд»);

Если вы знакомы с JS, то заметили ошибку — getTime возвращает результат в миллисекундах. Поэтому код работает неправильно. Если добавить суффикс _ms , то ошибку будет заметно:

var start_ms = (new Date()).getTime(); var elapsed_ms = (new Date()).getTime() — start_ms; document.write(«Загрузилось за: » + elapsed_ms + » секунд»); // «Тут не секунды, а миллисекунды, надо поделить на 1000»

Длина имени зависит от размера области видимости. Если переменная лежит внутри функции из 3 строк, то короткое имя ей подойдёт. Но чем больше область видимости, тем точнее должно быть имя. Например, days_since_last_update будет лучше, чем просто days .

Сокращения в именах вызывают вопросы. Для расшифровки сокращения может не хватать знаний. Кроме того сокращение проще всего истолковать неправильно. Поэтому BEManager — плохое имя, BackEndManager — лучше.

Если слово не дополняет смысл названия, его лучше выбросить. Например, convert_to_string можно заменить на to_string .

Правило для выбора имени: «Если новый член команды не может понять смысла функции или переменной по её названию, это плохое имя».

Глава 3: избегайте двусмысленных названий

  • Название должно отражать суть;
  • Используйте префиксы и суффиксы, чтобы добавить смысла;
  • Убирайте неважное.

Тестируйте названия на неверные интерпретации. Спросите себя, что ещё может подразумеваться под этим именем. Например, функция filter непонятная: она выбирает или значения, которые подходят под условие, или наоборот. А вот названия select или exclude сразу говорят, какие результаты мы получим.

results = Database.all_objects.filter(«year 2011?

Чтобы точно определить предел диапазона, используйте префиксы max или min . Для включительных диапазонов можно использовать префиксы first и last .

CART_TOO_BIG_LIMIT = 10 if shopping_cart.num_items() >= CART_TOO_BIG_LIMIT: Error(«Too many items in cart.») // а сколько можно: 10 или 9? MAX_ITEMS_IN_CART = 10 if shopping_cart.num_items() > MAX_ITEMS_IN_CART: Error(«Too many items in cart.») // всё ясно, больше 10 нельзя

Для булевых переменных используйте префиксы is , has , can , should Актуально и для функций, которые возвращают булево значение.

Глава 4: красивый код быстрее считывается

  • Используйте последовательный стиль, чтобы читатель привык к нему;
  • Пишите схожий код схожим образом;
  • Объединяйте связанные по смыслу куски кода в блоки.

Избавляйтесь от непоследовательности. Используйте вспомогательные функции. Например, функция и тест для неё:

string ExpandFullName(DatabaseConnection dc, string partial_name, string* error); DatabaseConnection database_connection; string error; assert(ExpandFullName(database_connection, «Doug Adams», Mr. Douglas Adams»); assert(error == «»); assert(ExpandFullName(database_connection, » Jake Brown «, Mr. Jacob Brown III»); assert(error == «»); assert(ExpandFullName(database_connection, «No Such Guy», «); assert(error == «no match found»); assert(ExpandFullName(database_connection, «John», «); assert(error == «more than one result»);

Читайте также:
Сетевым протоколом является набор правил программа инструкция набор программ

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

CheckFullName(«Doug Adams», «Mr. Douglas Adams», «»); CheckFullName(» Jake Brown «, «Mr. Jake Brown III», «»); CheckFullName(«No Such Guy», «», «no match found»); CheckFullName(«John», «», «more than one result»); void CheckFullName(string partial_name, string expected_full_name, string expected_error)

При объявлении переменных, разбивайте их на смысловые блоки:

// мешанина: class FrontendServer < public: FrontendServer(); void ViewProfile(HttpRequest* request); void OpenDatabase(string location, string user); void SaveProfile(HttpRequest* request); string ExtractQueryParam(HttpRequest* request, string param); void ReplyOK(HttpRequest* request, string html); void ReplyNotFound(HttpRequest* request, string error); void CloseDatabase(string location); ~FrontendServer(); >; // по блокам: class FrontendServer < public: FrontendServer(); ~FrontendServer(); // Handlers void ViewProfile(HttpRequest* request); void SaveProfile(HttpRequest* request); // Request/Reply Utilities string ExtractQueryParam(HttpRequest* request, string param); void ReplyOK(HttpRequest* request, string html); void ReplyNotFound(HttpRequest* request, string error); // Database Helpers void OpenDatabase(string location, string user); void CloseDatabase(string location); >;

Сам код тоже можно разбивать на «параграфы». Если функция состоит из нескольких шагов, выделите эти шаги в коде пустыми строками между ними.

Что дальше?

На следующей неделе поговорим о главах 5–7. Расскажу, как:

  • Писать или не писать комментарии;
  • Оформлять условия;
  • Проверять циклы на читаемость.

Если понравился пост

  • Подписаться на RSS
  • Твитнуть
  • Фейсбукнуть
  • Звездануть
  • Поддержать
  • Книги
  • Паттерны проектирования

Источник: bespoyasov.ru

Как читать исходный код вашего сайта и почему это так важно для SEO Часть 1.

Как читать исходный код вашего сайта и почему это так важно для SEO.

Как читать исходный код вашего сайта и почему это так важно для SEO.

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

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

Google и другие поисковые системы «читают» этот код, чтобы определить, где ваши веб-страницы должны появиться в их индексах для данного поискового запроса.

Следовательно, очень большое значение для поисковой оптимизации ( SEO ) имеет то, что находится в исходном коде.

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

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

Как читать исходный код вашего сайта и почему это так важно для SEO.

Как просмотреть исходный код.

Первый шаг в проверке исходного кода вашего сайта, это посмотреть реальный исходный код. Любой веб-браузер позволяет сделать это легко.

Ниже перечислены клавиатурные команды для просмотра исходного кода вашей веб-страницы для PC и Mac.

PC

  • Firefox — CTRL + U ( Удерживая нажатой клавишу CTRL, нажмите клавишу»U» ) Кроме того, вы можете пойти в меню «Firefox», затем нажмите » Web Developer «, а затем» Исходный код страницы «.
  • Internet Explorer — CTRL + U. Или щелкните правой кнопкой мыши и выберите пункт «View Source».
  • Хром — CTRL + U. Вы можете нажать на изображение ключа с тремя горизонтальными линиями в правом верхнем углу. Затем нажмите на «Инструменты» и выберите «View Source».
  • Опера — CTRL + U. Вы также можете щелкнуть правой кнопкой на веб-странице и выбрать «Просмотр исходного кода страницы.»

Макинтош

  • Safari — сочетание клавиш Option + Command + U. Вы также можете щелкнуть правой кнопкой на веб-странице и выберите «Показать Page Source».
  • Firefox — Вы можете щелкнуть правой кнопкой и выберите пункт «исходный текст» или вы можете перемещаться в меню «Сервис», выберите «Web Developer», и нажмите «Page Source.» Сочетание клавиш Ctrl + U.
  • Хром — Перейдите в «Вид», затем нажмите «разработчик», а затем «View Source». Вы также можете щелкнуть правой кнопкой и выберать пункт «Просмотр исходного кода страницы.» Сочетание клавиш Option + Command + U.
Читайте также:
Самые эффективные программы для изучения английского языка

После того, как вы знаете, как просмотреть исходный код, вы должны знать, как осуществить поиск в нем.

Как правило, одни и те же функции поиска, которые вы используете при нормальном просмотре веб-страниц, применяются и к поиску в исходном коде.

Команды, CTRL + F ( найти) поможет Вам быстро просмотреть исходный код важных элементов SEO.

Теги заголовков.

Тег заголовка является самым главным элементом SEO. Это самое главное в исходном коде.

Если вы собираетесь взять одну лишь ценную вещь из этой статьи, обратите внимание на это:

Вы знаете, эти результаты Google предоставляет, когда вы ищете что-то.

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

Как читать исходный код вашего сайта и почему это так важно для SEO.

Верите или нет, я на самом деле видел веб-сайты без тегов заголовков. Давайте попробуем сделать быстрый поиск в Google для термина «Marketing Guides«. Что мы видим:

Вы можете видеть, первый результат поиска для блога KISSmetrics раздел Marketing Guides.

Как читать исходный код вашего сайта и почему это так важно для SEO.

Если мы перейдем по ссылке первого результата поиска и просмотрим исходный код страницы, то можно увидеть в заголовке тег:

Тег заголовка обозначается открывающим тегом: . и заканчивается закрывающим тегом: title>. Тег заголовка, расположен как правило, в верхней части исходного кода в разделе .

Но не только теги заголовков необходимы для того чтобы быть включенными в результаты поиска Google.

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

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

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

Вот некоторые важные пункты, которые позволят вам помнить о важности ваших Тег заголовков:

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

Meta Descriptions (описания).

Следующий важный элемент головной части вашей веб-страницы является мета-тег описания.

Это фрагмент вашего контента из 160 символов, который отображается под вашим заголовком в поисковых системах.

Meta Descriptions (описания).

Я видел сотни сайтов, которые полностью игнорируют этот тег. Его очень легко найти в исходном коде:

how-read

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

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

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

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

Источник: infobiz-tools.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru