The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]



"Выпуск языка программирования Rust 1.36"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Выпуск языка программирования Rust 1.36"  +/
Сообщение от opennews (??), 05-Июл-19, 09:52 
Опубликован (https://blog.rust-lang.org/2019/07/04/Rust-1.36.0.html) релиз языка системного программирования Rust 1.36 (http://www.rust-lang.org), развиваемого проектом Mozilla. Язык сфокусирован на безопасной работе с памятью, обеспечивает автоматическое управление памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime.

Автоматическое управление памятью в Rust избавляет разработчика от манипулирования указателями и защищает от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo (http://blog.rust-lang.org/2014/11/20/Cargo.html), позволяющий получить нужные для программы библиотеки  в один клик. Для размещения библиотек поддерживается репозиторий crates.io (https://crates.io/).


Основные новшества (https://github.com/rust-lang/rust/blob/master/RELEASES.md#ve...):


-  Стабилизирован типаж (trait) Future (https://doc.rust-lang.org/std/future/trait.Future.html), который представляет значение, вычисление которого возможно ещё не завершено в процессе использования блоков async / .await. Определяемые при помощи Future асинхронные значения дают возможность продолжить выполнение в потоке полезной работы, попутно ожидая завершения вычислений определённого значения;

-  Стабилизирована библиотека alloc (https://doc.rust-lang.org/alloc/index.html), предоставляющая умные указатели и коллекции для управления размещаемыми в памяти значениями. Для выделения памяти в std теперь применяется тип Vec (https://doc.rust-lang.org/alloc/vec/index.html), который реэкспортируются из alloc. Отдельное использование alloc имеет смысл в приложениях не привязанных к std ("#![no_std]"), а также в библиотеках, рассчитанных на применение в подобных программах без std;

-  Для обхода проверок корректной инициализации значений предложен (https://gankro.github.io/blah/initialize-me-maybe/) промежуточный тип MaybeUninit (https://doc.rust-lang.org/std/mem/union.MaybeUninit.html), который можно использовать вместо функции mem::uninitialized, в качестве её более безопасной альтернативы. Функция mem::uninitialized удобна для быстрого создания массивов, но  вводит компилятор в заблуждение, так как создаёт видимость выполнения инициализации, но в действительности значение остаётся неинициализированным. MaybeUninit позволяет явно указать компилятору, что значение неинициализировано, учесть связанное с этим возможное неопределённое поведение, а также в программах организовать проверку через "maybe_t:" и поэтапную инициализацию с пометкой её завершения при помощи вызова ".assume_init()". С появлением MaybeUninit функция mem::uninitialized переведена в разряд устаревших и не рекомендована к использованию;

-  Техника NLL (Non-Lexical Lifetimes), расширившая систему учёта времени жизни заимствованных переменных, стабилизирована для языка Rust 2015 (изначально NLL поддерживался только Rust 2018).  Вместо привязки времени жизни на лексическом уровне, NLL осуществляет учёт на уровне набора указателей в графе потока выполнения. Подобный подход позволяет увеличить качество проверки заимствования переменных (borrow checker) и допустить выполнение некоторых видов корректного кода, использование которого ранее приводило к выводу ошибки. Новое поведение также существенно упрощает отладку;

-  В библиотеке hashbrown добавлена и применена по умолчанию новая реализация ассоциативных массивов HashMap (https://doc.rust-lang.org/std/collections/struct.HashMap.html), основанная на применении структуры Swiss Table (https://abseil.io/blog/20180927-swisstables) (в библиотеке std по-прежнему по умолчанию предлагается реализация на основе SipHash 1-3). Программный интерфейс остался прежним, а заметные разработчику отличия сводятся к увеличению производительности и снижению потребления памяти;

-  В пакетный менеджер cargo добавлена (https://www.ncameron.org/blog/cargo-offline/) опция "--offline", включающая режим работы без обращения по сети, при котором при установке зависимостей используются только прокэшированные на локальной системе пакеты. Если зависимость отсутствует в локальном кэше, то будет выведена ошибка. Для предварительной загрузки зависимостей в локальный кэш перед переходом в offline можно использовать команду "cargo fetch";


-  Реализована возможность вызова макроса "dbg!" с указанием нескольких аргументов;

-  Признак "const", определяющий возможность использования в любом контексте вместо констант, применён для методов
    Layout::from_size_align_unchecked,
    mem::needs_drop,
    NonNull::dangling и
    NonNull::cast;

-  В разряд стабильных переведена новая порция API, в том числе стабилизированы методы
    task::Waker, task::Poll,
    VecDeque::rotate_left, VecDeque::rotate_right,
    Read::read_vectored, Write::write_vectored,
    Iterator::copied,
    BorrowMut (для строк) и    str::as_mut_ptr.


URL: https://blog.rust-lang.org/2019/07/04/Rust-1.36.0.html
Новость: https://www.opennet.ru/opennews/art.shtml?num=51034

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по времени | RSS]


1. "Выпуск языка программирования Rust 1.36"  +/
Сообщение от Аноним (1), 05-Июл-19, 09:52 
Почему пишут что развиваемого Mozilla? Вроде как Mozilla там уже давно не причем. Даже в оф доках мозилла не упоминается больше нигде.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Выпуск языка программирования Rust 1.36"  +5 +/
Сообщение от Аноним (2), 05-Июл-19, 10:02 
Формально проект независимый, но осконвной костяк разработчиков трудоустроен в Mozilla.

PS. https://internals.rust-lang.org/t/mozilla-is-hiring-for-the-...

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

14. "Выпуск языка программирования Rust 1.36"  +3 +/
Сообщение от Растохейтер (?), 05-Июл-19, 14:42 
Так они пишут и о том, что он системный. Мало ли что они пишут )
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Выпуск языка программирования Rust 1.36"  –1 +/
Сообщение от Аноним (3), 05-Июл-19, 10:13 
> обеспечивает автоматическое управление памятью

не обеспечивает ведь, это то, что он призван избегать

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "Выпуск языка программирования Rust 1.36"  +5 +/
Сообщение от Аноним (4), 05-Июл-19, 10:44 
автоматическое управление памятью ≠ сборка мусора
Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

24. "Выпуск языка программирования Rust 1.36"  +/
Сообщение от Аноним (24), 05-Июл-19, 17:32 
Похоже Аноним выше путает 'автоматическое' и 'динамическое' управление.
Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

5. "Выпуск языка программирования Rust 1.36"  +/
Сообщение от Andrey Mitrofanov_N0 (??), 05-Июл-19, 10:45 
>> обеспечивает автоматическое управление памятью
> не обеспечивает ведь, это то, что он призван избегать

Вы в отрицаниях-то не путайтесь................

То, что в ём нет сборки мусора...
...не означает, что "управление ресурсами" (подсчёт ссылок, передача владения, другие правильные приседания) --
-- не управление памятью.

..."" important in Rust because we have no pervasive GC to rely on for memory management. "" --https://doc.rust-lang.org/nomicon/obrm.html

И да, оно "автоматическое" по большей части, видимо.  Более автоматическое, чем "традиционное" Си-шное...  КМК

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

6. "Выпуск языка программирования Rust 1.36"  +/
Сообщение от КО (?), 05-Июл-19, 10:56 
подсчет ссылок это тоже вариант запуска GC, но как указано в приведенной Вами цитате, он не pervasive.

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "Выпуск языка программирования Rust 1.36"  +/
Сообщение от Andrey Mitrofanov_N0 (??), 05-Июл-19, 11:04 
> подсчет ссылок это тоже вариант запуска GC, но как указано в приведенной
> Вами цитате, он не pervasive.

Вы мне это прекратите,  не путайте!!!...

...подсчёт ссылок и подсчёт ссылок.  В rust же подсчёт ссылок, а в сканировании памяти в GC - подсчёт ссылок.

И это три большие разницы!  Совсем не похоже даже.

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8. "Выпуск языка программирования Rust 1.36"  +2 +/
Сообщение от funny.falcon (?), 05-Июл-19, 11:36 
Оппонент сказал, что RC является разновидностью GC. И это правда. Просто прочитайте немного про теорию GC.

Все книжки, статьи по GC начинаются с того, что есть два базовых алгоритма GC: RC и TracingGC. (Базовый TracingGC в свою очередь делится на базовый Mark&Sweep и базовый copying).

Если вы почитаете теорию по оптимизации и совершенствовании RC, то увидите, что все улучшения RC сводятся к внесению в него элементов TracingGC: cycle detection, delayed stack scanning и прочее.

Так что, разница есть, но есть и много общего.

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

9. "Выпуск языка программирования Rust 1.36"  –2 +/
Сообщение от Andrey Mitrofanov_N0 (??), 05-Июл-19, 12:49 
> Оппонент сказал, что RC является разновидностью GC. И это правда.

RC и GC - разновидности MM.

>Просто прочитайте
> немного про теорию GC.

О семантике, что ли, поговорим?  Расширительное против узкого толкования?

Спасибнунафиг.  Сам иди.

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

12. "Выпуск языка программирования Rust 1.36"  +1 +/
Сообщение от funny.falcon (?), 05-Июл-19, 14:01 
https://en.m.wikipedia.org/wiki/Garbage_collection_(computer_science)

Strategies:
- Tracing
- Reference Counting

В этом вопросе я ничего не выдумываю, а пользуюсь официальной терминологией.

То, что массы не зная официальной терминологии пытаются навесить свои ярлыки на термины - это проблема этих самых масс.

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

13. "Выпуск языка программирования Rust 1.36"  –3 +/
Сообщение от Andrey Mitrofanov_N0 (??), 05-Июл-19, 14:18 
> То, что массы не зная официальной терминологии пытаются навесить свои ярлыки на
> термины - это проблема этих самых масс.

Уф!  Спасибо за разъяснение.  А то уж я было подумал...  А не стоило, не стоило.  Моного-то об себе думать.  Прошу прощеньица.

Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

10. "Выпуск языка программирования Rust 1.36"  +/
Сообщение от Andrey Mitrofanov_N0 (??), 05-Июл-19, 12:55 
>>>подсчет ссылок это тоже вариант запуска GC
> Оппонент сказал, что RC является разновидностью GC. И это правда.

И да, он сказал совсем не это.
Про "запуск" - особенно мило.
Опять самозванные капитаны набегают....   Бида.

malloc()/free() -- "это тоже вариант запуска GC" (ц) КО-самозванец.

>Просто прочитайте немного

Да! "Просто прочитайте", что он написал.
      

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

11. "Выпуск языка программирования Rust 1.36"  +1 +/
Сообщение от Sw00p aka Jerom (?), 05-Июл-19, 13:11 
>malloc()/free() -- "это тоже вариант запуска GC" (ц) КО-самозванец.

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

Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

15. "Выпуск языка программирования Rust 1.36"  +1 +/
Сообщение от Junior frontend developer (?), 05-Июл-19, 14:49 
В расте memory management времени компиляции. То есть статический и ручной, хотя и значительно более автоматический, чем в C языках. RC сборка мусора строго по желанию.
Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

40. "Выпуск языка программирования Rust 1.36"  +1 +/
Сообщение от epishman (ok), 06-Июл-19, 00:38 
В расте подсчет ссылок не более чем опция, основной режим - автоматическая деструкция в момент выхода переменной из области видимости.
Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

53. "Выпуск языка программирования Rust 1.36"  +/
Сообщение от Andrey Mitrofanov_N0 (??), 08-Июл-19, 12:03 
> В расте подсчет ссылок не более чем опция, основной режим - автоматическая
> деструкция в момент выхода переменной из области видимости.

Прямо как в Си??  Не может быть.

Ответить | Правка | ^ к родителю #40 | Наверх | Cообщить модератору

16. "Выпуск языка программирования Rust 1.36"  +1 +/
Сообщение от user90 (?), 05-Июл-19, 15:16 
Но синтаксис-то - говна кусок! Реально блевотные рефлексы.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

17. "Выпуск языка программирования Rust 1.36"  –1 +/
Сообщение от user90 (?), 05-Июл-19, 15:21 
Чо там, 3 вида скобок? Упорыши, конченные!
Ответить | Правка | ^ к родителю #16 | Наверх | Cообщить модератору

19. "Выпуск языка программирования Rust 1.36"  +/
Сообщение от iLex (ok), 05-Июл-19, 16:06 
Там клавиатурный тренажёр. Когда через каждые две строчки приходится набирать конструкции вроде
self.node.upgrade().unwrap().read().unwrap().db.write().unwrap().tx = num
то начинаешь думать, что язык разрабатывался в качестве замены программы "Соло на клавиатуре" с целью повысить скорость печати кодеров.
Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

21. "Выпуск языка программирования Rust 1.36"  +2 +/
Сообщение от fghj (?), 05-Июл-19, 16:32 
> Когда через каждые две строчки приходится набирать конструкции вроде
> self.node.upgrade().unwrap().read().unwrap().db.write().unwrap().tx = num

Так это же здорово, чем меньше "кодеров" которые ошибки не могут нормально обработать,
тем лучше. Значит отличный синтаксис.

Ответить | Правка | ^ к родителю #19 | Наверх | Cообщить модератору

23. "Выпуск языка программирования Rust 1.36"  +/
Сообщение от Anonim (??), 05-Июл-19, 17:14 
>программы "Соло на клавиатуре" с целью повысить скорость печати кодеров.

Она для этого, мягко говоря, не подходит

Ответить | Правка | ^ к родителю #19 | Наверх | Cообщить модератору

26. "Выпуск языка программирования Rust 1.36"  +/
Сообщение от freehckemail (ok), 05-Июл-19, 19:37 
> Чо там, 3 вида скобок? Упорыши, конченные!

В ANSI C тоже три вида скобок. Вот же упороши конченные, а? =)

Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

35. "Выпуск языка программирования Rust 1.36"  +2 +/
Сообщение от Аноним84701 (ok), 05-Июл-19, 22:00 
> Чо там, 3 вида скобок? Упорыши, конченные!

В смысле - слишком мало вариантов написания, по сравнению с "классикой"?


??=include <stdio.h>                                                                    
%:include <stdint.h>                                                                    
                                                                                        
int hi(void) <% return 1337; }                                                          
                                                                                        
int main(void) <%                                                                        
    int foo[10:> = ??< 0 %> ;                                                            
    foo<:0] = 1337;                                                                      
    printf("hello %d %d", foo??(0??), hi());                                            
  return 0;                                                                              
??>

% gcc -std=c99 hello.c && ./a.out
hello 1337 1337%


Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

42. "Выпуск языка программирования Rust 1.36"  +1 +/
Сообщение от Аноним (42), 06-Июл-19, 08:46 
Триграфы в сишечке - это архаизм, а попытка их выдать за "common practice" - натягивание совы на глобус и жульничество.
Ответить | Правка | ^ к родителю #35 | Наверх | Cообщить модератору

47. "Выпуск языка программирования Rust 1.36"  +/
Сообщение от Аноним84701 (ok), 06-Июл-19, 11:44 
> а попытка их выдать за "common practice" - натягивание совы на глобус и жульничество.

В примере только 3 (вот ведь совпадение!) вида скобок в разных, допустимых вариантах написания.
Где и почему вы там углядели попытку выдать эти варианты за "common practice" -- непонятно.
Как впрочем и обоснование (не)"упоротости" по количеству задействованных вариантов скобок: 3 варианта - норма, 4 варианта "упоротость!!".


Ответить | Правка | ^ к родителю #42 | Наверх | Cообщить модератору

18. "Выпуск языка программирования Rust 1.36"  +1 +/
Сообщение от Sphynkx (ok), 05-Июл-19, 15:31 
Надо как-то навести порядок с библиотеками. Репа большая, но много либ  брошенных, недописанных, прототипов/проб.. Что-либо серьезное написать может оказаться трудно по неожиданным причинам ;-))
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

20. "Выпуск языка программирования Rust 1.36"  +/
Сообщение от Аноним (20), 05-Июл-19, 16:14 
Был у нас в универе тренировочный проект на Си, вот всё хочу попробовать написать подобный на Rust, чтобы посмотреть, так сказать, что он из себя представляет и на сколько он "убийца Си"
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

49. "Выпуск языка программирования Rust 1.36"  +1 +/
Сообщение от Илья (??), 07-Июл-19, 08:16 
Держите в курсе. Не забудьте выложить на гитхаб. Вот вам описание вашего проекта:

"Simple, functional, free, idiomatic, component-based cross-platform toolkit for developing beautiful zero-cost reliable and efficient software."

Обожаю английский, можно с серьёзным видом лить воду, и получается очень даже ничего

Ответить | Правка | ^ к родителю #20 | Наверх | Cообщить модератору

22. "Выпуск языка программирования Rust 1.36"  +2 +/
Сообщение от Аноним (22), 05-Июл-19, 16:47 
Мне в Расте не нравятся две вещи:

1. Работа со строками.
Из предпосылки, что работа с Юникодом требует продуманного подхода разрабы Раста сделали странный вывод, что всю работу с Юникодом нужно просто переложить на плечи программистов. Хочешь узнать длину строки или преобразовать первый символ в верхний регистр? Страдай.

2. Организация модулей.
В Java/C#/PHP можно свободно перемещать файлы между каталогами соблюдая два условия: имя файла должно совпадать с именем класса, а неймспейс должен совпадать с путём до файла.
В Rust каждый уровень иерархии должен быть расписан в модуле уровнем выше. Хочешь сделать в src каталог common, а в common сделать каталоги json и db? Тогда в корне src, в файле main.rs будет прописан модуль common (pub mod common;), а в каталоге common будет лежать файл mod.rs, в котором будут прописаны модули db и json (pub mod db; pub mod json;), а в db и json будут свои mod.rs файлы, в которых будут прописаны остальные модули из этих каталогов.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

25. "Выпуск языка программирования Rust 1.36"  +/
Сообщение от Ordu (ok), 05-Июл-19, 17:41 
> Из предпосылки, что работа с Юникодом требует продуманного подхода разрабы Раста сделали странный вывод, что всю работу с Юникодом нужно просто переложить на плечи программистов.

Этот вывод был сделан из другой предпосылки: zero cost abstractions. Скорость выполнения программы -- это небесплатная вещь для программиста, многие абстракции усложняют написание быстрой программы, потому что прячут тормозные операции. Но если есть корреляция между тормознутостью операции и многословностью её описания, то написание программы становится сложнее, но становится проще видеть где возникают тормоза.

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

Ответить | Правка | ^ к родителю #22 | Наверх | Cообщить модератору

27. "Выпуск языка программирования Rust 1.36"  +/
Сообщение от Аноним (27), 05-Июл-19, 20:34 
>zero cost abstractions

А ниче что уже изобрели такое понятие как DLL? Правильный ответ почему они не сделали - они не осилили. Они ждут русских, китайцев, японцев, может таджиков, которые смогут в unicode. Это типичное мышление америкосов: мол ASCII нам хватает, а остальные пусть е***ся как хотят.

Пока не будет стандартной либы для unicode смысла в расте 0. Этот точно также как на хаскеле, лиспе и еще 1000 неизвестных ЯП писать код в несколько миллионов строк. И смысл даже не в популярности ЯП, а в том, что для всех неизвестных ЯП нет человеческих либ, к которым многие привыкли. И когда эти либы появятся? Верно, когда свой код станет легаси.

Я вот про отсутствие юникода только сейчас узнал и это просто феерично. Они так свой язык нахваливают, а самой нужной нынче вещи для хелловордов на любом языке сделать низя. Надо сначала запилить свою либу для юникода? который осилили нормально всего несколько комманд для тех кто не в курсе, например, libICU. ICU в этом году уже 20 лет (!) https://en.wikipedia.org/wiki/International_Components_for_U...

Ответить | Правка | ^ к родителю #25 | Наверх | Cообщить модератору

28. "Выпуск языка программирования Rust 1.36"  +2 +/
Сообщение от Ordu (ok), 05-Июл-19, 20:57 
>>zero cost abstractions
> А ниче что уже изобрели такое понятие как DLL? Правильный ответ почему
> они не сделали - они не осилили. Они ждут русских, китайцев,
> японцев, может таджиков, которые смогут в unicode. Это типичное мышление америкосов:
> мол ASCII нам хватает, а остальные пусть е***ся как хотят.

Я бы рекомендовал, прежде чем критиковать, всё же ознакомиться с документацией:
https://doc.rust-lang.org/std/str/

В модуле str есть все инструменты необходимые для разбора байтов на символы unicode и на кластеры графем. То есть, в стандартной библиотеке всё это есть, что на самом деле причиняет анальных болей, потому что подключая стандартную библиотеку ты подключаешь заодно и кучу табличек необходимых на разбор этого самого unicode'а, и dll здесь не очень помогают, потому что dll или не-dll, но таблички эти надо хранить на диске и держать в памяти, что не проблема в случае десктопа, но может оказаться недопустимым оверхедом, если ты пытаешься запилить что-нибудь типа 16-битного досовского com файла.

> Я вот про отсутствие юникода только сейчас узнал и это просто феерично.

Ты ничего не узнал. Ты прочитал и не понял, что именно прочитал. Аноним выше, как я понимаю, сокрушался по поводу того, что str/String заточены на работу с байтами, а не с символами. Скажем, метод str.get, позволяет получить слайс из str задав диапазон индексов _байтов_, а не символов. Если же тебе нужен слайс простирающийся от пятого символа, до десятого, то тебе придётся переводить индексы символов в индексы байтов, прежде чем получить нужный слайс. std::str предоставляет тебе всю необходимую для этого функциональность, чтобы тебе не пришлось бы консультироваться со спецификацией unicode'а и декодировать символы самостоятельно. Но там нет готового метода, который бы позволил тебе сделать это одним вызовом метода. Отчасти потому, что стандартная библиотека не знает, что именно тебе надо -- символы или кластеры графем? Отчасти потому, что трансляция индекса байтов в индекс символов -- это O(n) операция, но если это оставить программисту, то он может выбрать вместо этого O(N) операцию, сложность которой зависит не от размера индекса, а от размера строки: например, декодирование строки хорошо сочетается с парсингом этой строки, и можно декодировать каждый символ строки ровно один раз, а не на каждый индекс.

И именно это аноним выше назвал "всю работу переложить на плечи программиста". И именно на это я сослался баззвордом "zero-cost abstractions". Формально говоря, конечно же не вся работа перекладывается на плечи программиста, основную всё же делает std::str, но кого интересуют эти формальности?

Ответить | Правка | ^ к родителю #27 | Наверх | Cообщить модератору

30. "Выпуск языка программирования Rust 1.36"  +/
Сообщение от Аноним (27), 05-Июл-19, 21:25 
Я все правильно прочитал. Ты просто не знаешь всех возможностей ICU, чтобы говорить в таком тоне про юникод и как с ним "просто" работать.

Ты вот скажи, какой из этих двух примеров правильный:
1. https://docs.rs/alphanumeric-sort/1.0.6/alphanumeric_sort/
2. https://github.com/ucarion/natural-sort-rs

Ответить | Правка | ^ к родителю #28 | Наверх | Cообщить модератору

32. "Выпуск языка программирования Rust 1.36"  +1 +/
Сообщение от Аноним (32), 05-Июл-19, 21:36 
https://hsivonen.fi/encoding_rs/
https://crates.io/crates/encoding_rs
Ответить | Правка | ^ к родителю #30 | Наверх | Cообщить модератору

33. "Выпуск языка программирования Rust 1.36"  +/
Сообщение от Аноним (27), 05-Июл-19, 21:45 
Спасибо.
Вот все, кто там кричит, что в расте все ок с юникодом гляньте в этот проект и посмотрите сколько тут работы сделано.
Ответить | Правка | ^ к родителю #32 | Наверх | Cообщить модератору

34. "Выпуск языка программирования Rust 1.36"  +/
Сообщение от Аноним (32), 05-Июл-19, 21:49 
Чем ты не доволен в итоге?
Ответить | Правка | ^ к родителю #33 | Наверх | Cообщить модератору

37. "Выпуск языка программирования Rust 1.36"  –2 +/
Сообщение от Аноним (27), 05-Июл-19, 22:32 
>Чем ты не доволен в итоге?

Я всем доволен. Просто не надо говорить, что вот-вот любой прям ща за пару часов на коленке зафигачит аналог ICU на расте, ведь там все так продумано, что ути-пути! Вместо этого сразу кидайте ссылку на проект этого аналога, а дальше я сам оценю готов ли раст для меня и я для раста =)))

