LINUX.ORG.RU

Проблемы свободы проекта Rust

 ,


1

7

Опубликована статья на wiki проекта Hyperbola, в которой рассматриваются проблемы языка Rust в контексте свободы программного обеспечения, а также необходимость развития в независимом от политик торговых марок Mozilla Corporation (субсидиар Mozilla Foundation, годовой доход порядка 0.5 миллиарда долларов).

Одной из рассматриваемых в статье проблем является тот факт, что в отличии от C, Go, Haskell и прочих языков программирования, Rust ― является торговой маркой, а не названием языка программирования, разрешенным к употреблению без согласия Mozilla Corporation.

>>> Подробности

anonymous

Проверено: shell-script ()
Последнее исправление: shell-script (всего исправлений: 1)
Ответ на: комментарий от khrundel

Как же вы далеки от народа со своими мувами и лайфтаймами, байтолюбы. И кто-то еще хочет голанг этим убить. Просто лол.

bread
()
Ответ на: комментарий от khrundel

И как твоя «умная» система обработает эту ситуацию

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

stasolog
()
Ответ на: комментарий от khrundel

Не превращает его в тыкву, а перемещает

Кстати, а каково состояние перемещённого объекта?

Предупредить, нет?

То есть, единственное, чем плох мув из цпп - это отсутствие требования про диагностику, так?

DllMain
()
Ответ на: комментарий от stasolog

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

Фейспалм. Шёл бы ты отсюда, болезный. Тебя спрашивают как следить за лайфтаймами, а ты несёшь бред о неиспользуемых параметрах. ОК, добавлю в начало проверку на размер стрингвью с эксепшеном если строка пустая. Всё, параметр используется.

khrundel ★★★★
()
Ответ на: комментарий от DllMain

Кстати, а каково состояние перемещённого объекта?

Где? В расте это ошибка компиляции. В рантайме перемещение = memcpy, но так как компилятор знает что перемещено, а что нет, проблем с двойным деструктором нет.

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

То есть, единственное, чем плох мув из цпп - это отсутствие требования про диагностику, так?

Я как минимум 2 проблемы описал: нет диагностики и необходимость перемещать/форвардить вручную.

khrundel ★★★★
()
Последнее исправление: khrundel (всего исправлений: 2)
Ответ на: комментарий от khrundel

cpp мув не поддерживает
В расте ... В рантайме перемещение = memcpy

:facepalm:

anonymous
()
Ответ на: комментарий от khrundel

Хорошо, проблемы есть. Теперь нужно решение. Как компилятор должен действовать при виде такого:

void f(type&& t) { g(t); h(std::move(t)); }

DllMain
()
Ответ на: комментарий от DllMain

Ээээ….

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

В данный момент ситуация такова, что либо мы забудем std::move и получим низкую производительность, либо забудем что выполнили мув и получим неизвестно что в рантайме. Это таковы правила языка C++.

khrundel ★★★★
()
Ответ на: комментарий от khrundel

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

stasolog
()
Ответ на: комментарий от q0tw4

Rust - убийца Go. Пока go используют и rust будет нужен, чтоб вытеснять эту недоделку из вселенной. А go в свою очередь замещает собой С++. Так что развиваем язык и ожидаем когда он догонит C# по популярности.

А нечо что раст в мире Юникс - чужеродное тело.

anonymous
()
Ответ на: комментарий от stasolog

Так если ты такой, то как тебе на это глаза не открыть? Тебе идею контракта пришлось 3 раза разжёвывать, чтоб до тебя дошло. Умный человек на твоём месте подумал бы, понял бы, что что-то в его картине мира не так, что действительно, чего-то не хватает, пошёл бы что ли про лайфтаймы в c++ почитал, а ты включил дурака и написал глубокомысленную пургу про «значит библиотека не готова» и «ну, может другой ворнинг выскочит».

khrundel ★★★★
()
Ответ на: комментарий от khrundel

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

stasolog
()
Ответ на: комментарий от stasolog

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

Так в расте-то как раз всё правильно, хочешь сделать некоторые предположения о нестандартном времени жизни объектов - возьми да опиши, а компилятор проверит, чтоб все работали на основании этого контракта.

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

