Дрю ДеВолт (Drew DeVault), автор пользовательского окружения Sway, почтового клиента Aerc и платформы совместной разработки SourceHut, опубликовал выпуск языка программирования Hare 0.24.2 (номер версии образован как 0.YY.Q, где YY - две последние цифры года, а Q - номер квартала). Hare преподносится как язык системного программирования, близкий к языку Си, но проще, чем Си. Исходный код компилятора и инструментария распространяются под лицензией GPLv3, а код стандартной библиотеки под лицензией MPL (Mozilla Public License)...Подробнее: https://www.opennet.me/opennews/art.shtml?num=61551
То же самое что TypeScript для JavaScript.
Посмотрел примеры хело ворлда на их сайте и понял, что этот язык мертворождён.Не постите больше о нём новости.
что-то вот да. Потянуло хрустом с тем же закорючко-синтаксисом но без борова.А зачем нам неудобочитаемые закорючки вместо си - непонятно.
Это как молодёжь говорит на своём языке. Программировать они тоже хотят на своём. Но у них на получается.
дрюша конечно молод душой, но помогите деду отмотать седую бороду от ножки стола.
Вы еще бородатый APL не видели
Это круче JCL с PL/I?
> Это круче JCL с PL/I?Пример:
ConvexHull←{
⍝ ⍵: matrix (2 rows) of points - first row:abscissae second row:ordinates
⍝ return: matrix (2 rows) of points of convex hull⍝ try: ConvexHull ⍉9 2⍴1 0,1 ¯10,3 3,2 1,6 3,1 6,3 1,6 1,9 0
⍝
⎕IO←0
pts←(⊂⍋⊃↓⍵)⌷[1]⍵ ⍝sort by x-values:first point←→start vertex
phs←{ ⍝ 12○⍵ polar phase ○¯1>≥○1. see DFNS
x y←⊂[1↓⍳⍴⍴⍵]⍵ ⍝ x and y coordinates.
x0 xn←1 0=⊂0=x ⍝ points on/off y axis.
top←(x0×○0.5)+xnׯ3○(|y)÷x+x0 ⍝ upper quadrants.
(0∨.≠⍵)×(1-2×y<0)×top+○x<0 ⍝ other quadrants.
}
angles←phs(0 1↓pts)-[0]0⌷[1]pts ⍝phases(radians) of the vectors
ixStart←0,1+⊃angles⍳⌊/angles ⍝start with indexes of first segment
ixHull←{
ix0 ix1←¯2↑⍵ ⍝ix1: index of last point←→last vertex
v←{⍵+(⍵<0)×○2}phs pts-[0]ix1⌷[1]pts ⍝phases with respect to the last vertex
other←(⍳1↓⍴pts)~ix0 ix1 ⍝indexes of other points
angles←|(ix0⊃v)-(⊂other)⌷v ⍝ _______/\_______
angles←{f←⍵>○1 ⋄ (⍵×~f)+f×-⍵-○2}angles ⍝angles (p0-p1) (p1-px)
⍵,(angles⍳⌈/angles)⊃other ⍝new vertex is where angle is largest
}⍣{
0=⊃⌽⍺ ⍝repeat until first and last vertex coincide
}ixStart
(⊂ixHull)⌷[1]pts
}
Этакий предок MATLAB'а с уклоном в функциональщину и тотемные столбы (⍝?).Что создатель - Кеннет Айверсон - нашёл в идее "1 функция - 1 символ"? Он сделал новые символы для известных математических операций, ln - слишком длинно, поэтому натуральный логарифм там ⍟.
Но некоторые его изобретения (floor, ceil и iota) прижились.
> Вы еще бородатый APL не виделиЗато, вот, нашлось тут... https://gist.github.com/fogus/9fd771e38c561d868216725dc67e0f57 :)
Да, кто-то натурально сделал из сишки ну вот реально ООП с классами, new, и проч. ЧСХ сишку так можно расширить средствами яп. А почему хари и хрусты на каждый пшик компилер переделывать идут? Гениальности архитектам не хватило? Бывает, кули.
>> Вы еще бородатый APL не видели
> Зато, вот, нашлось тут... https://gist.github.com/fogus/9fd771e38c561d868216725dc67e0f57
> :)
> Гениальности архитектам не хватило? Бывает, кули.Не, лишь знаний - тебе.
Чтобы хотя бы оценить разницу между "зафигачить транслятор в сишку на макросах - с дебагом ипитесь как хотите, мы стратеги" и "сделаем полноценную поддержку в языке". Бывает, да.
> А зачем нам неудобочитаемые закорючки вместо си - непонятно.Хм, потому что СИ это просто свалка костылей и UB?
И да, в сишном коде хватает закорючек, если добавить еще то дырени будут находится каждые два-три дня
> свалка костылей и UB?Путаешь с С++.
мало того, что сишка почти целиком состоит из UB, так еще чтобы их все вызубрить, придется покупать стандарт сишки, потому что бесплатно его не достать. Еще раз: платишь бабки, а получаешь pdf, в котором на каждой странице undefined behavior. Прикольный стандарт, правда?
Это опять про С++. Чистая сишка кристально ясна.
> Это опять про С++. Чистая сишка кристально ясна.Может та которая был от K и Р.
Даже 99 это просто груда костылей.
Ну и писаки тоже хороши, что-то не кастится? void* спасет всех!
> Даже 99 это просто груда костылей.Ну тогда какой-нибудь хруст это вообще чистый и дистиллированый апокалиптец. Да даже яваскрипт какой - там лулзов столько что кто-то постил это сюда. Было забавно.
>>> Даже 99 это просто груда костылей.
>Ну тогда какой-нибудь хруст это вообще чистый и дистиллированый апокалиптецПочему? Что ты бы назвал костылем в Rust?
> Почему? Что ты бы назвал костылем в Rust?Вон там try_* для линукскернела сгородили. Надо же, при попытке прогать для кернела для wannabe-системного-яп дошло наконец почему сишники это делали - вот так. А не вон так что нате вам panic и что хотите то и делайте, зато безопасно. Конечно, ОС с упавшим в панику ядро и правда не хакнут, но радости с того? И это азы управления памятью, ать-ать-ать.
А если посмотреть сколько и чего там докостыливали для того чтобы хоть что-то в кернеле можно было на этом якобы-системном - там весьма длинный список так то.
>> Почему? Что ты бы назвал костылем в Rust?
> Вон там try_* для линукскернела сгородили. Надо же, при попытке прогать для
> кернела для wannabe-системного-яп дошло наконец почему сишники это делали - вотНе, просто ты, как обычно - что-то, где-то прочитал опой и с какого-то перепугу решил, что ядерный аллокатор с "другим" (отличным от юзерспейса) интерфейсом - костыли.
> Не, просто ты, как обычно - что-то, где-то прочитал опой и с
> какого-то перепугу решил, что ядерный аллокатор с "другим" (отличным от юзерспейса)
> интерфейсом - костыли.Во первых, они вроде как в вооооон той версии сподвиглись аллокатор таки - докостылить. Не прошло и 10 лет.
Во вторых, изменение с try_ для всяких box и проч - именно костыль! Ибо не было в начальной логике ЯП, а потом - заметили что лажа вышла и отыграли решения взад, вернув логику "как у сишечки" по сути. Потому что иначе в системщине - фигня получается, если безопасТно улетать в панику при первом же OOM почему-то не катило. Ну что, пчелы против меда, оказывается, с этим какая-то подстава была? ЗатобезопасТно вылетающий в панику на первой ошибке аллокации кернел почему-то народу не нравится :).
Осталось теперь еще объяснить - чем это отличалось по логике действа от *alloc + проверок, кроме того что сделано как костыль через ж@пу, но эффект ровно тот же.
> Во первых, они вроде как в вооооон той версии сподвиглись аллокатор таки
> - докостылить. Не прошло и 10 лет.
> Во вторых, изменение с try_ для всяких box и проч - именно
> костыль! Ибо не было в начальной логике ЯП, а потом -Проблемка в том, что все это - до сих пор общедоступно и легко проверяется:
https://lore.kernel.org/lkml/20220805154231.31257-9-ojeda.../
> This customizes the subset of the Rust standard library `alloc` thatwas just imported as-is, mainly by:
> Adding fallible (`try_*`) versions of existing infallible methodsПоэтому я и говорю - прекрати читать <этим самым>, попробуй - глазками. А то у тебя "логика ЯП" в стд-либе для юзверь-спейса оказалсь и прочие "перлы" ...
> Это опять про С++. Чистая сишка кристально ясна.О! Это не ыксперт, а Ыкспертище!
Просто открываешь ту кучу, что по недоразумению называется стандартом, www.dii.uchile.cl/~daespino/files/Iso_C_1999_definition.pdf
Ищешь там слова undefined behavior.
Просветляешься.Некотрые даже собрали это в список (наверное было много свободного времени))
gist.github.com/Earnestly/7c903f481ff9d29a3dd1
Смешно.
https://thephd.dev/conformance-should-mean-something-fputc-a...
> pdf, в котором на каждой странице undefined behaviorТы, конечно же, можешь привести хотя бы десяток примерв с указанием идущих подряд номеров страниц этого pdf?
gist.github.com/Earnestly/7c903f481ff9d29a3dd1
> gist.github.com/Earnestly/7c903f481ff9d29a3dd1Ну, давай разберём хотя бы первый пункт этого "списка".
> C99 List of Undefined Behavior
> From N1256: (See http://port70.net/~nsz/c/c99/n1256.html#J.2)
> A "shall" or "shall not" requirement that appears outside of a constraint is violated (clause 4).Пункт 4.2 полностью выглядит так:
> If a ‘‘shall’’ or ‘‘shall not’’ requirement that appears outside of a constraint is violated, the behavior is undefined.Чтобы понять его смысл, необходимо прочесть пункт 4.1, в котором определены понятия "shall" и "shall not":
> In this International Standard, ‘‘shall’’ is to be interpreted as a requirement on an implementation or on a program; conversely, ‘‘shall not’’ is to be interpreted as a prohibition.В переводе на общепонятный п. 4.2 означает: Если "implementation or program" нарушает требования настоящего стандарта, то уже не имеет значения, как именно они работают, и стандарт никак не определяет поведение продуктов, в которых он не соблюдается.
Дальше, извини, читать не стал.
А назовёшь хотя бы три C++-специфичных кейса UB? Нет, весь UB растёт именно из C. И в C при этом нет никаких способов их обходить, как-то автоматическое управление памятью, checked math, да и вообще банальный range based for loop.
union {
float f;
i32 I;
}
Например ок в С и не ок в с++.
Это не UB, а разница между разными языками программирования. UB - это неопределённое поведение. А здесь оно чётко определено.
Ага, определено так что С++ компилятор может скомпилировать нормально, а может херню выдать - никакой гарантии нет, использовать union в С++ просто нельзя, но в языке есть. Хотя пока вроде как работает. Но это не точно.
а чо в с++ будет с этим?
Вообще, в C23, который должен скоро выйти, checked math завезли.
> Вообще, в C23, который должен скоро выйти, checked math завезли.А в ядре он появится когда? Лет через 10?
От окамемевшего С89 отказались только в 2021 году. 2021 год, Карл!
Так что С23 стоит ждать где-то в году 35м. Если доживем, конечно.
> > А в ядре он появится когда? Лет через 10?От окамемевшего С89 отказались только в 2021 году. 2021 год, Карл!
Э... ну это вопрос, наверное, к Линусу, почему он там не хотел раньше переходить. Может, потому, что хватало того самого минимума из С89, а чего не хватало - специалисты уровня разработчиков ядра ОС вполне себе могут сами реализовать в любом удобном им виде.
Например, нестандартные checked math в виде builtin-ов существуют как минимум с версии gcc 5.1.0 (https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gcc/Integer-Overflo...). А возможно и в более ранних версиях. Как минимум есть подозрение, что с версии gcc 5.0. А до того делались, скорее всего, ассемблерными вставками, для архитектуры x86, например:
static inline int __builtin_sadd_overflow(int a, int b, int *c)
{
_Bool p;asm __volatile__("addl %2, %0\n\tseto %1" : "+g"(a) , "=g"(p) : "g"(b));
*c = a;
return p;
}а то и вообще, переносимым, в общем, способом, без всякой ассемблерной магии:
static inline int __builtin_sadd_overflow(int a, int b, int *c)
{
*c = a + b;
return (((*c ^ a) & (*c ^ b)) < 0);
}Из того, что добавили в С99 по сравнению с C89, как по мне, это разве что designated initializers очень удобная вещь и составные константы, хотя второе уже сильно на любителя, ещё стандартизировали inline. Остальное, не очень то и нужно, особенно в разных ядрах ОС.
> От окамемевшего С89 отказались только в 2021 году. 2021 год, Карл!Кто и где отказался? На этом антике хватает софта, попробуй от него откажись...
> Так что С23 стоит ждать где-то в году 35м. Если доживем, конечно.
Если взять свежий GCC или Clang то можно большую часть вон того юзать - сегодня. Но если нравится ждать - можно и подождать, конечно. Но именно технической необходимости в этом нет.
Ещё один неосилятор Си, которому виноваты все, от K&R до ISO/IEC WG14 в полном составе.
> Ещё один неосилятор Си, которому виноваты все, от K&R до ISO/IEC WG14 в полном составе.Какой громкий пук!
Просто восхитительно.Для того чтобы говорить "нужник вида 'дырка в земле' это устарело" не нужно им пользоваться массово.
Достаточно одного раза.
Мне, к сожалению, довелось писать под СИ лет десять назад. Много кода.
Ночные забеги с дебагом тк кто-то нагадил в память, ну удовольствия в этом мало.
Слава богу машине, свалил из этого болота.
> кто-то нагадил в памятьВот-вот.
Сам и нагадил))
“Вот-вот“ означает, что с тобой бы такого никогда не случилось? Все профессиональные системные программисты на Си - лохи, один ты д'Артаньян?
А есть смысл осилять? Можно же просто взять Раст или с#
Проблема в том, что огромное количество местных экспертов едва-едва Си осилили. А ты им куда более сложные языки программирования предлагаешь освоить.
>Потянуло хрустом с тем же закорючко-синтаксисом но без борова.Уровень познания языка: споткнулись на синтаксисе. Раст есть за что ругать, но ситнаксис - едва ли не последняя вещь.
Не совсем мертворожден, но судя по логотипу людей написавших сойдут с ума
Но Hare позволяет достичь до максимальной производительности!
Анониму (65). А в чем ты здесь видишь проблему?
Не позволяет, потому что основан на qbe, который, в свою очередь, по заявлению авторов языка генерирует код на 25-75% более медленный, чем LLVM.
Интересно что в примере хелловорлда "Привет мир!" стал "Привіт, світе!"
Так что пускай автор сам пишет на своём Hare.https://web.archive.org/web/20210625072311/https://harelang.org/
> Интересно что в примере хелловорлда "Привет мир!" стал "Привіт, світе!"Всё правильно сделали.
Hare плодить не нужные языки. С - для старых профи. С++ - для молодых профи. Rust - для зумеров пока-не-но-скоро-станут-профи.
Си - для любителей повылазить за буфер (других профи у меня для вас нет).
И часто линукс у вас вылазит за буфер? И в целом, какой софт такое часто делает? Мне кажется что программы на С вполне быстры и с отказоустойчивостью там вроде вполне нормально все. Не чаще случаются ошибки такие как переполнение буфера чем и на других языках.Это уже от программиста зависит больше.
А сколько раз в неделю нужно чтобы сказать часто)?Вот типичнейший пример
opennet.ru/opennews/art.shtml?num=59867
запись значения за пределы выделенного буфера -> права root в большинстве дистрибутивов LinuxТипичная дыряшка.
Если я постоянно попадаю молотком по пальцам — то вроде бы и сам виноват. Но если после покупки другого молодка ситуация выправляется — повод задуматься о разнице между молотками.
> Если я постоянно попадаю молотком по пальцам — то вроде бы и сам виноват.
> Но если после покупки другого молодка ситуация выправляется — повод задуматься
> о разнице между молотками.Та если бы был просто молоток.
Тут у молотка голова может улететь, просто в зависимости от того в какой цвет покрашена ручка и какой там логотип.
Тк каждый писака компиляторов имеет полное право творить любую дичь. Официально, тк так в "стандарте" написано.Если у есть перфоратор, у которого нет двойной изоляции, или бур может вылететь из крепления кому-то в голову, или шестеренки открыты - то скорее всего про него скажут "что за х!" и не будут пользоваться.
А тут все косости и кривости инструмента, определенная категория программеров, выпячивают как достоинства:
"ты только представь, я могу засунуть сверло себе в нос и сделать роскомнадзор!",
"я потерял бур и использовал палочку динамита, теперь через дырку в стенке какиры украли библиотеку пользователя",
"на мой инструмент можно поставить диск от болгарки, и да!, я уверен, что это безопасно"
> Тут у молотка голова может улететь, просто в зависимости от того в
> какой цвет покрашена ручка и какой там логотип.Ты даже, возможно, и сам не представляешь, насколько хороший пример ты привёл.
У хорошего мастера рукоять молотка выточена из древесины твёрдой породы и точно подогнана под форму отверстия в головке, а сама головка намертво зафиксирована на рукояти плотно вбитым клином.
А если выбирать молоток по цвету и логотипу - ну, тогда головка будет улетать.
> У хорошего мастера рукоять молотка выточена из древесины твёрдой породы и точно подогнана под форму отверстия в головке, а сама головка намертво зафиксирована на рукояти плотно вбитым клином.Да именно так!
СИшка - это молоток у которого ручка может быть из мореного дуба, а может из навоза и соломы.
Кто знает. Ведь в так называемом 'стандарте' написано "ХЗ как сделать, разбирайтесь сами"
Может голова там тоже из пластилина?Приходится смотреть на логотипы.
Вот есть ЖЦЦ - вроде нормальный, а ковырнешь, так мало того что он стандарт не полностью поддерживает, так до 2008 года заражал гну-раком код который компилировал (пришлось даже экстеншины пилить)Слава богу в нормальных языках от такого отказываются.
Я уже молчу про необязательность реализации отдельных модулей.
И при этом называть получившиеся "компилятор С99"
А когда просишь скажите какой опенсорсный компилятор реализует язык полностью, то начинаются какие-то виляния.
А потому что их нет! (с)
en.cppreference.com/w/c/compiler_support
К сожалению не всему, что по приведённой Вами ссылке написано можно доверять.Например для "C99 core language features" есть запись про "Variably-modified (VM) types" (N2778).
Идём на сайт стандарта и смотрим это предложение, для начала на его заголовок:
JTC1/SC22/WG14 - N2778
Title: Variably-Modified Types
Author: Martin Uecker, University of Göttingen
Date: 2021-07-11
^^^^^^^^^^И видим, что оно поступило в 2021 году, и в C99 оно не могло никак попасть. Далее, на сайте стандарта смотрим один из черновиков стандарта С23 - N3096 working draft — April 1, 2023 ISO/IEC 9899:2023 (E), и видим там, что оно применено, в контексте C23.
Далее по существу, если почитать данное предложение, то там предлагают "we propose to make variably-modified types mandatory in C23".
Не-не-не. Доверять можно, смотри в чём дело.> там предлагают "we propose to make variably-modified types mandatory in C23".
Это не потому что их не было в C99, а потому что их успели сделать необязательными в C11
первый был микроскоп
Я понимаю, что при слове «молоток» нужно искромётно пошутить про микроскоп (хотя местные ни того, ни другого в руках не держали), но микроскоп — это тоже инструмент, и он может быть плохим, дрянным и просто опасным для жизни (поинтересуйтесь ускоряющим напряжением у электронного микроскопа).
> при слове «молоток» нужно искромётно пошутить про микроскоп (хотя местные ни того, ни другого в руках не держали)Стесняюсь спросить. В наше позднесоветское школьное время и молоток в руках держали на трудах и в микроскоп пытались что-то разглядеть на уроках биологии. В постсоветских школах всё это выкинуто?
Уроки труда в 2010 выкинуты. Собираются вернуть, но какое импортозамещённое китайское качество будет у инструментов, могу догадаться.
> Уроки труда в 2010 выкинуты. Собираются вернуть, но какое импортозамещённое китайское качество
> будет у инструментов, могу догадаться.Врядли хуже раздристаных совковых. Ах да, даже откровенно доисторические станки, без намека на CNC - школьникам вообще включать не давали. Как бы чего не. А уж циркулярную пилу запустить... эээ за это наверное расстрел сразу, вместе с родителями.
> Уроки труда в 2010 выкинутыХоть что-то полезное сделали. И вечно пьяных матерящихся трудовиков, небось, поувольняли к чёртовой матери, аллилуйя.
Я помню что нас на уроках труда то какие-то гвозди заставляли выпрямлять, то ржавую проволоку чистить. Не думаю, чтобы у меня была прямо совсем уникальная школа.
> Я помню что нас на уроках труда то какие-то гвозди заставляли выпрямлять,
> то ржавую проволоку чистить. Не думаю, чтобы у меня была прямо
> совсем уникальная школа.Мне пару раз в жизни даже доверяли там не очень убитый рубанок. Правда, и его все равно сперва пришлось пересобрать до того как он заработал. Не, как им орудовать правильно - не показали почти. Долбоклюев много, а учитель 1, урок 1 в неделю, на всех благодати не хватает хоть тресни. Уделить каждому минуту в неделю - да, вы сразу станете столяром экстра класса. Ну и вот на что убито время? Не, таким скиллом даже на жрат не заработаешь.
А, во, разок на всю толпу таки устроили праздник и дали поорудовать разъ...м, но все ж сверлильным станком всем желающим. Правда, это 1 раз за всю жизнь, а станок видел еще дедушку Ленина и, ессно, в диком виде его такой - разве что в музее удастся найти. Так что хрен бы его знает куда этот скилл применить потом. Но продырявить большую железку и сделать туповатый но все же молоток из какой-то фигни все же было немного забавнее чем зубрить примитивную хрень для тупарей.
>> Я помню что нас на уроках труда то какие-то гвозди заставляли выпрямлять,
>> то ржавую проволоку чистить. Не думаю, чтобы у меня была прямо
>> совсем уникальная школа.
> Мне пару раз в жизни даже доверяли там не очень убитый рубанок.
> Правда, и его все равно сперва пришлось пересобрать до того как
> он заработал. Не, как им орудовать правильно - не показали почти.
> Долбоклюев много, а учитель 1, урок 1 в неделю, на всех
> благодати не хватает хоть тресни. Уделить каждому минуту в неделю -
> да, вы сразу станете столяром экстра класса. Ну и вот на
> что убито время? Не, таким скиллом даже на жрат не заработаешь.Прошу прощения, что вмешиваюсь, но от уроков физики в школе Вы тоже ожидали, что Вам дадут знания на уровне чуть ниже Стивена Хокинга, а на уроках музыки научат сочинять музыку чуть хуже Чайковского? Вообще-то школа немного не про это, а про то, чтобы дать базис, чтобы ребёнок примерно знал про то, что это всё вообще такое и имел общее представление о мире.
У школьников просто рабочие часы бесплатные, и по этому их чем только не нагружают. К выпусному классу школьник(если занимается) уже вполне может сносно коммерчески программировать, как минимум на уровне джуна, паять всякую электронику, рисовать и так далее. Но на практике, большинство выпускников ничего не умеют, зря что ли в школе штаны просиживали?
> Прошу прощения, что вмешиваюсь, но от уроков физики в школе Вы тоже
> ожидали, что Вам дадут знания на уровне чуть ниже Стивена Хокинга,Поэтому я и считал ту школу по сути бесполезным времяпровождением. Все что они там вещали я и сам в паре книжек прочитал. Да, старый учебник физики и математики, так то, даже и покруче были.
> а на уроках музыки научат сочинять музыку чуть хуже Чайковского?
Б... я после них даже нот не знал. Так, пару раз за всю жизнь попели, фиг знает что и зачем. Смысл этого? А хрен его знает. Не, с таким скилом даже на школьном стадионе петь сыкотно, закидают каким-нибудь гуано.
> Вообще-то школа немного не про это, а про то, чтобы дать базис,
> чтобы ребёнок примерно знал про то, что это всё вообще такое
> и имел общее представление о мире.При том с этим базисом - ну, в лучшем случае, на кассе можно в пятерочке сидеть. Только учиться для этого 10 лет - перебор. Арифметику такого уровня можно с полного нуля за полгода или меньше смочь. Зачем убивать 10 лет на тусню с толпой иди@тин пускающих пузыри - я не знаю.
И какую базу я получил возякнув пару раз рубанком - тоже фиг бы его разберет.
> Не чаще случаются ошибки такие как переполнение буфера чем и на других языках.Но не на всех "других языках". В том же уже набившем оскомину полуторагодичной давности отчете гугловских андроид-разработчиков об использовании раста в разработке системных компонент андроида заявляется, что не допустили ни одной ошибки работы с памятью (т.е. не только выхода за пределы буфера) за несколько лет использования этого самого раста. Даже жирным шрифтом выделили это утверждение: "...To date, there have been zero memory safety vulnerabilities discovered in Android’s Rust code..."
О других типах ошибок и уязвимостей они конечно же тактично умолчали.
Разве?
Во-первых, 70% CVE - это ошибки, от которых рас защищает.
Во-вторых, защищать от остальных (логическая ошибка, копипаста кода) он и не обещал.
И по этому представители google в 2024 году сказали, что в обозримом будущем не собираются отказываться от C/C++ и выделили 1М на улучшение интеграции rust с C/C++?
А ты ту новость читал?
opennet.ru/opennews/art.shtml?num=60556
и первоисточник security.googleblog.com/2024/02/improving-interoperability-between-rust-and-c.htmlВот что пишет гугл
"At the time, Rust was already in wide use across Android and other Google products. ...
Rust is one of the strongest tools we have to address memory safety security issues."
Т.е Раст у них уже применяется массово и это один из самых полезных инструментов."We are delighted to announce that Google has provided a grant of $1 million to the Rust Foundation to support efforts that will improve the ability of Rust code to interoperate with existing legacy C++ codebases."
А тут речь идет о легаси кодах. От которых действительно отказываться не хотят - тк дорого.
Но если добавить туда секретный ингредиент - то они станут гораздо лучше и менее дырявыми.“Based on historical vulnerability density statistics, Rust has proactively prevented hundreds of vulnerabilities from impacting the Android ecosystem. This investment aims to expand the adoption of Rust across various components of the platform.”
Думаю тут комментарии излишни.И наконец-то мы пришли к тому "а зачем это делается?!" все-таки лям баксов это не мало.
As these improvements have continued, we’ve seen a reduction in the barriers to adoption and accelerated adoption of Rust.
Т.е это все затеяли чтобы ускорить внедрение Раста!Подытожим.
Ты случайно или намеренно исказил предпосылки и причины.
А что ты это не привел?“While Rust may not be suitable for all product applications, prioritizing seamless interoperability with C++ will accelerate wider community adoption, thereby aligning with the industry goals of improving memory safety.” – Royal Hansen, Google Vice President of Safety & Security
> “While Rust may not be suitable for all product applications, prioritizing seamless
> interoperability with C++ will accelerate wider community adoption, thereby aligning with
> the industry goals of improving memory safety.” – Royal Hansen, Google
> Vice President of Safety & SecurityОно ж не противоречит тому что я написал)
"Хотя Раст не подходит для всех приложений" - логично, это не питон на котором можно быстро делать прототипы, это не бащъ где можна выдавить портянку кода, зато за пять минут -
"внедрение совместимости с С++ ускорит его более широкое внедрение с целью улучшения безопасности памяти..."Т.е именно раст добавляет улучшения в тонны С++ легаси.
Но за цитату спасибо, будет еще один аргумент, чтобы потыкать носом хейтеров.
Сразу видно евангилиста.Тут как раз и имелось ввиду, что rust полностью заменить C/C++ не может. Если ты этого не видишь, то твои глаза застилает слепая вера.
>И часто линукс у вас вылазит за буфер?Ага, даже полугодовой аптайм нельзя иметь, нужно срочно очередной патч от эксплоитов поставить. С браузерами та же проблема, хоть там и кресты.
>Мне кажется что программы на С вполне быстры и с отказоустойчивостью там вроде вполне нормально все.Для того, чтобы не вылазить за пределы буфера, без проверок в рантайме, нужны зависимые типы, но сишники их неосилят.
>Не чаще случаются ошибки такие как переполнение буфера чем и на других языках.Чаще, чаще. В некоторых языках выход за пределы буфера проверяется во время компиляции, в других в рантайме, и программа падает. А вот в си и крестах - молчаливо портят память.
В то время когда я программировал на С, ничего никуда не вылезало, потому, что вначале думаешь над данными потом делаешь, а не полагаешься на то, что компилятор за тебя все сделает
Неуловимый Джо? Или создатель qmail'а почтил нас своим присутствием? Дэниел Бернштейн, Вы ли это?
Расскажи это авторам Linux для начала.
Я начал изучать Си и С++ одновременно в ВУЗе. Я какой профи, стары или молодой?
Не ломай ему картину мира, а то сегфолтнется.
ещё не стар, но уже и не молод. В общем, и там и там - мимо )
Название прикольное. харЭ, я сказал!
Проще Си, может быть только Си. Фор-ич уже добавили, ждем-с классы, модули и т.д.
> Фор-ич уже добавилигде?
Так в новсти же:
"Добавлен синтаксис для определения циклов "for-each", упрощающих перебор элементов массивов и срезов."
Когда новая версия Nemerle?
Почему не собирается? Такая же ошибка была и на предыдущих версияхSyntax error: unexpected 'error' at rt/+linux/+x86_64.ha:44:34, expected '{'
make: *** [makefiles/linux.x86_64.mk:11: .cache/rt.ssa] Error 1
> Почему не собирается? Такая же ошибка была и на предыдущих версиях
> Syntax error: unexpected 'error' at rt/+linux/+x86_64.ha:44:34, expected '{'
> make: *** [makefiles/linux.x86_64.mk:11: .cache/rt.ssa] Error 1Попробуй распаковывать .ha одноименным архиватором :)
Снова эти let, а-а-а!!!
Лучше бы sr.htом занимался.
Молодец Дрю!
Дрю, давай механизм наподобие alias this из BetterC, шаблоны не хуже, если сможешь, даже лучше.
>BetterCУот из ит?
Есть кстати первоапрельский патчсет где добавляются шаблоны в Hare.
ТО что надо! Я как раз хочу написать DOS для z280
Для Z280 сам бог велел писать на ассемблере.
Но ты ведь ни на чём не напишешь всё равно.
Конечно же я пошутил. DOS я собираюсь делать на ассумблере, а если брать в основу исходники CP/M-3 то большая часть работы уже сделана:
https://oldcomputers.dyndns.org/public/pub/rechner/zilog/z28...
> Конечно же я пошутил. DOS я собираюсь делать на ассумблере, а если
> брать в основу исходники CP/M-3 то большая часть работы уже сделана:Ну да, самое время в 2024 писать CP/M... :). Я конечно понимаю что некоторые медленно запрягают, но, кажется, вас уже обошли на целый круг.
А кто обошел, чем обошли? я даже не слыхал, можно ссылку?
> А кто обошел, чем обошли? я даже не слыхал, можно ссылку?С тех пор во первых майкрософт скопипастил и улучшил - как MSDOS. Более того - скопипастил не у себя так что еще и суд продул. С треском! Заплптив сколько-то миллионов оригинальному автору.
Они уже даже от щедрот сорц этого барахла вроде релизнули, хоть и под жлобской лицензией. На версию 3, чтоли. Впрочем кому не хочется подачек от проприетариев, freedos есть. Этот с сорцами с самого начала. Это только из релевантных проектов.
А на круг обошли - многочисленные task switching многозадачки, в изобилии нагенеренные студнями на все вкусы. Как бы более другой уровень технологии ОСостроения уже.
А какое отношение майкрософт с MSDOS имеет к z280? Вы слышали звон, но не поняли где он!
В Z280 есть MMU и прочее, а вы туда дос хотите чтобы все это игнорировать.Туда что-то уровня OS/2 просится...
Вы для каких задач мне советуете OS/2 для z280? Опять - слышу звон, но не знаю где он! Или это такой толстый троллинг?
Зачем DOS? Лучше какой-нить mini NIX.
ну NIX на ассумблере мне не подсилу, у меня вообще мозги куриные
уже есть, пользуйтесь
https://github.com/hperaza/UZI180
Мне больше нравится Nim вместо C.
Единственная норма это zig
> ..., но проще, чем Си.
fn example(x: int, y: int = 34) void = {
// ...
};
example(12); //эквивалентно вызову example(12, 34);
Нуфуя создавать ф-цию я ДВУМЯ аргументами, когда один из них всегда константа?!!!
Ты программировать то умеешь? Это дефолтное значение, а не константа.
> Это дефолтное значение, а не константа.это называется константа.
> гoвнoкoдя, прикинь, это называется константа.Это называется опциональные параметры, лол. Тебя не смущает что open() имеет в одном случае два аргумента, а в другом -- три?
>> гoвнoкoдя, прикинь, это называется константа.
> а в другом -- три?Там "по дефолту" не написано 34, va_arg это отдельная тема, тоже корявость С
> Там "по дефолту" не написано 34, va_arg это отдельная тема, тоже корявость СПотому что та же самая задача в C реализована через va_arg. И нет, это не корявость, это довольно жирный плюс C, которого не хватает в том же Rust.
>> это довольно жирный плюс CС c плюсами это в другой теме
> Потому что та же самая задача в C реализована через va_arg. И
> нет, это не корявость, это довольно жирный плюс C, которого не
> хватает в том же Rust.А что хрустики делают при реализации чего-то типа printf? oO
Еще variadic macro забавные. Можно даже исхитриться посчитать аргументы - в компил тайме - и таки прямо в компилтайме например выбрать разные имплементации с нужным числом параметров. В том числе можно и дефолты вкатить если параметры не дадены. Это конечно чуть кривее, но круть си в том что - так можно было. Без редизайна нового ЯП и постоянной его правки на каждый пшик. Мол, мы тут упростили немного парсер - и теперь любой такой фокус требует менять код компилера.
> А что хрустики делают при реализации чего-то типа printf? oOЧерез макросы. Сильная сторона раста это годные макросы с нормальным доступом к AST, что позволяет делать много прикольных штук.
Годные макросы - это у Zig.
> Годные макросы - это у Zig.Эти да, довели идею до абсолюта - все компил тайм вычисления с тем же синтаксисом что основной ЯП. Что, хрустики, а вам так слабо было. Нагенерили какой-то блевоты. А надо то было - вот так.
> Годные макросы - это у Zig.Они и у раста годные. Тут не то чтобы только один может быть.
Отлично! Когда на него перепишут линукс?
Никогда.
Уже: https://drewdevault.com/2024/05/24/2024-05-24-Bunnix.html
>Отлично! Когда на него перепишут линукс?В очередь СД!!!
Вначале - на раст!
Потом на JS\TS!
А вот тут уже занимайте очередь, мордобой разрешён! :-)
Есть вообще целый феномен языков-убийц С, напирающих на простоту. Они не уточняют, что за простота (это как безопасность - безопасность от вас с помощью DRM - тоже безопасность), а просты они для создания языка. С точки зрения пользователя это примитивность."There are no macros, generics, or metaprogramming features"
"Omitting generics (and similar features) in Hare is a deliberate design choice which simplifies the language considerably and is more aligned with its design roots in C."
"We use terms like "borrow" and "ownership" to reason about memory, but this is not enforced at the language level. The compiler does not prevent double-free or use-after-free bugs."То есть в языке отказались от фич C++, D, Rust, от Zig'овского comptime, даже от C-макросов, отказались от тесной совместимости с C (только обычный FFI). Вот вам C в синтаксисе Go (заяц, суслик - почти одно и то же) и даже с defer'ом.
Автора понять и простить - создавать язык с нуля веселее, чем разгребать проблемы других (как делают в cppfront и в Circle C++, например), а до скучной стадии языку не обязательно доживать. Но зачем пользователям клевать на ограниченность языка, преподносимую как преимущество? Hare хочет быть как Go, но FAANG-компании за ним почему-то не видно.
И ещё - в ядре линукса в 60 файлах используется _Generic. Язык расширили дженериками не без помощи макросов образца 1973 года и жить стало немного лучше.systemd написан даже не с defer, а с RAII[1]. И с виртуальными методами. Только не средствами языка, а вручную, макросами и расширениями языка.
То есть они не находят какой-то правильной архитектурной чистоты в старом C. Они видят ограничения языка, которые кое-как обходятся отступлениями от стандарта, макросами и паттернами проектирования. На кого рассчитаны слова про "aligned with its design roots"?
[1] https://github.com/systemd/systemd/blob/main/src/fundamental...
[2] https://github.com/systemd/systemd/blob/main/src/network/tc/...
_Generic в C позволяет перегружать. Это не то, что обычно имеется в виду под дженериками (параметрический полиморфизм).
Хм, да, это ad-hoc-полиморфизм и лучше _Generic дженериками не называть.Кстати, в Hare перегрузки нет.
Зато можно спать спокойно, не взлетит. Нет у них таких денег на рекламу, как у гугла с голангом.
> for (let item .. items) {Почему они используют упавшее двоеточие? Чтобы было не так, как везде?
Автор не знает, как везде. Потому и взялся за свой язык.
> x: int, y: int = 34Его Вирт покусал?
Нет, не то что бы что-то плохое, но ЗАЧЕМ, если мы пишем замену сишечке?
Потому что в этом случае декларации читаются слева направо, а не по спирали, как в C.Есть некоторая изящность в том, что декларации в C повторяют использование, но некоторые типы из-за этого трудно прочитать.
Я не спорю. Вообще по факту особой разницы нет.
Просто зачем трындеть про сишечку?
2ALL: спираль всё-таки неудобна, но её можно исправить с сохранением преемственности с C.Вместо let и const без типов тогда будут auto и const auto.
int[] a; // dynamic array of ints
int[4][3] b; // array of 3 arrays of 4 ints each
int[][5] c; // array of 5 dynamic arrays of ints.
int*[]*[3] d; // array of 3 pointers to dynamic arrays of pointers to ints
int[]* e; // pointer to dynamic array of intsvoid f(int);
void function(int) fp = &f; // fp is a pointer to a function taking an int
https://dlang.org/spec/function.html#function-pointers
https://dlang.org/spec/arrays.html#declarations
Ну в принципе достаточно яркий пример синтаксиса, чтобы понять, почему дишечка мертворождённая.
> почему дишечка мертворождённаяНе из-за синтаксиса же. Но я хотел указать правильное начало - справа от имени переменной нет частей её типа. Скобки массива перенесены влево, как в C# и Java. А ты углубился в то, что они правило "читать тип справа налево" довели до абсурда:
int[1][10] x;
auto y = new int[1][10];
auto z = new int[][](10,1);
x[9][0] = 1; // OK
y[9][0] = 1; // OK
z[9][0] = 1; // OK
Всё это не нужно. Потому что текстовые AI модели про этот язык ничего не знают. И не надо говорить, что вы по старинке кодите. Даже в захудалых компаниях сейчас есть prompt engineer.
Как показывает мой личный опыт, часто (не всегда) ИИ генерирует или неполный код, или вообще какую-то ахинею. Поэтому всё равно приходится самому в итоге вникать в тематику.
Они могут знать даже про те языки, которых не существует.
Смешанные впечатления о языке.С одной стороны, вроде бы, боремся за скорость, с другой - используем qbe ради простоты пронимания всего фреймворка. По заявлению авторов qbe генерирует на 25-75% более медленный код, чем LLVM.
Далее. Декларируем приверженность открытому коду, не желая поддерживать проприетарные ОС. Но при это не поощряем использовать этот самый открытый код, чем оправдываем отсутствие менеджера пакетов.
Дженерики, которые как бы упрощают разработку, отсутствуют. Автоматическое управление памятью отсутствует. Зато есть defer, как в Golang.
В общем, на мой взгляд, у авторов какая-то жуткая плохо совместимая смесь разных идей и подходов в голове. Не уверен, что надо сколь-либо внимательно следить за развитием этого языка.
> Не уверен, что надо сколь-либо внимательно следить за развитием этого языка.Достаточно посмотреть пример helloworld на главной странице, чтобы понять это.
Да что с ним не так?
Казалось бы, двадцать первый век, прогресс, но язык как-будьто из восьмидесятых. Прорывных идей в языке не видно, но язык до сих пор не стабилен(перепишите код при переходе на новую версию). Вместо работы, например над алгебраическими типами данных, автор делает foreach как костыль для отдельного случая, гораздо логичнее было бы дать рекурсию, вместе с map, fold, iter. В лучшем случае, автор переизобретёт условный паскаль, который и так есть, и мало кому нужен. Казалось бы есть куча разных идей, будь-то системный язык с зависимыми типами как ATS, оптимизирующий компилятор, как Clean, эффекты, как Eff или Koka, и так далее, но автор с умным видом продвигает посредственность.
> Hare fits on a 3½" floppy disc — these will be available for purchase when Hare 1.0 is released!Дрю делал язык для троллинга?