kstep
0

Поэтому аналогом nohup на чистом шеле является такая конструкция: script.sh >&- 2> stderr.log <&- & disown. Такая команда закроет stdin и stdout, перенаправит stderr в файл лога, отправит задачу в фон и отсоединит от шела.

kstep
0

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

kstep
+1

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

kstep
+3

Так и смысл все входящие фильтровать. Наверняка большинство дел совершенно для вас не важны и их можно смело выкинуть или делегировать. Я недавно для себя понял, насколько важно иметь перед глазами чёткую цель. Например: построить дом, выстроить карьеру, выстроить отношения в семье, развиться профессионально и как личность. Главное, чтобы их было немного, чтобы их удержать в себе и не распыляться, они должны быть чёткими и ясными, как яркий свет в конце туннеля. Тогда каждое новое входящее дело рассматривается сквозь призму высшей цели, то понятие «важное» vs «неважное» из абстрактных становятся очень конкретными. Либо это дело приближает лично тебя к твоей цели, и тогда она важное и его нужно распланировать и делать. Либо не приближает или, того хуже, отдаляет тебя, тогда оно автоматически отсеивается, выбрасывается в топку. Когда множество дел категоризируются как выжные, это первый признак того, что нет чётких ориентиров в жизни, либо целей слишком много, и силы распыляются. А силы (тут речь об умственных и духовных) у людей не безграничны.

kstep
0

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

kstep
+1

Отвечал с телефона, автодополнение не всегда меня понимает правильно. Так что извините за странные опечатки. Надеюсь, из контекста понятно, что имелось в виду :)

kstep
+6
  1. В первом случае запятая после последнего элемента запрещена, во втором — обязательна. Вместе эти варианты покрывают оба случая, делая запятую в конце опциональной.


  2. Верно, нельзя. Чтобы реализовать трейт, нужно чтобы либо трейт, либо тип был в данном крейте.


  3. Можно сделать такую обёртку (паттерн называется newtype: struct NewType(OldType);). Нет, автоматически ничего само не реализуется, надо самому реализовать для нового типа нужные трейты. Можно облегчить себе участь, если реализовать трейт Deref, тогда трейты, методы которых принимают старый тип по ссылке (&self, &mut self), реализуются автоматом через Deref coercion.


  4. Да, можно. Через динамическую диспетчеризацию. Тип контейнера будет List<&(Animal + Filing)>. Тип элемента будет называться trait-object. Доступ к методами будет идти через таблицу виртуальных методов, на это есть строгие ограничения для трейтов (они должны быть object-safe). Полнее отвечать очень долго, лучше почитать доки, искать по западным ключевым словам :)
kstep
+2

Прекрасный перевод. Спасибо!

kstep
+6

Что-то этот fosshub настолько популярен, что я первый раз узнал про него из этого поста.

kstep
0

Зачем здесь поднимать тяжёлый перл, если sed-а хватит за глаза?

kstep
0

Ну в арчике из оф.реп ставится стабильный раст и карго. Растап нужен для найтли и бет разве что.

kstep
+3

Всё хорошо, только вот в статье перидочески путаются типажи и типы.
Request, Response, IronRequest, IronResult, IronError, Iron, Mime, Chain — это всё типы, а не типажи.
Это очень важное отличие, типажи нельзя инстанциировать, они определяют только поведение, интерфейс.

kstep
0

Ну если про код из коммента, то да, в таком случае компилятор пропустит, но будет паника в рантайме.

kstep
0

Погоди, но взятие по индексу ведь занимает массив, так что так просто его не модифицируешь, если где-то сохранились ссылки на значения, взятые по индексу. Или ты про что?

kstep
0

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

kstep
+5
  1. При использовании индексов есть проверка на выход индекса за границы массива (bounds check) в рантайме. Да, есть небольшой оверхед, но тут решили в сторону безопасности. Используете итераторы побольше, чтобы таких проверок избежать.


  2. Нет, такого сделать нельзя, борроу чекер при компиляции не пропустит.
kstep
+6

По поводу компиляций и оптимизаций, обновился только что до Rust 1.10.


Исходники
fn main() {
  println!("Hello, world!");
}

int main(int argc, char **argv) {
  printf("Hello, world!\n");
}

Компилирую так:


$ rustc -C prefer-dynamic -C opt-level=3 hello.rs
$ gcc -Os hello.c

Результаты:


$ ls -lh
-rwxr-xr-x 1 kstep kstep 6.7K Jul 11 18:25 a.out
-rwxr-xr-x 1 kstep kstep 7.9K Jul 11 18:24 hello

$ strip -s a.out hello
$ ls -lh
-rwxr-xr-x 1 kstep kstep 4.4K Jul 11 18:25 a.out
-rwxr-xr-x 1 kstep kstep 5.4K Jul 11 18:25 hello

