导航:
论坛 -> DELPHI技术
斑竹:liumazi,sephil
作者:
2023/3/22 16:02:22
标题:
c++builder的质量真的成问题
浏览:2239
加入我的收藏
楼主:
我写了一个数据对象转换器,用的是模版,当然,也只能用模版。vc, gcc, mingw, clang都能成功运行。c++builder编译能同样,运行就崩溃了。我在调试时看到,传入的一个const类变量在函数内地址竟然变成了nullptr。首先,这个类本身是只读的静态类,不可能出现被释放置空的情况。其次,传入的变量即使被释放了,函数内的地址也不可能变。但是事情发生了。真不知道这个编译器干了些什么事情,不是说用的clang吗,就这?也真是让人无语。放弃了。
----------------------------------------------
-
作者:
2023/3/22 16:17:15
1楼:
有CODE 有真相!!
----------------------------------------------
-
作者:
2023/3/22 19:35:22
2楼:
向来不赞成用CB, 如果贪图快速开发就用Delphi, 如果希望利用C/C++庞大的生态,就用VC等, CB两不讨好,加之EMB小企业,投入不足.
----------------------------------------------
UniKeeper V10.30 -- 您最贴心的个人数据管理助手
作者:
2023/3/22 20:19:06
3楼:
別亂講, CB 我用過, 完全沒問題, ON PRODUCTION.
----------------------------------------------
-
作者:
2023/3/23 9:13:41
4楼:
vs的IDE天下无敌啊,我也想用啊,但是用vc做GUI和数据库简直是要命啊。。。无奈,还是用c++ builder将就一下啦。。。
----------------------------------------------
C++ builder 用户前来摸鱼。。。
作者:
hs_kill (lzl_17948876)
★☆☆☆☆
-
普通会员
2023/3/23 10:05:18
5楼:
都天下无敌了怎么还能要命呢 不可能的 绝对不可能的 GUI不好做绝对不是VSCODE的问题那肯定是你的问题, 你为什么要用GUI呢, VSCODE告诉你程序不需要GUI
----------------------------------------------
http://www.cnblogs.com/lzl_17948876/
作者:
2023/3/23 10:10:41
6楼:
话说,现在用ue4做UI貌似挺不错啊,看到好多文章了,有必要入坑吗?
----------------------------------------------
C++ builder 用户前来摸鱼。。。
作者:
2023/3/23 10:13:06
7楼:
c++ builder,前几个版本留下的问题,如果你开发64位程序,FireDAC无法在Release模式下使用,你必须要带上它的运行库。。。不知道最新版本解决了没有,应该是没解决。。
----------------------------------------------
C++ builder 用户前来摸鱼。。。
作者:
2023/3/23 10:55:16
5楼:
to 3楼:这需要乱讲吗?有意义吗?我都还没说,有特化版本的存在,调试器就乱跳,根本不走正常路线。 to 2楼、4楼:我猜测,现在用cb的年龄都不小了吧?我拿cb只是玩一下,相当于怀旧,不用做生产工具。c++用qt是很不错的选择。用widget+qss的方式,就是类似delphi的rad的方式,界面也可以做得漂亮。如果是复杂界面,也是自绘,与delphi控件类似。qt还提供qml方式,与web类似,采用申明式的方式,可以方便的做出各种漂亮复杂的界面。说实在的,这比自绘的方式方便太多了。vs还有qt插件,完全可以在vs中写qt代码。提示、调试,毫无压力。
----------------------------------------------
-
作者:
2023/3/23 11:36:32
8楼:
我反正一直在用C++ builder做生产工具。小项目,大项目都用过。说实话,虽然IDE比较难用。但是在我所做的项目中,数据库,界面,多线程这些都能胜任。没有哪个项目是因为C++ builder本身的问题而无法完成的。我也知道VS下写代码很安逸,IDE优秀,但是一旦涉及到界面和数据库,还是C++ builder来的快。 可能我所接触到的项目比较单一吧。。。。
----------------------------------------------
C++ builder 用户前来摸鱼。。。
作者:
2023/3/23 11:38:33
9楼:
我也有些项目用vc做的,GUI用的MFC,一旦涉及到界面和数据库,那种恶心程度令你难以想象。。。在C++ builder摆几个控件的事情,在MFC里会把你搞到抓狂。。。
----------------------------------------------
C++ builder 用户前来摸鱼。。。
作者:
2023/3/23 11:42:27
10楼:
C++ builder做的软件也没有任何问题,我做过的一些软件,在一些工业现场,7x24小时连续跑了两年多,也没出过问题,最后是现场那台PC挂了,我软件都没崩过。。。软件包含了TCP通信,串口通信,数据库操作。 就我的经验来看,很少有项目是因为C++ builder本身的问题而无法完成的,可能我做的东西比较单一吧
----------------------------------------------
C++ builder 用户前来摸鱼。。。
作者:
2023/3/23 18:10:32
11楼:
编译模式是经典的?改为非经典看看
----------------------------------------------
-
作者:
2023/3/24 4:40:59
12楼:
设置成非优化模式试试,等你回复啊!!! 因为Delphi有些情况在优化情况下也出问题。
----------------------------------------------
只有偏执狂才能生存!
作者:
2023/3/24 7:07:54
13楼:
先别急着下结论,多半是你不会用,如果连这么简单的处理编译都出错,EMB就真的太差了。 就像之前有个贴,随便弄几下就发现system单元的bug,可能性很小。 你的类是不是继承TInterfacedObject,实现了接口? 你试下不声明为const,看会不会问题依旧。 DELPHI在变量的生命周期管理上,设计和实现都有点不完善,没办法水平就这样。
----------------------------------------------
软件是什么,相信很多人都说不清。
作者:
2023/3/24 10:48:36
14楼:
to 11楼:我用的x64。经典编译器编译不了,因为这个代码全是模版,而且是比较复杂的模版。c++没有反射,不能在运行期进行反射赋值。数据转换器,那么一定要把对象体系映射出来,也要区分值、指针、数组、枚举、容器。这些东西,只能是编译期处理。转换的内容包括数据库、doc数据库、json、xml,二进制对象。而且这些转换的对象,还需要支持继承。我希望开箱即用,但是又能让使用者几乎可以完全控制,比如在处理关系数库数据、doc数据库时,就需要处理自定义命令,指定的字段,参数格式,还要能从对象生成数据库。另外,需要支持新的数据格式,在支持新数据格式时,是不能修改转换器的。这些内容放在一起,非常的复杂了。这是经典编译器无法胜任的。 to 12楼:我用的是debug模式调试的。 to 13楼:我用的是c++,全模版,没有继承。在我的理解里,debug模式下,加const和不加const,编译器应该不去做优化的。 to 9楼:如果开发过程中不用模版,只用oo,c++builder是一个不错的选择。如果用到c++11以后的东西,从我的经验看,用qt是不错的。因为qt没有自己的编译器,而是直接用vc、gcc、clang。界面方面,它提供rad方式,也提供web式的,做复杂的界面很容易。我是重度使用模版,编译器得跟上才行。
----------------------------------------------
-
作者:
2023/3/24 11:25:42
15楼:
C++ 還要REFLECT? 不會吧, 哪當年寫C 的不就要死一死了。 怎麼寫? 還是哪句話, 有CODE 有真相,你給不出來,就只好這樣。
----------------------------------------------
-
作者:
2023/3/24 17:06:33
16楼:
to 15楼,我把代码与编译期相关的原因说得非常清楚了,但是看样子,你对编译期这个词的含义都不太清楚。编译期这含义,还是在98标准下就有过世界性的大讨论的。我很好奇,你的c++知识体系停留在什么年代呢?
----------------------------------------------
-
作者:
2023/3/24 17:32:39
17楼:
C++ Builder 的 C 运行库的一些函数,不符合 C11 标准,比如 snprintf,VC++、GCCC、clang 的都没问题。在C++方面,C++ Builder 虽然用了 clang++,还是与真正的 clang++ 有区别。遇到过一次,就不想再搞了,见到C++ Builder就绕开了。
----------------------------------------------
-
作者:
2023/3/24 18:00:26
18楼:
to 16樓的, 我也不知你知不知我在寫TEMPLATE 時, VC++ 還是6 呢, 才剛SUPPORT 而已呢。 不知你呢? 還是哪句話, 有CODE 有真相,你給不出來,就只好這樣。
----------------------------------------------
-
作者:
2023/3/24 18:18:03
19楼:
如果是COMPILER 在CODE GENERATION 時有問題, 哪麼在相同的語法上,一段簡單的CODE,也一樣會有問題。 如果是RUNTIME 寫的問題,哪必然是寫的人的問題。 題外話,JAVA 在還沒有TEMPLATE 時,大家在寫WEB 時,將東西丟到SESSION 中,還不就一樣是不同的CLASS, 丟到同一個SESSION OBJECT。照樣拿出來用,就是很麻煩的 不斷的UPCAST, DOWN CAST 而已。 誰又規定了一定要有TEMPLATE 呢?
----------------------------------------------
-
作者:
2023/3/24 18:36:54
20楼:
楼主你就另外做个小东西,去掉多余能说明问题的程序,编译下看看是不是依旧有问题。 想确定是不是编译器的问题不是那么简单,你得找出它啥时候会出错啥时候不会,找不出那很可能是你不会用。 十有八九都是你的程序问题。
----------------------------------------------
软件是什么,相信很多人都说不清。
作者:
2023/3/24 19:30:20
21楼:
to powerpcer(小强),你可以试试下面的代码: int TForm1::do_find(const wchar_t* current_dir) { if (current_dir == nullptr || current_dir[0] == L'\0') return -1; wchar_t work_dir_backup[_MAX_PATH]; _wgetcwd(work_dir_backup, _MAX_PATH); _wchdir(current_dir); wchar_t current_path[_MAX_PATH]; memset(current_path, 0, sizeof(current_path)); wcsncpy_s(current_path, _MAX_PATH, current_dir, _MAX_PATH); wcsncat_s(current_path, _MAX_PATH, LR"raw(\)raw", 1); wcsncat_s(current_path, _MAX_PATH, L"*", 2); struct _wfinddatai64_t file_info; memset(&file_info, 0, sizeof(struct _wfinddatai64_t)); intptr_t handle { _wfindfirsti64(current_path, &file_info) }; if (handle == -1LL) return -1; do { if (file_info.name[0] == L'.' && (file_info.name[1] == L'\0' || file_info.name[1] == L'.')) continue; memset(current_path, 0, sizeof(current_path)); wcsncpy_s(current_path, _MAX_PATH, current_dir, _MAX_PATH); wcsncat_s(current_path, _MAX_PATH, L"\\", 1); wcsncat_s(current_path, _MAX_PATH, file_info.name, _MAX_PATH); if ((file_info.attrib & _A_SUBDIR) == _A_SUBDIR) { do_find(current_path); ++dir_count_; } else { ++file_count_; } Memo1->Lines->Add(current_path); memset(&file_info, 0, sizeof(struct _wfinddatai64_t)); } while (!stop_ && _wfindnexti64(handle, &file_info) != -1); _findclose(handle); _wchdir(work_dir_backup); return file_count_ + dir_count_; }
----------------------------------------------
-
作者:
2023/3/24 19:31:57
22楼:
把上面的代码,在 C++ Builder 11.3 中编译成 64 位程序,是会崩溃的。
----------------------------------------------
-
作者:
2023/3/24 20:47:15
23楼:
你可以整個PROJECT 包上來嗎? 不然猜啞謎就不好了。
----------------------------------------------
-
作者:
2023/3/24 21:08:44
24楼:
wcsncpy_s(current_path, _MAX_PATH, current_dir, _MAX_PATH); wcsncat_s(current_path, _MAX_PATH, LR"raw(\)raw", 1);<-- 這是一個明顯的問題。 wcsncat_s(current_path, _MAX_PATH, L"*", 2); 按 https://en.cppreference.com/w/c/string/wide/wcsncat 或中文版 https://www.apiref.com/cpp-zh/c/string/wide/wcsncat.html 若你的current_dir 有_MAX_PATH 個WCHAR 了,且 wcsncat_s 這應該是從 current_path 中的第 _MAX_PATH 個進行concat。 但你的 current_path 只有 _MAX_PATH 個字長而已呢,你concat 完1 個又 2 個呢。 你認為他們要跑到去哪好呢?
----------------------------------------------
-
作者:
2023/3/24 21:51:51
25楼:
用UnicodeString a,b,c,s; s=a+b+c; 不爽吗? 哪怕用 std::string也可以。 用纯C的库函数还要注意数组空间溢出和结尾0字符的问题,多累。
----------------------------------------------
-
作者:
2023/3/24 23:05:34
26楼:
其实,这个问题,我是解决了的。出问题的是 C++ Builder 11.3 的 CRT 里面的_wfindnexti64 函数。我的解决方法是,把 VC++ 2022 的 UCRT 里的相关函数,复制过来,替代了 C++ Builder 11.3 自己的函数,就没问题了。还有一种解决方法,就是直接使用 Windows API。C++ Builder 11.2 也没问题。
此帖子包含附件: 大小: 8.3K
----------------------------------------------
-
作者:
2023/3/24 23:08:03
27楼:
这是是工程文件。
----------------------------------------------
-
作者:
2023/3/24 23:13:29
28楼:
各位,有没有方法,跟踪执行 C++ Builder 的 CRT 代码?VC++里很容易就可以单步调试执行 UCRT 代码,各种处理一目了然。好像 C++ Builder 不能执行到 CRT 代码。是不是有什么选项需要设置一下?
----------------------------------------------
-
作者:
2023/3/24 23:25:53
26楼:
to 18楼:用工具来说明掌握知识的程度,基本没有意义。vc6,那也是有模板以来,很多年以后的发行版了。千万不要说vc6是才支持模板这种话。可以稍微给一个提示,盒子是可以看到他人注册日期的。 技术问题,懂了就懂了,不懂就不懂,明眼人一下就看出来了。从我开始回复你,到后面你又提到模板,更进一步说明,你对模板了解极少。java那是泛型,不是模板。一个历史知识,c++最开始叫泛型,但是后来其他语言跟着引入了泛型,但是又不是图灵完备。为了区分,所以c++就叫模板了。 你举java的例子,恰好说明你对c++模板不了解。别拿其他语言的泛型类对比c++模板,两者天差地别,毫无可比性。你说的那种方式在c++里面完全行不通,连语法都通不过。最后我只能说,盒子绝大部分人用delphi,不要在c++社区说上面的话。
----------------------------------------------
-
作者:
2023/3/24 23:47:15
29楼:
既 然 想 看 代 码,那 就 发 一 部 分 吧。数 据 分 派 器。一 套 代 码,可 以 分 派 给 网 络,也 可 以 当 作 本 机 事 件 分 派。 希 望 有 收 获。 上 面 这 几句, 竟然 有 敏 干 词。。。
----------------------------------------------
-
作者:
2023/3/25 0:01:47
30楼:
to 26 樓 我是不知你能不能講出TEMPLATE 和GENERIC 的差異? 請列出來。 要記住一件事,JAVA 和 C++ 有一個很大的差異哦。這是導致 LANGUAGE 在實作時出現的差異。 還是哪句話,沒TEMPLATE 也好, GENERIC 也好,一樣是哪樣寫。 致於C++ GEEKS 就沒什麼好討論的,因為你不是為解決問題,而解決問題, 是為了用你心中的語法來解決問題。 我對心情上的東西,不作討論。你爽就好。 就正如有人搞不清楚, CALL BY VALUE 還是CALL BY REFERENCE,用在JAVA 上時要怎麼辦, 在C VS PASCAL 時要怎麼辦, C++ VS PASCAL時要怎麼辦。 讀懂的人懂,不懂的人。隨他去。
----------------------------------------------
-
作者:
2023/3/25 0:03:59
31楼:
to downtyzc (downtyzc)。 有啥好學的? 你還是給出有問題的CODE 吧。 看是COMPILER 的錯還是你的錯。
----------------------------------------------
-
作者:
2023/3/25 7:29:41
32楼:
"那也是有模板以来,很多年以后的发行版了。千万不要说vc6是才支持模板这种话" 給個倚老賣老的故事。 template 的support 是 C++ 99 的標準,制訂在1999年。 VC6 第一版在1998年,下一個版本是VC7 於2002 年發行。 哪VC6 之前有SUPPORT TEMPLATE 嗎? 有的, VC4.2 一個四肢只有一肢的,member templates<--不SUPPORT VC5 一個四肢只有2 肢的。以上都別談STL 這東西。 到了VC6 都還是四肢不健全的狀況,但第一個有SUPPORT STL 的就是VC6 了。 千萬別跟我講你1997 年就在寫TEMPLATE 了。
----------------------------------------------
-
作者:
2023/3/25 8:29:33
33楼:
这是对char wchar_t理解不透,混用造成的内存地址错误
----------------------------------------------
-
作者:
2023/3/25 9:44:49
34楼:
再來一個實際的知識,就是 Bjarne Stroustrup 不管在他的 The C++ Programming Language 3rd 1997年 寫: Templates provide direct support for generic programming (§2.7)。 還是 The C++ Programming Language 4th 2013年 寫: Templates provide direct support for generic programming (§3.4)。 實在是不明白,什麼叫TEMPLATE 不是GENERIC? 看來GEEKS 們都是很能自我感覺良好。 要說Templates TOTALLY DIFFERENCE FROM JAVA GENERIC , 主要是體現在 COMPILER 實現層的事。和AP 開發者無關。 至於一些語言本身的差異,就別說了,才五項不同關於TEMPLATE 和GENERIC 的。 真的不知多天差地遠。
----------------------------------------------
-
作者:
2023/3/25 16:55:43
35楼:
你还真特么不要脸。只要一说模板,第一个概念就是编译期。特么连编译期都不懂的东西,有脸来说模板。劳资免费教育你,是给你脸了是不?劳资发的线上跑的代码,你特么一个连起码模板都不懂的货,腆着脸说有问题。你特么是个什么东西。这才真是对上了那句话:我从未见过如此厚颜无耻之人!劳资真算开眼了,世界上有这样的东西!就这代码,劳资给你50年时间你都看不懂!就你,胆敢去c++社区,早就让人当作智障了! 看你愚蠢到template是什么时候有都不知道,劳资最后教育你一次,你特么连borland c++3.x都没听过?还特么在那里装。 滚!
----------------------------------------------
-
作者:
2023/3/25 17:03:26
36楼:
提到模板,第一个概念就是编译期。做个类比,好比说到写程序,就需要有开发语言。一个连写程序需要开发语言这件事都不知道的人,跑来说谈程序该怎样怎样写,这谁受得了? 劳资真的从未见过如此厚颜无耻之人!从未!
----------------------------------------------
-
作者:
2023/3/25 18:31:28
37楼:
编译期,所以呢? 然後呢? 你還未回我, JAVA GENERIC 和C++ TEMPLATE 差多少了。 除了编译期,這件事是"COMPILER DEVELOPER" 的事,我APP 開發要去管它? 再來borland c++ 只有 3.0 和 3.1 兩個版本分別是1991 年以及1992年的事。 我手上剛好有 Cantù, Marco 的 Borland C++ 3.1 object-oriented programming. 第10章, 在307 頁開始,到333 頁。一開始是先講如何 "emulating genericity with macro" wowow.....還好不是templatecity 另外: Borland C++ Version_3.1 Programmers Guide 1992年 中提到: Templates, also called generics or parameterized types, allow you to construct a family of related functions or classes. ANYWAY,除了這些外,其它BC++ 3.1 的書,都沒在提這件事,包括 Borland C++ handbook 1994年 也沒隻字未提。 如果只有哪書的樣子的, 就叫SUPPORT TEMPLATE,哪能跑STL? 哪VC++ 6 不就去死一死好了?
----------------------------------------------
-
作者:
2023/3/25 21:59:15
38楼:
to liyanhong (李彦宏): 写CBuilder的运行库的人也忒马大哈了吧?ffile.c中实现把FindFirstFile的返回值赋给long型的nexthandle?Win平台上无论32/64位long都等价于int。这么赋值将导致64位下HANDLE的高32位被截断。狂晕 :-( 截屏上图 call 0x12a6b40即为运行库ffile.c的__tfindnexti64函数调用FindFirstFile API处,可以看到rax返回的64位HANDLE(寄存器窗口可以看到rax的高32位不为零)。结果下图__tfindnexti64函数即将返回时CMovE指令将r15d传送到eax中作为返回值,高32位被截断
此帖子包含附件: 大小: 132.8K
----------------------------------------------
-
作者:
2023/3/25 23:57:16
39楼:
to liyanhong (李彦宏): 你前面的帖子提到你用旧一点的CBuilder版本测试没问题,我用CBuilder 10.4试了一下你的工程,确实能跑起来,跟踪进去发现FindFirstFile这个API每次返回的HANDLE的高32位是0。因为Win下的HANDLE一般是指向操作系统建立的某个数据结构的指针,所以我猜测CBuilder 11.3下编译的exe缺省开启高熵ASLR了,这是64位下让虚拟地址分配高度随机化而规避恶意软件破坏的安全措施。打开项目选项的连接器设置发现果然不出我所料。把截屏中的那个高熵ASLR选项关闭,你的程序在11.3下编译成64位就可以运行了。但不能因此认为CBuilder的旧版本编译的64位程序就是对的,因为即使在高熵ASLR选项关闭的情况下,微软的API文档也没打包票说返回的HANDLE的高32位一定就是0。
此帖子包含附件: 大小: 100.2K
----------------------------------------------
-
作者:
2023/3/26 9:31:50
40楼:
像这种不尊重别人,讲话阴阳怪气,不讲和谐不利团结,开口骂人的恶霸就要逐出本坛。 别说那么高深,模板和泛型没什么神秘的,讲穿了就宏占位在实例化替代为真实类型而已。 泛型在绝大多数情况下就是模板,如果不是的话,也是个别语言做了概念延伸,但并不影响“泛型在绝大多数情况下就是模板”这一结论。 下面是百度说的,也是大多数技术资料的解释: 泛型程序设计(generic programming)是程序设计语言的一种风格或范式。泛型允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型。各种程序设计语言和其编译器、运行环境对泛型的支持均不一样。Ada、Delphi、Eiffel、Java、C#、F#、Swift 和 Visual Basic .NET 称之为泛型(generics);ML、Scala 和 Haskell 称之为参数多态(parametric polymorphism);C++ 和 D称之为模板。具有广泛影响的1994年版的《Design Patterns》一书称之为参数化类型(parameterized type)。
----------------------------------------------
-
作者:
2023/3/26 11:59:47
41楼:
to merced (merced) 我用你说的方法试了一下,确实可以解决问题。我也是才注意到 CB 11.3 的 _wfindfirsti64 返回值是 long。我看了一下,我从 VC++ 里复制过来的代码中,_wfindfirsti64 返回值是 intptr_t,在 64 位程序中,intptr_t 是个 64 位的整数。您的提示让我醍醐灌顶、受益匪浅,谢谢!
----------------------------------------------
-
作者:
2023/3/26 18:19:00
42楼:
c++ builder 确实诸多问题, 但是此贴的问题我猜测你的原因可能比较大
----------------------------------------------
-
作者:
2023/3/26 18:20:38
43楼:
to hardnut : 可以理解为CB 两头不站优势, 但是换个思路也可以理解为两头都有优势 工具只是工具, 人要善于工具
----------------------------------------------
-
作者:
2023/3/26 21:38:39
44楼:
BCB VS VC++, 在對C++ 標準的SUPPORT 一直都是一個問題。永遠落後VC++。 在CODE OPTIMIZATION 上,也無法跟VC++ 比。 BORLAND 在這方面比較弱,就算是D7(2002年) VS VC++ 6(1998年,但一直有出SERIVCE PACK,對標SP2), 相同的行為上D7 依然是小輸。 但DEBUG MODE D7 會贏。 看來是 Anders Hejlsberg(高中生而已哦!!) 在場也無法改變。
----------------------------------------------
-
作者:
2023/4/10 15:02:12
45楼:
A few weeks ago we released RAD Studio and C++Builder 11.3, a quality release that’s been met with wide praise as the best of any recent version. This builds on several releases of 11.x, including our dedicated C++ quality release, 11.1.5. With that quality background, we want to share some amazing plans for the future of C++Builder and C++ within RAD Studio! 1. Upgrading Clang, but going far beyond just ‘upgrading’ Clang; 2. Integrating key features of Visual Assist, another very popular C++ tool in the Idera family, into C++Builder. Product Manager David Millington has published a blog post elaborating on the ambitious plans for C++Builder, with detailed information and screenshots showing the product team’s work! We’re delighted to invite you to read David’s exciting blog post on what’s in store for the future of C++Builder.
----------------------------------------------
-
作者:
2023/4/10 22:08:48
46楼:
希望是能实现 https://blogs.embarcadero.com/whats-coming-for-cbuilder-an-amazing-preview/
----------------------------------------------
-
作者:
lsu (lsu)
★☆☆☆☆
-
普通会员
2023/4/14 9:13:11
47楼:
升级到Clang 15Clang C++Builder的编译器是基于Clang的,并以我们的语言扩展为基础。语言扩展是为了与Delphi的互操作性:如果你不知道,这两种语言可以被编译成同一个应用程序,甚至可以让C++的类继承Delphi中定义的类。C++也可以通过翻译的头文件使用和引用Delphi实现的代码,以及使用Delphi的机制,如属性。 我们将当前的Clang,即Clang 5版本升级到Clang 15--在功能和C++兼容性方面的巨大飞跃。 运行时和STL 历史上,我们一直有自己的C和C++运行时。我们还提供了比Windows C运行时更多的标准方法,包括一些POSIX方法。然而,如今C语言运行时是操作系统内置的标准Windows组件,所以我们正在研究使用UCRT--通用C语言运行时--并在其上添加我们的自定义或扩展方法。 我们的C++运行时很可能会保持不变,尽管我们正在调查某些领域的一些选项。 关于Clang升级的工作今天正在进行,而且已经进行了一段时间。一些领域仍在变化之中,这包括我们将使用的STL。 Clang和LLVM的动作很快,在我们发布这个升级后,我们计划不断地将远程存储库的变化整合到我们的存储库。与Delphi不同的是,C++Builder并不试图在不同的版本中保留ABI兼容性,即我们要求你重建C++对象文件和你在每个版本中链接的二进制文件(注意,Delphi生成的C++风格的对象文件和库是稳定的,它只是由C++编译器创建的任何东西)。这给了我们快速行动的自由,而在这种情况下,快速行动意味着保持最新。 整合Visual Assist 对于C++Builder来说,Clang的升级本身就是一个惊人的消息,但是还有更多。 几年前,Idera收购了Visual Assist,Visual Assist提供了比使用Visual C++更好的C++体验。因此,我们自然也要用它来填补C++Builder中的空白。 Visual Assist已经支持C++Builder的语言扩展(交付给Visual Studio客户的版本没有打开这个功能),我们现在正在努力整合VA的关键功能。我们目前正在努力整合到RAD Studio IDE本身。
----------------------------------------------
-