Pull to refresh

Comments 91

не пинайте сильно, статью на хабре писал в первый раз, надеюсь хабралюдям будет интересно
Мне как человеку, мягко говоря, далёкому от программирования под OSX, было очень интересно почитать. Будет здорово, если вы продолжите писать обзорные (ну и более глубокие тоже) статьи про это!
Небольшой минус - текст не очень хорошо вычитан, попадаются частенько опечатки и некоторые ляпы, но это мелочи :) Спасибо.
Буду стараться не влазить глубоко в дебри. Следующая часть будет полегче, просто про ObjC промолчать никак нельзя было
блин!!! буквально только вчера захотел разобраться с ObjC (не мак апи, а как он есть, в gcc). не скажу, что материал эксклюзивный, но видеть, что и этому уделяют внимание - здорово! Спасибо вам.
На хабр все-таки есть за чем заходить :)
вам на заметку: если нет макинтоша, но хочется использовать библиотеки NextSTEP, то есть проэкт gnuStep
да, знаю о таком :) спасибо. вобще сам Objective-C - потрясающая смесь несовместимых вещей с мощью С и красотой Smalltalk в необычной обертке-синтаксисе, а с такими библиотеками - вобще шедевр :)

п.с. маленькая придирка: слово "проект" пишется через е. ;)
а мне сама концепция передачи сообщений понравилась :-)
да-да, в этом суть! :) такое переосмысление написания кода очень развивает
"Ангар 51"

1 апреля 1998 года один из аналитиков опубликовал парадоксальное сообщение. Как оказалось, технологии Apple имеют внеземное происхождение. Более того - в тщательно охраняемом ангаре, где-то посреди техасской пустыни, несчастные инопланетные узники продолжают трудиться над техническим прогрессом и будущим вычислительной техники за глоток серно-аммиачной смеси, подвергаясь унижениям и притеснениям.


зы - юмор (:
1. А кроме gnustep есть что-то еще (под Windows)? Gnustep насколько я знаю реализует не весь объем классов представленных в Apple библиотеке, и код их использующий не совсем переносим между этими библиотеками.
2. Есть ли оригинальная Apple библиотека для Windows? Ведь itunes & safari как то под нее портировали. Я понимаю, конечно, Cocoa там не будет, но хотя б прикладные классы типа работы с сетью, файлами...
3. Как специалист, вы может быть разъясните момент: судя по всему при посылке сообщения объекту, поиск соответствующего метода производится сравнением строковых сигнатур имени сообщения и имени метода в объекте. Как тут дела с быстродействием?
Cocoa библиотека закрытая, созданая в Эпл, в ее основу положен OpenStep, но очень многое добавлено. Если бы все было так просто, мы бы с вами могли видеть альтернативу Mac OS X с открытым кодом.
а itunes & safari под Windows написаны не с Cocoa, это не реально.
судя по всему при посылке сообщения объекту, поиск соответствующего метода производится сравнением строковых сигнатур имени сообщения и имени метода в объекте. Как тут дела с быстродействием?
Сравниваются не сами строки, а хеши. Но всё равно вызов через рантайм конечно медленнее, чем обычный вызов функции через указатель.
1. вроде Некстовская библиотека была выпущена под винду и солярис, правда где-бы скачать я не нашел. Можете использовать gnuStep через Cygwin
2. Я думаю есть(правда не полная реализация), но с сами ей никто делится не собирается
3. ну по идее для ускорения поиска таблица по которой идет этот поиск кешируется.
При поиске соотв метода используюся селекторы - спец тип, с помощью которого можно однозначно идентифицировать метод.
С производительностью все нормально.
Кстати iTunes на Carbon'е(С) написан (Сафари таки Cocoa(ObjC) использует), по всей видимости в угоду производительности и низкоуровневым (относительно) функциям.
Запинаем, если не будет продолжения!! :)
Спасибо!
Очень интерестно! Продолжай в том же духе! Ожидаем с нетерпением новых частей.
Написано очень интересно! Интересным и не занудным языком :) Жду следующих статей! И начинаю осваивать Objective-C :)
Интересно посмотреть как писать код для другой операционки, такое ощущение, что попал в другой мир
Спасибо :) Писал одно время. Ща хочу начать опять))
не за что. Самому интересно - вот и пишу.
P.S.:карма у меня уже больше 5, а почему не могу в блог Apple перенести?
а ты подключен к блогу Apple? в блог писать могут только те, кто на него подписан:)
я сильно извинияюсь, а как к нему присоединится?
Заходите в блог Apple, там слева от названия блога будет квадратная "кнопка" с зеленой розеткой. На нее нажмите.
спасибо, а то что-то торможу я сегодня, сейчас перенесу
Вероятно, Вам нужно сначала "присоединиться" к этому блогу.
>Язык Objective-C поддерживает работу с метаинформацией
Вы уверены, что это называется метаинформацией? Я бы назвал это рефлекцией (reflection).
именно метаинформация - информация о типах. reflection как раз и основывается на такое информации. может не быть reflection, но reflection без метаинформации не может быть
Видимо, мы с вами оба отчасти правы :)
http://en.wikipedia.org/wiki/Metaprogramming
"Metaprogramming is the writing of computer programs that write or manipulate other programs (or themselves) as their data [...]
The ability of a programming language to be its own metalanguage is called reflection or reflexivity."
Вай, вай, вай! Как замечательно! Отличный обзор, так держать. Жду с нетерпением продолжения!
как ни странно, но сам Finder тоже написан на карбоне...

