Задача C от Google Go Vs

1. Введение

"Значение языка для эволюции культуры заключается в том, что человечество создало в языке отдельный мир рядом с другим миром, место, которое оно приняло настолько прочно установлено, что, стоя на нем, оно могло поднять остальной мир снимите ее петли и сделайте себя хозяином. Насколько человек долгие века верила в понятие и названия вещей, как в aeternae veritates, он присвоил себе ту гордость, которой поднялся над животным: он действительно думал, что языком владеет знаниями о мире"Фредрик Ницше.

Каждый компьютер & # 39; компьютерный программист имеет мало комментариев относительно того, как лучшая речь его программирования является лучшей. Есть общие атрибуты, которые хотят большинство программистов, как простой в использовании синтаксис, лучшая производительность работы, быстрее компиляция, и более конкретные функции, которые нам нужны в зависимости от нашего приложения. Это основные причины, почему существует так много языков программирования, а новая внедряется почти каждый день. Несмотря на большой интерес и внимание к языковому дизайна, многие современные языки программирования не всегда предлагают инновации в языковом дизайне, например, Microsoft и Apple предлагают только его варианты.

Это не слишком далеко в истории, когда C шагнул в мир вычислительной техники и стал основой многих других успешных языков программирования. Большинство членов этой семьи остались рядом с печально мать & # 39; й, и мало кому удалось оторваться и отличить себя как индивидуальную существо. Однако вычислительный ландшафт значительно изменился с момента рождения C. Комп & # 39; Серверы в тысячи раз быстрее используют многоядерные процессоры. Доступ в Интернет и Интернета широко доступен, а устройств становится все меньше и меньше, а мобильные вычисления были вытеснены в основной поток. В эту эпоху мы хотим языка, делает нашу жизнь лучше и легче.

Согласно индексу TIOBE, Go и цель C были одними из наиболее быстро растущих языков, особенно в 2009 году, и в этом же году Go был награжден "языке году программирования". TIOBE получает свои результаты ежемесячно путем индексации. Индексация обновляется с помощью данных, полученных по ссылкам на сертифицированных программистов, учебных и поставщиков программного обеспечения. Эти данные собираются для TIOBE с помощью поисковых систем Google, Bing, Yahoo, Wikipedia и YouTube. Результаты оказались более предсказуемыми для Objective C, поскольку речь идет о iPhone и Mac, и Apple работает на рынке. Однако этот результат становится интересным, поскольку давно технология дорога представила собственный язык программирования под названием GO.

2. Немного истории

Пресловутая иметь Google Go доминировала в поиске, электронной почте и т. Поэтому внедрение нового языка программирования не является шокером! Как и многие проекты с открытым кодом Google, Go начал свою жизнь 20-процентный проект, Google предоставляет своим сотрудникам для экспериментов, а затем превратился в нечто более серьезное. Роберт Гриземер, Роб Пайк и Кен Томпсон начали свою разработку, и Go было официально объявлено в ноябре 2009 года, а реализация была выпущена для платформ Linux и Mac OS. Google выпустил Go под лицензией стиля BSD, надеясь, что сообщество программистов развиваться и превращаться в жизнеспособный выбор для разработки программного обеспечения. На данный момент Go еще очень молодой и экспериментальный. Даже Google сейчас не использует Go для широкомасштабного производства приложений. Хотя на сайте, на котором размещен код, работает сервер, построенный на основе Go в качестве доказательства, основной целью выпуска было привлечение разработчиков и создание вокруг него сообщества Go. Несмотря на свой неуверенный статус, Go уже поддерживает многие стандартных инструментов, которых вы ожидали от системного языка.

Задача C В отличие от этого имеет более длинную и более широкую историю. Сегодня он используется в основном на ОС MAC и iPhone Apple. Цель C - это основной язык, используемый для API COCOA Apple от Apple. Цель C была создана Брэдом Коксом и Томом Лаввом в начале 80-х годов в их компании StepStone. В 1986 году Кокс опубликовал главный описание Цели C в первоначальном виде в книге "О & # 39; объектно-ориентированное программирование, эволюционный подходС тех пор цель C сравнивали функцию за функцией с другими языками, и теперь это язык Стива Джобса.

Есть много аспектов, которые способствуют разработке, успеха или неудачи языка программирования. В этой статье я стараюсь дать общее сравнение этих двух, пожалуй, очень важных языков будущего.

3. Общее сравнение

В эти дни мир переполнен языках программирования, и они становятся все более общими и всецильнимы, но они все еще имеют свои специализации и характеристики, и каждый язык имеет свои недостатки и преимущества.

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

3.1 Парадигма