Ладно, шутки в сторону. Радует, что есть либа для конвертирования из одной кодировки в юникод и наоборот. Это значит что проект жив, развивается и можно _самому_ решать _свои_ задачи, вместо переписывания того, что имеется в других ЯП (уже 20 лет как).

Ответить | Правка | ^ к родителю #34 | Наверх | Cообщить модератору

39. "Выпуск языка программирования Rust 1.36"  –1 +/
Сообщение от Ordu (ok), 05-Июл-19, 23:17 
> Я все правильно прочитал. Ты просто не знаешь всех возможностей ICU, чтобы
> говорить в таком тоне про юникод и как с ним "просто"
> работать.

Каких например возможностей ICU, по-твоему, я не знаю?

> Ты вот скажи, какой из этих двух примеров правильный:
> 1. https://docs.rs/alphanumeric-sort/1.0.6/alphanumeric_sort/
> 2. https://github.com/ucarion/natural-sort-rs

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

Ответить | Правка | ^ к родителю #30 | Наверх | Cообщить модератору

31. "Выпуск языка программирования Rust 1.36"  +/
Сообщение от Аноним (27), 05-Июл-19, 21:33 
Еще пример https://github.com/lifthrasiir/rust-natord
Ответить | Правка | ^ к родителю #28 | Наверх | Cообщить модератору

