最好把各个语言的实现,还有编译参数贴一下。
不然有的动态链接有的静态链接,有的用了fmt(format很占空间)有的没用(Nim的hello world好像就没fmt,使用fmt要import strfmt
)不然这样吵来吵去没完没了,而且不够公平公正公开
最好把各个语言的实现,还有编译参数贴一下。
不然有的动态链接有的静态链接,有的用了fmt(format很占空间)有的没用(Nim的hello world好像就没fmt,使用fmt要import strfmt
)不然这样吵来吵去没完没了,而且不够公平公正公开
上面贴了编译命令。
可是没有源代码呢
你还真较真,一个 hello world 能写出来很大差别么。。。就算有差别意义很大嘛。。。
结论并没啥不同,zig 最小,C/C++/Nim/D 在一个级别,Free Pascal/Rust/Ocaml 在一个级别,Haskell 的运行时比较大,Go 是静态链接,跟这些不具可比性,但 Go 的可执行文件大是出了名的,kubectl 有 47MB。
估计 Free Pascal 和 Rust 研究下编译参数也能到 C/C++ 那个级别,有两个意外的点:
我是拿来写cc的,
在不涉及到图形的程序里,emacs的debugger足够舒服,哪个平台都能用(vscode的dap偶尔会有非常恼人的bug.
object format 的实现占空间啊,不然你把 disassemble 出来的 asm 比肯定大小也差不多啊,尤其是 DOS 用的 COM format 功能少,只支持 x86,实现特别简单啊。Mach-O 和 ELF 都是在设计成可以在多种不同系统和指令集上使用的,自然尺寸就大了
不是 object format 格式的问题,是各个 OS 各个编译器的段分配大小策略不一样,比如 macOS 上 zig 生成的段是 4kb 对齐,而 clang 是 16kb 对齐,导致 C 的 hello world 是 Zig 版的 4 倍。
差别不大吗?大不大不是要看怎么写吗?没有代码确实不公正啊,动态链接方式那么多,要比应该直接比静态链接的啊
#![no_std]
#![no_main]
#[panic_handler]
fn panic(_info: &core::panic::PanicInfo) -> ! { loop {} }
#[link(name = "c")]
extern "C" {
fn write(fd: i32, buf: *const i8, count: usize) -> isize;
}
#[no_mangle]
pub extern "C" fn main() -> isize {
unsafe { write(1, b"Hello, World!\n" as *const u8 as *const i8, 14) };
0
}
用 Rust 语法写 C 很好玩么,哈哈
我说了这句:
估计 Free Pascal 和 Rust 研究下编译参数也能到 C/C++ 那个级别
你不把怎么写的贴出来有什么对比的意义?那我在c里面写个1+1然后sleep1分钟再打印,然后python直接打印1+1,我是不是能说python比c快n倍?建议把写法和依赖了什么东西都贴出来对比才有意义。
这个编译参数和正常编译有什么不一样?问题不是在no_std
吗?go用一下fmt,
package fmt
import (
"errors"
"io"
"math"
"os"
"reflect"
"strconv"
"sync"
"unicode/utf8"
)
我是因为 clojure 才接触 emacs 的,好奇多少人是反过来的
他说的object format是可执行可链接文件的(ELF Mach-O PE,分别对应类Unix Mac Windows)格式,不是fmt库。
不过我也赞成fmt库会影响大小。nim上就这样,Rust也有移除format string减少体积的操作。
我觉得,是 @Dieken 先拿一堆语言出来对比的,而且因为Mac机器,链接方式,strip等问题,闹了不少错误。网友对你的一些结果有质疑,这是正常的,不是特意要杠你。引起话题的是你自己,后来却说一个hello world比大小没什么意思,不让人辩论,似乎有些不近人情。
而且你突然发一堆其他语言(这title是讨论Clojure和Haskell)你这对比的连Clojure都没有,有点Off Topic了,应该另外开一个主题的。
不过 @kekeimiku 说话语气也不用这么冲,有理不在声高。语气太压迫反而容易引起反感。论坛应该友好讨论,没必要把坛友当敌人
我上面也建议 Dieken 把源码发出来,因为要讨论就最好明明白白的讨论,让大家都看明白问题的本质。在知乎上经常看到一些论战,双方各种名词互飙,大战三百回合。争论到最后发现只是同一个概念的不同表述,却因为表达不到位而导致理解上的偏差,或者两者讲的完全不是一个层面的东西,风马牛不相及。(就像keke把object format理解成了fmt库)。而程序方面的讨论就如Linus Torvalds所说的,Talk is cheap, show me the code.
最后发一下“GNU友好交流指南”。虽然Emacs China社区不归FSF管,但是这个指南的精神值得我们学习(更别说Emacs也是GNU软件)
看了眼你写的,感觉在语言内引入下面几个符号当大量使用的语义符号的话
* $ & # !
键盘指法真的是有够为难人…
这就是 dvorak programmer 的好处了
我来补充一个,代码: <?php echo "hello world";
编译成可执行文件是1.75M, 编译命令(win10): phpflexer compile echo-hello-world.php
哇,PHP 逆天改命!
这个帖子好像全歪了
我在youtube查Emacs教程的时候,发现这些作者都用Clojure
我觉得这个语言的亲和力还是不错的,要是能作为主力编程语言就好了
歪得越来越远了😂。。。还是没明白为什么要用Clojure。。
社区的人很厉害也很友善,全都在 slack 上面,问问题都会被很耐心的回答。
生态很强大,JS 和 JVM,你还可以用 libpython-clj 来用 python 的库。啥都有就好像那种呼风唤雨的感觉,你只需要专注自已要做的东西就行。
语法是 Lisp,可以很方便的做高级的抽象。
REPL 提供了交互式的开发体验,开发中可以得到很连贯的反馈。