Обновление: Принципиальным отличием является то, что self-типы могут зависеть от нескольких классов (я допускаю, что это немного угловой случай). Например, у вас может быть
class Person {
//...
def name: String = "...";
}
class Expense {
def cost: Int = 123;
}
trait Employee {
this: Person with Expense =>
// ...
def roomNo: Int;
def officeLabel: String = name + "/" + roomNo;
}
Это позволяет добавить миксин Employee
просто ко всему, что является подклассом Person
и Expense
. Конечно, это имеет смысл только в том случае, если Expense
распространяется на Person
или наоборот. Дело в том, что использование self-типов Employee
может быть независимым от иерархии классов, от которых она зависит. Неважно, что расширяет что - Если вы переключаете иерархию Expense
против Person
, вам не нужно изменять Employee
.
Обычно я бы бросил вам кучу ласковых слов на такую тему, но оказывается, что именно этот вопрос был изучен (это .doc файл. извините).
У Rational был компилятор с большим объемом кода на обоих языках и большим объемом данных, собранных за несколько лет о количестве ошибок, времени исправления и т. Д. Из любопытства один из их инженеров подсчитал числа.
Ответ был: «Стоимость разработки C превышает затраты на разработку Ada». Если вы прочитаете заголовок резюме, то увидите, что, по их расчетам, написание того же кода на Ada обходится им примерно вдвое меньше, чем стоимость написания его на C .
Я знаю, что каждый, кто читает это, очень хочет вытащить дыры в этом заключении. Я тоже. Но они смотрели на чертовски почти со всех сторон, которые я мог придумать в отчете.
Возможно, но на каком языке был написан ваш компилятор Ada? Ада? А как насчет компилятора, который пишет ваш ПЕРВЫЙ компилятор Ada?
В какой-то момент, когда вы создаете программное обеспечение, формальная семантика и программные процессы гораздо важнее, чем язык, на котором что-то было написано.
"Better" in what way? Better as in faster? Better as in less bugs? Better as in more portable? Better as in more readable? Better as in more extensible?
For any suitable definition of "better" arguments can be made either way. However, it is just about sacred writ that no compiled language is more portable than C. Thus, if one of your goals is to make your application highly portable, C is an excellent choice.
More people understand C than Ada. Writing erlang extensions might be much harder if it was written in Ada, simply because fewer people are conversant with the language.
C code can be highly performant, but I am aware of no comparisons between C and Ada w/r to compiler optimizations.
Ada's type checking might be useful, or it could be a real problem. One presumes that a VM does it's own type checking on the pieces that matter to it. The overhead of RTTC in Ada could impose a completely unnecessary burden.