All streams
Search
Write a publication
Pull to refresh
40
0
Павлов Николай Александрович @ZyXI

Инженер

Send message
RCS поддерживается dispatch-conf. Других преимуществ перед git не вижу, а вот невозможность сделать push оттуда в привычный bitbucket/github/… — вижу.
Тот, кто это будет читать, не знает, понимаете ли вы, чего хотите. Скобки (если ими не злоупотребляли) дают наглядное визуальное представление приоритета и показывают, что именно вы хотели от среды исполнения, тогда как при беглом просмотре && и || слабо различимы, требуя более пристального внимания и затрудняя понимание логики при разборе пачки схожих условий.

То, что данное предупреждение добавили в C, говорит о том, что ошибки, завязанные на непонимании приоритета, слишком часты. Я сильно сомневаюсь, что отсутствие предупреждения могло сделать их более редкими. Отсутствие предупреждения также не могло сделать && и || более различимыми.

Предупреждение, выдаваемое компиляторами, C имеет свои причины. То, что вы пишете не на C, не означает, что в JavaScript эти причины каким‐то магическим образом прекратили своё существование: синтаксис языков при записи комбинаций условных выражений достаточно схож, несмотря на множественные различия вроде результата выполнения &&/||.
В C вам на такой код выдадут warning. И будут правы: используйте скобки, иначе понять, что здесь происходит, будет сложно. Ещё сложнее будет понять действительно ли вы хотели написать то, что написали, или вы находитесь в заблуждении относительно приоритета.
Оба варианта получат предупреждение о неявном определении функции. Ваше счастье, что такое определение вообще корректно; и то оно корректно только из‐за того, что обе функции возвращают int:
(zyx-desktop:zyx:~) 1 % echo $'main(){puts("Hello word!");}' | clang -x c -
<stdin>:1:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
main(){puts("Hello word!");}
^~~~
<stdin>:1:8: warning: implicit declaration of function 'puts' is invalid in C99 [-Wimplicit-function-declaration]
main(){puts("Hello word!");}
       ^
2 warnings generated.
(zyx-desktop:zyx:~) 1 % echo $'main(){puts("Hello word!");}' | gcc -x c -Wall -
<stdin>:1:1: предупреждение: по умолчанию возвращаемый тип функции - «int» [-Wreturn-type]
<stdin>: В функции «main»:                                                                                                                                                                                                                     
<stdin>:1:1: предупреждение: неявная декларация функции «puts» [-Wimplicit-function-declaration]                                                                                                                                               
<stdin>:1:1: предупреждение: control reaches end of non-void function [-Wreturn-type]
Кстати, видите первое предупреждение? Функция без возвращаемого типа должна возвращать int. А что возвращаете вы? Я не думаю, что приводить в качестве первого примера не корректную программу — хорошая идея.

Если компилировать как C++ (я помню, что EuroElessar сказал «Если уж говорить про Си») будут тоже две, но ошибки:
(zyx-desktop:zyx:~) 1 % echo $'main(){puts("Hello word!");}' | clang -x c++ -
<stdin>:1:1: error: C++ requires a type specifier for all declarations
main(){puts("Hello word!");}
^~~~
<stdin>:1:8: error: use of undeclared identifier 'puts'
main(){puts("Hello word!");}
       ^
2 errors generated.
(zyx-desktop:zyx:~) 1 % echo $'main(){puts("Hello word!");}' | gcc -x c++ -
<stdin>: В функции «int main()»:
<stdin>:1:26: ошибка: нет декларации «puts» в этой области видимости
На этот раз gcc не молчит даже без -Wall.
В кэше не может быть несколько SSD дисков.
В первой ссылке по запросу bcache HOWTO утверждается, что как местом расположения кэша, так и местом расположения HDD может быть любое блочное устройство. Любое — это значит, что вы можете поставить там RAID0 из SSD, LVM раздел или даже другую пару устройств под управлением bcache (хотя это и не имеет смысла).

