Я программист на C#, который начал использовать ubuntu около 2 лет назад. Я хочу научиться программированию на любом языке C или C++. Мне не нравится моно, он имеет тенденцию к сбою в моей системе. У меня есть базовое понимание C++. Я никогда не работал на C, но это выглядит круто. Какой инструментарий мне следует изучить/использовать? Дайте Pro/Cons каждому. Благодаря!Должен ли я изучать GTK + или GTKMM?
ответ
Поскольку C++ более знаком вам, вы можете найти GTKmm лучше, потому что вы можете использовать идиомы, такие как RAII. К сожалению, GTKmm немного неполна и не хватает некоторых из менее используемых частей GTK.
GTK + сам по себе, однако, предоставляет объектную модель, аналогичную той, что вы находите на C++, но только с C функциями. Такие вещи, как конструкция и уничтожение на C++, выполняются явно в API C, а экземпляры виджетов обрабатываются исключительно с помощью указателей.
Попробуйте оба и посмотрите, что лучше подходит вашему проекту.
я мог быть обвинен в предвзятости, так как я помочь способствовать gtkmm, но я был пользователем первый, так что ... В любом случае, я очень рекомендую gtkmm, если вам нравится C++. Управление памятью намного проще с gtkmm, чем с GTK +, поскольку объекты с подсчетом ссылок управляются автоматически с помощью интеллектуальных указателей. Вы также можете создавать объекты как автоматические переменные (например, в стеке) и определять срок их жизни по их объему. Поэтому на практике гораздо проще избежать утечек памяти с помощью gtkmm, чем с GTK +.
Другое Огромное Преимущество gtkmm над GTK + (на мой взгляд) - использование структуры сигналов типа безопасных. В GTK + вам постоянно нужно передавать вещи как указатели void, а затем бросать их туда, где, по вашему мнению, они должны быть. В gtkmm вам не нужно это делать, и вы можете воспользоваться компилятором, обеспечивающим безопасность типов для ваших обработчиков сигналов.
Другим большим преимуществом перед C/GTK + является легкость получения новых классов. В GTK + вам нужно написать много кода шаблона и в основном повторно реализовать вещи, которые вы получаете бесплатно на C++, как часть языка (например, наследование, конструкторы, деструкторы и т. Д.). Это более утомительно и подвержено ошибкам.
greyfade отметил, что gtkmm является неполным, и он прав в определенной степени - gtkmm не охватывает абсолютно все в GTK + API (хотя он ужасно близок). Но на практике это не проблема, потому что вы всегда можете использовать API C/GTK + непосредственно из вашего кода gtkmm. Эта совместимость C является огромным преимуществом C++ над чем-то вроде привязок C# или python, где у вас не будет альтернатив, если привязка не распространяется на часть API.
Единственные реальные причины выбора GTK + over gtkmm (IMO) - это то, что gtkmm имеет немного дополнительных накладных расходов, поскольку это оболочка поверх библиотеки C (но это, как правило, только один вызов функции, который собирается имеют незначительное влияние), или если вы ненавидите или не можете использовать C++.
+1 для этого !!!! –
Если вы программист на C#, почему бы вам не взглянуть на Vala?
Я использую pygtk для большинства моих приложений графического интерфейса Linux, но Python был слишком медленным для проекта, над которым я сейчас работаю, поэтому я пытался выбрать один из GTK + и GTKmm. Затем я встретил Валу.
Это довольно новый язык, поэтому документация на данный момент довольно ограничена, но я думаю, что он имеет лучшее из обоих миров: синтаксис C# с частотой C.
Я предлагаю изучить vala с gedit.
http://www.valaide.org/doku.php: Вал
https://launchpad.net/valable: Затмение
Я изучил валу и очень понравился, но документальность была ужасной. – Kredns
Я думаю, что лучший путь будет первым узнать gtkmm! После того, как вы закончите работу с gtkmm, GTK + должен быть достаточно простым, чтобы учиться (при условии, что вы знаете C и удобны с указателями).
В случае, если вы не знаете C, вы можете узнать его быстро прочитав Язык программирования C Деннис Ритчи
Я рекомендую вам изучить gtkmm первых, потому что он разработан специально для C++, который несколько похож на C#, поскольку оба являются объектно-ориентированными, поэтому gtkmm будет относительно легко освоить сначала, чем GTK +.
После gtkmm, вы можете перейти на GTK +
Большинство открытого исходного кода компании использует GTK +, а не gtkmm, поэтому GTK + является целесообразно, чтобы узнать!
Когда я погружаюсь, чтобы научить программированию GUI, «gtkmm» был первой библиотекой GUI, на которую я посмотрел, где я не сразу отшатнулся в ужасном ужасе (включая GTK +). Тот факт, что я учил себя C++ 11 в то время, и «gtkmm» прилагает совместные усилия по использованию современной языковой версии (опять же, в отличие от GTK +), много добавила к апелляции. И, как вы сказали, однажды, когда я использовал 'gtkmm', чтобы понять, как работают модели графического интерфейса пользователя, и из-за необходимости сообщать о нескольких небольших ошибках в GTK + ;-), последний сделал бесконечно больше смысла, когда я снова посмотрел на него. Теперь я почти ценю это! ;-) –
Как многие говорили, Gtkmm действительно предоставляет вам хорошее управление памятью, ссылки на подсчитанные объекты и т. Д. Однако он падает в одном отделе. Документация. Весь проект Gtkmm страдает от явлений «недокументации», когда размещенная (и отправленная на сторонних сайтах) документация представляет собой просто просмотр javadoc файлов заголовков.
Просто хотел, чтобы вы знали, во что вы попадете. Например, Scrolled Window является одним из лучших документированных классов в Gtkmm.
Чтобы быть точным, документы в библиотеках 'mm' (' gtkmm', 'glibmm') записываются в заголовки, но то, что написано там, обычно генерируется путем преобразования документов из C-функций в GTK +/GLib/др. '.c' в точке обертывания (построения). Однако это можно переопределить и написать собственные документы, например, если в документах C содержится много C-isms, которые не хорошо конвертируются. Конечно, если вы видите что-либо, что отсутствует или плохо преобразуется, то патчи к заголовкам 'mm' или подпрограмме, которые преобразуются из документации C, будут приветствоваться в Bugzilla или в списке рассылки –
- 1. Должен ли я изучать C++ или java?
- 2. Должен ли я изучать mysqli или PDO?
- 3. Должен ли я изучать Express.js или Sails.js?
- 4. Должен ли я изучать C++ или ASM?
- 5. Должен ли я изучать Java или изучать C++?
- 6. Должен ли я изучать Скала?
- 7. Должен ли я изучать NHaml?
- 8. Должен ли я изучать Эликсир или Эрланг (или оба)?
- 9. Должен ли я изучать AWT, прежде чем изучать Swing?
- 10. Должен ли я изучать рекурсию перед ООП?
- 11. Должен ли я изучать новый язык программирования?
- 12. Должен ли я изучать XML перед WCF?
- 13. Должен ли я сначала изучать C# или Java?
- 14. Должен ли я начинать изучать классические VB/ASP или .NET?
- 15. Должен ли я изучать SQL Server 2008 или Oracle 11g
- 16. Дилемма: Должен ли я изучать морскую или Python-структуру?
- 17. Должен ли я изучать Lex/YACC или FLEX/Bison
- 18. Должен ли я изучать SharePoint 2010 или SharePoint 2007?
- 19. Objective-C Синтаксис - должен ли я изучать новый или старый?
- 20. Должен ли я изучать OpenGL или ждать выхода Vulkan?
- 21. Должен ли я изучать JavaFX для Android или Android отдельно
- 22. Должен ли я изучать Angularjs сначала или Laravel?
- 23. Единство: Должен ли я изучать один или оба (C#, UnityScript)
- 24. Должен ли я изучать Ruby 1.8 или 1.9?
- 25. Должен ли я изучать Silverlight или JavaScript/JQuery/CSS/HTML?
- 26. Должен ли я изучать Dojo Toolkit 1.10 или ждать 2.0?
- 27. Должен ли я изучать Весну 2 или 3?
- 28. Можно ли использовать GTK + тип gtkmm?
- 29. Должен ли я изучать Objective-C для профессионального развития Mac?
- 30. Gtkmm - "Gtk :: DrawingArea" в "Gtk :: ScrolledWindow"?
OMG, пожалуйста, попробуйте Qt ... –