, чуть раньше тебя запостили. Этот ответ очень показателен, кстати. Чем брать людей которым все будет не нравится, а на такое уже при переходе Юникс/Виндоуз программистов на Мак было, лучше уж взять готового.
Дык в вакансии и на собеседовании нужно прямым текстом говорить чем прийдется заниматься и не будет недовольных. Типа вот так (для вашего случая):
"Требуется маковый разработчик или разработчик с с юниховым бекграундом для разработки (гуевого приложения? системного сервиса? драйвера? игрушки? нужное подчеркнуть) на Мак. Знакомство с маком на уровне пользователя, с ифоном, обжектив-с на уровне программиста приветствуется".
А не так как у нас народ любит делать: крупный интересный проект, мультимедия, сервер-сайд, хайл-лоад, булшит паттерн; приходишь: вот тут у нас есть легаси овно, в котором надо бы баги в гуях пофиксить.
Здравствуйте, kaa.python, Вы писали:
KP>Про второе предупреждение компилятора комментарии будут, или ты таким странным способом признаешь то что слил в данном вопросе?
Ох уж эти универсалы Боюсь у нас не получится дискуссии без понимая основ, например статической и динамической типизации. Можешь считать, что я слил, но лучше купи хорошую основательную книгу по Objective C и вдумчиво прочитай.
Здравствуйте, MTD, Вы писали:
MTD>Например, механизм сообщений позволяет посылать сообщения объекту который их не поддерживает (аналог вызовов методов в С++), что приводит к сущему аду из-за опечаток.
С тем же успехом можно сказать, что C++ — кривое овно, т. к. в нем можно влегкую вызвать непереопределенную чистую виртуальную функцию. На практике же, что там, что там компилятор выдаст предупреждение.
Чтобы ты не думал, что я зря наезжаю, вот тебе для затравки информация из википедии:
Одной из отличительных черт Objective-C является его динамичность — целый ряд решений, обычно принимаемых на этапе компиляции, здесь откладывается непосредственно до этапа выполнения.
Ещё одной из особенностей языка является то, что он message-oriented в то время как C++ — function-oriented. Это значит, что в нём вызовы метода интерпретируются не как вызов функции (хотя к этому обычно все сводится), а именно как посылка сообщения (с именем и аргументами) объекту, подобно тому, как это происходит в Smalltalk-е.
Такой подход дает целый ряд плюсов — так любому объекту можно послать любое сообщение. Объект может вместо обработки сообщения просто переслать его другому объекту для обработки (так называемое делегирование), в частности именно так можно легко реализовать распределенные объекты (то есть объекты, находящиеся в различных адресных пространствах и даже на разных компьютерах).
Привязка сообщения к соответствующей функции происходит непосредственно на этапе выполнения.
Я понял, ты не слил, это только кажется. Поэтому ты ничего не можешь сказать про предупреждение компилятора о том, что используемого тобой метода не существует. И по этой же причине ты пытаешься перевезти тему на мое незнание Objective-C, типов типизации и прочее. Кстати, тебя кто-то советовать что мне прочитать просил? Если нет, то лучше не советуй.
Здравствуйте, MescalitoPeyot, Вы писали:
MP>Здравствуйте, MTD, Вы писали:
MTD>>Например, механизм сообщений позволяет посылать сообщения объекту который их не поддерживает (аналог вызовов методов в С++), что приводит к сущему аду из-за опечаток.
MP>С тем же успехом можно сказать, что C++ — кривое овно, т. к. в нем можно влегкую вызвать непереопределенную чистую виртуальную функцию.
Нельзя в легкую вызвать. Для этого надо хачить с приведением типов.
MP>На практике же, что там, что там компилятор выдаст предупреждение.
Разницу между статической и динамической типизацией понимаешь?
Здравствуйте, kaa.python, Вы писали:
KP>Я понял, ты не слил, это только кажется. Поэтому ты ничего не можешь сказать про предупреждение компилятора о том, что используемого тобой метода не существует. И по этой же причине ты пытаешься перевезти тему на мое незнание Objective-C, типов типизации и прочее.
Так и есть
KP>Кстати, тебя кто-то советовать что мне прочитать просил? Если нет, то лучше не советуй.
Извини, не буду. Но без определенных знаний дискуссии не получится
Здравствуйте, MTD, Вы писали:
MTD>Чтобы ты не думал, что я зря наезжаю, вот тебе для затравки информация из википедии:
Я отлично знаю что написанно в Википедии по поводу Objective-C, как не крути, изрядный кусок этой статьи мой.
Так же я знаю то, что в случае с Objective-C компилятором от Apple, производится проверка типов на этапе компиляции. Я допускаю что не всегда и не везде, тем не менее, твой "трюк" с приведением к id компилятор отловил. А вот что бы отловил компилятор с приведением к void* в C++? И при этом я не утверждаю что Objective-C это верх совершенства, я просто говорю о том, что наделать в нем ошибок в той части, про которую ты говоришь довольно трудно.
Здравствуйте, kaa.python, Вы писали:
KP>Я отлично знаю что написанно в Википедии по поводу Objective-C, как не крути, изрядный кусок этой статьи мой.
Это хорошо. Тогда не понимаю причин непонимания
KP>Так же я знаю то, что в случае с Objective-C компилятором от Apple, производится проверка типов на этапе компиляции. Я допускаю что не всегда и не везде, тем не менее, твой "трюк" с приведением к id компилятор отловил.
Никакого трюка не было.
KP>А вот что бы отловил компилятор с приведением к void* в C++?
За приведение к void* на С++ отрывают руки.
KP>И при этом я не утверждаю что Objective-C это верх совершенства, я просто говорю о том, что наделать в нем ошибок в той части, про которую ты говоришь довольно трудно.
Наделать очень легко. Мой опыт разработки под Мак позволяет мне уверенно говорить об этом.
Здравствуйте, MTD, Вы писали:
MTD>Нельзя в легкую вызвать. Для этого надо хачить с приведением типов.
Можно. Притом в разных позах и без приведений http://codepad.org/4CkK5neC
MTD>Разницу между статической и динамической типизацией понимаешь?
Мой телепатический модуль подсказывает мне, что этот вопрос возник из-за непонимания вами механизма сообщений и принятых в Objective-C практик кодирования.
Здравствуйте, MTD, Вы писали:
MTD>Никакого трюка не было.
Трюк был. А судя по тому, что ты использовал Object, а не NSObject, можно предположить что ты используешь какой-то нестандартный Objective-C компилятор, например из GCC. И этот компилятор не проводит более-менее вменяемой диагностики ошибок.
MTD>За приведение к void* на С++ отрывают руки.
Тоже самое можно сказать в случае с Objective-C. Да, иногда подобное преобразование это вынужденная мера, но никак не нормальный код.
MTD>Наделать очень легко. Мой опыт разработки под Мак позволяет мне уверенно говорить об этом.
Мой опыт разработки под Мак говорит об обратном. Единственное потенциальное хранилище граблей в Objective-C — это управление памятью, все остальное, по количеству граблей на квадратный метр, не хуже чем в случае с C++.
Здравствуйте, MescalitoPeyot, Вы писали:
MP>Можно. Притом в разных позах и без приведений http://codepad.org/4CkK5neC
Во-первых, вызывать виртуальные функции в конструкторах/деструкторах нельзя — это азбука. Во-вторых, обрати внимание на реакцию компилятора.
MTD>>Разницу между статической и динамической типизацией понимаешь?
MP>Мой телепатический модуль подсказывает мне, что этот вопрос возник из-за непонимания вами механизма сообщений и принятых в Objective-C практик кодирования.
Здравствуйте, Miroff, Вы писали:
M>Здравствуйте, MTD, Вы писали:
MTD>>Я тебе больше скажу — это нигде не работает.
M>В Scala работает, в Haskel работает, в Ada работает, а ты говоришь нигде.
Это мягко говоря лукавство. На Аде пишут софт для спутников, а они падают, из-за этих самых ошибок
Здравствуйте, MTD, Вы писали:
MTD>Во-первых, вызывать виртуальные функции в конструкторах/деструкторах нельзя — это азбука.
Ну да, азбука. А в Objective-C другая азбука: нефиг чему попало посылать какие попало сообщения, даже если язык это позволяет.
MTD>Во-вторых, обрати внимание на реакцию компилятора.
Реакция точно такая же как и в Objective-C: предупреждение. К слову, его могло бы и не быть http://codepad.org/MRuqVFOl
MTD>Не понял ответ. Пояснишь?
Несмотря на то что выбор непосредственного метода для обработки сообщения происходит в рантайме (как и выбор виртуального метода в плюсах, замечу), во-первых, компилятор все равно проверяет наличие обработчика в компайл-тайме и в случае чего выдаст предупреждение и, во-вторых, нормальные люди просто так от нефиг не кастят объекты до id с тем чтобы послать им потом сообщения предназначенные наследникам. Если же им все-таки непоходимо докастится до id, то используется id<SomeProtocol> или селекторы.
В общем, все один в один как в плюсах: в ногу выстрелить разрешено, но целиться туда считается плохим тоном и обижает компилятор.
Здравствуйте, MescalitoPeyot, Вы писали:
MP>В общем, все один в один как в плюсах: в ногу выстрелить разрешено, но целиться туда считается плохим тоном и обижает компилятор.
Здравствуйте, kaa.python, Вы писали:
KP>Здравствуйте, MTD, Вы писали:
KP>Я понял, ты не слил, это только кажется. Поэтому ты ничего не можешь сказать про предупреждение компилятора о том, что используемого тобой метода не существует. И по этой же причине ты пытаешься перевезти тему на мое незнание Objective-C, типов типизации и прочее. Кстати, тебя кто-то советовать что мне прочитать просил? Если нет, то лучше не советуй.
У типа id этих методов нет. Вот и матерится. Но если в рантайме метод будет найден, то всё шоколадно.
Эх, люблю выпить и переспать с кем нибудь!
Но чаще выходит перепить с кем — нибудь и выспаться...