GObject学习教程---第一章:GObject是有用并且简单的

2023-05-16

索引:https://blog.csdn.net/knowledgebao/article/details/84633798

本文是学习学习他人的博客的心得(具体详见“楼主见解”),如果源网站可访问的话,建议直接访问源网站:

楼主见解:

主要告诉你GObject多么的牛逼,多么的简单。这一部分没有什么可说的。


源博客网址:http://garfileo.is-programmer.com/categories/6934/posts

a:要相信 GObject 是有用并且简单的!

去年,曾经用了 10 多天的时间学习了一番 GObject,当时疏于心得的总结,而现在已经忘记的差不多了。

最近因为观察到 GtkGLExt 项目没有跟进 gtk+-3.0 的意思,便想自己动手,丰衣足食,要么去改造现有的 gtkglext 代码,要么另起炉灶。也许在自由/开源的世界中,期待是可耻的,只有动手才会幸福。但是,这与 GObject 有什么关系?

在 GTK+ 的众多底层库中,GObject 与 GLib 是两块基石,在它们之上矗立着 Cairo、Pango、Clutter、GDK、ATK 等支柱,还有 GtkGLExt 这棵对我而言非常重要的小支柱,没有它我便不知道该如何在 GTK+ 中直接绘制 OpenGL 三维图形。事实上,除了 GtkGLExt 之外,还有 Cogl 可供选择,后者是对 OpenGL 进行抽象封装,主要是为了方便 Clutter 在其上层创造场景图结构。既然是封装,那么就需要容器,Cogl 所使用的容器便是 GObject。

也许你对 GTK+ 支持 OpenGL 的事情并不感兴趣,那么我们便将话题转回至 GObject,并提出这样一个问题:既然 GObject 如此重要,那么它究竟是做什么的?

简单的说,GObject 是一个程序库,它可以帮助我们使用 C 语言编写面向对象程序。

很多人被灌输了这样一种概念:要写面向对象程序,那么就需要学习一种面向对象编程语言,例如 C++、Java、C# 等等,而 C 语言是用来编写结构化程序的。事实上,面向对象只是一种编程思想,不是一种编程语言。换句话说,面向对象是一种游戏规则,它不是游戏。GObject 告诉我们,使用 C 语言编写程序时,可以运用面向对象这种编程思想。

从宏观层面上来论证 GObject 与 C++、Java 之类的面向对象编程语言相比具备何种优越性,这是没有意义的。最优化理论中有一个“没有免费的午餐”定理,大意是说没有一种方法可以适合于全部问题,应当选择合适的方法,并将它放在合适的地方使用。这个定理对于编程语言的选择与使用也有效,因为选择某种最合适的语言,本身就是一个最优化问题。

假如我们选择了 GObject,它最适合处理那些问题?

首先,与操作系统层面相距较近的程序设计,即系统程序设计,例如上文所列举的 GTK+ 及其支柱,使用 GObject 模拟的面向对象机制可以简化程序逻辑结构,同时还能保证程序的性能以及系统接口直接调用。最主要的是,系统程序员大都熟悉 C 语言,沟通较为方便。

其次,有时为了兼顾程序性能与开发效率,会对程序结构进行分层设计,底层模块采用 C 程序库实现,上层则使用动态语言或函数式语言实现,此时使用 GObject 除了可以简化底层模块的逻辑结构,还可以通过 GObject 与上层模块进行胶合。现在,GNOME 3 项目提供了 GObject Introspection 技术,专门用于处理 C + GObject 所实现的程序与上层动态语言或函数式语言的胶合问题 [1]。另外,GNOME 3 项目还实现了两种新的语言 Vala 和 Genie,前者语法类似 C#,后者语法类似 Python,使用它们所编写的程序源码,利用相应的编译器便可以生成 C + GObject 代码,进而可以编译为 C 程序[2, 3]。

那么 GObject 容易掌握么?我认为它应该很容易学习和使用,就像网络上许多人很轻易的诟病它非常繁琐难用一样容易。在打算掌握任何一种技术之前,如果不相信它是简单的,内心深处便会滋生一种逃避的意识。我们也可以例证,如果 GObject 真的很难理解和应用,怎么会存在那么多基于 GObject 实现的程序,难道那些程序的作者皆为天才抑或疯子?这种概率实在太小了。