Objective-C - императивная речь, ориентированная на о & # 39; объекты, то есть о & # 39; объекты могут изменять состояние. Objective-C также дает полную мощность настоящей о & # 39; объектно-ориентированного языка с одним синтаксическим дополнением к оригинальному C и множеством дополнительных ключевых слов. Естественно, что о & # 39; объектно-ориентированные программы строятся вокруг о & # 39 объектов, поэтому в Objective C о & # 39; объекты являются корнями всего. Класс используется для получения подобных об & # 39 объектов, называемых экземплярами класса. Классы используются для инкапсуляции данных и методов, которые принадлежат вместе. Методы - это операции, которые Objective-C применяет к данным и идентифицируются их селекторами сообщений. Objective-C поддерживает полиморфизм, то есть несколько классов могут иметь метод с одинаковым названием. Также однократное наследование используется для повторного использования кода. Близким, что может быть достигнуто для получения нескольких унаследованных, является создание класса со сменными экземпляра, ссылающиеся на другие о & # 39; объекты. Однако философия Objective-C состоит в том, что программистам не нужно многократное наследования, и это отпугивает это.

В GO дела несколько иные. Дизайнеры Go выбрали модель передачи сообщений для достижения одновременного программирования. Язык предлагает две основные конструкции Goututines и Channels для достижения этой парадигмы. В своем FAQ-дизайне Google пишет, что GO есть и не является об & # 39; объектно-ориентированный язык! Хотя Go имеет типы и методы, и мы позволяем имитировать о & # 39; объектно-ориентированный стиль программирования, нет иерархии типов. Отсутствие иерархии типов делает "о & # 39; объекты" в Go гораздо легче, чем о & # 39; объекты в "Цели C.". Go использует инновационный подход к о & # 39 объектов, и программистам не нужно беспокоиться о больших дерева о & # 39 объектов. Поскольку Go не является действительно объектно-ориентированным языком, программист может решить проблему любым способом и захочет, и все еще пользуется о & # 39; объектно-ориентированными функциями.

Я не могу реально думать о какой-либо о & # 39; объектно-ориентированный язык, не имеет иерархического механизма наследования. Но для тех, кто это имеет, это, кажется, создаст лучшую модель для гибкости и повторного использования. Отсутствие подражания в Go действительно интересная! Насколько я помню, подражание меня всегда учили как пунктину ориентации на объект. Реальность такова, что наследование - не единственный возможный механизм повторного использования в ориентации на о & # 39; объект. Возможно, состав более мощным механизмом разделения поведения, чем наследования.

О & # 39; объектно-ориентированное программирование приобрело большую популярность специально для крупных компаниях, поскольку это подходящий подход способов разработки программного обеспечения и увеличивает их шансы на успешный проект, используя команды посредственных программистов. О & # 39; объектно-ориентированное программирование реализует стандарт для этих программистов и не позволяет людям делать слишком большой вред. Цена заключается в том, что полученный код наполнен дублированием. Это не слишком высокая цена для крупных компаний, так как их программное обеспечение все равно будет полное дублирование.

3.2 Синтаксис

Задача C - это расширение стандартного ANSI C, существующие программы C могут быть адаптированы к использованию программных рамок, не теряя ни одной работы, которая вошла в свой начальное развитие. В «Цели C" программист получает все преимущества C во время работы в рамках «Цели C.». Objective-C, как правило, рассматривается как нечто вроде гибрида между C и Smalltalk. Одним неудачей, обусловленным кривой обучения, может быть необходимость владения базовыми знаниями по программированию на C до выхода в свет Цели C. С, как синтаксис и о & # 39; объектно-ориентированное программирование, часто представляет длинную и сложную кривую обучения для новых программистов и целей С также не является исключением.

Go также является членом семь & # 39; й C, но я думаю, что Go удается сломать стиль кодирования и несколько делает его другим. По сравнению с целью C, декларации имеют обратный характер. В C понятие заключается в том, что переменная объявляется как выражение, обозначающее ее тип, как в Basic, что, на мой взгляд, является хорошей идеей.

в Go: var a, b * int;

Я нахожу ближе к естественному языку человека, например, это утверждение: "Переменная a - целое число" может быть показана как:

var a int;

Это четко, умнее и регулярнее.

Go также позволяет несколько задач, которые выполняются параллельно.

i, j = j, i // Поменять i и j.

Контрольные операторы в Go не принимают скобки. Хотя самый распространенный оператор управления, если имеет форму "if (self) {" в "Цели C" и большинства других языков OO. Но в Go он имел бы такую ​​форму:

