1 liuidetmks 2021-12-18 17:14:47 +08:00 via iPhone ![]() 格局小了,现在是无代码 |
2 Jooooooooo 2021-12-18 17:19:25 +08:00 时代变了, java 都底层了. (上学没学过 c 吗 |
![]() | 3 Weny 2021-12-18 17:27:08 +08:00 就算是汇编,只要是人类可读的其实都还好了... 只是不熟悉而已。来个例子 ```C void* memmove(void *vdst, const void *vsrc, int n) { char *dst; const char *src; dst = vdst; src = vsrc; if (src > dst) { while(n-- > 0) *dst++ = *src++; } else { dst += n; src += n; while(n-- > 0) *--dst = *--src; } return vdst; } ``` |
4 rykinia 2021-12-18 17:29:15 +08:00 java 没有框架强行实现 bug 一堆? js 没有框架照样爽? 很好奇什么神奇的需求能达到这种效果 |
5 Cbdy 2021-12-18 17:30:16 +08:00 原生不支持 JSON 是挺麻烦的 |
6 industryhive 2021-12-18 17:50:01 +08:00 java 是瘦语核的语言,光学会 java 的语法什么也做不了,必须使用 JDK 提供的类库或者框架才能实现一些复杂的功能,没有框架确实什么也做不了 |
7 linbingcheng 2021-12-18 17:54:22 +08:00 那是你没看过 C 和 C++ 的相关代码吧,简直绝望 |
![]() | 8 Features OP |
9 seakingii 2021-12-18 18:24:08 +08:00 现在都 AI 写代码了,谁还自己写. |
![]() | 10 sagaxu 2021-12-18 18:25:12 +08:00 PHP 是最好的语言,虽然用 PHP 的公司越来越少了 |
![]() | 11 makelove 2021-12-18 19:20:49 +08:00 ![]() 不知道现在的 java 是什么样,以前我用的时候 java 社区开发习惯的确过于封装且追求高大全,后来一路 php/py/js 下来那些都没这么复杂,一眼就直接见底了 最近 java 那个漏洞也从侧面说明了一个小小的 logger 功能多到竟然也能搞出这么多事 |
![]() | 12 hello2090 2021-12-18 19:32:02 +08:00 ![]() 工作 10 多年了,从没挑剔过语言,钱给够让用啥用啥。 |
![]() | 13 Borch 2021-12-18 19:47:00 +08:00 ![]() 首先,这不叫底层。 |
![]() | 14 Chihaya0824 PRO 现在的大学都不会稍微碰一下汇编吗?我就上过一个 arm 的汇编课那真的阴间,学完了以后觉得 C 真好用( |
![]() | 16 Brentwans 2021-12-18 21:14:57 +08:00 @industryhive 咦?有什么语言,语法包含了框架功能吗? |
![]() | 17 Mohanson 2021-12-18 21:20:34 +08:00 有没有大佬说下 log4j 是图灵完备的吗? |
![]() | 18 pengtdyd 2021-12-18 21:53:56 +08:00 只要能赚钱,管他有没有 bug ,有 bug 给钱修就行。 |
![]() | 19 limbo0 2021-12-18 22:22:52 +08:00 是的, 习惯脚本语言 Java 是有点蛋疼 |
![]() | 20 voidmnwzp 2021-12-19 00:22:41 +08:00 via iPhone 你是不是对底层有什么误解?没学过 c/cpp ? |
![]() | 21 snw 2021-12-19 00:44:02 +08:00 via Android 想起当年劳动技能课玩过单片机,用的是汇编语言, |
![]() | 22 snw 2021-12-19 00:45:37 +08:00 via Android …只是控制几个 LED 按各种规律发光,用汇编挺容易的。 |
![]() | 23 snw 2021-12-19 00:51:53 +08:00 via Android ![]() 但要说爽,还是巨硬家那些语言爽。像 Java 得知道整数比较时 127 和 128 会有不同结果,js 以前用 var 时还得考虑变量作用域和闭包,用.NET 就没这么多奇怪的东西,可以少死几个脑细胞。 |
24 harwck 2021-12-19 06:30:44 +08:00 最近在看 React ,结果什么脚手架都有 |
25 charlie21 2021-12-19 07:21:25 +08:00 via iPhone 加利福尼亚的首府是萨克拉门托 |
26 yinzhili 2021-12-19 08:35:31 +08:00 ![]() bug 是写代码的人水平不够。不能怪语言。真的。 |
![]() | 27 fiypig 2021-12-19 09:30:56 +08:00 via iPhone 最好的项目是自己写工具,不依赖别人的框架 |
28 fsdrw08 2021-12-19 11:19:56 +08:00 via Android 所以说学编程,应该直接上框架,学什么基础语法都是屁,把框架撸一遍踩坑了再看基础语法也不迟 |
![]() | 29 Kylin30 2021-12-19 15:47:04 +08:00 这个在圈子里的黑话叫生态不行 |
31 shellic 2021-12-19 17:24:22 +08:00 via Android 要想写的爽还得 PHP |
33 industryhive 2021-12-20 10:08:37 +08:00 @Jooooooooo @voidmnwzp 就看你怎么定义“底层”了,GraalVM 是完全由 java 实现的通用高性能虚拟机,做到了和真实物理机指令集对应而不是和某一门编程语言语法对应,也就是说你用汇编干的活用这玩意都能干,这个算底层不? |
![]() | 34 vincent7245 2021-12-20 10:12:59 +08:00 可见大学计算机专业从 C/c++ 语言开始入门是多么明智的安排 |
35 Jooooooooo 2021-12-20 10:21:08 +08:00 @industryhive 我认为 java 并不底层的原因在于, 一个 volatile 直接屏蔽各种软硬件的差异, 实现统一语义. 从这点看是相当不底层. volatile 已经是具备足够抽象的语义. jvm 帮助我们在不同软硬件上采用不同实现. |
36 industryhive 2021-12-20 12:51:26 +08:00 @Jooooooooo 按照你这个观点,那正好说明 java 和 C 、C++一样底层。所谓跨平台,是因为 jvm 屏蔽了底层的细节,比如你说的 volatile 。但是 volatile 之所以能实现所有平台语义的统一,完全是靠底层的 jvm 实现的。所以现在有了下一代的通用高性能跨语言虚拟机 GraalVM ,GraalVM 是一个完全由 java 实现的 java 虚拟机,如果你有需要,你完全可以自己实现底层细节,你想要修改 volatile 的语义,你可以自己修改 GraalVM ,你甚至可以自定义 java 的语法规范。而在 GraalVM 出现之前,这些细节的工作是由 C++实现的。所以,GraalVM 的出现,说明 java 至少可以做到和 C++一样底层的事情。 |
37 Jooooooooo 2021-12-20 14:13:21 +08:00 @industryhive 正是因为 jvm 屏蔽了底层细节, 所以才说 java 并不底层. |
38 industryhive 2021-12-20 14:20:59 +08:00 @Jooooooooo 所以当你自己写 jvm 的时候,要直接处理底层细节,你说这个时候 java 是否底层? |
39 Jooooooooo 2021-12-20 14:25:45 +08:00 @industryhive 肯定不属于啊. Java 面对使用者来说, 是相当高层以及抽象的语言. 底下具体是怎么实现的完全不关心. 比如 volatile 在不同软硬件下有着完全不同的处理方式(比如有些强一致的软件下, volatile 直接被抹掉了), 用 java 的人可不知道这一点 |
40 industryhive 2021-12-20 14:53:28 +08:00 @Jooooooooo 那是否可以这么说,用 java 写上层应用的时候,java 是高层和抽象的语言,因为按你的说法,使用者不关心硬件或平台底层细节;用 java 写 jvm 或 OS 的时候,那按你的说法,java 是底层语言,因为这个时候使用者必须非常关心和了解硬件和平台底层细节。你觉得我这说法对吗? |
![]() | 41 voidmnwzp 2021-12-20 18:56:57 +08:00 via iPhone @industryhive java 怎么可能写 os 一个 runtime 的语言,写出来也是底层也是跑在 jvm 上的虚拟系统,底层的内核得靠 c/cpp native 实现 |
42 industryhive 2021-12-20 20:34:06 +08:00 @voidmnwzp java 怎么不可能写 os ,Java ME 就运行在资源极其受限的设备上,根本就没有操作系统,所有的硬件资源都是靠一个极其精简的 jvm 管理。那扩大到 Java SE 平台,jvm 当然也可以管理更丰富的硬件资源。所以对于 java 来说,操作系统是冗余的,如果让 jvm 直接管理硬件资源,会大大提高性能。 有一篇文章就说了这个设想:一种新的操作系统设计 http://www.yinwang.org/blog-cn/2013/04/14/os-design 。知乎上也有对这篇文章的讨论:如何看待王垠对于内存管理的理解? - 灵剑的回答 - 知乎 https://www.zhihu.com/question/484194993/answer/2098751994 。总的思想就是让 JVM 直接运行在裸机上,去掉操作系统的冗余,这样 JVM 就是操作系统,极大的提高程序的运行性能。其实这样的想法我很早之前也想到的,现在全世界几十亿台安卓设备,底层都是 Linux 系统,然后在 Linux 之上运行了 jvm ,在 jvm 之上再运行安卓应用。我就想为什么不直接运行 jvm ,去掉 Linux 呢?这对于安卓设备来说运行效率会极大的提高。 |
![]() | 43 gearkey 2021-12-21 07:39:45 +08:00 脚本语言万岁! js 、python 万岁! |
![]() | 44 kergee 2021-12-21 08:47:22 +08:00 给你们看看更底层的,软件的数学基础 https://softwarefoundations.cis.upenn.edu/ |
45 exiledkingcc 2021-12-21 10:37:27 +08:00 @industryhive 那是把 JVM 写成 OS ,而不是用 JAVA 写 OS 。 |
46 industryhive 2021-12-21 11:39:36 +08:00 @exiledkingcc 不不不,像王垠的这个设想 ,jvm 就是 OS ,而且有许多狭义上的 jvm 没有的功能,比如安装第三方应用、客户端远程连接等。只不过是把传统的操作系统内核给换成 jvm 而已。所以 java 能写 jvm ,当然也能写 OS ,这是 java ME 和 GraalVM 已经验证过的事情。 |
![]() | 47 Joker123456789 2021-12-21 15:18:49 +08:00 java 的生态这么丰富,你居然说啥都要自己实现, 你这是连 sql ,业务逻辑都想自动化了吗 |