эх, и почему apple так не любит java'у :(
и почему не любит?
P.S.:на ЛОРе постоянно говорят то ява - торомз. Не верил, запустил явовское приложение(какой-то текстовый редактор), теперь верю
потому что java-cocoa deprecated, java5 сломана, а java6 до сих пор не зарелизена под леопард.

обсуждения про тормоза java в этой теме - оффтопик. да и лично у меня не тормозит, если честно
ява хороша там, где она хороша
macos x 10.5 (втч server) пока, увы, к "хороша" не отновится :(
т.е. "не относится"? ;)
да, на счет сервера нового читал очень конструктивную критику, ссылку правда потерял. но сам опыта не имел, так что ничего больше не скажу.
Что касается явы... ну это все-таки потрясающая технология, но, в моем представлении, не для десктоп-приложений
не относится, да, в macosx 10.5 server там тоже что-то сломали - азуреус третий не работает.
спасибо, было очень интересно почитать.
ничего, это только начало. Дальше будет интересней
а можно будет поподробнее про ruby-cocoa приложения? (:
ну если читатель захочет то куда я денусь? правда придется выучить руби и питон. Так что может подскажете хорошие мануалы на русском по этим языкам?
хм. для руби имхо единственная и отличная книга - rubybook - the "Programming Ruby" book (:
для новичков — может быть. а вообще признанная библия руби это The Ruby Way.
не хочу обламывать, но думаю, такие связки - узкая тема. Лучше отдельно уделить внимание Руби и отдельно - Apple API, а там все будет просто
не думаю. если он официально поддерживается apple и специально создана была ruby-cocoa, то почему бы и не рассказать (:
эмм... и правда:
>> ...Apple stated that RubyCocoa will be included and supported in Mac OS X v10.5 "Leopard"...
тогда вы, пожалуй, правы :) ну и Питон тогда уж! :)
отличная статья!
пока читал, вспомнил как програмил под OS/2 когда-то,
аж прослезился.
спасибо еще раз!
Замечательная статья!

Мысленно поставил "плюс".
история названия id Software:
Originally however, the company name has deeper roots than simple psychological reference. When working at Softdisk, the team that later founded id Software took the name "Ideas from the Deep" (a company created by John Romero and Lane Roathe in 1989), attributing themselves as "IFD guys". Since the term "id" can be seen as a shortening of IFD to "ID", some argue that it can still be pronounced "eye-dee". The I was later made lowercase in the release of the second Commander Keen series, eventually followed by the D. Since Wolfenstein 3D used the "id" pronunciation together with the mixed-case "iD", many argue that the capitalization is purely a stylistic choice.
вы текст сравните из wiki и тут изложенный
автор указал steps3d.narod.ru
там текст который в вики появился раньше, по крайней мере в обсуждениях на вики есть ссылка на него.
Меня всегда мучал вопрос о том на чем же под макосью можно кодить. Спасибо за статью, будем учиться)
Любителей кроссплатформенных фреймворков и Delphi-стого синтаксиса также может заинтересовать крайний билд Lazarus'а с поддержкой Carbon (да, надо бы начинать перетаскивать сиё чудо на Cocoa) в Lazarus Component Library.
Аффтару 5 баллов! Пишите еще подобного рода статьи!
ого! спасибо огромное! у меня начался второй семестр и программирование на си. до этого — серверными языками интересовался. и как раз думал, что начав изучать си в универе, начну изучать и разработку под мак. пока только консольные приложения — лабы — на си.