$ ldd hello
        linux-vdso.so.1 (0x00007ffdb5aeb000)
        libstd-e8edd0fd.so => /usr/lib/libstd-e8edd0fd.so (0x00007f4621eee000)
        libc.so.6 => /usr/lib/libc.so.6 (0x00007f4621b4d000)
        libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f4621949000)
        libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f462172c000)
        libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f4621516000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f46224b5000)
        libm.so.6 => /usr/lib/libm.so.6 (0x00007f4621212000)

$ ldd a.out
        linux-vdso.so.1 (0x00007fffc0974000)
        libc.so.6 => /usr/lib/libc.so.6 (0x00007f5688810000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f5688bb1000)

Так что всё сопоставимо по размеру.

kstep
+1

Наконец-то вменяемое описание композиции Клейсли для инженеров, а не для математиков! Спасибо!

kstep
–1

Субкласс, суперкласс? В переводе? Чем устоявшиеся русскоязычные термины не угодили? Старый добрый подкласс? Родительский класс?

kstep
+7

Человеку понравилась идея сильной системы типов с высокими гарантиями безопасности (Хаскель), но у Хаскеля большие проблемы с реал-таймом из-за GC и высокие накладные расходы на память по сравнению с более низкоуровневыми языками, что не очень хорошо для геймдева. Раст даёт высокие гарантии безопасности при работе с памятью, имеет мощную систему типов с выводом типов (в этом похож на Хаскель), но при этом низкоуровневый и имеет нулевые накладные расходы на управление памятью (статическая проверка корректности указателей во время компиляции), что делает его интересным выбором для геймдева.

kstep
0

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

kstep
0

Нет, без unsafe не валиден, будет ошибка компиляции:


<anon>:17:5: 17:9 error: cannot borrow `data` as mutable more than once at a time [E0499]
<anon>:17     data.clear();
kstep
+2

Ещё есть зависимости вида After и Before, которые в сочетании с Requires позволяют запускать сервисы после и до заданного.

kstep
+3

ЕГЭ не готовит к реальной жизни, он готовит только для поступления в вуз. Такие проекты — готовят.
То, что хочется пионерить и писать решения самому в ущерб «best practices» — это нормально и правильно в вашем возрасте.


Понятно, что «старичок» просто бы настроил Elasticsearch, взял пару готовых библиотек, написал бы обвязку за пару вечеров,
и писать было бы не о чем. У меня при прочтении тоже возникло много вопросов из серии «чем не угодил эластик?», «почему авторизация своя?» и т. п. Но потом я посмотрел на возраст автора и заплюсовал статью. Да, код неказистый, да, состоит из велосипедов, но каков запал, какая целеустремлённость! Вы даже не поленились потрясти Абби по поводу проприетарной библиотеки, а это много стоит, на самом деле.


Все с чего-то начинали. И я более чем уверен, что практически все комментаторы, которые выше тыкали в недостатки проекта, далеко не родились такими умными, а когда-то тоже пионерили. Делать ошибки хорошо и правильно, на них учаться. Главное понимать и принимать,
когда тебе на ошибки указывают, а вы это делаете, так что готовы учиться. Это вызывает уважение, из вас выйдет хороший программист.
Я рад, что растёт такая смена. Вы вернули мне веру в человечество.

kstep
+2

Системдешные атрибуты сервисов OnFailure, Restart и RestartSec сделают то же самое.

kstep
+6

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


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

kstep
+1

NerdTree мне тоже оказался не по нраву, простой netrw из коробки для меня удобнее. А вот Syntastic для меня маст хэв.

kstep
+1

Бессовестно порекламирую свой конфиг =)

kstep
+2

Мне vim-plug больше по нраву тем, что умеет всякие хуки (типа пересборки либ при обновлении YCM) и условную загрузку плагинов (а у меня их очень много), так что некоторые плагины у меня подгружаются только для определённых типов файлов или при попытке использовать определённые команды.

kstep
+9

WTF?

kstep
+2

Cow это не типаж, это тип.

kstep
+2

В сети всегда найдётся человек, который воспримет сарказм дословно.

kstep
+1
Ахматова про программирование

Когда б вы знали из какого сора
Растёт весь софт не ведая стыда!
Как одуванчик вдоль забора
Как лопухи и лебеда.

kstep
+4

Статья оборвана на половине. Где продолжение? Когда оно будет?

kstep
+1

Эх, а мне больше unsafe enum были по душе...

kstep
0
Ну это вкусовщина уже, в принципе оба варианта вполне себе ок.
kstep
–1
По поводу glibc, попробовал у себя на арче их proof-of-concept, бага (уже?) не воспроизводится.
Пакет glibc версии 2.22-4, ядро 4.4.1-2-ARCH.
kstep
0
Да, и следующий апдейт по просьбе ФБР будет запрет на пароли, длиннее 5 симовлов.</sarcasm>