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
()

Сдвоенный выпуск PyPy2.7 и PyPy3.5 v6.0

 ,

Группа Open Source

Команда разработчиков PyPy выпустила PyPy2.7 v6.0 (интерпретатор, поддерживающий синтаксис Python 2.7) и PyPy3.5 v6.0 (интерпретатор, поддерживающий синтаксис Python 3.5). Оба выпуска во многом основаны на единой кодовой базе, что и позволило подготовить их совместный выход.

PyPy — совместимый интерпретатор Python, во многом годящийся на бесшовную замену CPython 2.7 и CPython 3.5. PyPy быстр (сравнение производительности PyPy и CPython 2.7.x), благодаря встроенному трассирующему JIT-компилятору.

( читать дальше... )

>>> Подробности (blogspot.ru)

Virtuos86
()

Building Tiny Rust Binaries for Embedded Linux

 ,

Сабж.

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

Virtuos86
()

Rust 1.25.0

 

Группа Mozilla

Сегодня вышел Rust 1.25.0 (2018-03-29).

Rust это системный язык программирования, нацеленный на надёжность, скорость и параллельное выполнение.
Если вы имеете предыдущую версию Rust, установленную через rustup, для получения версии 1.25.0 достаточно ввести в терминале:

$ rustup update stable

Что нового в 1.25.0 stable

Синтаксис

Компилятор

Библиотека

Стабилизированные API

  • Location::column;
  • ptr::NonNull;

    Наиболее значимое событие — это std::ptr::NonNull<T>. Этот тип похож на *mut T, но является ненулевым (non-null) и ковариантным. Если вкратце, NonNull<T> гарантирует, что никогда не будет равен null, а это означает, что Option<NonNull<T>> имеет тот же размер, что и *mut T. Если вы создаете структуру данных с небезопасным кодом, NonNull<T> зачастую будет правильным выбором для вас.

    Следующие функции теперь могут быть использованы в константных выражениях, т.е. например, static MINUTE: Duration = Duration::from_secs(60);:

  • Duration::new;
  • Duration::from_secs;
  • Duration::from_millis;
  • Duration::from_micros;
  • Duration::from_nanos.

Cargo

Разное

Примечания по поводу совместимости

>>> Подробности (rust-lang.org)

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 1.19

 

Группа Mozilla

Команда Rust рада объявить о последней версии Rust, 1.19.0. Rust это системный язык программирования, сфокусированный на безопасности, скорости и конкурентном выполнении.

( Подробности под катом... )

>>> Подробности (rust-lang.org)

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
()

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