事实上,GObject 是被人为的复杂化了。因为很多学习 GObject 的人,一上来就奔着要全面洞悉 GObject 的实现原理与细节,但是又缺乏足够的耐心和基础知识。如果换一个角度来考虑这个问题,作为初学者,在学习 C++、Java 之类的面向对象编程语言之时,我们有打算直接潜心理解这些语言的内部实现吗?我们大都是要从 Hello world 之类的示例起步的。对于 GObject 的学习也应当如此。

~ END ~


参考文档

[1]  GObject Introspection 带来一些希望

[2]  vala, vala!

[3]  人生苦短,我用 Genie

转载时,希望不要链接文中图片,另外请保留本文原始出处:http://garfileo.is-programmer.com

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GObject学习教程---第一章:GObject是有用并且简单的 的相关文章

  • PVE安装画面灰白只显示鼠标解决方案

    PVE安装画面灰白只显示鼠标解决方案 最近喜欢到某鱼上折腾一下工控机主板回来搞PVE xff0c 发现不少小伙伴遇到与我一样的问题 xff0c 网上搜索文章 xff0c 并没有很完整 xff0c 于是整理了一下 出现这种情况一般是PVE5
  • 解决java poi之SXSSFWorkbook导出大数据量时自适应列宽效果异常问题

    场景 xff1a 使用SXSSFWorkbook导出大数据量 百万行 excel报表 xff0c 表格样式统一使用自适应列宽时 xff0c 发现导出表头行格式异常 xff0c 异常情况如下图所示 xff1a 分析 xff1a 从导出效果看
  • Win11基于WSL2安装CUDA、cuDNN和TensorRT(2023-03-01)

    文章目录 2023 03 06 更新2023 03 05 更新前言TensorRT介绍环境配置CUDA Driver检查安装 安装CUDA安装nvcc安装cuDNN安装验证 安装TensorRT安装验证 2023 03 06 更新 如果有小
  • python OCR Tesseract 训练

    Ps xff1a Tesseract识别英文和字母效果好 中文的话 xff0c 虽然有训练数据也可以识别 xff0c 但是效果不是很好 Tesseract的安装和使用 xff1a 1 首先用 pip 下载包 pip install tess
  • ffmpeg实战教程(十)ffmpeg/camera实现最近很火的视频壁纸,相机壁纸

    本篇实现一个有意思的玩意儿 xff0c 视频壁纸 xff0c 相机壁纸 这玩意好像现在还都是国外版本 xff0c 哈哈 先上图 xff1a 视频壁纸 相机壁纸 1 动态壁纸制作的知识 xff1a 每一个动态壁纸都继承自WallpaperSe
  • C/C++ 连接两个字符串

    一 xff1a C风格字符串连接 include lt iostream gt using namespace std int main const char str 61 34 hello 34 const char str2 61 34
  • 返回urls跳转后的页面地址

    string urls 61 34 http xxx xxx com SoftDown aspx SoftID 61 275781 amp fdid 61 119418725f1d4e20 34 Response Redirect urls
  • 阶乘数码(基础算法-高精度)

    P1591 阶乘数码 洛谷 计算机科学教育新生态 luogu com cn include lt bits stdc 43 43 h gt include lt iostream gt include lt unordered map gt
  • MPICH的安装与使用

    1 安装MPICH之前 xff0c 首先要在centos6 5上安装c编译器 xff0c 使用指令安装如下 xff1a yum install make 安装make程序 yum install gcc 安装GCC编译器 xff08 支持C
  • 使用cmake生成可执行文件以及开发中常用到的一些指令说明

    span class token macro property span class token directive keyword include span span class token string lt iostream gt s
  • Ubuntu18.04 CUDA10 cudaGetDeviceCount returned 35

    报错现象 我的环境是Ubuntu18 04 安装了CUDA10 运行deviceQuery报错如下 xff1a deviceQuery Starting CUDA Device Query Runtime API version CUDAR
  • Wampserver最全安装教程(一定全绿图标)

    Wampserver最全安装教程 xff08 一定全绿图标 xff09 通过以下步骤进行一定可以全绿 xff0c 一定要按照步骤来哦 xff1a 打开http wampserver aviatechno net 滚到最下面 xff0c 下载
  • WSL安装及配置

    WSL xff0c 全称Windows Subsystem for Linux xff0c 是微软为Windows 10 11集成的功能 xff0c 可以在Windows中不用虚拟机使用Linux 使用WSL首先要开启Windows功能 x
  • “invalid character ‘\x1f‘ looking for beginning of value“ 报错解决方法

    目录 问题背景 分析方法 问题原因 问题背景 这个问题来源于我在开启kubectl proxy代理的时候 xff0c 通过kubectl apply f xxx yaml向代理提交一个configMap对象 xff0c 返回了 34 Err
  • 08-1 UIControl 及其子类 UISegmentedControl 、UISlider

    1 UIControl UIControl是所有控制控件 xff08 比如UIButton UISlider UISegmentedControl等 xff09 的基类 只要跟控制有关的控件都是继承于该类 UISlider是可以响应滑动事件
  • android Settings.Secure的使用

    在Android中 xff0c 许多的系统属性都在settings应用当中进行设置的 xff0c 比如wifi 蓝牙状态 xff0c 当前本机语言 xff0c 屏幕亮度等等一些相关的系统属性值 这些数据主要是存储在数据库中 xff0c 对应
  • 关于VM一启动虚拟机电脑就重启或蓝屏的几个解决方法

    最近在刚开始学习Linux在使用VMware创建新的虚拟机时只要一点启动虚拟机电脑就直接重启了 xff0c 最开始以为是vm版本或者是Linux镜像的原因来来回回换了好几个vm和Linux xff0c 电脑重启了二三十次都没成功启动虚拟机
  • Golang + Qt5 桌面开发终极解决方案

    Golang 43 Qt5 桌面开发终极解决方案 首先要安装Qt和Golang 一 安装前准备 1 下载Go1 4版本的压缩包版本 xff0c 解压至C盘User目录下 2 安装MinGW 并配置相关环境变量 参考链接 xff1a MinG
  • Oracle snapper ASH监控工具

    Oracle snapper ASH监控工具 snapper工具是由国外技术人员 xff0c 将基于Oracle ash技术原理用来监控数据库会话的负载情况 比较适合小范围时间监控 xff0c 可以生成多个快照 xff0c 例如1小时内 x
  • Matlab之数据筛选

    Matlab功能强大 xff0c 这里介绍一些数据筛选方法 xff0c 至少让其达到Excel的数据筛选程度 一 从多维数组中取某些行或列组合为新数组 示例如下 xff1a 取某些列组成新数组 newdata span class toke

