LINUX.ORG.RU

Rust 1.49

 


2

6

Опубликован релиз 1.49 языка программирования Rust.

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

Чтобы чётко обозначить, насколько поддерживается каждая система, используется система уровней:

  • Уровень 3. Система поддерживается компилятором, но не предоставляются готовые сборки компилятора и не прогоняются тесты.

  • Уровень 2. Предоставляются готовые сборки компилятора, но не прогоняются тесты

  • Уровень 1. Предоставляются готовые сборки компилятора и проходят все тесты.

Список платформ и уровней поддержки: https://doc.rust-lang.org/stable/rustc/platform-support.html

Новое в релизе 1.49

  • Поддержка 64-bit ARM Linux переведена на уровень 1 (первая система, отличная от систем на x86, получившая поддержку уровня 1)

  • Поддержка 64-bit ARM macOS переведена на уровень 2.

  • Поддержка 64-bit ARM Windows переведена на уровень 2.

  • Добавлена поддержка MIPS32r2 на уровне 3. (используется для микроконтроллеров PIC32)

  • Встроенный тестовый фреймворк теперь выводит консольный вывод, сделанный в другом потоке.

  • Перенесены из Nightly в Stable три функции стандартной библиотеки:

  • Две функции теперь помечены const (доступны на этапе компиляции):

  • Повышены требования к минимальной версии LLVM, теперь это LLVM9 (было LLVM8)

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

★★★★★

Проверено: Shaman007 ()
Последнее исправление: atsym (всего исправлений: 8)

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

Препроцессору можно «Войну и Мир» подсунуть и если синтаксис директив будет правилен, то он сгенерирует Анна Каренина

Конечно утрировал.
Здесь все зависит от реализации.

Владимир

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

а в чём проблема с nullable указателями то?

Указатель это объект который связывает программу с кучей. Кучей руководит операционка.

Зачем что-то придумывать поверх (лишние абстракции) когда напрашивается очевидное решение - в указателе что-то есть или там нет ничего (потому что ОС не смогла выделить память например).

плюсах даже нет возможности указать явно ненулируемость

T &obj = ... <- пожалуйста, своего рода ненулябельный указатель

В конце концов если ненулябельность это прям такая суперпотребность то в чем проблема сделать обертку над любым ныжным «умным указателем».

flexible array members

За 7+ лет практики впервые услышал о таком. Не знаю как там в Си, но в плюсах эта штука не нужна от слова вообще, поэтому я и не знал о таком.

Cравни как выглядит указатель на функцию в сишечке и расте, или как массив таких функций. Боязнь синтаксиса раста исходит от нотаций лайфтаймов, но такой текст содержит дополнительную информацию, понятно что он будет страшнее. Для сравнения, посмотри как выглядят объявления с C++ core guidelines.

Для меня синтаксис Раста не выглядит страшно, он выглядит уродски. Синтаксис Си выглядит идеально, но пустовато, а синтаксис Си++ мне не просто прост, ясен, но чрезвычайно красив, особенно когда дело доходит до шаблонов уровня метапрограммирования, с ручной реализацией enable_if подобных конструкций например.

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

без #include язык ничтожен

Ну в С++20 вполне можно жить без #include. Есть import, который часть языка, а не препроцессора…

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

Ты, сам для себя, доказал, что земля плоская, поздравляю.

Основная.

Только к реальности отношения это не имеет.

Только к реальности отношения это не имеет.

«Я» - язык. «Рожа» - часть языка. Твои слова.

Никаких моих слов не было. Показывай.

У тебя какая-то фиксация на жопную тематику?

Просто здесь воняет, слишком много сектантов обгадились.

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

Препроцессор описан в стандарте языка.

Это ничего не значит.

Более того, в главе Language наравне с синтаксисом самого С.

Смотри в чём проблема, в этом все вы.

