Как стать автором
Обновить
55
0
Константин @kstep

Инженер-программист

Отправить сообщение

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

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

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


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

По поводу компиляций и оптимизаций, обновился только что до 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)

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

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

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

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

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

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


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

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

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


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


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

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

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


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

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

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

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

Ну так тебя завставляют, а ты не заставляйся.

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

Информация

В рейтинге
Не участвует
Дата рождения
Зарегистрирован
Активность