Pull to refresh
38
0.8
Dmitry @domix32

Жопа котика

Send message

ну так и можно в примерах приводить нечто реалистичное, а не натянутое.

Зачем? Что-то реалистичное требует заметно больше кода, да ещё и специфичного. Кто станет читать эти примеры, если они будут размером с "Войну и Мир"?

чуть чаще чем никогда.

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

Вместо этого каждая иконка на десктопе будет подгружаться по url как картинка.

У меня винда регулярно при выходе из дрёмы пытается проверить апдейты и накатить их.

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

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

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

токен может быть более, чем из одного символа.

как в общем и string_view. оно фактически просто указывает на кусок оригинальной строки и её размер без копирования всей строки. Так что просто отсчитываете сколько вам символов нужно и конструируете.

std::string str = "1234567890";
auto ptr = str.data(); // для удобства 
//                     | указатель на начало строки
//                     V      v желаемый размер 
std::string_view view1{ptr  , 3 }; // "123" из str;
//                         V сдвинуть на 5 символов относительно начала
std::string_view view1{ptr+5, 3 }; // "678" из str;

auto it = str.begin(); // начиная с С++20 можно через итераторы
std::string_view view1{it+5, 3 }; // "678" из str;

Работать можно почти также как с обычной строкой - стравнение с другими строками, итерация по символам в цикле, брать подстроки(точнее подвьюхи) через substring, искать всякое через find/rfind/_first_of/_last_of. Также в контейнерах хранить - map/set/vector.

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

По большому счёту токены вообще можно делать вида

struct Token {
  TokenKind kind; // тип токена
  size_t begin;   // оффсет от начала кода программы
  size_t len;     // длина токена
};

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

asm для dos

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

Отставить легкие проверки! Только хардкор.

В смысле если забивать оперативку, то как джава?

while (!(now == ' ' || now == '\r' || now == '\n' || now == '\t'))

странно, что вы использовали isdigit, но не isspace.

memcpy(data, "{a = 11004; b = 10087; while(0 < b) {c = a - (a / b * b); a = b; b = c;} print(a);}", 85);

Вот этот мув совершенно не понял. То есть везде по коду используется std::string, но в этом месте вы решили ручками покопировать память. Зачем? Сделали ли бы string из сырой строки.

std::string program = R"({
a = 11004;
b = 10087;
while (0<b) {
  c = a - (a/b*b);
  a = b;
  b = c;
}
print(a);
})";

std::string str = ""; // В эту строку будет записываться текущий токен

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

class Lexer {
  sszize_t current_offset; // текущая позиция
  ssize+t current_line; // текущая строка
  std::string program; // исходник
public:
  Lexer(std::string prog): program(std::move(prog) 
  { /* etc */ }
  Token getNextToken() {
    auto token = Token::Nop;
    auto offset = current_offset;
    while (!isspace(prog[offset++])) {
      // то что у вас там парсилось
      ...
    }
    current_offset += offset;
    return token;
  }
};

int main() {
  string prog = "{a=1+1; print(a)}";
  Lexer lex(prog);
  while (auto token = lex.getNextToken(); token != Token::Eof) {
      // обрабатываем токен
  }
  return 0;
}

Заодно, когда дойдёте до обработки ошибок будет проще писать в какой строке/столбце ошибка.

Проверните все то же самое на VBScript, там вроде даже циклы нормальные есть. Или действительно как нормальные админы - через PS

например HEAD^2,

Вот это неправда. Чтобы ссылаться кареткой на предыдущие коммиты, то нужно последовательно ставить их, то бишь HEAD^^ будет ссылаться на то что подразмевалось. Для того чтобы работать с номерами необходимо использовать тильду HEAD~2

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

Спрашивайте, в комментариях расскажут.

Вот где GATов недостаёт малость.

Как они до сих пор совместную репу какую-нибудь не заспавнили.

Это уже всякие студенты-медики-биологи, там половина латыни в таких terraformidae

Причем тут саман? Они же горами продукты обзывали. Аналогично у яблла тоже горы, но другие.

да, видимо промахнулся. "Если оно существует, то существует женская версия".

учитывая, что они в плюсах до сих пор без RAII живут и new вызывают разница не так уж велика.

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

Несколько странно, каэш, говорить на русском и жаловаться, что люди сокращают несокращаемое и склоняют несклоняемое.

апи

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

бага

rule 64 существует и в русском языке. deal with it.

девелОпмент

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

жаба (2) — Java, но тоже душит

ну тут сам оракл велел.

жабаскрипт

должно быть жабраскрипт. и с жабой меньше путаницы и отражает суть этой безрукой чешуястой инфраструктуры.

кресты

кстати ни разу не сталкивался с кем-либо. кто их так называл. обычно всё же плюсовик(-затейник).

ксс

они конечно каскадные, но цаскадные стили греют мне душу.

пека

лучше писи и компа

уметь в...

кто-то не умеет в иронию и языки. в среднем странные конструкции подобного рода почему-то персонально ощущаются крайне органичными. где-то рядом "запилить" и "выпилить".

«Сишечка» — это что, C, SSH, c‑shell?

SSH это Саша. А кто-то вообще ведёт разговоры о сишелах? Ню и жш я б ещё понял, баш там куда ни шло. но сишелл? Мне кажется с большей вероятностью кто-нибудь будет говорить про тзинч-шелл. Но в среднем не очень понимаю такю любовь к Си, чтобы называть её настолько ласкательно.

«Правильно приготовленный X»

Внезапно, многие вещи это вполне себе рецеты приготовления. В каком-нибудь Ansible это даже официально зовётся рецептом. Оттуда перекочевало в прочие CI/CD как неофициальное название этих ихних ямлов.

Мыло

Это что-то странное. Это слово примерно возраста интернета/фидо. Неужели зумеры?

Шваггер вместо сваггер

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

Адоб. Потому что Эдоуби.

Ещё скажите что Nike не Найк звали.

Произношение слова Queue

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

У вас в статье есть три эвристики, которые можно использовать в алгоритмах поиска - Дийкстре, A* и прочие. В зависимости от ограничений на плоском поле и выбранной эвристики - то есть алгоритму по которой отдаётся приоритет точке в алгоритме поиска пути - находимый путь может отличаться количеством поворотов между точками при одинаковой метрике в заданном пространстве - то есть способу измерять расстояния между точками в заданном векторном пространстве.

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

Information

Rating
1,453-rd
Date of birth
Registered
Activity