Если у нас есть стандарт языка, который описывает языка(судя по твоему балабольству выше), то откуда и зачем там глава Language? Это что, язык внутри языка? Или у тебя очень плохо с даже самой базовой логикой, как у любого другого адепта скриптухи. Ну других туда и не берут.

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

За 7+ лет практики впервые услышал о таком. Не знаю как там в Си, но в плюсах эта штука не нужна от слова вообще, поэтому я и не знал о таком.

В системном программировании часто применяется. Я даже видел структуру с двумя flexible array member, второй перед началом структуры и с отрицательными индексами.

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

Препроцессор описан в стандарте языка. Более того, в главе Language наравне с синтаксисом самого С. Нет никакого смысла рассматривать С/С++ без препроцессора хотя бы потому что без #include язык ничтожен. Так же и в расте, макросы - это неотъемлемая часть языка.

Все так, но можно свой препроцессор разработать, который будет запускаться перед компиляцией.
Какова задача препроцессора?
Так вот если препроцессорных директив не будет, то препроцессору C++ не чего будет делать /это о том, что и свой можно прикрутить/. Что касаемого описания в мануалах существующего, то это всего лишь предлагается использовать стандартный.

Владимир

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

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

template <typename ... Xs>
struct S {
    ~S() requires (((!std::is_trivially_destructible_v<Xs>) || ...)) {}
    ~S() requires (((std::is_trivially_destructible_v<Xs>) && ...)) = default;
};

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

Не соглашусь. От работы нужно кайфовать, ради денег работать глупо, жизнь одна, и она короткая.

Я кайфую с Си++. Более того он относится к многословным яп. В них +- стандартные языковые конструкции. Как-то читал какой-то алгоритм в книге толи Вирта толи кого-то такого, который вроде на Модуле или Аде написан - не помню как звался язык в общем что-то Паскалеподобное.

Так вот зная что-то одно Паскаль, Модулу, Си, Джаву, Шарп - но не зная других многословных яп - можно легко читать и понимать код любой сложности

Питоновый код без изучения языка не будет понятен, особенно если это что-то сложное.

Особенно неадекватно выглядит что то типа d,e = e,d - прям вырвиглазно.

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

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

То бишь KotlinC++ вполне реально разработать … /теоретически/.

Владимир

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

Зачем что-то придумывать поверх (лишние абстракции) когда напрашивается очевидное решение - в указателе что-то есть или там нет ничего (потому что ОС не смогла выделить память например).

да, либо проверила, что обращение вышло за границу массива и сгенерировала ошибку (сегфолт). они этого не понимают.

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

тебе тут стол заказов чтоли? иди учи с++

Class template std::tuple is a fixed-size collection of heterogeneous values. It is a generalization of std::pair.

If std::is_trivially_destructible<Ti>::value is true for every Ti in Types, the destructor of tuple is trivial.
anonymous
()
Ответ на: комментарий от bonta

Особенно неадекватно выглядит что то типа d,e = e,d - прям вырвиглазно.

В Rust, кстати, так можно, ну почти:

// d и e где-то выше определены:
let (d,e) = (e,d); // теперь d = старому e, e = старому d

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=841a17db802a931b4b4454a53d52e4b4

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

они это в апстрим продвинут)

А потом очередного учёного за госизмену закроют на 15 лет.
Не понимаю, зачем они там вообще работают...

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

Зачем ты мне принес убогий тупл, уноси его обратно, зачем он мне нужен? Откуда ты его вообще взял, каким боком он относится к моему реквесту? Роди мне реализацию этой цитаты на чистом си с классами или не позорься.

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

многоуровневые шаблоны, внутри которых может быть некорректное обращение к памяти

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

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

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

фп-стиль смотится чужеродно

Я бы не сказал, норм он смотрится. На столько что я изучил и начал пользовать, а уже потом, года через 3 после успешных применений всяких контролирующих техник (на осонове шаблонов) - ну например чтобы в метод могли войти только последовательные контейнеры, но не ассоциативные - узнал что многое из этого подходы ФП.

