Это копия, сохраненная 4 сентября 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Текущая версия: 1.6
Планы на 2016 год: http://blog.rust-lang.org/2015/08/14/Next-year.html
Книги:
= The Rust Programming Language https://doc.rust-lang.org/book/
= The Rustonomicon https://doc.rust-lang.org/nightly/nomicon/
Известные пректы:
= https://github.com/PistonDevelopers/piston
= https://github.com/servo/servo
= https://github.com/redox-os/redox
Прошлый тред тонет тут: https://2ch.hk/pr/res/572681.html (М)
Вот каким образом развратник приступил к омерзительной операции. Его окружили четверо ржавопетухов: один держал наготове большой ночной горшок, второй взял зажженную свечу и подставил ее поближе к анусу, чтобы было лучше видно происходящее, третий сосал ему член, четвертый, перекинув через руку белоснежное полотенце, целовал главпетуха в губы. Тот, опершись еще на двоих педерастов, поднатужился, и как только появилось невероятное количество дерьма, которое обыкновенно и регулярно выдавал хозяин параши, учитывая страшное количество поглощаемого им борща, тот петух, что держал горшок, принялся восхвалять экскременты. «Какое прекрасное ржаводерьмо! — восклицал он. — Ах, господин мой, какое превосходное говно! Как красиво вы испражняетесь». Когда дифирамбы закончились, педераст, вооруженный салфеткой, языком очистил преддверие ануса, а горшечник подставил содержимое горшка под нос главпетуху и опять громогласно восхвалял его. После этого мощная струя мочи ударила в рот сосателю, который тут же проглотил всю жидкость, полотенце завершило то, что не мог сделать язык, и четверо педерастов, оставшись без дела, долго сосали поочередно язык, фаллос и задний проход распутника.
Какая мерзость эта вебмка
Скорее всего САЛО но хуй знает. Хуита для эстетствующих педрил.
Все преимущества darcs без его чудовищных тормозов.
Объявляю тред досрочно утонувшим.
> There are basically two approaches to version control: either snapshot-based (git, mercurial, svn or their ancestors), or patch-based (darcs). Historically, patch-based systems have been very simple to learn and use, but slow, whereas snapshot-based systems can be extremely fast, but are usually hard to use for more than the simple operations. As an example, cherry-picking is not intuitive in git/mercurial, and merging is sometimes plain wrong.
Что там с серво? Далеко ещё до юзабельного состояния?
У них какие-то непредвиденные трудности? ЕМНИП у них были наполеоновские планы на первую половину этого года.
У их трудности название "нельзя просто взять и написать браузерный движок с принципиально новой архитектуры с нуля".
Проблемы у того, кто эти даты назначал.
Что-то работает, что-то ещё нет. Макабу он до сих пор не осилил.
Допустим у нас есть некий тип struct SomeType. Можем ли мы используя return вернуть указатель на свежесозданный внутри функции экземпляр SomeType таким образом чтобы компилятор не наезжал по поводу того, что указатель сдох в том месте, где кончилась функция из которой мы делаем return?
Например есть функция, которая принимает путь(path) внутри себя вычисляет slice, который содержит скажем кусок пути. При попытке вернуть этот результат компилятор говорит мне что я дурак и дегенерат, бобик мёртв, вернуть его нельзя. Окай обвинения компилятора скорее всего уместны, но куда мне тогда поместить результат, чтобы он не помер при выходе из функции?
Если структура слишком жирная, чтобы класть её на стек (что странно), оберни её в Box<T>.
В любом случае, что-то должно сохранять владение.
Вот как ты делают только мудаки. Нормальные поцы дают код который надо исправить. Тупо потому что ты сам не знаешь что хочешь, а так тебе хоть укажут в чем конкретно ты не прав.
Hello world c 324 строками кода. 2 месяца разработки. 150 звезд. Продал товар даже не начиная создавать.
Там учебник больше чем весь код с комментариями
http://www.youtube.com/watch?v=erfnCaeLxSI
https://air.mozilla.org/bay-area-rust-meetup-february-2016/
имеется структура(Foo), в ней хочу замутить HashMap типа ключ-строка, значение-лямбда вида Fn(Hui) -> Govno.
Теперь:
1) Fn насколько я понял - это trait. А значит сущность безразмерная, и при попытке передать лямбду по значению, я сосну.
Получается тип значения у HashMap будет Box<Fn(Hui) -> Govno>?
2) Какой строковый тип подойдет для роли ключа? Если использовать &str, то ключ будет существовать, пока я нахожусь в области видимости этого &str. Верно ли, что в таком случае, если в дальнейшем я буду ебашить Foo-фабрику, а в ней задавать начальные значения HashMap'у, то life-checker меня обоссыт? Т.е. опять нужно выделять память в куче(использовать String)?
C#-вебмакака
https://play.rust-lang.org/?gist=d4bcb2e6902dea5a63df&version=stable
1) Получается что так. Причем сможешь хранить как лямбды, так и обычные функции. См. ссылку.
2) Не заебывайся и юзай String. Или &'static str если все ключи известны во время компиляции. Ты же не будешь хранить все ключи в одной длинной строке на стеке, так что в любом случае оно будет на куче. К чему эти преждевременные оптимизации. Будто в том же шарпе хэш мап не полностью в куче. Тем более если заполнять хэшмап последовательно большим количеством записей, то все равно все строки в куче будут последовательно лежать с минимальной фрагментацией.
Охуенно. Спасибо за разъяснение.
Более конкретно, как по-простому задать часть одной матрицы с помощью другой, что-то вроде A[a:b, c:d] = B?
Мне для этого нужно самому сделать обертку над вектором и при вставке этой матрицы проходить по строкам (или столбцам в зависимости от способа хранения), вычисляя индексы? Или такое уже кто-то запилил?
https://crates.io/search?q=matrix
Если нет того, что тебя удовлетворит - то да, пилить самому.
Посоветуйте годных ящиков.
1) Числа. BigInteger, BigRational, decimal
2) Вывод графиков (2d, линии уровня, поля). Есть обертки matplotlib или gnuplot годные?
3) GUI (нужно чтонибудь типа picturebox WinForm чтобы самому рисовать)
А, посоветуйте еще годных плагинов для Sublime Text 3.
В гугле забанили что ли?
1) https://github.com/rust-num/num
2) https://github.com/SiegeLord/RustGnuplot
3) https://github.com/PistonDevelopers/conrod
Да я дурак просто, навигацию по cargo.io осилить немогу.
Так и сделал. Сперва не мог её вернуть так как получал указатель, не догадался его разименовать в переменную-результат.
>>655459
Понимаю неудобство, но с телефона не мог достать код.
В целом эксперименты пока показывют что если код компилируется то почти наверняка приложение работает как надо сразу же. Но приходится проводить множество рефакторингов для увеличения читабельности кода.
Также есть сложности с компиляцией на windows некоторых библиотек, которые без проблем собираются под бубунтой.
Учитывая что проекту уже 3-й год - ещё ближайшие 3 года релиз чего-то более менее вменяемого сомнителен.
И да, Карл - 300мб на 1 вкладочку с двощиком. И это билд в релиз моде, без поеботы с дебагом.
Весь смак в том, что никто толком и не знает, что они подразумевали под "альфа-версией" в прошлом году. У Мозиллы даже в планах не было использовать этот проект по назначению. Это исследовательский проект как бы. Всё что у них запланировано на текущий момент - добавить одну микропиську в FF. Сейчас они вообще толком ничего не говорят, хоть и расширяют количество сотрудников.
Also, вот сами эти их тестики из презентации:
https://github.com/pcwalton/webrender-demos/
На лисе реально 1-2 кадра в секунду, но под хромом хоть и не 60fps, но прилично идет, так что врал Патрик.
> причём лагает как кусок дерьма даже на своих примерчиках
Ну так оптимизацией они и не занимались. Их задача на текущий момент чтобы эта хуйня хоть как-то работала. В команде где-то 10 человек. Gecko разрабатывают 50 человек штатных сотрудников. Сколько разрабатывает Webkit/Blink?
> он даже двощик не осилил
Можешь сделать скриншот, кстати?
Ну да, хуйня полная.
Зато какои пиар
>Подрубать гпу на мобильных платформах
Лол, как раз там это лучшее решение. У всех современных смартов и планшетов есть поддержка opengl es 2, зачем грузить cpu если можно загрузить gpu, который справится с рендером более энергоэффективно.
> он даже двощик не осилил
Именно двощик он и не осилил. Макака немного намудрила с веб-магией.
>>669948
> Аргумент уровня главы сбербанка, про то что гугл вносит nnnnnn изм. в свою ситему в год, а они - n. Дохуя разработчиков - не всегда ускорение разработки, из-за банальной толкучки.
Десять человек на такой проект это действительно немного. Тем более, что им скорее интереснее сейчас прикручивать browser.html/mozbrowser api, чем фиксить рандомные баги с вёрсткой.
>Именно двощик он и не осилил. Макака немного намудрила с веб-магией.
Суть в том, что двощик ещё выглядит в нём относительно нормально, как и фочан распидорашен совсем немножко. Посмотри на более менее круто свёрстанные сайты, например как theverge пидорасит. Тот же медиум вообще не открывается, на вроде бы простом реддите вообще падает. Хабр не скроллится и падает через минуту, сомневаюсь что везде тут прям магия и хаки кругом используются.
>Десять человек на такой проект это действительно немного. Тем более, что им скорее интереснее сейчас прикручивать browser.html/mozbrowser api, чем фиксить рандомные баги с вёрсткой.
Ну, 10 человек - это видимо толлько команда в штате, на том же гитхабе числится 400+ контрибьютеров.
> на вроде бы простом реддите вообще падает
У меня вроде норм работает. Медиум начинает грузиться, но затем падает.
В случае двачика есть регрессия: раньше он рендерился намного лучше, лишь только постинг не работал.
> Ну, 10 человек - это видимо толлько команда в штате, на том же гитхабе числится 400+ контрибьютеров.
Большинство из них сделало примерно один маленький вклад за всё время.
>раньше он рендерился намного лучше, лишь только постинг не работал.
У меня в серво он и сейчас не работает вообще ни в какой форме.
На любом, по идее. Там же LLVM бекенд.
Если я правильно понял, можно в хэшмэп свой хэшер использовать, глядишь перестанет так на интах тормозить.
Ну надож видимость для спонсоров создавать.
>Точки над бенчмарками уже расставили...
Ну, если ты это так называешь, то да. Хотя я бы сказал что один колобок обосрался выставив напоказ свою глупость.
Его уже ничто не заменит.
Тебе в /sn/ или /mg/, тут гадалок нет.
Прямо сейчас есть множество областей, где замены нет даже близко. Например, gui.
Так там же Tcl/Tk, не?
JavaScript заменит всё.
А что, предполагается по случаю очередного релиза употреблять алкоголь/вещества/баб? Если да, то люди точно потянутся к расту.
Ну хуй знает. Они что, каким-то серво из параллельной вселенной пользуются?
Хули там отмечать, если релиз каждые 6 недель, вне зависимости от изменений.
Кстати, куда делся GC из дорелизных версий?
Не обязательно, просто в нём рендеринг на GPU доступен.
В линуксе вебрендер работает не так хорошо, как в макосе, но он все ещё намного быстрее Firefox'а.
>Initial implementation of the `?` operator just landed
>The ? postfix operator is sugar equivalent to the try! macro, but is more amenable to chaining:
>File::open("foo")?.metadata()?.is_dir()
Убрали к хуям подальше, чтобы ещё и эту плашечку хейтеры не повесили. Вообще, вроде бы с нуля пишут.
Mac OS X 2.8%
Linux 16.6%
Nope?
./mach build --release
./mach run --release -- https://2ch.hk/pr/ (М) -w
Как-то так. Можно ещё browser.html поверх него навернуть.
> Windows 80.6%
> Rust's support for the GNU ABI is more mature, and is recommended for typical uses.
Ребята там еще не убились о подводные камни?
На гитхабе заголовок в описании:
>Building for Android target
пиздуй собирай и тестируй, коли интересно.
Есть `x: Vec<f32>` со значениями от -10 до 10 с шагом 0.5.
Есть функция `f(x:f32) -> f32`
Нужно сохранить `x` и соответствующий ему `f(x)`.
Попытался юзнуть `HashMap`, но rust говорит что у `f32` не реализован трейт `Ord` и `Eq`. Может есть какие-нибудь еще варианты структур?
Нужно чтобы структура была отсортирована по значениям `x` и значения `x` были уникальными.
Пройдись по всем элементам вектора, преврати каждый элемент в пару значения и функции от этого значения:
let v: Vec<(f32, f32)> = v0.iter().map(|x| (x, f(x)) );
У тебя и так в векторе значения уникальны и отсортированы, HashMap тебе (пока) не нужен. Если все-таки понадобится, используй метод collect.
Возможно, ты не понял что в векторе можно хранить пары значений?
Я немного неправильно выразился.
Есть функция f(x). Она очень затратна по вычислениям.
Я хотел бы реализовать обертку вокруг этой функции с кэшем. Есть заранее заданный интервал значений x, где я могу в порядке инициализации посчитать этот f(x). Если юзер запрашивает уже посчитанное значение, то я возвращаю его из кэша, а если новое значение, то я считаю значение функции и помещаю в кэш (ну и конечно возвращаю). Требование сортированности я чет с неба взял, а уникальность мне очень даже нужна.
Гугл подсказывает мне, что проблема в NaN, и похоже мне придется писать обертку вокруг f32 и реализовывать для нее нужные трейты.
Бля, вот очередной мудак, который не показывает что у него там за секретный правительственный код который никто не может видеть, а все должны работать экстрасенсами.
Если юзер может запрашивать только определенные значения с заданным шагом - то просто принимай от него целочисленные значения или преобразуй принимаемые значения в дроби типа 1/2, 2/2, 3/2 где делитель константа. И по делимому пили хэшмап.
Если принимаемые значения произвольные, то хэшмап тут никаким вообще боков не пойдет. Тупо по тому что операция равенства для значений с плавающей точкой вообще точно не определена. Просто почитай как float работает в современных процессорах.
Можно конечно сделать обертку с имплементацией трейта и таки сделать хэшмап, но я не понимаю что это тебе даст.
В случае с произвольными значениями надо делать сортированный вектор из пар значений (x, f(x)), с бинарным поиском по первому значению с определенной погрешностью (например 0,005).
Но тут опять же не понятно, значения f(x) прямо пропорционально зависят от x? Если да, то например если посчитан результат для 0,4 и 0,6 то при запросе 0,5 можно взять два готовых результата и отинтерполировать.
Потише, братишка, в этой ситуации.
Я просто себе задание выдумал, чтобы выполняя его я познал вкус программирования на расте. На самом деле я из DARPA
Мне просто нужен кэш, куда я буду складывать вычисленные значения. А теперь следи за руками -
HashMap get O(1)~
> В случае с произвольными значениями надо делать сортированный вектор из пар значений (x, f(x)), с бинарным поиском по первому значению с определенной погрешностью
Binary search O(log n)
> но я не понимаю что это тебе даст
Скорость даст, которую я хочу получить, используя HashMap.
> Тупо по тому что операция равенства для значений с плавающей точкой вообще точно не определена.
А пацаны то и незнают про (a-b).abs() < f32::EPSILON
Время жизни. В расте у всех данных есть один конкретный владелец.
В общих случаях компилятор сам определяет время жизни. Но иногда он у тебя хочет уточнить что ты хочешь от него. Например, ты заимствуешь какие-то данные из какой-то структуры. И ему нужно удостоверится, что заимствование (&) не переживет владеющей ею структуры.
Есть время жизни 'static. Данные с таким временем жизни данные существуют всё время работы программы. Остальные названия выбираются как тебе угодно.
Тут заявляют, что Dropbox с Go на Rust перекатился.
https://github.com/twitter/rpc-perf
Чертова сажа
Да ничего плохого.
> Servo is going to have an alpha release in June: Servo + browser.html. Help them identify issues!
https://groups.google.com/forum/#!topic/mozilla.dev.servo/dcrNW6389g4
И поясните за версионность. Мне самому нужно менять version в toml файле, или какой-нибудь cargo release сам меняет его?
Нет продакшен грейд http библиотеки на mio, нет нормального gui, из встраиваемых языков только lua. А для числодробилок и игорей вполне годен. Язык сам по себе стабильный, вроде никуда меняться не собирается настолько чтобы все переписывать пришлось. Крейты некоторые бывает меняются вплоть до переписывания половины апи, да, но об этом обычно прямо указано на страницы репы, что они в стадии разработки.
Про версионирование - никто, кроме тебя, не знает, какой выставить следующий номер версии, Cargo уж точно.
В качестве схемы версионирования используй http://semver.org, как все нормальные люди (и почти все крейты на crates.io)
В отличии от crates.io здесь либы сгруппированы по категориям.
>cargo new hello_world --bin
>cd hello_world
>cargo build --release
>смотришь размер бинарника hello_world.exe
>более двух мегов
Хули тут так много?
Я думал этот язык специально сделали на замену дидовских крестов, а оказалось совсем не так.
Я понял.
Всё повязано на libc со статической линковый. На линуксе пилят какие-то васяны отдельную привязку к musl, там в несколько кб можно обойтись. Но там вообще отдельная библиотека.
Я его больше года назад последний раз тыкал, так то работало все, это просто обертка над epoll.
Но api было по стандартам раста довольно ущербное. Сейчас есть поверх него всякие обертки, посмотри, повыбирай. На crates.io просто в поиск mio вбей, там всякие mioco, rotor и т.д.
>C скомпиль статически с libc
Это опасно же. Подключишь длл, а там, допустим, маллок по другому реализован.
А можно скомпилить статически только то что используется в проге, без всего лишнего?
С glibc, вероятно, нельзя.
Тебе это зачем? Ты прогу дискетами распространять собрался? Для микроконтроллеров все равно std не подходит, для них и исполняемый файл получается копеечный.
Ну а сам-то ты как себе это представляешь? Напиши хоть псевдокодом что именно ты хочешь.
Если я тебя правильно понял – чтобы всё боксилось и тд автоматически – нет, слишком крутая абстракция для низкоуровенного языка, лишняя магия. Разве что как плагин для компилятора что вообще, как мне кажется, очень хуёвая фича – если язык выстрелит все начнут писать на своих диалектах раста, как в мире хачкеля.
Ну я просто в контрраст статьях натыкался на такие истории: "Писал писал, потом не скомпилировалось потому что нужно боксануть, а потом туда, а потом еще это, в итоге нужно в десяти местах поменять тип". А так везде бы писался var и было бы нормально. Почему сильно крутая абстракция, в це++ есть аuто.
Блядь, ты дурак, мозга мне выебал. В расте есть вывод типов все переменные, внезапон, имеют синтаксис вида let hui = Box(Hui::new());, только он не спасает от такой хуйни никак.
Знаичт я читал очень старые посты. А чего мозг сломался то? ты же словил эксепшн?
Дело не в постах, а в том что люди которые их писали не осилили шаблоны. Без них не в плюсах, ни в расте нормально редактировать обобщённые функции/прототипировать что-то то ещё удовольствие.
Эксепшенов в руст низавизли((
>Эксепшенов в руст низавизли((
Ну как в go, только без мерзких кортежей, а со вполне ясным Result
> Эксепшенов в руст низавизли((
Как будто что-то плохое. Пердолится с отловом эксепшенов в мультипоточном коде не очень приятное занятие.
Пагни вообще охуенно сделали. Если дерьмо случилось, но не критично и вполне планово - return Err("Не получилось"). А если критичная ошибка, то panic!("НАЧАЛЬНИК ТУТ ПОТОК РАСПИДОРАСИЛО")
https://github.com/ruRust/rustonomicon
>I lead the TypeScript team from its initial release to its use in major frameworks. I also helped design parts of Clang/LLVM, Chapel, and ChaiScript.
Jonathan Turner joins Mozilla's Rust team
https://internals.rust-lang.org/t/announcement-jonathan-turner-joins-mozillas-rust-team/3278
Насколько я понял, проблемы с памятью у Rust из-за того, что mem::forget не помечен как unsafe? Ну допустим похуй на unsafe. Почему деструктор то не вызвать?
Чтобы была возможность стрелять в ногу, очевидно же!
> Почему деструктор то не вызвать?
Потому, что он нужен именно для того, чтобы не вызывать деструктор.
Он не помечен, потому что, а хуй его знает почему. На самом дело много дискуссий на эту тему, но в итоге пришло к тому что вызов деструктора в расте не гарантирован, а утечки памяти не нарушают memory safety. И что можно воспроизвести поведение mem:forget и без него, не использую при этом unsafe.
Как раз из за этого говна scoped треды из std вырезали.
Создаешь Rc, счетчик внутри равен 1. Делаешь клон Rc, счетчик становится равным 2. Кладешь клон Rc в себя же.
При выходе из скопа в первоначальном Rc уменьшается счетчик и становится равным 1. Проверяется, что счетчик не 0 и деструктор не вызывается. В итоге содержимое навсегда зависает в памяти.
Мне кажется это уже особенность самих указателей с счетчиком. В C++ вместе с shared_ptr завезли weak_ptr, чтобы циклы разбивать.
Хватит терпеть циклы! Даешь УМНЫЕ умные указатели!
Weak есть в Rust. У них поведение с плючами идентичное. Rc +1 при клонировании делает, а Weak не учитывается в счетчике.
Я к тому, что
> 2016
> AI подебил в го
> утечка памяти из-за циклических ссылок
Ничего круче счетчиков пока не придумали?
>>697629
Ну так все как в С++, проблема в том что утечка памяти не так страшно, но если forget'нуть scoped тред, то это приведет к дедлоку в главном треде. Поэтому выпилили не Rc, а scoped треды, а forget сделали safe.
Но никто не мешает эти же scoped треды с crates.io забрать и пользоваться аккуратно.
Имхо, помечать forget как safe это идиотское решение. Как минимум из-за RAII. Память, файлы, сокеты, все завязано на этот механизм. И тут на тебе возможность наебать систему.
Ну сборщик мусора это уже что-то тяжелое. Я имел ввиду додумались ли бородатые дядки до какого нибудь другого умного указателя.
Да и сборщик мусора тоже подвержен циклическим ссылкам. Питон до сих пор вроде (http://stackoverflow.com/questions/8025888/does-python-gc-deal-with-reference-cycles-like-this) не может разрубить цикл.
Он будет медленнее когда у тебя много долгоживущих объектов. Когда куча маложивущих - подсчёт ссылок разорвёт память как полотно и целостность памяти пойдёт по пизде, тут gc выиграет и неоднократно.
>Когда куча маложивущих
Происходит куча stop-the-world'ов, не? По крайней мере в джаве используют приватную ансейф фичу что бы избавлятся от кучи побочных объектов.
> подсчёт ссылок разорвёт память как полотно и целостность памяти пойдёт по пизде
Поясни за фрагментацию. Я сам использовал только языки со сборкой мусора, и не очень понимаю в чем фишка.
Вот например память, со структурой A. (sizeof(A) == 3)
[A|A|A| | | | |]
Добавляем 2 структуры B (sizeof(B) == 2)
[A|A|A|B|B|B|B| ]
Удаляем первую структуру B
[A|A|A| | |B|B| ]
Дефрагментация ?
Вроде и память есть, но структуру А уже не добавить.
Как такую хуйню обрабатывать? Когда заморачиваться о такой хуйне?
А теперь представь что из одного источника stop the world у тебя их столько, сколько элементов в массиве.
Тогда почему языки без сборки такие быстрее языков со сборкой? Тем более наверняка удаление того же массива не по одному элементу, а раз по блоку памяти.
Потому что перечитай ветку сообщений, вася. Есть конкретная ситуация где гц быстрее подсчёта ссылок – и всё, я не писал что это манна небесная.
> Destruction is deterministic, and will occur as soon as the last owner is gone.
>>697564
> На самом дело много дискуссий на эту тему, но в итоге пришло к тому что вызов деструктора в расте не гарантирован
>> вызов деструктора в расте не гарантирован
Разрабы раста ловко себя обоссали.
> as soon as the last owner is gone
Ну так всё верно. Просто the last owner не может быть gone, если Rc владеет сам собой.
Есть вопрос по составлению View. Я сам избалованный MVC-ребенок, и мне интересно как вы решили проблему генерации View. Суть такова, что есть SPA, который возвращается при заходе юзера на домашнюю страницу, и API, который дергается из SPA/другого клиента. Нужен какой-то темплейт движок, который это добро рендерить будет. Какие middleware лучше подключить?
У меня ощущение, что либы еще достаточно сыроваты для сириуз бизнеса. Постоянно что-то недоделано, кривовато
1) Да, как и сам раст находящийся в разработке до сих пор.
2) Для сириус бизнеса в принципе-то юзать можно, только явно не для веб девелопмента. Какой гибудь плагин для nginx написать подойдёт идеально, делать на нём весь бэкэнд – пустодроч.
Я думаю, переписать уже готовый бэкэнд на раст довольно тривиально. А вот с нуля писать это пока что такое себе. Тем более при нахождении всех вэб либ в глубокой преальфе.
Если сравнивать со скриптовыми и управляемыми языками доминирующими в этой области - нихуя не тривиально переписать это всё, а потом ещё искать того кто всё это говно поддерживать будет.
Чо сразу на C++ то не переписать сайт-то? Там с поддержкой и преальфой библиотек проблем нет, лол.
Ещё бы он хотя бы начал нормально видеть импотры с макросами - цены бы ему не было.
http://huonw.github.io/blog/2016/04/memory-leaks-are-memory-safe/
Спасибо. Хотя хотелось бы чего-нибудь покрасивее, такую хунту я могу и в крестах делать, хотя даже там enum class ввели ради безопасности.
Недавно начал упарываться по расту. Пока всё нравится. Но интересует один вопрос. Можно ли в расте создавать треды (процессы) подобные эрланговским? Чтоб можно было несколько тысяч запустить и обмениваться сообщениями с ними. Я так понимаю что если обычные треды создавать в таком количестве, то операционка может вмешаться и прикрыть это дело, или я ошибаюсь?
Приветствую.
http://devdocs.io/rust/
Рекомендую в закладки добавить, если ещё не сделал. Там можно закачать всё и хранить автономно в браузере.
По твоему вопросу. Обмен между потоками можно осуществлять через вот это:
http://devdocs.io/rust/std/sync/mpsc/index
Помимо этого, в crates можно найти и иные решения по каналам и потокам.
Стандартно на данный момент нормальных легковесных не предусмотрено.
Изначально назначение языка как раз и было
Ой, не дописал.
Изначально назначение языка как раз и было на эту тему, само название Rust идёт откуда-то там из биологии и связано с данной темой.
Но пока приходится ограничиваться системными потоками.
Говоришь так будто сожалеешь, если бы грин треды оставили как часть языка, то у нас был бы совсем другой ненужный rust. А так мы получили такую-то няшку, к тому же почти ничто не мешает запилить рантайм для грин тредов, просто никто еще этого не сделал.
https://github.com/rust-lang/rfcs/blob/0806be4f282144cfcd55b1d20284b43f87cbe1c6/text/0230-remove-runtime.md
Но в расте были не нативные треды.
Сасай))
https://github.com/steveklabnik/blog.rust-lang.org/blob/1.8-announcement/_posts/2016-04-14-Rust-1.8.md
В блоге почему-то не вывесили еще.
Я так понял что в основном косметические улучшения пошли.
> cargo init can be used to start a Cargo project in your current working directory, rather than making a new subdirectory like cargo new.
Вот это заебись.
А сразу использовать нормальную версионировку, а не издеваться над системой счисления.
Ну так они и используют. В каждой версии ведь что-то добавлено кроме багфиксов.
Всё по semantic versioning.
Хз что за семантическое версионирование, но для моего парсера в мозгу цифры 1.1 и 1.10 идентичны (как и 1.10000 и тд).
Кроме багфиксов ещё баг/фича-фиксы в языке.
Наверное очень популярные вопрос среди тех кто знакомится с растом. Поясните за параметры времени жизни.
Вот пример:
struct Customer<'a> {
car: Option<&'a Car>
}
>Теперь компилятор будет знать, что у экземпляра структуры Customer время жизни должно быть таким же как и у экземпляра структуры Car или меньше.
Почему компилятор не может сам автоматом подставить эти параметры? Все примеры, что я видел - какие-то слишком очевидные, более того, я когда писал свой небольшой код - нигде не ставил параметры, и компилятор ругался "ставь их", и я просто наставил везде и прога скомпилилась и работала верно. Почему компилятор не может за меня это делать? Я подозреваю что есть какие-то более неочевидные случаи использования параметров времени жизни. Может приведет кто пример?
Есть С-функция которая возвращает "%звездочка%const c_char" который нужно преобразовать в строку, как проверить возвращаемое значения на null pointer?
Вот что намудрил: https://ideone.com/FnH1jn
Пример 1: Крашится если c_function возвращает указатеть на null или возвращает корректное значение.
Пример 2: При null указателе возващает дефолтное значение "is_null_value" иначе всегда пустая стока.
Тогда пока не лезь в unsafe и ffi. Как прочитаешь rustbook и разберешься с основами, можно начинать читать rustonomikon, там как раз то что тебе нужно, более глубокое погружение в язык и небезопасные возможности, без которого нормальную связь с библиотеками на других языках не осилишь.
https://doc.rust-lang.org/nightly/nomicon/
https://github.com/ruRust/rustonomicon
Наркоман? Током ебнуть?
Версия это не вещественное число.
1.10 != 1.1
И как твой мозг представит 0.21.3 ?
> Почему компилятор не может сам автоматом подставить эти параметры?
Может он еще за тебя код писать будет, и проектировать модели?
'a - это гарантия того, что ссылка на Car будет жить столько, сколько Customer. Это ты и указываешь, расставляя 'a в своем коде.
Как тут например расставить параметры?
struct Customer {
car: Option<& Car>,
hui: Option<& Hui>,
pizda: Option<& Pizda>
}
Ну поставит например компилятор
struct Customer<'a> {
car: Option<&'a Car>,
hui: Option<&'a Hui>,
pizda: Option<&'a Pizda>
}
А по моей модели нужно
struct Customer<'a, 'b> {
car: Option<&'static Car>,
hui: Option<&'a Hui>,
pizda: Option<&'b Pizda>
}
> Почему компилятор не может сам автоматом подставить эти параметры?
Может он еще за тебя код писать будет, и проектировать модели?
'a - это гарантия того, что ссылка на Car будет жить столько, сколько Customer. Это ты и указываешь, расставляя 'a в своем коде.
Как тут например расставить параметры?
struct Customer {
car: Option<& Car>,
hui: Option<& Hui>,
pizda: Option<& Pizda>
}
Ну поставит например компилятор
struct Customer<'a> {
car: Option<&'a Car>,
hui: Option<&'a Hui>,
pizda: Option<&'a Pizda>
}
А по моей модели нужно
struct Customer<'a, 'b> {
car: Option<&'static Car>,
hui: Option<&'a Hui>,
pizda: Option<&'b Pizda>
}
Придется свой какой-то велосипед с использованием unsafe использовать, как это сделано в реализации Vec, иначе бы мы охуели создавать в стеке вектора по миллиону элементов и потом копировать в кучу их часами. Но если всё заканчивается unsafe, то нахуя нужен раст?
или наслаждаться переполнением стека
zero-cost по мнению разрабов это "минимальная стоимость".
https://doc.rust-lang.org/book/ownership.html
> Rust has a focus on safety and speed. It accomplishes these goals through many ‘zero-cost abstractions’, which means that in Rust, abstractions cost as little as possible in order to make them work.
Для Box новый синтаксис пилится. Пацаны что-то не поделили с Box, Rc и Cell, и в итоге решили использовать Box::new, пока все не уляжется, и api библиотеки не стабилизируется.
https://github.com/rust-lang/rust/issues/28008
То есть box однажды появится в стейбл версии.
А в чем конкретно проблема? Что не поделили они там? Такое ощущение что проблемы на стороне LLVM.
Там довольно много чего не устоялось.
Вот tracking issue: https://github.com/rust-lang/rust/issues/22181
Та же что и в других языках, например, dependency injection, service locator.
Есть перевод rust book https://github.com/ruRust/rust_book_ru и rustonomikon https://github.com/ruRust/rustonomicon
код:
let x = 1;
let c = 'c';
match c {
x => println!("x: {} c: {}", x, c),
}
println!("x: {}", x);
вывод:
x: c c: c
x: 1
Текущий скоуп перекрывает имена родительских скоупов. в данном слуае в матче у тебя x => .. этот икс перекрывает тот икс что let x = 1;
это понятно, но откуда у x значение с, где оно присваивается? Ведь если через оператор => присваивается вывод println то в x будет совсем не c
Потому что паттерн матчинг так работает. У тебя в паттерне переменная, что говорит компилятору "возьми то, что я там пытаюсь заматчить и сделай так, чтобы оно называлось именем этой переменной".
Извини анончик, писал пост про то как мы с тобой няшимся под пледиком и я рассказываю тебе про раст на примере розовых единорогов и бабочек, но отключилось электричество и все пропало. Так что коротко и зло, к тому же тебе уже ответили.
Ты читать что ли не умеешь?
In other words, x => matches the pattern and introduces a new binding named x. This new binding is in scope for the match arm and takes on the value of c. Notice that the value of x outside the scope of the match has no bearing on the value of x within it. Because we already have a binding named x, this new x shadows it.
Здесь у тебя нет сравненния, так как х затерла объявление твоей переменной, но эта новая х не инициализирована, следовательно здесь нечего сравнивать и раст закономерно решает что ты просто используешь патерн для связывания, что-то наподобие `x @ любое возможное значение` (так как в матче у тебя только одна рука). Поэтому у тебя просто создается биндинг (связывание) к значению c.
Это то же самое что и https://goo.gl/QpMHc3
Или чтобы тебе было еще понятнее это немного похоже на https://goo.gl/3LifL8 хоть и не совсем то.
Короче, перечитай еще раз главу про паттерн матчинг.
> Короче, перечитай еще раз главу про паттерн матчинг.
Спасибо, походу и правда надо еще читать дальше растбук, всеровно еще есть не до конца понимание
В конкретно твоем примере match не имеет смысла.
Фактически его можно представить вот в таком варианте:
https://play.rust-lang.org/?gist=f18337e68bfd66eedbeb0cbf740a28e9&version=nightly&backtrace=0
Т.е. эти две x - разные переменные в разных скопах. Если тебе надо это избежать, используй разные имена.
Твой пример имел бы смысл, если бы ты, например, сделал несколько вариаций:
https://play.rust-lang.org/?gist=df4400b0fdcd09b35fe7792a6713bc0a&version=nightly&backtrace=0
А, вообще, паттерн-мэтчинг и деструкторы - классные штуки. Не зря на них много внимания в мануалах сосредоточено.
С ними можно много чего делать.
https://play.rust-lang.org/?gist=1305382e6a7484d1b2b7ce37dd1785a5&version=nightly&backtrace=0
Rustonomicon где-то переводили, там все узкие места и всё про ансейф облизано 10 раз.
Думаю он не это имел ввиду.
https://rustycrate.ru/новости/2016/04/25/colaboratory-rust.html
Мир, короче, всем.
Тоже видел это. Прямо семимильными шагами к светлому будущему движемся.
А я уж думал каноникал решили мир на расте переписать, ну вот.
http://benchmarksgame.alioth.debian.org/u64q/performance.php?test=fasta
Всем привет от колобка, ЛАЛки!
https://play.rust-lang.org/?gist=ea7718d84b14fa6c76fb013afa9ff358&version=stable&backtrace=0
А так не работает?
https://play.rust-lang.org/?gist=d73bd8ced4a8b434d36c75a25151d608&version=stable&backtrace=0
Ты даже документацию по функции с которой у тебя возникла проблема не в силах прочитать?
https://doc.rust-lang.org/std/mem/fn.drop.html
>While this does call the argument's implementation of Drop, it will not release any borrows, as borrows are based on lexical scope.
Да уже потом понял, что тупанул.
Тут даже вопрос не в функции, а по механизму заимствования.
Потому что drop пустая и я от неё ничего не ожидал больше, чем от какой-либо другой функции.
pub fn drop<T>(_x: T) { }
А вот то что заимствования не освобождаются при передаче в функцию - в этом я ступил. Обычно же его передаешь как-нибудь так:
https://play.rust-lang.org/?gist=335ae238f07ac3d8c94c5d8399eba014&version=stable&backtrace=0
И не задумываешься об этом.
Спасибо за наводку.
>Очень далеко, ничего интересней простеньких демок не завезли.
нихуя себе простенькая демка, 500fps при анимации сотни дивов с тенью https://youtu.be/erfnCaeLxSI?t=125
У них текущая цель - чтобы 5 сайтов конкретных более-менее отображалось.
Наверно потому, что он на гпу всё рендерит?
Я посмотрю как его на телефоны/ноутбуки будут проталкивать, это ведь дикий ++ по энергопотреблению.
Еще кто-то рендерит не на гпу?
Все на гпу рендерят. Просто гекко и вебкит не настолько "глубоко" это делают.
Появился интерес к изучению сабжа, вот только есть небольшой анальный зуд на многие термины типа "лямбда-функции", "hashmap" и прочее.
Где лучше всего читнуть про это, чтобы вкатываться в язык уже подготовленным?
Нигде не читай заранее, в любом учебнике всё описывается подробно, там ничего сложного нет.
Ну или можешь гуглить аналоги на няшной (или какой у тебя там основной язык), я так часто делаю когда не понимаю сати какого нибудь паттерна.
Если планируешь явамакакой работать – читай. Я ирл вне явы сталкивался только с визитором и синглтоном, сомнительная польза от их знания.
Чтобы знать, какое говно мне пригодится, а какое - нет, надо хотя бы минимально в них разбираться.
А то как начал читать тред или смотреть описания языка, так натыкаюсь на всякое абстрактное говно, которое не знаю.
Меня просто интересует альтернатива С, да и в целом развиваться надо. Всякие ООП и прочее в моей области редко нужны.
Наверное книги по сипп читать лучше. Там полно инфы на русском. А в доках Раста все на английском. Алсо вот про эмбедед https://zinc.rs
Ангельский для меня - не ограничение, иначе хуевый бы из меня был эмбеддер, в смысле ещё хуевее, чем сейчас.
Читну, спасибо.
Просто пропатч бинарник после компиляции. Там один байт всего поменять, по-моему.
Бляяять. Ты из скриптопараши/явадотнетов вкатываешься чтоле?
Если у тебя нет бинарника – да, тебе в любом случае придётся его собирать отдельно.
А потом нужно просто импортировать экспортируемые бинарником функции, как в экземпле, всё.
лол, канешн самые компилируемые языки были у меня это typescript и coffeescript. я прост не понял почему у меня flate2 скомпилилось само, хотя там тоже код на си. как различать биндинги на внешний код от биндингов на си код который идёт в комплекте?
>я прост не понял
В таких случаях нужно ковырятся в проекте.
https://github.com/alexcrichton/flate2-rs/blob/master/miniz-sys/build.rs#L6
Вот так хитро он сам компилирует свои сишные зависимости.
> как различать биндинги на внешний код от биндингов на си код который идёт в комплекте?
Биндинги - просто объявления функций обрамлённые в extern. Раст не си/плюсы, и тут неимпортируемый код всегда пишется там же где объявляется.
А как там интеграция с C++? Шаблоны с енумами вызвать из раста без ручного unsafe байтоёбства (который сломается после первого обновления шланга) хоть как-то можно?
А то сейчас пишу на F#+WPF, а хочется попробовать что-нибудь функциональненькое и одновременно скоростное (и с няшным гуем). Но видимо расту ещё до этого срать и срать.
>Шаблоны с енумами
Ааа блять, не пиши хуйни. Шаблоны с енумами остаются в компайлтайме, разница в манглинге у разных компиляторов и тд – это говнище не стандартизировано, и его никогда не получится импортировать никуда нормально. Даже в D их интерфейсить не получилось (это такие рефакторнутые плюсы, если чо).
>Но видимо
Но видимо ты плохо понимаешь зачем нужен раст. Пишешь гуй – используй высокоуровенный язык. Не еби мозги себе и окружающим.
Неполноценное альфа-дерьмецо. https://github.com/cyndis/qmlrs/issues/43
А вот это уже лучше. Надо будет глянуть.
>>745398
> Ааа блять, не пиши хуйни.
Что не пиши? Раст без дикий костылей вообще половину шаблонов С++ не осиливает (хотя учитывая, что эти сами шаблоны и есть костыли, то всё нормально). Или C++ библиотеки нинужны?
> Но видимо ты плохо понимаешь зачем нужен раст.
Для чего же? Хоть ORM или аналог LINQ завезли? Или базы данных тоже нинужны, а нормальные посоны ебашат чистым SQL?
> Хоть ORM или аналог LINQ завезли?
https://www.rust-lang.org/
> Rust is a systems programming language
> ORM
> LINQ
>Раст без дикий костылей вообще половину шаблонов С++ не осиливает
Повторюсь: ты не понимаешь как эти шаблоны в крестах работают и, видимо, не умеешь читать.
>Или C++ библиотеки нинужны?
Ну сразу видно ни разу не писавшего на плюсах. Абсолютное большинство библиотек (та же Qt) их вообще не используют низачем, кроме как ради своих контейнеров.
>Или базы данных тоже нинужны
Бери высокоуровенный язык и ебашь гуи с крудами на нём. На расте ни ORM, ни LINQ адекватных аналогов нету и не будет. А ещё memory-safety модель языка будет тебе только мешать писать подобные вещи.
> Бери высокоуровенный язык и ебашь гуи с крудами на нём.
Т.е. раст вообще ни для чего нинужен? Зачем тогда эти дибилы с мозилы делают на нём браузер?
> А ещё memory-safety модель языка будет тебе только мешать писать подобные вещи.
Что-то уровня: А ещё type-safety будет тебе только мешать писать подобные вещи. от любителей javascripta и прочего подобного дерьмеца.
> неебической платформой для гуя из коробки
В .NET Core, кстати, весь гуй уже выкинули (для кроссплатформенности). А что там будет с .NET Framework не совсем понятно. Может от него вообще откажутся (а может наоборот откажутся от кора). WPF (а уж тем более формочки) уже сейчас считается устаревшим, да и работает только на винде. Предлагаешь гуй на html+css лепить и таскать с собой вебкит для рендеринга?
> ORM
ORM даже на плюсах есть. Хотя с кем я разговариваю. Тебе же ничего нинужно кроме байтоёбства.
> нет гуи с крудами
> раст вообще ни для чего нинужен
Ты тредом ошибся, маня.
> Зачем тогда эти дибилы с мозилы делают на нём браузер
И конечно, мозилы будут писать нотариально заверенные письма о своих намерениях дауненку с двощей, который
1) не может погуглить
2) не может скачать IRC клиент, зайти на канал разрабов раста и спросить.
Но давай ты сейчас попробуешь включить мыслительный нерв и порассуждать:
У мозилы возникли некоторые проблемы с C++ в фуррифоксе ->
нет нормальной замены C++ с решением существующих проблем ->
решили создать новый язык для решения существующих проблем.
> Что-то уровня: А ещё type-safety будет тебе только мешать писать подобные вещи. от любителей javascripta и прочего подобного дерьмеца.
Теперь точно можешь пиздовать отседова, так как сразу видно что с borrow-checker ты не сталкивался.
> impying ORM на C++ такая уж важная вещь
Хотя крудошлепу вроде тебя это очень важно.
Если бы не был таким долбоебом, то мог бы уже найти http://www.arewewebyet.org/topics/database/ где ясно что ORM так то разрабатываются, но еще сырые.
Так что соглашусь с аноном выше.
> Но видимо ты плохо понимаешь зачем нужен раст.
Ой-ёй, кокой ты злобный. С твоих слов раст это вообще какой-то волшебный язык, всё чего нет - абсолютно нинужно. Во как. Фанбойство? Или магия языка программирования?
> Теперь точно можешь пиздовать отседова, так как сразу видно что с borrow-checker ты не сталкивался.
Ой всё. Видимо ты сам туповат, если borrow-checker для тебя вызвало хоть какие-то проблемы, хотя в интернете всё это по 200 раз разжёвывается для самых тупых (вроде тебя). А на расте я писал ещё с бета-версии. И вижу, что пока кроме улучшенного высокопроизводительного байтоёбства в нём ничего и нет. Хотя нет, вот хоть асинхронный HTTP-сервер завезли[1] (13 часов назад, гы-гы-гы), прогресс на лицо. Хотя ты даже что такое асинхронный HTTP-север не знаешь. И день назад бы утверждал, что он абсолютно не нужен в таком языка программирования как раст.
[1]: https://github.com/hyperium/hyper/pull/778
> С твоих слов раст это вообще какой-то волшебный язык, всё чего нет - абсолютно нинужно.
Наркоман?
Я говорю что раст в первую очередь создан мозилами для своих проектов. Все остальное пилится силами сообщества.
> Видимо ты сам туповат, если borrow-checker для тебя вызвало хоть какие-то проблемы,
А теперь ты кидаешь ссылку со своей реализацией LINQ или хотябы ORM.
> А на расте я писал ещё с бета-версии...
> мам мам сматри я олдфак тралю нюфагов
> А теперь ты кидаешь ссылку со своей реализацией LINQ или хотябы ORM.
Но зачем? Это мне для домашних проектиков нужно. А то у очень больно смотреть как даже после обработки ngen'ом .net-приложение порой тормозит. Но видно не судьба. Самому писать лень, очевидно же.
Хотя вот уже делаю биндинги поверх [1]. Правда вряд ли я этим поделюсь с сообществом, потому что вангую, что полученный код будет невероятно уродлив (а может и не будет).
> > мам мам сматри я олдфак тралю нюфагов
Никто тебя не траллит. Просто я действительно не понимаю, что там может быть сложного.
[1]: https://github.com/filcuc/DOtherSide
Ну куда ж мозилле до анона с двощей. Вот он бы им все правильно сделол.
> Мозилла - единственная более-менее крупная компания, у которой хватило яиц навести порядок.
А теперь смотри:
> Хоть ORM или аналог LINQ завезли?
> memory-safety модель языка будет тебе только мешать писать подобные вещи.
> Что-то уровня: А ещё type-safety будет тебе только мешать писать подобные вещи
> сразу видно что с borrow-checker ты не сталкивался.
> ты говно - я Д`Артаньян
> покажи свой LINQ \ ORM
> Это мне для домашних проектиков нужно
> pic related
Ок. Ты победил.
Тащем-та тот же гугл гораздо больше языков программирования создал, чем мозилла. Даже пытался няшный дарт протолкнуть, но веб-макаки отказались от ЯП, который имел слишком слабый запах говня, и остались верны старому доброму яваскрипту. Да и вообще сейчас любая более менее крупная ит-корпорация обязательно создаёт свою OS (на базе андроид), свой ЯП (самый-самый быстрый, обычно поверх JVM), свою бд (для верибиг-дата) и свой бев-фреймворк (который почти не тормозит). Просто раст выделяется из этого всего тем, что это системный язык.
А что на домашних проектах нужно обязательно страдать и байтоёбить? Даже немножко абстракций и сахарку низзя?
> страдать и байтоёбить
Еще раз блять повторяю. >>745525
Почитай определение системного программирования.
Хочешь сахарку - ищи другой язык\платформу. Раст для тебя еще сырой.
Системное программирование и сырой это разные вещи. Раст попросту сырой. Отсутствие некоторых фич к какому-то там волшебному системному программированию, которое видимо летает над языком и уничтожает все абстракции ещё до того как они появятся, не имеет никакого отношения.
Раст не попросту сырой.
В стандартной поставке нет средств ORM и LINQ потому что rust - системный язык.
Дизайнерам было похуй на крудоблядков, потому что язык предназначен для другой аудитории.
Сырой он в плане того, что либы сырые, что очевидно.
Вот здесь и переплетаются две разные вещи, понять которые ты не способен.
> волшебному системному программированию... бла бла бла...
У тебя батхерт какой-то. Иди обмажься C#. Ах да
> А то у очень больно смотреть как даже после обработки ngen'ом .net-приложение порой тормозит
У мсье просто руки из жопы, что круды тормозят, вот он и изливает тут душу, что в другом языке нет нужных ему фич.
имеется ввиду box zalupa, допустим деалем матч и паттерн Huita(box zalupa) => {...}, говорит о том что zalupa обернута в бокс. Очень удобно.
> В стандартной поставке нет
И не должно быть. Только это не из-за того что он системный.
> У тебя батхерт
У всех баттхёрт кроме тебя.
> У мсье просто руки из жопы
Прост ты никогда не работал с нетом. И да мне просто интересно было узнать как там у раста с гуем и базами данных, а в ответ только "кудах, нинужно, мозилла лучше знает, системный язык, а чего добился ты".
> Прост ты никогда не работал с нетом.
Обосрался, маня. 4 года на asp.net крудошлеплю. Был в стартапе со спагетти-кодом - ничего не тормозило. В студенчестве писал диплом решал систему дифуров - числодробилка слишком громкое название - ничего не тормозило.
> И не должно быть. Только это не из-за того что он системный.
Тогда вопрос
> Для чего же [нужен раст]? Хоть ORM или аналог LINQ завезли?
решен.
> У всех баттхёрт кроме тебя.
Нет ты.
> "кудах, нинужно, мозилла лучше знает, системный язык, а чего добился ты"
Пиздоглаз или жопочтец?
> Я говорю что раст в первую очередь создан мозилами для своих проектов. Все остальное пилится силами сообщества.
Хитрые маняврирования:
> И да мне просто интересно было узнать как там у раста с гуем и базами данных
> Зачем тогда эти дибилы с мозилы делают на нём браузер
> pic related[1]
> 4 года на asp.net крудошлеплю.
> мам мам сматри я олдфак тралю нюфагов
> Был в стартапе со спагетти-кодом - ничего не тормозило.
Очевидно, ты не писал десктопные приложения, сложнее, чем решалка системы диффуров.
> Тогда вопрос решен.
Действительно, мозилла и сообщество сказали нинужно, значит нинужно.
> Пиздоглаз или жопочтец?
> Приводит аргумент >мозилла лучше знает< из списка.
Да ты у нас сам тот ещё жопочтец. Попу хоть после проигрываний вытираешь?
> Приводит аргумент >мозилла лучше знает< из списка.
> Я говорю что раст в первую очередь создан мозилами для своих проектов. Все остальное пилится силами сообщества.
Мозилла не юзает эти технологии. Коммюнити пилит либы. Где ты тут увидел "мозилла лучше знает"? Дерьмо с глаз убери, мудила.
> Попу хоть после проигрываний вытираешь?
Твоими руками подтираю, благо их кривизна идеально охватывает межягодичное пространство.
> Очевидно, ты не писал десктопные приложения, сложнее, чем решалка системы диффуров.
Очевидно, ты не писал %everything else%. Хотя какая разница, сразу видно твои познания, если ты ноешь тут про недостаток ORM и LINQ в системном языке, и гонишь на мозиллу, которые этим языком решают свои проблемы.
> системном языке
Ты так и будешь продолжать повторять эту мантру? У тебя кроме раста и ассемблера системные языки вообще есть? Или отсутствие библиотек это у нас теперь новый признак элитарной системности?
Ты какой-то дурашка, серьёзно. Тебе 21 раз сказали что это системный язык (читай для хуйлоад сервисов, риалтайма и прочего) с крутой системой типов, который решает проблемы в своей области, и в крудошлёпстве, где чтобы напороться на решаемые языком проблемы нужно очень постараться он нахуй не нужен. Это не того уровня язык, чтобы шлёпнуть кнопочку, и в контролере прописать запрос к бд одной строчкой. В чём суть твоего истегания говном здеся?
другой анон
> читай для хуйлоад сервисов, риалтайма и прочего
Давай на чистоту. Даже в этих областях он не используется (можешь привести один контр-пример из дропбокса, но ведь больше у тебя ничего и нет) из-за своей сырости. Он не системный в твоём понимании. Никто не запрещает писать на нём всё что захочешь. Он просто сырой.
Его нигде не использую потому что нет библиотек, писать свою велосипеды вместо использования существующих никому не всралось представь себе, чего стоит перенести хотя бы один рендер любого ААА движка на него, который писался десятками лет на плюсах, в этом направлении - да, он очень сырой, у него даже IDE с базовой навигацией по коду нету. В отличии от Goвна порог вхождения выше => библиотеки появляются очень и очень неспешно.
This place is supposed to be free of hate speech.
> системный язык
> мантра
Очень смешно. А вообще да, буду повторять. Могу даже ссылку на сайт раста https://www.rust-lang.org/ прикреплять и цитировать
> Rust is a systems programming language
> Или отсутствие библиотек это у нас теперь новый признак элитарной системности?
А вот тут я непонял. Где ты элитарность увидел? В языке нет сахара по твоему вкусу и готовых либ, и он уже для тебя элитарен?
>>745952
Давай на чистоту. Где ты видел использование С\С++ для крудов? Либ-то дохуя там.
> Никто не запрещает писать на нём всё что захочешь.
Но они ПРОСТО не подходят для этих задач. Ты просто обосрешься, пока реализуешь нормальный прототип, а потом придется перепиливать из-за изменяющихся требований, чтобы в итоге получить несопровождаемое дырявое говно с уязвимостями типа Heartbleed.
> Ты просто обосрешься, пока реализуешь нормальный прототип, а потом придется перепиливать из-за изменяющихся требований, чтобы в итоге получить несопровождаемое дырявое говно с уязвимостями типа Heartbleed.
Т.е. раст лучше вообще не использовать чтобы не получить уязвимости? Значит уже и сам раст нинужен? Вот это поворот.
Но ведь в системных приложениях тоже изменяются требования и там тоже очень важна безопасность. Зачем там использовать такой небезопасный язык как раст?
Ну ладно. Странно конечно, даже сами фанаты раста говорят, что он не нужен. Первый раз такой вижу.
Ты контекст проебал, зеленый.
> С\С++ для крудов
>>746043
> небезопасный язык как раст
Ну это вообще пушка.
Но ведь ты сам сказал, что раст небезопасен и лучше его не использовать. Причём тут контекст? Если вместо крудов я начну его использовать для системного программирования он волшебными образом станет безопасней и больше никаких уязвимостей написать на нём будет невозможно, я так понимаю? Это у нас определения "языка системного программирования" - язык, у которого магическим образом понижается безопасность если его не использовать для системного программирования. Интересно, а серво - это системное программирование? Мозилловцы знают, что рас у них слишком небезопасен и им лучше вместо браузера делать сразу операционную систему для её, безопасности, повышения?
поехавший, уходи. у тебя паттерн "я не согласен, значит нужно найти до чего доебаться, ок, я буду брутфорсом перекручивать слова, а когда мне покажется что это достаточно ебанутая трактовка в отрыве от контекста - запощу в тред разбавляя знаками вопросов"
если начать пилить велосипеды на каждую хуйню - то будет овер 9000 дырявых велосипедов. а комьюнити ещё не запилило "каноничные" либы, которые дохуя людей смогут ревьюить и контрибьютить. поэтому да, язык молод, но причина что твой васянский код будет хуёвый не означает что язык хуёвый
Умничка. Теперь ты сам видишь, что "системное программирование" тут совсем не причём. А если подумать ещё чуть-чуть, то можно прийти к выводу, что и для системного программирования его почти не используют из-за отсутствия тех самых библиотек.
А ещё, кстати, в расте нет наследования для структур, только для аналога нетовских интерфейсов под названием трейты, да и то в трейтах нет поддержки проперти. Видимо растокодеры (игнорируя кукарекания НИНУЖНО со стороны мозиллы) будут как в жавке писать методы getXXX() setXXX(... value). Из-за этого, кстати, в лоб биндинги для Qt и не напишешь. Хотя макросы, да, шикарны. Это вам не сишные дефайны, тут все серьёзно.
я не тот анон с которым ты спорил, лол
из того что он "для системного программирования" выходит только то что у него нет жирного рантайма с GC и прочим оверхедом. т.е. на нём МОЖНО писать низкоуровневые штуки, которые обычно пишут на С/С++. больше ничего это не значит, на нём так же можно писать серверы с крудами и десктопы с гуями
Attaboy
https://crates.io/
Здесь поищи привязки, для большинства известных библиотек должно быть. Обычно у них к названию приписывается sys.
> Controlled unwinding
> Compile time improvements
> Rolling out use of specialization
> Cargo can now be run concurrently.
https://github.com/rust-lang/rust/blob/master/RELEASES.md
> Cool! :skull: to the ".to_string()" is slow memes!
Я просто нуб, но расстроился когда дошел до этой главы. Для меня выглядит как обфускация простейшей функции. Пишут что это хороший стиль. Значит придется учиться такое читать
Ну знак вопроса уже добавили в раст (с версии 1.9 вроде), а значит тот пример можно переписать гораздо няшнее.
> I can guarantee you it will not. ? is still unstable, and since the release of 1.9 means that 1.10 is in beta, it will not be in 1.10.
> Well for one, there's a huuuuuge unresolved question: should it work for Option as well as Result? If we stabilized just the Result version, would we lock out the possibility of extending it in the future?
> Just in general, it is a huge, and widely debated new feature that only landed recently. It needs more time before we can consider stabilizing it. One of the longest-running and most-commented RFCs in Rust history deserves to not just be made stable as quickly as possible, but to take it slow and make sure we get it right.
Ну это понятно. А пока пусть растовцы страдают.
Алсо, есть ещё макрос `try!`. Выглядит конечно не так красиво, но работает даже в релизной версии:
[CODE]
fn file_double<P: AsRef<Path>>(file_path: P) -> Result<i32, MyError> {
let mut contents = String::new();
try!(try!(File::open(file_path)).read_to_string(&mut contents));
let n: i32 = try!(contents.trim().parse());
Ok(n * 2)
}
[/CODE]
В чем суть - каждый `Мейкер` принимает на вход сырые данные и отдает обработанные. Причем имеется метод для объединения этих данных.
`Завод` дает каждому `Мейкер` одни и те же сырые данные и потом объединяет их и возвращает.
Вопрос знатокам - как можно распараллелить это дело? Язык вроде как нацелен на решение таких проблем?
Ссылку проебал.
https://play.rust-lang.org/?gist=d7a9afd0ae73d5107d40c12e28d18b1f&version=stable&backtrace=0
>>758067
> Язык вроде как нацелен на решение таких проблем?
Нуу, не совсем. В стандартной библиотеке есть только дубовые одноразовые треды, которые работают только со статическими переменными. Есть пара крейтов, но они вроде как не совсем стабильно. В общем как-то так: http://pastebin.com/gBcQsg9K
Алсо, можно сделать так: http://pastebin.com/WgKY51bZ
Тут уже нет лишних мьютексов и Item::compose выполняется в главном треде. Да и выглядит красивее.
Да и выполняется чутка быстрее, только тут уже если Item::compose выполняется медленно, то потоки будут забивать память новыми make_result'ами если это важно.
test tests::bench_concurrent ... bench: 926,797 ns/iter (+/- 86,735)
test tests::bench_concurrent_new ... bench: 831,805 ns/iter (+/- 16,123)
Угу. Это особенность библиотеки такая. Потому второй вариант и неверен.
> Где ты научился этой черной магии?
Честно говоря, я просто сам заинтересовался и начал гуглить.
Алсо, во всех случаях если в дочернем процессе произойдёт ошибка (или в растовом понятии паника), то в обоих случаях произойдёт deadlock. Возможность глобально ловить panick'и добавили только в версии языка 1.9, но пока ещё ни одна библиотека её не использует. Так что избегай unwrap'ов если 100% не уверен в их корректности.
>Мозилла не юзает эти технологии.
Ебать ты конченый. В firefox'e уже переписали несколько компонентов на rust. Dropbox на него переписал тоже несколько компонентов своей инфраструктуры.
Мозида спонсирует серво с растом напрямую, у дропбокса на расте облачное хранилище – скелет их инфраструктуры.
>Actually, full disclosure, we really just rewrote a couple of components in Rust. Most of Magic Pocket (the distributed storage system) is still written in golang.
Что еще спизданешь?
> error: #[feature] may not be used on the stable release channel
Но я использую nightly. Что нужно добавить, чтобы нормально воспринимало как nightly?
Разобрался. В какой-то либе была кастомная сборка и она собиралась не той версией раста.
А ты много знаешь языков, которые "выстрелили" за короткий период времени?
inb4: swift; там анальный господин всё порешал.
Субъективно, по опросам stackoverflow, у раста есть как минимум большой потенциал в плане желающих им начать пользоваться. Но язык ещё дорабатывается. Доделают MIR, доделают оракл, rustup.
Больше всего вызывает опасение отсутствия привязки к C++. Если эту проблему не решат - это огромный минус будет. Отмазки типа "нинужно" звучат убого.
Года через 2 приходи - если к тому времени не выстрелит - тогда да.
раст бы смог, если бы углубился в веб, понимая мейнстрим.
А переманить матерых сишников, которые пишут на сяшках по 20 лет, это верх идиотизма
Наверно в начале веб подразумевался, но из-за Go отказались.
Вот сишников пытаться перетянуть - маразм, да. Но они ориентируется на С++ разработчиков и умеренных функциональщиков, наверно.
>>768141
Одно другому не мешает. Если ты делаешь какие-то свои поделки, то почему бы его не сделать на каком-нибудь хипстерском языке?
А для работы - никому не нужно (это норма, рынок очень медленно реагирует на новые технологии). И тупо работать не с чем в данный момент. Есть либы какие-то на разные темы, есть попытка сделать веб-фреймворки, но пока ничего интересного. Iron явно умер, например.
если для себя, то хоть ассемблер, если с охватом для работы, смотри вакансии, они решают.
>>768208
Чем их Го то напугал? С вебом они обосрались точно, сейчас такой спрос на шустрые и маленькие микросервисы, что просто просрать это все, надо было еще суметь.
Даже на джаве и то пилять всякие standalone приложения, ибо тренд. И можно было вкатится в это все громко.
Я не сильно слежу за растом, но по-моему количество сторонников, которые смотрели в его сторону, ранее было больше? Чем они еще отпугнули сообщество? (меня, как уже понятно, вебом).
1) Прописал зависимости в cargo.toml
2) $ cargo build
3) ??? (сборка проекта и зависимостей)
4) ЗКЩАШЕ
Сам перекатился с плюсов и не хочется уходить
>Сам перекатился с плюсов
В этом и суть. Я тоже кончил когда первый раз увидел тот же dub в D (с абсолютно тем же функционалом), но менеджер зависимостей есть в любом современном яп.
Ничего не изменилось, хайпить стали меньше (и хейтеров бампающих этот тред тоже).
>просрали веб
Не, вась, ну ты совсем ебанутый? Какой веб? Нахуя в вебе язык с борровчекингом, лайфтаймами и прочей низкоуровенной няшностью, когда можно написать то же на пхп/раби/питоне думая только о продукте и не думая мозгами?
что ты, что ты, я же не про бложики домохозяек говорю, а про отрасль высоконагруженных (да хоть средненагруженных) микросервисов, которые там в кучу зеленых потоках (корутинах) шустро шуршат в вычислениях и не отжирают тонну памяти и проца просто так.
Тонны памяти стоят заметно меньше, чем команда разработчиков на расте (чем сложнее инструмент – тем выше требуется квалификация и время дл выпуска продукта).
Короче – докупить пару серверов всегда легче, если ты не гугл/фейсбук.
>Тонны памяти стоят заметно меньше
эту фразу до дыр уже затерли те, кто как бы к бизнесу отношения не имеет.
А потом из-за них со всяких пхп, питонов нод.жс переписывают на что-то вменяемое.
В общем есть ниша эта, не хочу спорить, удачи расту на системном уровне
Проблема в том, что этот подход ведет скорее не к тормознутому ПО, а к тому что ПО в принципе не работает или падает с непонятной частотой, и никто нихуя ничего поняить не может как все это пофиксить, ребутнули и живем молимся.
Это ж золотой стандарт легаси! Даже паттерн такой есть: если дёшево падать и подниматься – занимайся этим сколько влезет.
>>768663
>В общем есть ниша эта
В общем, ты вообще не понимаешь о чем говоришь. Почему по твоему даже гугл свои сервисы пишет на яве (кроме поиска с почтой, разумеется)? Прост))) наверн))))
Ну ты просто сокращаешь расходы на дев и поднимаешь на операторов. Из пустого в порожнее. В итоге у тебя пятьдесят дешевых ртов, кто умеет зайти в консоль и пару комманд вбить из гайда. А чем чаще падает система, тем чило этих ртов шириться.
>Почему по твоему даже гугл свои сервисы пишет на яве (кроме поиска с почтой, разумеется)?
ну и почему же?
Потому что тогда не было раста.
В гугле - код пишут индусы в аутсорсе?
>он наверно имеет ввиду
вот мне и интересно, что он имел ввиду
Как можно автоматически собирать зависимости в одну директорию (ну, кроме системных), если нужно сделать сборку для распространения?
То что ты, животное, читать не умеешь, очевидно.
Я пытаюсь сказать, что если у девелоперов зарплаты не 30 т.р. – железо в большинстве случаев будет банально дешевле команды ртов.
https://gist.github.com/anonymous/bdb8e4b640efe1704bf118a058e02df9
Зарелизили проект, который писали 20 человек, оставили для поддержки только двоих на фиксы и вуаля есть мега-класстер который дороже даже двух этих программистов (даже по расходам на электричество).
Я понимаю там аутсорс, вы конвеером код пишите без остановки, но в реале конечный продукт не требует уже мега-кодинга как перед релизом, и не требует маркейтинговой пляски с версиями.
А джава это компромисс между с++ и чем-то высокоуровневым (да вообще там тысячи причин, это же де-факто стандарт ынтерпрайза, но я хотел услышать это от тебя чтобы удостовериться понимаешь ли ты о чем вообще говоришь или просто генерируешь пену у рта).
Переформулируй свой вопрос, пожалуйста.
https://doc.rust-lang.org/src/core/up/src/libcore/iter.rs.html#3648
Уходит внутрь. При нормальном использовании это норм, но если всё время дропать Peekable, то данные съедаются.
Ты все правильно говоришь, и очень странно что в современном мире стало уже хорошим тоном забивать на стоимость железа и все эти мантры про "программисты же дороже".
Для больших проектов важно снижать количество серверов потому что основные расходы - это вовсе не человеко-часы, и даже не стоимость одного сервера, а стоимость электричества, охлаждения, инфраструктуры и машино-места.
У эрланга, например, очень немало областей, где его применение очень даже целесообразно. Но аккуратно, потому что такого тормоза еще поискать. Часто люди, которые не сталкивались с масштабированием более, чем на десяток-другой машин, приводят аргументы навроде "зато мы быстро сделали, всё работает и похрену, что машинок надо до 5-7 раз больше — наша работа стоит дороже". Для этого надо ну хоть раз рассчитать хоть какой-то нетривиальный проект вплоть до стоимости электричества и аренды места (или хоть стоек) в датацентре. Даже на одной стойке вот только про электричество эти моменты уже становится существенными
>Я не сильно слежу за растом, но по-моему количество сторонников, которые смотрели в его сторону, ранее было больше? Чем они еще отпугнули сообщество?
В первую очередь тем что заебали все перепридумывать и переделывать.
При думали какую-то штуку, обсуждали хуй знает сколько времени - окей, до чего-то договорились, стали делать.
Доделали до половины, тут вкатывается новая пиздатая идея эту штуку делать вообще не такой, обсуждение еще на хуй знает сколько времени - окей, начинают ее, еще недопиленную, перепиливать. И так постоянно.
ну как и с D было, мозгов сделать продукт не хватало, а вот поиграться с кодом - наше все.
С одной стороны да. С другой стороны, есть вот пример Clojure, где Рич и еще несколько его ближайших соратников пилят язык по ночам под одеялом как им нравится, и всех посылают нахуй. И в результате наиболее активные члены сообщества забивают на Clojure хуй, потому что ни их патчи никому не нужны, ни их предложения, ни даже баг-репорты. "Без вас разберемся". И пока Рич красиво придумывает Трансдюсеры, куча core-функциональности нихуя не работает.
Совсем недавно было много обсуждений по этому поводу
http://ashtonkemerling.com/blog/2016/06/11/my-increasing-frustration-with-clojure/
https://news.ycombinator.com/item?id=11883579
https://www.reddit.com/r/programming/comments/4nlhih/my_increasing_frustration_with_clojure/
Это не вчера началось https://www.reddit.com/r/Clojure/comments/3jjit5/what_does_steve_yegge_mean_by_clojure_being/
Ебануктий, у D изначально другая проблема - нехватка людей. Когда его начинали пилить ни у gcc не было отдельного бэкэнда, ни llvm-а не было (он был где-то на диске какого-то студента, ок), авторы были заняты компилятором, при этом хотели более-менее вменяемую стандартную библиотеку с рантаймом - обосрались и у них стало 2 стандартных библиотеки, рантайм до сих пор довольно слабенький (пилит это всё дело 6-8 человек, в свободное время, не считая Александерску, который недавно начал на фултайме над этим работать.
>>768828
Ну, в кложуре всё тоже не так как в расте. В расте есть сообщество как в плюсах комитет - пока все не придут к консенсусу - будут страдать вообще все, только в отличие от плюсового коммитета любят забивать на проделанную работу. Благо что у них есть спонсора и над языком работают на фултайме.
>над этим работать.
Скобочка ) конешно.
>и над языком работают на фултайме.
Благодаря чему видно хоть какую-то доделанность.
Над кложурой тоже работают на фуллтайме, Рич с друзьями в компании https://web.archive.org/web/20140704050611/http://clojure.org/funding
> в кложуре всё тоже не так как в расте
Я и говорил что в кложуре ситуация обратная растовой, что имеет уже свои недостатки.
>в отличие от плюсового коммитета любят забивать на проделанную работу
Вот в этом главная растопроблема.
Одно, под одеялком пилить свой мягкий и плюшевый язык, ласково с ним засыпая по ночам в кроватке, а другое дело сделать продукт, детищем которым будут пользоваться тысячи, а может даже миллионы.
В этом и проблемы этих языков, программисты ими тупо играются.
Чтобы пользовались тысячи и миллионы нужно сделать много чего и вложить дохуя денег.
От языка вообще ничего в этом смысле не зависит.
Решили бы большие дяди вместо Java подарить миру INTERCAL, хуярили бы все сейчас на INTERCAL как миленькие.
> Rust thread
> срач про D и Closure
Че за хуйня происходит?
Подскажите лучше как распространять бинарники. Запилил я например YOBA-AAA-INDIE-игрулю с дохуищей зависимостей которая компилируется час. Как мне теперь распространить этот продукт конечному юзеру? Подойдет ли для этого 'cargo package'?
Вопрос не про сам раст, а про cargo или про инструмент, который решит данную проблему.
Карго это ж только для исходников вроде. С бинарями каждый ебётся как хочет, разве нет?
Всё равно непонятно что ты хочешь спросить, честно говоря. Какие данные? Итератор? Структура, по которой идёт итерация? Можешь привести полноценный пример при которых это происходит?
Потому что час работы навороченного сервера стоит 20$, а час работы программиста - 60$. Вот когда сервера становятся дороже, тогда и начинают переписывать, но происходит это нечасто и не у всех.
Тебе говорили уже - возьми и посчитай, и сразу в голове прояснится.
Программист твой 8 часов работает, а сервер 24 - привет, уже сравнялись. Даже пока сервер всего один, а программист все еще пилит эту глюкалу.
Программист работает 8 часов и дальше не работает нихуя, а сервер собирает мусор все время. Плюс веб-макака тоже денег стоит, и не всегда дешевле программиста.
А ещё веб макака гарантированно быстрее сделает продукт – с его инструментом мозги можно не включать.
А ещё веб макаку можно обучить Goвну за недельку от силы, и она с похожец скоростью будет говнокодить, а не думать хули там компилятор ноет про проёбанный борровинг.
>А ещё веб макака гарантированно быстрее сделает продукт – с его инструментом мозги можно не включать.
Макака - это 30% экономии на зарплате, и 300% переплаты на железе.
>А ещё веб макаку можно обучить Goвну за недельку от силы, и она с похожец скоростью будет говнокодить, а не думать хули там компилятор ноет про проёбанный борровинг.
С этим согласен, раст не нужен, когда есть Go и C++.
Go не нужен потому есть LuaJIT.
C++ не нужен потому что те кто умеет на нем писать, стоят как три мейнфрейма.
>веб макака гарантированно быстрее сделает нерабочее говно, и можно будет нанять программиста это выкинуть и переписать за втрое большие деньги
не благодари, поправил тебя
Lua динамически типизирован, а стоимость знающих C++ и Rust примерно равна. Кстати, не такая уж она и высокая, на С++-сеньер стоит столько же, сколько и Java-сеньер, например.
Да, Lua динамически типизирован. При чем здесь это его положительное свойство?
Я про сеньёров ничего не говорил. Я говорил про тех кто умеет С++. Их, конечно, больше чем растеров, но только потому что количество растеров равно нулю.
Напомните, в Петухане Куриханыче можно формошлепить, или все печально, как и в Go?
>При чем здесь это его положительное свойство?
Это отрицательное свойство - вместо написания программ приходится писать тривиальные тесты. Впрочем, если тебе это не очевидно, иди нахуй.
Всё печально. Вроде есть биндинги для гтк, но формошлёпить не получится. Делай как все нормальные посоны: формошлёпай в html и в свою программу встраивай вебкит, который и будет отображать гуй.
А как с Qt? Там можно рисовать формочки в Qt Designer независимо от языка программирования.
Нет нормальных биндингов. Есть что-то полурабочее, но последнее обновление крейта с биндингами было 4 апреля, а нового ничего нет.
Это не вопрос, это ответ.
>>769067
Не юзабельно, увы: https://github.com/cyndis/qmlrs/issues/22
Есть альтернатива, тоже html, но с помощью какой-то другой либы (C-шная). но найти не могу.
Те кто пишет описание продукции, они, случайно, не у юристов учатся формулировать предложения?
Что эта хрень делает? Это типа докера?
Смотрю доки, а они там предлагают мне проходиться по всем элементам в документе ЛИНЕЙНО, блядь. Что за обосраное говно? В примере показано, что берется xml документ, и, блядь, ЛИНЕЙНО проходит по всем элементам по порядку, всрав нахуй всю вложенность. Что за пиздец? Почему по-человечески нельзя? Я чего-то не понимаю? Мне что, блядь, парсер xml писать, чтобы распарсить сраную колладу? Как же мне бомбит с этого обосраного говна.
Ну ты и лолка. StAX это для бааальших хмлок нужно. А тебе нужен парсер с DOM-деревом и возможно поддержкой XPath.
Вот что нашёл:
https://github.com/shepmaster/sxd-document/
https://github.com/shepmaster/sxd-xpath
Вот такой список всплыл
Хочу узнать, дорого ли будет делать .copy() на итератор. Но интересно, может есть какой универсальный способ и для других объектов.
Тут https://doc.rust-lang.org/std/any/trait.Any.html
сказано "Unstable (get_type_id #27745): this method will likely be replaced by an associated static"
Но что это за ассоциированный статик я не нашел.
Два часа не мог раздуплиться. Оказалось у Any есть еще метод
fn is<T: Any>(&self) -> bool
Returns true if the boxed type is the same as T
В статических языках (тем более с адекватной системой типов, а не сишечным стёбом над типизацией) их требуется раз в 8 так меньше чем в динамике.
Какое смелое заявление. Из него можно сделать вывод что семь ошибок из каждых восьми в программах - это ошибки "перепутал литры с килограммами" (ни от каких других статическая типизация не помогает), что реальности не соответствует.
Также интересно узнать, не изменилось ли что-нибудь с момента появления умных тестогенераторов типа QuickCheck (имплементации которого существуют как для Rust - кстати, зачем? в нем ведь тесты можно не писать - так и для динамических языков)?
> пропатчил сигнатуру у функции, в статике ты компилируешь и фиксишь места, где тебе указал компилятор
Используем компилятор в качестве grep - ну что ж, отлично, развиите Computer Science наконец-то увенчалось полным успехом.
Тайпчекер может верифицировать программу и доказать ее соответствие спецификациям, но спецификации всегда не полны. Если же спецификации хотя бы близки к полноте, то сложность спецификаций приближается к сложности программного кода - как следствие, в спецификациях будет не меньше ошибок, чем в программном коде. И встает вопрос о том, чтобы верифицировать спецификации - то есть писать спецификации спецификаций. Здесь я вижу один путь - доказывать о программе какие-то отдельные интересные факты. То есть - динамическая типизация с опциональной управляемой статикой, или еще лучше - с системой поддержки контрактов, которые есть как для Lua, так и для большинства динамических языков. Полная же статика - это как колоть орехи микроскопом. Причем тогда, когда микроскопа нет - то есть мы должны для начала этот микроскоп придумать, спроектировать, произвести - и только потом расколоть наш орех. Примитивные системы типов, вроде системы типов хаскеля, и уж тем более раста, не позволяют отловить никаких "интересных" ошибок ("интересными" назовем те ошибки, которые не будут обнаружены на первом же тесте). То есть они, по сути, лишь не дают складывать слонов с телегами - чего явно недостаточно. Когда же мы хотим находить "интересные" ошибки, то приходим к проблемам со спецификациями на спецификации. На практике же мы имеем вполне определенную ситуацию - практически все ошибки подобного характера обнаруживаются при первой же проверке работоспособности кода. 99% незамеченных ошибок - логические, система типов их не ловит. Вот на отладку таких ошибок и следует потратить время, сэкономленное на борьбе с системой типов.
> Тайпчекер может верифицировать программу и доказать ее соответствие спецификациям, но спецификации всегда не полны
> Что будет делать IDE?
Хуй её знает. Они ж там все файлы анализируют составляют AST-дерево и уже по нему ищут где что используется и переименовывают только нужное. Ну и у тебя на всякий случай спросят, выдав список всех найденных совпадений.
Ну ладно. Я тебе верю. Невозможно, так невозможно.
Потому, что я совсем не разбираюсь ни в ООП, ни в функциональщине, особенно трудно даются времена, заимствования и трейты с имплементациями (эти подстановки типов с кучей времен рядом сними). А начал изучать все это с раста.
Ну не получается у меня переопределить метод insert для BTreeMap, новый сделать получается, а когда называю его insert, он обращается к оригинальному. Вот пидор
> pijul
Интересная вещь. Никак не могу прочитать какое-нибудь интро в теоркат, чтобы прочитать их статью.
Но раст они зря взяли. Я бы на их месте попытался бы собрать на OCaml-е под винду, либо перекатился на питухон.
https://github.com/rust-lang/rfcs/blob/master/text/1210-impl-specialization.md
https://github.com/rust-lang/rust/blob/ea6b3ddee9663e27221f366671261b21618394a0/src/libcollections/btree/map.rs
Я так понимаю, проблема у тебя в следующем:
1. insert - не trait в оригинале, а просто метод, но ладно
2. Для того, чтобы функцию/трейт можно специализировать, он(а) (оригинал) должен(на) быть помечен(а) default
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3980.html вроде не берут в C++17 :(
https://play.rust-lang.org/?code=#![feature(libc)]extern crate core;extern crate libc;use libc::{c_schar,size_t};use core::usize;#[no_mangle]pub unsafe extern "C" fn stpcpy(dest:mut%20c_schar,%20source:%20const%20c_schar)%20-%3E%20mut%20c_schar%20{%0A%20%20%20%20//%20TODO(adam)%20compare%20and%20copy%20as%20word-size%20chunks%0A%0A%20%20%20%20for%20i%20in%200..%20{%0A%20%20%20%20%20%20%20%20dest.offset(i)%20%3D%20source.offset(i);%0A%20%20%20%20%20%20%20%20if%20dest.offset(i)%20%3D%3D%200%20{%0A%20%20%20%20%20%20%20%20%20%20%20%20break;%0A%20%20%20%20%20%20%20%20}%0A%20%20%20%20}%0A%0A%20%20%20%20dest%0A}%0A%0A%23[no_mangle]%0Apub%20unsafe%20extern%20%22C%22%20fn%20strlen(s:%20const%20c_schar)%20-%3E%20size_t%20{%0A%20%20%20%20//%20TODO(adam)%20convert%20to%20checking%20word-size%20chunks%0A%20%20%20%20for%20i%20in%200..%20{%0A%20%20%20%20%20%20%20%20if%20s.offset(i)%20%3D%3D%200%20{%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20i%20as%20usize;%0A%20%20%20%20%20%20%20%20}%0A%20%20%20%20}%0A%20%20%20%20usize::MAX%0A}%0A%23[no_mangle]%0Apub%20unsafe%20extern%20%22C%22%20fn%20strcat(dest:%20mut%20c_schar,%20source:%20const%20c_schar)%20-%3E%20mut%20c_schar%20{%0A%20%20%20%20let%20len%20%3D%20strlen(dest)%20as%20isize;%0A%20%20%20%20for%20i%20in%20len..%20{%0A%20%20%20%20%20%20%20%20dest.offset(i)%20%3D%20source.offset(i);%0A%20%20%20%20%20%20%20%20if%20dest.offset(i)%20%3D%3D%200%20{%0A%20%20%20%20%20%20%20%20%20%20%20%20break;%0A%20%20%20%20%20%20%20%20}%0A%20%20%20%20}%0A%0A%20%20%20%20dest%0A}%0A%0Afn%20main()%20{%0A%0A%20%20%20%20unsafe%20{%0A%20%20%20%20print!(%22{:%3F}%22,%20strcat(b%22a\0%22.as_ptr()%20as%20_,%20b%22_b\0%22.as_ptr()%20as%20_));%0A%20%20%20%20%20%20%20//%20assert_eq!(strcat(b%22a\0%22.as_ptr()%20as%20_,%20b%22_b\0%22.as_ptr()%20as%20_),%20b%22a_b%22%20as%20_);%0A%0A%20%20%20%20}%20%20%20%20%0A}%0A&version=nightly&backtrace=0
https://play.rust-lang.org/?code=#![feature(libc)]extern crate core;extern crate libc;use libc::{c_schar,size_t};use core::usize;#[no_mangle]pub unsafe extern "C" fn stpcpy(dest:mut%20c_schar,%20source:%20const%20c_schar)%20-%3E%20mut%20c_schar%20{%0A%20%20%20%20//%20TODO(adam)%20compare%20and%20copy%20as%20word-size%20chunks%0A%0A%20%20%20%20for%20i%20in%200..%20{%0A%20%20%20%20%20%20%20%20dest.offset(i)%20%3D%20source.offset(i);%0A%20%20%20%20%20%20%20%20if%20dest.offset(i)%20%3D%3D%200%20{%0A%20%20%20%20%20%20%20%20%20%20%20%20break;%0A%20%20%20%20%20%20%20%20}%0A%20%20%20%20}%0A%0A%20%20%20%20dest%0A}%0A%0A%23[no_mangle]%0Apub%20unsafe%20extern%20%22C%22%20fn%20strlen(s:%20const%20c_schar)%20-%3E%20size_t%20{%0A%20%20%20%20//%20TODO(adam)%20convert%20to%20checking%20word-size%20chunks%0A%20%20%20%20for%20i%20in%200..%20{%0A%20%20%20%20%20%20%20%20if%20s.offset(i)%20%3D%3D%200%20{%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20i%20as%20usize;%0A%20%20%20%20%20%20%20%20}%0A%20%20%20%20}%0A%20%20%20%20usize::MAX%0A}%0A%23[no_mangle]%0Apub%20unsafe%20extern%20%22C%22%20fn%20strcat(dest:%20mut%20c_schar,%20source:%20const%20c_schar)%20-%3E%20mut%20c_schar%20{%0A%20%20%20%20let%20len%20%3D%20strlen(dest)%20as%20isize;%0A%20%20%20%20for%20i%20in%20len..%20{%0A%20%20%20%20%20%20%20%20dest.offset(i)%20%3D%20source.offset(i);%0A%20%20%20%20%20%20%20%20if%20dest.offset(i)%20%3D%3D%200%20{%0A%20%20%20%20%20%20%20%20%20%20%20%20break;%0A%20%20%20%20%20%20%20%20}%0A%20%20%20%20}%0A%0A%20%20%20%20dest%0A}%0A%0Afn%20main()%20{%0A%0A%20%20%20%20unsafe%20{%0A%20%20%20%20print!(%22{:%3F}%22,%20strcat(b%22a\0%22.as_ptr()%20as%20_,%20b%22_b\0%22.as_ptr()%20as%20_));%0A%20%20%20%20%20%20%20//%20assert_eq!(strcat(b%22a\0%22.as_ptr()%20as%20_,%20b%22_b\0%22.as_ptr()%20as%20_),%20b%22a_b%22%20as%20_);%0A%0A%20%20%20%20}%20%20%20%20%0A}%0A&version=nightly&backtrace=0
Раст они взяли чтобы исправить тормоза хаскеля, которые на окамле без анала не покрыть.
Асимптотики алгоритма darcs они же исправили своей теорией патчей. Смысл в микрооптимизациях вроде выбора языка?
Playground URL: https://play.rust-lang.org/?gist=ed2c4625f0f8bb8476eeaf3a0101f72f&version=nightly&backtrace=0
Gist URL: https://gist.github.com/ed2c4625f0f8bb8476eeaf3a0101f72f
Ты пытаешься писать в константную статическую строку. Не удивительно, что у тебя application terminated abnormally with signal 11. Кроме того, у тебя strcat сломан.
Вот, попробовал слегка починить: https://play.rust-lang.org/?gist=7fa075ea95a8248dac19d6772bed7db0&version=nightly Работает даже с включёнными оптимизациями.
Спасибо! А как ассерты делать?
пишу: assert_eq!(strcat(bytes.as_mut_ptr() as _, b"_b\0".as_ptr() as _), b"a_b\0".as_ptr() as _);
а он мне:
thread 'main' panicked at 'assertion failed: `(left == right)` (left: `0x7fff672b3bbe`, right: `0x7f8f1610daeb`)'
Как только проект у тебя разрастается во что-то побльшее пары-тройки KLOC и это всё безостановочно редактируется это уже далеко не микроопиимизация.
Вот это уже интересно.
Расскажите что сейчас у Rust плохо? (рассказами что в нем хорошо и так весь гугл забит)
Нет HKT, ! (нижний тип) пока ещё не тип, шумный синтаксис, множество фич делает язык не самым лёгким для изучения, автокомплит работает через racer а не через компилятор, инкрементальную компиляцию ещё нет, плагины к компилятору (aka процедурные макросы) в unstable, да и у обычных макросов много чего ещё нет. Ну и так далее.
Спасибо.
Но это все о языке, а что с экосистемой?
Есть ли библиотеки, насколько они в среднем сырые?
Что с community, побороли ли порочную практику долго обсуждать, доделывать до середины, начинать обсуждать как это можно было бы сделать лучше,бросать недоделанное и начинать заново?
> Есть ли библиотеки, насколько они в среднем сырые?
Зависит от того, какие библиотеки тебе нужны. Можешь на https://rust.libhunt.com/ глянуть.
> Что с community, побороли ли порочную практику долго обсуждать, доделывать до середины, начинать обсуждать как это можно было бы сделать лучше,бросать недоделанное и начинать заново?
Не совсем понял, о чём ты.
Может это из-за https://ru.wikipedia.org/wiki/ASLR
>>639238 (OP)
Люди, как можно передать массив (без использования as_ref), чтоб он таки удовлетворил этот трейт?
На втором скрине трейт удовлетворяется, но там принимает переменная, которая может привести Vec<T> в Vec<u8>
На третьем - еще один неудовлетворительный способ
> Results of Rust Survey 2016
> The first diagram shows that 35.5% of respondents don't use, or stopped using, rust
> https://docs.google.com/document/d/1F6oELZcO_ejX2oVk20hmiBWd4lQugfFahn7OOOOyKsw
/thread
уносите этого.
И что? Может они просто учатся или следят за развитием? Как я например.
У тебя `&[T; n]` вместо `&[T]`. Поэтому тебе нужно или реализовывать типаж для всевозможных n, либо ждать ИХ, либо реализовать для &[T] и использовать метод borrow().
Кстати, есть же `std::convert::From`, зачем велосипеды писать?
>>777860
> 1 in 4 people mentioned Rust's learning curve. People commented on the borrow-checker and how lifetimes were tricky to effectively master. Echoing the complexity concern from non-Rust users, here people also mentioned the sense of a feeling of complexity.
> 1 in 7 people mentioned the lack of libraries. The kinds of libraries people mentioned ran the gamut in terms of topic, covering areas like GUIs, scientific/numeric computing, serialization support, web/networking, async I/O, parallel/concurrent patterns, and richer data structures (including more containers and broader coverage of general algorithms).
> 1 in 8 people mentioned the continued presence and growth of C++ as a challenge. C++ continues to be a vital part of application development, especially systems programming. Its recent interest in static analysis is causing some to wait and see if C++ can close some of the gap.
>std::convert::From
С ним у меня не получалось перевести все унифицированно. Кажись проблема со String была. Там нужен был дополнительный шаг или что-то в этом роде.
>либо реализовать для &[T]
Тогда проблемы уже на самом первом этапе.
У меня получалось с AsRef, а не Borrow. Но только напечатать, а не insert'нуть в BTreeMap, к сожалению
Просто делай `b"bytes".borrow().cv()` вместо `b"bytes".cv()`. Незачем придумывать хитрый способ скормить &[T, n].
Зайди в приватном режиме.
Я хочу чтоб пользователю функции push не пришлось самому в бокс запихивать.
Еще хотел, чтоб можно было и массивы( &[u8; _] ), и одновременно слайсы( &[u8] ) в аргументе функции передавать, но это оказалось невозможно сделать во время компиляции. (Динамически не проверял вроде, но думаю там можно через коробку опять же.) По крайней мере я почти неделю мучился, так и не нашел способ.
Если у тебя ограниченный набор типов, то почему бы просто не ввести enum и использовать From?
Посмотришь на такие решения, и сразу руки что-либо изучать опускаются. Сидишь неделю, ломаешь мозг над одной простой истиной
Для цельной картины тебе надо что-нибудь про функциональщину прочитать. С С++ на раст довольно тяжело переходить, потому что большей части фич ООП тут просто нет, либо они реализуются совсем по-другому.
Rust by example читай. Ну и https://llogiq.github.io/2015/07/30/traits.html
Да, и в BTreeMap ты скорее всего хочешь хранить Vec<u8>, а не &[u8].
Сложна, сложнааа, нихуя нипанятна. Как обычно короч.
> I am a beginner both with Rust and Nim
> I am looking forward to their 1.0 release (rust v0.12)
Нахуй ты сюда это притащил?
Ну ладно, покормлю:
>the whole language is verbose: compare these 10 lines with this single line
>> Rust - 10 строк - деструктуризация и пустые строки
>> Nim - 1 строка (на деле 2) - обращение к полям
Ему надо в раст компиляцию запилить, лол – получится отличный язык и без GC.
https://servo-builds.s3.amazonaws.com/index.html
http://lexborisov.github.io/benchmark-html-persers/
Нормальную ссылку дай, йобаный https://download.servo.org/index.html
На сосаче по прежнему баги с рендерингом и теперь ещё и со скроллингом :)
>Зачем вообще кто-то так сильно упирается и хочет использовать раст в вебе?
Либо риалтайм проект, либо скудоумие.
>Подозреваю что в скорости исполнения и пожирания памяти
Грубо говоря, чуть больше кушает чем плюсы/няшная по процессору/памяти, но это не всегда эквивалентно времени выполнения – что и как напишешь, конкретных примеров с адекватным сравнением я не видел.
Разница по памяти/процессору в бенчмарках по сравнению с той же явой до 10-20 раз, со скриптотой умножай ещё на 3.
Как думаешь, для веб-сервиса аля гугл-поиск подойдет раст? У гугла-поиска по сути одна простая страница, и все самое интересное творится на бэкэнде.
А есть причины по которым может не подойти?
Единственная - нахуя тебе тратить в 5 раз больше времени на проект, которым пользоваться будет 1.5 человек включая тебя?
У того же яндекса по заверениям их разработчиков, большая часть поиска до сих пор на перле.
В моем случае время не так важно, важна дешевизна арендуемого железа, на котором будет крутиться это дело. То есть нужно чтоб софт был минимально жрущий ресурсы. Присматриваюсь еще в сторону Erlang/Elixir решений, но на Rust я уже имею определенный опыт, написал несколько тысяч строк, а вот Erlang хоть и трогал, но всё-таки это что-то довольно новое.
Если так – тот тут только раст (ну ещё может Go подойти, но он тоже достаточно прожорлив).
Эрланг – редкостный тормоз, который специализирован в первую очередь для железного масштабирования, что мягко говоря противоречит твоим целям.
Видел что ерланговские бэкэнды держат очень много коннектов одновременных и вообще быстрый респонд имеют. Но подозреваю что если будет что-то более сложное чем отдать страницу клиенту, типа вычисления какие, то тут начинается сосалово.
Я выше уже писал на эту тему, повторюсь: прожорливость до ресурсов != скорость выполнения.
Имею в виду "много жрёт – не обязательно медленно".
Нельзя.
Летит низенько и точно уж дальше Cyclone (спасибо Samsung & Mozilla). Как убийца плюсов, наверное можно делать выводы - не реализовался.
Любая дура с IO на select и асинхронной обработкой (например за счет кооперативной многозадачности на основе библиотеки) держит столько же коннектов. Ессно, сосалово придет вместе с вычислениями.
Про десятичный порядок проеба по памяти в сравнении с жабой - верю. Про cpu - не верю. Скорее бинарный порядок, т/е жаба сливает в x2-3.
Мне кажется мир еще не осознал всего величия данной штуки.
Поиск на крестах, но перл у некоторых подразделений для байнда поиска используется.
Тем, что работа с памятью явная. И да, swift уже можно запустить на микроконтроллере?
Раст ты тоже на МК не запустишь, а бинарь, им собранный, возможно на некоторых камнях.
На микроконтроллеры похуй. Во всяком случае пока.
У Rust эта явная работа с памятью может превратиться в такие конструкции, что уже вся эффективность явной работы может похериться. Тут надо быть очень большим спецом по расту чтоб что-то делать. В прочем справкедливости ради надо отменить что надо быть спецом в любом языке чтоб нормально писать.
На них вообще всегда похуй, это аргумент из серии "смотри, а я зато на голове стоять умею!". Софту для микроволновки меморисейфети и прочее точно не нужно.
В расте относительно тех же плюсов эта самая работа с памятью вообще скрыта.
Со свифтом его мягко говоря нихуя не корректно сравнивать: сравнение хаскеля с плюсами. Один низкоуровенный даёт рассмотреть все проржавевшие кишки, второй на уровне птичьего полёта даёт глядеть на программу.
Можешь более развернуто высказать свое мнение на счет Rust? Ну и немного про Swift, всё-таки тред про раст.
>Софту для микроволновки меморисейфети и прочее точно не нужно.
Если микроволновка подключена к интернету, то нужна.
А нахуя ей это? Во всяких кококумных домах есть одна центральная пека – там не нужен не перформанс, нихуя, можно хоть жаву накатить.
>>796836
Что именно-то? В свифте нихуя низкоуровенного банально нету, даже ссылок – всё скрыто, в расте – наоборот, вот и всё сравнение.
Ты наверное не слышал о находках уязвимости во всяких умных телевизорах, микроволновках, холодильниках.
А раст уже успел стать серебряной пулей?
Я имею ввиду, использовать максимум иммутабельности и чистых функций.
Зависит от кода же. Просто так в иммутабельности и в чистых функциях нет ничего плохого, даже наоборот.
Ну да, ты прав.
Хотя бы может примерная какая-то оценка есть типовых задач, когда мутабельная версия сильно превосходит иммутбельную. Деревья поиска может какие или сортировка, че там еще бывает?
Заметил что в Расте, если идти таким путем - функциональным, то код заметно чище становится и понятнее, и меньше борьбы с борроу-чекером и параметрами времени жизни.
Очевидно, копирование больших данных не полезно для производительности, как и слишком частое выделение и освобождение памяти в куче. Ну и ещё плохо, когда данные разбиты на мельчайшие осколки, хаотично расположенные в памяти, с косвенной адресацией на каждом шагу (привет, связные списки).
А вообще, просто пиши чистый и понятный код, и профилируй его периодически. Тем более, что профилировать крайне легко:
http://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html
https://doc.rust-lang.org/book/benchmark-tests.html
А вот move сементика как реализована внутри? Надеюсь не происходит никакого копирования данных?
И еще коль уж начал спрашивать, есть ли где-то наконец-то нормальное пояснение по лайфтайм параметрам? Борроуинг понятен. В принципе даже можно привыкнуть. Немного бесит, что в Rust Book подробно расписывается какая-то херня типа точки с запятой, cargo run, всякие идиоматичности кода (этов ажно, согалсен), всякие циклы, ифы, а блядь самая мутная тема быстро галопом по верхам, я имею ввижу лайфтаймы. Какого хуя?
В своем коде еще сталкивался с такой штукой, что компилятор мне говорил " у тебя вот тут не указан параметр" - ну я взял да указал, и норм стало. Компилятор мог и без меня это сделать. В общем я пока не сталкивался с ситуациями где бы компилятор не могс ам догадаться куда ставить эти параметры. Может есть примеры какие-то?
> Надеюсь не происходит никакого копирования данных?
Только данных на стеке, это совсем-совсем дёшево.
> Компилятор мог и без меня это сделать
Мог. Но раст предпочитает явное вместо магии.
http://stackoverflow.com/questions/31609137/why-are-explicit-lifetimes-needed-in-rust/
>А вот move сементика как реализована внутри?
Как и в плюсах – просто обнуляется старая ссылка с присвоением значения новой. Учитывая что у раста несколько промежуточных представлений – в банальных случаях в скомпилированном коде этого перемещения не будет вообще.
При использовании иммутабельных данных и чистых функций нет семантической разницы между вызовом по ссылке и вызовом по значению (поскольку структуры данных в них являются неизменяемыми, и функция так или иначе не имеет возможности изменить значение своих аргументов), поэтому их обычно описывают как вызывающие по значению, несмотря на то, что многие реализации в действительности используют вызов по ссылке для повышения эффективности.
Что это за хуёвина? Влом смотреть презентацию.
http://rustbyexample.com/flow_control/match/destructuring/destructure_pointers.html
По идее, должно быть ∗, но этот RFC не приняли.
Цель-то какая? Если её нету – забей, нахуй не стоит.
перекатывайся сразу в хаскель/эрланг и пиши хелоуворды там, делов то
А почему в твоей модели возможна разная длительность жизни для hui и pizda? Типа возможен момент времени, когда hui уже будет уничтожен, а pizda нет? Как тогда может существовать в этот момент Customer, он же будет в неконсистентном состоянии?
Красота, чо. Прям как в хачкеле.
Это всё равно неправильно. Немножечко окамеля:
type xyupizda = Hui | Pizda
and car = ...
and customer = {
car: car option;
sex: xyupizda
}
v.push(vec![1,2,3,4]);
v.push(vec![5,6]);
v.push(vec![7,8,9,10,11,12,13,14]);
...
Как подобное сделать const?
Например, массив можно сделать
const a: [[4];5] = [[1,2,3,4], [5,6,7,8]...];
но тут каждый подмассив одинаоковой длины должен быть.
Ну или не обязательно const, главное чтоб не динамически выделялась память.
што я за хуйню сейчас прочитал /0
1) Раст – хуёвый выбор для новичка;
2) Именно с векторов – никак. Это, сука, динамический массив. И твою задачу без аллокаций памяти не решить – не страдает фигнёй.
>Как подобное сделать
Я имею ввиду может какая другая есть структура данных. Никаких измененией данных не планиурется, ни добавление, ни удаление, ни редактирование элементов.
Тогда unsafe и c-like указатель на указатель (он же двухместный массив).
Непонятно, такое что ли?
let a = [&[1,2,3,4][..], &[5,6][..], &[7,8,9,10,11,12,13,14][..]];
println!("{:?}", a); // [[1, 2, 3, 4], [5, 6], [7, 8, 9, 10, 11, 12, 13, 14]]
Объясни для чего это, чтоб понятней стало что тебе надо.
Посмотри на сорсы макроса vec! или какого там. Сделай себе похожий, если ты хочешь в коде какие-то необычные финтифлюшки удобно вытворять.
https://github.com/Immington-Industries/way-cooler
Какие реальные данные по производительности есть (кроме школо-бенчмарков), так же интересно как живет он в веб сейчас? Кто пытался сравнить, какие ощущение с разработкой на прошлых языках.
Какие ощущения по сопровождению кода? В общем любой сравнительный опыт интересен (в плоть до работы с плагинами в IDE и отладкой...).
Ставлю целью его заюзать в вебе если получу плюшек по перформансу и памяти.
Очень привлекает отсутствие оверхеда над абстракциями как в той же джаве, готов даже байты поебать если это даст мне экономию по сравнению с той же джавой.
Советчики типа:
-Кококо это системный язык, на нем писать только системные системки...
-Кококо бери мой любиый питон и ноду.жс, программист дешевле железа, кококо...
Все этим маня-архитекторы идут нахуй, у меня именно такая задача, но на плюсах писать не охота
PS Го не предлагать, это без меня :)
~~~~
Конкатенация
Но если у вас есть две String, то необходимо использовать &:
let hello = "Hello ".to_string();
let world = "world!".to_string();
let hello_world = hello + &world;
Это потому, что &String может быть автоматически приведен к &str. Эта возможность называется «Приведение при разыменовании».
~~~~
Это конечно лютый пиздец дизайна, вот бля будешь ты ставить про строку + строку (да еще и в циклах) и догадывайся, что там будет происходит какое-то преобразование в строку, но вот в другую "&str" (блять в литерал). Просто высший пилотаж магического дизайна.
Изъебывали язык годами, ожидаешь грамотного академического подхода... а нет, очередная хипстота (но безопасная).
PS может я ппц тупой, но какой смысл делать такую откровенную неюзабильную магию, особенно порадовало что text[3] - так нельзя, мол мы не хотим показать что тут так просто все и быстро, а вот через жопу на text.nth(3) норм же теперь блять, если ты через анус достучался, значит и компилятор страдал с тобой, блять.
И что блять за nth, что блять за экономия символов в 2016 году. Давайте снова писать как WinAPI "LPCSTR" или GJEK!JEJJHKJJKQW, сука...
да ты же ролидовый!
это не дизайн, это ЯВНОЕ ЛУЧШЕ НЕЯВНОГО, а ты просто неосилятор. покури маны почему нельзя две строки вот так просто взять и конкатенировать, нахуя срезы и тд
нелепость его порвала, вообще ахуеть
>>827608
хуячишь на тысячах языках, конкатинируешь как все вменяемые str1 + str2 (а тут же норм компиляторы собирают через всякие StringBuilder) а тут хуяк в ржавой хуйне надо приписать str1 + &str2, ведь это же блять так явно к неявному, строка каким-то волшебным хером преобразуется к литералу (по сути к константной строке из исходника).
Кококо - я не могу в дискас, назову всех неосилятором.
Какой нахер неосилятор если я пример то понял и его еще привел? Я не говорю что сложно, я говорю ЧТО ГОВНО.
Я уверен если на таком обослались, там дальше будет веселей.
пиши макросы, прячь всё за абстракции, хули ты хотел?
не оправдало твои ожидания, сразу говном бросать. обосрались? нет, это как раз та НИЗКОУРОВНЕВОСТЬ
String - это, блядь, вектор в хипе, а срез строки &str, это ссылка на память, которая может быть где угодно. это легко спрятать в макрос и питушки вроде тебя пришедшие с питонов будут и дальше писать строка + строка не задумываясь что там происходит под капотом. отсюда же твоё непонимание про text[3] и text.nth(3). в памяти строки хранятся в utf-8, а там 1 байт не всегда равен 1 символу. text[3] - вернёт четвёртый байт, а .nth сисмвол. что, сука, в своих высокоуровневых комбайнах никогда с байтами не работал? пиздуй в го хомячь, там даже жопу за тебя вытирать будут
>пиши макросы, прячь всё за абстракции, хули ты хотел?
Нас ждут тогда полные чудеса.
>питушки вроде тебя пришедшие с питонов будут и дальше писать строка + строка не задумываясь что там происходит под капотом
В том то и дело, мне поебать на петушков, для них можно там в мануале красным текстом написать. Какого хуя за меня авторы решают как мне поступать? Это верх самомнения, или же я склоняюсь, что просто обосрались?
Блять, SQL запрос тяжеловесный, давайте сделаем вызов через оператор "-=]}<SELECT...>" - а то блять будут пользоваться такими тяжелыми операциями (ты ощущаешь всю нелепость ситуации и долбоебизма??).
Насчет строки, да хоть она на соседнем компе пусть хранится, но блять где видано, чтобы по какой-то магии строка бля в литерал превращалась (хорошо блин не в int). Нахера, тогда оператор перезагружали? Почему у нормальных людей литералы в строки преобразуются при компиляции (в константные), а у "умных" наоборот?
Про то как utf8 устроенно будешь на собеседованиях рассказывать и в документации разжевали, но все равно насрали, потому что ты ванька, мы тебя тут оберегаем. Предлагаю получать строку так text[(}3{)] - я бы тут сразу догадался что это трудная операция и подумол много раз (а то прям эти клоуны не будут юзать text.nth(3) автоматом)!!!
PS раньше языки делали для людей, конечно обсерались, конечно на легалиси синтаксисе строили чудовишь, но там никто не пытался показать как кому, что надо делать и когда. Опытные программисты понимают как устроенны хешмапы, массивы, а неопытным со своим бложиком потери в 1мс из-за text.непонятнаяХуйня(3) - ничем ужасным не покажется.
Феномен 21 века, хипстер-архитекторы языков, лол, аж смузи на лептоп пролил
ебать у тебя в голове каша
>Какого хуя за меня авторы решают как мне поступать?
поехавший, авторы как раз дали тебе возможность выбирать что именно ты хочешь сделать, что бы ты всё делал явно.
>по какой-то магии строка бля в литерал превращалась
нихуя не понятно, пиши яснее. какая нахуй "строка в литерал превращаетя"? нихуя там не превращается, литары в расте - это как раз те константы, но при создании его - он возвращает ссылку на себя и дальше ты работаешь с ним как со срезом. ты совсем охуел память в которой програма лежит менять? вот для этого ты явно делаешь .to_string() что бы получить String на куче. и вот у типа String перегружен оператор "+" для конкатенации. хули тебе непонятно? почему он автоматом не делает срез, если получает строку? тем более что раст хвалён дженериками.
>хипстер-архитекторы языков
всё с тобой понятно. ты поехавший. хипстеры - это как раз маньки, вроде тебя, которые не хотят ни в чём разбиратся, пусть сычи пишут код, а я не хочу ничего решать, я хочу просто скачать крейт и что бы всё привычно было как пистоне!
нахера ты мне про устройство раста каждый раз рассказываешь, я тебя в конкретное говно тыкаю же.
>нихуя не понятно, пиши яснее. какая нахуй "строка в литерал превращаетя"?
в принцепи с тобой все ясно, я тебе говорю, что в нормальных языках обычно одна строка, а литеры (константы текста из исходников которые ты руками пишешь) преобразуются в строки родного языка.
ПОЭТОМУ
1. Нефига не понятно зачем они сделали это явно, мол и литералы и строки.
Но это пофиг, может надо им (больше строк богу строк, чтобы веселей епстись было, еще своих там напишут местные).
2. Совершенный идиотизм, что строка из кучи преобразуется в строку-литерал (когда в норм языках обычно наоборот и обычно прозрачно)
3. Нахера на операторе конкатенации "строки-из-кучи" и результатом которой будет "строка-из-кучи", делать преобразование в строку-литерал.
Логичнее даже литералы привести к динамичной строке, но не наоборот же.
Ну вот просто - нахрена??
>устройство раста каждый раз рассказываешь
потому что ты не въежаешь в устройство раста.
если ты под литералом имеешь в виду "строку как поледовательность символов", то это данные которые хранятся в String, а $str - это не литерал, а ссылка на данные, срез.
а вот если ты про "константную строку из исходного кода", она представляется тем самым $str.
вот поэтому мне и не понятно о чём ты говоришь, когда пишешь "строка из кучи преобразуется в строку-литерал"
1. потому что это вообще разные сущности, работать с которыми приходится из-за того их не скрыть за zero-cost абстракцией
2. она никуда не преобразовывается, & возвращает ссылку, йтть
3. потому что сигнатура функции такая, ожидает аргументом срез строки, а не данные в куче. если бы целью было угодить неофитам и сделать всё как у людей, то написали бы дженерик, который бы сам брал срезы там где ему нужны срезы. но ты бы не задавал таких глупых вопросов, если бы понимал к чему это приведёт в итоге.
вообще странно что из всех вычурностей этого ЯП ты приебался к строкам. ведь после понимания owning and borrowing подобные вопросы сами отпадают
>в принцепи
>пи
>с тобой все ясно
лол
>а вот если ты про "константную строку из исходного кода", она представляется тем самым $str.
Нехуя ты какой сообразительный, ну наконец-то. Серьезно.
В этом и проблема, я тебе пытаюсь нативные решения объяснить, которые применяются при трансляции языка, а ты мне про документацию из раста.
Так вот мой юный друг, статическая херня при компиляции, которая уже входит в состав программы, а не будет в куче создаваться и есть литерал (он и статический, он и константный, потому что там память при старте выделилась уже для него, туда не вписать)
Нахуя они создали какой-то полу-литерал (константную в статической памяти (если не навру в терминологии)) - я не понимать, так как по сути поведение близкое к литералу, но так как у них он преобразуется из вектора - то храниться в каком-нибудь тормазнутом стеке наверно.
То что им пришлось делать две строки и одна из них псевдо-литерал - это обосрамс.
Вот найдешь реально решение почему они
1. Ввели два вида строк (и не надо говорить zero-cost, это оверхед вообще-то)
2. Перезагрузили оператор "+" так что он преобразует (или извлекает ссылку, не важно) &str из вектора, но возвращает вектор (это как если бы складывать int'ы но сначала преобразовывать в long'и).
Вот тогда мы поговорим, а так все пусто. Я аргументирую ты мне документацию рассказываешь (где мотивация эта не расписана)
"мне этот собеседник не нравится, но сказать что-то по теме мозгов нет, поэтому я докопаюсь до орфографии"
не, если бы мне не нравился собеседник, я бы ен писал. а к орфографии как раз не доебался в ответе, а заметил уже когда перечитывал, оттого и проиграл. а ты чё обиделся?
олсо
ПЕРЕКАТ
https://2ch.hk/pr/res/828070.html (М)
https://2ch.hk/pr/res/828070.html (М)
https://2ch.hk/pr/res/828070.html (М)
Это копия, сохраненная 4 сентября 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.