45. "Выпуск языка программирования Rust 1.36"  +/
Сообщение от Анон54346345 (?), 06-Июл-19, 10:45 
В std:str нельзя работать с графемами.
Ответить | Правка | ^ к родителю #28 | Наверх | Cообщить модератору

50. "Выпуск языка программирования Rust 1.36"  +/
Сообщение от Ordu (ok), 07-Июл-19, 11:01 
Хм. Действительно. Но я вроде видел там класс Grapheme. Попутал видимо что-то.
Ответить | Правка | ^ к родителю #45 | Наверх | Cообщить модератору

29. "Выпуск языка программирования Rust 1.36"  +/
Сообщение от Аноним (32), 05-Июл-19, 21:02 
>> Надо сначала запилить свою либу для юникода?

Ты совсем упоролся или выпил крепко? В расте Юникод из коробки.

Ответить | Правка | ^ к родителю #27 | Наверх | Cообщить модератору

41. "Выпуск языка программирования Rust 1.36"  +/
Сообщение от epishman (ok), 06-Июл-19, 00:43 
Он не упоролся, его просто дважды на хабре упороли, и в лоре только что забанили, вот он прибежал изливать жидкость сюда :)))
Ответить | Правка | ^ к родителю #29 | Наверх | Cообщить модератору