--

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

Мне повезло работать с кодом где придерживаются единой стилистики.

Ну и кстати где-то уже говорил ранее - я в курсе что о Си++ и Си говорят что большая часть ошибок в ПО это из-за ручной некорректной работы с памятью.

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

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

внутри которых может быть некорректное обращение к памяти

Бегом неси пример. Мне очень интересно посмотреть на разыменование указателя в compiletime-контексте.

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

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

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

для не знающего Раст это выглядит еще более странно чем в Питоне, потому что видя код из листинга ожидаешь от let - что-то вроде объявления объекта. А по факту этот оператор не только объявляет но и не объявляет объекты...

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

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

Дело вкуса.
Мне больше использование «по душе» использование метаданных, так как
тут вам и интроспекция и рефлексия, а главное в run-time мы знаем все об объектах и может использовать эти метаданные для многих целей.
Шаблоны же это всего лишь компилтайм.

Владимир

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

От работы нужно кайфовать, ради денег работать глупо, жизнь одна, и она короткая.

Согласен, именно потому что «жизнь одна» я не пишу на С++.

Я кайфую с Си++.

Если у тебя интересны задачи, для которых С++ адекватный выбор (но таких областей почти не осталось), то здорово конечно. Или хороший работодатель.

Более того он относится к многословным яп.

Странное «преимущество», если тебе не платят за количество введенных символов в редактор.

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

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

Питоновый код без изучения языка не будет понятен, особенно если это что-то сложное.

assembler, haskell, erlang, forth, vhdl, prolog и Lisp тоже будут непонятны. Как и многие другие «непривычные» языки и технологии. Это не означает, что _иной_ синтаксис: 1) не оправдан 2) что его изучение лишено смысла 3) синтаксис может отличаться еще и потому, что в языке в первую очередь иная *семантика*.

Особенно неадекватно выглядит что то типа d,e = e,d - прям вырвиглазно.

Просто сахар над (d, e) = (e, d) - что здесь вырвиглазного? Приведи _хороший_ пример перестановки значений переменных без использования третьей.

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

Просто сахар над (d, e) = (e, d) - что здесь вырвиглазного? Приведи хороший пример перестановки значений переменных без использования третьей.

Это не переменные и не перестановка их значений.

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

Просто сахар над (d, e) = (e, d)

Шутка

Нужно было использовать такой синтаксис

e<=>d

Владимир

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

Приведи хороший пример перестановки значений переменных без использования третьей.

std::swap(a,b);

:)

А так, (d, e) = (e, d) - тоже норм.

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

Приведи _хороший_ пример перестановки значений переменных без использования третьей.

Его нет и быть не обязано, т.к. под капотом всеравно будет использована 3-я. Да я в курсе про те самые битовые трюки, которые на собесах любят спрашивать, но это канает только к примитивными типам.

Так что в том же Расте, Питоне, уверен, что для примитивных может под капотом там и без третьей,но общий случай реализован через 3-ю переменную.

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

Нет, это не так работает. Твой swap дерьмо. Это не перестановка значений.

Это определение новых биндингов. Там могут быть разные типы.

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

для не знающего Раст это выглядит еще более странно чем в Питоне

Это Pattern Destructive + Shadowing. Такой синтаксис не только в расте, но и в F#. И возможно в других FP языках, но я их не знаю :)

Вот пример на F#:

let main () =
  let a = 0
  let b = 1
  let (a, b) = (b, a)
  printfn "a = %A, b = %A" a b

https://rextester.com/DKC20663

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

Макросня в расте в базе примитивный мусор. Такое огрызок сишных макропроцессоров из 70-80, даже синтаксис тот же. Он ничего не может.

Она может то, для чего предназначена. Примитивна она или нет важно только пубертатным школьникам, которые хотят что-то доказать товарищам во дворе.

