Что мог “потерять” C/C++, если бы они определили стандартный ABI?

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

27
задан AraK 17 January 2010 в 23:21
поделиться

5 ответов

Попробуйте FirebingSQL (ранее Borland Interbase). Имеет режим «Superserver» и «Classic». Первый представляет собой обычный многопоточный сервер базы данных, а второй - классическую модель «один процесс на соединение». Различные процессы координируются главным образом посредством блокировки файлов данных на уровне ОС. Насколько я знаю, вы можете встроить классический сервер в свой собственный код. Тогда ваше приложение станет еще одним классическим процессом.

http://www.firebirdfaq.org/faq25/
http://www.firebirdfaq.org/Firebird-Embedded-Linux-HOWTO.html

Обновление: не прочитал часть Java. В этом случае вам, вероятно, лучше с любым из других ответов.

Обновление: Когда я говорю «блокировка», я не имею в виду, что это блокировка всей базы данных одновременно. Даже в классическом режиме это все равно полноценная RDBMS. Тем не менее, я недостаточно хорошо знаю программное обеспечение, чтобы рассказать, что на самом деле происходит под капотом.

-121--2447987-

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

  1. Вероятность каждого значения такая, какой вы его и предполагали.
  2. Все ролики являются взаимно независимыми событиями.

Вы можете проверить, являются ли частоты рулонов кости приблизительно правильными, используя тест Пирсона Хи-квадрат . Если используется хороший генератор случайного числа, например Twister Мерсенна (что является значением по умолчанию в стандарте lib для большинства современных языков, но не для C и C++)и вы не используете какое-либо сохраненное состояние из предыдущих рулонов, кроме самого генератора Мерсенна Твистера, тогда ваши рулоны для всех практических целей независимы друг от друга.

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

-121--2591032-

Свобода реализовать вещи наиболее естественным способом на каждом процессоре.

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

38
ответ дан 28 November 2019 в 04:22
поделиться

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

6
ответ дан 28 November 2019 в 04:22
поделиться

, а не общий ABI для всех платформ (что было бы катастрофически, так как было бы оптимально только для одной платформы). Комитет по стандарту может сказать, что каждая платформа будет соответствовать определенному ABI.

Но: Кто его определяет (первый компилятор через дверь?). В этом случае они получают чрезмерное конкурентное преимущество. Или комитет после 5 лет компиляторов (что было бы еще одной ужасной идеей).

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

7
ответ дан 28 November 2019 в 04:22
поделиться

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

10
ответ дан 28 November 2019 в 04:22
поделиться

Ну не будет ни одного стандарта ABI, а около 1000. Вам понадобится один для каждого комбинации ОС и архитектуры процессора.

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

Я думаю, что ситуация прямо сейчас в порядке. Любая ОС БЕСПЛАТНО определить abi для себя (и они делают), что имеет смысл. Это должна быть работа ОС для определения его ABI, а не стандарт C / C ++.

4
ответ дан 28 November 2019 в 04:22
поделиться