36. "Выпуск языка программирования Rust 1.36"  +1 +/
Сообщение от Аноним84701 (ok), 05-Июл-19, 22:19 
>> zero cost abstractions
>> Скорость выполнения программы -- это небесплатная вещь для программиста, многие абстракции усложняют написание быстрой программы, потому что прячут тормозные операции
> А ниче что уже изобрели такое понятие как DLL? Правильный ответ почему

Побуду Кэпом:
если вы спрячите абстракцию в DLL, то быстрее она не станет, скорее медленнее (вызов функции VS. инлайн).
Ваш КО.

> Я вот про отсутствие юникода только сейчас узнал и это просто феерично.

https://doc.rust-lang.org/std/primitive.char.html
> A character type.
>  The char type represents a single character. More specifically, since 'character' isn't a well-defined concept in Unicode,
> char is a 'Unicode scalar value', which is similar to, but not the same as, a 'Unicode code point'.

Ох уж эти фееричные анонимы с фееричными комментариями к фееричным новостям.

Ответить | Правка | ^ к родителю #27 | Наверх | Cообщить модератору

38. "Выпуск языка программирования Rust 1.36"  +/
Сообщение от Аноним (27), 05-Июл-19, 22:36 
>если вы спрячите абстракцию в DLL, то быстрее она не станет, скорее медленнее (вызов функции VS. инлайн).