Другой язык начинает с того момента, когда он начинает оперировать другими сущностями и иметь другой синтаксис.

Язык – это всего лишь подмножество строк, или предикат на множестве строк. Ты можешь записать строку в файл запустить rustc на этом файле и если он отработает без ошибки, значит исходная строка является текстом на языке rust.

Как минимум это означает, что базовый язык несостоятельный.

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

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

Мне больше использование «по душе» метаданных

Вот сейчас за компом делаю рефакторинг следующего кода.
Были исходники для 6-й и 7-й версии mxl /1С/.
Но из-за лени.
Сейчас изменяю код так, чтобы он правильно работал с 6-й и 7-й версиями mxl.
При этом class, template, … вовсе не используются.
Более того компилятор ни чего не знает о хидерах для 6-й и 7-й версии. Тогда закономерен вопрос «Как реализован код?».
А вот как.
В run-time парсятся все struct для 6-й и 7-й версий mxl и создаются метаданные, которые уже используются для работы с mxl.
Более того в run-time можно обработать пачку вложенных #include и все ok!

А template, … - ДЕТСКИЙ ЛЕПЕТ!

Владимир

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

Были исходники для 6-й и 7-й версии mxl /1С/.

Эээээ, НЕ ВОРОВАННЫЕ, а мои …

Владимир

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

Да там тонкая такая грань.

По шаблонам строятся конкретизированные классы/методы/ф-ии, понятное дело, в компилтайме.

Но потом, после постройки, есть те кто что-то вычисляет и делает в рантайме - например std::swap.

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

Примеры последнего

template <int n> 
struct factorial_c
{ 
    static const int64_t value = factorial_c<n-1>::value * n;
};
 
template < > 
struct factorial_c<0>
{
    static const int64_t value = 1 ; 
};

А есть и совмещение этих двух миров - например std::get от std::tuple - во времени компиляции определяет голову тайпла, а возврат значения головы - рантайм.

Кстати кто хочет освоить вычиления во время компиляции - веллком http://cpp-reference.ru/articles/expression-templates/

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

Владимир, я очень рад, что мне не приходится иметь дело с вашей системой.

Согласен с вами, но рассказал об этом, потому что это форум разработчиков … Что касаемо использования, то разрабатываю rapid систему.
Будет бесплатна.

Владимир

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

А есть и совмещение этих двух миров

Можно и так.
О том как у меня рассказал.
Все ведь зависит от задач …

Владимир

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

Мне очень интересно посмотреть на разыменование указателя в compiletime-контексте.

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

#include <iostream>

template <typename T1, typename T2>
inline T1 const& max(T1 const &a, T2 const &b) {
    return a < b ? b : a;
}
int main() {
    std::cerr << "start" << std::unitbuf << max(4.9, 4) << "end" << std::endl;
    return 0;
}

В лучшем случае здесь будет warning и сегфолт в рантайме. Для примера навороченных шаблонов - посмотри буст.

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

Это никому не нужно, это как раз то, почему кресты отпугивают людей. Зачем все это нужно, если одни и те же вычисления пишутся дважды – для темплейтов (еще и в убогой форме с идиотскими ограничениями) и для рантайма? Вычисления должны быть полиморфны относительно контекста исполнения настолько, насколько это возможно. Для этого в кресты был завезен constexpr.

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

Впрочем то-что разрабатываю имеется в каком-то виде в скриптовых языках.

Это отдельная тема …

Владимир

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

Ты бы это… на себя посмотрел бы. Зачем ты всем пытаешься доказать что раст несостоятельный? Не потому ли что у тебя горит от самого существования раста, боишься что объект твоего поклонения другие будут боготворить меньше, потому что перейдут на раст? И кто тогда здесь сектант?

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

Хорошо, вы, по крайней мере, вменяемы. А как от этого защищают дженерики и макросы…? Почему вы приводите эти проблемы так, будто это проблемы темплейтов, а не обобщенного кода как такового?

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

