1.å¦ä¹ J2MEå¯ä»¥ä»äºçåªäºç±»å·¥ä½ï¼
2.å¦J2MEè½åä»ä¹
3.代码跟源码有什么区别
4.Poco库--1.编译(Win 10)
5.第28篇:深入理解RPython-RTyper/Backend组件
å¦ä¹ J2MEå¯ä»¥ä»äºçåªäºç±»å·¥ä½ï¼
ããå¦ä¹ J2MEå¯ä»¥ä»äºçå·¥ä½ç§ç±»ï¼
ãã1ãJ2ME游æå¼å人å
ããæ ¹æ®æ¸¸æçåæè ææ¡£è¦æ±ï¼å¨æç§ç¹å®çæºå(以Nokia SæSå± å¤)å¼å游æç¨åºãè¿æ¯ç°å¨å¤§é¨åJ2MEç¨åºåä»äºçå·¥ä½ã
ããéè¦çç»ææ¡ï¼é«çº§ç¨æ·çé¢ãä½çº§ç¨æ·çé¢ã线ç¨ï¼å¦ææ¯ç½ç»æ¸¸æï¼è¿éè¦çç»ç½ç»ç¼ç¨ã
ãã2ãJ2MEåºç¨å¼å人å
ããç°å¨ç移å¨åºç¨è¿ä¸æ¯å¾å¤ï¼ä½æ¯è¿æ¯åºç°äºä¸äºï¼ç¹å«æ¯ç§»å¨å®ä½ä»¥å移å¨åå¡ç¸å ³çå 容ãéè¦çç»ææ¡ï¼é«çº§ç¨æ·çé¢ã线ç¨åç½ç»ç¼ç¨ã
ãã3ãJ2ME游æ移æ¤äººå
ããåç §æºä»£ç ï¼å°å¯ä»¥å¨ä¸ä¸ªå¹³å°ä¸å¯ä»¥è¿è¡ç游æ移æ¤å°å ¶ä»å¹³å°ä¸å»ãä¾å¦å°Nokia Sç游æ移æ¤å°Sä¸ï¼æè ç´¢ç±çTççã主è¦æ¯æ§å¶å±å¹åæ ï¼æäºå¯è½éè¦æ¿æ¢ä¸äºAPIã
ããéè¦çæåå¹³å°ä¹é´çå·®å¼ä»¥åç¸å ³çææ¯åæ°ï¼æ¯å¦å±å¹å¤§å°ãæ大jaræ件尺寸ççã
ããJava ME(Java 2 Micro Editionï¼æ¯Java 2çä¸ä¸ªç»æé¨åï¼å®ä¸J2SEãJ2EE并称ãæ¯ä¸ºæºé¡¶çã移å¨çµè¯åPDAä¹ç±»åµå ¥å¼æ¶è´¹çµå设å¤æä¾çJavaè¯è¨å¹³å°ï¼å æ¬èææºåä¸ç³»åæ ååçJava APIãå®åJava SEãJava EEä¸èµ·ææJavaææ¯çä¸å¤§çæ¬ï¼å¹¶ä¸åæ ·æ¯éè¿JCPï¼Java Community Processï¼å¶è®¢çã
å¦J2MEè½åä»ä¹
å¦é¨åæ¹æè²å¨ææºæ¸¸æç¨åºå¶ä½æ¹é¢æç丰å¯çå¼åä¸æå¦ç®¡çç»éªçç¿æç£èå¸ä»ç»è§£éï¼ç±äºç°å¨ç社ä¼åå·¥è¶æ¥è¶ç»ï¼æ以J2MEä¹æèªå·±çä¸ç天å°ãããããèä¸ä¸ãJ2MEåºç¨å¼å人åããããéçææºåè½çè¶æ¥è¶æ¬ æï¼ææºç§»å¨åºç¨ä¹åå¾è¶æ¥æå¤ï¼ç¹å«æ¯ç§»å¨å®ä½ä»¥å移å¨åå¡ç¸å ³çå 容ãæä»¥ä½ åªè¦çç»ææ¡é«çº§ç¨æ·çé¢ã线ç¨åç½ç»ç¼ç¨è¿ä¸é¨åçç¥è¯ï¼é£ä¹ä½ å°±è½å¤èä»»J2MEåºç¨å¼åçå·¥ä½ãããããèä¸äºãJ2ME游æå¼å人åããããJ2ME游æå¼å人å主è¦æ¯æ ¹æ®æ¸¸æçåæè ææ¡£è¦æ±ï¼å¨æç§ç¹å®çæºåå¼å游æç¨åºãå ¶å®ç°å¨å¾å¤J2MEç¨åºåä¹å¨ä»äºè¿é¡¹å·¥ä½ãJä½ä¸ºä¸ä½2ME游æå¼å人ååºè¯¥è¦çç»ææ¡é«çº§ç¨æ·çé¢ãä½çº§ç¨æ·çé¢ã线ç¨ï¼å¦ææ¯ç½ç»æ¸¸æï¼é£ä¹è¿éè¦çç»ç½ç»ç¼ç¨ãããããèä¸ä¸ãJ2ME游æ移æ¤äººåããããJ2ME游æ移æ¤äººåçå·¥ä½å°±æ¯åç §æºä»£ç ï¼å°å¯ä»¥å¨ä¸ä¸ªå¹³å°ä¸å¯ä»¥è¿è¡ç游æ移æ¤å°å ¶ä»å¹³å°ä¸å»ï¼æ以è¿æ¯æ¯è¾èéªä»£ç ç¼ç¨è½åçå·¥ä½ãæ¨èé 读ãäºç»´ææºæ¸¸æJ2MEç¨åºè®¾è®¡çååãããããå¦J2MEè½åä»ä¹ï¼å ¶å®è½åçæå¾å¤ï¼å¨å¦é¨åæ¹æè²çææºæ¸¸æJAVA课ç¨ä½ç³»ä¸ï¼å°å¦ä¹ å°J2meåºç¨ç¨å¼åï¼å ¶ä¸å æ¬MIDletç¨åºæ¡æ¶ç使ç¨ãå¦ä½ä½¿ç¨J2MEä¸çé«çº§æ§ä»¶å¼ååºç¨ç¨åºçå 容ï¼å¹¶åå ãèªå¶çµè¯æ¬ããã家åºçè´¢å®ãããèªå¶çµåç¸åãç项ç®çå¶ä½ï¼å¦æå¦åå¯èä»»ææºåºç¨è½¯ä»¶å¼åå·¥ç¨å¸çå·¥ä½ã
代码跟源码有什么区别
源代码一般指的是:Html代码。
而代码指的源码是服务器所解析的语言,即服务器将代码翻译成为源代码。码元这种源代码浏览器可以识别,参照参考并从网页里面按照一定规则显示给用户,源码也就是码元个人引导源码我们看到的网页。
代码一般有:asp,参照参考php,源码aspx,码元jsp等等。
IIs将asp,参照参考aspx语言翻译成为Html语言。
apache可以将php=>html
tomcat,源码weblogic可以将jsp->html.
Poco库--1.编译(Win )
说明:1) 本编译方法为简化版,码元freetype2源码完整Poco库编译需借助额外软件如OpenSSL,参照参考本文不涉及此部分。源码
2) 使用的码元编译工具链为msvc ,如未安装需下载:此处链接。
源码地址:GitHub链接
编译环境:运行于win系统,采用msvc 编译工具链。
编译步骤:参照源码根目录README.md中关于Linux、macOS、Windows的CMake构建部分进行操作。
本方法编译静态库,如需动态库,idea 倒入android源码调整编译选项即可。执行cmake -LH .命令可查看生效的编译选项设置。第篇:深入理解RPython-RTyper/Backend组件
RTyper组件在RPython的复杂Python编译中,主要作用是作为Annotator的类型注释转换为目标底层语言能够识别的类型信息的中介。在实际使用中,RTyper组件几乎不需要导入额外的RPython模块。表1整理了RTyper组件与C代码之间的映射关系,为日后查阅相关C代码提供了便利。
以下是一个简单的示例代码,封装在一个名为triangle.py的脚本文件中。执行指令后,批量扫shell源码RPython生成的C代码被放置在临时目录中,如下图所示。在临时目录中,存在大量的命名为platcheck_的C源码文件,这些文件根据当前系统环境(包括C编译器特性、常量等)进行了定制化生成。
例如,查看一个名为platcheck_.c的文件,其中测试了当前系统环境下的浮点数相关库和C头文件,通过手动编译这些测试代码,可以查看一些常量的webshell打包整站源码值。这表明RPython编译PyPy源代码和自定义Python代码时,会使用C编译器从环境中提取系统平台信息。
在临时目录下的testing_1子目录中,主要源代码实现集中在该目录内,如下图所示。由RPython内置Python代码实现被翻译为C源码实现,其他文件可以通过观察C源码文件的命名风格来对应找到对应的Python源码实现。
在testing_1目录下,GC、RPython相关函数库的C代码和示例代码实现共计行。其中,Python代码相关的C版本实现被放入一个名为implement.c的文件中,包含对应Python函数名称的C版本实现。例如,对应main函数的C代码实现和calc_triangle_area函数的C代码实现。
值得注意的是,RPython生成的C代码中的代码风格可能与常规C程序猿编写的代码有所不同,大量使用goto语句,这对于C程序猿来说可能是一个挑战,但对C编译器来说可能是最优的代码设计方案。这些goto语句将代码分割成小代码片段,在一个C函数内部进行内联优化,减少不必要的程序栈帧开销。
阅读RPython生成的C代码时,可以遵循以下步骤:首先,参照Python源代码,找出变量x、y、z对应的C版本变量,并找到对应调用的C版本函数。例如,在pypy_g_main函数的第行,可以找到对应pypy_g_calc_triangle_area的调用。通过关键字查找,可以找到变量l_v、l_v、l_z_0的出处,进而找到RPyField宏定义的第一个传入参数的数据类型。
RPyField是一个宏定义,需要在PyPy源码的rpython/translator/src目录中的头文件中查找出处。通过加载rpython/translator/src目录下的相关头文件,可以找到如RPyField宏定义的实现。例如,RPyField宏定义中的第一个参数是一个指向某个数据结构成员的指针。
在阅读过程中,需要关注Python中的赋值操作如何在C代码中体现,以及如何通过反推找到相关操作的宏定义或函数。例如,查找从反推找到变量l_v关联的操作OP_ADR_ADD函数。在实际操作中,C语句通常简单地在CPU寄存器之间传值,不会产生额外的函数栈开销。
总结而言,理解RPython生成的C代码需要一定的技巧和方法。通过遵循上述步骤,可以更好地阅读和理解复杂代码。下篇文章将深入分析示例代码中的pypy_g_calc_triangle_area函数,并与Cython编译后的示例代码进行比较,提供更详细的分析。