Обратная совместимость
От: johny5 Новая Зеландия
Дата: 09.12.22 10:19
Оценка: -1
Главный костыль в развитии С++ это, общеизвестно, обратная совместимость. Нанесли новой мебели а мусор не убрали.
Причём это такой априори непреодолимый барьер, после которого все должны расходиться с понурыми головами, мол, дааа.. тут всё понятно.

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

Тут я примеров знаю мало, например вроде как не очень удачный пример с 2->3 Питоном, хотя комьюнити не разбежалось и даже наслаждается.
В C# помоему нужно просто указать .net сборку, чтобы выбрать версию компилятора. Не знаю что там с компиляцией и линковкой старого кода.
В Расте самое удачное что я слышал, в манифесте прописываешь версию компилятора для которого написан проект. И точка. Раст сам соберёт все либы с компилятором их версии и слинкует воедино.

Неужели современного опыта недостаточно чтобы начать активно депрекейтить фичи С++? Как то побороть эту безысходность, заодно избавиться от необходимости выдумывать "следующий С++" с нуля.

Что думаете.
Re: Обратная совместимость
От: Zhendos  
Дата: 09.12.22 10:52
Оценка: +3
Здравствуйте, johny5, Вы писали:

J>В Расте самое удачное что я слышал, в манифесте прописываешь версию компилятора для которого написан проект. И точка. Раст сам соберёт все либы с компилятором их версии и слинкует воедино.


Не совсем. В Rust можно указать минимальную версию компиялтора для проекта, но думаю это к обсуждаемому вопросу отношения не имеет.
Там можно для каждого crate (библиотеки) и каждого исполняемого файла указать редакция языка которую эта библиотека
использует.

J>Неужели современного опыта недостаточно чтобы начать активно депрекейтить фичи С++? Как то побороть эту безысходность, заодно избавиться от необходимости выдумывать "следующий С++" с нуля.


Проблема с использованием разных редакция языка для разных компонентов программы очевидно упирается
в заголовочные файлы. Повсеместное переход на модули скорее всего решит эту проблему,
но этого нужно будет очень долго ждать.
Re: Обратная совместимость
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 09.12.22 12:26
Оценка: +6
Здравствуйте, johny5, Вы писали:

J>Неужели современного опыта недостаточно чтобы начать активно депрекейтить фичи С++? Как то побороть эту безысходность, заодно избавиться от необходимости выдумывать "следующий С++" с нуля.


А что такого страшного в плюсах надо задепрекейтить? Про модули уже сказали, должно стать лучше. Что ещё?
Re: Обратная совместимость
От: DiPaolo Россия  
Дата: 09.12.22 13:54
Оценка: +2
J>Что думаете.

Думаю, что начать надо с разборах посыла.

J>Главный костыль в развитии С++ это, общеизвестно, обратная совместимость. Нанесли новой мебели а мусор не убрали.


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

По делу: согласен с Nuzhny — в чем проблема-то? Лично я на себе за 20 лет с плюсами проблемы с обратной совместимостью не встречал. Ну либо не заметил, что это серьезная проблема.
Патриот здравого смысла
Re: Обратная совместимость
От: _NN_ www.nemerleweb.com
Дата: 10.12.22 17:49
Оценка:
Cpp2
Carbon

Оно?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: Обратная совместимость
От: johny5 Новая Зеландия
Дата: 11.12.22 11:16
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Cpp2

_NN>Carbon

_NN>Оно?


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

И ответ про header-ы меня впринципе удовлетворил. С++ код это пока неделимый монолит, и поэтому о какой то версионности речи не идёт.
Re: Обратная совместимость
От: B0FEE664  
Дата: 12.12.22 11:00
Оценка: :))
Здравствуйте, johny5, Вы писали:

J>Главный костыль в развитии С++ это, общеизвестно, обратная совместимость. Нанесли новой мебели а мусор не убрали.

J>Причём это такой априори непреодолимый барьер, после которого все должны расходиться с понурыми головами, мол, дааа.. тут всё понятно.

Я не вижу тут никакой проблемы. В С++ есть встроенное средство позволяющие писать не только на новой версии языка, но вообще, на любом языке, например, можно написать так:
extern "Johny+" { /ещё один лучший в мире язык/ }
лишь бы компилятор поддерживал.
И каждый день — без права на ошибку...
Re[2]: Обратная совместимость
От: kov_serg Россия  
Дата: 12.12.22 11:08
Оценка: :)
Здравствуйте, B0FEE664, Вы писали:

BFE>Я не вижу тут никакой проблемы. В С++ есть встроенное средство позволяющие писать не только на новой версии языка, но вообще, на любом языке, например, можно написать так:

BFE>extern "Johny+" { /ещё один лучший в мире язык/ }
BFE>лишь бы компилятор поддерживал.
Что же нет таких компиляторов где бы можно было просто писать
extern "cuda" { ... }
extern "sycl" { ... }
extern "opencl" { ... }
Отредактировано 12.12.2022 11:09 kov_serg . Предыдущая версия .
Re[2]: Обратная совместимость
От: σ  
Дата: 12.12.22 11:36
Оценка:
BFE>Я не вижу тут никакой проблемы. В С++ есть встроенное средство позволяющие писать не только на новой версии языка, но вообще, на любом языке, например, можно написать так:
BFE>extern "Johny+" { /ещё один лучший в мире язык/ }

https://timsong-cpp.github.io/cppwp/n4868/dcl.link#nt:linkage-specification :
extern string-literal { declaration-seqopt }

declaration-seq это та же цепепешная грамматика, произвольный язык ты туда не впихнёшь
Отредактировано 12.12.2022 13:10 σ . Предыдущая версия .
Re[3]: Обратная совместимость
От: B0FEE664  
Дата: 12.12.22 16:30
Оценка:
Здравствуйте, σ, Вы писали:

BFE>>Я не вижу тут никакой проблемы. В С++ есть встроенное средство позволяющие писать не только на новой версии языка, но вообще, на любом языке, например, можно написать так:

BFE>>extern "Johny+" { /ещё один лучший в мире язык/ }

σ>https://timsong-cpp.github.io/cppwp/n4868/dcl.link#nt:linkage-specification :

σ> extern string-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++", но это никак не мешает расширить стандарт на другие языки.
И каждый день — без права на ошибку...
Re[4]: Обратная совместимость
От: σ  
Дата: 12.12.22 16:32
Оценка:
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. О чём и было сказано в моём предыдущем сообщении.
Re[3]: Обратная совместимость
От: B0FEE664  
Дата: 12.12.22 16:44
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Что же нет таких компиляторов где бы можно было просто писать

_>
_>extern "cuda" { ... }
_>extern "sycl" { ... }
_>extern "opencl" { ... }
_>

А многие знают что так можно? (Даже Сигма удивлён)
Говорят, что было где-то когда-то extern "Pascal", но я не встречал.
И нужно понимать, что добавляя эту внешнюю линковку нужно сохранять совместимость с другим кодом С++, что мне представляется не всегда возможным.
И каждый день — без права на ошибку...
Отредактировано 12.12.2022 16:44 B0FEE664 . Предыдущая версия .
Re[5]: Обратная совместимость
От: B0FEE664  
Дата: 12.12.22 17:06
Оценка:
Здравствуйте, σ, Вы писали:

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. О чём и было сказано в моём предыдущем сообщении.

Ну это не серьёзно.
Во-первых, раз требуется диагностика на неизвестный язык, то нет не формальных причин следовать указанному синтаксису.
Во-вторых, можно следовать указанному синтаксису и линковать этот С++ код с кодом любого другого языка.
И каждый день — без права на ошибку...
Re[2]: Обратная совместимость
От: LaptevVV Россия  
Дата: 22.12.22 03:12
Оценка:
BFE>Я не вижу тут никакой проблемы. В С++ есть встроенное средство позволяющие писать не только на новой версии языка, но вообще, на любом языке, например, можно написать так:
BFE>extern "Johny+" { /ещё один лучший в мире язык/ }
BFE>лишь бы компилятор поддерживал.
Если что, есть libffi
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.