Есть ли язык с С++ без C-атрибутов?

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

Изменить/уточнить: Настоящий убийца для меня находится в этом втором предложении. Есть ли язык, действительно разработанный с нуля, который не навязывает то, что вы не хотите в своем коде? С++ имеет это как философию дизайна: не хотите RTTI? Этого не существует. Не хотите сбор мусора? Это не так. Проблема с С++ заключается в том, что (IMO) нарушает это требование, когда он отказывается отрываться от прошлого. Я не хочу, чтобы крутизна обратной совместимости с 20-летним кодом мешала мне идти вперед. С++ не хочет этого делать. Что есть/есть?

Edit2: Полагаю, мне следовало бы более четко узнать, что такое стоимость. Существует несколько потенциальных затрат. Тот, на котором я первоначально фокусировался, был временем выполнения.

В С++ полиморфизм через виртуальные методы имеет стоимость. Но не все методы оплачивают эту стоимость. Вызывается не виртуальный метод С++ с одинаковой стоимостью времени выполнения, как простая старая функция C (имеющая хотя бы один параметр). С++ не требует использования полиморфизма. В других языках ООП все методы являются виртуальными и поэтому нельзя избежать затрат на полиморфизм.

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

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

Ответ 1

язык D

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

Общий вид D похож на C и С++. Это облегчает изучение и код порта для D. Переход от C/С++ к D должен быть естественным. Программисту не придется изучать совершенно новый способ делать что-то.

D снижает совместимость исходного кода C. Расширения C, которые поддерживают совместимость с исходным кодом, уже выполнены (С++ и ObjectiveC). Дальнейшая работа в этой области затруднена таким количеством устаревшего кода, что маловероятно, что могут быть сделаны значительные улучшения.

Ответ 2

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

Если вы обнаружите сбор мусора и явные объектно-ориентированные функции "пух", то, честно говоря, я думаю, что C, вероятно, лучший кандидат. Язык на самом деле небольшой и элегантно оформленный. Он отвечает большинству требований "вписывается в одну голову". Для языка, который обеспечивает такой тесный контроль над оборудованием, он очень выразителен.

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

Если есть некоторые функции более высокого уровня, которые вы "не можете жить без" (кажется, что вы подразумеваете, назвав "С++ без совместимости с C" в качестве вашего языка выбора), тогда вы должны четко указать, что это такое. Что именно С++ приносит в таблицу, которую вы не хотите жертвовать?

Ответ 5

SPECS является альтернативным синтаксическим связыванием для С++. Эта привязка включает простой синтаксис для объявления и определения типов, функций, объектов и шаблонов и изменения нескольких проблемных операторов и структур управления. Получаемый синтаксис является LALR (1) parsable.

Ответ 6

Eiffel. Похож на Pascal, имеет семантику типа С++. Кроме того, добавляются специальные утверждения "программирование по контракту", которые встроены в определение языка, за несколько лет до того, как люди говорили о библиотеках модулей "X".

Ответ 7

Попробуйте айкидо. Синтаксически похож на С++, и я не думаю, что он наследует обратную совместимость стиля C.

Айкидо @Википедия

Ответ 8

Я не совсем уверен, что стоит для обратной совместимости с C...

Ответ 9

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

Изменить: нечетно, что я не заметил сообщение прямо под мной с тем же комментарием первой строки