Здравствуйте, johny5, Вы писали:
J>Неужели современного опыта недостаточно чтобы начать активно депрекейтить фичи С++? Как то побороть эту безысходность, заодно избавиться от необходимости выдумывать "следующий С++" с нуля.
А что такого страшного в плюсах надо задепрекейтить? Про модули уже сказали, должно стать лучше. Что ещё?
Здравствуйте, johny5, Вы писали:
J>В Расте самое удачное что я слышал, в манифесте прописываешь версию компилятора для которого написан проект. И точка. Раст сам соберёт все либы с компилятором их версии и слинкует воедино.
Не совсем. В Rust можно указать минимальную версию компиялтора для проекта, но думаю это к обсуждаемому вопросу отношения не имеет.
Там можно для каждого crate (библиотеки) и каждого исполняемого файла указать редакция языка которую эта библиотека
использует.
J>Неужели современного опыта недостаточно чтобы начать активно депрекейтить фичи С++? Как то побороть эту безысходность, заодно избавиться от необходимости выдумывать "следующий С++" с нуля.
Проблема с использованием разных редакция языка для разных компонентов программы очевидно упирается
в заголовочные файлы. Повсеместное переход на модули скорее всего решит эту проблему,
но этого нужно будет очень долго ждать.
Думаю, что начать надо с разборах посыла.
J>Главный костыль в развитии С++ это, общеизвестно, обратная совместимость. Нанесли новой мебели а мусор не убрали.
Общеизвестно и давно доказано, что когда нет аргументов, достаточно вставить подобную фразу, и текст сразу будет выглядеть весомее.
По делу: согласен с Nuzhny — в чем проблема-то? Лично я на себе за 20 лет с плюсами проблемы с обратной совместимостью не встречал. Ну либо не заметил, что это серьезная проблема.
Здравствуйте, johny5, Вы писали:
J>Главный костыль в развитии С++ это, общеизвестно, обратная совместимость. Нанесли новой мебели а мусор не убрали. J>Причём это такой априори непреодолимый барьер, после которого все должны расходиться с понурыми головами, мол, дааа.. тут всё понятно.
Я не вижу тут никакой проблемы. В С++ есть встроенное средство позволяющие писать не только на новой версии языка, но вообще, на любом языке, например, можно написать так: extern "Johny+" { /ещё один лучший в мире язык/ }
лишь бы компилятор поддерживал.
Главный костыль в развитии С++ это, общеизвестно, обратная совместимость. Нанесли новой мебели а мусор не убрали.
Причём это такой априори непреодолимый барьер, после которого все должны расходиться с понурыми головами, мол, дааа.. тут всё понятно.
При этом на рынке существует уйма всяких языков и перед каждым стоит та же самая проблема. И каждый из них так или иначе решает эту проблему.
Тут я примеров знаю мало, например вроде как не очень удачный пример с 2->3 Питоном, хотя комьюнити не разбежалось и даже наслаждается.
В C# помоему нужно просто указать .net сборку, чтобы выбрать версию компилятора. Не знаю что там с компиляцией и линковкой старого кода.
В Расте самое удачное что я слышал, в манифесте прописываешь версию компилятора для которого написан проект. И точка. Раст сам соберёт все либы с компилятором их версии и слинкует воедино.
Неужели современного опыта недостаточно чтобы начать активно депрекейтить фичи С++? Как то побороть эту безысходность, заодно избавиться от необходимости выдумывать "следующий С++" с нуля.
Здравствуйте, B0FEE664, Вы писали:
BFE>Я не вижу тут никакой проблемы. В С++ есть встроенное средство позволяющие писать не только на новой версии языка, но вообще, на любом языке, например, можно написать так: BFE>extern "Johny+" { /ещё один лучший в мире язык/ } BFE>лишь бы компилятор поддерживал.
Что же нет таких компиляторов где бы можно было просто писать
Здравствуйте, _NN_, Вы писали:
_NN>Cpp2 _NN>Carbon
_NN>Оно?
Да, я оттуда и пришёл, просто стало непонятно почему просто в самом С++ нельзя было сделать такие же изменения. Я сейчас даже не о том, что кое что в этих "новых" языках достаточно спорно.
И ответ про header-ы меня впринципе удовлетворил. С++ код это пока неделимый монолит, и поэтому о какой то версионности речи не идёт.
BFE>Я не вижу тут никакой проблемы. В С++ есть встроенное средство позволяющие писать не только на новой версии языка, но вообще, на любом языке, например, можно написать так: BFE>extern "Johny+" { /ещё один лучший в мире язык/ }
Здравствуйте, σ, Вы писали:
BFE>>Я не вижу тут никакой проблемы. В С++ есть встроенное средство позволяющие писать не только на новой версии языка, но вообще, на любом языке, например, можно написать так: BFE>>extern "Johny+" { /ещё один лучший в мире язык/ }
σ>https://timsong-cpp.github.io/cppwp/n4868/dcl.link#nt:linkage-specification : σ> externstring-literal { declaration-seqopt }
σ>declaration-seq это та же цепепешная грамматика, произвольный язык ты туда не впихнёшь
Внимательно прочитайте:
The string-literal indicates the required language linkage. This document specifies the semantics for the string-literals "C" and "C++". Use of a string-literal other than "C" or "C++" is conditionally-supported, with implementation-defined semantics. [Note: Therefore, a linkage-specification with a string-literal that is unknown to the implementation requires a diagnostic. —end note] [Note: It is recommended that the spelling of the string-literal be taken from the document defining that language. For example, Ada (not ADA) and Fortran or FORTRAN, depending on the vintage. —end note]
Я так понимаю, что этот стандарт описывает только "C" or "C++", но это никак не мешает расширить стандарт на другие языки.
The string-literal indicates the required language linkage. This document specifies the semantics for the string-literals "C" and "C++". Use of a string-literal other than "C" or "C++" is conditionally-supported, with implementation-defined semantics.
Сам вижу, что не syntax. О чём и было сказано в моём предыдущем сообщении.
А многие знают что так можно? (Даже Сигма удивлён)
Говорят, что было где-то когда-то extern "Pascal", но я не встречал.
И нужно понимать, что добавляя эту внешнюю линковку нужно сохранять совместимость с другим кодом С++, что мне представляется не всегда возможным.
Здравствуйте, σ, Вы писали:
BFE>>Внимательно прочитайте: BFE>>
The string-literal indicates the required language linkage. This document specifies the semantics for the string-literals "C" and "C++". Use of a string-literal other than "C" or "C++" is conditionally-supported, with implementation-defined semantics.
σ>Сам вижу, что не syntax. О чём и было сказано в моём предыдущем сообщении.
Ну это не серьёзно.
Во-первых, раз требуется диагностика на неизвестный язык, то нет не формальных причин следовать указанному синтаксису.
Во-вторых, можно следовать указанному синтаксису и линковать этот С++ код с кодом любого другого языка.
BFE>Я не вижу тут никакой проблемы. В С++ есть встроенное средство позволяющие писать не только на новой версии языка, но вообще, на любом языке, например, можно написать так: BFE>extern "Johny+" { /ещё один лучший в мире язык/ } BFE>лишь бы компилятор поддерживал.
Если что, есть libffi
Хочешь быть счастливым — будь им!
Без булдырабыз!!!