khrundel ★★★★
()
Ответ на: комментарий от khrundel

нет диагностики

Как минимум clang-tidy предупреждает

anonymous
()
Ответ на: комментарий от bread

Как же вы далеки от народа со своими мувами и лайфтаймами, байтолюбы

- Это не народ.
- Это — не народ? Это хуже народа! Это лучшие люди города!
(c)
anonymous
()
Ответ на: комментарий от stasolog

Раст фанатик тебя наебал. У раста убогая стандартная библиотека, в частности там нет генератора случайных чисел, многопоточных алгоритмов на итераторах, регексров и кучи других вещей которые есть в с++

Нужно писать

[dependencies]
rayon= "1.3.0" // для многопоточных алгоритмов на итераторах
rand="0.7.3" // для рандома
regex="1.3.4" // для регекспов

в Cargo.toml

В целом это не напрягает, но наезд на С++ за бедность библиотеки был глупым и лишь показал упоротость фанатов раста

fsb4000 ★★★★★
()
Ответ на: комментарий от fsb4000

А слабо привести список, что есть в std у Раста и нет у C++? Вдруг упоротым окажется кто-нибудь другой.

anonymous
()
Ответ на: комментарий от mx__

Я правильно ВАС понимаю что если

Открою фирму по изготовлению пластиковых окон то могу без проблем назвать : Microsoft ?

Или к примеру выпускать бумажные ежедневники (блокноты) и назвать их ipad ?

P.S. Какие бы не были правилы игры они применимы к обеим сторонам (с) не помню кто уже сказал.

Теоретически да. Но… Во-первых, Вам следует убедиться, что бренд iPad все-таки не охватывает эту категорию товаров. Потому как крупные корпорации имеют привычку регистрировать бренд «в круговую», чтобы никто никогда и ни к чему не смог его применить.

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

mshewzov ★★★
()
Ответ на: комментарий от moot

вообще выше написана херня. правило «не-общеупотребимого слова» это для СНГешных торговых марок. на западе ты можешь любое словосочетание (не занятое) зарегистририровать. например MAN, хотя это ж просто слово, самое общеупотребимое. Mercedes - это просто женское имя, и тд

Не херня. Вы же сами привели в качестве примеров как раз такие бренды, слова в которых не относятся непосредственно к товарам, для которых они зарегистрированы. Тот же MAN - это автомобили, а не мужчина (к тому же тут вообще аббревиатура, изначально это было сокращение от Maschinenfabrik Augsburg-Nürnberg). А Mercedes, как Вы правильно заметили, всего лишь имя девушки, но явно не название автомобиля как класса. Никто ж не регистрирует бренд «Классный автомобиль»? Почему? Потому что в его регистрации откажут - это описательное обозначение фактически просто говорящее о том, какая вещь перед Вами.

Кстати, на Западе не так все, как Вы сказали. В частности в США описательный товарный знак практически невозможно зарегистрировать. Если Вы торгуете черными коробками, то бренд Blackbox Вам никто не зарегистрирует, просто потому что он фактически описывает Ваш товар как он есть.

mshewzov ★★★
()
Ответ на: комментарий от q0tw4

Rust еще слишком молод, можно впаять, что хочешь. Идеи все заимствованы, ничего нового.

anonymous
()
Ответ на: комментарий от khrundel

А ты не забывай! А вообще, если я вызвал какой-нибудь sqrt(2), а потом забыл и вызвал sqrt(-2). Компулятор чем поможет? Компулятор не может знать за тебя все. Так что раст хоть и помогает, но скорее от невнимательных товарищей, которые пишут код на от…ь.

anonymous
()
Ответ на: комментарий от anonymous

Они двигаются, прогресс идёт, но связи между этими двумя фактами нет.

t184256 ★★★★★
()

Совсем чокнулись на свободах

anonymous
()

Rust ― является торговой маркой

так же как Linux, Ubuntu, Firefox, Java и прочие

разрешенным к употреблению без согласия Mozilla Corporation

а как это решается, бывают свободные товарные знаки?

InterVi ★★★★★
()
Ответ на: комментарий от mx__

