瞎几把写 关于编程语言特性

这里写目录标题

~ 作者:invalid s
链接:https://www.zhihu.com/question/309875771/answer/579235911
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

我们不妨想象一下汇编程序员、C/C++程序员以及java程序员还有项目经理分别是怎么写程序的。
汇编程序员:这个语言没有if没有switch也没有for/while,甚至就连做个加法,我都得明确指出是单字节加法、双字节加法还是双字/四字加法……哦,我还得明确说明进位位是不是也要加上去。麻烦?连基本数据结构都没有,只能操作裸内存?但CPU的每一个动作都得听我指挥!
C/C++程序员:我不用管if/switch/for/while是如何实现的,我可以直接调用函数,大多数时候不用管函数调用究竟是什么……(
汇编程序员:谁压栈谁维护sp,是长跳转还是短跳转?现场谁保存谁恢复?)
C/C++程序员:滚!精神污染!程序员不需要考虑这些,他们真正要考虑的是算法!算法!Java程序员:一个天天纠结内存纠结指针的程序员也是醉了。咱不能多谈谈业务少谈谈算法吗?
C/C++程序员:你吃内存,你没我快!Java程序员:设计模式……C/C++程序员:语言设计太水才需要一大堆设计模式。以及,你吃内存,你没我快!
项目经理:都别吵吵了!去给我写个hello world!
众程序员:切!外行,连hello world都不会写!项目经理:这就是你们写的hello world?说好了要支持多国语言呢?
众程序员:你哪说了?项目经理:啊?没说?那现在说了!众程序员:去TM的需求变更!加班你掏钱?

你看,每一种语言,它都封装了一些东西——除了汇编。这些封装,使得它的使用者可以更简洁的完成日常功能的同时,也不可避免的要付出一些底层控制能力/灵活性方面的代价——毕竟你只能通过它提供的、“封装”的代理,才能完成任务
其中,汇编可以控制一切;但用它时,就连if你都得自己拆开,用cmp/jnz/jz等指令的组合实现类if控制结构——在程序流程控制可以无限精确、无限复杂的同时……你不觉得每次都得根据实际情况,把if这俩字母拆成三五条甚至十几条语句,太过繁琐了吗?而C/C++呢,你近似可以控制一切,汇编能做到的,你99.99%都能做到。这就大大提高了开发效率。等到了java,你失去了对内存的大部分控制权;但当你要写一个商业/工业程序时,却前所未有的简单。脚本语言,如python、php等,也都类似——它们比java更简单,但也更慢。

再往上,就是shell脚本了。shell脚本是一种比python更“糙”、因此性能等方面更为受限的语言;但它有个极大的优点,那就是可以把其他人写的程序本身,像其他语言的库函数那样使用。
为了做到这个,它要求每个程序都把命令行参数当作“函数输入”、向stdout/stderr的输出当作函数输出,同时以程序返回值说明执行成功与否。这个约定是强制性的,在操作系统设计时就确定了的——这也是C语言的main函数需要返回一个int的原因。但是,这个“命令行参数”的约定也束缚了shell,使得它比起其他语言更在乎空格/回车等符号——因为它的每一行,都必须是“命令 参数1 参数2”的格式。这个约定就使得它语法怪异,也很难像其他编程语言那样,支持语法结构的任意嵌套——不管有多像,它毕竟是“用命令行模拟出来的语法结构”。那么,这就是shell脚本的定位:**它是一种只能支持较为简单逻辑的、可以直接把任意现有程序当作函数无缝集成的“超高级语言”;
超级大缝合怪

**但因为“命令行模拟”这个本质,它的语法较为笨拙,很难像正规的脚本语言那样得到很多很多的语法糖或者其它便利。但,同样的,其它脚本语言语法结构是灵活了;但它们也就不可能很方便的和系统安装的现有程序交互了——注意是不方便,不是不能。你完全可以通过popen/shellexec等方法调用外部程序。
程序员都是一群特别特别“懒”的人。他们会根据目标的不同,选择能够最轻易达到目标的方法——这种选择同样包括编程语言。这反过来也导致了诸多不同定位的语言的出现。

Java语言封装了大量的特性,而且不用考虑内存问题,用起来很简单,能让使用者更加关注业务问题,
但是失去了内存的控制权,所能用的东西收到JAVA中api的限制,因此选择东西收到限制,而且内存不够快

内存和硬盘之间进行交互。
为了解决效率问题,毕竟先缓存再交互效率很高。
在这里插入图片描述

给数据排序

将数据放进数组
然后
Arrays.sort(数组进行排序)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 开放源代码的必要性 在介绍编程语言之前,先说说开放源代码的必要性。现在,在软件生产领域存在巨大的智利浪费,大家把大量的精力用在编别人已经实现的程序代码上。看看,文本编辑器有多少,看看ftp程序有多少,看看字处理程序有多少,这些程序虽然有差别,但主要的功能都是一样的。要实现个性化的功能,在已有的软件基础上修改会节省多少时间呀!而每个程序各编一套,又浪费多少时间?如果,没有这些重复的工作量,世界上的程序员至少可以节省80%的工作量。同时,开放源代码也方便了大家的交流,阅读源代码应该是最直接最有效的学习途径,尤其是比较专业的领域。 要开放源代码,下面几点比较重要: * 语言要流行。 * 语言的函数和类库统一。 * 语言的语法和编译器要统一。 * 编译器是否开放源代码。 * API是否开放源代码。 语言的可重用性、功能、友好性。 * 语言统一:如果大家都用一种编程语言,都用同样的函数,同样的类库,那么,大家的共同语言就会很多。大家只要学会一种语言,一套函数,一套类库,就可以相互读懂源代码,这样,学习量是最少的;但是语言统一根本是不可能的事,因为各种语言都有其特色,如果取了其中一个优点,通常就会牺牲另一个优点。可是学习新的API浪费程序员大量的时间和精力,尤其是当这个API有大量和其他API重复的功能的时候。 要增加代码的可重用性,要从下面几点着手: * 代码的可读性。如格式、是否接近英语语法和单词。 * 代码的表达能力,也就是简单性,能用最少的语句和单词实现同样的功能。 * 代码的结构性,如函数、模块、类。 语言功能的强大从下面几点来说: * 是否拥有大量的库支持。这是最重要的,要求编任何功能的程序都有强大的库支持。 * 语法功能是否强大,比如是否有出错处理。是否有指针。 语言的友好性: * 语言包的大小,语言包越小,学习越简单。 * 语言是否有友好的编辑调试环境。 * 语言的可视化和集成编程环境。 2. 简介各种程序语言 注︰在程序语言前划有☆号者,表示它有重大影响,但不代表它优良。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值