Ну не надо этого. Выше уже дали пример конвертора кодировок на расте. Иди заинлайн его. Это даже не проблема раста, это в любом ЯП так. Все что не вмещается в 25 (условно) строчек переделывается (рефакторится, называйте как хотите) в функции _со_всеми_вытекающими_ последствиями.
Зачем? Чтобы легче было как минимум это поддерживать и тестировать. В любом ЯП.

Ответить | Правка | ^ к родителю #36 | Наверх | Cообщить модератору

43. "Выпуск языка программирования Rust 1.36"  +/
Сообщение от Аноним (43), 06-Июл-19, 10:07 
>Иди заинлайн его.

Может LLVM так и сделает для некоторых функций, если посчтиает нужным. С другой стороны при использовании ДЛ гарантированно не будет произведено оптимизаций кода библиотек. https://llvm.org/docs/Passes.html#transform-passes

Ответить | Правка | ^ к родителю #38 | Наверх | Cообщить модератору

44. "Выпуск языка программирования Rust 1.36"  +/
Сообщение от Аноним (43), 06-Июл-19, 10:40 
Ситуация потихоньку исправляется. https://doc.rust-lang.org/edition-guide/rust-2018/module-sys...
mod.rs тоже больше необязателен.
Ответить | Правка | ^ к родителю #22 | Наверх | Cообщить модератору