и тут еще раз спасибо за objective-c, xcode следующей статьи и вообще, за эту тему!
да не за что. В XCode сможете писать лабы на Си.
уже пишу :-)
первую сегодня сдаю
Под мак есть компилятор Delphi? У меня скоро лабы на нем пойдут.
Денис, ты головой хоть думай иногда. Какой нафиг Делфи? Борлонд - RIP. Делфи нам рассказывают исключительно потому, что преподы ничего другого не знают. Делфи нет и слава богу.
VMWare Fusion + WinXP тебе помогут

P.S.:Да, я ненавижу Делфи, причин много, кому интересно - напишу топик
Интересно. Прошу направить луч позора в сторону детища B/CG, дабы слиться в едином экстазе с другими полководцами холиварных воин, троллями & etc. в последующей дискуссии. Ждем-с.
да лень как-то сейчас. На делфи давно заставляли писать, уже желания особого нету. Правда через месяц новый учебный год, если какой-нибудь препод будет заставлять писать на делфи, то статья будет
Если будет желание взяться и, главное, появится свободное время - постучитесь. Возможно совместно сможем оформить сей никому не нужный опус (ну реально только холивар разводить) в относительно интересной форме (авось пара неокрепших неофитов сможет вычленить для себя что-нибудь интересное).

Язык/среда не важны. Под каждую задачу есть свои наиудобнейшие инструменты.
>Язык/среда не важны. Под каждую задачу есть свои наиудобнейшие инструменты.

не спорю, вот только еще не видел задач, в которых Делфи был бы наиудобнейшим инструментом
До появления .NET Framework (местами и после), многие задачи, требующие высокой абстракции и не имеющих низкоуровневых привязок, решались значительно быстрее с использование "фреймворка" Borland VCL + Third-party VCL.

С точки зрения rapid development'a VCL был наипростейшим из наидоступнейших. Повтрюсь, что местами так и остается.
Уточню, что имеется в виду исключительно разработка под Win32 и GUI приложения.

