LINUX.ORG.RU

Сообщения Virtuos86

 

Зачем нужна статическая типизация?, или Вы всё врете!

В теме "Питонячьи радости " на последних страницах между мной и @rtxtxtrx внезапно разгорелся спор, из которого я понял, что есть еще люди, которые не считают динамическую типизацию (в том виде, в котором она представлена в Питоне, а именно строгая динамическая типизация) серьезным недостатком при работе с большим объемом кода, особенно при рефакторинге. Вообще изначально разговор завязался вокруг назначения type hints введенных в Питон 3: я утверждал, что они нужны для создания семантических связей в коде, которые будут препятствовать внесению деструктивных изменений в код в результате опечатки или иной ошибки кодера (изменил код, в результате которого какое-либо выражение получило некорректное значение, которое тем не менее обладает схожим с корректным значением типовым контрактом, поэтому при запуске код не «упадет» сразу, указав на проблему); оппонент заявил, что они нужны для (само)документации и не более того.
Но потом выяснилось, что и царь-то ненастоящий (читай, статическая типизация). Не нужна она, просто именуй сущности понятно и уповай на строгую типизацию. А если типизация не строгая, то сами виноваты, у нас в Питоне всё ОК.
Поскольку тема большая и вкусная, я предлагаю всем обсудить этот очень важный вопрос в меру скромных сил и познаний каждого желающего. Обсуждение вторичных вопросов, как-то «статическая типизация нужна для генерации эффективного кода», «при динамической типизации тип только один, object» etc. не предусмотрено — спорим только о том, дает ли статическая типизация выигрыш, если надо перекраивать несметные тыщи kloc. Если есть вообще о чем спорить 😅.

 ,

Virtuos86
()

«Сырая» разметка делает что надо, при оформлении в макрос — делает частично

Работаю с MiKTeX.

Эта разметка формирует текст в вертикальную колонку, выровненную по левому краю (и разбитую на абзацы, но это тут не главное):

\clearpage
\leftskip=3.8cm % это говно, но сделано для первоначальной прикидки, а пофиксить руки пока не дошли
{\obeylines\smallskip
Строка №1
Строка №2
Строка №3
\quad % новый абзац
Строка №1
Строка №2
Строка №3
\smallskip}

После вынесения в макрос переносы строк не проставляются, и весь текст идет одним абзацем:

\newcommand{\item}[2]{
	\clearpage
	\leftskip=#1
	{
		\obeylines
		\smallskip
		#2
		\smallskip
	}
}
Памагити! Очень не хочется каждую строку отбивать руками \\, да и текст замусоривается.

 

Virtuos86
()

Кто-нибудь из растоманов ЛОР'а хочет написать новость?

https://blog.rust-lang.org/2018/05/10/Rust-1.26.html

Значительные изменения (impl Trait etc.), было бы неплохо запилить новость.

Update: описание RFC официального стиля оформления кода на Rust (aka `style-guide`): https://github.com/nrc/rfcs/blob/0c97572fa88204e8d3c2561b59d47c9c1c3327dc/sty...

 

Virtuos86
()

Building Tiny Rust Binaries for Embedded Linux

Сабж.

TL;DR: растоман последовательно уменьшает размер собираемого бинарника на примере хеллоуворлда с ~6 Мб до ~200 кб, используя ряд тонких настроек Cargo и LLVM, а также прибегая к помощи Xargo и upx.

 ,

Virtuos86
()

Google's AlphaZero Destroys Stockfish In 100-Game Match

Вынос тела:

28 wins, 72 draws, and zero losses.

$SUBJ

Я помню времена, когда проигрыш Каспарова или Крамника компьютеру воспринимался как сенсация.

 ,

Virtuos86
()

Rust 1.22 (и Rust 1.22.1)

Почему сразу две версии? Чтобы задницы злопыхателей и критиков частых релизов полыхали ещё сильнее! (Как вариант, потому что 1.22.1 содержит патч, устраняющий баг в релизе 1.22, проявляющийся в Cargo у пользователей ОС macOS High Sierra, но это неточно.)