Это не переменные и не перестановка их значений.

Что еще расскажешь?

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

Она может то, для чего предназначена. Примитивна она или нет важно только пубертатным школьникам, которые хотят что-то доказать товарищам во дворе.

Пубертатный школьник опять сел в лужу. Никаких «предназначено нет». Эта такая же важная только пубертатным школьникам херня.

Язык – это всего лишь подмножество строк, или предикат на множестве строк.

Меня ретрансляция херни из первой строки гугла не интересует.

Ты можешь записать строку в файл запустить rustc на этом файле и если он отработает без ошибки, значит исходная строка является текстом на языке rust.

Нет, я выше назвал правильный критерий. Никакой язык через rustc не определяется.

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

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

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

под капотом там и без третьей,но общий случай реализован через 3-ю переменную.

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

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

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

Где (благодаря метапрограммированию и перегрузке операторов) математик может на Си++ описывать более близко к математике и более удобно для него...

Вроде такой итог той статьи. Вот только я могу уже подзабыть той ли это статьи :)

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

Т.е. связывания старых объектов с новыми именами. Там нет свапа вообще.

Очевидно, в питоне идет обмен именами ярлыков для тех же объектов (во внутреннем представлении cpython), но к чему ты это сказал совершенно неясно.

alienclaster ★★★
()

Вот и набежала с++ погань в тред, доколе?

Артисты с прыщами будут заходить в новости systemd, rust и выдавать своё нытьё за экспердное мнение ?

С++ токсики так горят, как будто их заставляют использовать раст, но нет.

При этом если посмотреть на этих царьков, то вся их аргументация уровня «Смотри как я знаю С++», но почему им так плохо?

Верно, страх, в многих проектах с++ легаси выкидывают и вставляют раст, другие языки.

Когда-то синтаксис-обезьяны, не решающие полезных задач, считали себя высшей расой.

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

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

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

Но почему именно на расте сконцентрировано внимание? Верно, титулы.

С++ синтаксис обезьяна уже не может похвастаться, что осваивает что-то сложное, тяжелое, умное, единственное и особенное.

До недавних пор с++ говногод, с++ ужасный синтаксис - были самыми частыми фразами в многих темах.

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

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

Ну смысл не в трюке. Работает это в этой убогой скриптухе потому, что она вся скриптуха. Т.е. в ней нет переменных, все данные существуют в гц ворованном.

Почему там такого понятия как swap нету. Ну и в этой скриптухе тоже. Там они когда пытались кое как родить await-убожество из-за этого обмазывались unsafe-дерьмом. Но это нормальное их состояние - ничего не мочь.

Почему это в скриптухе работает - особенность реализации. Там назначение этого где-то в ранней фпешной скриптухе было - это попытки в полиморфизм.

Само же переопределение - это базовая фича и она должна быть. Зачем - всё очень просто. Вот у тебя есть твоё auto c = factorial_c<a> + factorial_c<b>, а после ты хочешь сделать c += factorial_c<e> - ты не можешь мутировать тип у объекта, поэтому ты можешь просто его переопределить.

В общем мутации типов/переопределения - это фундаментальная фича в нормальном языке.

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

я выше назвал правильный критерий

Другой язык начинает с того момента, когда он начинает оперировать другими сущностями и иметь другой синтаксис.

Этот что ли критерий? Синтаксис, это множество правил, которые определяют является ли строка текстом на заданном языке.

Есть множество правил, которые определяют корректный раст без макросов (это часть синтаксиса раста), есть множество правил которые определяют корректный макрос раста. А есть правила, которые указывают как комбинировать макросы и текст без макросов чтобы получить текст на расте. Все это вместе – синтаксис раста. Как и многие другие множества, в этом множестве есть разные подмножества. Это не значит что в нем разные языки.

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

vlad9486
()
Последнее исправление: vlad9486 (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.