Size: a a a

Сообщество Scheme

2020 October 16

AZ

Aydar Zarifullin in Сообщество Scheme
Aragaer
я как человек с си головного мозга, считаю, что сравнение символов это просто взять и сравнить, а сравнение строк это цикл по символам
Можно тебя дёрнуть?

Есть код густо обмазанный
битовыми масками, не особо умею с ними работать поэтому написал следующие макросы

#define IS_FLAG_SET(mask, flag) mask & flag

#define SET_FLAG(mask, flag) mask |= flag

#define UNSET_FLAG(mask, flag) mask &= ~(flag)

Они корректные?

А ещё в коде есть такая строка

self.flags = self.flags - FL_ONGROUND;

Где flags маска а ONGROUND флаг

Что оно делает?
источник

PG

Pig Greenest in Сообщество Scheme
не, гаш таки про другое, это позикс шелл для бутстрапа гикса, чтобы не зависить от баша, например
источник

PG

Pig Greenest in Сообщество Scheme
падажжи, это не тот gash
источник

PG

Pig Greenest in Сообщество Scheme
источник

AZ

Aydar Zarifullin in Сообщество Scheme
Alex Peresmeshnik
(define *config-dir* (string-append  (getenv "HOME") "/" ".luks-conf"))

(when (not (access? *config-dir* 4))
 (mkdir *config-dir*))

Ну окей, стало компактнее +)
Но с таким все равно не сравнить: (system (format #f "mkdir -p $HOME/~a" ".luks-conf"))
(use-modules                                                                                          
 (ice-9 popen)                                                                                      
 (ice-9 textual-ports))                                                                              
                                                                                                     
(define                                                                                              
 (g . rest)                                                                                          
 (let*                                                                                              
   ((port                                                                                            
      (open-input-pipe                                                                              
        (string-join rest " ")))                                                                    
    (str                                                                                            
      (get-string-all port)))                                                                        
   (list (status:exit-val (close-pipe port)) str)))

(define res (g "mkdir" "-p" (format #f "$HOME/~a" ".luks-conf")))                                    
                                                                                                     
(write res)

Вполне удобно, я считаю.

upd:
Теперь оно возвращает список из двух элементов статус-кода и текстового выхлопа команды
источник

A

Aragaer in Сообщество Scheme
Aydar Zarifullin
Можно тебя дёрнуть?

Есть код густо обмазанный
битовыми масками, не особо умею с ними работать поэтому написал следующие макросы

#define IS_FLAG_SET(mask, flag) mask & flag

#define SET_FLAG(mask, flag) mask |= flag

#define UNSET_FLAG(mask, flag) mask &= ~(flag)

Они корректные?

А ещё в коде есть такая строка

self.flags = self.flags - FL_ONGROUND;

Где flags маска а ONGROUND флаг

Что оно делает?
ну так. Тут если вдруг mask или flag окажутся нетривиальными штуками, то все может накрыться. Лучше в скобочки заключить. Вычитание это "unset, если мы точно знаем, что он там стоит"
источник

A

Aragaer in Сообщество Scheme
и лучше такое вычитание заменить на unset
источник

AZ

Aydar Zarifullin in Сообщество Scheme
Aragaer
ну так. Тут если вдруг mask или flag окажутся нетривиальными штуками, то все может накрыться. Лучше в скобочки заключить. Вычитание это "unset, если мы точно знаем, что он там стоит"
Понял, спасибо огромное
источник

A

Aragaer in Сообщество Scheme
вообще, все эти битовые операции реально будут преобразованы в довольно эффективные процессорные инструкции, поэтому вычитание ничем не лучше unset
источник

AZ

Aydar Zarifullin in Сообщество Scheme
Aragaer
вообще, все эти битовые операции реально будут преобразованы в довольно эффективные процессорные инструкции, поэтому вычитание ничем не лучше unset
Ну эт из первокваки код
источник

A

Aragaer in Сообщество Scheme
а, ну тогда можно ожидать какое-нибудь особое волшебство в этом месте
источник

A

Aragaer in Сообщество Scheme
условно если есть два соседних флага, один старший, другой младший, тогда вычитание младшего означает "если он стоит, то снять, иначе если стоит старший, то снять старший, но поставить младший" и далее с переносами и может быть так и задумано
источник

A

Aragaer in Сообщество Scheme
в си битовые флаги это не что-то особое, это просто числа, у которых в одном бите единица, а в других нули.
источник

A

Aragaer in Сообщество Scheme
и там вся арифметика ведет себя точно так же, как и в остальных случаях
источник

AZ

Aydar Zarifullin in Сообщество Scheme
Aragaer
а, ну тогда можно ожидать какое-нибудь особое волшебство в этом месте
Спасибо за детальную информацию, буду заменять на unset посмотрю что выйдет.
источник

PG

Pig Greenest in Сообщество Scheme
это ты мои сообщения ебнул?
источник

AZ

Aydar Zarifullin in Сообщество Scheme
Pig Greenest
это ты мои сообщения ебнул?
Да
источник

PG

Pig Greenest in Сообщество Scheme
оффтопик?
источник

AZ

Aydar Zarifullin in Сообщество Scheme
Нет, просто я считаю что я криво сформулировал изначальный вопрос. Сорри если обидел :)
источник

PG

Pig Greenest in Сообщество Scheme
не, я просто не понял за что
источник