Что нового?

  • Основная фича: теперь вы можете использовать ? с Option<T>:
    fn try_option_some() -> Option<u8> {
        let val = Some(1)?;
        Some(val)
    }
    assert_eq!(try_option_some(), Some(1));
    
    fn try_option_none() -> Option<u8> {
        let val = None?;
        Some(val)
    }
    assert_eq!(try_option_none(), None);
    

    Пока функциональность ограничена; так, вы не можете писать код, который смешивает Result'ы и Option'ы в одной и той же функции, к примеру. Это станет возможным в прекрасном далёко.

  • Типы, реализующие Drop теперь доступны в `const` и `static` определениях:
    struct Foo {
        a: u32,
    }
    
    impl Drop for Foo {
        fn drop(&mut self) {}
    }
    
    const F: Foo = Foo { a: 0 };
    static S: Foo = Foo { a: 0 };
    

    Ничего особенного, но, согласитесь, приятно.

  • Два последних изменения в компиляторе должны ускорить компиляцию в режиме отладки.
  • T op= &T теперь работает для примитивных типов:
    let mut x = 2;
    let y = &8;
    
    // это не работало ранее, но теперь работает
    x += y;
    

    А раньше бы пришлось использовать разыменование: x += *y.

  • Улучшенные бэктрейсы на macOS.
  • Теперь вы можете создавать `compile-fail` тесты в Rustdoc:
    /// ```compile_fail
    /// let x = 5;
    /// x += 2; // shouldn't compile!
    /// ```
    
  • Наконец, мы удалили `le32-unknown-nacl` из поддерживаемых целей сборки. Google отказался от PNaCl в пользу WebAssembly. Вы уже можете компилировать Rust код в WebAssembly.

Подробно обо всём этом — в примечаниях к выпуску.

Стабилизация stdlib

Несколько новых API было стабилизировано в этом выпуске:

Cargo

 

Virtuos86
()

Баг или фича на главной?

Блок Top 10 продублирован. Редко захожу на главную, так и должно быть, или баг?

 

Virtuos86
()

Написал простенькое web extension для Firefox для проверки количества непрочитанных уведомлений на ЛОРе. Что бы ещё добавить?

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

P.S. пока залил аддон на одобрение мозилловцам, но это долго вроде бы ждать, а есть еще один выходной, чтобы что-нибудь добавить.
=================================
Репа на Github.
Упакованное расширение лежит в каталоге web-ext-artifacts. Установка: скачать, Ctrl+O в Firefox, выбрать в файловом диалоге и пару раз кликнуть, подтверждая согласие на установку. Настроек никаких нет.

 

Virtuos86
()

Приняты два важных RFC

RFC 2094: Non-lexical lifetimes. (лонг-рид)
RFC 2137: Support defining C-compatible variadic functions in Rust.

От первого я жду, что лайфтаймы станут проще и менее забористыми^W^Wне такими буквальными, как сейчас, что порождает всякие обходные пути при, например, множественном использовании переменных. От второго — пока утверждается, что поддержка делается специально для работы с кодом на Си, но возможно когда-нибудь дойдет и до нативных Rust функций.

 

Virtuos86
()

Еще одно маленькое украшение в синтаксисе Rust

Скоро указывать включение правой границы в диапазонах станет еще удобнее!

Было:

#![feature(inclusive_range_syntax)]

fn main() {
  for i in 1...4 {
    print!("{},", i);
  }
}

=> 1,2,3,4,

Станет:

#![feature(inclusive_range_syntax)]

fn main() {
  for i in 1..=4 {
    print!("{},", i);
  }
}

=> 1,2,3,4,

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

 

Virtuos86
()

Ищется дополнение для Firefox на Android

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

 

Virtuos86
()

Можно ли и как в Rust написать функцию partial (частичное применение аргументов функции)?

По питонячему примеру.
В частности, непонятно, что делать с отсутствием возможности указать переменное число аргументов. Делать как в Питоне и создавать callable тип, есть ли такая возможность?

 

Virtuos86
()

Не стартует X сервер

.xsession-errors:

initctl: Не удается подключиться к Upstart: Failed to connect to socket /com/ubuntu/upstart: В соединении отказано
syndaemon: процесс не найден
/etc/mdm/Xsession: Beginning session setup...
localuser:szia being added to access control list
/etc/mdm/Xsession: 2: /etc/X11/Xsession.d/98vboxadd-xclient: X.Org: not found
/etc/mdm/Xsession: 3: /etc/X11/Xsession.d/98vboxadd-xclient: Release: not found
Unrecognized option: Protocol
use: X [:<display>] [option]
-a #                   default pointer acceleration (factor)
...
-keeptty               don't detach controlling tty (for debugging only)

(EE) 
Fatal server error:
(EE) Unrecognized option: Protocol
(EE) 
(EE) 
Please consult the The X.Org Foundation support 
	 at http://wiki.x.org
 for help. 
