Какао-наблюдения
С одной стороны, программировать под Мак — в удовольствие: тут нет такой жести, как в Винде, когда какая-нибудь функция возвращает указатели на структуру из 18 указателей, половина из которых указывает на массивы структур других указателей, или когда, наоборот, ссылку на такую структуру нужно передать в качестве одного из 8 параметров какой-нибудь функции, чтобы она в неё же запихала результат (а все остальные параметры сделать NULL, потому, что понять по документации, что они значат, невозможно).
Вот понадобилось мне на днях изменить шрифт в текстовом поле. Код угадал, не глядя в документацию (автозаполнение помогло, конечно); заработало с первого раза:
[textView setFont:[NSFont fontWithName:@"Arial" size:20]];
Что касается setFont:, то я просто предположил, что такой метод может быть, начал писать set..., и выбрал из списка setFont:, у которого единственный параметр — экземпляр класса NSFont. Как сделать нужный NSFont — угадывается по аналогии: очень часто названия конструкторов начинаются с типа создаваемого объекта, например у NSString есть конструктор stringWithContentsOfFile:encoding:error:, который возвращает содержимое файла; у NSArray есть конструктор arrayWithObjects:, который возвращает массив с переданным набором объектов; а у NSColor есть конструктор colorWithCalibratedRed:green:blue:alpha:, который, как нетрудно догадаться, возвращает цвет с заданными R, G, B и непрозрачностью с учётом каких-то цветовых профилей.
С другой стороны, эпловская терминология местами разрывает мозг. Иногда невозможно по три часа найти что-нибудь в документации просто потому, что ты ищешь, например, keyboard layout, а надо искать text input source.
Программируют на языке программирования, а не «под Мак» или «в Винде».
Высказывание: «С одной стороны, программировать на Ruby — в удовольствие: тут нет такой жести, как в Цэдвакреста» имеет смысл.
Высказывание: «С одной стороны, программировать под Мак — в удовольствие: тут нет такой жести, как в Винде» заставляет крепко задуматься, что же имел в виду автор. Первая мысль, которая пришла в голову мне — имеется в виду удобство интерфейса интегрированной среды разработки или что-то в этом роде.
Вы попытались сумничать, а написали ахинею. Мне даже лень пытаться вытащить вас из тех дебрей, в которых вы находитесь.
Пишут с использованием некого АПИ. А предоставляется он библиотеками, которые в свою очередь могут входить в состав конкретной операционной системы или языка программирования. Так, например, ничто не мешает писать с использованием стандартной библиотеки Си и какой-нибудь там glib в Винде, в Маке, и в огромном множестве других ОС. Код же при этом в целом будет одинаков с точностью до различий в реализации библиотек.
В километре 1000 метров. Москва — столица России. Земля вращается вокруг Солнца. В анлийском алфавите 26 букв.
Верно, Илья. Прописные истины. Но мой комментарий, видимо, предназначался в большей степени первому отписавшемуся.
А вот приведенный фрагмент кода — это какой язык программирования?
Objective C
keyboard layout, а надо искать text input source — от чего возникают такие долгие поиски? От того что в момент поиска нужно думать на английском?
Думать на английском для меня не проблема.
Долгие поиски возникают, как я написал в заметке, оттого, что «эпловская терминология местами разрывает мозг».
Почему они пишут так и не иначе вот это интересно =) Вспомнил пост про «Лучше быть правым чем последовательным».
Вы не правы, говоря о системе, из под которой ведется разработка :)
«…Что касается setFont:, то я просто предположил, что такой метод может быть, начал писать set..., и выбрал из списка setFont:, у которого единственный параметр — экземпляр класса NSFont. Как сделать нужный NSFont…»
Очень напоминает слова любого программиста пересевшего на c си на .NET (C#, например).
Проблема не в операционной системе, а в языке (его спецификации) и среде разработке: сравните для этих целей обычный блокнот или Visual Studio с развитым IntelliSence, который, в свою очередь, получается «умным», если язык на это рассчитан: система метаданных объектов и т. д.
Поэтому, как программист, скажу Вам: пост получился неграмотным. Винда или макось здесь абсолютно не при чем.
Неграмотным у вас получилось выражение «не при чём» — оно пишется через «ни».
Расскажите мне, как писать на Си-плюс-плюсе и ВинАПИ нативные приложения под Мак или, ещё лучше, как писать на Objective-C и Какао нативные приложения под Виндоус, а уж потом заявляйте, что тут при чём, а что — ни при чём.
p.s. прошу прощения за очепятки («среде разработке» и т. д.) — пост набирался с использованием предикативной системы ввода.
Ммм, ну сверху уже сказали, многое зависит от платформы. Когда программируешь под .NET, всё ещё проще.
Нету геттеров и сеттеров кстати. А у большинства объектов есть конструкторы. То есть, знай я, что мне нужен некий объект Font, я напишу
new Font(
и там уже суджест скажет мне, есть ли параметры, и т. п. А если нет конструктора, то это видимо абстрактный класс: залезаю в обжект эксплорер, нахожу его дочерние классы, выбираю нужный и вуаля.
2 #7 Андрей Писков:
причём здесь язык программирования и среда разработки?
Невооружённым глазом видно, что речь в заметке идёт о различиях в идеологии API Винды и Макоси.
Что означает термин «Возвращает»? =)
Ну, создаёт и возвращает, ок.
2 №10 Павел Малинников
а по-моему невооруженным глазом видно, как происходит расписывание интуитивности ввода («…я просто предположил, что такой метод может быть, начал писать set...…») и отсутствия жестких фукнций. При этом всё это приписывается именно мак оси («…программировать под Мак — в удовольствие: тут нет такой жести, как в Винде…») и в этом главная ошибка.
Раз уж Вы заговорили об API, вспомним о Windows Presentation Foundation (та графическая API, посредством которой сейчас происходит разработка интерфейсов под винду). Что может быть проще и интуитивнее этого (взял пример, подобный описанному Ильей — установка аттрибутов шрифта + добавил bold):
<TextBox FontFamily=«Arial» FontSize=«20» FontWeight=«Bold»>Текст в текстбоксе</TextBox>
Или, если не XAML виде, а посредством кода C#:
TextBox t = new TextBox();
t.FontFamily = new FontFamily(«Arial»);
t.FontSize = 20;
t.FontWeight = FontWeights.Bold;
Куда проще, нежели: «[textView setFont:[NSFont fontWithName:@»Arial» size:20]];» Не находите?
Илья, я никогда не «пытаюсь сумничать» и не считаю, что в круг ваших задач входит вытаскивание меня из каких бы то ни было дебрей.
Что же касается моего замечания, вызвавшего столь неадекватную реакцию, попробую немного детализировать (если, конечно, это имеет какой-либо смысл). Вы употребляете некие термины «программировать под Мак» и «программировать в Винде». Эти термины не являются однозначными. Я не знаком с «Маком» в сколько-нибудь достаточной степени, чтобы говорить предметно и уверенно, поэтому скажу о втором термине.
Что значит: «программировать в Винде»? Из буквального прочтения фразы следует, что это значит: программировать, работая на компьютере под управлением операционной системы семейства «Виндоус». В то же время на впечатление от процесса программирования (о котором, как я понимаю, вы ведёте речь) влияют множество других факторов, в частности и главным образом:
А) язык программирования;
Б) используемые библиотеки;
В) среда разработки.
Операционную систему запишем под буквой Г.
Все эти факторы в большой степени являются независимыми. Можно программировать на PHP (фактор А), используя Zend Framework (фактор Б), Eclipse (фактор В) и «Винду» (фактор Г). Можно запустить Eclipse в «Линуксе» и, таким образом, изменить только один фактор Г — операционную систему; в результате уже нет «Винды», но впечатление от процесса программирования изменится минимальным образом, поскольку влияние первых трёх факторов в данном конкретном наборе имеет значительно больший вес.
Да, программировать под «Линуксом» удобнее, чем под «Виндой» — например, потому что в «Линуксе» можно сделать `tail -f debug.log`, а в «Винде» придётся мучиться. Но это настолько несущественная мелочь, что говорить, будто первый вариант чем-то отличается от второго с точки зрения программиста, работающего над поставленной задачей, как раз и будет ахинеей.
Вы программируете на PHP — да, это уже многое означает. Вы программируете под Zend Framework — возможно, ещё большее. Eclipse значение имеет небольшое. А «Винда» или иная операционная система — и того меньше.
Пусть вы программируете на языке, который существует только для «Виндоус»; используя библиотеки, которые существуют только для «Виндоус»; в среде разработки, которая существует только для «Виндоус»; и, само собой, на компьютере под управлением «Виндоус». Программируете ли вы «в Винде»? Да. Является ли это главной причиной различий между этой ситуацией и аналогичной с заменой «Виндоус» на «Mac OS X»? Нет. Функции, которые возвращают указатели на структуру из 18 указателей, половина из которых указывает на массивы структур других указателей, имеют источником своего существования используемые библиотеки; само существование понятий «указатель», «массив», «структура» зависит от используемого языка; автозаполнение помогает вам только в том случае, если вы используете среду разработки с функцией автозаполнения.
Если вы считаете, что программировать на Objective C удобнее, чем на C++, так и скажите. Если вы считаете, что программировать под Cocoa API удобнее, чем под Windows API, так и скажите. Если вы считаете, что программировать в Xcode удобнее, чем в Visual Studio, так и скажите. Но если вы объединяете все эти различия под ярлыками «под Мак» и «в Винде», это, извините, выдаёт в вас профана.
Проявите внимательность: я пишу «программировать под Мак», а не «на Маке». Под Мак программируют в Икскоде и использованием Какао; как правило — на Objective C. Под Виндоус программируют в разных средах (Делфи, Визуал-студия) с использованием ВинАПИ на Си-плюс-плюсе.
Это как бы значения по умолчанию. Если бы под Виндой я имел в виду .НЕТ, или бы использовал какой-нибудь фреймворк для ПХП, естественно, я бы об этом сказал.
Я пробовал и то, и другое, а вы про одно из этого ничего не знаете, зато называете меня профаном. Это классно. Я, в общем, монстром программирования себя нигде не называл, а лишь написал о своих ощущениях.
Сравнивать языки программирования в отрыве от ОС и среды разработки, бессмысленно — невозможно, не зная круга задач, оценивать инструменты для их решения.
Да видно же, что автор «Какао-наблюдения» небеспристрастен! А так-то да, можно и в DOS’е всё делать!
Не все так страшно в винде :)
приходилось программить и под маком (cocoa), и под виндой (MSVC«»++»»)... и, да, разница в терминологии моск разрывает))
но — присоединяюсь к вышесказанному, термины «под маком» и «под виндой» не вполне корректны. под винды, например, есть разные среды разработки; переходишь с Delphi на Microsoft C««++»» — и моск точно так же идёт лесом.
ВинАПИ от перехода из одной среды в другую не изменяется.
2 #12 Андрей Писков:
я вообще не нахожу причин вспоминать «нет»-фреймворк, когда речь идёт о Win32 API. Упоминаются «указатели на структуры» — так зачем вы приплели сюда WPF? Нет повода упоминать здесь о нём.
Не говоря уже о том, что вопрос «где проще» я не поднимал.
Павел, вы мысли, что ли, Ильи читаете? Он разве что-то сказал про Win32 API? Единственным человеком, упоминувшем его являетесь вы.
Илья использует Cocoa, хотя в Mac OS есть еще другие API: джава и карбон (+ посикс, как наследие юникс). Аналогично и под Windows есть куча wrapper’ов и .NET один из них.
Вы же пытаетесь отослать меня к технологии, появившейся еще в NT 3.1. Технологии, которую напрямую никто давно не использует.
Илья говорил о «жести, как в Винде», я лишь привел пример, являющийся доказательством отсутствия подобной жести на «планетарном» уровне. Контрпример, показывающий, что его слова, как минимум, некорректны. + Bes island все сказал. И сказал правильно. Что к этим словам можно еще добавить, я не знаю.
Можно ещё на ПХП писать приложения под Винду, да. Наверняка я это и имел в виду.
2 #18 Андрей Писков:
если словосочетание «указатели на структуры» вам ни о чём не говорит, я тоже не знаю, что ещё можно добавить.
2 bes island:
что бы не мучиться по поводу tail, понаблюдайте, как ведет себя, например, far, если в режиме просмотра (f3) перейти к концу файла и изменить его извне. :-)
сейчас набегут 1С-ники и другие с «планетарного» уровня и скажут, что они программируют «под Винду» и никаких указателей там нету!
Бугага, программер-срач :)
Довольно стандартный комментарий :-)
Всё дело привычки. К примеру связка C++/MCF или Java изучаются раньше по-причине большей распространённости и вследствии играют роль точки опоры для сравнения. Cocoa довольно сильно отличается от этих «принятых стандартов». Framework этот надо один раз прочувствовать — использовать скажем полгода-год. После этого «стандарты» кажутся (местами) сплошным уродством.
Кстати сказать, по схожим причинам первичного ознакомления, некоторые невольно сравнивают маковское меню с виндовским таскбаром или ищут в нём то, чего там никогда не было.
«Под Виндоус программируют в разных средах (Делфи, Визуал-студия) с использованием ВинАПИ на Си-плюс-плюсе» — бред. Я могу программировать на Borland Pascal с использованием VCL в среде Delphi. А могу — без среды Delphi. Могу программировать с использованием Qt на Python. Или с использованием GTK на PHP. Или на PHP, но без GTK. И ещё множество вариантов. Ни в одном из которых я никоим образом не касаюсь ни WinAPI, ни C++ и в глаза их не вижу. И среда разработки тоже особого значения не будет иметь.
Вы совершенно непробиваемы: примеры, которые я привожу в качестве иллюстрации несостоятельности вашей позиции, вы следом с невозмутимостью приводите всерьёз.
«Сравнивать языки программирования в отрыве от ОС и среды разработки, бессмысленно — невозможно, не зная круга задач, оценивать инструменты для их решения» — бред. PHP и Ruby, например, отлично сравниваются вне всякой зависимости как от ОС, так и от среды разработки.
От круга задач, конечно, зависит сильно. Но круг задач не представляет из себя совокупность ОС и среды разработки.
2 Павел Малинников
Так это я и называю «мучиться»: ради просмотра журнала ставить FAR Manager, который я терпеть не могу.
«Можно ещё на ПХП писать приложения под Винду, да» — если на компьютере под управлением Windows установлен, например, сервер Apache с PHP и я веду разработку приложений для этого веб-сервера, то это я пишу приложение на «ПХП» под «Винду», да.
Или вы считаете, что «писать приложения под Винду» обязательно означает какие-то окошечки?..
Хотя да — и ещё, конечно же, WinAPI и C++ в обязательном порядке. Хоть бы даже в среде Delphi.
Илья, по-моему, из нас двоих непробиваем не я. Четыре человека сообщают вам, что вы употребили неграмотную терминологию — вы же продолжаете утверждать, что правы, без малейших проблесков понимания.
Предложу тезис „«планетарного» уровня“ (#21): бесит встроенная функция — пиши свою.
А чей это пост и где он? Наверняка лучше (полезнее) себя правым чувствовать!
А мне, когда я читал заметку, сразу стало понятно, что речь идет о Windows SDK. Какие разночтения могут быть, когда говорится о структурах, указателях, NULL’е?
Было бы это какое святое писание, где каждый по-своему толкует, так нет, сам автор заметки говорит, да, имел в виду ВинАПИ.
Так на тебе — из песочниц показались желающие доказать самим себе, что они не внутри фреймворков совочком играют и куличики лепят, а самые настоящие экскаваторщики и строители, пишут «под Винду» (*«под Винду» — это такая терминология, знаете ли).
Если я пишу что-то в текстовый файлик .php, я не пишу под винду. Я пишу инструкции, понятные программе php.exe, вот она-то написана под Винду. Этот же текстовый файлик я несу на линукс и это будет инструкция для местного php, вот он написан под линукс.
Если у меня есть софтина, собранная под палм и винмобайл, а внутри Lua скриптинг, то я всем рассказываю: «Вот это я сейчас писал на Луа под винмобайл. А вот это — под пальму». Под софтину свою я писал, а её уже — под пальму, винду и андроид.
Java, 1С и прочий НЕТ!-фреймворк— нужно повторять?
В общем, впечатление такое, что защищенность от понимания сути вещей прямопропорциональна толщине подложенных под жопу врапперов.
А вот если писать используя библиотеку QT (http://www.qtsoftware.com/) то, что получается? Что программа пишется под Windows, Linux или MacOS? Скомпилировать-то её можно будет где угодно и выглядеть она будет одинаково.
Кхм, оффтоп.
Сайтик не поддерживает диакритические знаки :(, что особенно заметно в моём имени в предыдущем посте, где я хотел явно указать ударную букву фамилии.
А что ежели так: суть вещей описуема ЛИШЬ в терминах их оболочек?!
Павел, скрипт на PHP вовсе не обязан быть кросс-платформенным. Если я в коде оперирую такими конструкциями, как chdir(«C:\Documents and Settings») и win32_create_service(), с большой степенью точности можно сказать, что да, я пишу для Windows; напротив, если в коде встречаются вызовы symlink(), то, наверное, это никак не для Windows.
То, что автор заметки уточняет, что он имел в виду вовсе не «под Мак», а «Objective-C и Какао»; и не «в Винде», а «в разных средах (Делфи, Визуал-студия) с использованием ВинАПИ на Си-плюс-плюсе» (конечно же, происхождение ошибки было достаточно очевидно с самого начала, что нисколько её, ошибку, не оправдывает) — очень хорошо. То, что он вместо того, чтобы сделать это уточнение после первого же аргументированного замечания, продолжает утверждать, будто первоначальный вариант корректен, позволяя себе при этом неадекватные выпады в адрес комментаторов, — очень плохо.
Илья выразился корректно. Если программист думает, что можно писать программы под какую-то систему, не используя функционал (и не зная особенности) этой системы, это означает, что он плохой программист.
bes island, если хочешь доказать свою правоту, назови общеизвестные программы, у которых в исходных кодах (не библиотечных) не использовалось WinAPI :)
Ух ты, как интересно-то. Мне вот любопытно, сколько людей здесь писали и под Ruby и под Objective C и под C# и под C++?
А интерпретация твоих слов в комментариях «Илья выразился корректно»… ммм, великолепно.
/пошел дальше программить на Objective C, C# и Java попеременно/
Я не понял, что ты хотел сказать :-)