LINUX.ORG.RU

История изменений

Исправление Serral, (текущая версия) :

А кто умеет? C++ не умеет. Кто ещё? D?

Это уже фанатизм, когда реальность отвергается и начинаются попытки увести все в абстрактные рассуждения. Тот же QuickJS внутри использует расширения GNU, а значит несовместим даже с С. И код под разные компиляторы С тоже не всегда совместим. Не говоря уже про существование разных стандартов. Но при этом есть та самая реальность, когда авторы сишных библиотек делают так, чтоб их публичные хедера можно было использовать с разными компиляторами С и С++, а всякое несовместимое прячут за директивами препроцессора.

Убогая. Пробовал уже.

Да, поэтому в хедере quickjs.h есть комментарий:

/* Note: c++ does not like nested designators */ 

В чём выражается удобство?

В том, чтоб сначала не выписывать API руками, а потом еще не выписывать еще один уровень абстракции, чтоб не писать что-то вроде:

std::ffi::CStr::from_bytes_with_nul("value\0".as_bytes()).unwrap().as_ptr()

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

Исходная версия Serral, :

А кто умеет? C++ не умеет. Кто ещё? D?

Это уже фанатизм, когда реальность отвергается и начинаются попытки увести все в абстрактные рассуждения. Тот же QuickJS внутри использует расширения GNU, а значит несовместим даже с С. И код под разные компиляторы С тоже не всегда совместим. Не говоря уже про существование разных стандартов. Но при этом есть та самая реальность, когда авторы сишных библиотек делают так, чтоб их публичные хедера можно было использовать с разными компиляторами С и С++, а всякое несовместимое прячут за директивами препроцессора.

Убогая. Пробовал уже.

Да, поэтому в хедере quickjs.h есть комментарий:

/* Note: c++ does not like nested designators */ 

В чём выражается удобство?

В том чтоб сначала не выписывать API руками, а потом еще не выписывать еще один уровень абстракции, чтоб не писать что-то вроде:

std::ffi::CStr::from_bytes_with_nul("value\0".as_bytes()).unwrap().as_ptr()