Опубликован релиз языка программирования общего назначения Rust 1.79, основанного проектом Mozilla, но ныне развиваемого под покровительством независимой некоммерческой организации Rust Foundation. Язык сфокусирован на безопасной работе с памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime (runtime сводится к базовой инициализации и сопровождению стандартной библиотеки)...Подробнее: https://www.opennet.dev/opennews/art.shtml?num=61362
Зачем нужен консорциум, если Rust и так безопасный?
> если Rust и так безопасный?Раст защищает от целого класса ошибок с памятью и гонок данных. Но и другие типы ошибок, напр. логические.
Полная верификация это долго и очень дорого - можно почитать сколько стоила верификация seL4, поэтому пытаются найти баланс.
1) синтаксис
2) борьба с компилятором вместо работы
3) аргессивная реклама и фанатикиЯ как плюсовик несколько раз пытался тыкать раст, поддавался на хайп, но это скам, а не язык
Я не топлю ни за раст ни за С++ ни за любой другой язык. Но слышать такое от С++ разраба это вообще дичь. Борьба с компилятором? Это когда ошибки в С++ хер прочтешь это ли не борьба с компилятором? Или когда в С++ куча неявного поведения в стандартной библиотеке? Самое глупое например что я видел это std::endl который казалось бы должен просто добавлять конце строки в поток. Но он ко всему этому еще и флашит буффер. Почему он делает то о чем его название не говорит? Почему я должен об этом догадаться? Или почему в мапе если нет значения при использовании с квадратными скобками он создаст значение? Это ж так очевидно, опять делают то что не просятВсе просто! Чтобы эффективно программировать на С++ ты ОБЯЗАН учить абсолютно все к чему притрагиваешься не важно на сколько очевидным оно тебе кажется. Это ж так удобно
С rust то же самое, но вдобавок ужасный синтаксис и строгий компилятор, мешающий прототипированию.
> С rust то же самое, но вдобавок ужасный синтаксис и строгий компилятор,
> мешающий прототипированию.В расте хватает говна согласен и не мало, особенно с избыточностью тех же unwrap(мелочь а бесит) и так далее. Но там чуть больше логики я в этом вижу(могу быть не прав, это субъективно для меня). Плюс все удобства в виде встроенного инструментария тестирования а также пакетного менеджера и нормального билда а не анального траха с CMake и других таких вещей. Мне по работе необходимо много работать с С++ кодом и это дичь зачастую. Только если у тебя ОЧЕНЬ много опыта в С++ ты сможешь писать достаточно красивый, логичный и эффективный код.
Zig спасёт отца демократии
> В расте хватает говна согласен и не мало, особенно с избыточностью тех
> же unwrap(мелочь а бесит) и так далее. Но там чуть больше
> логики я в этом вижу(могу быть не прав,Ага, вон там товарисч фрикодер пример подогнал логику! :)
fn foo<'a, T: FromStr, I: IntoIterator<Item = T>, F: Fn(T) -> bool>(
self: &'a Self,
first: T,
callable: F,
iter: I,
) -> Result<&'a T, T::Err> {
// ...
}
Ну что, сиплюсплюсеры, обломались?! Вас таки сделали!
Даже у С++ эта абракадабра сломает мозг.) Еще более извращенный синтаксис, чем у С++
>строгий компилятор, мешающий прототипированиюпрототипы на расте пишутся так же легко как и на плюсах, может даже легче.
а кому и это сложно, тот вообще прототипипует на питоне.
> а кому и это сложно, тот вообще прототипипует на питоне.И потом 20 лет пытается переписать на Си.
главное что у человека эти 20 лет есть хлеб с маслом, и возможно и на икорку хватает.
> Почему я должен об этом догадаться?Ты должен для начала открыть reference manual чтобы не удивляться очевидному) П.с. Это если твоя IDE не подсвечивает синтаксис))
А ссылка где?
Почему до сих самых пор игры пишут на плюсах, а не на расте? В плюсах же - ведь все настолько плохо... а как вообще окна написали? Да и весь остальной код.
Очевидно, потому, что C++ гораздо раньше появился на свет, и уже успели написать очень много, и переписывать всё на новом языке выйдет довольно дорого (хотя движки игровые уже начали появляться и на Rust). Кроме того, в играх ошибки работы с памятью не особо критичны. Ну упадёт где-то игра, никто особо на деньги не пострадает. Только настроение у игрока испортится. Игру починят, и поедут дальше. В критичных же для бизнеса приложениях подобные ошибки чреваты большими убытками.
Раст уже 9 лет как "стабильный" язык почему на нём ничего не пишут?
пишут и много
например в блокчейне
очередное подтверждение, что это скам, а не язык
А биток ака "золотой стандарт" внезапно на крестах.
Ну, Вы поняли.
Про скам там уже писали.
Биткоин появился раньше, чем Rust.
Тем не менее, он не написан скажем на жабе.
> Тем не менее, он не написан скажем на жабе.Java плохо подходит для программ, требующих высокой производительности.
Вместе с тем бОльшая часть энтерпрайзного софта пишется на ней и на шарпах. По крайней мере из того, что видел лично я. Сейчас не говорю о том, что узкие места обычно пишутся на низком уровне.
Тем не менее Сатоши не воспользовался подобной парадигмой, а написал на крестах все, причем по мнению экспертов сделал это красиво.Можем ли мы видеть корреляцию компетенций и айсикью в данном примере?
Ведь сама по себе реализация кодовой базы - вопрос прикладного характера, во многом руководствующийся бизнес логикой. Здесь же человек и/или группа людей придумал/и действительно новую фичу, вызвавшую усиление пульса пониже спины у представителей мировой фин системы, да еще и красиво реализовав на крестах. Без шума, пыли, охов и вздохов.
А ведь мог взять какую-нить предтечу раста, да в узких местах наваять на сях. Ан нет, почему-то он так не сделал.Во истину этот человек гений. По моему скромному мнению.
BitShares был написан на плюсах и соскамился. Solana написана на Rust и держится. Нет ли тут корреляции?
Посмотрите гитхаб юитшарес, узнаете много нового и интересного.Нет, корреляции не наблюдаю. Множество проектов однодневок использовало внезапно открытую кодовую базу мастодонтов.
Про солану почитайте новости, не так давно минувших дней.
> Раст уже 9 лет как "стабильный" язык почему на нём ничего не пишут?а что нового за это время написали на плюсах?
все более менее стоящее стартануло сильно раньше.
Так в стабильном языке до сих пор стабилизацию делают. От версии к версии.)))
> Почему до сих самых пор игры пишут на плюсах, а не на
> расте? В плюсах же - ведь все настолько плохо... а как
> вообще окна написали? Да и весь остальной код.Как тот кто пробовал писать на плюсах и на расте для игр я скажу что в расте это просто больно из-за дикой строгости. В играх всегда важна скорость иттераций и процесс проверки идей. А также С++ более близко интегрирован со всеми библиотеками котоыре используют для разработки игр и все SDK также поставляются с заголовками на С++.
Rust раз за разом бьет программиста по рукам - раз язык должен себе такое позволять?
Бьёт только до тех пор, пока программист не научится программировать на Rust.
Язык должен делать то, что пожелает программист... не наоборот. Тем более бить его про рукам.
Конечно. Поэтому Rust позволяет программисту делать всё, что он пожелает. Просто желать не нужно скверного.
> Конечно. Поэтому Rust позволяет программисту делать всё, что он пожелает. Просто желать не нужно скверного.Но тем не менее он позволяет делать даже скверное
Потому что если в игрушке будет out-of-bounds и она внезапно удалит все файлы юзера, то бідем иметь одну сгоревшую задницу.
А если такое же будет в ядре линукс, но получим удаленное выполнение случайного кода, то попа сгорит у кучи админов и людей с деньгами.Поэтому в ядро добавляют раст, а на геймеров всем плевать.
Потому что крупные игры на слуху делают не на языке, а на движках, первая 5ка из которых появились задолго до появления ржавого. По моему тут все просто. На rust идет разработка движков. Да и игры есть, не крупные конечно де пока. Все это гуглится на ура.
> Я не топлю ни за раст ни за С++ ни за любой другой язык.Типичная манипуляция, позволяющая, по мнению автора, поставить Rust на одну доску с языками программирования. Это, очевидно, не так. Rust - очередной пузырь. Надеюсь, скоро сдуется.
Но ведь основа любого пузыря это святая вера.
Вот я уже более пяти лет активно использую Rust в разработке, и у меня всё хорошо. Язык улучшается, экосистема растёт, что не может не радовать. Почему это он вдруг должен "сдуться"?
Думаю если добавить все добавления в ядро, драйвера от шапки и асаши, то у хейтеров будет вообще кислое выражение лица)
Владельцы линукса решили что им достаточно CVE в ядре и теперь будут исправлять ситуацию
> ты ОБЯЗАН учить абсолютно все к чему притрагиваешьсяДа, так всегда в жизни
> Это когда ошибки в С++ хер прочтешь это ли не борьба с компилятором?Ты читать не умеешь что ли?
>> когда ошибки в С++ хер прочтешь это ли не борьба с компилятором?Смените IDE.
Вон, в Visual Studio, ткнёш в ошибку, и предлагаются варианты исправления на выбор, при опечатках и явных плюхах, то есть человеческом факторе, очень ускоряют работу.>>казалось бы должен просто добавлять конце строки в поток. ... этому еще и флашит буффер.
Кажется - перекрестись и сплюнь.
Если поведение не явно оговорено, то ПО УМОЛЧАНИЮ будет как угодно, ибо иного не обещано, но на самом деле Вы можете настроить срабатывание flush.
>>Почему он делает то о чем его название не говорит? Почему я должен об этом догадаться?Потому что плохо учились, или мало учились.
тот самый visual studio который чтоб скачать - надо на тридварасов посмотреть?
Не понимаю, на что у Вас приходится смотреть. Вы с этой планеты пишете?
4. Экосистема, завязанная на централизованный обмен пакетами.
Помню был случай, когда разраб для экономии времени сборки запихал в crate блоб.
Что помешает этому же разрабу проделать подобное с кодом, который не входит в эту экосистему? И причём здесь вообще экосистема, которая всего лишь существенно облегчает поиск нужного тебе пакета и интеграцию в твой проект?
нафига это, если есть пакетный менеджер ОС и git?
Устанавливайте зависимости напрямую из любого гит репо, кто же вам запрещает.
> Устанавливайте зависимости напрямую из любого гит репо, кто же вам запрещает.Билдовка е...чим cargo и потуги качать полинтернета на каждый пшик.
>> Устанавливайте зависимости напрямую из любого гит репо, кто же вам запрещает.
> Билдовка е...чим cargo и потуги качать полинтернета на каждый пшик.Зачем тебе инет?
Ты что, до сих пор не осилил как в toml прописать локальные зависимости?Почитай хоть доку перед тем как позориться
doc.rust-lang.org/cargo/reference/specifying-dependencies.html
> Зачем тебе инет?
> Ты что, до сих пор не осилил как в toml прописать локальные зависимости?В каждом проекте это делать несколько задолбает. ЯП продвигает практики попадения на зависимость от вон той клики корпоративных директоров с единственной репой, увы и ах.
> Почитай хоть доку перед тем как позориться
> doc.rust-lang.org/cargo/reference/specifying-dependencies.htmlДоки доками а фактическкое состояние дел - это фактическое состояние дел.
>В каждом проекте это делать несколько задолбает.Но в Си или Плюсах - это, считай, обязаловка. И тебя это почему-то устраивает.
>ЯП продвигает практики попадения на зависимость от вон той клики корпоративных директоров
Как будто тебя кто-то заставляет попадать к ним в зависимость.
> с единственной репой, увы и ах.
Никто не запрещает создать свою и пользоваться ею.
>Доки доками а фактическкое состояние дел - это фактическое состояние дел.
То, что тебе мерещится и у тебя паранойя - это не фактическое состояние дел, это искаженное восприятие реальности.
>>В каждом проекте это делать несколько задолбает.
> Но в Си или Плюсах - это, считай, обязаловка. И тебя это почему-то устраивает.На сях или плюсах я могу либы ставить - системным пакетником. Не гадясь под себя левым сторонним пакетным манагером - и не разводя срачи, ибо все это барахло - учитывается. В одной программе которой и рулится. И майнтайнерам моего дистро я доверяю сильно больше чем амазону, гуглу и майкрософт из совета директоров хруст фаундейшна. Почему-то.
Какие-то исключения сверх того - разве что убер-свежак или что-то совсем экзотичное. А тут сделали удобно маздайщикам ваяких, не забыв вкатить подобие вендорлока. Незачет.
> Как будто тебя кто-то заставляет попадать к ним в зависимость.
Существующие проекты юзающие это - вполне себе. И это недостаток. По сравнению с сями и плюсами, ага. Да, меня волнует "effective rule set" с котторым придется столкнуться а не формальные отмазки.
>> с единственной репой, увы и ах.
> Никто не запрещает создать свою и пользоваться ею.Кроме того что в сях/плюсах я просто пойду и просто сбилдую а тут - левый гимор с каждым первым проектом.
> То, что тебе мерещится и у тебя паранойя - это не фактическое
> состояние дел, это искаженное восприятие реальности.Это де-факто состояние дел. И перетрясать каждый первый проект - мягко говоря не рулит.
> На сях или плюсах я могу либы ставить - системным пакетником.Добавят Rust сначала в ядро Линукса, а потом и в твой дистр, и будет практически то же самое. Да, понимаю, хотелось бы побыстрее. Но уж как есть.
> И майнтайнерам моего дистро я доверяю сильно больше чем амазону, гуглу и майкрософт из совета директоров хруст фаундейшна.
Внезапно Google является активным участником развития ОС Linux. Как и Microsoft, кстати. Наверное, и Amazon там же. А твой дистр основан на ядре Линукса. Тоже внезапно, наверное.
> А тут сделали удобно маздайщикам ваяких, не забыв вкатить подобие вендорлока. Незачет.
Какого конкретно вендора? Вон же, компилятор Rust команда из gcc, вроде как, пилит параллельно.
> Существующие проекты юзающие это - вполне себе. И это недостаток. По сравнению с сями и плюсами, ага. Да, меня волнует "effective rule set" с котторым придется столкнуться а не формальные отмазки.
Дык посмотри, кто стандарты для Си и Плюсов ваяет, и прозрей.
> Кроме того что в сях/плюсах я просто пойду и просто сбилдую а тут - левый гимор с каждым первым проектом.
В чём конкретно его левизна? Твой дистр пока Rust не содержит, в этом всё дело?
> Это де-факто состояние дел.
Это примерно как заявить, что рептилоиды захватили мир. Всего лишь утверждение, ничем не подкреплённое, кроме собственного мнения. О чём я и говорил ранее.
Кивание на синтаксис (вместо оценки семантики), общие слова и не технические аргументы - явные признаки "домашнего" программиста.
Конечно, профессиональный программист привык терпеть и чесание левой пяткой правого уха, всё, что от него потребует работодатель, даже абсурдное.
> 12yoexpertВот тут соглашусь с каждым пунктом данного одиозного товарисча) Особенно по 3 пункту
1) вкусовщина (другими словами непрофессионализм).
2) недостаток знаний, плохое владение предметной областью (то есть, снова не профессионализм).
3) субъективное ничем не подтвержденное мнение (опять он, непрофессионализм).
Я как сишник несколько раз пытался тыкать плюсы, поддавался на хайп, но это скам, а не язык.
А правда, когда сишнику нужна структура данных типа словаря, то они подумают-подумают, решат, что не сильно то и надо, и сделают обычную таблицу-массив?
Однозначно!
По массиву легче идти-идти, а потом раз! и выйти за пределы.
Ну, чтобы жизнь стала интереснее.
То мы берем uthash
> А правда, когда сишнику нужна структура данных типа словаря, то они подумают-подумают,
> решат, что не сильно то и надо, и сделают обычную таблицу-массив?Или возьмут готовую либу. И будет им - ну вот это вот.
Более того - можно взять скадем toxcore - и на менее чем страницу кода влезет бот распределенного p2p месенжера. И вы даже на питоне каком сильно не отыграете, ибо секрет - в клевой либе с разумным апи "месенжер в либе".
Или вон там lwan можно взять. И вот уже можно дать мастеркласс игогошнику на тему микросервисов, когда вот вам кастомный вебсервак, аж полстранички сей. С той разницей что это на си, а заодно - можно легко в топичный топ-чарт бенчмарков вломиться, есои хочется. И бинарь в сборе - не 10 мегов, а 120 кил на все.
В общем сказать что си низкоуровневый - ну вот зависит от. Каким боком целый распределенный месенжер в несколько строк, или HTTP серв так же - низкий уровень? Да, и корутины в нем тоже кстати есть, чисто по приколу - потому что могут.
> Или вон там lwan можно взять. И вот уже можно дать мастеркласc игогошнику на тему микросервисов, когда вот вам кастомный вебсервак, аж полстранички сей. С той разницей что это на си, а заодно - можно легко в топичный топ-чарт бенчмарков вломиться, есои хочется. И бинарь в сборе - не 10мегов, а 120 кил на все.
Хм, а потом вломиться в топ 10 CVE, тк срезали углы как могли?
Не представляю где может иметь значение будет бинарь 10 метров или 1, ктоме какой-то эмбедедовки.
> В общем сказать что си низкоуровневый - ну вот зависит от. Каким боком целый распределенный месенжер в несколько строк, или HTTP серв так же - низкий уровень? Да, и корутины в нем тоже кстати есть, чисто по приколу - потому что могут.
Чисто по приколу можно и на брейнфаке писать, но почему-то мало кто этим занимается))
> Хм, а потом вломиться в топ 10 CVE, тк срезали углы как могли?Да там CVE не лезут оптом, авторы одупляемые, умеют fuzzing и азы секурити. Тут надо просто смотреть на культуру кодеров и их практики. Если какой-то дид просто набивает себе цену а код - ужастик с кучей варнингов, это одно. А если это нормальный современный кодер с best practices - у него и сишку поюзать можно. Если они понимали antibug, security и все такое. Это видно.
Ну и в конце концов, изначально мы делаем софт чтобы он работал и работал хорошо. По прямому назначению. Без этого все остальное, извините, нахрен надо. А в HTTP сервантах основная масса вулнов лезет вовсе не там где вы вещаете. А какие-нибудь path traversal или request spoof и проч. При том если условному админу подшили левый реквест - еще большой вопрос что хуже. Огреть сплойтом hardened код - обломается на раз. А вот левый реквест принятый за админский - сервак сам же и выполнит, легитимным code path. И такой фигни - немеряно у всех.
> Не представляю где может иметь значение будет бинарь 10 метров или 1,
> ктоме какой-то эмбедедовки.Чем меньше кода, тем меньше багов, глюков, вулнов, майнтенанса, тормозов. Да, если кто пришил 10 мегов рантайма, может оказаться что вулны были - в нем. И какая разница что это не мой код, на результат не влияет же.
> Чисто по приколу можно и на брейнфаке писать, но почему-то мало кто этим занимается))
Ну вы можете писать на чем там вам нравится. А пример от freecoder'а выше, так то, может составить брейнфаку довольно достойную конкуренцию. А то что в новой версии это можно писать менее погано - не гарантирует что в существующем проекте таким кодом не огорошат. Си хорош хотя-бы тем что ТАКОЕ выдать кодер все же забодается и устанет, и забьет на такие потуги. Так что настолько феерично гунявый немайнтенабельный код на нем - просто неудобно.
И за дидом я могу и рефакторнуть ценное алго, подумав за них насчет краевых условий и проверив fuzzing'ом что я прав в моих идеях. Хоть это и позор для них конечно. А вон то - write-only код. Майнтайнить это не будет никто и никак.
> а заодно - можно легко в топичный топ-чарт бенчмарков вломиться, есои хочется.Но лишь топ-чарт ничего не значащих синтетических хелловротов, ага.
> В общем сказать что си низкоуровневый - ну вот зависит от. Каким
> боком целый распределенный месенжер в несколько строк, или HTTP серв так же - низкий уровень?Таким [боком], что что-то сложнее хелловрота написать и поддерживать будет сильно геморно. И ведь что-то засилия http-сервисов на сишко-лване не наблюдается - хотя казалось бы, что можно сэкономить кучу денег на куче железа ...
> Да, и корутины в нем тоже кстати есть, чисто по приколу - потому что могут.
А еще можно эмулировать ООП, функциональщину и проч. - но опять же, как обычно, плохенько-кривенько-тормознутенько (гтк передает приветы) и лишь для демонстрации "смотри как я могу".
>> а заодно - можно легко в топичный топ-чарт бенчмарков вломиться, есои хочется.
> Но лишь топ-чарт ничего не значащих синтетических хелловротов, ага.С одной стороны - я себе напилил с пяток хеловорлдвовых ботов. Они спамят меня интересными событиями и проч. И это - за считаные минуты. Без регистраций и смс. И даже локальный сегмент при отвале интернета пашет. Чем оно и круто. Теперь попробуйте это с любым иным месенжеорм на хоть каком яп. Там извините трешак - на уровне невменяемых апей, так что за счтанные минуты не получится ни на чем. Тем более без регистраций и смс. А, да, на хрусте вариант либы тоже пытались. Но оказалось что языком трындеть не мешки ворочать, так что либа как бы есть но как бы недопиленая по фичам. Хрустики слили сишникам при равноценном зарубе :)
С другой у lwan хеловорлдом так то есть некая чатрулетка с вебсокетами, реализация freegeoip - даже с лимитами - и проч. В общем то вызывающие уважения демки. И страшно не выглядят. И все это - без облизывания корпоративных ботинок, вполне самодостаточное.
А так, если так рассуждать - тогду у тех вообще 90% кода будет ненужный brainfart, да еще с периодом полураспада год-два. И уж этим ли господам пенять на эту тему?
> Таким [боком], что что-то сложнее хелловрота написать и поддерживать будет сильно геморно.
ИМХО сильно зависит от ситуации. Ну да, CRM так делать наверное не надо. Однако сейчас в тренде микросервисы, которым как раз сложными быть и не надо.
> И ведь что-то засилия http-сервисов на сишко-лване не наблюдается - хотя
> казалось бы, что можно сэкономить кучу денег на куче железа ...Засилье - нет. Но некую свою нишу нашло. Каки всякие более странные вещи типа libmicrohttpd. Этого юзают когда хотят в существующую программу немного веба добавить. Ну там морду управления грубо говоря.
> А еще можно эмулировать ООП, функциональщину и проч. - но опять же,
> как обычно, плохенько-кривенько-тормознутенькоНу вот в lwan корутины так то довольно прикольные. И уж что-что а назвать его тормозным - ну вот нет. Оно в топах чартов, застолбив ряд "профильных" бенчмарков.
> (гтк передает приветы) и лишь для демонстрации "смотри как я могу".
Этак еще окажется что вы гадили на бошки гномерам - юзая их проги и тулкит, не? Потом нубохрустики и прочие игогошики удивляются чего их считают выскoчкaми и пoзepaми :)
>> Но лишь топ-чарт ничего не значащих синтетических хелловротов, ага.
> С одной стороны - я себе напилил с пяток хеловорлдвовых ботов. Они спамят меня интересными событиями и проч.Еще можно запилить хелловрот на асме и с тем же успехом написать "сказать что си^W Асм низкоуровневый - ну вот зависит от."
>> Таким [боком], что что-то сложнее хелловрота написать и поддерживать будет сильно геморно.
> ИМХО сильно зависит от ситуации. Ну да, CRM так делать наверное не
> надо. Однако сейчас в тренде микросервисы, которым как раз сложными быть
> и не надо.Где-где эти самые массовые микросервисы, говорите?
>> А еще можно эмулировать ООП, функциональщину и проч. - но опять же, как обычно, плохенько-кривенько-тормознутенько
> Ну вот в lwan корутины так то довольно прикольные. И уж что-что а назвать его тормозным - ну вот нет. Оно в топах чартов, застолбив ряд "профильных" бенчмарков.Но кроме демок и нишевого применения ничего не видать, а так-то да "все хорошо, прекрасная маркиза!". И ГТК4 ну вот совсем почти не тормозит, ага.
>> (гтк передает приветы) и лишь для демонстрации "смотри как я могу".
> Этак еще окажется что вы гадили на бошки гномерам - юзая их проги и тулкит, не? Потом нубохрустики и прочие игогошики удивляются чего их считают выскoчкaми и пoзepaми :)Экий спрыг с "в сях можно и то, и это, во!" на "сам дурак!".
Этак еще окажется, что все кто мог, переползли с гномовского тулкита на кути и проч, оставив гномеров с их 3½ аппликухами фанатам. Потом 294ые удивляются, почему их считают балаб^W позерами.
> Еще можно запилить хелловрот на асме и с тем же успехом написать
> "сказать что си^W Асм низкоуровневый - ну вот зависит от."У асма основная проблема - в том что он вообще совсем никак не структурированый. Ни по сегментам кода, ни по абстракциям данных. И если что - я на асме еще и прогал, так что его порблемы знаю из первых рук. А вы?
Хотя прочитать лекцию тому кто асм практиковал, от того кто его на картинке и то не факт что видел - с опеннетных экспертов станется.
> Где-где эти самые массовые микросервисы, говорите?
Насчет массовых не знаю, но так можно было. А так - д@рьма больше чем золота - но это не доказывает что д@рьмо лучше. У большей части этого барахла - нужно как можно дешевле и еще вчера, и получается - понятно что.
> Но кроме демок и нишевого применения ничего не видать, а так-то да
> "все хорошо, прекрасная маркиза!". И ГТК4 ну вот совсем почти не тормозит, ага.Все познается в сравнении. Если сравнивать его с HTML, электронами всякими и проч... он даже окажется не такой уж и плохой, пожалуй, в том числе и по этому аспекту :)
> Экий спрыг с "в сях можно и то, и это, во!" на "сам дурак!".
Не спрыг а выражение мнения о тех кто ср@тся на бошку тех на чьих плечах стоит. Вот конкретно хрустики и прочие игогошики - вообще не сделали ни 1 графического тулкита достойного упоминания, так что о чем мы тут вообще? Гнум соревнуется - с секундной стрелкой. С кутями на плюсах. Но точно не с хрустиками и не игогошиками. Эти не смогли - никак.
> Этак еще окажется, что все кто мог, переползли с гномовского тулкита на
> кути и проч, оставив гномеров с их 3½ аппликухами фанатам. Потом
> 294ые удивляются, почему их считают балаб^W позерами.Так куть, внезапно, на плюсах. Хруситики и игогошики к этому не причастны, опять же. Это все побиваемые их камнями плюсеры, лол.
> У асма основная проблема - в том что он вообще совсем никак не структурированый.
> Ни по сегментам кода, ни по абстракциям данных.Вообще-то, у основных диалектов - макросы и проч были.
structы, как в сишке, с доступом к полям не через ручной расчет смещения адреса (как впрочем и к переменным на стеке), "функции-процедуры" и проч. даже упоминать не будем - кое-кто вообще "эмуляцию" OOP умудрялся делать.
Основная проблема у асма таки привязка к платформе, хоть ОС, хоть железа, там даже миграция с 32-бит на 64 - гемор.
> И если что - я на асме еще и прогал, так что его порблемы знаю из первых рук. А вы?В свое время и гуевые приложения на тройку-другую тыщ строк кода на нем писал и парочку под "барметал" и вон там даже HTTP (правда, еще 1.0) сервис был.
Точно хотите померятся "длиной"?> Хотя прочитать лекцию тому кто асм практиковал, от того кто его на картинке и то не факт что видел - с опеннетных экспертов станется.
Эк самокритично-то, но почему о себе - в третьем лице?
> Вообще-то, у основных диалектов - макросы и проч были.Тем не менее, все очень педальненько и криво. Да еще и непортабельно напрочь а струткурирование программы - ужасное. Слишком разлаписто: логика теряется в деталях.
> structы, как в сишке, с доступом к полям не через ручной расчет
> смещения адреса (как впрочем и к переменным на стеке),В асме таки нет каких-то особых проверок типов по настоящему. И в целом - структурирование программирование не про асм.
Понятно что с эн костылей можно сделать подобие си. Но сишка + если очень надо немного asm() или simd интринсиков, будет лучше. Потому что там это все по настоящему и портабельно.
> "функции-процедуры" и проч. даже упоминать не будем - кое-кто вообще
> "эмуляцию" OOP умудрялся делать.Да понятно что с препроцессором и макро можно развернуться. Я на си сделал себе проверки что не трогаю явно левые биты вон тех регистров MCU, так что ну вот не даст тронуть 33-й бит в 32 бит регистре, да еще сломав все в компилтайме при такой попытке.
> там даже миграция с 32-бит на 64 - гемор.
А также нечитаемые разлапистые хреново структурированные программы. Настолько залезающие в детали что я вообще не вижу глобальную логику этого в чужой программе так сразу, если она крупнее пары кило.
Да и называя вещи своими именами - я через пару кило устану трекать юзался ли энный регистр, в отличие от LTO-оптимизера какого. А вот ему не облом помнить что три кило назад уже вгрузили пригодную константу в тот регистр, возьмем-ка ее тут за базу и вкодируем в команду только смещение от?! Самому на асме так очень гиморно.
> В свое время и гуевые приложения на тройку-другую тыщ строк кода
Я видел огромные проекты на асме, на сотни кило (вы их никогда не увидите, confidential proprietary). С очень сложной логикой, продвинутой математикой и проч. Проблема в том что это почти не подлежало расширению и майнтенансу. Даже мелкую фичу добавить - мучение. На сишке в 100 раз проще.
> Точно хотите померятся "длиной"?
Я могу. Но не факт что хочу. И посмотрев на то - я предпочел уметь сишку.
> Эк самокритично-то, но почему о себе - в третьем лице?
Ну, потому что я умею в несколько разных асмов, си, и например МК всякие. А вот что эксперт опеннета имеет сравнимый бэкграунд - таки очень редкое явление природы. Если я все же ошибся, чтож, это приятный сюрприз.
>> Таким [боком], что что-то сложнее хелловрота написать и поддерживать будет сильно геморно....
>>> лишь для демонстрации "смотри как я могу".
> Насчет массовых не знаю, но так можно было. А так - д@рьма больше чем золота - но это не доказывает что д@рьмо лучше. У большей части этого барахла - нужно как можно дешевле и еще вчера, и получается - понятно что.Т.е. "так можно [но будет дорого и небыстро в разработке-поддержке]", как и говорилось выше.
>>> В общем сказать что си низкоуровневый - ну вот зависит от.
>> Экий спрыг с "в сях можно и то, и это, во!" на "сам дурак!".
> Не спрыг а выражение мнения о тех кто ср@тся на бошку тех
> на чьих плечах стоит. Вот конкретно хрустики и прочие игогошики -Ну да, ну да, хрустики с игогошниками сишникам опять в штаны эт-самое. Вот если б не они (и не плюсовики), тогда бы да, тогда бы "концептуалы" опеннета всем бы показали и GTK4 летал бы прям! Ух!
В общем, обычный для 294го спрыг на "сам что-то придумал, сам оспорил" с непременным ад-хоминем-ом, c темы "смотри, так тоже можно". Ничего нового.
> Так куть, внезапно, на плюсах. Хруситики и игогошики к этому не причастны,
> опять же. Это все побиваемые их камнями плюсеры, лол.294ые тоже никаким боком к этому не причастны, опять же.
А еще эти реалии не вписываются в их теоретствования "смотри, так тоже можно!". Впрочем, опять же, ничего нового.
> 2) борьба с компилятором вместо работыПотому что нечего привычные Вам, но опасные, грязные и зачастую неверные приемы работы в сишных проектах тащить в проекты раст.
> Полная верификация это долго и очень дорого - можно почитать сколько стоила верификация seL4, поэтому пытаются найти баланс.Мне кажется, что последняя часть предложения неверна. Баланс между сложностью верификации и качеством результата верификации пытается найти rust сам по себе, точнее он уже нашёл какой-то компромисс, и теперь старается его держаться. Но когда речь заходит о формальной верификации поверх раста, то тут уже качество результата перестаёт быть предметом торга, и выставляется в 100%.
В расте формальная верификация значительно проще чем в C/C++[1], потому что большая часть работы выполняется компилятором, который заставляет программиста писать программу следуя определённым правилам. Там проблемы, я полагаю, в основном про масштабируемость решения. Ну и конечно надо дождаться, когда какой-нибудь из формальных верификаторов раста победит, чтобы я мог бы в Cargo.toml заказать только верифицированные депенденсы, и потом сделать `cargo verify`.
> Мне кажется, что последняя часть предложения неверна. Баланс между сложностью верификации и качеством результата верификации пытается найти rust сам по себе, точнее он уже нашёл какой-то компромисс, и теперь старается его держаться.Ну раст никогда не заявлял целью "верификацию", скорее "исправить самые распространенные ошибки с памятью".
> Но когда речь заходит о формальной верификации поверх раста, то тут уже качество результата перестаёт быть предметом торга, и выставляется в 100%.
Согласен, тут как свежесть осетрины, первая и она же последняя.
Если говорить о формальной верификации то результат действительно должен быть 100%
Но если у нас есть 2 либы которые верифицированы, но радом есть прослойка обычного кода, то о верификации на 100% говорить естественно нельзя, но будет лучше чем без нее)> В расте формальная верификация значительно проще чем в C/C++[1], потому что большая часть работы выполняется компилятором, который заставляет программиста писать программу следуя определённым правилам.
Тут еще нужно проверять логические ошибки, что очень сложно.
За ссылку, большое спасибо, было познавательно.> Там проблемы, я полагаю, в основном про масштабируемость решения. Ну и конечно надо дождаться, когда какой-нибудь из формальных верификаторов раста победит, чтобы я мог бы в Cargo.toml заказать только верифицированные депенденсы, и потом сделать `cargo verify`.
Вот что пришлось сделать при верификации seL4:
- 8,700 lines of C code and 600 lines of assembler
- создание модели на Хаскеле
- проверка этого при помощи Isabelle/HOLИ какой ценой)
- abstract spec took about 4 person months
- Haskell prototype 2 person years
- significant research and about 9 person years invested in formal language frameworks, proof tool
The total effort for the seL4-specific proof was 11 person years.
We expect that re-doing a similar verification for new kernel, using the same overall methodology, would reduce this figure to 6 py, for a total (kernel plus proof) of 8 person years. [1]Т.е это очень сложно и дорого.
Но было бы очень классно действительно чтобы для Раста были отдельные либы или крейты которые верифицированы.[1] web1.cs.columbia.edu/~junfeng/09fa-e6998/papers/sel4.pdf
> Зачем нужен консорциум, если Rust и так безопасный?Раст безопасный, но вон там список CVE по слову Rust почему-то уже довольно длинный.
Это как я случайно делил на ноль в расте)
Сваливался в панику...
Это явный баг!
Надеюсь отправили багрепорт.
Ведь современные исследователи полагают, что на 0 делить можно. Даже порой пытаются это доказать!
> Это как я случайно делил на ноль в расте)
> Сваливался в панику...Ну вот... А мог бы как нормальныя языки рута дать!
Или хотя бы произвольный код выполнить.
>> Это как я случайно делил на ноль в расте)
>> Сваливался в панику...
> Ну вот... А мог бы как нормальныя языки рута дать!
> Или хотя бы произвольный код выполнить.А мог бы понимать, как работает процессор, что такое исключения, что бы не городить чушь про нормальные языки.
Скорей бы линукс уже на раст переписали! Нужно больше безопасности!
Ну опять двадцатьпять... говорите правильно: _начали_переписывать_!Нет кода - вот и безопастненько!
> Создан консорциум для разработки высоконадёжных систем на RustКаждый второй проект на Rust
> unsafe
Каждый любой проект на любом языке использует системные вызовы, которые написаны на языке unsafe by design. И?
> И?Каков смысл в "безопасном языке", если без unsafe никуда?
Сначала пишем библиотеки-обвязки с `unsafe`, потом используем эти библиотеки уже в безопасном стиле.
И это превратит его в безопасный код?
Это поможет гораздо быстрее находить ошибки.
Нет не поможет, проснись.
Я не сплю. Когда возможные проблемные места изолированы, ошибки искать быстрее и проще, чем когда они размазаны по всему коду. Вроде, банальные вещи.
Вы так рассуждение, как-будто все ошибки и проблемные места будут изолированы в unsafe-блоках... пожалуй, на этом можно и заканчивать. В вашем дивном мире - розовые пони, случайно, не летают..?
Кто бы говорил про дивные миры. Вы там что-то себе нафантазировали от моего имени и потом пытаетесь это оспорить. Я где-то сказал о всех ошибках?
Концепция безопасности в Rust предполагает использование unsafe там, где компилятор не может гарантировать безопасность и её должен гарантировать программист. Unsafe - полноценный и необходимый элемент языка Rust. Если вы ожидали другого - это проблема ваших ожиданий, сам Rust не скрывает важности и нужности unsafe.
> де компилятор не может гарантировать безопасность и её должен гарантировать программист.Цепь прочна ровно настолько, насколько прочно её слабое звено. Так что панацеи не получилось, всё равно всё упирается в профессионализм программиста.
> Цепь прочна ровно настолькоТолько у тебя не цепь.
Можешь представить офисное зданием, много этажей, куча дверей.
Часть дверей гнилые, где-то нет замков. Даже если ты заменишь половину дверей - уже станет лучше.> профессионализм
пока что профессионалы лепять очередное double-free в ядре на сишечке
В случае обвязок, аналогия достаточно верная - так как учитывает иерархию. А вот ваша - нет.
Если часть дверей гнилые и нет замком, то замена половины дверей лучше точно не сделает. Тут надо всё менять
Как лучше: проверять каждое звено на гниль, или только 20% звеньев, так как для 80% автоматически гарантирована исправность?
> Каждый второй проект на RustНе каждый. Тут совсем недавно была статистика www.opennet.ru/opennews/art.shtml?num=61251, что только 20% крейтов содержат unsafe.
А которые содержат, чаще всего используют для вызова дыряшечных функций через FFI, что по определению не может быть безопасно. И самый жирый по использованию unsafe - crate-пакет windows, являющийся обвязкой над API платформы Windows.
Unsafe это прям как goto сегодняшних дней. Удобно, эффективно, но небезопасно. Кстати unsafe это больше про системное программирование, там где прям нужно лезть в саму память. Большинство прикладных программ этого не требуют)
Некоторые графические программы хотят более лучше интегрироваться в систему и как-то с ней взаимодействовать. И не изобретать велосипед на каждый чих. Но до сих пор на каждый чих все изобретают свои способы подходы к вопросам. Под макос все просто есть Cocoa API, там по сравнению с WinAPI все куда более организовано. А под линуксом что? 100500 сервисов которые реализованы для общения либо через сокеты, либо через dbus, либо вообще умудряются микро http сервер держать для rest api. И все это ради чего? Правильно чтобы не влезать в "unsafe" мир. Тогда почему Apple это вообще не колышит, а под линуксом каждый второй изобретает велосипеды лишь бы оно не было на C/C++.
> И все это ради чего? Правильно чтобы не влезать в "unsafe" мир.Нет конечно. Просто разработка линукса - это базар в худшем его виде.
Лебедь, рак и щука просто нервно курят в сторонке, глядя на это сборище непризнанный "гениев", засилье NIH и stable anything nonsense. Причем все попытки сделать хоть что-то стандартом де-факто оборачиваются метанием продуктов жизнедеятельности в создателя.
Один сделал стандарт де факто, теперь система при разлогине пользователя браузер прибивает.
> Один сделал стандарт де факто, теперь система при разлогине пользователя браузер прибивает.Сие как бы настраиваемо. Но если вы маны читать не умеете, наверное это в многопользовательской системе хорошо. Ибо подвисшие браузеры склерозных хомяков на каком-нибудь терминал сервере были бы просто полный апокалиптец.
Апле оно не колышит потому что в году 16 они принудидили своих писак писать на своем растоподобном. Там тоже пытаются обработку всехвсех ошибок во время сборки делать.
> Апле оно не колышит потому что в году 16 они принудидили своих
> писак писать на своем растоподобном. Там тоже пытаются обработку всехвсех ошибок
> во время сборки делать.Алее, у Apple API всегда доступны в двух вариантах. В Obj-C, и в Swift. https://developer.apple.com/documentation/foundation/nsnotif...
Что-то мне подсказывает, без unsafe - особо дальше hello world не уехать.
Даже hello world без ансейва не написать, нужно сделать системный вызов write - а систем вывзов это unsafe операция
> Большинство прикладных программ этого не требуютПрикладные лучше на c# писать. Дотнет вылизали как конфетку последнее время.
Последние лет 15 если быть более точными.
Хорошие быстрые и надежные приложения.
Но есть нюансы - смотря какая предметная область - Если какие либо приложения с UI - MS умудрилась ловко забросить годный WinForms, потом так же ловко слить 10 лет назад Сильверлайт и WPF, и сейчас там все довольно туманно - активного развития давно, последние 10 лет, там нет.
Плюс доступных и бесплатных развитых IDE тоже нет -кроме VS Comunity требующий регистрации в MS - свободный и кривой MonoDevelop давно заброшен.
А так да, все конфетно, но с элементами некромагии.
> Но есть нюансы - смотря какая предметная область - Если какие либо приложения с UI - MS умудрилась ловко забросить...Ну я на беке работаю, мне хорошо, тут дотнет только хорошеет. А про UI согласен. Каждые несколько лет Microsoft пилит новый UI фреймворк, а один закапывает. Я бы и рад освоить Blazor, но судя по тенденции, лучше взять React, который никуда не денется еще лет 10.
> Плюс доступных и бесплатных развитых IDE тоже нет
A такие бывают для других технологий? В дотнет мире всё очень даже хорошо с идешками. Visual Studio Community хорош. Для профессиональной разработки есть Rider, но он платен. VS Code - тоже вариант.
> А так да, все конфетно, но с элементами некромагии.Удивительно, как это у нас получается. У меня на прошлой работе было два проекта. Один на dotnet framework 3.5, а другой на дотнет 3.1. Если вы понимаете, о чём я
> Ну я на беке работаю, мне хорошо, тут дотнет только хорошеет. А
> про UI согласен. Каждые несколько лет Microsoft пилит новый UI фреймворк,
> а один закапывает. Я бы и рад освоить Blazor, но судя
> по тенденции, лучше взять React, который никуда не денется еще лет 10.О, кажется этот маздайщик уже начал немного догадываться за кого его на самом деле держит майкрософт. А скоро, чувак, тебя в легаси спишут. Со всеми потрохами. У майкрософта и их маркетинга теперь новая игрущка - сабж. Они даже в совет директоров вписались. И кстати там не нужны виртуальные машины, огромные рантаймы, да и работы на эвона какую толпу распихны, не надо все это самим за свой счет фигачить. Сплошной профит.
Так что вынесут вас куда-то на уровень кобола, когда оно вроде есть - но уже махровое deprecated, legacy, NRND, в общем - паллиатив для тех кто от батареи отковаться не смог. А остальные будут сабж юзать. Без минусов того переростка.
>> Плюс доступных и бесплатных развитых IDE тоже нет
> A такие бывают для других технологий? В дотнет мире всё очень даже
> хорошо с идешками. Visual Studio Community хорош. Для профессиональной разработки есть
> Rider, но он платен. VS Code - тоже вариант.Видно птицу по помету - проприетарщина до мозга костей, такой и помрет, несмотря на жалкие потуги косплея собой опенсорца. А для более открытых вещей - есть LSP, позволяющие куче редакторов в продвинутый парсинг и анализ.
> Удивительно, как это у нас получается. У меня на прошлой работе было
> два проекта. Один на dotnet framework 3.5, а другой на дотнет
> 3.1. Если вы понимаете, о чём яО том что этот мусор не на 100% совместим между версиями и порой перенос на более новую версию это боль? Ну это майкрософт, они всегда все свои проблемы конвертят в проблемы даунстримов, кредо у них такое :). И именно поэтому оттуда подрапало немало девелоперс, девелоперс... но до некоторых, вот, как до жирафов ;). Хотя учить реактжыэс - это достойная участь для дотнетчика, конечно. Или как еще эпичнее признать что продолбал море времени и резервов мозга ни на что?!
MS кидает всегда.., ну прям как девиз Таргариенов из игры престолов :)ВПФ, сильверлайт, а теперь еще блазор - то же, но вид сбоку, через несколько лет забросят, но успеют задолбать адептов платными курсами и конференциями.
И поэтому аноним вовремя соскочил обратно на C++ когда работа появилась.> У майкрософта и их маркетинга теперь новая игрущка - сабж. Они даже в совет директоров вписались
Но все же сабж и донет несколько разные вещи и разные области применения.
C# отличный язык с невысоким порогом вхождения для программистов низкой и средней квалификации (но повыше чем у питонщиков и вебщиков) чтобы быстро ваять внутрикорпоративную автоматизацию - конкурент Джавы.
Сабж для системного программирования, порог вхождения высокий.
> MS кидает всегда.., ну прям как девиз Таргариенов из игры престолов :)Я очень плотно партнерил с ними. Так что отлично в курсе как они работают. И как их саппорт работает. И что может отколоть их маркетинг. И как сие на бошку "партнеров" ощущается.
> ВПФ, сильверлайт, а теперь еще блазор - то же, но вид сбоку,
Да лол, нетчиков уже разок депрекейтили в пользу html плиток на уровне маркетинга. И такой ножик в спину - еще в восьмерке аж, на минуточку. А тут до жирафа что-то доходить стало, лол.
> через несколько лет забросят, но успеют задолбать адептов платными курсами и конференциями.
ЧСХ это знание тоже вскоре придется списать в утиль.
> И поэтому аноним вовремя соскочил обратно на C++ когда работа появилась.
А я вообще в свое время резко сменил курс перейда ня пингвины и став спецом в этом направлении. Ни разу не пожалел, смог заимлементить свои самые дикие мечты и давние хотелки. На винде я бы так просто не смог. И культура экосистемы мне как-то больше нравится. Вместо потребителей загибающих пальцы относительно объема захаваного - созидатели, которые сообща работают над тем что им нравится. Намного круче имхо.
> Но все же сабж и донет несколько разные вещи и разные области применения.
Дотнетчикам бы хотелось так думать, но де факто их ниши там и тут - порубали и что им в результате осталось - хрен его знает. Наверное, pre-existing легаси корпоративные проекты которые майнтайнить в виде "приковали кодера к батарее чтоб не сбежал".
> C# отличный язык с невысоким порогом вхождения для программистов низкой и средней
> квалификации (но повыше чем у питонщиков и вебщиков) чтобы быстро ваять
> внутрикорпоративную автоматизацию - конкурент Джавы.
> Сабж для системного программирования, порог вхождения высокий.Сабж - для много чего. Скажем вон тот сервис для крипты - явно не "системное программирование". Апликушнятина махровая.
> И культура экосистемы мне как-то больше нравится. Вместо потребителей загибающих пальцы относительно объема захаваного - созидатели, которые сообща работают над тем что им нравится. Намного круче имхо.Классный у тебя Линукс, а где ты такой нашел?
Я вижу типичную ситуацию "лебедь, рак и щука", 100500 дистров которые отличаются нескучными обоями.
Сообщество потербялдей, которые сами нифига не делают, зато ноют в двух случаях:
1. когда корпы что-то добавляют, например системмд
2. когда корпы что-то удаляют, например ХОрг
Причем вклад майкрософта думаю больше чем половины васянов, не зря он все-таки платиновый спонсорНу еще есть всякие междуусобчики кто более швободистый каноебут или либрбут.
> Классный у тебя Линукс, а где ты такой нашел?В смысле где, он такой один - kernel.org. Это и есть линукс. Ядро. Те кто его делают на мой вкус самые крутые спецы с которыми я когда либо работал.
> Я вижу типичную ситуацию "лебедь, рак и щука", 100500 дистров которые отличаются
> нескучными обоями.А я беру дебиан. Это моя стартовая площадка. Модули, из которых я наберу систему которая была нужна в задаче, начав с ультра-минимального фундамента. При том 99% пакетов будут майнтайнить - другие. Так что я могу фокусироваться на специфике задачи и утрясании тех хотелок с этими возможностями в пределах скиллов.
На винде такое, разумеется, невозможно в принципе. Да и не работает она на одноплатнике за 10 баксов. А игнорить что небольшой комп теперь размером с креду и стоит 10 баксов я не намерен. А для совсем нестандартных вещей, вот, не лишне уметь програмить и самому. При этом очень удобно если на моем десктопе и том таргете примерно одна и та же технология под капотом.
Теперь вы понимаете почему я не буду юзать винду даже если мне за это приплатят? У нее швах со всем. С модульностью. Поддержкой платформ. Вертикальным масштабированием. Кастомизацией. Автоматизацией. Предсказуемостью. Подконтрольностью. Всем что я люблю и ценю, в общем.
> Сообщество потербялдей, которые сами нифига не делают, зато ноют в двух случаях:
Вы не по адресу. Я таки стараюсь взаимодействовать с апстримами если поводы есть. И за годы я и патчей много куда раскидал, и помог загасить немало багов, и вообще. А как вы думаете я узнал что с линуксоидами совместно работать - кайфово? :P
> 1. когда корпы что-то добавляют, например системмд
Лично я системду нехило освоил и для меня это полезная фича. Я могу его взять под контроль, а если надо то и перепахать так что Поттеринг долго бы чесал репу с того что так можно было.
> 2. когда корпы что-то удаляют, например ХОрг
Опять же. В моем лексиконе это "проблемный компонент" и я не буду о нем сильно скучать.
> Причем вклад майкрософта думаю больше чем половины васянов, не зря он все-таки
> платиновый спонсорМайкрософт вкладывается в свои задачи, как вы понимаете. Остальным это похрен так то. Какой мне профит с того что они накидали патчей своему гиперви? Не, было и пару рефакторов с @microsoft.com - только что-то эти кодеры из майкрософта ушли. Ну вот не выживает норм опенсорсник в мс более года-двух как правило. Видимо остатки их проприетарской культуры все ж икаются.
> Ну еще есть всякие междуусобчики кто более швободистый каноебут или либрбут.
А немного конкуренции так то - вообще совсем не есть плохо. Правда для себя я решил что свободнее - ARM и RISCV. И имхо мой следующий воркстейшн будет уже вот чем-то таким. А что, у меня в всех воркфлоу только опенсорсный софт - мне похрен какая там архитектура проца. А вон там уже господа выкатывают RISCV которые начинают выглядеть норм как небольшой воркстейшн для меня. Да, я ценю свободу маневра и возможность отделаться от благодетелей-нагибателей.
Большинство производительных прикладных программ написано но Go.
и что они производят, кроме тепла и сотен мегабайт мусора на диске для хранения себя же?
> и что они производят, кроме теплаОни производят полезность в виде выполненной задачи.
При этом умудряясь не сегфолтиться, выходить за границы буферов и получать рута.А если для вас пара сотен мб это много... значит вы застряли где-то в 90х-2000х.
Потому что сейчас терабайтные ссд даже у самых нищуков есть.
Хотелось бы на этих терабайтных ссд хранить ещё что-то помимо программ.
> А если для вас пара сотен мб это много... значит вы застряли где-то в 90х-2000х.Не устану повторять, что дешевизна оперативной памяти - миф.
1. Большинство современных ноутбуков продаётся с распаянной памятью. Расширение памяти по стоимости равно покупке нового устройства.
2. Каждые пару лет необходимо расширять оперативную память в два раза. Не на пару сотен мегабайт, а в два раза.
3. Мне для комфортной работы необходимо 32 гига. А если с запасом брать - то не менее 64 гигов. 32 гига, КАРЛ
> Не устану повторять, что дешевизна оперативной памяти - миф.Можно просто посмотреть статистику цены оперативки за последние лет 10.
И убедиться что это не миф.> 1. Большинство современных ноутбуков продаётся с распаянной памятью. Расширение памяти по стоимости равно покупке нового устройства.
Ноутбук это мобильное рабочее место, с соответсвующими минусами.
Работай на десктопе - там можно память расширять почти до бесконечности.
Народ себе даже рамдиски делает для ускорения рабочих процессов.> 2. Каждые пару лет необходимо расширять оперативную память в два раза. Не на пару сотен мегабайт, а в два раза.
Неправда. Есть некие комфортные стандарты.
16 гигов держалось думаю лет 5-8.
32 будет хватать еще лет 5-10.> 3. Мне для комфортной работы необходимо 32 гига. А если с запасом брать - то не менее 64 гигов. 32 гига, КАРЛ
Для работы!
Мне для работы нужен не только комп, а еще и станок который весит 5 тонн.
5 тонн, Карл!
Обычных юзеров это вообще мало волнует.
Они получают готовый бинарь и раз в 10 лет просто покупают новый комп, а старый отдают тем, кому нужна печатная машинка.
>Потому что сейчас терабайтные ссд даже у самых нищуков есть.Нищуков. Новый перл?!
Как-то до сих пор справляюсь с 256гб. 1тб ссд не имею.
Коли Вы не нищук, подкинете немного криптовалютного лута нищуку, для обновления приборной базы? Или это так ради "красного словца"?
> Как-то до сих пор справляюсь с 256гб.Молодец.
> 1тб ссд не имею.Сочувствую. Даже интересно, как вы работаете?
Проекты на ссд существенно быстрее собираются. Можно конечно сделать рамдиск гигов на 32 и перекинуть кеш туда...А у меня 850PRO на 256Гб (ему уже почти 10 лет!) и 860EVO на 2Тб. Не топчик конечно, но пока хватает.
Как только перестанет хватать или по скорости, или по размеру - просто куплю новый.
Сейчас 990 PRO на 4TB стоит 350 баксов. Ну пусть с налогами будет 400.
Кажется это любой айтишник позволить может. И хватит его на ближайшие лет пять точно.
А потом просто перейдет на что-то менее ответственное еще лет на пять.
У меня предыдущая ссд на 120гб с десктопа съехал в ноут, а потом в комп для телека. И жив до сих пор, хотя ему лет 15.> Или это так ради "красного словца"?
Прости, нищим не подаем.
>Сочувствую. Даже интересно, как вы работаете?Я свое уже отработал. Мне в этом нет нужды.
>А у меня 850PRO на 256Гб (ему уже почти 10 лет!) и 860EVO на 2Тб. Не топчик конечно, но пока хватает
Кингстон 256гб. Ему 13 лет. Хватает.
Для ускорения сборки полагаю, красный триппер какой овер 100500 ведер надо бы.> стоит 350 баксов. Ну пусть с налогами будет 400.
Кажется это любой айтишник позволить может.
Интересный Вы человек. Наравне с веяниями текущих лет впитали в себя не совсем хорошую совковую привычку оценивать чужой карман.
Позволить и выбирать приоритеты суть не одно и тоже.
>Прости, нищим не подаем.А чего так? Только понты кидаете, да про инфантилизм рассуждаете?
> Я свое уже отработал. Мне в этом нет нужды.Ну тогда вам и прикладного софта не так много и нужно)) В 256Гб точно должен влезть.
> Для ускорения сборки полагаю, красный триппер какой овер 100500 ведер надо бы.
Нет, но действительно жду старта продаж Granite Ridge. Но это для рабочего компа. Для домашнего мне хватает уже не помню какой АПУ.
> Наравне с веяниями текущих лет впитали в себя не совсем хорошую совковую привычку оценивать чужой карман.
А что не так? Средняя, медианная и даже минимальная ЗП для IT известны. В разных источниках они чуток плавают, но их тоже можно усреднить. И относительно них вполне валидно давать оценки.
> А чего так?
А тогда не хватит на новый ссд))
> Только понты кидаете, да про инфантилизм рассуждаете?
Я бы понял вас, если бы я хвастался многоголовым серваком на over 9000 ядер + схд на 100500Тб... это да, понты.
А если для вас понты сддешка на 2Тб... ну не знаю, мне вас жаль наверное.
Для меня это обычный рабочий инструмент.
>Нет, но действительно жду старта продаж Granite RidgeНу если по старинке без распараллеливания, то может и нет.
В остальных случаях да, 96 ведер победят.>А что не так?
> И относительно них вполне валидно давать оценки.Оно и не так. Такие оценки давать в принципе не очень хорошо. Всегда хорошо смотреть в свой карман. А в чужом хозяин кармана сам разберется.
Кто-то будет инвестировать в конпуктер, кто-то в финансовые инструменты, кто-то в детей...>А тогда не хватит на новый ссд))
Не факт. Будьте милосердны и обрящете.
>А если для вас понты сддешка на 2Тб..
Для меня понты - это спичи вида: кто не купил ссдшник на &tb тот нищук.
Мир намного глубже и многограннее, чем кажется на первый взгляд.И потом, что плохого в нищете? Сегодня Вы можете быть на коне, завтра под конем. Легко. Произвол, здоровье...тысячи их. Важно лишь то, кем Вы при этом будете. Речь о личностных качествах.
>> А чего так?
> А тогда не хватит на новый ссд))А, ты и сам нищук, просто "я уже 5 минут как из-за парты, но как же я вас, школьников, уже ненавижу!!!111" видимо.
Оказался недостаточно безопасным для решений требующих повышенной надёжности?)
Разумеется.
MISRA C был предуман не просто так.
Ада была создана для разработки надежных систем, но это не помешало им сделать еще более безопасный Spark.
Всегда можно улучшить надежность дополнительными проверками, ограничениями или админ. палкой.
Безопасность решается методологией написания кода, а не языком. Вот для ознакомления, короткое, но информативное видео: https://www.youtube.com/watch?v=GWYhtksrmhE
А теперь представь, что вместо изобретаемых организационных правил, не обязательных к соблюдению, тебя контролирует компилятор, который ты не сможешь игнорировать. И подумай ещё раз над тем, что ты сказала.
> Безопасность решается методологией написания кода, а не языком. Вот для ознакомления, короткое,
> но информативное видео:Ты вообще видео отрывала? (открывал?)
Там третье же требование - youtu.be/GWYhtksrmhE?t=101 - не использовать heap.И этим они пытаются решить типичные сишкопроблемы с памятью.
Т.е. они настолько осознали что сишники не смогут писать нормально, что решили "Тут не исправить уже ничего, Господь, жги!" и просто запретили malloc/free. Классное решение! Невероятно добавляет надежности!
А заодно в очередной раз показывает убогости сишки))Там есть еще крутые "limit preprocessor" и "restrict pointer usage"))
А что остается от сишки, если выполнить все эти требования? Это же получается другой язык, ну или очень порезанный диалект.
> и просто запретили malloc/freeТак и делаю давно, выделяю память и создаю потоки на стороне Java или python, там вся бизнес логика, в сишке супербыстрая числомолотилка. Получается всё хорошо.
Сейчас бы не понимать разницы между гарантиями языка и надёжностью системы. Впрочем, иного от хейтерков ожидать не приходится.
> Оказался недостаточно безопасным для решений требующих повышенной надёжности?)Safety и security это 2 довольно разных аспекта. Они местами пересекаются, по той линии что вулны это таки тоже - "незапланированное поведение программы". Но в целом это все же разные аспекты.
Можно написать безопасную в плане вулнов программу, которая однако хренова с точки зрения надежности. В частности хрустовский panic на любую проблему - надежности не подарок. И в линух кернеле это вылезло во весь рост. Оказывается, все вырубить при сбое - это хреновая идея для ядра ОС. По линии надежности работы такой ОС. И вот уже в сабже появились всякие try_* и прочие, и чем это так уж от alloc/free и проверок успеха отличалось - а вот ктулху его знает?! Те же грабли, другой синтаксис? ORLY? :)
> И вот уже в сабже появились всякие try_* и прочие, и чем это так уж от alloc/free и проверок успеха отличалось - а вот ктулху его знает?!Смею дилетантски предположить, что разница всё-таки есть. Именно в сочетании озвученных Вами надежности и безопасности. При условии что правильно понял Вашу претензию. В случае сишных (условных) "alloc/free и проверок успеха" если где-то забыть сделать "проверку успеха", то какая-нибудь вулна, радостно потирая ладошки, (опять же, условно) тихо перепишет область за границами массива нужным ей куском кода и поимеет систему и это может произойти совсем незаметно для жертвы. А в случае со ржавым, если забудешь сделать try_* и вулна попытается воспользоваться этим, вылезет panic, который уронит систему. Для надежности, конечно, нехорошо, но всё же лучше, чем зараженная система. Я правильно понял? Если да, это подтверждает Вашу претензию насчет синтаксиса для достижения надежности, но возникает большая разница в плане достижения безопасности.
> Те же грабли, другой синтаксис? ORLY? :)
В случае с си с его "alloc/free и проверок успеха" у нас нет ни надежности, ни безопасности.
В случае со ржавым у нас так же нет надежности, но зато есть значительно, кардинально бОльшая безопасность (потому что подавляющее большинство именно вулнов вызвано именно теми сишными ошибками работы с памятью).А за надежностью, предположу, это вообще не к языкам надо обращаться, а к архитектурам систем/приложений/фреймворков. Как пример - организация системы в виде микроядра и всевозможных перезапускаемых при сбоях сервисах. Или (по тем же мотивам) - создание отказоустойчивого сервиса на каком-нибудь эрланге с фреймворком OTP, где система будет построена по шаблону супервайзера с кучей перезапускаемых при сбоях процессах-воркерах.
> Смею дилетантски предположить, что разница всё-таки есть. Именно в сочетании озвученных
> Вами надежности и безопасности. При условии что правильно понял Вашу претензию.Я не понимаю чем проверка успеха try_* отличается от проверки успеха *alloc и ко. Так просто и банально. Те же яйца, вид в профиль вроде. Может эксперты по хрусту расскажут
> А в случае со ржавым, если забудешь сделать try_* и вулна
> попытается воспользоваться этим, вылезет panic, который уронит систему.Это тоже может быть CVE, если вызывается ремотно - "атакующий может вызвать отказ в обслуживании".
> Для надежности, конечно, нехорошо, но всё же лучше, чем зараженная система.
Возможность уронить систему - это тоже вулн, внезапно.
> нет ни надежности, ни безопасности.
> В случае со ржавым у нас так же нет надежности, но зато
> есть значительно, кардинально бОльшая безопасностьНасколько она там "кардинально" - это мы еще будем посмотреть. Ибо вон там пачка CVE уже висит, несколько сотен.
> А за надежностью, предположу, это вообще не к языкам надо обращаться, а
> к архитектурам систем/приложений/фреймворков.ЯП может это все так изгадить что сделать более-менее надежно и предсказуемо станет вообще малореально. Хруст правда совсем так не смог - но под ядро его пришлось сурово костылить, в том числе и try_*.
> мотивам) - создание отказоустойчивого сервиса на каком-нибудь эрланге с фреймворком OTP,
Ну покажите отказоустойчивый линукскернел на этом?
> где система будет построена по шаблону супервайзера с кучей перезапускаемых при
> сбоях процессах-воркерах.Про микроядра бредили уж давно. А воз и ныне там. К тому же с реальным железом это все ну вот не факт что хорошо заработает в именно таком виде.
>Я не понимаю чем проверка успеха try_* отличается от проверки успеха *alloc и ко.если не проверил try_* - будет варнинг.
не проверил *alloc - ничего не будет
> если не проверил try_* - будет варнинг.
> не проверил *alloc - ничего не будетЭто довольно декоративное в общем то различие. И с статическим анализатором отличие несколько стирается. Но если уж мы о птичках, стоит сказать что си полностью от и до таки - душновато статическием анализом. Из за его работы с указателями максимально раздолбайски.
> применяет концепцию неизменяемости [...] переменныхВот за что мы его и любим! Просто не надо менять переменные и всё будет в поряде!
Ещё один открыл для себя языки с неизменяемыми переменными. От функциональных ЯП небось вообще мозг взрывается, да? Шутка ли, мало того что переменные неизменяемые, так ещё и выполнение участка кода может быть отложено! Ну ничего, наберёшься опыта, научишься программировать, попустит.
Как для "менструирующих людей" есть правильное слово, так и для "неизменяемой переменной". А пока авторы язычка будут баловаться подобной е#аниной - счастья не будет.
>счастья не будетКому? Вон и Гугл, и Майкрософт, и Клаудфлэр не нарадуются. И производительность программистов выше, и качество кода.
>>счастья не будет
> Кому? Вон и Гугл, и Майкрософт, и Клаудфлэр не нарадуются. И производительность
> программистов выше, и качество кода.Ну да, ну да. Вскрытие покажет. Я много инициатив видал, но которые конторки не чета вышеперечисленным не могли не нарадоваться. И где всё это сейчас?..
А что-то есть вечное в этом мире?И что там вскрытие ещё должно показать, если уже есть отчёты счастливых разработчиков?
> А что-то есть вечное в этом мире?Базовые законы физики, вероятно. Они будут существовать столько сколько существует этот мир. Если они изменились - ок, это вероятно уже другой мир, с другими свойствами.
Алгоритмы тоже вероятно можно причислить в эту категорию. Через N лет DCT так и останется DCT, а рид-соломон - рид-соломоном. То что не все из них может быть целесообразно применять через N лет это уже второй вопрос.
> И что там вскрытие ещё должно показать, если уже есть отчёты счастливых разработчиков?
...но что-то мне подсказывает что сишка пережиет и вас и меня. Он по своему прекрасен в своей простоте.
Они то может и радуются, вот только пользователи как то не радуются. Постоянным фейлам с теми же обновлениями у M$
> Как для "менструирующих людей" есть правильное слово, так и для "неизменяемой переменной".Я не знаю, зачем ты приплёл менструирующих людей, но вот какое слово ты знаешь для неизменяемой переменной мне очень интересно, что это?
Константа небось? Но неизменяемая переменная не константа. Неизменяемость растовых переменных локальна, их значение меняется сквозь жизнь программы, часто их время жизни ограничено и меньше времени жизни всей программы. Это _не_ константы. Но C/C++ программистам конечно сложно понять, потому что они таким тонкостям необучены.
> какое слово ты знаешь для неизменяемой переменной
> мне очень интересно, что это?Пере-менная означает "меняющееся". "Неизменяемое меняющееся" называется одним словом - "чушь".
> "Неизменяемое меняющееся" называется одним словомДа и "постоянная переменная" (как и constant variable), по моему, ничем не лучше.
Менять (присваивать) значение мы можем: один раз - (обычно) с неопределенного на что-то другое (возможно, тоже неопределенное, кхе).
Но вот как назвать кратко и точно, без "выноса мозга"?
>> "Неизменяемое меняющееся" называется одним словом
> Да и "постоянная переменная" (как и constant variable), по моему, ничем не
> лучше.
> Менять (присваивать) значение мы можем: один раз - (обычно) с неопределенного на
> что-то другое (возможно, тоже неопределенное, кхе).
> Но вот как назвать кратко и точно, без "выноса мозга"?В стандарте Си называют объектами. У объекта есть тип, в определении он предшествует имени объекта. Константные объекты для краткости называют константами, а изменяемые - переменными.
В функциональных языках похожая на определение переменной запись на самом деле является функцией:
let i = 0;; (* чистая ф., возвращает значение 0 типа int *)
Rust в конструкции как эта (из #6.430)
let sum = {
let a = 1;
let b = 2;
a + b
};отличается от функционального OCaml:
let sum =
let a = 1 in
let b = 2 in
a + b
;; (* двойное ;; не всегда требуется *)лишь слабой попыткой выглядеть как Си, за счёт спецсивмолов. ИМХО авторов испугал неудачный опыт Hackell и они принялись скрывать функциональную основу. Вместо того, что бы парить мозг "замена Си", следовало бы делать упор на "быстрый функциональный язык с возможностью писать интересные штуки на нижнем уровне абстракции".
А на фига такие сложности ?! Мало проблем, так их нужно еще и самим создать ?
Давайте перепишем всё на Rust, например, GNOME.
Gnome на Vala переписывать начали...
Что за внезапный прелестный сон?
Pantheon
Так ему 10 лет в обед, и это не шутк
> Так ему 10 лет в обед, и это не шуткТак и сабжу в общем то - тоже. Так что инновация то уже - рядом с плесневелым сыром и настоявшимся вином.
>объявила о создании консорциума "Safety-Critical Rust ConsortiumСнова? Никогда не было и вот опять.
Новость хорошая. Но изучать эти кракозябры не очень охота.
То же самое хотел написать. Отличный язык! Но программировать на нём я конечно не буду
Программировать можно, но как потом читать все это безобразие? Я всегда считал плюсы ужасными, но раст одним махов их переплюнул.
пиши в write-only style, ну как некоторые на перле в 90х.Зачем его потом читать, он же - безопастный! Понадобилось что-то поменять? Просто удали код и пиши заново, это называется refucktoring, во!
>Зачем его потом читать, он же - безопастный!Ещё один "юморист", наверное претендующий на остроумие. Уже 100500 раз обсудили, что Раст от всех возможных ошибок не страхует. Должно уже было дойти, даже до самых невменяемых. А поди ж ты.
Приведи пример нечитаемого раста.
Набор символов одинаков, что в Плюсах, что в Расте. Так, к слову.
Просто писать на Ада не вариант? Надо обязательно сделать то же самое самим?
Ada хотя бы читабельная, а тут не пойми что, какой-то набор символов.
Если не читать документацию, тогда, конечно, будет "не пойми что". А если читать документацию, всё будет относительно просто и понятно. Примерно, как с математикой.
Не, ты что! Язык с одним компилятором против десятка коммерческих, без стандарта против языка со стандартом ISO, язык с арифметикой, разнящейся на машинах против языка с гарантиями точности, точно нужен!
Да что вы с этими стандартами ЯП возитесь? Как будет готов язык и желающие создать другие компиляторы этого ЯП, то наверняка найдётся хитрый антимонопольный комитет какого-нибудь Евросоюза, который и попросит стандартизировать. Хотя можно и без стандарта, но тогда начнётся недобросовестная конкуренция. Всегда можно попросить какого-нибудь Абрамовича стандартизировать ЯП. Вам от этого легче станет? Сразу побежите по стандарту свой компилятор клепать?
Стандарт нужен, когда у двух экспертов возникает спор. Решает его не тот, кто умело применяет риторику и доказывает по аналогии, а способный найти нужный пункт в стандарте.
Потому что язычки без стандарта и языки с плохим стандартом обречены на раздробленную экосистему, что мы наблюдаем на примере C и C++. То собери этим компилятором строго этого года строго под Windows XP Service Pack 1, это симейком, а это базелем, а это ещё одной системой сборки с данными флагами компилятора. И молись, чтобы всё запустилось.
Даже т.н. легаси не спасёт языки от забвения, если совместимость не продумана наперёд.
Сишка под винду собирается на раз два чем угодно
Кроме оффтопика, который с восьмой версии стал шпионской помойкой, есть и другие платформы. А вон там уже всплывают все грабли и костыли, заботливо расставленные Ритчи и коллективом по стандартизации.
Попробуйте объявить на Ада Unicode строку. Только без дураков — чтобы на уровне типов было зафиксировано, что строка именно Юникод. Неважно что это будет — UTF-8, UTF-16 или UTF-32, но чтобы строго Юникод.
Ой, а а каком языке с этим вообще нормально? Вот чтобы len('👩🚀') было 1?Мне в голову из популярных только Swift приходит.
Нормально там, где присутствует строгая семантика. То есть, авторы библиотеки осознанно подходят к работе с Юникодом и его спецификой. В Расте есть такие библиотеки, хотя они и не являются стандартными. Авторы стандартной библиотеки решили, что для простоты и скорости они будут работать с кодами, а не символами. Но при этом в Расте нет проблем с объявлением строк в Юникоде.
Эти библиотеки должны стать стандартом языка, не так, что захотели авторы библиотек, какая моча им в голову ударила
>let foo = [const { None }; 100];Говнище какое. Кажется скоро будет такая же лажа как плюсовый auto.
Что эта линия значит?
И что же здесь плохого?
То что максимально странный синтаксис.
Поди разберись что это: словарь, массив или вообще что-то другоеУж лучше Swift от Apple, он хотя бы выглядит красиво и дает тебе все те же плюшки с безопасностью
Разве свифт это не ARC ?
Я понимаю, что даже в objc можно было писать всякие autorelispool, а в свифте обмазываться UnsafeRawPointer, MemoryLayout...
Но зачем?
Фигурные скобки обозначают блок, квадратные скобки - массив, срез или доступ по индексу. Так понятнее?
> Фигурные скобки обозначают блок, квадратные скобки - массив, срез или доступ по
> индексу. Так понятнее?И какой логический смысл блока { None }; в типа-массиве? Если это интуитивно - то для кого? Ящеры не палятся?
Там и в let смысла нет. Начали б с const и не меньше употребляли разные нехорошие вешества.
Если язык спроектирован грамотно, то в общих случаях синтаксис ясный и лаконичный.Кстати, в Swift синтаксис хороший, сам язык только узкоспециализированный.
> Там и в let смысла нет.Я тоже не понимаю чего они паскальское := не стырили. Оскорбляло меньшинства своим видом?
> Начали б с const и не меньше употребляли разные нехорошие вешества.
Ну до них и try_* дошел только сильно опосля. И вот оказалось что если пчелы против меда, тогда потом в улье жрать нечего. А системный яп не могет в системные задачи. И пришлось городить такие вот костыли. Вот уже почти совсем, закостылили, стабильной версией собирается - вчера закомитили, сегодня ночью отрелизились, проверяйте стабильность :))). Поэтому дрова на этом всем и болтаются в режиме эксперимента - тулчейн телепают на каждую фигню.
> Если язык спроектирован грамотно, то в общих случаях синтаксис ясный и лаконичный.
Это ж мозила делала, откуда у них грамотные проектировщики? Они всех нормальных девов в тот момент уже ушли. Так что идея хорошая, но реализация - от хипстеров с горящими глазами. А эти в архитектуру ессно не умеют, даже если б им и хотелось.
> Кстати, в Swift синтаксис хороший, сам язык только узкоспециализированный.
Ну, мне он ни в 3.14, ни в красну аpмию...
> Там и в let смысла нет. Начали б с constЕсли бы начали с const, то это было бы объявление константы foo. Так можно, но семантика приведённого выше выражения в другом: само foo не является константой, константным является только выражение, результат вычисления которого определяет значение элементов объявляемого массива.
Вспомнилось..
Где деньги?
Я всё объясню.
Нет, объяснить я и сам могу что угодно. Где деньги?
;)
Вы ломитесь в открытую дверь: константы объявлять в Rust можно, но упомянутый пример не об этом. Он об использовании выражений как констант.
Я больше про неопределенный артикль - let.
Если есть "const", то смысловая польза от "let", как от сиволов валюты в perl/php. Просто засиоают ис0одник, в угоду примитивизму компиляторов/интерпретаторов.
> Я больше про неопределенный артикль - let.
> Если есть "const", то смысловая польза от "let", как от сиволов валюты
> в perl/php. Просто засиоают ис0одник, в угоду примитивизму компиляторов/интерпретаторов.
const FOO: [i32; 5] = [1, 2, 3, 4, 5];
Вот вам определение константы. Где вы тут let видите?
> И какой логический смысл блока { None }; в типа-массиве?Данный конкретный пример - искусственный, для иллюстрации, как в принципе можно делать. В реальном коде конечно там будет не None, а выражение, результат вычисления которого может быть использован в константном контексте.
>> И какой логический смысл блока { None }; в типа-массиве?
> Данный конкретный пример - искусственный, для иллюстрации, как в принципе можно делать.А, понятно, сбили автомобилем вертолет - но системы ПВО все же не продаете. Чисто ради эффектов. Только вот в случае яп большой вопрос фича ли это. Если можно хреначить такой бред - ну его и будут хреначить. И с майнтенансом такого кода, очевидно, начнутся проблемы.
> В реальном коде конечно там будет не None, а выражение, результат
> вычисления которого может быть использован в константном контексте.Так то это может и не есть плохо. Но как-то ректально уж очень. Про KISS и "не умножайте сущности без необходимости" они явно не слышали и не только вступили на путь плюсеров, но и кажись составили достойную конкуренцию в борьбе за первое место на тему неочевидных конструкций и кривого синтаксиса.
Может, им стоило бы волевым усилием сделать какой-нибудь хруст-2.0 где все будет менее ректально?
> кажись составили достойную конкуренцию в борьбе за первое место на тему
> неочевидных конструкций и кривого синтаксиса.Конструкция более чем очевидна и логична в рамках синтаксиса и семантики Rust. Просто вы не знаете языка, поэтому вам не очевидно.
> Конструкция более чем очевидна и логична в рамках синтаксиса и семантики Rust.
> Просто вы не знаете языка, поэтому вам не очевидно.Да, я нахожу некоторые вещи которые там сделаны - довольно ректальными. И кажется не только я. По-моему эти люди не имеют никакого морального права быковать на допустим плюсы, там и то код читабельнее получается зачастую.
А реалдьно - я не понимаю почему они не наняли нормального архитекта и вместо этого решили что пиар и вбивание гнилых костылей - тема.
> Фигурные скобки обозначают блок, квадратные скобки - массив, срез или доступ по
> индексу. Так понятнее?И какой логический смысл блока { None }; в типа-массиве? Если это интуитивно - то для кого? Ящеры не палятся?
> И какой логический смысл блока { None }; в типа-массиве?Блок в котором одна инструкция, причём так как после неё нет точи с запятой, то результата вычисления выражения этой инструкции будет возвращаемым значением блока. Это один из базовыв примитивов в Rust, который используется повсеместно. Примерчик вам для понимания:
let sum = {
let a = 1;
let b = 2;
a + b
};Подробнее - в статье: https://habr.com/ru/articles/532660
Это было еще в C. И в разы проще.
Вы, наверное, и продемонстрировать сможете, как это же В РАЗЫ проще на Си?
> Вы, наверное, и продемонстрировать сможете, как это же В РАЗЫ проще на Си?На си ты все же обломаешься написать как у гражданиина freecoder в хабре:
fn foo<'a, T: FromStr, I: IntoIterator<Item = T>, F: Fn(T) -> bool>(
self: &'a Self,
first: T,
callable: F,
iter: I,
) -> Result<&'a T, T::Err> {
// ...
}
Интуитивненько, да? Тут и тяжеловесный плюсер то - поднапряжется уже, не, к ТАКОМУ даже он непривычный. Теперь попробуйте без поллитра понять что вообще эта конструкция за зверь.Нет, на сях вы ТАК - все же не сможете. Хотя, конечно, креативным использованием препроцессора можно поразвлечься, но там явно напрягаться надо. А тут такое выражовывание - часть уже имевшегося синтаксиса. Так что какой-нибудь нублон легко подгонит вам такой полет мысли. А как вы этот интуитивный код будете декодировать - не его траблы, дескать.
Чел, ты чем смотришь? Вот же в новости написано...Твой код можно переписать в это:
fn foo<T: FromStr, I: IntoIterator<Item = T>>(&self, _first: T, _callable: impl Fn(T) -> bool, _iter: I) -> _MyResult<T>
> Интуитивненько, да? Тут и тяжеловесный плюсер то - поднапряжется уже, не, к
> ТАКОМУ даже он непривычный. Теперь попробуйте без поллитра понять что вообще
> эта конструкция за зверь.Вы саму статью-то читали, особенно в том месте, откуда вы выдрали этот код? Похоже, что нет. Потому цитирую:
Хорошо, допустим, каждый из элементов синтаксиса относительно неплох, но как они сочетаются все вместе? Разве их комбинация не превращает Rust-код в нечитаемое месиво из спецсимволов? Например:
fn foo<'a, T: FromStr, I: IntoIterator<Item = T>, F: Fn(T) -> bool>(
self: &'a Self,
first: T,
callable: F,
iter: I,
) -> Result<&'a T, T::Err> {
// ...
}На самом деле это действительно большая проблема. Сигнатуры обобщенных функций с заданными ограничениями, видимо, самые перегруженные синтаксисом элементы языка Rust. И чтобы справиться с ними, Rust предлагает различные синтаксические улучшения и особый сахар, который помогает лучше упорядочить ограничения и скрыть из виду те аспекты, которые и так достаточно очевидны:
fn foo<T, I>(&self, first: T, callable: impl Fn(T) -> bool, iter: I) -> MyResult<T>
where
T: FromStr,
I: IntoIterator<Item = T>,
{
// ...
}Сигнатура метода foo уже не выглядит настолько страшно, как в исходном варианте. Она не идеальна, но сравнивая с тем, что было, все же заметен явный прогресс в улучшении читаемости. Видно, что алиасы, автовывод времен жизни, сахар для указания self, impl Trait в позиции аргумента, блок where и прочее, введены в язык не случайно и они сильно упрощают чтение действительно сложных мест, с непростой семантикой.
> На самом деле это действительно большая проблема. Сигнатуры обобщенных функций с заданными
> ограничениями, видимо, самые перегруженные синтаксисом элементы языка Rust. И чтобы справиться
> с ними, Rust предлагает различные синтаксические улучшения и особый сахар,...но не дает никаких гарантий что конкретный кодер в конкретном проекте будет юзать именно то, именно так, поэтому всегда будет риск отхватить на вход - вот такой чудо-код от очередного write-only поймавшего волну. Да, вон тот тип в 2 ночи, на пике возможностей - еще и не так завернет. Теперь попробуйте это майнтайнить.
> Сигнатура метода foo уже не выглядит настолько страшно, как в исходном варианте.
Ну, по сравнению с первым вариантом это улучшение. Хотя как по мне - это на уровне забористых плюсов примерно. Т.е. в целом я вообще видеть ТАКОЙ код - не хочу.
...однако никто и ничто не гарантирует что в энном проекте не будет вон то. И тогда можно будет охренеть эти инопланетные каракули декодировать.
> Она не идеальна, но сравнивая с тем, что было, все же
> заметен явный прогресс в улучшении читаемости.На мой вкус - им бы норм архитекта нанять и сделать синтаксис 2.0. Зарубив на корню вон те страшилища. Это конечно будет кидалово, но пока на этом не сильно много важного софта и это еше терпимо будет. Реально нужное поправят. А вечно майнтайнить те ужастики - ну вот нет. Они умрут от своего веса и 0 майнтайнеров на такой код.
> where и прочее, введены в язык не случайно и они сильно
> упрощают чтение действительно сложных мест, с непростой семантикой.Хороший ЯП должен делать сложные вещи - неудобными. Потому что цель - вовсе не дать програмеру повыражовыаться с заподвыподвертом. Код видите ли должны другие майнтайнить потом. Иначе это сдохнет как только програмеру надоест его проект. И уж вроде корпы должны бы такой аспект понимать, но не, даже с 3 директорами от корп фэйл. Парадокс прямо.
> Теперь попробуйте это майнтайнить.Переписываешь как надо - и спокойно дальше майнтайнишь. Или в чём должен майнтейниг заключаться?
> На мой вкус - им бы норм архитекта нанять и сделать синтаксис
> 2.0. Зарубив на корню вон те страшилища. Это конечно будет кидалово,
> но пока на этом не сильно много важного софта и это
> еше терпимо будет. Реально нужное поправят. А вечно майнтайнить те ужастики
> - ну вот нет. Они умрут от своего веса и 0
> майнтайнеров на такой код.Напишите пример, как именно вы хотите, чтобы выглядел такой код, с такой же семантикой. У вас же к синтаксису претензии, правильно? Предложите лучший синтаксис для лучшего выражения того же.
> Переписываешь как надо - и спокойно дальше майнтайнишь. Или в чём должен
> майнтейниг заключаться?Лол. Для этого
1) Надо въехать в проект. При том основательно. Иначе будут наломаны дрова. Такие конструкции с такой записью это делают мягко говоря не быстрым и не простым занятием. В своей проге разбираться просто. Теперь возьмите большой чужой проект и попробуйте там что-то поменять, не словам ничего. Посмотрите сколько времени уйдет. На сях я так могу на чем-то с линукскернел размером и быстро. На хрусте - боюсь даже представить сколько времени сожрет въезд в все абстракции с такой записью и общей читаемостью кода. И то что такие навороты можно хреначить на 1 дыхании - вообще не фича.2) Убить дофига времени на переписывание и проверки что нигде факап не вышел. Рефакторы весьма багоопасная тема. И уж точно существенный рефактор кода - это не майнтенанс. Странно что вы это не знаете.
> Напишите пример, как именно вы хотите, чтобы выглядел такой код, с такой
> же семантикой. У вас же к синтаксису претензии, правильно? Предложите лучший
> синтаксис для лучшего выражения того же.Го блин за образец возьмите :). Можно сманив прям тех же тушек. А половину абстракций вероятно надо будет просто выкинуть к хренам. И черт с ними с концепциями и прочей функциональщиной. Не надо это все в реальных проектах, только майнтенанс делает непотребным.
Хотя конечно можно в это как следует вляпаться и посмотреть как до корпов это допрет - и тогда они кинут вас куда жестке, объявив deprecated когда у вас полжизни на это завязана сдуру уже. Вон там нетчики прикольно кипишуют, реакт :)) осваиваьт собираются. А зачем тогда тот мусор учили? А, чтобы ща списать дофига знаний в /dev/null? И обратно на уровнеь джуна? Отличные перспективы.
> Такие конструкции с такой записью это делают мягко говоря не быстрым
> и не простым занятием.Те улучшения плохо написанного кода, о которых шла речь выше - чисто синтаксические, они автоматически проверяются компилятором. Невозможно ничего сломать, просто перенося impl Trait в позицию аргумента или вынося ограничения в блок where, или вводя свой новый алиас для типа. В этом прелесть строгой типизации в Rust: подобные вещи проверяются компилятором автоматически, поэтому рефакторить код на расте очень легко.
> Го блин за образец возьмите :). Можно сманив прям тех же тушек.
> А половину абстракций вероятно надо будет просто выкинуть к хренам.Вот именно. Что с той же семантикой такое на Go вообще не получится записать. А абстракции выкинуть и в Rust можно, если они вам не нужны.
> прелесть строгой типизации в Rust: подобные вещи проверяются компилятором автоматически,
> поэтому рефакторить код на расте очень легко.Я никогда не спорил с тем что типизация это хорошо, это и правда спасает от дурацких грабель. Но все же синтаксис позволяет, если не провоцирует, довольно инопланетные конструкции и я решительно не понимаю почему на плюсеров за это наехать можно а на сабж нет.
> Вот именно. Что с той же семантикой такое на Go вообще не
> получится записать. А абстракции выкинуть и в Rust можно, если они
> вам не нужны.Проблема в том что я все равно могу отхватить такие выражовывания как вон то - в чужом проекте. И это нихрена не фича. Как говорится пишите программы так, чтобы даже последний идиот смог в них разобраться. Тогда у вас не будет проблем с майнтенансом.
> Вы, наверное, и продемонстрировать сможете, как это же В РАЗЫ проще на
> Си?Если без return, то так:
#include <stdio.h>
int main(void)
{
int a, b;
printf("%i", (a = 1, b = 2, a + b));
}А если вспомнить, откуда вырос синтаксис Rust, то так:
let sum =
let a = 1 in
let b = 2 in
a + b
;;
>> Вы, наверное, и продемонстрировать сможете, как это же В РАЗЫ проще на Си?
> Если без return, то так:
> #include <stdio.h>
> int main(void)
> {
> int a, b;
> printf("%i", (a = 1, b = 2, a + b));
> }Код не эквивалентный, так как здесь a и b объявлены во внешнем пространстве имён.
>>> Вы, наверное, и продемонстрировать сможете, как это же В РАЗЫ проще на Си?
>> Если без return, то так:
>> #include <stdio.h>
>> int main(void)
>> {
>> int a, b;
>> printf("%i", (a = 1, b = 2, a + b));
>> }
> Код не эквивалентный, так как здесь a и b объявлены во внешнем
> пространстве имён.Удивительно, но в Си не пространств имён.
Если имелась ввиду "область видимости", то она ограничена { } функции main - за её пределами никто не видит, в отличие от такого:
int a, b;
int main(void)
{
}
Да, область видимости. В вашем Си-коде и в моём Rust-примере имена переменных по разному видны (объявленное внутри блока в Rust не будет видимо вне его). Так что это разные примеры.
> Да, область видимости. В вашем Си-коде и в моём Rust-примере имена переменных
> по разному видны (объявленное внутри блока в Rust не будет видимо
> вне его). Так что это разные примеры.Разные разве что языки. Объявленные внутри main a и b не видны за её пределами. Если не понятен был намёк "если без retuen", то вот императивная запись:
int sum() {
int a = 1;
int b = 2;
return a + b;
}В моём примере на OCaml, который очень похож на Rust
let sum =
let a = 1 in
let b = 2 in
a + b
;;и потому его пришлось выкинуть в ответе для удобства парирования, это вообще не переменные, а чистые функции. Если Rust возвращает значение без императивного return, значит это и там - функция (неудачное её имя -- отдельная тема, но вопрос "что она суммирует" проще замять для ясности).
В Rust можно сделать функцию:
fn sum() -> i32 {
let a = 1;
let b = 2;
a + b
}sum();
замыкание
let sum = || {
let a = 1;
let b = 2;
a + b
};sum();
и блок:
let sum = {
let a = 1;
let b = 2;
a + b
};
В отличии от функций и замыканий, блок не принимает аргументов, в блоке нельзя сделать в произвольном месте return и вычисляется блок в том месте, где он определяется, возвращая при этом значение последнего выражения, вычисленного внутри него.
Похоже, все три не принимают аргументов. И будут вычислены на этапе трансляции, "возвращая при этом значение последнего выражения, вычисленного внутри него".
> Похоже, все три не принимают аргументов. И будут вычислены на этапе трансляции,
> "возвращая при этом значение последнего выражения, вычисленного внутри него".Приведены варианты функции и замыкание с пустым списком аргументов, у блока аргументов нет в принципе. В функции и замыкании можно в произвольном месте сделать return, в блоке - нельзя. Функцию можно несколько раз вызвать из разных мест, блок - нельзя: он вычисляется только в месте создания.
>> Похоже, все три не принимают аргументов. И будут вычислены на этапе трансляции,
>> "возвращая при этом значение последнего выражения, вычисленного внутри него".
> Приведены варианты функции и замыкание с пустым списком аргументов, у блока аргументов
> нет в принципе. В функции и замыкании можно в произвольном месте
> сделать return, в блоке - нельзя. Функцию можно несколько раз вызвать
> из разных мест, блок - нельзя: он вычисляется только в месте
> создания.Всё это очень любопытно, одна беда: замыкание и есть функция, и даже "константная переменная" есть функция (не принимающая аргументов и чистая). В функциональных языках так. Rust, как я понял, функциональный, но очень не хочет, что бы про него так думали - по сложившемуся мнению, они далеки от "железа".
Rust - императивный язык с zero-cost абстракциями, которые, в том числе, взяты из функциональных языков. От действительно функциональных языков, таких как Haskell, Rust довольно далёк. Тем не менее, он находит способ реализации некоторых полезных функциональных абстракций в императивном подходе. В этом качестве он делает то же, что делал C++ в своё время с ООП.
> Rust - императивный языкИз приведённых примеров (в частности - отсутствие императивного оператора return для возврата результата функции) видно, что Rust прежде всего функциональный язык, а потом уже всё остальное.
> с zero-cost абстракциями, которые, в том числе, взяты
> из функциональных языков. От действительно функциональных языков, таких как Haskell, Rust
> довольно далёк.Отсутствие ленивости не делает Rust далёким от своего предка - OCaml.
> Тем не менее, он находит способ реализации некоторых полезных
> функциональных абстракций в императивном подходе. В этом качестве он делает то
> же, что делал C++ в своё время с ООП.А что C++ делает с ООП, когда там нет базового - методов? Первая общепринятая библиотека - STL - это попытка привнести функциональный стиль в императивный язык.
> Из приведённых примеров (в частности - отсутствие императивного оператора return для возврата
> результата функции) видно, что Rust прежде всего функциональный язык, а потом
> уже всё остальное.Как я понимаю вместо этого сигналом служит отсутствие ; после энного выражения.
> Как я понимаю вместо этого сигналом служит отсутствие ; после энного выражения.Я выше уже писал, что из функций в Rust можно в любом месте сделать return. Но у человека похоже что-то с головой: он придумывает себе свой собственный Rust, без return, чисто функциональный, с блоками-макросами и отсутствием сопоставления с образцом в let.
>> Как я понимаю вместо этого сигналом служит отсутствие ; после энного выражения.
> Я выше уже писал, что из функций в Rust можно в любом
> месте сделать return. Но у человека похоже что-то с головой: он
> придумывает себе свой собственный Rust, без return, чисто функциональный,Сейчас мы узнаем, кто же это человек, придумывающий "чисто функциональный" Rust.
Цитирую себя: Rust прежде всего функциональный язык, а потом уже всё остальное.
Цитирую freecoder-а: _чисто_ функциональный.
Да, что-то у него с головой.
> с блоками-макросами
> и отсутствием сопоставления с образцом в let.Опять что-то с головой? Чем же надо было читать "с точки зрения Си программиста _похоже_"?
> Цитирую себя: Rust прежде всего функциональный язык, а потом уже всё остальное.Rust прежде всего императивный язык, а потом уже всё остальное.
>>> Rust ... чисто функциональный,
>> Цитирую себя: Rust прежде всего функциональный язык, а потом уже всё остальное.
> Rust прежде всего императивный язык, а потом уже всё остальное.Прежде всего, произошла попытка приписать мне ложный тезис, на основании чего делать заявления про голову. Голова, как мы выяснили, собственная. Что же делать оппоненту, пойманному на передёргивании? Выкинуть контекст и попытаться устроить спор, да.
Так императивный или функциональный Rust прежде всего? В зависимости от вашего ответа будет понятно, есть у вас проблемы с головой, или нет.
> Так императивный или функциональный Rust прежде всего? В зависимости от вашего ответа
> будет понятно, есть у вас проблемы с головой, или нет.Так ты доктор? Программируешь на Rust на досуге? Я было решил, что-то понимаешь в нём.
Rust - не то, что вам кажется. Вместо досужих домыслов о нём просто прочтите документацию.
Понял, не буду читать досужие домыслы. Тем более, каким языком является Rust, мне в своё время красиво объяснил Ordu. Как раз в ответ на "отсутствие return как характерный признак ФЯ". Объяснил так, что с ним не поспоришь. И со мной при этом не спорил. Жаль, что специалистов того уровня по языку здесь давно не видно
И ссылки вы конечно же приводить не будете.
Зачем бы мне это было надо?
Вы очень много выдумываете из своей головы в нашем разговоре. То, чего нет и не было в реальности. Приведите ссылку - тогда можно обсуждать этот случай, как действительно имевший место быть. Пока же больше похоже на вашу выдумку.
Что мне надо обсуждать с тем, кто выдумывает, будто бы я выдумываю ответы Ordu, что он писал здесь мне? Проекции в психологии? И зачем?
Не хотели бы обсуждать - то не писали бы об этом изначально. На слово я вам не верю, доказать вы не хотите - тогда и правда, разговаривать не о чем.
> Прежде всего, произошла попытка приписать мне ложный тезис, на основании чего делать
> заявления про голову.Чем же надо было читать: "Но у человека _похоже_ что-то с головой"?
>> Прежде всего, произошла попытка приписать мне ложный тезис, на основании чего делать
>> заявления про голову.
> Чем же надо было читать: "Но у человека _похоже_ что-то с головой"?Вот и подумай, чем ты читал и зачем на ровном месте развязал спор. Разве только для того, что бы я показал тебе зеркало?
>> Из приведённых примеров (в частности - отсутствие императивного оператора return для возврата
>> результата функции) видно, что Rust прежде всего функциональный язык, а потом
>> уже всё остальное.
> Как я понимаю вместо этого сигналом служит отсутствие ; после энного выражения.Понимать надо, что return это императив, т.е указание "верни". Нет императива, есть значение, как в школьной записи функции f(x) = 2x - похоже, что язык не императивный, а функциональный.
fn foo(a: i32) -> bool {
if a < 0 {
return false;
}
// ...
true
}
К Rust'у это не относится, в нём return есть.
>
> fn foo(a: i32) -> bool {
> if a < 0 {
> return false;
> }
> // ...
> true
> }
>
> К Rust'у это не относится, в нём return есть.Не вижу return перед true, в основной "точке выхода". Таким образом указанный мной характерный признак остаётся в силе. Но за пример спасибо - видна нелепость синтаксиса, когда вместо скобочек можно быть оставить ключевое слово из OCaml.
> Таким образом указанный
> мной характерный признак остаётся в силе.Какой признак?
>> Таким образом указанный
>> мной характерный признак остаётся в силе.
> Какой признак?Перечитай моё предыдущее сообщение в той его части, что ты столь старательно удалил при цитировании.
Вы можете прямо ответить на вопрос или нет?
fn foo(a: i32) -> bool {
if a < 0 {
return false;
}
// ...
true
}
Это то же самое, что
fn foo(a: i32) -> bool {
if a < 0 {
return false;
}
// ...
return true;
}
И то, и то - корректный код на Rust. Так о каких признаках шла речь?
> Вы можете прямо ответить на вопрос или нет?Я не вижу вопроса.
>[оверквотинг удален]
> Это то же самое, что
>
> fn foo(a: i32) -> bool {
> if a < 0 {
> return false;
> }
> // ...
> return true;
> }
>Сахарок, что бы не рвало шаблон императивщикам.
Ещё раз: пока ты будешь удалять из моих сообщений данные мной ответы, и спрашивать повторно, я буду поступать с тобой точно так же.
> Ещё раз: пока ты будешь удалять из моих сообщений данные мной ответыЯ не модератор, поэтому удалять ваши ответы из ваших сообщений физически не могу. Но вам я сочувствую, у вас то в Rust'е придумывают свой паттерн-матчинг, не такой, какой у вас в голове, теперь ещё и ваши сообщения не такие, как вы их писали... Жаль, но проблема у вас прогрессирует.
>> Ещё раз: пока ты будешь удалять из моих сообщений данные мной ответы
> Я не модератор, поэтому удалять ваши ответы из ваших сообщений физически не
> могу.Цитату моего сообщения получаешь, когда пишешь ответ. Из неё и удаляешь. Ты это делал неосознанно, потому не смог увязать моё описание со своими действиями? Или зациклился прогрессированием проблемы?
> Но вам я сочувствую, у вас то в Rust'е придумывают
> свой паттерн-матчинг, не такой, какой у вас в голове,Для справки: паттерн-матчингу лет больше чем мне и Rust-у.
Я читаю и воспринимаю всё сообщение, а цитирую только ту часть, на которую отвечаю. Для вашего же удобства стараюсь. Или вам что, обидно, что модераторы чикают ваши сообщения за оверквотинг, а не мои? )
> Я читаю и воспринимаю всё сообщение, а цитирую только ту часть, на
> которую отвечаю. Для вашего же удобства стараюсь.Понял. Действительно, мне так удобнее. Когда при ответе выбрасывается суть, а второстепенные детали оспариваются - сразу видно, что эксперту интересен спор ради спора.
> Или вам что, обидно,
> что модераторы чикают ваши сообщения за оверквотинг, а не мои? )Нет, не обидно, ведь это не моя фантазия.
Какая именно суть и где она была выброшена? Приведите пример, пожалуйста.
> Сахарок, что бы не рвало шаблон императивщикам.А может чтобы "не рвало шаблон" функциональщикам?
Тело функции в Rust - это блок, завёрнутый в return. Например, тело такой функции:
fn add(a: usize) -> usize {
let b = a + 1;
b
}
По-сути является следующим:
// argument_0 is the actual first argument passed from the caller
let a: usize = argument_0;
return {
let b = a + 1;
b
};
https://doc.rust-lang.org/reference/items/functions.html#fun...
>> Сахарок, что бы не рвало шаблон императивщикам.
> А может чтобы "не рвало шаблон" функциональщикам?Если вопрос не риторический, попробуй опросить функциональщиков. Обычно функциональщикам удаётся производить подстановку.
> Тело функции в Rust - это блок,
Это так везде. Функция - именованный блок.
> завёрнутый в return.
И возвращается этим самым return что? Блок. Очень хотелось найти return в документации, но получилось, что получилось. ;)
>[оверквотинг удален]
> По-сути является следующим:
>
> // argument_0 is the actual first argument passed from the caller
> let a: usize = argument_0;
> return {
> let b = a + 1;
> b
> };
>
> https://doc.rust-lang.org/reference/items/functions.html#fun...Ох, да, ссылка весьма кстати. Поищи там "a function yields a first-class value" - это ещё один характерный признак.
> И возвращается этим самым return что? Блок.Нет. Возвращается значение последнего выражения, вычисленного в блоке, а не сам блок. Если бы функция возвращала блок, то и тип возвращаемого значения был бы "блок", но он не "блок", а равен типу значения последнего выражения в блоке.
>> И возвращается этим самым return что? Блок.
> Нет. Возвращается значение последнего выражения, вычисленного в блоке, а не сам блок.
> Если бы функция возвращала блок, то и тип возвращаемого значения был
> бы "блок", но он не "блок", а равен типу значения последнего
> выражения в блоке.Если бы не произошло очередной подмены тезиса ("возвращается этим самым return" на "функция возвращала"), то я бы прочитал ответ на это мой сообщение. А так видно, что кто-то не видит разницы.
В контексте нашего разговора - не вижу разницы. return в Rust - ключевое слово, которое обозначает возвращение значения из функции: https://doc.rust-lang.org/std/keyword.return.htmlПоэтому выражение "возвращение этим самым return" тождественно выражению "функция возвращает". Ваша проблема в том, что вы не видите разницы между выражением и его значением, поэтому у вас там, где должно возвращаться значение, возвращается выражение.
> Ох, да, ссылка весьма кстати. Поищи там "a function yields a first-class
> value" - это ещё один характерный признак.Признак чего? Просто в языке можно оперировать функциональным элементом, например, связывать его с указателем на функцию:
let add_ptr: fn(usize) -> usize = add;
Как эта возможность характеризует язык?
>> Ох, да, ссылка весьма кстати. Поищи там "a function yields a first-class
>> value" - это ещё один характерный признак.
> Признак чего? Просто в языке можно оперировать функциональным элементом, например, связывать
> его с указателем на функцию:
>
> let add_ptr: fn(usize) -> usize = add;
>
> Как эта возможность характеризует язык?Очевидно, даёт freecoder-у абсолютную уверенность, что язык - императивный.
> Фигурные скобки обозначают блок, квадратные скобки - массив, срез или доступ по индексу. Так понятнее?Приз за сложную шутку
Плюсовый auto как раз удобен и понятен, в отличие от.
Плюсовый авто удобен чтобы форич по только что упомянутому листу не занимал пол экрана только на объявление, но когда ехал авто через авто смотрит авто авто авто и нифига не ясно кто какого типа и зачем тут нужен это читать больно.
> Плюсовый авто удобен чтобы форич по только что упомянутому листу не занимал пол экранаПопадание, но я бы так
-- удобен
++ вдруг понадобился
Синтаксис избыточный. Если у Ada он просто многословный, то тут именно заbloatченый.
А в чём избыточность?
let, fn, куча ненужных символов
То не избыточность. То просто вы плаваете в предметной области.
В Бейсике было ключевое слово let, но обычно можно было его не писать - транслятор размером 8Кб вполне справлялся.
Там это было для упрощения интерпретатора, и конкретно интерпретации байткода, когда при вводе операторы упаковывались в один байт. Более умные Бейсики довольно быстро избавились от лишних рудиментов в исходнике.Но когда нужно объявить переменную с конкретными свойствами что то типа "let" вполне уместно. Неуместно именно использование на каждый чих, когда это избыточно в исходнике.
Так свойства переменной можно записывать перед её именем. Но в Rust решали как раз эту "проблему" Си, вот и let на каждый чих.
> Так свойства переменной можно записывать перед её именем. Но в Rust решали
> как раз эту "проблему" Си, вот и let на каждый чих.Вот статья специально для таких как вы была написана: https://habr.com/ru/articles/532660
Раздел "Постфиксная запись типа".
>> Так свойства переменной можно записывать перед её именем. Но в Rust решали
>> как раз эту "проблему" Си, вот и let на каждый чих.
> Вот статья специально для таких как вы была написана: https://habr.com/ru/articles/532660
> Раздел "Постфиксная запись типа".Специально для писателей того раздела, пугающих читателя "int (*fns[16])(int * const * p);", в Си и Си++ придумано ключевое слово typedef. А в C++ из OCaml, на котором была написана первая версия транслятора Rust, заимствован вывод типов по алгоритму Хиндли–Миллнера.
Специально для писателей слов "простой парсер" написана бородатая Драгонбук, где вводится термин "семантический анализ".
Я так и не понял, что я должен был почерпнуть из того раздела. Или надо было читать следующий, где let служит для сопоставления с образцом? Ну так тогда можно сказать, что избыточны все остальные конструкции.)
>вот и let на каждый чихНа какой каждый? Объявляет новую переменную - появляется let. Занимаетесь присваиванием - нет никакого let.
>>вот и let на каждый чих
> На какой каждый? Объявляет новую переменную - появляется let.Вот на этот. Тип при объявлении указан? Значит let лишний, если об этой задуматься.
Например, есть let, но тип int не указывается, а выводится:
let i = 1;;
Здесь уже давно отвечено:https://stackoverflow.com/questions/32180684/why-does-rust-u...
> Здесь уже давно отвечено:
> https://stackoverflow.com/questions/32180684/why-does-rust-u...Там отвечено на вопрос "зачем", а не "зачем лишнее".
> Там отвечено на вопрос "зачем", а не "зачем лишнее".Если использовать let в месте типа, то сложится впечатление, что его можно использовать как заменитель типа, но это не так. Например, в сигнатурах функций - нельзя. В указании типа в обобщённых типах - нельзя. И т.д. С текущим синтаксисом больше консистентности: let - это именно отдельная инструкция сопоставления с образцом, в которой могут быть введены новые имена (переменные) в составе образца. Аннотация типа (": Type") при этом может не указываться - тогда она просто пропускается без необходимости её на что-то заменять.
В этом принципиальное отличие let от плюсового auto, который действительно является заполнителем типа.
>[оверквотинг удален]
> Если использовать let в месте типа, то сложится впечатление, что его можно
> использовать как заменитель типа, но это не так. Например, в сигнатурах
> функций - нельзя. В указании типа в обобщённых типах - нельзя.
> И т.д. С текущим синтаксисом больше консистентности: let - это именно
> отдельная инструкция сопоставления с образцом, в которой могут быть введены новые
> имена (переменные) в составе образца. Аннотация типа (": Type") при этом
> может не указываться - тогда она просто пропускается без необходимости её
> на что-то заменять.
> В этом принципиальное отличие let от плюсового auto, который действительно является заполнителем
> типа.У меня сложилось впечатление, что тут:
let sum = {
let a = 1;
let b = 2;
a + b
};нет образца, с которым что-то зачем-то сопоставляется. Это очень похоже на чистую функцию (тело которое не имеет особого смысла, оптимизируется до 3).
В данном примере значение выражения (выражением является блок, возвращающий своё последнее вычисленное значение) сопоставляется с образцом, который состоит только из одного нового имени. Это частный случай образца.
> В данном примере значение выражения (выражением является блок, возвращающий своё последнее
> вычисленное значение) сопоставляется с образцом, который состоит только из одного нового
> имени. Это частный случай образца.let sum = {
let a = 1;
let b = 2;
a + b
}То есть "образец" здесь "sum"? С чем в данном примере он с сопоставляется?
Если имеется ввиду подстановка вместо sum "блока", когда sum встречается где-то в другом месте, так называйте вещи своими именами. Знакомые с функциональными языками поймут, программисты на Си воспримут как "похоже на макрос". Пока получаются пёрлы из разряда "неизменяемая переменная" и "функциональный язык - это когда много функционала".
Это не похоже на макрос. Выражение вычисляется в данном месте и имя sum обозначает вычисленное значение. Вместо одного имени там потенциально мог быть более сложный паттерн. Сопоставление значению выражения нового имени - это частный случай сопоставления с образцом вообще.
> Это не похоже на макрос.Это похоже на макрос с т.з. программиста на Си.
> Выражение вычисляется в данном месте и имя
> sum обозначает вычисленное значение. Вместо одного имени там потенциально мог быть
> более сложный паттерн. Сопоставление значению выражения нового имени - это частный
> случай сопоставления с образцом вообще."Сопоставление с образцом" на инглише "pattern matching". Обычно это ключевое слово match.
То есть есть некий образец, и есть данные. Если они каким-то образом подходят под образец, значит сопоставление происходит успешно, иначе рассматривается другой образец (если он есть).
Когда вместо имени подставятся "сопоставленное" в некоем определении выражение, это называется "подстановка". В Си так происходит с макросами.
> Это похоже на макрос с т.з. программиста на Си.Это не похоже на Си-макрос совершенно.
> "Сопоставление с образцом" на инглише "pattern matching". Обычно это ключевое слово match.
match в Rust осуществляет сопоставление в общем виде, но есть ещё if let, let и let else, которые используются для сопоставления в специальных случаях.
let требует, чтобы записанный паттерн полностью соответствовал значению, с которым он сопоставляется (паттерн должен покрывать все возможные значения выражения справа).
if let и let else допускают уже только частичное покрытие.> То есть есть некий образец, и есть данные. Если они каким-то образом
> подходят под образец, значит сопоставление происходит успешно, иначе рассматривается
> другой образец (если он есть).Так работает match, в котором могут быть указаны несколько паттернов и они в совокупности должны покрыть все варианты. В let указывается только один паттерн, поэтому только он и должен покрыть все варианты. Ну либо не все, тогда нужно использовать let else.
> Когда вместо имени подставятся "сопоставленное" в некоем определении выражение, это называется
> "подстановка". В Си так происходит с макросами.В Rust нет никакой "подстановки", а есть pattern matching в let: https://doc.rust-lang.org/book/ch18-01-all-the-places-for-pa...
>> Это похоже на макрос с т.з. программиста на Си.
> Это не похоже на Си-макрос совершенно.С точки зрения кого? Я это утверждаю, как писавший когда-то препроцессор Си. Полагаю, имею некое право говорить за программистов на Си, хотя бы некоторых. Понятно, что возможности у макросов существенно беднее. Потому и "похоже", а не "это он и есть".
>> "Сопоставление с образцом" на инглише "pattern matching". Обычно это ключевое слово match.
> match в Rust осуществляет сопоставление в общем виде, но есть ещё if
> let, let и let else, которые используются для сопоставления в специальных
> случаях.
> let требует, чтобы записанный паттерн полностью соответствовал значению, с которым он сопоставляется
> (паттерн должен покрывать все возможные значения выражения справа).
> if let и let else допускают уже только частичное покрытие.Где в определении блока let то, с чем сопоставляется "образец"? Без этого не понятно, с чем сопоставление.
>> То есть есть некий образец, и есть данные. Если они каким-то образом
>> подходят под образец, значит сопоставление происходит успешно, иначе рассматривается
>> другой образец (если он есть).
> Так работает match, в котором могут быть указаны несколько паттернов и они
> в совокупности должны покрыть все варианты. В let указывается только один
> паттерн, поэтому только он и должен покрыть все варианты. Ну либо
> не все, тогда нужно использовать let else.Да, несколько паттернов - это основа паттернматчинга, без них в общем случае сопоставление с образцом не имеет смысла как вычислительная конструкция, теряет полноту по Тьюрингу. Получается то, что обычно называли "макрос". В данном случае, возможно, правильнее переводить как "шаблон", что бы не путалось с полноценным match.
>> Когда вместо имени подставятся "сопоставленное" в некоем определении выражение, это называется
>> "подстановка". В Си так происходит с макросами.
> В Rust нет никакой "подстановки", а есть pattern matching в let: https://doc.rust-lang.org/book/ch18-01-all-the-places-for-pa...Я так понял, что в Rust есть своя особая терминология для принятых в других ЯП вещей. Что бы быть непохожим на них, или что бы не находить общий язык - это пока не понял.
> С точки зрения кого? Я это утверждаю, как писавший когда-то препроцессор Си.
> Полагаю, имею некое право говорить за программистов на Си, хотя бы
> некоторых. Понятно, что возможности у макросов существенно беднее. Потому и "похоже",
> а не "это он и есть".Суть макроса в том, что он задаёт некий шаблон, который заменяется препроцессором на код, представленный в определении макроса. Здесь же нет никакой замены. Тем более текстовой, как реализованы макросы в Си. В Rust тоже есть макросы, но в отличии от сишных они работают на уровне AST.
> Где в определении блока let то, с чем сопоставляется "образец"? Без этого
> не понятно, с чем сопоставление.
let PATTERN = EXPRESSION;> Да, несколько паттернов - это основа паттернматчинга, без них в общем случае
> сопоставление с образцом не имеет смысла как вычислительная конструкция, теряет полноту
> по Тьюрингу.
match foo() {
(first, _) => println!("{first}"),
}Ну и где здесь "потеря полноты по Тьюрингу"?
> Я так понял, что в Rust есть своя особая терминология для принятых
> в других ЯП вещей. Что бы быть непохожим на них, или
> что бы не находить общий язык - это пока не понял.Ахахах! )))
Ну да, ну да. Просто имейте смелость признать, что вы были не правы. Или высокомерие и самолюбие не позволяют? )
>> С точки зрения кого? Я это утверждаю, как писавший когда-то препроцессор Си.
>> Полагаю, имею некое право говорить за программистов на Си, хотя бы
>> некоторых. Понятно, что возможности у макросов существенно беднее. Потому и "похоже",
>> а не "это он и есть".
> Суть макроса в том, что он задаёт некий шаблон, который заменяется препроцессором
> на код, представленный в определении макроса. Здесь же нет никакой замены.
> Тем более текстовой, как реализованы макросы в Си. В Rust тоже
> есть макросы, но в отличии от сишных они работают на уровне
> AST.Если следовать логике ("заменяется препроцессором"), получается, что в Rust нет никаких макросов. Надеюсь, понятно объяснил?
>> Где в определении блока let то, с чем сопоставляется "образец"? Без этого
>> не понятно, с чем сопоставление.
>
> let PATTERN = EXPRESSION;
>Образец (которого нет в let) где-то в другом месте исходника магически "сопоставляется" с PATTERN, после чего на место PATTERN проставляется EXPRESSION? Это называется подстановка. Примерно так и происходит "раскрытие макросов".
>> Да, несколько паттернов - это основа паттернматчинга, без них в общем случае
>> сопоставление с образцом не имеет смысла как вычислительная конструкция, теряет полноту
>> по Тьюрингу.
>
> match foo() {
> (first, _) => println!("{first}"),
> }
>
> Ну и где здесь "потеря полноты по Тьюрингу"?Например, в том месте, где отсутствует цикл.
>> Я так понял, что в Rust есть своя особая терминология для принятых
>> в других ЯП вещей. Что бы быть непохожим на них, или
>> что бы не находить общий язык - это пока не понял.
> Ахахах! )))
> Ну да, ну да. Просто имейте смелость признать, что вы были не
> правы. Или высокомерие и самолюбие не позволяют? )Я пока не понял, в чём я был не прав. Неужели в выражении "у меня сложилось впечатление"? Если такое же впечатление сложилось не только у меня, хочется знать, у кого ещё.
Вот пример с более сложным выражением и паттерном, в котором, однако, точно также вводится новое имя sum:
struct Ops {
sum: i32,
mul: i32,
}let (_, _, Ops { sum, .. }) = {
let a = 1;
let b = 2;
(a, b, Ops { sum: a + b, mul: a * b })
};https://play.rust-lang.org/?version=stable&mode=debug&editio...
>[оверквотинг удален]
> mul: i32,
> }
> let (_, _, Ops { sum, .. }) = {
> let a = 1;
> let b = 2;
> (a, b, Ops { sum: a + b,
> mul: a * b })
> };
>
Довольно многословная запись для конструктора.
struct Ops {
int32_t sum;
int32_t mul;
Ops() { auto a = 1, b = 2; sum = a + b; }
};
https://godbolt.org/z/Ys58Y1oYc
> Довольно многословная запись для конструктора.Потому что это не конструктор. В Rust нет конструкторов как специальных методов структуры. Если нужно, то пользователь может создать сам подобный метод, который вернёт экземпляр структуры, его условно можно назвать "конструктором".
>> Довольно многословная запись для конструктора.
> Потому что это не конструктор. В Rust нет конструкторов как специальных методов
> структуры. Если нужно, то пользователь может создать сам подобный метод, который
> вернёт экземпляр структуры, его условно можно назвать "конструктором".Понятно, что нет конструкторов, потому и приходится применять вот такое, или реализовать "фабрику". Конструктор + деструктор в Си++ ведь нужны, что бы работало RAII, гарантирующее "безопасное" освобождение ресурсов. А тут другие методы.
> Понятно, что нет конструкторов, потому и приходится применять вот такое, или реализовать
> "фабрику". Конструктор + деструктор в Си++ ведь нужны, что бы работало
> RAII, гарантирующее "безопасное" освобождение ресурсов. А тут другие методы.В Rust повсеместно используется RAII. Управление ресурсами на основе владения (Ownership Based Resource Management, OBRM) - по-сути это и есть RAII.
>> Понятно, что нет конструкторов, потому и приходится применять вот такое, или реализовать
>> "фабрику". Конструктор + деструктор в Си++ ведь нужны, что бы работало
>> RAII, гарантирующее "безопасное" освобождение ресурсов. А тут другие методы.
> В Rust повсеместно используется RAII. Управление ресурсами на основе владения (Ownership
> Based Resource Management, OBRM) - по-сути это и есть RAII.Я не вполне понял. В Rust повсеместно используется OBRM, но хочется назвать это RAII? Или RAII в Си++ даёт право говорить "у нас есть OBRM из Rust"?
> создании консорциума "Safety-Critical Rust Consortium", нацеленного на использовании языка Rust в решениях, требующих повышенной надёжности (Safety-Critical Software)Да, без этого никуда, а то ведь никто не использует самый бизапасный БДСМ язык для чего то, куда ни плюнь страшный С. :)
> куда ни плюнь страшный ССи это lingua franca всея программирования. А так да, в какую спеку не заглянешь, везде описания структур данных на сишке)
Как показала история, даже lingua franca тоже дохнут)
Латынь весело машет ручкой из могилы, хфранцузский, на котором, вроде как, говорил весь мир и даже писалась русская литература, нужен уже не столь многим.
СИшка как латынь в медицине - куча легаси осталось. Термины заучиваются, но все современное это уже на других языках.Слава богу в програмировании проще, народ не хочет использовать дыряшку, кроме тех случаев когда деватся некуда. Можно посмотреть статистику новых проектов.
Надеюсь лет за пять-десять все разумные сишники переучатся, а остальных можно будет отправить мести улицы.
Латынь не совсем умерла, она растеклась по куче разных языков.С - язык близкий к асму, поэтому не смотря на все фантазии петонистов и растовиков оно никуда не денется.
В программировании народ ведётся на хайп, особенно молодые разработчики всё ещё ищут себе мамочку, которая будет помогать им кодить своими дурацкими советами и будет брать отвественность за ошибки на себя.
Без проектов на С - у вас не будет где и на чём собирать и запускать вашу гниль, вам до полностью своей экосистемы на гниле ещё миллионы человеко часов работы.
> и будет брать отвественность за ошибки на себя.Смысл программирование - решение задач, а не рассказывание окружающим, как ты взял на себя ответственность.
Если на расте задачи решаются лучше/быстрее, чем не на расте, значит лучше использовать раст, а не нераст.
>> и будет брать отвественность за ошибки на себя.
> Смысл программирование - решение задач, а не рассказывание окружающим, как ты взял
> на себя ответственность.В системном программировании какие задачи решаются?
Не решаются они быстрее на расте, он проигрывает всем в этом плане.
С одной стороны есть выкоуровневые языки где можно сосредоточится только на самой задаче без раздумий о деталях типа памяти или доступе при многопоточности.
С другой есть типа С где компилятор не путается под ногами со своими "очень ценными" "советами" как правильно писать, и не собирает часами хэлловорлд.
> Не решаются они быстрее на расте, он проигрывает всем в этом плане.Ты просто бессовестно лжешь. Ну или дремуче заблуждаешься.
Три месяца назад Ларс Бергстром (технический директор Google) на конференции заявил, что "Команды, работающие на Rust, в два раза продуктивнее команд, использующих C++".
Цитаты с той конференции, содранные уже с реддита:
"...Some additional context on these two specific claims:
Google found that porting Go to Rust "it takes about the same sized team about the same time to build it, so that's no loss of productivity" and "we do see some benefits from it, we see reduced memory usage [...] and we also see a decreased defect rate over time"
On re-writing C++ into Rust: "in every case, we've seen a decrease by more than 2x in the amount of effort required to both build the services written in Rust, as well as maintain and update those services. [...] C++ is very expensive for us to maintain."
..."Причем, как ты можешь заметить, не просто "решаются" в два раз быстрее на расте, но в том числе и "обслуживаются/сопровождаются" и "обновляются". И чтобы понятно было даже таким, как ты, ставят точку - "C++ is very expensive for us to maintain" ("C++ очень дорог для нас в обслуживании")
И это всё уже после кучки лет внедрения и использования раста.
А вы где у меня увидели ++?Кроме того не понятно что они там переписывают, какое оно по размеру.
Другой интересный вопрос в том, что они переписывают готовое и работающее, те там уже есть архитектура и эксперементы/исследования не нужны.
И вы когда переводите - хотя бы делайте это через гугло транслейт, потому что "усилия" это не тоже самое что и "время".
>А вы где у меня увидели ++?ты написал что раст проигрывает всем.
у тебя какие-то особенные "все" которые не включают С++ ?
> Как показала история, даже lingua franca тоже дохнут)
> Латынь весело машет ручкой из могилы, французский..Даже в русском языке много слов заимствовано из того и другого, а в европейских еще более. (В этом ответе слова из латыни есть)
То есть, lingua franca, хоть и не вечны, но вполне оставляют после себя следы.
>народ не хочет использовать дыряшку, кроме тех случаев когда деватся некуда.Для всякой задачи свой язык. Конкретно Си, это для системного программирования. Для GUI есть языки поудобнее, для скриптов тоже свои, и т.д.
То что, на Си можно написать что угодно, еще не делает его оптимальным для чего угодно.
>>посмотреть статистику новых проектов.Смешать веб-разработчиков и веб-маках, игровых скриптовиков, 1С, ну и системных с прикладными. ;)
Так получим общий анализ мочи, один на весь госпиталь. :)
Сравнивать нужно проекты одного класса и уже в них распростаненность языков.>>Надеюсь лет за пять-десять все разумные сишники переучатся, а остальных можно будет отправить мести улицы.
А какие альтернативы Си и С++, для контроллеров, высокопроизводительного ПО, и операционных систем?
Rust? Так он, помимо осбенностей работы с ним, тупо не готов, никакой популярной ОС общего назначения на нем не наблюдается.
Ресурсов Rust для работы ПО требует больше. Ещё, если для специфики задачи все равно требуется сборщик мусора, то великого смысла в Rust-безопастности уже нет. Скорее с системном ПО Rust будет только дополнением, для тех случаев где он уместнее.
Страшный с++.
Который вытеснил сишку практически из всех областей разработки, даже из embedded.
А сишка осталась только в легаси, и старых больших проектах, которые просто экономически нет смысла исправлять.
> А сишка осталась только в легасиВы мягко говоря неправы. Есть такое понятие, как целесообразность. В большинстве тех мест, где применяется Си (особенно встройка), ООП нафиг не нужно.
На плюсах тоже можно писать без ооп
> Есть такое понятие, как целесообразность.Именно. И вот целесообразности писать на сишке практически не осталось.
> ООП нафиг не нужно
C++ - мультипарадигменный язык. На нем можно и в процедурная стиле писать.
Зато пользоваться всеми аспектами, которые сейчас являются просто нормой для нормальных языков программирования.
Ну это кучка дешёвых понтов поверх ровной и любимой сишке
Си это база.
> Страшный с++.
> Который вытеснил сишку практически из всех областей разработки, даже из embedded.Да вот вся фирменная идиотия сей - на месте. Типа int хрензнает какого размера и прочих integer promition с совершенно отшиблеными правилами вида "попробуй угадать что сделает клмпилер".
Хотя при сильном желании на плюсах можно даже сделать подобие сабжа, конечно. На минималках даже из сишки немного можно. Только криво.
> Да вот вся фирменная идиотия сей - на месте.Да, к сожалению. Это цена поддержки обратной совместимости.
Но лучше хорошее + чуть сишной убогости, чем одна только убогость.> Хотя при сильном желании на плюсах можно даже сделать подобие сабжа, конечно. На минималках даже из сишки немного можно. Только криво.
Только это будут уже не плюсы и не сишка. А какой-то кадавр, над которым поиздевался хирург mad-doc.
> Типа int хрензнает какого размераТак это специально. Зависимый от железа int - самый быстрый.
И int фиксированного размера давно уже есть и в C, и в C++.
> И int фиксированного размера давно уже есть и в C, и в C++.Спасибо Капитан Очевидность! Вы дали фееричную лекцию - практикующему сишнику и немного плюсовику как раз.
К сожалению это все было сделано комитетом полудурков максимально через ж"пу.
1) В препроцессоре тоже есть вычисления. И конечно без нормальных типов данных, чтобы было не очень скучно. Забавно же когда все константы и предвычисления препроцессором - implementation defined?!
2) 1, 1U, 1UL и 1ULL это 4 довольно разные вещи... и сколько там де факто в граммах^W битах в том или ином случае окажется - довольно интересный вопрос.
3) Все это лезет в практически всех математических операциях, чтобы не было скучно, а с правил integer promition слетят с катушек даже ящеры с другой планеты, пожалуй.
4) До C23 (и C++ рядом) signed int overflow/underflow - махровейшее UB. Например потому что формат хранения signed int - ну, их несколько разных. В 23 это все же заманало и зафорсили two's complement. Но UB все равно формально не сняли. Бег по граблям с препятствиями.
5) А ваш код переживает -Wconversion без варнингов? Это такой миноискатель показывающий где вон те грабли (могли) быть.
6) Можно юзать signed int как индекс массивов. При том отрицательный индекс не то чтобы сильно редко случается в real world коде. С понятным результатом.
7) enum в сях да и плюсах довольно бесполезная хрень, даже если что-то typedef'нуть в него - это никак не энфорсится и не проверяется. Даже когда можно было.
8) Аннотации типа foo(array[10]) просто отбрасывают аннотацию [10] и вот так сразу - никто ничего не проверяет.
9) Бывают всякие builtin типа add_overflow, но они нестандартные.Очень сильно сбоку - на сях и особенно плюсах можно немного абстрагировать некоторые вещи, но вообще-то так должно было быть по дефолту. И в хрусте смогли по крайней мере нормальные типы данных, когда не надо гадать сколько битов реально вот тут было - и нагнется ли такая математика - и если да то как именно это будет.
юзер234, ты от девопс экспертизы перешел на кодинг? хоспате, пощади.
> юзер234, ты от девопс экспертизы перешел на кодинг? хоспате, пощади.Я умел програмить чуть менее чем всегда. Так что уж прости, лаптэ. А по делу сказать нечего? Грабли сишки я получше вашего обпрыгал. И почему-то не горю желанием прыгать по граблям до гроба.
Вы плохо практикующий, потому что:
- С это не язык по какой то там спеке, это язык про железо, поэтому какойнить int не зазорно быть аппаратно зависимым типом
- достаточно пару раз наступить на грабли чтобы запомнить и больше не наступать, это называется обучаемость
- про енумы - в сях вообще ничего не энфорсится, потому что это не язык БДСМщиков
- отрицательные индексы для массивов тоже возможны, иногда так задумано, хотя я не разделяю таких методов
> Вы плохо практикующий, потому что:Хотите об этом поговорить? Окей, "пошло веселье!" (c) джеди.
> - С это не язык по какой то там спеке, это язык
> про железо, поэтому какойнить int не зазорно быть аппаратно зависимым типомВообще-то в случае железа - я как раз хочу железобетонно знать именно конкретный размер операции, а желательно еще и понимать атомарность "от и до". Не угадать с размером операции чревато, ибо регистры железа вполне конкретного размера и большой вопрос что будет если промазать с этим, "depends". А факап с атомарным доступом ведет к глюкам раз в год, которые вообще хрен отдебажишь (впрочем на сравнимые грабли можно и с многопоточностью встать).
> - достаточно пару раз наступить на грабли чтобы запомнить и больше не
> наступать, это называется обучаемостьСудя по числу вулнов, сбоев и прочих факапов математики которые я в таком коде "от дидов" конопатил, с этим были, есть и будут проблемы. Если грабли не раскладывать - не придется прокачивать скилл в бинтовании лбов. Ну вот реально - нафиг надо тратить время на борьбу с проблемой которой быть не должно с самого начала. И да, если бы стандарт делал я, я бы переделал работу с integer'ами до конкретных размеров, как в хрусте, по всей площади. И в препроцессоре, и в математике, и в константах, и проч. С более другими правилами.
> - про енумы - в сях вообще ничего не энфорсится, потому что это не язык БДСМщиков
БДСМ это как раз пытаться поймать баг где по ошибке вкатили левое значение - например опечатавшись. И enum мог бы заметить что ну вот явный левак дали. Ан нет. Чисто декоративная хреновина, существующая неизвестно зачем. Почтальон печкин: задекларить намерения кодера можно, но это никого ни к чему не обязывает.
Более того - даже тип к которому enum будет де-факто приведен и грабли на этом пути это очень сильно отдельный топик. И самое печальное что там нет хорошего, простого, однозначного ответа "а что это на самом деле будет". Это хреновый стандарт, вот хоть как.
> - отрицательные индексы для массивов тоже возможны, иногда так задумано, хотя я
> не разделяю таких методовНа мой вкус именно в массивы это не должно катить. То что это де факто decays to pointer - окей, одна из причин по которым в сях проблемы с статическим анализом. А падающая в рантайме фирвара, бутлоадер или ядро - немного не то чего мы хотели от системщины, уж пардон.
Про енум согласен.В остальном ещё раз подумайте и поймите, что это язык для работы с железом на низком уровне прежде всего, а уже потом всё остальное.
Поэтому инты - это любая хрень со знаком размером с регистр проца, а если надо что то конкретного размера то отдельно завезли uintXX_t, intXX_t и прочее.
Про оверфлоу при вычислении примерно так же: обычно на это пофиг, потому что системный код простой и примитивный, там и так понятно что до MAX_INT оно никогда до досчитает, потому проверками никто не заморачивается, ради скорости и простоты.
То что ими не заморачиваются там где рассчёты и где оно может случится - это отдельная история.Ну и раз вы хотите быть уверенны во всём, вы же должны понимать что ваш код просто обязан работать только на платформах где память с ECC, иначе никакой гарантии того что вы записали 22 и прочитаете 22 просто нет.
> Про енум согласен.Да там не только в нем проблема. Но enum - просто такой характерный пример когда вроде ну все сделали - и зачем-то пролюбили пойнт сделаного. А зачем делали тогда? Чисто для галочки что, вот, фича есть?
> В остальном ещё раз подумайте и поймите, что это язык для работы
> с железом на низком уровне прежде всего, а уже потом всё остальное.Я по моему очень понятно обрисовал что я на самом деле хочу при вот именно работе с железом. А вот что я совершенно точно при этом не хочу - дурацкие првила integer promotion, UB и тому подобное веселье. Ибо железо так то разное бывает. Как тебе сбой в фирваре крутящей вон тот двигун? Или рулящей вон тем опасным процессом? Ну очень круто, да? И в этом месте последнее что я хочу видеть - это "size_t" хрен знает какого рамера, непонятки "что будет если?" и тому подобные вещи, типа игнора аннотации вида array[10] до "decays to pointer" и даже очевидный out of bounds - не ловится сколь-нибудь регламентировано и штатно.
> Поэтому инты - это любая хрень со знаком размером с регистр проца,
> а если надо что то конкретного размера то отдельно завезли uintXX_t, intXX_t и прочее.Как я уже сказал, полудурков из ISO не хватило чтобы сделать это нормально. Поэтому в препроцессоре, константах, enum и прочем integer promotion можно знатно попрыгать по граблищам, которым к тому же топор на рукоять одели для лулзов.
Да, даже просто написать "+ 1" может сделать немного не то что програмер подразумевал, очень контринтуитивно запромотив тип. Enum'а это тоже касается. И булеаны появились в том числе и поэтому. А чтоб вы не скучали - в C23 их вынесли, #include <trollface.h> однако :)
> Про оверфлоу при вычислении примерно так же: обычно на это пофиг, потому
> что системный код простой и примитивный, там и так понятно что
> до MAX_INT оно никогда до досчитает,Ага, вон там господа тоже так думали. В результате код разбора пакета вон там радостно делает отрицательный индекс, условие вообще не срабатывает граблина очень долго шарахается по левой памяти. Все как диды любят! Ну, подумаешь, ремотным пакетом по воздуху можно системе череп прострелить, никого не спрашивая, мелочи какие.
> ради скорости и простоты.
Я думаю что по состоянию на сейчас пора пересмотреть эту практику и явно аннотировать критичный к перфомансу код как таковой. Иначе - получается фигня как выше, и это очень сомнительная услуга человечеству. Да и большую часть проверок компилер так то может выпилить оптимизером - на самом деле там прувер мама не горюй у современных компилеров, он это для оптимизаций делает, но вон там - Торвальдс крыл gcc за удаленные проверки null, где с этим в компилере малость перестарались даже :)
> То что ими не заморачиваются там где рассчёты и где оно может
> случится - это отдельная история.Меня как-то напрягает что вон той системке можно радиопакетом череп вынести просто подогнав значения чтобы алго посчитало не то что там себе диды вообразили, сорян. Так быть не должно.
> Ну и раз вы хотите быть уверенны во всём, вы же должны
> понимать что ваш код просто обязан работать только на платформах где
> память с ECC, иначе никакой гарантии того что вы записали 22
> и прочитаете 22 просто нет.FYI у микроконтроллеров бывает и оператива с parity/ECC, и флеха с ней же. И на десктопе у меня таки тоже ECC. А вы можете глюкать и прыгать по граблям если хотите. И файлуху без чексум можно юзать.
>> Типа int хрензнает какого размера
> Так это специально. Зависимый от железа int - самый быстрый.Поэтому взяв допустим ардуину, и вкатив там ключом компилера вот именно 16-битный int (да, так на 8 бит платформе будет куда быстрее) - можно будет быстренько узнать почем сегодня фунт лиха.
С одной стороны это - абсолютно по стандарту. С другой - 95% кода на этом глобусе, разумеется, не ожидает столь фееричной подляны. Кто ж эти ваши стандарты еще и читает то, от и до?!
И в результате это не только самый быстрый - но и самый грабледром.
Если вы не в курсе, то часто реально пофиг какого там размера этот самый int, потому что его пихают чтобы посчитать от 0 до 10.
> Если вы не в курсе, то часто реально пофиг какого там размера
> этот самый int, потому что его пихают чтобы посчитать от 0 до 10.Зато в случае когда там было поболее чем 10 - становится очень сильно не пофиг. Когда код глючит, разваливается, непортабельный, а помахав стандартом - забыли с ним комплайнс обеспечить. А зачем тогда стандарт был, блин? И зачем он написан как написан?
А в случае всяких там индексов и чего там еще - самое то, в паре с integer promition, чтобы прострелить себе череп с заподвыподвертом, в прыжке, держа пистолет левой ногой. Даже не заметив этого, ибо -Wconversion какой - это таки хардкор и далеко не каждый рискнет сие вкатить на свой код.
Насколько по более?)
Я везде у себя юзаю size_t для размеров и индексов, но та же луа почти целиком на int и ничего.
Более того там и отрицательные значения для индексов используются активно и это нигде не мешает.И не забывайте что С был для работы с реальным железом, очень разным, а не для какой то там спеки, потому некоторые типы были машинозависимые.
По сути это такой удобный асм, а не то что вы там себе придумали.
> Насколько по более?)Ага, вы кажется начинаете о чем-то догадываться. Большая часть кода на этом глобусе железно уверено что в int лезет что-то уровня 2^31-1. И вон там, в примере с авркой, если мы еще и удумаем реально поюзать даденое стандартом право сделать платформе удобно, вкатив int сподручный ей, 16 битов, ибо по стандарту так можно было - мы гуано откушаем на большей части кода.
> Я везде у себя юзаю size_t для размеров и индексов, но та
> же луа почти целиком на int и ничего.Угу, теперь попробуй фирмварь так написать. А потом перенести скажем работу с конкретной железкой на пару других платформ. А допустим в лине - драйверы цепляют свои железки - на довольно разном cpu core, и если они будут на такие вещи уповать.... Ну вот нет, от того что линух работал только на i386 торвальц ушел, и почему портабельность хорошо - понял. На память об этом у нас 1 набор дров под разные платформы работает. Ведь скопипастить IP-блок можно к любому процессорному ядру, равно как и PCI какой к нему пристроить, etc.
> Более того там и отрицательные значения для индексов используются активно и это
> нигде не мешает.Угу, кроме вон тех колоритных вулнов - которые можно было ремотно триггернуть, по радио интерфейсу, воон там. Так что от магического пакетика вся фирмварь уходила в кому, ежели его правильно подогнать. А так то все зашибись прекрасная маркиза. Хорошо быть с стороны пуляющей такой пакетик, но не очень круто - со стороны получающей его.
> И не забывайте что С был для работы с реальным железом, очень разным,
И я работаю с реальным железом побольше вашего, достаточно для того чтобы не нести ересь про size_t который так то как раз об обратном. Не, при работе с вот именно железом вы совершенно точно не хотите никакое size_t, да и при работе с сетевыми протоколами или форматами файлов вы тоже ему будете зело не рады, ибо хрен его знает когда это развалится.
> а не для какой то там спеки, потому некоторые типы были машинозависимые.
Угу, и в результате получился масс-глюкодром. Который разгребать еще праправнуки будут.
> По сути это такой удобный асм, а не то что вы там себе придумали.
Для асма тем более непростительно то что оно с типами и integer promition вытворяет. Впрочем это даже и в апликушных вещах может все нагнуть при желании пульнуть что-то по сети или прочитать файл одинаково на разных платформах.
Большая часть кода с int которую я видел за последнее время (lua, return error code в линухе/бсд) легко могла бы уложится в 16 бит, а может даже и 8.
size_t - это для размера куска памяти на конкретной архитектуре где собран код.
В форматы его понятное дело не пихают ибо получится плохо переносимо.
Но тот же memset(), memcpy(), strlen() - это уже давно с size_t, везде.В асме код тоже далеко не всегда с проверками переполнения, потому что очевидно часто оно не случится никогда.
> Большая часть кода с int которую я видел за последнее время (lua,
> return error code в линухе/бсд) легко могла бы уложится в 16
> бит, а может даже и 8.Проблема в том что "меньшей" части вполне хватит чтобы огрести дохрена неочевидных багов. Реально кода который compliant с столь дурацким стандартом - не больно дофига.
> size_t - это для размера куска памяти на конкретной архитектуре где собран код.
Опять же - если мы например с хардварным регистром размером 32 бита работаем, этот IP блок uncore, внезапно, могли пришить к совершенно разным cpu core. А идея скопипастить обвес uncore - ну вот вообще ничему не противоречит. И потом - и с дравером ЭТО ЖЕ сделать, чем какие-нибудь линуксоиды хуже VHDLщиков всяких? Они о вон том - догадываются.
...и в этом месте мы начнем догадываться, что для вот именно работы с железом size_t как раз таки вообще совсем не оно. У железок бывают вполне конкретные требования по размеру доступа за раз, выраваниванию и проч. А если попробовать что-то иное - грабля по морде даст так что мало не покажется. А оно может тупо не уметь иные варианты доступов в тот регион, для упрощения и ускорения железа, например.
> В форматы его понятное дело не пихают ибо получится плохо переносимо.
> Но тот же memset(), memcpy(), strlen() - это уже давно с size_t, везде.И за это тоже воздается глупыми багами на ровном месте...
> В асме код тоже далеко не всегда с проверками переполнения, потому что
> очевидно часто оно не случится никогда.Есть довольно большая разница между доказуемыми вещами, и "наобум напрогали так". В коде от дидов много второго. И на краевых условиях это добро сыпется только в путь. И вот ЭТО как раз несколько заманало.
Так чувак, а ты чего до сих пор сидишь на легаси линуксе/бсд/мак/венде!?
Они же на С написаны, да ещё с вообще не человеческим асмом который ты не вкуриваешь!?Давай, где там твой рустОС, руст-компилер и прочая?
А руст браузер у тебя есть чтобы сюда писать?
Боже, ну хватит показывать свое некомпетентность...> Они же на С написаны
Ты утекшие исходники винды смотрел? Сколько там отвратительной сишки и сколько прекрасных плюсов, а?
Вот, то-то же! На сишке осталось легаси омно, до которого просто не доходят руки переписать.> Давай, где там твой рустОС, руст-компилер и прочая?
рустОС - redox os
руст-компилер - cranelift
в ФФ - есть раст и куча с++. Дыряшка там тоже осталась, но эту гниль старательно заменяют на нормальные языки вроде с++.У тебя даже гцц продолжили писать на с++, а не на дыряшке. Потому что она настолько убогая, то пришлось переходить на плюсы. И ллвм написан на плюсах. А на си написаны только какие-то недокомпиляторы.
Утекшие исходники были где то от 2к венды, тамошние плюсы от С мало чем отличались :)
Внутрь я не смотрел, полагаю на крестах был гуй и некоторые службы.
Где то с висты дрова стало можно писать на крестах, но что там внутри ОС я хз.
> в ФФ - есть раст и куча с++. Дыряшка там тоже осталась, но эту гниль старательно заменяют на нормальные языки вроде с++.ФФ - сколько там того раста? хотя бы треть есть?
И чтобы вы знали, RUST как раз и переводится как гниль, один из вариантов :)
> Утекшие исходники были где то от 2к венды, тамошние плюсы от С
> мало чем отличались :)
> Внутрь я не смотрел, полагаю на крестах был гуй и некоторые службы.Там нет ни Си, ни плюсов. В ядре куча Паскаль-кода с венгерской нотацией, записанная странным диалектом Си, потому что другого у Микрософт и не было. Если не придираться к непривычногому синтаксису, то назвать тот код овном - это надо быть очень смелым анонимным гением. На то время передовые технологии, ОО в полный рост, спроектированное создателями DEC VMS. Где-то, вероятно, было и "Си с классами", собираемое как плюсы (но это к Юзер234 вопрос, из какого чатика он инфу сюда скопировал).
> Обеспечено автоматическое продление времени жизни временных значений, которые используются в конструкциях "match" и "if".вот и завезли сборщик мусора, теперь ржависты со своим наречием стали совсем ненужны
В таком смысле он там всегда был. Но этот "сборщик мусора", в отличие от других языков, работает предсказуемо и без дополнительных накладных расходов, то есть на этапе компиляции.
> вот и завезли сборщик мусора, теперь ржависты со своим наречием стали совсем ненужныЕсли так рассуждать - то даже в си есть автоматическое управление памятью, ежели аллокации на стеке. И проблемы с ним там - довольно характерные, угумс. А самое прикольное что это не стандартизировано и implementation detail вообще.
И да, на этом можно налететь, если это делать глупо. А "gc" вообще хардваром подперт. Вот только оно поэтому просто и быстро в отличие от неведомой зверушки с непредсказуемой фоновой активностью и хрен его знает каким временем лага - так что про вон то, которое критикал, можно совершенно точно забыть. А как вы реалтайм гарантии будете с таким инструментом давать? Никак? Ну вот то-то и оно.
Это то же самое, что очищение локальных переменных в конце функции, там нет stop the world
Предлагаю вспомнить методы формальной логики.
Раст вышел из мозиллы->мозилла~4%->в соседней веточке, в теме популярности ЯП'ов раста не видать в топах.
....
Раст - это про пиар.
>Раст - это про пиарРаст - это про "собаки лают, а караван идет"
Но если не раст то что? Если есть энергия что-то пиарить надо перекоючит пиар на что-то другое. Но этого другого нет. Раньше часто пиарили Хаскель. Но всё перебил раст, хотя он во всем хуже Хаскеля.
Про Хаскель в точку!
А почему бы не пиарить фундаментальное образование? С годными знаниями математики оно и с указателями попроще будет. Да и вообще айсикью постабильнее от изучения точных наук. Лучшая профилактика старика Альцгеймера и прочих деменций!
да кому нужны умные люди?
нужны гребцы на ржавые галеры )
Сэд бат труЪ.
Ну ничего,давеча с Клодом пообщался плодотворно. Сложилось стойкое впечатление, что АГИ не за горами. Маск явно что-то знает.
И кому будут нцжны эти проржавевшие байдарочники?!
> да кому нужны умные люди?А где их взять? И вообще они когда-то были
Вон самые Ылитные пограммеры на СИшке выдавливают из себя такой код, что просто страшно становится.
Подумаешь не осилили split строки
А ведь это Glibc, казалось должна быть надежной! opennet.ru/opennews/art.shtml?num=59867И такой кал они выдавали даже 30+ лет назад.
"Уязвимости в библиотеках X.Org, две из которых присутствуют с 1988 года "
opennet.ru/opennews/art.shtml?num=59906
Тут пол опеннета наверное младше той дырени.> нужны гребцы на ржавые галеры )
Кто хочет идет на галеру, это его право.
Кто не хочет - может пились самостоятельно что хочет.
Тут вопрос в том, что за опенсорс отвечают как раз владельцы галер)
>И такой кал они выдавали даже 30+ лет назад."Уязвимости в библиотеках X.Org, две из которых присутствуют с 1988 года "
Как здесь уже говорили, возможно даже Вы: найс пунш.
Но не то. Ксорг не является релевантным примером. Ибо насколько я помню, первоначально пилился под клиент серверную архитектуру для обеспечения работу терминалов мейнфреймов. Своего рода тонкий клиент.
Дальше всем было лень сделать полноценный рефакторинг под новую задачу, стали набрасывть как водится сверху. И заверте...Собсно и 30+ лет назад были двоечники, от этого никто и не открещивается. Но в общей массе их было поменьше. Да и уровень тогдашнего лузера легко дотягивает до сегодняшнего крепкого хорошиста. Легко. По моим субьективным наблюдениям.
> Но не то. Ксорг не является релевантным примером. Ибо насколько я помню, первоначально пилился под клиент серверную архитектуру для обеспечения работу терминалов мейнфреймов. Своего рода тонкий клиент.Но который писали вроде не глупые пограммисты.
Или там были сплошные двоечники сбежавшие из ПТУ?> Дальше всем было лень сделать полноценный рефакторинг под новую задачу, стали набрасывть как водится сверху. И заверте...
Напоминает историю ядра)
> Собсно и 30+ лет назад были двоечники, от этого никто и не открещивается. Но в общей массе их было поменьше.
Я видел как тогдашние отличники заряжали воду от телевизора и тащили денежки в МММ.
У них вообще нет ни понимания "причина следствие", просто феноминальный инфантилизм, зато просто феноминальное ЧСВ и уверенность в качестве своего образования.
Последствие этого мы пожинаем до сих пор(> Да и уровень тогдашнего лузера легко дотягивает до сегодняшнего крепкого хорошиста. Легко.
Звучит как красивая сказка.
Ну или ты просто учился в гимназии, где минимум был на уровне или даже выше среднячка для общеобразовательных школ> По моим субьективным наблюдениям.
Субъективные наблюдения не могут быть объективной метрикой.
Думаю ты тут спорить не будешь)
>Но который писали вроде не глупые пограммисты.Или там были сплошные двоечники сбежавшие из ПТУ?
Писали для удаленного руления. В ту пору ПК еще не были повсеместно.
В ту пору, как и любую другую, коллектив всегда разношерстный. Одни качества группы индивидов дополняются иными качествами другой группы. Все как всегда. Вопрос что есть двоечник тогда, и он же сейчас...>Напоминает историю ядра)
Вай нот!?
Дык может запилить свое с 0. На том же расте... учитывая все косяки дедов.
Где уже новые Торвальдсы?!>Я видел как тогдашние отличники заряжали воду от телевизора и тащили денежки в МММ.
Вы будете удивлены, но основатель МММ, царствие ему небесное, был очень образованным человеком. Посмотрите его альма-матер. С точными науками дрцжил оч хорошо.
Не стоит путать образованность, наивность и инфантилизм.
Порой это даже взаимоисключающие параграфы.>Последствие этого мы пожинаем до сих пор(
Пожинать будем и дальше. Стагнация 70х - детский лепет в сравнении с фундаментом, заложенным в 90е и омг сытые нулевые. Ягодки уже собирают.
Наивность большинства образованных людей тех лет зижделось на красном воспитании. Когда лгать, красть и творить прочее непотребство порицалось и считалось постыдным. Человек человеку был товарищ и брат. Не все быстро сориентировались. Сергей Пантелеевич сориентировался в изменяющемся мире. А некоторые так и остались верны принципам.
Инфантилизм же зиждется на постулатах рыночной экономики. Я, мое, мне. Человек человеку волк. Я заберу свое и мне безразличны последствия. Ограниченность эгоцентричного сознания.
В общем сравниваете несравнимое. Специфика разных эпох.>Ну или ты просто учился в гимназии,
Ну что Вы, куда мне, простому колхознику!
>Субъективные наблюдения не могут быть объективной метрикой.
Думаю ты тут спорить не будешь)
Не буду. Просто в общении с людьми заметно.
А обьективной метрикой в данном случае может выступать компаративистика конечного продукта в исторической ретроспективе. Думаю не будете спорить.
> В ту пору, как и любую другую, коллектив всегда разношерстный. Одни качества группы индивидов дополняются иными качествами другой группы. Все как всегда. Вопрос что есть двоечник тогда, и он же сейчас...Сейчас современные школьники осваивают программинг бытирее чем я в свое время.
Я понимаю что возможностей у них реально больше, чем у меня (в школе алгоритмы на доске расписывали), но факт есть факт.> Вай нот!?
> Дык может запилить свое с 0. На том же расте... учитывая все косяки дедов.
> Где уже новые Торвальдсы?!Возможно вот он "проект по разработке на языке Rust легковесного Unix-подобного ядра, реализующего подмножество системных вызовов ядра Linux,"
"На текущем этапе развития в Maestro реализован 31% (135 из 437) системных вызовов Linux, чего достаточно для загрузки консольного окружения на базе bash и стандартной Си-библиотеки Musl. "
opennet.ru/opennews/art.shtml?num=60391> Вы будете удивлены, но основатель МММ, царствие ему небесное, был очень образованным человеком. Посмотрите его альма-матер. С точными науками дрцжил оч хорошо.
> Не стоит путать образованность, наивность и инфантилизм. Порой это даже взаимоисключающие параграфы.То что основать ИММ, земля ему стекловатой, был образованным это факт.
А вот экономическое образование тысяч его "клиентов" явно хромало.
Возможно в те временя такого урока вообще не было, в отличии от истории кпсс.> Наивность большинства образованных людей тех лет зижделось на красном воспитании. Когда
> лгать, красть и творить прочее непотребство порицалось и считалось постыдным.Хахаха, я давно так не смеялся.
Давай вспомним пословицы про "завод и гвоздь", проблемы с несунами, куча антиалкогольных кампаний, номенклатуру которая построила для себя магазины березка, необходимость покупать простые вещи из-под полы, чудовищную ложь про войну, разговоры только для кухонь и тд...
Да все эти непотребства порицались публично, а народ вел себя совсем по другому.> Человек человеку был товарищ и брат.
Ага, вроде брат, но танками в случае чего давили.
> Инфантилизм же зиждется на постулатах рыночной экономики. Я, мое, мне. Человек человеку
> волк. Я заберу свое и мне безразличны последствия. Ограниченность эгоцентричного сознания.Странно, я думал инфантилизм это "мы люди маленькие мы ничего не решаем", "там на верху виднее", "ну надо отправить сыночку в горы помирать, ну так чтож поделать", "по конституции недра принадлежат государству, значит газ и эл-во должны быть бесплатным"
А про "я заберу твое" раскажи это тем кого убили при создании колхозов. Или заморили голодом в поволжье, продавая зерно за бугор.> А обьективной метрикой в данном случае может выступать компаративистика конечного продукта в исторической ретроспективе. Думаю не будете спорить.
Да, поэтому я смотрю на то как раст входит и в ядро, и другние проекты.
Простой объективный факт.
>Сейчас современные школьники осваивают программинг бытирее чем я в свое время.Я понимаю что возможностей у них реально больше, чем у меня (в школе алгоритмы на доске расписывали), но факт есть факт.
Вам повезло! Вы алгоритмы расписывали. Это куда интереснее погроммирования мышкой.
Но сдается мне, что скоро и в погроммировании мышкой не будет нужды. Клод ии уже хорошо умеет. Пройдет лет 5, как Маск говорит...>Возможно вот он "проект по разработке на языке Rust легковесного Unix-подобного ядра, реализующего подмножество системных вызовов ядра Linux,"
И вот опять: ..системных вызовов линукс. Ну пусть хоть так! Ждем прод потыкать.
>А вот экономическое образование тысяч его "клиентов" явно хромало
Разве сам Сергей Понтелеевич имел экономическое образование?!
> земля ему стекловатой
Зачем Вы так? Кругом и так много зла.
>Хахаха, я давно так не смеялся.
Безусловно было и то, о чем писали Вы. Всякое было. Особенно после 70х. Вместе с тем фундамент воспитания определенных черт в массах не меняется быстро. На это ушли десятилетия.
Было и то о и другое.>Ага, вроде брат, но танками в случае чего давили.
Восставших супротив общей идеи. Как фактор любой государственности. Монополия на насилие, вот это все.
>Странно, я думал инфантилизм это "мы люди маленькие мы ничего не решаем",
https://www.forbes.ru/forbeslife/486431-koren-infantilizma-p...Инфантилизм%20или%20инфантильность%20—%20это%20состояние,конфликтов,%20эгоцентричный%20взгляд%20на%20мир.
Собственно нежелание брать ответственность - суть есть проявление эгоцентризма, пришедшего с моделью рынка.
>"по конституции недра принадлежат государству, значит газ и эл-во должны быть бесплатным"
А про "я заберу твое" раскажи это тем кого убили при создании колхозов. Или заморили голодом в поволжье, продавая зерно за бугор.
Забористая у Вас!
Вроде народу принадлежало по конституции. Если Вы о той конституции.
К слову в структуре дохода нефтяная игла стала прослеживаться в позднем совке.
Про "заберу твое" ака коллективизация и прочие кулаки, да период становления. Из неоткуда ресурс не берется. В ту пору народ был малограмотен, повсеместное образование бесплатное появилось позже, в том числе за счет этого базиса. Распределенного на начальном этапе и не разворованного, а преумноженного.
Не говорю, что это хорошие методы, но справедливости ради, шло оно на дело, а не в оффшоры. Думаю Вы не станете с этим спорить.>Да, поэтому я смотрю на то как раст входит и в ядро, и другние проекты.
Простой объективный факт.
Остается дождаться пощупать. Потом посчитать и проекты, и cve.
Пока только надстройки над уже существующим. Не считая мелких проектов.
Но гонору то, пиару...
> Вам повезло! Вы алгоритмы расписывали. Это куда интереснее погроммирования мышкой.А типа мышкой нельзя программровать?
Когда я вижу ребенка который в шесть-семь лет что-то ваяет в скретче, мне становится слегка завидно.
Т.к я в его годы крапиву палкой махал и по гаражам лазил.Хотя есть и визуальное программирование для взрослых, например тот же Дракон, который даже в космос слетал. Или Simulink с помощью которого в матлабе можно было довольно многое сделать.
> И вот опять: ..системных вызовов линукс. Ну пусть хоть так! Ждем прод потыкать.
Да, тк совместимость приложение это необходимость.
Иначе придется пилить не только систему, но и все пользовательские приложения.> Зачем Вы так? Кругом и так много зла.
Значит если его и станет больше, то не на много.
Я не религиозный, но разве даже по христианству обманывать такое кол-во людей не грех? С логичным попаданем в ад или чистилище?> Безусловно было и то, о чем писали Вы. Всякое было. Особенно после 70х. Вместе с тем фундамент воспитания определенных черт в массах не меняется быстро. На это ушли десятилетия.
А до 70х была послевоенная разруха и долгое востановление.
Я не настолько стар чтобы застать те времена, но бабушка расказывалоа как в 49м от голода жевали смолу, охотились на крыс и пол села померло.
Естественно после такого любые 60е были просто как рай.
Но хорошим это назвать я не могу.> Восставших супротив общей идеи. Как фактор любой государственности. Монополия на насилие, вот это все.
Особенно если сначала их оккупировали под благовидным предлогом)
> https://www.forbes.ru/forbeslife/486431-koren-infantilizma-p...Инфантилизм%20или%20инфантильность%20—%20это%20состояние,конфликтов,%20эгоцентричный%20взгляд%20на%20мир.
Хорошоая статья, спасибо что подтведили мои тезисы.
1. "Импульсивные действия, отсутствие размышлений о последствиях" - типичный весь мир в труху.
2. "Неспособность взять на себя ответственность: отчаянные попытки избежать столкновения с ответственностью за свою жизнь и выбор, неспособность либо колоссальные трудности даже с самым простым выбором, обвинения других в своих проблемах. Постоянные оправдания за свое поведение вместо того, чтобы признать свои ошибки и исправить их."
То англичанка гадит, то массонская ложа.
С выбором правда не везде были трудности, тк часто выбора то не было.
Есть галоши фабрики большевичка, хошъ бери, хошъ не бери.> Собственно нежелание брать ответственность - суть есть проявление эгоцентризма, пришедшего с моделью рынка.
Странно в Союзе я рынка не помню (ну кроме того где продавали курей и капусту), а вот нежелание брать на себя ответственность видел практически везде от школы до уже работы.
"Начальник умный пусть решает", "Тебе что больше все надо?", "Не высовывайсся, просто промолчи" и тд
Это касалось и выборов, и даже голосования в садовых товариществах.> Про "заберу твое" ака коллективизация и прочие кулаки, да период становления. Из неоткуда ресурс не берется. В ту пору народ был малограмотен, повсеместное образование бесплатное появилось позже, в том числе за счет этого базиса.
А т.е убить и украсть в начале это хорошо, а вот потом это плохо?
Какая-то готтентотская мораль получается.> Распределенного на начальном этапе и не разворованного, а преумноженного.
Угу, так хорошо преумножили, что страну развалили.
Просто у наворованного изначально, а потом построенного силами рабов хватило прочности лет на 50-70.
А потом нежизнеспособная махина рухнула под собственным весом.> Не говорю, что это хорошие методы, но справедливости ради, шло оно на дело, а не в оффшоры. Думаю Вы не станете с этим спорить.
Ну ничего нменклатура за нефтедоллары и чеки себе позволяла то, что простому работяге и в сладких снах не снилось.
Но да, это не оффшоры, это главное. Так дачка в болгарии и икорка красная.
>Т.к я в его годы крапиву палкой махал и по гаражам лазил.Не поверите, я тоже. И омг я счастлив!
Счастлив от того, что познал мир таким, каков он есть. Речь о мире настоящем.
Счастлив и от того, что открываю этот мир и своим детям.>А типа мышкой нельзя программровать?
А типа что там мышкой напограммтровали? Даже если пресловутую вебню взять. Помню потыкал палкой викс, или как оно там. Тыкал мышкой я дольше, чем руками правил. Просто по фану.
И да, не будем путать среды моделирования с погроммированием. Это про симулинк иже с ними.>Иначе придется пилить не только систему, но и все пользовательские приложения.
Оу май! Но так чуть больше чем все эти пользовательские приложения внезапно на столь нелюбимых Вами сях.
Стей хард! Будьте последовательны в своих начинаниях. Выбросить, так везде! Тем более если уж на то пошло, в каком-нить офисном приложении для раста вполне нашлось бы место.>но разве даже по христианству обманывать такое кол-во людей не грех? С логичным попаданем в ад или чистилище?
По-христианству: не судите, да не судимы будете, ибо какой мерой меряете, такой и вам отмерено будет.
За свои грехи он ответил сам.
>А до 70х была послевоенная разруха и долгое востановление.
>бабушка расказывалоа как в 49м от голода жевали смолу, охотились на крыс и пол села померло.Здесь речь о том какой рывок был сделан за 30 лет. Можно даже сравнить с тем, что за крайние 30 было сделано. И это без мировой войны...
Да, было жестко, ктож спорит то. Но от сози до ядреной бомбы прошли. И народ крепкий был, что физически, что ментально.>Особенно если сначала их оккупировали под благовидным предлогом)
Как буд-то в благословенных странах не так. Суть зело византийская система управления. Сильный пожирает слабых и за счет этого выживает. Разница лишь в степени обратных инвестиций.
Почитайте интервью тех же пуштунов. С их слов: вот совок да, воевал, но приходил и строил школы, дороги...американцы пришли, разгромили, перенаправили потоки веществ нехороших и набивают карман. Вот и разница.Вы статью как-то странно прочитали. Попробуйте пожалуйста еще раз. Там ведь даже написано все то, о чем я говорил. Обратите внимание на эгоцентризм.
Тогда получите ответы и увидите свой комментарий в новом свете.
Что послужило драйвером развития повального эгоцентризма?>Странно в Союзе я рынка не помню (ну кроме того где продавали курей и капусту), а вот нежелание брать на себя ответственность видел практически везде от школы до уже работы.
Странно, а я помню другой союз.
Помню как решил в детстве понтануться и пройти с сигаретой мимо дома девчули, которая мне нра. Дык старшие товарищи завидев такое, просто отвесили мне леща и за ухо отвели к родителям.
Еще как-то неосторожно с другом шли и матерились, точно так же за ухо отправились к родителям.
Люди брали на себя ответственность.
Стоит ли мне говорить о том, что происходит сейчас в тех же вопросах. Думаю все и так видят.>А т.е убить и украсть в начале это хорошо, а вот потом это плохо?
Нет. Я там писал далее, что не одобряю этих методов. Но факты ечть факты.
Далее было практически тоже самое, просто более цивилизованными методами.>Угу, так хорошо преумножили, что страну развалили.
Лихо Вы так 7 десятилетий прокинули.
По сути, по моему мнению, ссср - это страна Сталина. Все что после, двигались по инерции его задела. Задел закончился, все рухнуло.
Я не говорю хорош он или плох. Это история, это было и это никуда не денешь. Красным я не являюсь. Но всегда стараюсь обьективно смотреть на вещи. Красным богоборчества лично я забыть не могу.>Так дачка в болгарии и икорка красная.
Помню трехлитровые банки черной икры из Астрахани, которые по малолетней глупости я не хотел есть. И да, родители были бюджетники. Не номенклатура, о которой Вы пишите.
Сталин да, имел гос дачи. Пил грог. Но, в одном кителе пару десятилетий проходил, в нем и схоронили.
Возможно ли как-то оценить количество генерируемого кала тогда и сейчас ?
Особенно если взять в учёт что сегодняшние "профессионалы на безопасных языках" продолжают сотрясать воздух в то время как серьёзные вещи продолжают создаваться на языках 40+ летней давности
>серьёзные вещи продолжают создаваться на языках 40+ летней давностиА слабо почитать статьи на этом ресурсе? Или настоящий тутошний эксперт - не читатель?
Уже тучу раз приводились примеры и Гугла, и Майкрософт, и Клаудфлэр, но Воины Супротив Раста продолжают, как дятлы, долбить одну и ту же тему про серьёзные вещи и морально устаревший хлам, несмотря на то, что примеров серьезных приложений на Расте уже хватает.
И сколько там раста у микрософта?
Особенно в его кормящих продуктах типа венды и оффиса.
Это к чему вопрос был? Говорили о наличие Rust в серьезных приложениях, вроде. Теперь на тему о количестве кода внезапно перескочили.
> И сколько там раста у микрософта?
> Особенно в его кормящих продуктах типа венды и оффиса.Майки помнится недавно нанимали - програмеров на хрусте. Чтобы переписывать. Бэкэнд офиса365. На хруст. С дотнета. Это так, отделные приветы дотнетчикам, дополнением к ответу на вопрос про офис.
А как вы думаете откуда народ догадался что план - кинуть дотнетчиков в пользу хруста? Шило в мешке не утаишь, по ряду хедхантерской активности все понятно и без анонсов :)
>Но всё перебил раст, хотя он во всем хуже ХаскеляНе подтверждаю. Имею опыт на обоих языках (Хаскель на пробных проектах, на Rust работаю за деньги). Хаскель, конечно, приятен в изучении, но отлаживать что-то сложное — адская мука. И памяти жрёт иногда больше Джавы (думал, такое вообще невозможно). Rust на данный момент — самый лучший из пригодных на практике языков. Субъективная оценка программиста со стажем 35 лет.
> на Rust работаю за деньгиЕсли Вас не затруднит, расскажите пожалуйста подробнее о специфике проектов. В каких реальных секторах экономики сейчас применяют раст?
Пишут ли софт с нуля, или ваяют костыли?
Не хочу, чтоб меня расшифровали коллеги :), поэтому выражусь уклончиво. Работаю в крупной российской компании, один из проектов которой — СУБД, полностью реализуемая с нуля на языке Rust. В других проектах "костыли": существующие C или C++-системы расширяются, где возможно, на Rust.А вообще Rust много где уже применяется. Список компаний можно составить, просмотрев hh.ru :). Поэтому так смешно читать злопыхательства местных экспертов.
То что в компаниях тоже есть фанатики совершенно не говорит о юзабельности Руста. 100 вакансий на Москву это пыль по сравнению с другими языками. Которых требуется в десятки раз больше.
> То что в компаниях тоже есть фанатики совершенно не говорит о юзабельности
> Руста. 100 вакансий на Москву это пыль по сравнению с другими
> языками. Которых требуется в десятки раз больше.Так себе аргумент. Потому что больше всего погромистов требуется для JS и php.
И по твоей логике они теперь стали самыми юзабельными языками?))
Нет вот видишь ты даже не знаешь статистику какие программисты нужны. Ты оторван от реальности и не можешь здраво рассуждать. Php вакансий меньше чем C++ просто попробуй с этим пожить чуток.Сразу скажу что сумма вакансий php js c++ меньше чем вакансий на один только python. Python нужен в 70 раз больше чем раст. И да python самый юзабельный язык попробуй это принять.
> Работаю в крупной российской компании, один из проектов которой — СУБД,Провел беглый анализ ситуации на рынке, согласно данным открытых источников, отечественные наработки базируются на основе слонов. Ака постгрес.
Если допустить уровень "супер секретности", дескать мы тихо разрабатываем и никому не говорим, то это просто не укладываеься в общий политический тренд импортозамещения.
У нас принято громко заявлять о успехах, когда проект еще на уровне идеи. Дескать авось ассигнацию выделят. Овер 99% таких "проектов" умирают не родившись.На основании полученных данных делаю вывод о том, что пилите какую-то обвязку на расте вокруг экосистемы постгри.
Что сказать, видел как пилили под линуксом на шарпах. Оставлю этл без комментариев. На совести разработчиков, скажем так.
> существующие C или C++-системы расширяются, где возможно, на Rust
"Все проходит и это тоже пройдет". (с)
Видели и не такое.
Меж тем костыли менялись, база осталась.
Могу пожелать Вам крепкой нервной системы!>А вообще Rust много где уже применяется. Список компаний можно составить, просмотрев hh.ru :)
Мне не интересен хх.ру
Вы сказали, что много где используете лично, я поинтересовался лично у разработчика, Вы от ответа ушли.
И простите, но по моему мнению солгали, касаемо СУБД с 0 в РФ на раст.
На хх.ру много чего пишут, как на заборе практически...
>по моему мнению солгали, касаемо СУБД с 0 в РФ на растВремя покажет :)
Дай то Патрег!
Я только за! И за свои камни, и за свои япы и все все все...
Пока исхожу из реалии.
Пресс релизы всея яндекса молчат о таком чуде.
Так это же раст они только пишут и никак не напишут. Хоть обвязку хоть с нуля. В их работа важен процесс, а не результат.
> На основании полученных данных делаю вывод о том, что пилите какую-то обвязку
> на расте вокруг экосистемы постгри.Я на основании "не хочу, чтоб меня расшифровали коллеги" сделал такой вывод. В лучшем случае.)
Именно. Я практически на 100% в этом уверен. Скорее всего их расширение на Rust.Не знаю ни одной базы данных на Rust в России с нуля.
Вам лучше про логику молчать, у вас с ней очевидные проблемы, потому что вы делаете выводы из неверных предпосылок.1. Какая разница, какая рыночная доля у Мозиллы, если в спонсорах Rust Google и прочие немелкие конторы?
2. Rust - более сложный язык программирования, чем тот же JS, Python, ниша у него уже - в наши дни люди гоняются больше не за производительностью программ, но программистов. Также появился он гораздо позже Си и Плюсов, на которых горы кода написаны. Поэтому в топе его и нет пока что.
>Вам лучше про логику молчать, у вас с ней очевидные проблемыНу наконец-то нашелся человек, у которого нет проблем с логикой. С превеликим удовольствием приму наставничество, отче!
>Какая разница, какая рыночная доля у Мозиллы, если в спонсорах Rust Google и прочие немелкие конторы?
Иметь немелкого спонсора - это теперь залог успеха? Повспоминайте проекты самих немелких спонсоров, в которые были влиты сотни нефти и при этом почившие в бозе. Виндавс вон когда-то и на мобилках был, например.
Уж про посевные инвестиции аообще молчу. (Аля спонсирование раст и иже с ними). Там выхлоп стремится к 5% в лучшем случае. Но 5% обычно окупает все остальное. Реальная жизнь.> наши дни люди гоняются больше не за производительностью программ, но программистов. Также появился он гораздо позже Си и Плюсов, на которых горы кода написаны. Поэтому в топе его и нет пока что.
Ваша логика как бы говорит сейчас: производительность не нужна, нужно больше программистов, набрасывающих по быстренькому. Это подмножество программистов не умеет и не может уметь в си, потому им нужно дать инструмент, соответствующий их уровню развития/компетенций, чтобы наваливать больше кода, ща счет большего количества рук/ног.
Ну да, Вы верно описали причинно-следственную связь. Только во всю эту стройную теорию в ближайшие годы может ворваться АГИ и прогрессивное большинство вновь останется не у дел. Опять хомки летят с обрыва. Все старо как мир.
>С превеликим удовольствием приму наставничество, отче!Всегда, пожалуйста.
>Иметь немелкого спонсора - это теперь залог успеха?
Внезапно, да. Особенно, если их несколько, и они не словом, а делом подтверждают жизнеспособность проекта/продукта.
>Повспоминайте проекты самих немелких спонсоров, в которые были влиты сотни нефти и при этом почившие в бозе.
Лучше приведите примеры, где бы проект под крышей нескольких спонсоров оказался негодным. Это было бы весомым аргументом. А так - слабовато.
>Ваша логика как бы говорит сейчас: производительность не нужна, нужно больше программистов, набрасывающих по быстренькому
Все-таки, это ваша логика. Моя говорит, что производительность не всегда нужна. Но бывает и нужна.
>Это подмножество программистов не умеет и не может уметь в си
Как показывает многолетняя история, множество программистов, умеющих в Си на сколь-либо крупных проектах - пустое. И дело не в глупости людей, а их природе и несовершенстве языка программирования.
>в ближайшие годы может ворваться АГИ
А может и не ворваться.
Надеюсь консорциум будет достаточно дайвёрсити и инклюзивити. Надеюсь откроют целый отдел тех, кто будет следить за инклюзивностью. В расте по другому не принято.
>В расте по другому не принято.Ещё один гений логики. Какое-то концентрированное сборище просто. Смешались в кучу кони, люди. Какое отношение имеет язык программирования (а не организация его развивающая) к инклюзивности? Правильный ответ - никакого. Но некоторые продолжают пытаться натягивать сову на глобус.
>Ещё один гений логики.
> Какое отношение имеет язык программирования (а не организация его развивающая) к инклюзивности?Во истину гений!
Обьясняю на пальцах. Все начинается с человеков. Человеки обьединяются с общей целью создать neh. Человеки бывают разные, кто-то любит по-классике, кто-то по жизни прихрамывает. Сейчас модно стало не обижать уже обиженных, потому правящее меньшинство создает КОК, который довлеет над большинством в угоду иного меньшинства. Что характерно большинство прогибается.
Существуют коллективы, особо рьяно борящиеся за инклюзивность. Что прямо или косвенно свидетельствует о том, что обиженных в коллективе явное большинство.Здесь вспоминатеся ирония мамки сендмыла, ну это для тех, кто помнит.
Тем, кто "на заборе" - если хотите что-то лучше крестов, то пробуйте zig или go.
Не совсем верно. C++ — язык для создания огромных и сложнейших систем. Zig прост и скорее конкурент Си. Go — соглашусь, способен во многих проектах заменить и C++, и Java и тем более Python. Но Go не перекрывает всё, на что способен C++. Тут можно рассмотреть Rust. Единственно, где C++, возможно, до сих пор незаменим — приложения, выжимающие максимум производительности (за счёт оптимизаций, запрещённых в более безопасных языках).
> Zig прост и скорее конкурент Си.Где-то пол года назад в zig-песочнице можно было спокойно сделать double-free и use-after-free при помощи пары строк код.
Я бы сказал, что он слегка лучше (хотя бы меньшим кол-вом UB), но не то чтобы прям решал основные проблемы си.> Единственно, где C++, возможно, до сих пор незаменим — приложения, выжимающие максимум производительности (за счёт оптимизаций, запрещённых в более безопасных языках).
До эпохи массового интернета это было норм.
А сейчас если выбирать между 'х2 производительность' (хотя думаю в реале будет скорее 5-10%) и 'какиры взломали ваши серваки и продают террабайты кода' многие хорошо задумаются.
Пример гугла говорит о том, что новый код они стараются писать на расте.Интел уже обделывался с мелдауном-спектром, когда ради производительности жертвовали безопастностью.
> Единственно, где C++, возможно, до сих пор незаменим — приложения, выжимающие максимум производительности (за счёт оптимизаций, запрещённых в более безопасных языках).В расте не запрещены никакие оптимизации. Но зато есть возможность эти оптимизации локализовать в unsafe, и позволить компилятору затем оптимизировать агрессивнее.
Например, строки в rust'е все в utf8. Код работы со строками с целью оптимизации полагается на то, что весь этот utf8 валиден, вплоть до UB в случае невалидного utf8 внутри str. Но std гарантирует, что если ты не создаёшь str при помощи unsafe, то все они будут валидны.
В C++ с этими вещами исторически проблемы, потому что когда C++ создавался, и потом когда его STL создавалась, программисты ещё никак не могли решить, как разделить ответственность между вызывающей и вызываемой сторонами за валидность данных. В результате эта ответственность размазана, то она на вызывающей стороне, и вызов функции с невалидными данными -- это UB, то она на вызываемой стороне, и та в рантайме выполняет проверки, которых часто можно было бы избежать. И C++ не содержит средств, для того, чтобы следить за валидностью данных внутри string. Программист легко может получить char*, затереть там '\0' и вписать невалидный utf8. Код string в результате проверяет в рантайме, то, что он может проверить, сегфолтит на том, что он не может проверить, и получается что ни тебе гарантий в отношение кода, ни производительности.
Единственно, где C++ до сих пор незаменим, это существующие кодобазы на C++.
>Единственно, где C++ до сих пор незаменим, это существующие кодобазы на C++.Заменим, незаменим...
Когда Rust начнут использовать для ПО используемом на АЭС, в аэрокосмической отрасли и т.п, тогда можно сказать про какую-то замену.
А пока "истории успеха" от этого языка единичны.
В софте для АЭС не может быть никакой магии. Или в аэрокосмической области. Не может быть такого что из карго прилетел неизвестный пакет и не может быть такого что лишняя непонятная магия проверяет некие абстрактные выходы за границы буфера.
> АЭС
> аэрокосмической
> каргоТех кто юзает "карго" и всякие хипстерские "безопасные" язычки, как правило, не допускают к этим областям на пушечный выстрел)
Правильно ли я понимаю, что поскольку Си - нехипстерский язык, то ваять на нём софт для АЭС или космоса - нормалёк, несмотря на известную распространённость ошибок определённого класса, от которых на 100% защититься невозможно?
Си -язык простой (в математическом смысле). Sapienti sat.
for (int i = 0; i < 100; i ++) printf("%i/n", i);Зачем мне тут от чего то защищатся? :)
Даже если int станет 8 бит, понятно что ничего не изменится.
>Даже если int станетВаня, слезай с дерева! Ты не прав.
(0..100).for_each(|d| println!("{d}"))
> В софте для АЭС не может быть никакой магии.Как такого "софта для АЭС" нет, там всë аналоговое. Полупроводники не любят радиацию
> Как такого "софта для АЭС" нет, там всë аналоговое. Полупроводники не любят радиациюТам чистый стимпанк в основном. Шестерёнки и паровые клапана
>> В софте для АЭС не может быть никакой магии.
> Как такого "софта для АЭС" нет, там всë аналоговое. Полупроводники не любят радиациюТо-есть древний журнал "наука и жизнь" про станционную ЭВМ (если не ошибаюсь "Скала" называлась) в анализе аварии ЧАЭС - нагло гнал? Или таки полупроводник полупроводнику рознь?
FYI ты скопытишься от радиации заметно быстрее чем многие полупроводники, особенно оптимизированные на rad hard.
Ты же понимаешь что в си плас плас софте все так потому что ни для кого это не является проблемой кроме тебя. И то ты просто теоретик и си плас плас никогда в глаза не видел.
> Например, строки в rust'е все в utf8. Код работы со строками с
> целью оптимизации полагается на то, что весь этот utf8 валиден, вплоть
> до UB в случае невалидного utf8 внутри str. Но std гарантирует,
> что если ты не создаёшь str при помощи unsafe, то все
> они будут валидны.То-есть если строка передается ремотой, мы можем конкретно выкусить? Оок!
> То-есть если строка передается ремотой, мы можем конкретно выкусить? Оок!Ты ремотные строки через либастрал принимаешь?
Про отвественность между вызывающей/вызываемой и проверкой кода возврата - да.
Но я лично всегда всё проверяю на входе и проверяю код возврата если не пофиг на результат.
Насчёт строк - уже много раз писал: нет в С/С++ никаких срок кроме константных объявленных в коде.
Всё что вы откуда то получили - это область памяти с какими то данными предположительно содержащими текст, и именно так и надо это обрабатывать: указатель + размер передавать везде, а не думать что там /0 будет и что только валидный текст.
Нету в С/С++ никаких оптимизаций которые где то запрещены.
Есть ручное управление ресурсами и есть возможность писать код так чтобы он работал максимально эффективно на конкретных архитектурах.В остальном - я вот смотрю на зоопарк приложений у меня в компе и там очень мало приложений где я могу уверенно сказать: "а пофиг на производительность и сколько оно жрёт".
100500 лет назад доказано, что никакой язык не может сам себя проверять.
На пальцах: if ( ptr == NULL) - сам язык может проверить только, что ptr NULL или нет,
но не может отвечать, что if ( ) правильно отработал.
> 100500 лет назад доказано, что никакой язык не может сам себя проверятьНе может проверять сам себя - будем проверять javascript-ом
>> 100500 лет назад доказано, что никакой язык не может сам себя проверять
> Не может проверять сам себя - будем проверять javascript-омИ как жабаскрипт проверит выставлен ZF на проце или нет?
> И как жабаскрипт проверит выставлен ZF на проце или нет?Элементарно! Напишем npm пакет if-zf на rust-е
>> И как жабаскрипт проверит выставлен ZF на проце или нет?
> Элементарно! Напишем npm пакет if-zf на rust-е:D
Ви таки зохватите Землю, да :) План зело хорошЪ!
> Ви таки зохватите Землю, да :) План зело хорошЪ!КМК будет как с наполеоном примерно. Захватил, спалил, сам не понял нахрен это сделал, удрал обратно получая по пути волшебные пинки... закончил дни на острове вообще. Ящеры историю не изучали? :)
Спрашивается, как в 21 веке можно было придумать язык с настолько неочевидным синтаксисом? В сравнении с Ржавчиной C++ отдыхает.К чему все эти закорючки, бесконечные знаки препинания? Лишние, никому ненужные ключевые слова. Без let переменная не объявляется? зачем после имени константы двоеточие? Парсер писали генератором случайных чисел?
Без fun не понятно, что это функция? Почему инициализаторы массива идут через точку с запятой, вот чтобы что? Типа, у нас Rust, сделаем все не так, как у всех! Идиотизм какой-то.
Rust не делает больше других ЯП, но делает это до вырвиглазности некрасиво.
Концепция, может, и правильная. А реализация просто наиотвратнейшая.
> слова. Без let переменная не объявляется?Можно, как в C, норм?
register inline const unsigned long long int __restict * const __volatile__ JOPA[] ____cacheline_aligned_in_smp;
Прочëл и дождь пошëл. o.0
> register inline const unsigned long long int __restict * const __volatile__ JOPA[] ____cacheline_aligned_in_smp;Весело, конечно..)) Какой еще register inline? Лет 20 как на это компиляторы внимания не обращают.
В чем смысл писать _на_столько_ низкоуровневый код? Оно, конечно, нужно, но только где-то там и только один раз. Мне __volatile__ понадобился, может, пару раз в жизни.
Можно было как в JS, Java, C#, Go...
var JOPA []int64
А в Rust предложил бы:
..; #let:;. JOPA$;.<>; %int64;;., <[(;;)]>;;
Причем чтобы если запятую пропустишь - не компилилось. Больше знаков, больше жести!
Кажется, растоманы вообще расстраиваются, что количество знаков препинания ограничено. Они за разнообразие) Им надо было таблицу юникода открыть и оттуда в парсер накопировать. Чтоб лучше было. Так можно будет всякими кубиками шариками крестиками программы писать. Красотища!
> В чем смысл писать _на_столько_ низкоуровневый код?Я последние лет 10-15 только под ядро линя и пишу, забыл уж как int main(....) правильно пишется )
А что ты под него пишешь?
Просто свинское любопытство, ничего более :)
Раньше то таких ... было, но сейчас всё в тумане (в облаке аха) и не стало вдруг ...
> А что ты под него пишешь?Вон в профиле ссылка на контору
> А реализация просто наиотвратнейшая.Самый прекрасный язык - это Фортран на перфокартах
99% софта состоит из совершенно банальных конструкций.На Расте же нужно постоянно что-то компилятору сообщать. Какие-то стрелочки, скобочки... Раст по кривокосости даже Bash превосходит. Я бы понял, если бы этот ЯП изобрели лет 50 назад. Но ведь это новодел...
Открываешь практически любой ЯП - и все понятно. В Расте даже простейшие вещи делаются не просто сложно, а как будто специально через одно место. Изобретатель Раста ни о каком KISS не слышал.
На Расте пишут точно такие же банальные конструкции. Софт никак не отличается. Но в синтаксисе Раста все вдруг становится каким-то чумовым rocket science. Перерост формы над содержанием.
Разработчик Rusta не был специалистом (профессиональным программистом или учёным в области информатики), он был просто любителем. Отсюда и неудачный дизайн.
>Разработчик Rusta не был специалистом (профессиональным программистом или учёным в области информатики)Создатель Rust работал программистом в Мозилле. За деньги. Следовательно, он был профессионалом. Но он не единственный, кто участвовал в создании языка. Были и другие люди.
>Создатель Rust работал программистом в Мозилле.
>Следовательно, он был профессионалом.Не следовательно. Так можно вообще кого угодно назвать профессиналом, если он(а) получил(а) деньги за программирование.
>Не следовательно.Если человек регулярно получает деньги за свою работу, он является профессионалом. Это следует из определения этого слова. Автор получал за свою работу деньги регулярно. Кроме того, Раст создавался не только этим одним человеком, были и другие люди. И их труд уже был оценен мировыми лидерами софтостроения, хотя пока и не всеми.
>>Не следовательно.
> Если человек регулярно получает деньги за свою работу, он является профессионалом.В индустрии абсолютное большинство некомпетентных людей, которые регулярно получают деньги за работу. Более того, по такой логике Кнут, Таненбаум или Петцольд должны быть самыми богатыми ITшниками в мире, на деле же это совершенно не так.
>>>Не следовательно.
>> Если человек регулярно получает деньги за свою работу, он является профессионалом.
> Более того, по такой логике Кнут, Таненбаум или Петцольд должны быть самыми богатыми ITшниками в мире,По какой-такой "логике"? Особой, женской^W опеннетно-квантовой?
Забавно, я вот тоже работаю пограмистом за деньги, но моё мнение относительно стрёмности раста и крутости С вам не нравится :)В остальном скажу так.
До прихода LLVM люди создавали языки редко и в основном ограничивались либами для решения конкретных задач, когда типовую проблему хотелось закрывать парой строчек кода.
В мозилле, хроме и других браузерах вполне себе всё работало и работает без раста.
И если бы они работали на результат а не проедали деньги то никакого раста не появилось бы.Все эти сказки адептов про раст это системный язык на замену С - туфта полная, потому что С это практически асм только переносимый, хоть и с нюансами на разном железе. А асм выкинуть не получится.
Так и болтается раст среди крикливых адептов в своём БДСМ сообществе, залезая то туда то сюда и не привнося ничего полезного, только боль сопровождающих.
> что С это практически асм только переносимый, хоть и с нюансами на разном железе.C, который практически ASM остался на PDP-11.
так что не ври людям, и себе
> До прихода LLVM люди создавали языки редко и в основном ограничивались либамиПравда, в какой-то другой, альтернативной мне реальности:
https://en.wikipedia.org/wiki/Timeline_of_programming_languages
(тут даже если смотреть ЯПы 2000х - LLVM в качестве бэкэнда там совершенно не доминирует).
Ну и "кто на ком стоял" - в смысле факторы "тырьнет как раз шагнул в массы", "ОЙ-ТИ стало популярной и даже отдельной дисциплиной в универах" и "сильно увеличивающееся с каждым годом кол. студентов стало опубликовывать свои лабы" - тоже имеет место.
>Забавно, я вот тоже работаю пограмистом за деньги, но моё мнение относительно стрёмности раста и крутости С вам не нравится :)Это потому, что я не считаю ваше мнение сколь-либо весомым и аргументированным, то есть экспертным. А не потому, что вы - не профессионал в разработке на том же Си, к примеру.
>Все эти сказки адептов про раст это системный язык на замену С - туфта полная, потому что С это практически асм только переносимый, хоть и с нюансами на разном железе. А асм выкинуть не получится.
У вас проблемы с аргументацией и логикой. То, что Си - это асм, не может являться аргументом для того, что Раст не пригоден для системного программирования. Одно не следует из другого.
Мало того, опыт Гугла при разработке нового кода для Андроида доказывает это на практике, а не только в теории.
>99% софта состоит из совершенно банальных конструкций.Здесь хорошо бы уточнить, на каком языке программирования с использованием какой парадигмы.
В Плюсах, например, существует надцать способов инициализации полей класса. При том далеко не все их них банальны.>На Расте же нужно постоянно что-то компилятору сообщать.
Как и на любом другом более-менее развитом языке программирования. Особенно, если речь идёт о языке со строгой типизацией. Хотя некоторый прогресс с автоматическим выведением типов и наметился, но до идеала ещё далеко.
>Какие-то стрелочки, скобочки...
Где их нет?
>Изобретатель Раста ни о каком KISS не слышал.
Конечно, он слышал и об этом, и о многом другом в этой области гораздо больше тебя.
>На Расте пишут точно такие же банальные конструкции. Софт никак не отличается.
Конечно, отличается. Меньшим количеством ошибок определённого класса.
>все вдруг становится каким-то чумовым rocket scienceСогласно неоднократным опросам, сложное в Расте - это время жизни переменных и заимствования. Остальное всё так же банально, как и в других сходных языках. Просто надо документацию прочитать хотя бы раз.
> Здесь хорошо бы уточнить, на каком языке программирования с использованием какой парадигмы.Не имеет значения. Совсем.
> В Плюсах, например, существует надцать способов инициализации полей класса.
Не надцать, а по пальцам одной руки. Что уже на N-1 больше необходимого.
> Хотя некоторый прогресс с автоматическим выведением типов и наметился, но до идеала ещё далеко.
С одной стороны вопрос обратной совместимости. С другой - совершенно новый язык. Auto в C++ > 10 лет.
> Конечно, он слышал и об этом, и о многом другом в этой области гораздо больше тебя.
Верю, верю))) Результат его работы говорит сам за себя.
> Меньшим количеством ошибок определённого класса.
Это отнюдь не причина создавать на столько альтернативно одаренный язык. Отсутствие ошибок - не фича языка, а одно из его свойств.
Нет никаких проблем написать все то же самое на C++. Но придется писать самому. И это не будет несовместимо с существующим софтом.
> Согласно неоднократным опросам, сложное в Расте - это время жизни переменных и заимствования.
Разве этим не занимается САМ ЯЗЫК? Да вы что...
> Остальное всё так же банально, как и в других сходных языках.
Интересно, о каких других языках вы говорите?))) Такого угрюмого синтаксиса как в Расте нет нигде.
> Просто надо документацию прочитать хотя бы раз.
Выше сказал, что Раст совершенно неочевиден.
>Не имеет значения. Совсем.Вообще-то, имеет, если мы говорим про "банальность" (обыденность, обычность, привычность). То, что банально в императивном языке, в функционально может быть невозможным. И наоборот. Ещё пример. В Си следить за коректным освобождением памяти в крупном проекте вещь совсем не банальная, как показывает история.
>Результат его работы говорит сам за себя.
Есть ещё мнение независимых экспертов (например, из того же Гугла). Их опыт показал, что Раст по сравнению с Плюсами - прекрасный язык.
>Это отнюдь не причина создавать на столько альтернативно одаренный язык.
Как показывает опыт использования Раст - ещё какая причина.
> Отсутствие ошибок - не фича языка, а одно из его свойств.Не совсем понятно, в чем разница между фичей и свойством.
>Нет никаких проблем написать все то же самое на C++. Но придется писать самому.
Вот тот факт, что придётся писать самому без жёсткого контроля со стороны инструментального средства и является сам по себе огромной проблемой.
>И это не будет несовместимо с существующим софтом.
Совместимость можно достигать не обязательно на уровне языка программирования. Так, к слову.
>> Согласно неоднократным опросам, сложное в Расте - это время жизни переменных и заимствования.
>Разве этим не занимается САМ ЯЗЫК? Да вы что...Имелось ввиду понимание этих аспектов языка обучающимися.
>> Остальное всё так же банально, как и в других сходных языках.
>Интересно, о каких других языках вы говорите?))) Такого угрюмого синтаксиса как в Расте нет нигде.C, C++, Perl - синтаксис ничем не проще. Примерно такой же угрюмый.
>> Просто надо документацию прочитать хотя бы раз.
>Выше сказал, что Раст совершенно неочевиден.Ещё раз. Если не читать документацию, никакой язык не будет очевидным, даже обычный, на котором люди говорят, но который не является родным для вас.
Я выше уже писала, что взять ту же Ада, у неё просто многословный синтаксис, но крайне понятный и читабельный, а тут просто набор символов какой-то)
> Я выше уже писала, что взять ту же Ада, у неё простоНапиши на Аде драйвер MMU для Risc-V, хотя все олдскульные имеют Asm(), asm(), __asm__,....
Ой вЭй! Ви таки хотите сказать что это таки невозможно?
А я таки скажу: если уж вы забутстрапили Аду на этой железке, то невозможно это будет только если MMU на ней немножечко совсем нет! :-р :D :-)
> Ой вЭй! Ви таки хотите сказать что это таки невозможно?Судя по популярности этой вашей адилищи - нормалные системщики с такого синтаксиса блюют, спасибо если вообще успев схватить пакет для блевотины. Хруст имеет сильно больше шансов чем очередная академпотуга не от мира сего.
> А я таки скажу: если уж вы забутстрапили Аду на этой железке,
> то невозможно это будет только если MMU на ней немножечко совсем
> нет! :-р :D :-)А я как системщик скажу так: сами прогайте на своей блевотине с мерзким синтаксисом. Даже хруст в этом смысле и то симпатичнее. Хоть и обгадили его закорючками конечно знатно.
>Ада, у неё просто многословный синтаксис, но крайне понятный и читабельный, а тут просто набор символов какой-то)Математика - это тоже просто набор символов какой-то. И как люди живут с этим уже столько сотен (если не тысяч) лет...
Хотя соглашусь, обычные слова читать проще, чем символы. Но с другой стороны есть и плюсы - меньше по клаве стучать надо.
> {integer}::unchecked_add
> {integer}::unchecked_mul
> {integer}::unchecked_subГениально, в "safe" языке даже арифметические операции требуют ансейфа. Кто-то ещё воспринимает растерков всерьёз?
> Гениально, в "safe" языке даже арифметические операции требуют ансейфа.В Си пишут всяки флаги или через pragma : -mieee-fp -funsafe-math-optimizations ... и т.п.
С каких пор Си предендует на звание safe языка?
Понятно что и Си, и Раст - небезопасные языки. Но зачем растерки постоянно всех обманывают?
> С каких пор Си предендует на звание safe языка?Какой-нибудь MISRA C - вполне себе претендует. Правда апликушным раздолбаям - не понравится.
> Понятно что и Си, и Раст - небезопасные языки. Но зачем растерки
> постоянно всех обманывают?А таки хруст как минимум попытался решить ряд задолбавших проблем. А вечно трахаться с int неопределенного размера - ну, черт, это для тех кто в ад хочет попасть досрочно. А когда вы наконец умрете, в аду вам просто выдадут сишку и DSPшник с 16-битными словами. И будете программировать под него вечно.
На Z80 были 8 и 16 бит регистры, это далеко не самое страшное :)
> На Z80 были 8 и 16 бит регистры, это далеко не самое страшное :)Под Z80 толком нет полноценных сишных компилеров. А так все хорошо, прекрасная маркиза. Даже аврка удобнее для сей чем ЭТО. Но потом прищел ARM с своими Cortex M и дал всем мастеркласс на тему как это на самом деле надо было.
С тех пор началась новая эра. В которой ваш Z80 выглядит дино, ибо чип размером с пылинку может вмещать норм 32 бит ядро с линейной адресацией и нормальной программной моделью, а не вон то.
Я не фонат Z80, просто с него начинал в 1998 году и это единственная архитектура с такой низкой разрядностью которую я щюпал/знаю.
> Я не фонат Z80, просто с него начинал в 1998 году и
> это единственная архитектура с такой низкой разрядностью которую я щюпал/знаю.Этот опыт малорелевантен в контексте си и тем более сабжа. А кто-то из местных пытался сабжа на аврке 8 бит раскочегарить. Хз что получилось, но в принципе так можно было.
У AVR много однотипных регистров, это типичный RISC, одноцикловый по большинству операций. Правда разные адресные пространства - сям таки карму сильно нагибают, 8 битов тоже так то условность, data path к флехе с кодом 16 бит, и что прикольнее, адреса флехи - считают в юнитах по 16 бит. Ведет к знатному деланию мозга если указатели хочется. Поэтому cortex M это добро и зарулят постепенно. Лучше - в вообще совсем всем. От периферии до ядра проца.
Кста адресовать флеху юнитами строго по 16 бит немного похоже на те DSPшники. Правда у тех - жестче: нате-ка вам 16-бит char! По стандарту ж можно! Ну и вот как хотите так и живите с этим. И понятно что кода который compliant опять же - мизер.
Скажем (unsigned) char[20] посылаемый "в провод", эфир, записываемый в файл - ну вот вообще совсем не новость. А теперь представь что char не 8 бит стал, а 16... и все как бы честно! По тем горе стандартам так можно было. Ну код и сломается чуть менее чем весь :))
> Гениально, в "safe" языке даже арифметические операции требуют ансейфа. Кто-то ещё воспринимает растерков всерьёз?По умолчанию же сейф? Это как я понял для оптимизаций?
>По умолчанию же сейф? Это как я понял для оптимизаций?Для реальной жизни же :) А не interview code sample :)
Видимо Раст был недостаточно "safe", вот и решили добавить побольше операций чтобы уж точно никто в ансейфности раста не сомневался. Вот интересно, как растерки неистово наяривают на оптимизации, не понимая, что оптимальный код и safe код - это две взаимоисключающие вещи. В итоге Раст по производительности даже C++ не может догнать, так ещё и не более безопасен. Ради чего это всё тогда?
> что оптимальный код и safe код - это две взаимоисключающие вещиИстина.
Важные качества языка - это Correct, Beautiful, Efficient. Но можно выбрать только 2.
> Correct, Beautiful, EfficientПример растерков наглядно показывает, что если одновременно попытаешься на всех стульях усидеть, в итоге и близко ничего из этого не получишь
На самом деле получается, хотя не всегда с первой попытки. Но это потому, что Rust - своего рода первопроходец. Просто не все способны оценить адекватно в силу или слабости когнитивных способностей, или предубеждённости.
Хм... а как тогла у пользователей дыряшки получилсь сделать одновременно
CVE, Ugly, fix bugs for 10 years ?
Воистинну самый восхетительный язык в истории!
>В итоге Раст по производительности даже C++ не может догнатьГде на эти итоги просмотреть можно? Потому что там, где я смотрел, Rust уделывал Плюсы (не помню точно, как сильно). Только Си не мог догнать, но разрыв был около 5%.
это вы так скоро поймете сущность С и вернетесь обратно 😃
> Кто-то ещё воспринимает растерков всерьёз?Давай посчитаем:
Линус с ядром, разю
Гугл с написанием нового кода на раст, везде где это возможно, два.
Тот же гугл с Open Se Cura.
Клаудфаря с pingora.
Амазон у которого Why AWS loves Rust....
Довольно немало.Но конечно они меркнут перед кекспертизой Нанонима!
>> Кто-то ещё воспринимает растерков всерьёз?
>Давай посчитаем:А давай!
>Линус с ядром, разю
Целый "сайд-саппорт" для самого простого драйвера написан. НЕ САМ ДРАЙВЕР, НЕТ! :)
Интересно, посмотрев на вот это всё когда С++ в ведро пустят? :)>Гугл с написанием нового кода на раст, везде где это возможно, два.
Да тьфу. Они и на Dart'е пишут - и что дарт всех порвёт?!?!
>Тот же гугл с Open Se Cura.
На это у на есть Урюпинск с Рога и Копыта! Но там вообще 1С - но на по ты паря поставил! :)
>Клаудфаря с pingora.
Всё ещё недозаменившая Си-шный ngix? Но в принципе ладно, засчитываем.
>Амазон у которого Why AWS loves Rust....
А до этого и Python и Java и Javascript и .... нестЪ числа им!(С)
>Довольно немало.
Смотря с чем сравнивать. Если с каким нить ZIG-ом то вы - просто гиганты :) А уж в попугаях то ...
>Но конечно они меркнут перед кекспертизой Нанонима!
Даже не обсуждается!, единственные вменяемые во всём россейском этом вашем ойти :)
Другими словами, ты согласен, что на Rust вполне себе серьёзный софт можно писать. Ч.Т.Д.
> Целый "сайд-саппорт" для самого простого драйвера написан. НЕ САМ ДРАЙВЕР, НЕТ! :)и даже это в бесконечность раз больше чем у С++ :)
Уверяю, они выбрали Rust не потому, что он "хороший", а потому, что временно безальтернативный.Если бы указанным корпам действительно нужна была безопасность, они бы давно озаботились каким-нибудь MISRA. Получилось бы супербезопасно, вот только разрабатывать действительно безопасный софт это боль и страдание сродни BDSM. А тут им, получается, эту безопасность просто так пообещали, почти бесплатно. Отчего бы не взять? Лишним не будет.
Только, повторю, если бы ин нужна была безопасность - они бы давно озаботились. А так, получается, этим корпам 100 лет в обед и они ни разу в безопасность не игрались.
Корпам нужна прибыль прежде всего. Безопасность - часть её. Если можно сразу писать код с меньшим количеством ошибок, чем на другом языке, да ещё не теряя производительность труда программистов, то почему бы и нет? Другими словами, корпам нужна безопасность, но также нужен баланс между стоимостью разработки и получаемым доходом. Поэтому корпы думали о безопасности и ранее (было дело в начале двухтысячных, когда Майкрософт остановила разработку почти всех продуктов на несколько месяцев, чтобы провести обучение своих сотрудников по разработке безопасного кода). Но ранее не было Раста. А теперь он есть. И безопасность, которую он предоставляет, корпы получают почти даром.
Тут надо понимать что это не корпы решили выбрать раст как самое лучшее в индустрии, это снизу такие же фанбои раста рассказывали как они щас всё быстро перепишут на расте и оно будет в 1000050000 раз лучше и в 9999999 раз прибыльнее.
Для разработв это способ позниматся фигнёй которая увеличит их стоимость на рынке труда и не ломать мозг думая на текущими задачами которые уже всех задолбали.
Так же было и в начале чумки: все радостно запирались дома чтобы не ходить на работу, а потом оказалось что и на улицу теперь низя да ещё и уколы в наморднике делать надо.
Именно корпы решили выбрать Раст,как самое лучшее в индустрии. Почему? Потому что именно они спонсируют разработку Раста. И не прогадали, надо заметить. Производительность труда выросла, качество кода улучшилось.
Да да, особенно в геймдеве оно выросло :)))
И при такой мегапроизводительности - где результаты? Уже весь мир должен был быть переписан на раст, и где оно?)
>особенно в геймдеве оно вырослоВ геймдеве, я уже отвечал на этот вопрос выше, ошибки работы с памятью не столь критичны. И уже успели наваять движков на Плюсах и Си Шарпе. Новые, на Rust, догонят по функциональности не скоро. Но они уже есть.
>где результаты?
Я и не только уже неоднократно приводил их. Мало того, вы всё это точно читали. Если плохо с памятью, попробуйте к специалисту на приём сходить.
>Уже весь мир должен был быть переписан на раст, и где оно?)
У Дропбокса, Клаудфлэр, Дискорд, например, весь мир переписан. Андроид (новый код). Амазон (отдельный софт). И так далее. Но удобней, конечно, не замечать реальность, которая противоречит твоей картине мира.
Хорошо, большие фирмы выбирают Rust. А мы тут при чём? Мы в этих больших фирмах не работаем.
Rust выбирают не только большие фирмы. Это вообще не связанные вещи: выбор языка программирования для какого-то проекта и размер фирмы.
Для серьезного языка нужна возможность бустрапинга компилятора. Вот для GCC есть GNU Mes, а что с растом?
> Mes, а что с растом?А вообще там конфликт лицензий, у Раста Apache и MIT, против правоверного GPL v2
> v2Какой же он правоверный, если допускает тивоизацию?
У GCC лицензия GPLv3+ начиная с 2007. Следовательно, у gccrs тоже она самая.
> если допускает тивоизацию?Разрешить использовать ножи и топоры только кухаркам и поварам?
>> если допускает тивоизацию?
> Разрешить использовать ножи и топоры только кухаркам и поварам?Вообще-то за "неправильный" ножик - тебе могут запросто пришить ношение холодного оружия.
> объявила о создании консорциума "Safety-Critical Rust Consortium", нацеленного на использовании языка Rust в решениях, требующих повышенной надёжности (Safety-Critical Software), сбой в которых может угрожать жизни людей, нанести вред окружающей среде или привести к серьёзным повреждениям оборудованияРаньше как-то делали и не жжужали. Кажется это очередное нецелове расходование средств, консорциум для управления экосистемой языка извне.
Ну а чего, сложность проектов растёт, отсеивая хеллоуворлдщиков, а кушать хочется всем) вот вместо кодинга занимаются всякой фигнёй)
Из-за ошибки работы с памятью сделали целый язык и создали консорциум. Это бред какой-то. Непонятно, как без этого языка жили то? Господи помилуй!
У этого языка главный недостаток даже не синтаксис, а агрессивное сообщество фанбоев, их вроде и не много, на запашок стоит знатный)
> Из-за ошибки работы с памятью сделали целый язык и создали консорциум. Это бред какой-то.Только для того, кто не знает историю язык Ada.
Ты бы хоть википедию почитал.> Непонятно, как без этого языка жили то? Господи помилуй!
Плохо жили) То CVE, то RCE.
И вообще, с тебя на это все денег не берут.
Каждый за свои может заниматься любыми непотребствами какими пожелает.
Чувак, в реале люди тоже совершают ошибки, прикинь!?
И в отличии от каких то CVE/RCE это бывает фтально.
А те кто эксперементирует с ошибками вне фатального поля часто являются или мелкими жуликами или крупными предпринимателями.
> И в отличии от каких то CVE/RCE это бывает фтально.Вообще ошибка в коде бортового компьютера - тоже достаточно фатальна. Правда в ArianV это на аде было - такая безопасность :). Очень безопасно наверное когда ракета взрывается.
Ада - это не про безопасность, это про деньги. Как и Rust.
Целью создания Ады было сокращение расходов на сопровождение, а не повышение надёжности.
Поздравляю всех с 95-летием журнала "Мурзилка"!
> Ада - это не про безопасность, это про деньги. Как и Rust.Нехило бы как-то обосновывать громкие заявления.
> Целью создания Ады было сокращение расходов на сопровождение, а не повышение надёжности.
Здорово получилось: програмеров на этом почти нет, так что и затрат на них - тоже.
>Нехило бы как-то обосновывать громкие заявленияИзучайте историю создания языка Ада.
К середине 70-х годов в проектах, которые курировала минобороны сша, использовались 400 языков программирования. Понятно что трудно было разобраться во всём этом по. Требовалась унификация средств разработки, чтобы сократить расходы на специалистов по всяким разным языкам. Было решено всё писать на одном языке (Ада). Когда минобороны сша объявило конкурс на проект языка Ада, то в требованиях было сказано, что язык должен быть основан на Паскале или PL/1. Если бы они думали о надёжности, то ни за что бы не упомянули PL/1.
>>Нехило бы как-то обосновывать громкие заявления
> Изучайте историю создания языка Ада.Оно мне надо? Я не собираюсь на этом програмить. Мерзотная пасквилеобразная хня, надругательство над идеей системного программирования.
> К середине 70-х годов в проектах, которые курировала минобороны сша, использовались 400
> языков программирования. Понятно что трудно было разобраться во всём этом по.Где они в 70х столько ЯП взяли, интересно? Там реально употребительных было штук 5.
> Требовалась унификация средств разработки, чтобы сократить расходы на специалистов по
> всяким разным языкам. Было решено всё писать на одном языке (Ада).Почему-то это очень напоминает мне комикс XKCD за номером 927.
> Когда минобороны сша объявило конкурс на проект языка Ада, то в
> требованиях было сказано, что язык должен быть основан на Паскале или
> PL/1. Если бы они думали о надёжности, то ни за что
> бы не упомянули PL/1.И уж министерство обороны - даже американское - точно никогда не славилось какой-то особой эффективностью в сокращении расходов. По каким-то таким причинам в результате контракты на всякие запуски спутников, связь и проч - уехали всяким Маскам и проч. Вот этот - косты заоптимизирует очень даже. Не на бумаге - а по факту.
Не каждая ошибка в бортовом компе фатальна, не надо придумывать.
>Чувак, в реале люди тоже совершают ошибки, прикиньИ что? По этой причине наплюем на типичные и САМЫЕ РАСПРОСТРАНЕННЫЕ ошибки в коде?
>И в отличии от каких то CVE/RCE это бывает фтально.
Взлом компании, повлекшей многомилионные прямые и репутационные убытки - это ерунда по-твоему?
>А те кто эксперементирует с ошибками вне фатального поля часто являются или мелкими жуликами или крупными предпринимателями.
Это из чего следует?
Я ошибкой считаю не то что там компилятор себе надумал а то что мешает программе выдавать нужный мне результат/функционал.Взломы корпораций вполне себе происходят и без ошибок в коде, и гораздо чаще.
Более того, есть страховщики, которые могут такое покрывать.
Но вы же дальше своего кода не мыслите.Следует из того что кто не эксперементирует и не рискует - работает с утра до вечера за ту пайку что предложил работодатель.
Собственно любой коммерческий работодатель - это какой то чувак который взял на себя управление рисками и обработку своих и чужих ошибок.
>мешает программе выдавать нужный мне результат/функционал.И наличие ошибок в коде, из-за которых программа, например, падает, сюда никаким боком?
>Взломы корпораций вполне себе происходят и без ошибок в коде, и гораздо чаще.
Поэтому будем плевать с высокой колокольни на критические ошибки?
>Но вы же дальше своего кода не мыслите.
Я-то как раз мыслю. И даже примеры привёл, где нарушение безопасности - это очень важно, и корпы-производители софта это понимают. А подобные вам - нет.
>Более того, есть страховщики, которые могут такое покрывать.Примеры приведёте, где страховщики покрывали бы репутационные риски? А то из-за них, бывает, фирмы полностью банкротятся, потому что конкуренция довольно высокая, клиенты развернулись и ушли к другому поставщику.
Вот когда упадёт - тогда и починим.Насчёт страховщиков - это искать надо.
Насчёт дырявости за которую ничего нет - длинк, тплинк, асус, микротик и куча других вендоров.
Притом дырявость в виде бэкдоров, а не случайных ошибок.
массив[0..10]цел
ввод и
вывод массив[5+и]Ну и как тут "на этапе компиляции" обеспечить безопасность при и=6?
Сделали автоматическую вставку проверок входных данных и выдают это за "Уникальное Достижение". Просто чутка облегчили прогеру работу.
Тож самое с ИИ -- раньше это были "стат системы принятия решения" и никто кипятком не писал, а теперь "оооо! ИИ! во все поля! дайте лярдов на внедрение!"
Про ИИ не соглашусь.
Потрайте тут https://chat.lmsys.org/
Кнопка директ чат. Выбираем клод, пусть даже хайку, самый простой из трех.
Оно решает абсолютно нетривиальные задачи, некоторые из которых не под силу определенному кругу человеков, даже от ит индустрии. Сэд бат труъ. То ли еще будет.
Это вам не алиса, скоммунизженная с древней ревизии чатгпт, времен его открытого кода под Маском.
Чего там коммуниздить? Ты когда-нибудь код нейросети видел? Он простой как железная дорога. Вся магия кроется во входных данных. Кто больше насобирал и разметил тот больший молодец.
>Чего там коммуниздить? Ты когда-нибудь код нейросети видел? Он простой как железная дорогОтчего тогда код клода, чатгпт 3.5+ закрыт?
> Вся магия кроется во входных данных. Кто больше насобирал и разметил тот больший молодец.
В том числе, да. Но если дело только в них, кто мешал яндексу собрать? Разве у них мало данных?
> Отчего тогда код клода, чатгпт 3.5+ закрыт?А как ты деньги будешь собирать если просто отдашь модель как файл? И пусть каждый безлимитно юзает. И тебе присылает только бонусы спасибо.
> В том числе, да. Но если дело только в них, кто мешал яндексу собрать? Разве у них мало данных?
Я тебя слегка удивлю но Яндекс сами все разметили у полно своих данных и даже сервис Толока где куча асессоров. И сам все обучили.
>А как ты деньги будешь собирать если просто отдашь модель как файл? И пусть каждый безлимитно юзает. И тебе присылает только бонусы спасибо.Сегодня просто праздник логики какой-то!
Комментом выше Вы утверждали, что код ничто, данные все!Каждый не сможет безлимитно юзать, ибо чтобы правильным данным обучить, нужно еще и много железа/мощностей задействовать.
>Я тебя слегка удивлю но Яндекс сами все разметили у полно своих данных и даже сервис Толока где куча асессоров. И сам все обучили
Я не очень понимать Вас по-русски.
Я просто пытался поговорить с яндекс гпт, оно не может ничего, кроме как хамить и выражаться фамильярно. Видимо в компании яндекс такая атмосфера, а яблочко от яблоньки как известно.
Я приводил выше ссылку на ии от антропик. Попробуйте. Тогда предметно поговорим о том, что такое нормальный ллм, что и как он может и где место алисы в существующем виде.
> Я тебя слегка удивлю но Яндекс сами все разметили у полно своих
> данных и даже сервис Толока где куча асессоров. И сам все обучили.Да... этот спич даже на чатгоптя не тянет. Яндекс, залогинься.
> https://chat.lmsys.org/Спс за ссыль, давно хотел пощупать Opus нахаляву. Сгенерировало хеллоуврот на fasm на чистом win32 api без ошибок. Круто.
Рад помочь!
Оно действительно творит чудеса.
Ичсх в любых областях знания.
Это начинает немножечко пугать.
Создатель ядреной бомбы в свое время понимал что к чему и основными фичами поделился с ссср. Сдается мне, что сейчас так не будет. Даже сдается мне не на пустом месте.И вот осознавая в полной мере возможные последствия, я с абсолютной тоской взираю на то, что сделал яндекс. И тут даже не до троллинга на самом то деле.
> массив[0..10]цел
> ввод и
> вывод массив[5+и]
> Ну и как тут "на этапе компиляции" обеспечить безопасность при и=6?Рубанув сборку кода - "доказуемо небезопасное действие" ;)
Это не бред, а имитация бурной деятельности с соответствующим гешефтом)))
>организация Rust Foundation, которая курирует связанную с языком Rust экосистему, объявила о создании консорциума "Safety-Critical Rust Consortium"Надеюсь, CoC они уже написали.
Это был самый первый коммит. Нынешние погромисты занимаются чем угодно: этикой, инклюзивностью, КоКами, но никак не написанием кода 🤷♂️
Через правила поведения бизнес пытается управлять OpenSource разработчиками. Они же по сути волонтёры, халявные работники.
>Verus - инструментарий для проверки корректности кода, написанного на языке Rust ... Во время выполнения исполняемого кода Verus проверяет соответствие спецификации для подтверждения корректности работы.Уже нарождаются языки нового поколения, которые со временем вытеснят Руст из области повышенной надёжности. Первая ласточка -это язык Идрис
https://www.idris-lang.org/Это, о чем мечтал Дейкстра всю жизнь - языки с автоматическим доказательством правильности программы.
Если ИИ будет развиваться с такой же скоростью, то боюсь, вся разработка уйдёт в декларативное описание, а на выходе чистейший максимально оптимизированный машинный код.
Однако же ДОКАЗАТЕЛЬСТВО корректности кода всё равно надо будет иметь, хотя бы в критических для жизни людей областях. Так что эту проблему не отменит никакой ИИ.
В критически важных местах нельзя полагаться на магию. Например в самолёте Як-40 нет ни одной микросхемы, но тем не менее у него и автопилот и все нужные системы безопасности для полетов. Работа всех систем точно известна и детерминирована. Без всяких безопасТных языков программирования.
Автопилот довольно простая аналоговая система несмотря на страшное название. И вообще, в таких областях, как авиация или космонавтика, идут по пути максимального упрощения, минимизируя количество потенциальных точек отказа. Это известно каждому инженеру.
> Автопилот довольно простая аналоговая система несмотря на страшное название. И вообще,
> в таких областях, как авиация или космонавтика, идут по пути максимального
> упрощения, минимизируя количество потенциальных точек отказа. Это известно каждому инженеру.Ну вот и упростили. Выкинули чертову кучу проводочков, тросиков, тяг, колесиков и прочей ломкой, хлипкой, требующей периодического квалифицированого обслуживания оптом фигни.
Поставили компы и мк. Соединили шинами. Пилот дергает джойстик, по шинам разлетается. Зарезервировать шину и не очень тупо обработать сбой - проще чем извините обрыв тросика какого.
...так появился Fly By Wire. И даже до россиян через i++ лет что-то понемногу стало доползать.
Особенно весело стало, когда компы и мк стали управлять в Боингах 737 Max. Где пилоты вынуждены были вести неравную борьбу с автопилотом.) Который еще фиг выключишь. Спасибо, что до россиян пока этот маразм не дошел
> Особенно весело стало, когда компы и мк стали управлять в Боингах 737
> Max. Где пилоты вынуждены были вести неравную борьбу с автопилотом.) Который
> еще фиг выключишь.Если не пытаться выпячивать некоторые факапы и посмотреть на статистику, больше 50% факапов приходилось, так, по жизни, на человеческий фактор. И кучи стрелочек, циферблатиков, кнопочек и лампочек все это дико усугубляют. Потому что в критичной ситуации в всем этом нагромождении вообще разобраться - малореально.
Более того - с диагностикой отказов и проч тоже полный булшит. Цифровая система может просканировать себя сама, прочекав основные аспекты. И соседей отпинговать, проверив что они по шинам доступны, шины работают, вот это все. А с тросиками, лампочками и циферблатиками... ну вы там где-нибудь в середине полета и заметите факап при случае. И если не угадаете который из приборов гонит - ну, сорянчики, что там про человеческий фактор было? Вот оно и будет.
> Спасибо, что до россиян пока этот маразм не дошел
Вообще-то таки дошел. Хоть и на ...цать лет позже остальных. Никто не будет уже новые дизайны делать как будто на дворе 1960-е.
А кроме самолёта Як-40 других в мире больше нет?
> А кроме самолёта Як-40 других в мире больше нет?А про fly by wire этому неандертальцу явно не рассказали. Да что там, он и про электронный газ в авто наверное не слышал.
электронный газ в авто...слышали, когда аварии случались. Пользователь жмет на тормоз, а электроника на газ.)))
> электронный газ в авто...слышали, когда аварии случались. Пользователь жмет на тормоз,
> а электроника на газ.)))Несомненно, без ABSок и подушек безопасности было гораздо безопаснее. Аж два раза. Если ДТП и было меньше - то только потому что машин было мало. И таки - сорян но без микроконтроллера даже просто подушки в морду отстрелить вовремя - сложновато будет. Чтоб надежно отличать опасные ситуации от всякой фигни. Не, вылетевшие от резкой остановки на светофоре подушки - не рулят. Да и вообще - рисковано когда тебе пиротехника в морду подушкой бьет. Но вот убиваться об лобовуху еще более рисковано, поэтому - вот так. А ABS и прочие ассистенты постараются чтобы до этого вооюще не дошло.
>А кроме самолёта Як-40 других в мире больше нет?Таких - нет. Потому как нет больше стран которым пофиг на цену керосина.
Туда, куда летал Як-40 теперь обычно только турбопропы ходят.
> Так что эту проблему не отменит никакой ИИ.ИИ для генерации доказательств + система формальной верификации доказательств могут творить чудеса. Вот, просвещайся: https://www.scientificamerican.com/article/ai-will-become-ma.../
И, я отмечу, это только начало. Все эти прорывы вида ChatGPT только ещё учатся увязывать с системами формальной логики. Да и, прям скажем, сами по себе эти чатботы ещё далеки от завершённости: есть основания полагать, что там можно снизить количество нейронов на порядок не потеряв в качестве. Просто до этого ещё руки не дошли, пока все наперегонки тренируют всё большие и большие нейросетки, чтобы посмотреть что будет.
Почитал статью, там только мечтают."I think in the future, instead of typing up our proofs, we would explain them to some GPT. And the GPT will try to formalize it in Lean as you go along.
...
In the future, I could imagine a big theorem being proven by a combination of 20 people and a bunch of AIs each proving little things. And over time, they will get connected, and you can create some wonderful thing. That will be great. It’ll be many years before that’s even possible. The technology is not there yet, partly because formalization is so painful right now."Смысл такой, что компьютеры будут помогать проверять доказательства трудных гипотез. Ну так должно и быть, для этого компьютеры и придуманы, чтобы помогать людям.
А мне вся эта движуха с Rust напоминает другой супербезопасный язык Ada, там было все и крики о надежности, и консорциумы с военщиной и тд и тп, финал немного очевиден
Заказчик разработки языка ада министерство обороны США. Область его применения точно известна и в ней язык широко распространен. На этом в общем-то твой наброс и провалился.
Интернет(он же в девичестве ARPANET) заказчик разработки минобороны США и внезапно популярен за стенами пентагона.Что то не сходится дружок-пирожок=)
> Интернет(он же в девичестве ARPANET) заказчик разработки минобороны СШАИнтернет придумали еще Майя, правда тогда юзали сигнальные костры.
министерство обороны США - вот где гигантские попили огромных бюджетных сумм. Ах, да, это называется не коррупция, а лоббирование.) Ведь в странах демократии коррупции как бы нет).
> супербезопасный язык AdaНу он, собсно, таким и является. Ты же не будешь спорить с NASA или Пентагоном касаемо выбранного ими языка 😉
На этом безопасном языке была написана программа, которая привела к крушению французского космического корабля Ариан 5. Как-то так. Ты же тоже не будешь с этим спорить.Диагноз - каким бы не был "защищенным" язык программирования кривые, шаловливые ручонки недопрограммистов тоже никто еще не отменял. И это - основная проблема ошибок в программах.
Структурная надежность технической системы обычно не предмет компетенций заурядного кодера. Требования к надежности подсистем (тем более космического корабля) определяются не досужими IMHO анонимов с холиварных топиков.
>На этом безопасном языке была написана программа, которая привела к крушению французского космического корабля Ариан 5.Вот именно! А уч чего с ржавчиком будет ... 8-о
Последний тренд зарубежья - На Раст писать софт удобно, быстро, безопасно. Но переписывать, dirty-патчить, рефакторить - мука. Он плохо подходит под однопоточные приложения из-за тоталитарного борроу-чекера./lessons_learned_after_3_years_of_fulltime_rust/
Раст плохо подходит для однопоточных приложений, которые надо часто пере/дописывать, и в которых на RCE всем плевать. (Держу в курсе)
вот что пишет человек, который на программировании игр на Rust'е собаку съел:https://loglog.games/blog/leaving-rust-gamedev/
он пишет что Rust не подходит для прототипирования и когда требования быстро меняются.
> он пишет что Rust не подходит для прототипирования и когда требования быстро меняютсяЛогично, для прототипа проще использовать питон.
Дла игрушек лучше с++ тк будет быстро, а если оно где-то упадет или крешнится - то всем почти пофиг. Раст там не нужен.Учитывая, что происходит в геймдеве, с кранчами по 60-80 часов в неделю...
Хорошего кода там все равно не будет.
Будут костыли построенные поверх велосипедов.А потом люди удивляются "почему игра становится играбельной через минимум пол года после релиза"