随机推荐

  • kurento-room的搭建教程,绝对可行

    目前网上参考的kurento room的搭建教程 xff0c 比如https blog csdn net u010602143 article details 106670864 已经跑不起了 我估计原来也跑不起 原因很简单 xff0c k
  • Python 爬取携程所有机票

    打开携程网 xff0c 查询机票 xff0c 如广州到成都 这时网址为 xff1a http flights ctrip com booking CAN CTU day 1 html DDate1 61 2018 06 15 其中 xff0
  • Rust Web框架warp使用

    目录 简介快速开始Request和Response从path和body中获取参数从query中获取参数 设置状态码 静态文件 目录websocket重定向tls 简介 warp是一个超级便捷 可组合 速度极快的异步Web框架 目前最新版本为
  • CCNP路由实验之四 动态路由协议之EIGRP

    CCNP 路由实验之四 动态路由协议之 EIGRP 动态路由协议可以自动的发现远程网络 xff0c 只要网络拓扑结构发生了变化 xff0c 路由器就会相互交换路由信息 xff0c 不仅能够自动获知新增加的网络 xff0c 还可以在当前网络连
  • C++中typedef用法说明

    typedef声明提供了一种将标识符声明为类型别名的方法 xff0c 用于替换复杂的类型名 解释 在声明中使用typedef说明符时 xff0c 会指定这个声明是typedef声明 xff0c 而不是变量或函数声明 通常 xff0c typ
  • Ubuntu 服务配置(sysv-rc-conf)

    版权声明 xff1a 本文为博主原创文章 xff0c 未经博主允许不得转载 sudo apt get install sysv rc conf sudo sysv rc conf 运行级别说明 xff1a S表示开机后就会运行的服务0表示关
  • 安装vnc的各种悲剧解决

    系统 环境 VM 43 RHEL5 1 root 64 localhost vnc uname r 2 6 18 53 el5xen 本地XP系统安装 VNCVIEW去控制VM中的RHEL5 1 下面在LINUX上安装VNCSERVER 1
  • iOS基础 UITabBarController

    使用 创建子控制器继承自UITabBarController xff0c 在viewDidLoad阶段 xff0c 把各个分页上的控制器给创建好 xff0c 用UITabBarController的方法addChildControoler相
  • 插入内核模块失败提示"Invalid module format"

    产品需要编译自己的定制内核 43 内核模块 xff0c 下载内核源码定制修改后rpmbuild方式 点击打开链接 编译升级内核 xff0c 如下方式编译内核模块 make C kernel source SUBDIRS 61 96 pwd
  • microsoft visual c++ build tools

    因为visual studio的安装包太大 xff0c 所以在不需要开发的情况下 xff0c 可以选择使用microsoft visual c 43 43 build tools安装c 43 43 编译器 xff0c 这个工具会小很多 安装
  • C++ 应用程序 内存结构 --- BSS段,数据段,代码段,堆内存和栈

    转自 xff1a http hi baidu com C6 BF D6 D0 B5 C4 C5 AE CE D7 blog item 5043d08e741075f3503d922c html ld 时把所有的目标文件的代码段组合成一个代码
  • 4.1 简单题 - B 恭喜你

    当别人告诉你自己考了 x 分的时候 xff0c 你要回答说 xff1a 恭喜你考了 x 分 xff01 比如小明告诉你他考了90分 xff0c 你就用汉语拼音打出来 gong xi ni kao le 90 fen 输入格式 xff1a 输
  • <script>在页面代码上没有显示

    记录一下 导入js文件 xff0c 自己路径都没有问题 xff0c 为什么在浏览器查看页面代码没有自己写的那行js导入文件的代码呢 xff0c 原来 xff0c 是之前看着不舒服 xff0c 点了exclude xff0c exclude是
  • 利用Rust构建一个REST API服务

    利用Rust构建一个REST API服务 关注公众号 xff1a 香菜粉丝 了解更多精彩内容 Rust 是一个拥有很多忠实粉丝的编程语言 xff0c 还是很难找到一些用它构建的项目 xff0c 而且掌握起来甚至有点难度 想要开始学习一门编程
  • 安装cmake3.22

    升级cmake版本 脚本 span class token assign left variable file name span span class token operator 61 span cmake 3 22 0 yum era
  • stdout stderr 重定向到文件

    1 stdout stderr 重定向 1 stdout stderr 重定向 1 1 dup dup2 重定向到已打开文件 或 新文件1 2 freopen 重定向到新文件1 3 命令行重定向1 4 参考资料 1 1 dup dup2 重
  • 逆向基础-Windows驱动开发(一)

    Windows内核开发 第一个驱动程序 环境配置 xff1a 安装WDK xff1a WDK版本与SDK保持一致 然后记得把Spectre Mitigation给Disabled掉 xff0c 就不用去下载漏洞补丁了 然后在内核层 xff0
  • json-c 理解记录

    1 json c 理解记录 1 json c 理解记录 1 1 编译及说明1 2 特色1 3 使用 1 3 1 创建 xff0c 读写文件1 3 2 拷贝1 3 3 增改 1 3 3 1 字典增加元素1 3 3 2 数组增加修改元素 1 3
  • valgrind 简介(内存检查工具)

    1 valgrind 简介 1 valgrind 简介 1 1 概图1 2 特点1 3 使用示例1 4 参数说明 1 4 1 常用参数1 4 2 展示1 4 3 子进程 动态加载库及记录时机1 4 4 查错内存优化1 4 5 其他不常用1
  • GObject学习教程---第一章:GObject是有用并且简单的

    索引 xff1a https blog csdn net knowledgebao article details 84633798 本文是学习学习他人的博客的心得 xff08 具体详见 楼主见解 xff09 xff0c 如果源网站可访问的