Другой вопрос, что именно надо поставить, чтобы уменьшить время доступа (в интернете утверждают, что кэшировать на RAID0 из SSD не имеет смысла, так как это увеличит задержки; не знаю, насколько можно им верить). Но тот же LVM может склеивать диски последовательно ⇒ не увеличивая время доступа. Хотя, конечно, если бы данные по дискам раскидывал сам bcache, то можно было бы оптимизировать алгоритм.
А, не заметил -w в git help annotate. Bazaar не получил этого умения после пересмотра bzr help annotate. Subversion умеет через --extension. Хочется поставить себе минус.
Написать дополнение к Vim, проверяющее ширину текста при табуляции, равной восьми — дело пяти минут.
function FindTooLongLines()
	if &textwidth == 0
		return 0
	endif
	let saved_winview=winsaveview()
	let saved_tabstop=&tabstop
	let saved_lazyredraw=&lazyredraw
	set tabstop=8 lazyredraw
	let ret=0
	let pattern=printf('\%%>%uv.*', &textwidth)
	try
		1
		while search(pattern, 'We')
			echohl ErrorMsg
			echomsg printf('Line %u is too long: %s', line('.'), substitute(getline('.'), '^\s*', '', ''))
			echohl None
			let ret=1
		endwhile
	finally
		let &tabstop=saved_tabstop
		let &lazyredraw=saved_lazyredraw
		call winrestview(saved_winview)
	endtry
	return ret
endfunction
autocmd BufWritePre * :if FindTooLongLines()|throw 'Too long lines found'|endif
Именно поэтому «можно» в кавычках.
% hg help annotate <…> -w --ignore-all-space игнорировать пробельные символы при сравнении строк -b --ignore-space-change игнорировать изменения в количестве пробельных символов -B --ignore-blank-lines игнорировать изменения, состоящие только из пустых строк <…>
Как вы думаете, что делают эти ключи в hg help annotate? Другой вопрос, что их нельзя использовать вместе с языками, где важны отступы. И такой возможности нет в git, bazaar и svn. И наверняка почти во всех остальных VCS. Против изменений «скобочек» эти ключи также не помогут.

Так что идея в целом плохая. Но история, тем не менее, в Mercurial «потеряется» не фатально.
Перенос во многих редакторах (в частности, в Vim) плохо выглядит.
Договорились использовать табуляцию — используем табуляцию все. В чём проблема?

Я не вижу, как табуляция сделает код единообразным. Я также не вижу, как пробелы сделают его таким. Convention’ы единообразным код сделают, что бы вы в них не написали про отступы.

Если вы про то, что в разных редакторах отступы будут занимать одинаковое место, то в этом я не вижу совершенно никакого смысла. Код в разных редакторах всё равно будет выглядеть по‐разному; и даже в одном редакторе при разных настройках. Почему бы тогда не написать, что код надо смотреть только в {какой‐то редактор} версии {какая‐то версия} с шрифтом {какой‐то моноширинный шрифт} и начертанием {какое‐то начертание} размера {какой‐то размер} и цветовой схемой {какая‐то цветовая схема} и настройками {какие‐то другие настройки редактора, влияющие на отображение}? Тогда код будет выглядеть единообразно. Если вас не пошлют.
На bitbucket «можно»: с помощью UserCSS в браузерах, поддерживающих tab-size (например, старая Opera с -o-tab-size и firefox с -moz-tab-size).
На github можно настроить величину табуляции.
Я не прав: можно только в редакторе.
На github можно настроить величину табуляции.

Ничего хорошего в том, чтобы код выглядел в разных проектах одинаково, я не вижу. Человечество выживает за счёт разнообразия, а не за счёт единственности. Единственное но: если вы используете не тот стиль именования, что принят в некотором языке, то код в проекте будет выглядеть неоднородным за счёт внешних библиотек. А скобки, отступы, длина строк, способ разбиения длинных строк и тому подобное можно иметь какими угодно.
Разделяйте отступы и выравнивание. Отступы можно делать чем угодно. Выравнивание нужно делать пробелами. Правда, настроить редактор, чтобы он разделял эти два понятия, обычно непросто.
leMar как раз об этом и говорил. Только в положительном ключе: у него и его коллеги код с табуляцией выглядит по‐разному, так, как им обоим больше нравится.

А на «общие» руководства по стилю написания можно забить, используя свои. Их тоже не боги писали. Надо только принять во внимание, что в открытом проекте так можно отпугнуть часть разработчиков.
Что в его любимом редакторе/IDE должна быть возможность автоматической установки отступов. Или хотя бы поиск и замена в выделенном тексте. Проблема, о которой вы говорите, решается и очень легко, по крайней мере в Vim.
Уверен, что эта часть людей просто огромна.
В Gentoo etckeeper есть в репозитории. Как я понял, с июня 2012.
По поводу версии Python: для разработчиков очень удобна возможность поставить какой‐то пакет сразу для всех версий Python, присутствующих в системе. Просто укажите в /etc/portage/make.conf нужные вам PYTHON_TARGETS (и USE_PYTHON для старых пакетов). Это удобно, если вы занимаетесь тестированием своих проектов на Python в разных окружениях.

Это относится не к eselect, а к пакетам, использующим python[-r1].eclass.

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity