2009-05-17 71 views
22

我不知道Objective-C,但對我來說它似乎是一種很好的語言。但我知道的唯一環境就是蘋果的一切。但Objective-C甚至在GNU編譯器集合中。Objective-C僅用於Mac OS/iPhone上的開發嗎?

在開放的東西中是否缺少某些東西?或者Objective-C已經有了更廣泛的基礎?如果有公司選擇Objective-C來開發他們的產品,我很感興趣。

回答

36

我認爲ObjC通過歷史的怪癖和專有系統的本質而與蘋果世界隔絕。

首先,你需要從可可中分離出ObjC。 ObjC是一種非常原始的語言。我認爲這是一種非常優雅的語言,但它非常基本。您可以在C預處理器中實現ObjCv1。 C++和ObjC是在同一時間開發的。 C++投入了大量的基礎設施,爲基本上完全不同的語言帶來類C語法。 ObjC給C帶來了一個類Smalltalk的語法,幾乎沒有別的。即使像+alloc-release這樣的東西也不是ObjC的語言元素。他們是相當簡單的包裝malloc()free()。我們認爲ObjC並不是那麼有趣(我認爲它很優雅)。這與Smalltalk的性質非常相似。沒有它的對象庫,你可以用它做很多事情。有了它的對象庫,它非常強大。

NeXT在ObjC之上提供了稱爲NeXTSTEP的整個框架。由於NeXT計算機不是廣泛的商業成功,而NeXTSTEP是專有的,所以沒有多少人知道框架或底層語言。當蘋果購買它並將其變身爲可可時,它仍然是一個專有系統。

GNUStep就在那裏,但他們從來沒有開發任何有趣的東西來引入大量開發人員(主要的網絡瀏覽器或文字處理器等)。在過去的幾年中,可可已經遠遠領先於GNUStep。可能由於iPhone對Cocoa興趣的提高,GNUStep可能會重新煥發活力,並帶來一個不錯的跨平臺開發框架,但我對此表示懷疑。有C++背景的人會看C#並看到明顯的改進。當他們看着ObjC時,他們看到很多方括號,他們不指望他們。對於在「調用方法」範例中提出的人來說,Smalltalk的「傳遞消息」範式是陌生的,甚至有點可怕。許多開發人員認爲他們需要強類型語言來避免錯誤,並且對主要依賴程序員紀律和謹慎一致性的系統感到不舒服。攻擊C#中「正常工作」的東西要比ObjC容易得多。 ObjC真的希望更多的開發人員瞭解正在發生的事情,而不是依靠編譯器來保護你免受黑客攻擊。

基本上,人們知道C來自Unix和C++使得C爲感,Java使得在C++方面的意識,和C#是剛剛清理的Java。 ObjC不是這些中的任何一個。這是Smalltalk,沒有人再學習Smalltalk。

*我最近跟那個寫過+alloc的人聊了聊它的歷史,他反對說我把它叫做簡單的包裝,因爲它包含了區域。所以,你知道是誰的差異,+new這裏更換+alloc

16

那麼,還有一些人仍在爲GNUStep框架而開發。然而,我不知道這個社區有多活躍。

但大部分的Objective-C現在是一個蘋果的語言,用事實語言的「2.0」版本的推出爲OSX 10.5的一部分,似乎是一個純粹的內部開發如圖所示在蘋果的努力。

編輯:正如你可能知道的,Apple有一些叫做Cocoa框架的東西,它基本上是指整個Objective-C庫的庫,包括NSObject公共基類。 Cocoa是NextStep庫的延續,它是GNUStep的開源版本。所以你會發現許多NS前綴類的兩個地方,但蘋果並沒有阻止添加新的類或在Cocoa中改變它們,所以在GUI級別的互操作性實際上只是理論上的可能性。

+0

6秒打我GNUstep的! – Zifre 2009-05-17 14:19:57

+0

我不知道是否還有GNUStep開發,但前一段時間我在網上發現了etoile OS,它是活躍的。我的問題意思不同。我將調整 – 2009-05-17 14:22:36

+1

這個問題最初是由Brad Cox和Tom Love開發的,儘管維基百科引用Apple爲開發人員(http://en.wikipedia.org/wiki/Objective-C),因爲它是從他們最初由NeXT,然後由蘋果收購 – 2009-05-17 14:23:13

4

GNUstep。也有Étoilé這是用GNUstep構建的操作系統。

我認爲許多人更喜歡C或C++,如果他們想要更現代的語言,他們會使用C#或Java。

1

我認爲蘋果公司的實施得到了更好的支持,並仍處於積極的發展階段。還有其他一些地方,如GNUStep,但他們仍然看起來非常在NextStep/OpenStep級別。不幸的是,自那以後發生了很多事!

6

GNUstep的實際上是更積極的比大多數人認爲這是非常值得關注的。不難創建跨在GNUstep和Cocoa應用程序的工作(這意味着可能在OSX,運,Linux和BSD ...)

這些鏈接是絕對值得一試的人感興趣的話題:

http://www.gnu.org/software/gnustep/information/aboutGNUstep.html

http://etoileos.com/news/

http://www.nongnu.org/gap/

再有就是Cocotron,一個「開源項目,其目的是實現跨平臺的Objective-C API類似於蘋果公司的Cocoa文檔「中描述:

http://www.cocotron.org/

編輯:對於GNUstep的建成商用跨平臺產品的一個例子,看看Eggplant

10

@Stephen:我總是驚訝於人們如何從不閱讀我們的網站,甚至在說出這樣的事情之前檢查項目的進展。 :) GNUstep緊跟Cocoa,現在我們比OpenStep更多。如果你或者其他人想對這個主題有一個真正的意見,從SVN獲得GNUstep,那麼安裝它並嘗試一下。對你一無所知的事情的批評(如你在這裏的迴應所證明的)毫無意義。

格雷格C. GNUstep的首席開發