если я {

Еще одно отличие Go - это то, что точки с запятой не рекомендуются. Однако вы можете отменить любой оператор Go точкой с запятой по желанию. На самом деле точки с запятой предназначены для анализаторов и Google хотел их максимально устранить. Одно утверждение вовсе не требует точки с запятой, мне кажется довольно удобным.

Go - это язык компиляции, похожая на C. Сейчас есть два компиляторы Go, один для платформы x86 и другой для AMD. Скорость компиляции Go очень быстрая. Когда я впервые попробовал это (без каких-либо намерений или надлежащих измерений), это было слишком проклят быстро! Мой опыт работы с языками программирования ограничен и достаточно сосредоточен на объекте & # 39; объектно-ориентированных языках, таких как Java, поэтому я никогда не видел такой скорости! Одной из основных обещанных целей Go является возможность складывать вещи очень быстро. Согласно официальным демонстрационным видео Go, производительность Go в пределах от 10 до 20% C. Однако, я не думаю, что это действительно достойно доверия, пока мы не получим определенные показатели эффективности ближайшее время.

3.3. Исключения и дженерики

Цель C не имеет общих типов, если программист не решит использовать шаблоны C ++ в своих специальных классах коллекций. Objective-C использует динамическое ввода текста, а это значит, что время запуска не волнует тип объекта & # 39 объектов, поскольку все о & # 39; объекты могут принимать сообщения. Когда программист добавляет объект к встроенной коллекции, они просто трактуются так, как будто они вводят идентификатор. Подобно C ++, речь Objective-C имеет синтаксис обработки обмена исключениями.

Система типа Go не поддерживает общие типы. По крайней мере пока они не считают их необходимыми. Генерик удобные, но они требуют больших затрат на систему типов и время работы, и Go не выдерживает этого! Как и дженерики, исключения остаются открытым вопросом. Подход Go к исключения, хотя инновационный и полезный, является, скорее всего, сложным для многих программистов. Кодовая база Google не отличается от исключений, поэтому исключения аналогична историей, и они остались вне языка. Зато программист теперь может использовать несколько значений возвращения из вызова для обработки ошибок. Поскольку Go собрано мусора, отсутствие исключений является меньшей проблемой по сравнению с C ++, но все же есть случаи, когда такие вещи, как ручки файлов или внешние ресурсы, нужно очистить. Многие программисты считают, что исключения абсолютно необходимы в современном языке программирования. Однако мне нравится факт не исключение, поскольку я считаю, что обработка исключений на большинстве языков уродливая. Таким языком, как Go, где возможно вернуть несколько значений из функций, программисты могут делать такие вещи, как возвращение как результата, так и кода статуса и обрабатывать ошибки с помощью кодов статуса.

3.4. Тип систем

По сравнению с другими о & # 39; объектно-ориентированными языками, основанными на C, цель C очень динамична. В настоящее время программисты, как правило, выбирают динамично набранные языка, например, цель C. Недостаток заключается в том, что в процессе компиляции является меньше информации. Эта динамичность означает, что мы можем отправить сообщение о & # 39; объекта, который не указан в его интерфейсе. Компилятор сохраняет подробную информацию о самых о & # 39; объекты, которые используются во время выполнения. Решения, которые в противном случае могут быть приняты во время компиляции, будут отложены до запуска программы. Это дает программам C о & # 39; объективности и гибкости.

Языки динамично набираются, имеют потенциальную проблему бесконечных ошибок во время выполнения, которые могут быть неудобными и запутанными. Однако Objective-C позволяет программисту необязательно & # 39; обязательно идентифицировать класс о & # 39 объекта, и в этих случаях компилятор применяет методологию сильного ввода текста. Задача C принимает большинство решений во время выполнения. Слабо типизированные указатели часто используются для вещей, таких как классы коллекций, где точный тип объекта & # 39 объектов в коллекции может быть неизвестным. Для программистов, привыкших к сильно набранных языков, использование слабого ввода текста чревато проблемами, поэтому некоторые могут отказаться от гибкости и динамичности. В то же время и в то время, как динамическая отправка Цели C делает ее медленнее, чем статические языка. Многие разработчики считают, что дополнительная гибкость, безусловно, стоит цены, и они утверждают, что большинство настольных приложений редко используют более 10% современного процессора. Я не согласен с вышеупомянутым обоснованием того, что мы используем только 10% ЦП. И что ?! Не очень хорошая тенденция, минималистичные подходы, направленные на эффективность и эффективность, заменяются расточительными программами, которые в значительной степени делают ставку на мощность аппаратуры, и я лично предпочитаю работать с более статичным проверкой типа.

Go также пытается реагировать на этот растущий тренд динамично набранных языков и предлагает инновационную систему типа. Закончим, предоставляя программисту язык со вступлением питонськои утки. Go действительно имеет необычную систему типов: она исключает наследования и не тратит времени на определение взаимосвязи & # 39; связей между типами. Зато программисты могут определять типы структуры, а затем создавать методы для работы над ними. Как и о & # 39; объектив C, программисты также могут определять интерфейсы. Go сильно набран, но хорошо, что он не такой сильный! Программисту не нужно четко объявлять типы переменных. Зато Go неявно назначает тип нетипизированного переменной, когда значение впервые присваивается переменной. под обложками содержится информация о динамический тип, которую программы могут использовать, чтобы делать интересные вещи.

3.5. сбор мусора

В наши дни очень важно, чтобы мусор был одним из крупнейших источников сохранения чистоты и управления памяти & # 39; яттю. В цель C 2.0 была введена сбор мусора. Это, безусловно, была хорошей новостью для новых разработчиков iPhone и Mac, которые, возможно, очень привыкли к Java. Сбор мусора упростил вопрос, но все же требовал от программистов соблюдать осторожность при работе с управлением памяти & # 39; яттю. Сборщик мусора Objective-C 2.0 - это консервативный сборник, означает, что не только разработчики имеют полный доступ к мощности языка С, но также сохраняется способность C интегрироваться с кодом C ++ и библиотеками. Программист может создать основную часть своей программы с помощью Objective C, позволяя мусоросборнике управлять памятью, и там, где это нужно, мы можем бежать в мощности C и C ++.

В Go, как одновременно и многопоточную программирования, управления памятью очень сложно, поскольку объекты могут перемещаться между потоками, и становится очень трудно гарантировать, что они будут безопасно освобождены, как только мы захотим избавиться. Автоматическое сбора мусора облегчает одновременное кодирование. Несмотря на это с перспективой человека, как я, уже много лет привыкла к высокому, безопасного, собранного мусором языков, столько этого просто скучной новостью. но, с другой стороны, в языках программирования систем низкого уровня эти изменения являются революционными, особенно если можно достичь желаемой производительности. Основное внимание сосредоточено на скорости, а в сборе мусора лежит эффективность работы. Однако прогресс технологии сбора мусора позволил ему иметь без значительных задержек и дал возможность Google включить ее в Go.

4. Будущее и вывод

Должна быть причина для роста популярности этих двух языков. Возможно, причиной может быть то, что свет Майкрософт уменьшается; Apple и Google быстро перенимают каждую со своей собственной экосистемой. Go - это язык, который продвигает Google, дает ей неоспоримое преимущество в плане популярности, репутации и технического покрытия, а цель C поддерживается могуществом империи Стива Иова.

Задача C пользуется преимуществами библиотек Cocoa, поставляемых с Mac OS. Mac OS X и iPhone - это самые реализации языка с большим запасом. В последнее время наблюдается огромное тенденция в применении iPhone, и потенциал заработать деньги с помощью простых проектов программирования достаточно высок. І я вважаю, що цей самий базовий людський факт значною мірою сприятиме майбутньому зростанню Цілі C. Оскільки чим більше розробників використовують мову і тестують її в різних ситуаціях, тим кращою і сильнішою може стати мова.

Go - це справді цікава мова. Завдяки підтримці та ресурсам Google, програмісти можуть бути впевнені, що Go матиме якесь майбутнє, навіть якщо не надто блискуче! Я думаю, що мова має потенціал, але пройде деякий час, не дуже короткий час, перш ніж вона зможе залучити розробників відмовитися від своєї поточної платформи та вибрати Go. Іти досі - це невелика мова. Це експериментально і не рекомендується для виробничих середовищ. Немає інтеграції IDE і мало прикладів коду. Повернення є неповним, і вони викладають все, що у них є, і заохочують внесок розробників. Як проект з відкритим кодом, що підтримується Google, я думаю, що Go скоро розробить IDE та екосистему, оскільки, схоже, це дійсно добре сприйнято, як згадувалося раніше в індексі TIOBE. Але неможливо передбачити, наскільки великою буде екосистема. Якщо мова здатна генерувати екосистему, то все може йти гладко. Думаю, потрібно згодом підтримати операційну систему Windows, а також інтегрувати її в Eclipse IDE для подальшого розширення її серед програмістів.

Apple і Objective C наголошують на об'єктно-орієнтованому програмуванні та вся документація на мову орієнтована на об'єктно-орієнтоване програмування. Тож у цьому сенсі існує величезна різниця між Об'єктивом C та Го. Але, як і будь-яка інша людська чи машинна мова, цілі C і Go порівнянні за певними критеріями, і я намагався забезпечити загальне порівняння між ними. Однак шлях цих двох мов може зайняти дуже багато часу. Іди молодий і сповнений невпевненості. Це робить порівняння цих двох мов програмування досить важким або, можливо, як мої друзі-програмісти кажуть "неможливим". Протягом певного часу потрібні належні оцінки неупередженими арбітрами, щоб бути більш порівнянними, але я впевнений, що ми почуємо більше про ці дві мови найближчим часом.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *