Существует ли язык в стиле C ++ без атрибутов C? - PullRequest
11 голосов
/ 12 июня 2009

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

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

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

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

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

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

Ответы [ 9 ]

23 голосов
/ 12 июня 2009

D язык

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

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

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

4 голосов
/ 12 июня 2009

Ада - другая альтернатива - gc является необязательным в реализации языка:

http://en.wikipedia.org/wiki/Ada_(programming_language)

4 голосов
/ 12 июня 2009

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

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

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

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

1 голос
/ 12 июня 2009

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

1 голос
/ 12 июня 2009

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

1 голос
/ 12 июня 2009

Вы также можете попробовать Ch из: http://www.softintegration.com/

0 голосов
/ 13 июня 2009

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

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

0 голосов
/ 12 июня 2009

Я не совсем уверен, сколько стоит обратная совместимость с C ...

0 голосов
/ 12 июня 2009

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

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

...