【设计哲学】字符串到底该是什么?
本帖最后由 白冥 于 2024-6-19 05:27 编辑有的编程语言(如Python、JavaScript、Java、C#、Go等)会将字符串视为基本数据类型之一,其他基本数据类型一样不可改变,他们认为字符(character)只不过是长度为一的字符串。有的编程语言(如C、C++、Ruby等)会将字符串视为复合的数据结构,是字符数组(characters array)或类似的数据结构,字符串的每一个字符都可以像其他数组或类似的数据结构一样随意更替,甚至添加或删除字符(除非有意设计成不可变数据结构)。
为什么各个编程语言对字符串(string/String)持有有不同的观点?
从性能方面考虑,有些编程语言支持并发操作,会有一种线程池优化机制,相同的字符串实例可以被共享,以节省内存资源,此时如果字符串是可变的,则会因为其中一个引用修改它而造成线程安全问题。
从安全方面考虑,有些编程语言被用于通信领域和加密场景,不可变性意味着字符串一旦创建就不能被修改,这有助于防止意外的数据损坏或安全漏洞,使得字符串操作更加可预测,减少了由于修改导致的错误。
从操作灵活性方面考虑,有些编程语言作为底层开发语言,更注重底层管理和控制,需要频繁修改字符串内容,能够直接修改字符串中的字符则提供了更大的灵活性,如果大量创建字符串实例,反而不易管理和控制。
一般高级的编程语言往往侧重于应用层的开发,诸如通讯软件、购物网站、交易平台、大语言模型等等领域往往要求高并发、多线程与安全的通信交互,因此他们更倾向于将字符串视为不可变的基本数据类型。而底层的编程语言则侧重于系统层的开发,诸如操作系统、嵌入式设计、游戏引擎等领域往往要求可以灵活且精细地控制内存与性能,创建大量字符串实例不易管理和控制,因此他们更倾向于将字符串视为可变的复合数据结构。
所以,如果一门编程语言是高级的,那么它通常将字符串视为不可变的基础数据类型,反之,如果一门编程语言是底层的,那么它通常将字符串视为可变的复合数据结构。
随着编程语言的发展,一些现代语言(如Swift和Kotlin)对字符串又有不一样的看法。例如,Swift将字符串视为基本数据类型,又提供了高效的修改操作,通过Copy-On-Write技术来平衡不可变性和性能需求。这种设计既保留了不可变数据类型的优点,又在一定程度上提供了可变性。
不同语言对字符串的处理确实不一样,内置的字符串处理函数的功能也不太一样 本帖最后由 Fenriusclaws 于 2024-6-19 09:22 编辑
看甲方需求(
甲方如果想让你在java里搞出一套可替换string,那就给他现编一套string array,替换就到array里面操作,毕竟甲方爸爸的要求不能忤逆(10年前的编程知识了,现在基本已经全部忘光 不同的编辑语言字符串都不同,但是大致都能相通不,我只会python,感觉python比较简单 不是你们都能看得懂吗?可能是因为我没学过编程,只会白嫖大佬们的脚本 字符串是由字符组成的线性序列,一些高级语言里的字符串对象是不可变的如pythhon,python会将字符串单独认作一个不可变的数据类型。
但是像c/c++中的字符串是可以变的,c\c++会把字符串看做是由字符数组组成的序列,因此是可变的(也可以自行设置为静态,即不可变)。 完全没学过编程,只能蹭别人的脚本这样子。。。 对于门外汉有一种在做阅读理解的感觉 感觉更像是块这个概念吧 可以根据应用需求选择整体调用还是分解开来仔细改动
可以理解成字符串在更底层的甚至是机器语言中是字符数组 可以进行字符级的修改以进行内存性能控制
但是在并发程序进行字符串共享时修改与引用可能会导致线程安全问题
而在高级的编程语言中为了数据不被意外篡改和产生安全漏洞 字符串一般视作不可变的基本数据类型
楼主自己设想的字符串视为不可变容器 字符串内单个元素也视为字符串 未访问字符串返回空且未访问字符串是惰性的
结合了底层编程语言控制精细化和高级语言的并发安全 但是由于有引用计数和回收会带来额外性能开销 字符串引用过多会造成内存泄漏 字符串的本质上只是一种编程语言想让机械理解的模因,在这一点上他与字母之间没有任何区别,都是 传达信息的作用,理论上来说如果从零编辑一套足够成熟度的编程体系的话,你甚至能让中文汉字字符取代掉现在的编程体系 :hug:好高级!~可能这就是类似于喜欢数学的人对数学的喜好一样吧(虽然我不懂) 完全不懂。。嗯我感觉我需要去了解一下 哦莫,我头好痛,楼楼有自己的思考很好呢,加油~ 0-0 小白悄咪咪的路过 静静的看大佬们讨论jpg 这给我干哪来了 这还是国内吗?隔行如隔山 我祝我成功吧 不就是array of strings吗,感觉还好呀 只在大学学过VB的菜鸡表示字都会认但读不懂{:6_200:} 噗,还记得之前开的python课,期末考试我就是直接傻傻背那些代码:'(完全摸瞎,然后就死记硬背 我在gm学习计算机.jpg前来支持惹 想学一门简单实用的编程语言,觉得以后说不定会派上用场,但一直没什么动力 :P 感谢大大教学,我也没太弄懂是什么,感觉只要会用就行了吧
页:
[1]
2