Отлично понимаю, как Delphi разрушает мозг молодым адептам. Тоже самое, заметьте, делает .NET. Многие, к сожалению, не способны Учиться. Проблема Delphi не в языке / среде / framework'e.
Многие, к сожалению, не способны Учиться
самое страшное, когда один из этих многих - твой препод по программированию :-(

Проблема Delphi не в языке / среде / framework'e.

согласен. ИМХО проблема в том, что порог вхождения у Delphi ниже чем у аналогов => он привлек к себе толпу codemonkeys, которые его и убили
Именно это я имел в виду, рад что сошлись во мнении. Аналогично дела обстоят с .NET Framework, только окромя этого MS делает все, чтобы "программирование вошло в каждый дом".

Я за последние 2 года столько швали увидел среди .NET "разработчиков". Благо есть адекваты, на хабре их много.
UFO landed and left these words here
Ну, как же. Серверные языки программирования. PHP, к примеру
UFO landed and left these words here
Ну, не сможете, значит не сможете. Не утрируйте.
Очень интересно. А вообще как быть если кто то хочет начать программы с 0 знаниями о мире програмирования ? (и скудными знаниями ENG языка)
Если есть желание - поможем. Но говорю сразу - будет трудно.
Читать книжки, учить ENG. А как вы хотели? За 2 секнуды стать мастером кунг-фу, как Нео в Матрице?
Очень много копипасты со steps3d.narod.ru, зачем тогда интернет придумывали? Очень мало оригинального контента в статье, чужие материалы не просто «использованы», а скопипащены вплоть до запятой.

Даже в копипасте всегда есть место творчеству, которое улучшает контент и делает его на шаг лучше; это называется реферат.
знаю. Там очень хорошо рассказано про ObjC, да еще и на русском, так зачем писать велосипед? Источник я указал. Следующие части будут чисто моими
Carbon - это все, что портировано на макось с других платформ (С и С++ потому, что). По этому то, что он не будет развиваться и не будет доступен для 64бит очень плозхо.
не, карбон создан для того, чтобы большие проекты и Classic перенести в OS X, например MS Office или Photoshop. Но от прогресса никуда не денешься и придется Адобу и Майкрософту потратится на програмеров хороших, а не на пиарщиков, чтобы переписать продукты, а то отсутствие флеш плеера под 64бит немного заставляет задуматься что такого сложного в реализации флеша.
Да черт с ним с Адобом, я в них не сомневаюсь, а что делать с GIPM'ом и прочей гнутой гуйней? Вопрос ее нужности я обсуждать не хочу (holy war), вопрос в отрезании портируемости.
Э.. стоп. GIMP же написан на GTK(порт которого есть на мак), под Mac OS X запускается только через X11, так что при чем тут карбон я немного не понимаю
Верно! Я наврал, получается. Спасибо, -1 повод для расстройства.
Спасибо! Давно уже хотел научиться писать хотя бы простенькие программы для Mac OS X!
не, тут в основном описание языка ObjC(которое я частично скопипастил ибо хорошо написано). Простенькие програмки будут в след. части
отличная статья для новичков, спасибо!
много вопросов, но это уже надо читать документацию по Obj-C. Эта статья поможет быстрее понять чтение английской доки.
> Обратите внимание, что в Objective-C все методы являются виртуальными, т.е. могут быть переопределены.

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

В примере ниже метод virt_f() виртуальная и при её вызове используется динамическое связывание (используется таблица виртуальных методов для определения адреса настоящего метода вне зависимости от того, каким типом был объявлен объект). Хоть и тип переменной f — foo, virt_f() вызывается из bar, так как это настоящий тип переменной.

Метод normal_f() был просто переопределён, но это не важно. Главное, что метод не виртуальный и компиялтор использует статическое связывание. Хоть метод normal_f() и был переопределен, но раз тип переменной f — foo, то и normal_f() вызывается из foo.

#include <iostream>

using std::cout;
using std::endl;

class foo
{
public:
virtual void virt_f()
{
cout << "foo::virt_f()" << endl;
}

void normal_f()
{
cout << "foo::normal_f()" << endl;
}
};

class bar: public foo
{
public:
virtual void virt_f()
{
cout << "bar::virt_f()" << endl;
}

void normal_f()
{
cout << "bar::normal_f()" << endl;
}
};

int main()
{
foo *f = new bar();
f->virt_f();
f->normal_f();
}

user@host$ g++ a.cc
user@host$ ./a.out
bar::virt_f()
foo::normal_f()
Only those users with full accounts are able to leave comments. Log in, please.