Pull to refresh
31
0
Send message

Точки выхода или немного о структурном программировании

Reading time3 min
Views16K
Читая Хабрахабр или просматривая чужие исходные коды, мне довольно часто приходится замечать примерно следующий кусок кода, который совершенно одинаково «звучит» на любом языке, на каком бы не был написан:
function(single_document)
{  
  if (single_document.getElementById("comments") != null)
    return;
    …
    …
    …
    …
}
* This source code was highlighted with Source Code Highlighter.

Здесь приведён кусочек кода на Javascript, но то же самое можно написать на нескольких десятках других языков. Что здесь не так? Только то, что у функции (метода, свойства, процедуры) несколько точек выхода. Если вам интересно почему это плохо, прочитай то что написано под катом.
Читать дальше →

Совершенный код

Reading time4 min
Views19K
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.
Damian Conway, co-designer of Perl 6

Хороший программный код определяется как минимум тремя признаками: однозначность, эффективность и сопровождаемость.

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

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

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

Как влияет кеш на многопоточные приложения

Reading time6 min
Views5.8K
Теоретическая составляющая.

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

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

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

У меня возник вопрос насколько все может быть плохо. Кроме того, интересно было посмотреть как влияет длина данных.
Читать дальше →

Позвольте представить — Записки программиста

Reading time1 min
Views1.8K
Интернет-журнал Записки программиста главным образом посвящен таким непростым вещам, как unix-like системам (главным образом — FreeBSD) и программированию на С/C++ и Perl. Тем не менее, я стараюсь время от времени писать посты, рассчитанные на бОльшую целевую аудиторию, потому, надеюсь, блог заинтересует многих.

Чуть подробнее — под катом.
Читать дальше →

Искусство убивать драконов

Reading time3 min
Views5.3K
В последнее время на Хабрахабре много беседуют об учебном процессе. По этому поводу я хочу напомнить вам одну старую, многим известную притчу, процитировав её вон оттуда:
Когда-то давным-давно в маленькой горной деревеньке жил мальчик. Он был хорош собой, ловок и очень умён. Он быстро учился всему, чему могли его научить взрослые, живущие в той же деревне: он давно умел изготавливать посуду из глины, ткать, ловить рыбу, был лучшим охотником и самым искусным наездником.

Однажды с самой высокой горы спустился в деревню старец, который сказал ему:

— Ты научился всему, что могут тебе дать твои родные. Пойдём со мной, и я научу тебя искусству убивать драконов. Это очень древнее искусство, и оно требует много времени, сил и желания. Немногие способны освоить его. Но и ты — необычный мальчик.

И мальчик согласился.

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

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

И тогда он спустился с горы в маленькую горную деревню, где нашёл самого умного, самого талантливого мальчика, который давно ужé узнал всё, что могли ему сообщить жители его деревни, и стал учить его искусству убивать драконов.
Читать дальше →

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Registered
Activity