包括不限于错误 /异常处理,泛型,OOP 等, 还有就是缺失类似 spring 的 bean 扫描功能
1 frisktale 2022-05-12 12:53:04 +08:00 ![]() 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 ![]() 试试全世界最好的语言? |
![]() | 5 BeautifulSoap 2022-05-12 13:00:21 +08:00 ![]() 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 ![]() 楼主用回你的 Spring 就好了呀? Go 语言用得好的不管写 Web 还是写微服务什么的,早就写得飞起了。 思想转变不过来没必要强求,用你能接受的就好了,为什么还要换来换去呢? |
![]() | 13 BrettD 2022-05-12 13:15:04 +08:00 via iPhone ![]() 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 rb6221 2022-05-12 14:09:22 +08:00 既然你没提速度,那我提名一个 php[狗头] |
28 jjwjiang 2022-05-12 14:11:44 +08:00 ![]() C#完美满足你除了生态之外的所有需求 对于开发者的便利 C#说第一应该没人能说第二…… 至于生态,仁者见仁吧,现在基本上该有的都有,社区小是真的,但是也都能用 |
29 pengjay 2022-05-12 14:15:39 +08:00 Go -> PHP |
![]() | 30 Kilerd 2022-05-12 14:18:00 +08:00 ![]() Bean 自动注册与发现,避免手动维护某个集合 这种东西即便是 java 里面的 Spring 也是框架帮你做了脏活累活,不可能由语言层面给你提供一个 di 框架的啊。 先搞清楚自己到底需要什么东西 |
31 lmshl 2022-05-12 14:19:02 +08:00 ![]() @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 ![]() 只考虑 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 ![]() Rust 什么的绝对不是正解。 楼主单纯觉得 java 不够好,可能 Kotlin 才是你要的。 Go 特性少,语法糖太少这件事,你先要清楚这是 Go 语言目前阶段不完善导致的吗? 明显不是,是 Go 语言就是这么设计的,这么做肯定是经过各种考量,GO 语言今天这么火也说明他的这种设计是有很多受众的。 语法少说好听点是简单简洁,实际上就是语言设计的妥协。(要知道语言越复杂功能越多,编译越慢这是公认的,不管 C++,Java ,Rust 都有这个问题。) 过于简单而导致开发不爽这件事,Go 语言其实有他自己的一套解决方法,只不过很多人无法接受,觉得这些功能在语言层面就应该提供。所以说需要一些思想转变。 |
42 acdfjelxe 2022-05-12 15:11:46 +08:00 ?? 语法糖重要吗?那来 cpp 咯 |
![]() | 43 darksword21 PRO 你应该自己设计,他们知道个屁啊,他们懂个皮的编程语言( |
![]() | 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 labubu 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 ![]() @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 ![]() 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 ![]() Rust 真的是从入门到忘记非常自然。。。其他语言多多少少还能记得一点,这个真的是忘得特别彻底 |
![]() | 71 panlatent 2022-05-12 18:51:06 +08:00 ![]() 我曾经也有过类似的想法,也研究过大多数主流语言(在不限制领域的情况下,非主流生态肯定是不太行的)。 最后得出的结论是啥语言合适就老老实实用啥吧,大而全,生态好体验好的语言目前不存在。 每种语言都能挑出各种毛病 ... 众口难调 .. 不如想想哪几种语言能搞钱,适合自己对未来的规划 |
![]() | 72 panlatent 2022-05-12 18:54:06 +08:00 有 Java 基础不如选择在 JVM 上的那几个语言,本身 Java 现在生态这么好,适用性这么强,如果只不满足语法的话,干嘛不学它们。 |
![]() | 73 Wanex 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 ![]() @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 ![]() 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 ![]() optimized for programmer happness |
85 SMGdcAt4kPPQ 2022-05-13 01:52:39 +08:00 via Android ![]() C#在异步和 ORM 上的生态比 Java 好 |
86 cgpiao 2022-05-13 07:50:45 +08:00 ![]() elixir 欢迎你 |
87 bthulu 2022-05-13 07:59:28 +08:00 @ComputerIdiot C#依赖注入不够看呀, 功能太简陋了 |
88 jeffw 2022-05-13 08:12:53 +08:00 ![]() 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 GBdG6clg2Jy17ua5 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 》 |