LINUX.ORG.RU
Ответ на: комментарий от Reset

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

vertexua ★★★★★
()

Столяров выкатил портянку от имени школьника?

moonmadness
()

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

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

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

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

В том что println! реализуем средствами языка

нет.

В Rust вроде нет поддержки consteval функций из C++. И format! захардкожен в компиляторе.

В С++ вот можно реализовать Rust println! средствами языка…

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

Добавил по приколу -O - в итоге и у rust и у С 1 строка получилась, т.к. side-effect отсутствуют, просто ret.

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

Я бы сказал, что моя претензия к автору статьи - это формат размещения. Одно дело на каком-то личном бложике это писать. А другое - целый домен для этого покупать. Конечно с точки зрения HTTP разницы нет, но как-то меня коробит от такого формата, особенно когда он несёт мягко говоря спорные мысли. Так-то и я могу дичи нанести, но хотя бы не делаю это в формате великой истины и свою глупость локализую в псевдоанонимном форуме.

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

Отрицание

вы находитесь здесь

Гнев

Торг

Депрессия

Принятие

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

целый домен для этого покупать

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

goingUp ★★★★★
()

Ямимокрокодил, но всегда интересовало: C/C++, JS, Java и php не стесняются использовать общие какие-то виды синтаксиса (не, JS из-за сильного отличия теперь стесняется).
Зачем тут все эти fn, let mut и т.п.?

А так, Firefox, улучшившийся из-за использования rust, проясняет смысл сабжа.

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

Не хочу обидеть автора, но на первый взгляд, ничего особенно годного я не нашел. ИМХО, проекты выглядят просто как учебные/домашние проекты с небольшим налётом NIH синдрома. И это всё хорошо как учебные проекты или курсовые работы.

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

Ну вот, взять, например, тот-же vedns. Проблема с хорошими и понятными библиотеками для работы с DNS и вообще резолвом имён, действительно, существует: как только по какой-то причине тебе требуется выйти за рамки стандартного gethostbyname (и родственных функций), то сразу-же начинается боль. Но вот в природе есть как минимум два хороших production-stable решения на C: udns и adns. Зачем юзать что-то ещё ? Зачем велосипед ещё один изобретать ? Полноценная работа с DNS - это нифига не простая задача, даже самые частые use-case’ы по простому не покрыть 350 строчками кода как не крути…

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

DawnCaster ★★
()
Последнее исправление: DawnCaster (всего исправлений: 2)

Вересов в данном случае неосилятор. Растовый компилятор больно бьёт программиста батареей по рукам и поделом.

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

Причём в C понятия nostd вообще нет,

ЛПП. –no-std-lib и ты остаёшься один на один с тем что у тебя в исходниках есть.

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

Ямимокрокодил, но всегда интересовало: C/C++, JS, Java и php не стесняются использовать общие какие-то виды синтаксиса (не, JS из-за сильного отличия теперь стесняется).

А другие языки «стесняются». А точней не считают нужным нести идеи 60-х годов.

Зачем тут все эти fn, let mut и т.п.?

Почему бы нет? Не знаю, откуда fn, но let, например, это ocaml (ну и lisp в какой-то степени). Лучше mut я не знаю, что можно придумать, ведь задача - чтобы переменные в коде выделялись, mut с этим справляется хорошо.

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

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

Legioner ★★★★★
()

у него уже есть сайт whyilovepascal.com?

xmikex ★★★★
()

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

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

На самом деле самая главная роль std это интероперабельность между библиотеками, я так считаю. Без нормального std получается ситуация как в C++, когда каждая крупная библиотека реализует свои строки, коллекции и тд, а при попытке использовать две библиотеки, начинается куча геморроя по конвертации QString в wxString-и и подобное.

Вторая роль std это хорошая реализация часто используемых классов и функций. Без этого, особенно на первых порах, придётся постоянно искать какие-то популярные библиотеки и тд. Но тут уже важно соблюсти баланс. Скажем, ответ на вопрос про то, нужен ли http-сервер в стандартной библиотеке, для меня совсем не очевиден. Реализация строк - нужна. Реализация ArrayList, HashMap - нужны. Реализация какой-нибудь хорошей сортировки - нужна. А вот реализация всех сортировок, которые придумало прогрессивное человечество - однозначно: нет.

Legioner ★★★★★
()

Возраст ученика-автора понятен.
Видимо, Столяров — этот тот пранкер, который звонил из Лимпопо в конгресс.

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

Говно статья. Чувак просто описал своё неосиляторство концепта языка, а настоящие проблемы они несколько глубже закопаны.

Поверхностно и тезисно:

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

2 - засилие асинка в экосистеме. Попытка написать что-то полезное, опираясь на существующие либы приведёт к явному или неявному подтаскиванию tokio и прочих футур. Ну потому что хочешь не так - закатывай залу^Wсолнце вручную.

3 - Отсутствие внятных статей по проектированию ПО на расте. В основном всё либо «пишем хелловорлд» либо вида «Рисуем сову».

Там ещё есть, но формулировать лень, а пофлеймить уже хватит.

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

Да. Ты делаешь крейт типа proc-macro, который содержит одну или несколько функций вида

#[proc_macro]
pub fn foo(_tokens: TokenStream) -> TokenStream {
    /* ... */
}

Затем импортируешь его в своём крейте типа bin/lib и используешь как любой другой макрос:

use my_proc_macros::foo;

foo!(...);
anonymous-angler ★☆
()
Ответ на: комментарий от Legioner

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

В нормальных языках для этого есть val и var, а не убогий let mut.

Reset ★★★★★
() автор топика
Ответ на: комментарий от anonymous-angler

Напиши полный код.

Без кода это пиздёшь.

Почему разработчики Rust так не написали, а встроили эту функцию в компилятор?

fsb4000 ★★★★★
()
Последнее исправление: fsb4000 (всего исправлений: 1)

Критиковать Rust – пинать лежачего, но и здесь адепты Столярова сумели опозориться.

Автору желаю скорее выучить значение слова «рантайм» и разницу между скоростью и размером генерируемого кода.

Siborgium ★★★★★
()

Никогда не использовал Rust и ровным счетом ничего в нем не понимаю. Но в соседней вкладке в рекомендациях гугла выскочила такая вот ссылка: How not to learn Rust

Кто понимает, там содержимое более адекватно?

YogSagot ★★☆
()
Ответ на: комментарий от anonymous-angler

Вообще-то есть. Хотя пока ещё далека до того чем должна в итоге стать.

А как там создать такую функцию?

Просто consteval это функция которая обязана быть вызвана на этапе компиляции. И для форматных строк нужен именно consteval, а не constexpr который может быть вызван либо в рантайме либо в компилтайме.

Rust const fn насколько я понял это аналог C++ constexpr. А нужен именно consteval чтобы компилятор ругался если не мог вызвать функцию во время компиляции.

Типа на такое, чтобы появлялась ошибка компиляции:

fn test(s: &String) {
    println!(s, 1);
}
fsb4000 ★★★★★
()
Ответ на: комментарий от fsb4000

Напиши полный код.

Без кода это пиздёшь.

Что-то мне кажется что там писать довольно много. И ладно бы ещё для чего-то дельного, но ведь нет - для доказательства на помоечном форуме. Я пас.

Почему разработчики Rust так не написали, а встроили эту функцию в компилятор?

Вот это уже хороший вопрос. Выясню - отвечу. Впрочем, единственное объяснение которое у меня сейчас есть - так сложилось исторически. proc-macro появились значительно позже чем format_args!, и как следствие - println!.

anonymous-angler ★☆
()
Ответ на: комментарий от Dark_SavanT

Отсутствие внятных статей по проектированию ПО на расте. В основном всё либо «пишем хелловорлд» либо вида «Рисуем сову».

пофлеймить хватит

Какой пофлеймить, щас всплакнем.

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

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

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

Само по себе наличие такой библиотеки он ни как не осуждает.

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

раст работающим без стандартной библиотеки, а только спрятали её под макросы

Бегом в школу, учить разницу между compiler built-in и standard library.

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

При достаточном желании, можно обойтись только panic handler и .bss clean, и из всего core использовать только типы данных. итоговый выхлоп после линкера будет +- сопоставим с голым сишным.

Да, я это на контроллерах проверял.

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

Всегда может быть вызвана при рассчёте констант:

const fn foo() {
    ...
}

Никогда не может быть вызвана при рассчёте констанат:

fn foo() {
    ...
}

Если нужно что бы была ошибка компиляции при определённых аргументах, то:

const fn foo(x: i32) -> i32 {
    if x % 2 == 1 {
        panic!("Odd!");
    } else {
        x
    }
}

Так же отмечу, что println!() - это макрос, и первым аргументом он принимает строковой литерал, а не строку/ссылку на строку/указатель на строку. Т.е. println!(s, 1) невалидно всегда.

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

Всегда может быть вызвана при рассчёте констант:

Упрощенно говоря, consteval это «может быть вызвана только для расчета констант».

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

А вот отсюда поподробнее,что из функций языка прибито к std?

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

И такие пасажиры будут ржать над сишными хаками и gcc-специфичными расширениями... Если в СИ оно есть, но как бы никто так специально не хотел, то смузихлебы это сделали намерено. Гениально, че.

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

Такого нет. И это кстати логично. Если ты с помощью функции можешь рассчитать константу и затем скопировать значение в переменную, то какой смысл этого органичения?

anonymous-angler ★☆
()

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

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