Используют комбинированные обозначения - текст + картинка. Причём можно использовать то же слово, только с картинкой, где шрифт отличается, и это уже другой товарный знак. К примеру, Бритиш Американ Тобакко-СПб, выпускающая сигареты Ява, имеет товарный знак на «JAVA». Есть ещё чай с товарным знаком «Java» и тот самый оракл с тем же словом.

InterVi ★★★★★
()
Ответ на: комментарий от DllMain

Посмотри как в расте. Копирование сложных объектов вызывается явно. Передача по ссылке тоже. Иное - перемещение. Вполне вменяемое поведение, без всяких глупостей как в плюсах.

khrundel ★★★★
()
Ответ на: комментарий от anonymous

Лол, а тебе не кажется, что если программисту позволено не париться ни по поводу конвертации типов (компилятор сам вставит вызов конструктора класса), ни по поводу создания копии объекта, она тоже создастся неявно, но при этом требуется внимательно следить за вещами, которые не имеют отношения к собственно поведению программы, а нужны просто для обхода закидонов языка, и подобные ошибки отловятся только в рантайме, то это плохой язык?

Защитники плюсов - вообще странные люди, вы блин посмотрите на выступления своего трупа страуса, это ж натуральный престарелый хипстер. Я посмотрел одно - он начал с того, как его не понимали преподы, за то что он создаёт язык, в котором вызывая функцию не знаешь, какую конкретную ты вызовешь, и закончил руганием ретроградов, которые вызывают qsort из stdlib вместо стильного модного молодёжного std::sort. Вместо обсуждения серьёзных проблем языка в наше время многоядерности и асинхронщины, он доказывал прогрессивность своего языка на примере «std::sort работает не хуже сишного!», замени плюсы на джаваскрипт и получишь примерно ту же структуру выступления.

Реальные разработчики, которым нужен системный низкоуровневый язык, выбирают чистый C, им не надо непонятной неявщины, реальные прикладники сидят на всяких джавах, плюсы фактически язык для легаси, но нет, мы будем сидеть и ждать, когда в 202*м году выйдет новый стандарт и нам наконец починят мелкий косяк, в то время как крупные косяки никуда не денутся.

khrundel ★★★★
()
Ответ на: комментарий от khrundel

реальные прикладники сидят на всяких джавах

Прикладники какой области?

плюсы фактически язык для легаси

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

grem ★★★★★
()
Последнее исправление: grem (всего исправлений: 1)
Ответ на: комментарий от khrundel

Не ври! Прикладники тоже на С сидят. Ну, а хипстеры - на пхытоне.

anonymous
()
Ответ на: комментарий от DllMain

Я тебе уже 2 раза объяснил.

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

У тебя какая-то странная проблема с логикой, я привожу пример, который должен показать, что плюсы fucked up beyond any repair, что проблема у них в ДНК, что нормального перемещения в них нет и не будет, нужен новый язык, я демонстрирую в чём проблема, а ты мне суёшь под нос фактически мой же пример и предлагаешь починить, не трогая C++. Это невозможно. Да, оно так и будет костыльно, всегда (ну, или случится чудо, и появится решение, до которого никто не допер ещё). Ты это хотел доказать?

khrundel ★★★★
()
Ответ на: комментарий от grem

Прикладники какой области?

Из любых. Ну, конечно, не только на java, на всё прочее, включая джаваскрипт и свякие .net. Но C++ в общем эту область слил.

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

Нет. Это верно только для языков типа perl, которые когда-то были популярны, а теперь интересны только в рамках развития старых проектов.

khrundel ★★★★
()
Ответ на: комментарий от khrundel

Я тебе уже 2 раза объяснил

Это где?

Как компилятор должен действовать при виде такого: ...

вот когда мы договоримся до синтаксиса и семантики, можно будет обсуждать

Я спрашивал тебя о твоём видении

Посмотри как в расте

Странный вы народ, сектанты

DllMain
()
Ответ на: комментарий от DllMain

Мда уж.

«вот когда мы договоримся до синтаксиса и семантики, можно будет обсуждать» == «нужен нормальный язык, с синтаксисом и семантикой»