(EE) 
/etc/mdm/Xsession: 5: /etc/X11/Xsession.d/98vboxadd-xclient: Build: not found
/etc/mdm/Xsession: 6: /etc/X11/Xsession.d/98vboxadd-xclient: Current: not found
/etc/mdm/Xsession: 7: /etc/X11/Xsession.d/98vboxadd-xclient: Kernel: not found
/etc/mdm/Xsession: 8: /etc/X11/Xsession.d/98vboxadd-xclient: Build: not found
/etc/mdm/Xsession: 9: /etc/X11/Xsession.d/98vboxadd-xclient: Syntax error: "(" unexpected
Я так понимаю, Иксы как-то не так стали запускаться, но где именно это невалидное барахло находится?
До кучи, отваливается и не монтируется раздел, на котором установлена система. После fsck -f /dev/sda6 это успешно чинится, но через пару перезагрузок опять ломается.

 ,

Virtuos86
()

Где хранятся настройки gnome-terminal?

Классическая история: изменил что-то в настройках gnome-terminal, теперь его запуск приводит к рекурсивному запуску самого себя со всеми вытекающими. (Кстати, сомневаюсь, что мне удастся повторить нечто подобное еще раз, но иногда звезды сходятся чересчур удачно :}.)
Где находятся его настройки, поиск не помог?
ОС — Linux Mint.

UPD: Решением оказался вариант поискать в англоязычном интернете. Искомый файл: ~/.gconf/apps/gnome-terminal/profiles/Default/%gconf.xml

 

Virtuos86
()

«Нетормозящий» текстовый редактор на Android

Сабж. Требования: полное отсутствие лагов, фризов и тормозов при прокрутке и редактировании нескольких сотен строк текста. Остальная функциональность опциональна.

Upd: На данный момент отказался от выбесившего Quoda, вернулся на DroidEdit Pro, вроде бы удовлетворительно справляется с нужными мне объемами текста. Но практика покажет.

Upd.2: У меня просьба. Назвать кучу текстовых редакторов я и сам в состоянии. Меня интересует именно работа с относительно большими файлами. Если у вас нет опыта редактирования в советуемых редакторах файлов размером хотя бы в 100 килобайт, поберегите свое и мое время.

Upd.3: Jota Text Editor объявляется победителем в этом импровизированном соревновании. Советую, рекомендую. Текст редактирует, настраивается гибко. Точно не самый красивый и функциональный (здесь DroidEdit Pro выигрывает), но функциональный по-своему очень и очень.

 ,

Virtuos86
()

«E: Невозможно исправить ошибки, у вас отложены (held) битые пакеты.»

Сабж при попытке установить некоторые пакеты на свежеустановленной системе. LOR всеведающий, кто виноват, что делать?

 

Virtuos86
()

Убедительная просьба модераторскому составу

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

 

Virtuos86
()

Наиболее кошерный тайловый WM

Тормоза Unity с Compiz достали, понятно, что бежать надо на что-то легкое.

Почему именно тайлинг? Мне кажется, всё легкое будет выглядеть довольно дерьмово по сравнению с полноценными DE (особенно шрифты), легкость просто так не дается. А тайлинг, в принципе, мне интересно попробовать, может понравится.

Какой WM в этой категории наиболее удобен?

И, если кто будет советовать, поделитесь уж конфигами готовыми или скажите, где взять. Голый тайлинг искоропки чересчур круто выглядит, как на мой взгляд :-).

 ,

Virtuos86
()

Есть ли такой чат?

Чат, в котором в реальном времени видно, что набирает твой собеседник.
Не всегда реплики в чате длиною в твит, иногда стучание по клаве параллельно с обдумыванием ответа-реплики занимает непристойное для живого диалога время.
А так можно было бы видеть, что пишет собеседник, и начинать писать ответ до того, как он тыкнет кнопку Send.
Понятно, что всё это на б-гопротивном джаваскрипте должно быть реализовано, но получилась бы полезная вундервафля.

 ,

Virtuos86
()

Система странно подключает букридер

Пациент: Ubuntu 11.10
У читалки есть внутренняя память и слот для MicroSD.
Подключаю через usb-кабель читалку, система бодро рапортует, что подключён новый диск, и открывает его — MicroSD-флэшку, до внутренней памяти никаким образом не доберёшься.
Это в убунте.
В live-cd'шке PuppyRus всё доступно.
Чего не хватает?

 

Virtuos86
()

RSS подписка на новые темы