包括不限于错误 /异常处理,泛型,OOP 等, 还有就是缺失类似 spring 的 bean 扫描功能
1
frisktale 2022-05-12 12:53:04 +08:00 12
C#咯
|
2
snoopyhai 2022-05-12 12:53:37 +08:00 via Android
ts?
|
3
Mistwave 2022-05-12 12:53:48 +08:00 via iPhone
用 Scala/Kotlin 写 Spring
|
4
liuzhaowei55 2022-05-12 12:56:43 +08:00 via iPhone 1
试试全世界最好的语言?
|
5
BeautifulSoap 2022-05-12 13:00:21 +08:00 6
Kotlin ,语法糖多到光是学语法糖就能学到吐血
|
7
vchroc OP 说下几点要求:
1 、便捷的异常错误处理; 2 、低开销的抽象成本; 3 、云原生,编译产出物是直接可以运行的二进制文件 4 、Bean 自动注册与发现,避免手动维护某个集合 5 、完善的特性支持如泛型、枚举、反射等 6 、完善的生态,主要关注 Web 方面 |
8
yjll9102 2022-05-12 13:08:24 +08:00
Groovy 啊,生态不用说了就是 Java 的生态,语法糖也可以,现在还加入了 LINQ 语法的支持
|
9
MakHoCheung 2022-05-12 13:10:57 +08:00
@vchroc Kotiln + Spring + Graalvm 完全满足你。但是要等年底的 Spring Native ,现成的你可以 Kotlin + Quarkus
|
10
ration 2022-05-12 13:11:13 +08:00 via Android
生态还是选 java 吧,开发体验这些熟了也就那样
|
11
MakHoCheung 2022-05-12 13:13:47 +08:00
@vchroc 不过 AOT 跟 反射好像鱼与熊掌不可兼得?看后面大佬怎么看这点
|
12
Hanggi 2022-05-12 13:14:11 +08:00 12
楼主用回你的 Spring 就好了呀?
Go 语言用得好的不管写 Web 还是写微服务什么的,早就写得飞起了。 思想转变不过来没必要强求,用你能接受的就好了,为什么还要换来换去呢? |
13
BrettD 2022-05-12 13:15:04 +08:00 via iPhone 2
C#可以满足你列出来的大部分需求,但是 V 站上好像都说国内 C#岗位不多
|
15
lmshl 2022-05-12 13:22:26 +08:00
Scala / Kotlin +∞
|
16
PureWhiteWu 2022-05-12 13:23:00 +08:00
Rust
|
17
xiaoriri666 2022-05-12 13:40:32 +08:00
PHP
|
19
zsl199512101234 2022-05-12 13:49:37 +08:00
Rust
|
20
securityCoding 2022-05-12 13:51:57 +08:00
刚从 java 转 go 不管是写 web 还是 rpc 都爽的飞起,再也不见 spring
|
21
kett 2022-05-12 13:54:56 +08:00
c#除了生态这一条以外都满足你的要求
|
22
vchroc OP @securityCoding 就问一个,策略模式中,新策略的自动注册与发现,怎么解决?
|
23
xjqxz2 2022-05-12 13:56:19 +08:00
我觉得 12 楼说的没错,语言不过工具而已,你用的爽,能完成预期任务就够了。你觉得 GO 不行就继续 Java 呗,为什么一定要 GO 走你 Spring 的路呢?
|
24
vchroc OP @xjqxz2 写自己的玩具,想看看市面上有什么好用的工具。不局限 go 或者 JAVA ,这两个都不够完美
|
25
abersheeran 2022-05-12 14:08:48 +08:00
你这些条件……让我想到了 Rust………………………………………………………………
这些点都是我写 Rust 的时候流的汗。告辞! |
26
theohateonion 2022-05-12 14:08:56 +08:00
@vchroc 找银弹?不存在的。 又想二进制又要抽象程度高,🈚️
|
27
janus77 2022-05-12 14:09:22 +08:00
既然你没提速度,那我提名一个 php[狗头]
|
28
jjwjiang 2022-05-12 14:11:44 +08:00 2
C#完美满足你除了生态之外的所有需求
对于开发者的便利 C#说第一应该没人能说第二…… 至于生态,仁者见仁吧,现在基本上该有的都有,社区小是真的,但是也都能用 |
29
pengjay 2022-05-12 14:15:39 +08:00
Go -> PHP
|
30
Kilerd 2022-05-12 14:18:00 +08:00 1
Bean 自动注册与发现,避免手动维护某个集合
这种东西即便是 java 里面的 Spring 也是框架帮你做了脏活累活,不可能由语言层面给你提供一个 di 框架的啊。 先搞清楚自己到底需要什么东西 |
31
lmshl 2022-05-12 14:19:02 +08:00 2
@vchroc
1 、便捷的异常错误处理; Scala 的异常处理是 sound 的,而且是在 Fiber 上,随便几百万个 Fiber 。同时从理论上就能保证资源安全哦 2 、低开销的抽象成本; Scala 有 JIT 替你操心,不用你费神。 3 、云原生,编译产出物是直接可以运行的二进制文件 Graalvm native image 以后可以做到这一点,只是目前工具链不够齐全,实践有点坎坷,我有个生产环境的 native image ,打包费了不少时间。 4 、Bean 自动注册与发现,避免手动维护某个集合 Scala 有目前最先进的,你放心 5 、完善的特性支持如泛型、枚举、反射等 Scala 当之无愧,还支持编译期反射哦,比 Jaba 安全多了。当然你硬要调用运行时反射也不是不可以。 6 、完善的生态,主要关注 Web 方面 Scala Web 生态可太丰富了,Akka-HTTP ,http4s ,tapir ,zio-http 。还有更完善的 gRPC / GraphQL 生态 |
32
acehowxx 2022-05-12 14:23:12 +08:00 via Android
推荐用 rust ,特性多,性能好,错误处理泛型都有,非常适合你。
|
33
liuhan907 2022-05-12 14:28:50 +08:00 1
只考虑 Web 方面 C#是最好的选择,ASP.NET 一把梭啥都有,.NET6 走起就行了。剩下的就是看需要什么库 NuGet 找找了事。
|
34
securityCoding 2022-05-12 14:31:48 +08:00
@vchroc 所谓的注册发现无非是 spring 手动帮你做了而已,手动 init ,close 不就好了吗?
|
35
Kamiyu0087 2022-05-12 14:33:38 +08:00
欢迎使用 Kotlin
一个字 甜~ |
36
drackzy 2022-05-12 14:34:23 +08:00
Rust 对味,可以作为技术储备起来,难学会的人少,以后不容易卷。比 Go 底层一些、特性多。
|
37
Leviathann 2022-05-12 14:40:19 +08:00
@lmshl 最近几个月知乎上 scala 活人最多的问题是 《感觉 Scala 越来越凋零了,虽然 Scala 3 已经出来有段时间了,有没有这种感觉》。。。下面大部分都说是的
|
38
vchroc OP @securityCoding 为什么要手动做?实现多了不重不漏本来就是成本,没必要的成本就不要承担了
|
39
vchroc OP @abersheeran RUST 看过,无 GC 对编程体验影响较大
|
41
Hanggi 2022-05-12 15:11:22 +08:00 3
Rust 什么的绝对不是正解。
楼主单纯觉得 java 不够好,可能 Kotlin 才是你要的。 Go 特性少,语法糖太少这件事,你先要清楚这是 Go 语言目前阶段不完善导致的吗? 明显不是,是 Go 语言就是这么设计的,这么做肯定是经过各种考量,GO 语言今天这么火也说明他的这种设计是有很多受众的。 语法少说好听点是简单简洁,实际上就是语言设计的妥协。(要知道语言越复杂功能越多,编译越慢这是公认的,不管 C++,Java ,Rust 都有这个问题。) 过于简单而导致开发不爽这件事,Go 语言其实有他自己的一套解决方法,只不过很多人无法接受,觉得这些功能在语言层面就应该提供。所以说需要一些思想转变。 |
42
acdfjelxe 2022-05-12 15:11:46 +08:00
?? 语法糖重要吗?那来 cpp 咯
|
43
darksword21 2022-05-12 15:15:19 +08:00 via iPhone
你应该自己设计,他们知道个屁啊,他们懂个皮的编程语言(
|
44
libook 2022-05-12 15:22:28 +08:00
Go 是面向企业高效生产的,不是面向开发者体验的,两者矛盾的时候,Go 会倾向于选择高效生产。
找 Web 开发领域工作的话应该绕不开 Java 和 Go ,坚持用些自己觉得“完美”的小众语言,也可能难以找到合适的工作。 如果不是工作上用,而是自己写着玩,楼上提到的语言都可以看一看,除了 Rust ,Rust 现阶段至少不满足你完整 Web 生态方面的需求,除非你愿意自己造生态。 换语言和技术栈最好也换一套思维方式,否则不管用啥都觉得不如以前用的那套顺手。 |
45
Goooler 2022-05-12 15:26:13 +08:00
Kotlin + Spring
|
46
cmdOptionKana 2022-05-12 15:27:08 +08:00
@vchroc Kotlin 啊,完美啊!要语法糖够甜,要生态可无缝调用 Java 。
|
47
HangoX 2022-05-12 15:36:13 +08:00
kotlin ,先进语言该用的都有,无缝调用 java 的库,就是表示有 java 生态,而且还能写 web 和 native
|
48
Leviathann 2022-05-12 15:38:21 +08:00
@HangoX 没有 pattern matching ,而 java 有
|
50
vchroc OP @Hanggi 在使用 Go 语言开发的时候,使用代码生成工具,可以解决一部分问题,如相对完善的枚举、注册发现等功能,但味道还是比较苦...
|
51
LeegoYih 2022-05-12 15:53:44 +08:00
Ruby
|
52
yazinnnn 2022-05-12 15:54:29 +08:00
F#怎么样?
|
53
HangoX 2022-05-12 15:54:35 +08:00
@Leviathann 真要写用 java 写不就好了,本来就能混。kt 有的 java 很多也没有,看自己喜欢用哪个就哪个呗
|
54
Donahue 2022-05-12 16:28:34 +08:00
python
|
55
lysS 2022-05-12 16:36:11 +08:00
根据上下文啊,OP 肯定用过满足要求的语言,自己用回去不就行了?
|
57
daimiaopeng 2022-05-12 16:43:13 +08:00
要不回来写 c++得了
|
58
lmshl 2022-05-12 16:45:04 +08:00
@Leviathann 那是我们的钓鱼贴,开贴的和回答的都是一个群里的人。我的回答赞数最多哦
|
59
Leviathann 2022-05-12 16:46:00 +08:00
@lmshl 我上钩了 😂
|
60
lmshl 2022-05-12 16:51:21 +08:00 1
@billlee 那可太多了
高大上 + 最前沿:distage 高大上 + 学术范:tagless final ,就是 cats effect 风格的 高大上 + 容易学:ZIO ,所有环境依赖都在 Layer 中组合起来 中不溜秋:macwire ,编译期注入,不依赖反射 手动挡:trait + implicit 注入 回归传统:guice 其中群佬们最推荐的是 distage ,我用过剩下的 5 种,2/3/4 风格都是很漂亮简洁的,并且 2/3 是理论完备的资源安全 |
61
lbp0200 2022-05-12 16:58:53 +08:00
python ?
|
62
cmdOptionKana 2022-05-12 16:59:10 +08:00
@vchroc
> Java 开销大,编译打包后不是二进制可执行文件 你有这个要求,那就更简单了,满足你这个要求的就 C/C++, Go, Rust 等少数几个语言,其中 C++ 在语法层面拥有世界上一切特性,没有的也能用 C++ 自己创造出来。 如果你说要易学易用,语言特性丰富,开销比 Java 少,可打包成可执行文件,生态也强大的,Python 勉强也算可以。 |
63
ikaros 2022-05-12 17:01:49 +08:00
rust
|
64
FightPig 2022-05-12 17:03:27 +08:00 1
rust ,包你学完退了又学又退又学又退又学
|
65
roundgis 2022-05-12 17:23:14 +08:00 via Android
Php
|
66
yazinnnn 2022-05-12 17:41:53 +08:00
你要说开销大我可就不困了
quarkus 一个简单 http 服务,native 构建,然后 upx 压缩一下,文件大小 12m,内存分配 50m,吞吐仍然有 17000qps 不用 upx 压缩的话,文件大小 30m,内存分配 30m,吞吐有 6000qps Requests per second: 6811.35 [#/sec] (mean) 426720 8.4 0.0 432448 29256 pts/15 Sl+ 17:36 0:21 ./minimal-1.0.0-SNAPSHOT-runner -Xmx10m https://gist.github.com/yazinnnn/47636b5513c1cb10ccb2d455eb29a69e |
68
missdeer 2022-05-12 17:52:21 +08:00
Rust 咯,语法糖又多又香
|
69
serco 2022-05-12 18:18:19 +08:00 1
Rust 真的是从入门到忘记非常自然。。。其他语言多多少少还能记得一点,这个真的是忘得特别彻底
|
71
panlatent 2022-05-12 18:51:06 +08:00 1
我曾经也有过类似的想法,也研究过大多数主流语言(在不限制领域的情况下,非主流生态肯定是不太行的)。
最后得出的结论是啥语言合适就老老实实用啥吧,大而全,生态好体验好的语言目前不存在。 每种语言都能挑出各种毛病 ... 众口难调 .. 不如想想哪几种语言能搞钱,适合自己对未来的规划 |
72
panlatent 2022-05-12 18:54:06 +08:00
有 Java 基础不如选择在 JVM 上的那几个语言,本身 Java 现在生态这么好,适用性这么强,如果只不满足语法的话,干嘛不学它们。
|
73
Mexion 2022-05-12 18:58:32 +08:00 via iPhone
Typescript ,体验极好
|
74
HangoX 2022-05-12 19:11:20 +08:00
@vchroc 我说的是 kotlin ,kotlin 可以编译为 native 二进制文件
java 也是可以编译为二进制文件,可以看看 springnative java 开销并不大,是 javaweb 开销大 |
75
ojh 2022-05-12 19:19:35 +08:00 1
@vchroc 楼上不是说了 Graalvm 、Spring Native 、Quarkus 这些技术帮你把 Java 变二进制可执行文件了么
|
76
securityCoding 2022-05-12 19:26:50 +08:00
@vchroc 你是个杠精?
|
77
INCerry 2022-05-12 19:58:51 +08:00 1
C# 呀
|
78
cocong 2022-05-12 21:07:03 +08:00
PHP 你值得拥有,但就是因为太好用,门槛低,工资就低了。所以我要转 go 。
|
79
vchroc OP @securityCoding 不好意思,措辞可能差了些,让你误会了。真实意思是,DRY ,不想写重复的代码
|
81
codefun666 2022-05-12 22:43:20 +08:00
学好 C 语言,走遍天下都不怕。效率、灵活性无人能敌!
|
82
richardwong 2022-05-12 23:19:53 +08:00
java
|
83
weiwen 2022-05-13 01:06:47 +08:00
Scala, 你值得拥有。
|
84
yi0322 2022-05-13 01:21:13 +08:00 1
optimized for programmer happiness
|
85
SMGdcAt4kPPQ 2022-05-13 01:52:39 +08:00 via Android 2
C#在异步和 ORM 上的生态比 Java 好
|
86
cgpiao 2022-05-13 07:50:45 +08:00 1
elixir 欢迎你
|
87
bthulu 2022-05-13 07:59:28 +08:00
@ComputerIdiot C#依赖注入不够看呀, 功能太简陋了
|
88
jeffw 2022-05-13 08:12:53 +08:00 2
C#吧,生态够用,熟练之后开发效率非常高,而且现在也跨平台了
|
89
yazinnnn 2022-05-13 08:33:25 +08:00
这不行,那不行,找个厂子拧螺丝去吧
|
90
SMGdcAt4kPPQ 2022-05-13 08:34:12 +08:00 via Android
@bthulu 试试 Autofac ?
|
91
bthulu 2022-05-13 08:55:19 +08:00
@ComputerIdiot 多嘴再问一句, C#里有没有什么办法能实现定时任务呢? 就是任务完成后, 隔 2 秒后开始执行下一次任务, 不是每隔 2 秒执行一次.
C#自带的定时器只能实现每 2 秒执行一次. 我现在用的 BackgroundService, 在 ExecuteAsync 方法里 await2 秒钟, 再在 Program.cs 里 AddSingleton<IHostedService>(...)注入进去. 但是现在碰到的问题是, 需要在前端页面上激活一个新任务, 停止一个旧任务. 那就不能在 Program.cs 里注入了, 因为你根本不知道前端会激活哪个任务. 如果是 java 的话, 调用自带线程池的 ScheduleAtFixedDelay 就行了, C#我愣是想不出. 还有, 有一系列的策略类, 需要将策略类的配置项注册到配置中心, 然后在前端启用一个策略时就 new 一个策略实例, 前端未启用时是不用 new 的. 那这个注册方法写到哪里去呢? 本着解耦的原则, 应该就写在策略类自身静态代码块里. 但 C#比较尴尬的是, 静态代码块只有在类实例化或有静态属性被调用时才会执行. 导致根本就不会执行注册代码块. 而注册代码块不执行, 那注册中心根本就不知道有这么个策略类, 前端页面也就不会显示这个策略类, 也就是根本不会实例化. 要么就只能在注册中心里手动注册. 那这样增加一个策略类时, 还必须修改注册中心的代码. 如果能像 java 那样扫描包下的类加载一下就自动调用静态代码块就好了. |
92
securityCoding 2022-05-13 09:22:51 +08:00
@vchroc 老哥,依赖注入并非是个必须的东西,微服务拆分合理根本就不会有巨型应用。策略模式自己搞个 map 存储一下实例也就分分钟,很多东西没有那么复杂只是在 java 体系会实现的非常晦涩,不要被 spring 带偏了。
|
93
chrisia 2022-05-13 09:23:25 +08:00
kotlin
|
94
SMGdcAt4kPPQ 2022-05-13 09:27:34 +08:00
@bthulu 后面这个问题用 RunClassConstructor
|
95
angryfish 2022-05-13 09:30:21 +08:00
耐心一点,这些 go 以后都会加上。
而且,为啥不直接用 java 呢? |
98
vchroc OP @securityCoding 我的意思是 其实有很多可以避免手动维护的东西,比如遍历枚举,难道定义完枚举还要,手动复制一份到集合遍历吗?后面新增修改都要维护,这份工作容易遗漏且没有意义。同理策略的注册也是一样,本质是不要写重复的东西,或者重复的东西自动化,这才是 coder 要关注的
|
99
lysS 2022-05-13 09:57:26 +08:00
@cmdOptionKana python 那打包。。。那 electron 也算对 js 的打包
|
100
SMGdcAt4kPPQ 2022-05-13 10:05:49 +08:00 via Android
@bthulu 前面这个问题可以看看
《 A simple Recurring Task using C# and .NET 》 |