«Посмотри как в расте» == «вот пример нормального языка»

Ладно, я могу поверить, что я свою мысль неясно выразил и ты сразу не так понял, но когда ты эти ссылки искал, уже имея объяснение, неужели не разглядел?

khrundel ★★★★
()
Ответ на: комментарий от khrundel

Из любых. Ну, конечно, не только на java, на всё прочее, включая джаваскрипт и свякие .net. Но C++ в общем эту область слил.

Каких любых? Какие именно прикладные направления имеются ввиду?

Нет. Это верно только для языков типа perl, которые когда-то были популярны, а теперь интересны только в рамках развития старых проектов.

То есть для всех языков которые использовались для написания проекта и его текущей поддержки. Нет проекта - нет Легаси. Всё просто.

P.S. Единственная нормальная и интересная тема о софте на Rust была у @vertexua (Переехал на кучу утилит переписаных на Rust). Остальные сродни «фотодрочерству» - сплошные обсуждения преимуществ при полном отсутствии конечного результата.

grem ★★★★★
()
Последнее исправление: grem (всего исправлений: 1)
Ответ на: комментарий от DllMain

Как компилятор должен действовать при виде такого:

void f(type&& t) { g(t); h(std::move(t)); }

Типа так:

fn f(mut t : SomeType) 
{ 
    g(& mut t); // это если g принимает параметр как t& в С++
    h(t); // это std::move(t)
}

pub fn main() {
    let a = SomeType{v: 0};
    f(a);
}

В расте просто дефолты другие. Для move ничего писать не нужно, но для const& и просто& нужно писать: & и &mut соответсвенно.

fsb4000 ★★★★★
()
Последнее исправление: fsb4000 (всего исправлений: 2)
Ответ на: комментарий от fsb4000

Разница не только в этом. В плюсах есть ещё и перегрузка, поэтому если забудешь явно указать, то ничего страшного не случится, ну скопируется дерево из 100500 элементов, а потом старое удалится.

khrundel ★★★★
()
Ответ на: комментарий от khrundel

Ну удали в классе оператор копирования и конструктор копирования, оставь только move конструктор и оператор и определи в классе метод clone. Будет почти как в расте. В чём проблемы?

fsb4000 ★★★★★
()
Ответ на: комментарий от grem

сплошные обсуждения преимуществ при полном отсутствии конечного результата

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

bread
()
Ответ на: комментарий от fsb4000

Ну удали в классе оператор копирования и конструктор копирования, оставь только move конструктор и оператор и определи в классе метод clone. Будет почти как в расте. В чём проблемы?

Из условного вектора удалить?

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

khrundel ★★★★
()
Ответ на: комментарий от khrundel

Кстати, про устаревание и прочее. После знакомства с Rust и F#, я потом попробовал сделать в С immutable тип, и обнаружил для себя что C их уже поддерживает. Нужно лишь дописывать const.

typedef struct 
{
    int const x;
    int const y;
} Point;

int main()
{
    Point p = {.x = 2, .y=3};
    p.x = 5; // ошибка компиляции
    //но вот так можно
    p = Point {.x=5, .y=3};
    // я специально не поставил const у p, чтобы можно было делать как в Rust, с повторным let
    // let p = Point {x: 2, y: 3};
    // p.x =5 ; // ошибка компиляции
    // let p = Point {x: 5, y: 3}; // ok
}
fsb4000 ★★★★★
()
Последнее исправление: fsb4000 (всего исправлений: 3)
Ответ на: комментарий от grem

Каких любых? Какие именно прикладные направления имеются ввиду?

Ну… как бы я не могу уточнить понятие «любые». «Любые любые»? Это как вывеска «пива нет совсем» получится.

То есть для всех языков которые использовались для написания проекта и его текущей поддержки. Нет проекта - нет Легаси. Всё просто.

Мда. Ты видишь некое новое словосочетание «язык для легаси» и говоришь, что оно не имеет смысла, так как описывает практически любой язык. Тебе отвечают, дают нормальное определение, под которое подходят не все языки, тот же Питон, например, не походит, хоть и старый уже. Но ты начинаешь спорить, доказывать что то, тупое и бессмысленное определение, которое подходит под любой язык, оно и есть правильное. Л-логика.