46. "Выпуск языка программирования Rust 1.36"  +/
Сообщение от Аноним (43), 06-Июл-19, 10:45 
Раздражает - почему на первом месте при упомниании раста стоит безопасное управление паматью, а не единая, удобная система документации (в т.ч. и для сторонних библиотек).
Это кмк самый сильный буст языку из всех возможных
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

48. "Выпуск языка программирования Rust 1.36"  +/
Сообщение от epishman (ok), 06-Июл-19, 17:37 
Система документации хорошая, но в большинстве крейтов лишь нагенеренная дока, и пара дохлых примеров, дока это как раз слабая сторона, приходится постоянно в чятике сидеть а не работать...
Ответить | Правка | ^ к родителю #46 | Наверх | Cообщить модератору

51. "Выпуск языка программирования Rust 1.36"  +/
Сообщение от burjui (ok), 07-Июл-19, 20:00 
А ещё, внезапно, можно читать исходники вместо того, чтобы сидеть в каком-то непонятном "чятике" и ковырять в носу. Работнички, мля.
Ответить | Правка | ^ к родителю #48 | Наверх | Cообщить модератору

52. "Выпуск языка программирования Rust 1.36"  –1 +/
Сообщение от Zlotenemail (?), 07-Июл-19, 20:02 
Мне одному кажется, что ребята сотворили несостворимое, а именно ЯП более уродливый чем плюсы...
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

54. "Выпуск языка программирования Rust 1.36"  +/
Сообщение от Andrey Mitrofanov_N0 (??), 08-Июл-19, 12:07 
> Мне одному кажется, что ребята сотворили несостворимое, а именно ЯП более уродливый
> чем плюсы...

В питоне-3 это исправят.

Ответить | Правка | ^ к родителю #52 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
Слёрм
Inferno Solutions
Hosting by Ihor
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2019 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру