Краткое объяснение C Supersets? - PullRequest
0 голосов
/ 23 марта 2012

Я все больше и больше путаюсь с суперсетами Си, чем дальше я углубляюсь в мир программирования. Существует так много версий .. C, C ++, C #, Objective-C, Objective-C ++, и Бог знает, что еще.

Я знаю только лакомые кусочки об этих языках (некоторые объектно-ориентированные, некоторые процедурные, C изначально разрабатывался для UNIX, C ++ начинался как расширение и используется в основном в ОС Windows, Objective-C в основном используется в Linux и Mac OS / iOS и т. д.), но я даже не уверен, что то, что я знаю, правильно.

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

Обновление
Кроме того, я надеюсь в конечном итоге начать разработку собственных (без использования плагинов, таких как .NET Framework) приложений для Windows и Mac, поэтому кто-нибудь может подтвердить, что мне нужно будет изучать C ++ для Windows и Objective-C для Mac?

Ответы [ 2 ]

1 голос
/ 23 марта 2012

C ++ начал свою жизнь как «C с классами», когда Бьярн Страуструп, работавший в AT & T, стремился добавить такие функции, как методы и наследование, в структуры C таким способом, который требует как можно меньшей поддержки из библиотеки времени выполнения. На классы, добавленные в "C с классами", очень сильно влияет язык Simula. С тех пор он включает в себя ряд других функций, среди которых важными являются дженерики, лямбда-функции и выразительная библиотека стандартных типов.

Objective-C начал жизнь, не слишком отличающуюся от его текущего состояния, за исключением того, что он был первоначально реализован как препроцессор Си. Брэд Кокс в своей компании Stepstone хотел объединить мощь объектно-ориентированной модели Smalltalk с производительностью собственного исполнения C. Objective-C использует динамическую систему передачи сообщений для отправки вызовов объектам, дизайн, который прямо противоположен цели C ++ - делать все в компиляторе. Таким образом, хотя objc и c ++ начинаются с одной и той же базы, результаты очень разные.

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

Objective-C ++ опирается на тот факт, что GCC (или LLVM) может генерировать код на любом языке, поэтому разработчики компиляторов позволяют вам использовать функции обоих в одном и том же исходном файле. Существуют некоторые ограничения на то, что возможно на пограничном уровне, и Objective-C ++ в основном используется либо для адаптации библиотеки C ++ к приложению Objective-C, либо для использования типов данных STL или Boost из C ++ внутри класса Objective-C.

Наконец, такие языки, как C # и Java, вовсе не являются надмножествами C или C-потомками. Они используют C-подобный синтаксис для обеспечения некоторого знакомства (и, возможно, чтобы не думать о разработке синтаксиса языка de novo ), но это разные звери, которые работают совсем по-другому.

0 голосов
/ 23 марта 2012

Вы путаете название языка с тем, что оно должно было означать.

C был первым, процедурным и не общим (низкий уровень), как выможет знать.

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

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

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

(Objective-)C, используемый в основном в Linux, не совсем корректен.Весь KDE - C++, для одного.C++ в первую очередь для Windows не совсем верно, OS API для всех - C.То, что Microsoft сделала из C++ API (MFC / ATL), - это настоящий ад.Microsoft продвигает C# вместе со связанными вещами .Net.Так что C# следует рассматривать в основном как Windows, хотя в настоящее время предпринимаются усилия по созданию кроссплатформенной альтернативы .Net (моно).API Apple Foundation Objective-C, но все API-интерфейсы ОС все еще C.

"Supersets" - неправильная терминология.C не является подмножеством C++.Оба имеют общее подмножество.Только Objective-C(++) является чисто расширенным набором C(++).

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

...