khrundel ★★★★
()
Последнее исправление: khrundel (всего исправлений: 1)
Ответ на: комментарий от khrundel

Защитники плюсов - вообще странные люди

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

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

То-то новые ОС и СУБД валом пишут на C++, наверное чего-то не поняли пацаны. Может, не читали khrundel, что C++ - вовсе не быстрый язык.

плюсы фактически язык для легаси

Хоронили C++, порвали два баяна (c)

но нет, мы будем сидеть и ждать, когда в 202*м году выйдет новый стандарт и нам наконец починят мелкий косяк

Плюсовики работают. Сидят и ждут растаманы, пока в 203*м библиотек станет достаточное количество и качество.

// Rust - хороший язык, у C++ много проблем, и мыслящим людям ясно что у каждого есть плюсы и минусы. Только у фанбоев и хейтеров всё однозначно.

anonymous
()
Ответ на: комментарий от anonymous

То-то новые ОС и СУБД валом пишут на C++, наверное чего-то не поняли пацаны. Может, не читали khrundel, что C++ - вовсе не быстрый язык.

Наркоман штолле? Всё низкоуровневое в основном на обычных сях написано, ну, за исключением хайку ос, но она по сути клон хипстерской беос. Да и где ты вообще видел, чтоб СУБД и операционки «валом» писали? Разве что в виде курсовых.

Плюсовики работают.

Ты в слове «джаваскриптеры» слишком много ошибок допустил.

Сидят и ждут растаманы, пока в 203*м библиотек станет достаточное количество и качество.

Тут выше давали ссылку на ветку с обсуждением кучи говна, написанного растоманами. Так что всё норм, библиотеки, видимо, подъехали уже

khrundel ★★★★
()
Ответ на: комментарий от khrundel

Ну… как бы я не могу уточнить понятие «любые».

Можешь.

Заявление, что прикладники во всех этих категориях пишут на ,java, javascript и .net - ложь.

Мда. …

Никакого нормального определения не было, только размытая болтовня без конкретики. «Когда-то были популярны» - это не определение языка для legacy (сама фраза «язык для legacy» - идиотизм). Legacy - это явно не то, ради чего нужно активно добавлять новые фичи, что в саму программу, что в язык.

grem ★★★★★
()
Последнее исправление: grem (всего исправлений: 1)
Ответ на: комментарий от khrundel

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

anonymous
()
Ответ на: комментарий от grem

Заявление, что прикладники во всех этих категориях пишут на ,java, javascript и .net - ложь.

Ути-пути.

Ну ок, считай что ты меня умыл, тем более никакой вменяемой мысли за душой у тебя нет, спорить о том, является ли СУБД прикладным софтом или является ли браузер, которому 10+ лет легаси я не буду.

Тем не менее, не для тебя, а для разумных людей, я всё-таки повторю: прикладники выкинули нахрен C++ и пишут на всяких джавах. Осталось одно легаси.

Никакого нормального определения не было, только размытая болтовня без конкретики.

Видишь, всё что ты можешь возразить - это докопаться до термина. ОК, давай представим, что это не ты, а я - дурак и не знаю правильного значения термина «язык для легаси», зачем-то выдумал своё. Я уже объяснил, что я имел ввиду, а название выбери ты сам. Дальше мысли будут?

Legacy - это явно не то, ради чего нужно активно добавлять новые фичи,

Глупость. Вот достался тебе старый проект, в котором 100500 строк типа for(int i = 0; i < cont.size(); ++i) if (condition(cont[i]))cont2.push_back(cont[i]); значит ли это, что если тебе понадобится добавить ещё один подобный кусок, обязательно писать дурацкий цикл и поэтому нормальная операция фильтрации в функциональном стиле тебе не нужна?

Нет, конечно. Язык для легаси вполне может развиваться, если легаси достаточно много, чтоб обеспечить спрос.

khrundel ★★★★
()
Ответ на: комментарий от khrundel

прикладники выкинули нахрен C++ и пишут на всяких джавах

И много у тебя прикладных программ на java на компе? Ах да, они же все Легаси.

grem ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.