V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zn
V2EX  ›  程序员

求推荐一门比 PHP 还要好的、完美的程序开发语言, 详见正文

  •  
  •   zn · 2017-11-29 13:41:32 +08:00 · 14010 次点击
    这是一个创建于 2370 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本人程渣一个,5+年开发经验,正儿八经做过的项目有 PHP 前后端、Java 后端、网游服务端、iOS 和 Mac App。

    现在能熟练使用的语言有 PHP、Java、C、Objective-C,不熟练使用的多了。其中作为主力语言的是“最好的语言 PHP ”,真的不开玩笑,各种内置函数超级方便。我平时开发中碰到的需要重复操作的东西我基本上统统写成各种小工具来对付,其中大部分都是 PHP 写的,真的好用。

    最近在玩逆向中碰到的一个问题是:PHP 对二进制操作实在是不方便,写小工具很麻烦,用 C、Objective-C 写的话每次修改后都要重新编译,更麻烦,同时也不方便跨平台。所以有想换一个主力语言的想法。大致要求如下:

    硬性要求:

    • 可以跨平台交叉编译,要支持 Mac、Linux,最好能支持 iOS、Android 移动平台
    • 原生支持二进制操作、二进制数组操作,能方便地对二进制协议数据拆包、打包
    • 比较成熟,有长期存活潜力,不能用了一两年后就 discontinued 了。

    加分项:

    • 能方便地和 C 混编
    • 能像 Exlixir 那样可以编译运行,也可以脚本方式运行(大大加分)
    • 能像 Go 那样静态编译( Go 语法是在太古老,无爱,但是 Go 真的是好东西啊)
    • 有比较好用的开发环境,有 JetBrains 家族 IDE 支持更好

    轻微加分项:

    • 语法简洁,不要像 Java 那样啰嗦
    • 性能不太差

    目前知道的备选语言有:

    • Rust (感觉过于重量级了)
    • Kotlin Native (缺点是还处于 beta 状态)
    • Go (就语法无爱,别的都很满意)
    • Exlixir (缺点是无法和其他语言混编,也不知道能活多久)

    要求好像很苛刻,我也不知道存不存在满足我的要求的语言,欢迎大家提出自己意见和建议。

    第 1 条附言  ·  2017-12-02 16:32:17 +08:00
    感谢各位的回复,此次发帖大家很积极提建议,让我了解到了 nim 等等挺有意思的新语言,非常非常感谢!
    现在基本上就是决定 Go 和 Python 了,毕竟 IDA 和 Python 是可以无缝配合办事的。

    再次感谢各位!!

    还有那个呵呵呵呵什么的,再给你说一句:呵你妹。
    144 条回复    2017-12-03 12:18:18 +08:00
    1  2  
    shanechiu
        1
    shanechiu  
       2017-11-29 13:45:22 +08:00
    golang 语法怎么了?
    wspsxing
        2
    wspsxing  
       2017-11-29 13:48:28 +08:00
    Crystal?

    还有 fb 的那个 php 备胎.
    alinwu05
        3
    alinwu05  
       2017-11-29 13:49:32 +08:00
    有句话怎么说的,就是没有银蛋!每个语言都有其擅长的地方
    afeicool
        4
    afeicool  
       2017-11-29 13:53:04 +08:00   ❤️ 3
    看到楼主的需求,我情不自禁的掏出了我的大蟒蛇,楼主,啃它吧!
    zn
        5
    zn  
    OP
       2017-11-29 13:53:43 +08:00
    @alinwu05 不存在 Silver Bullet,也不需要,只是想找一个更适合我的语言而已。
    zn
        6
    zn  
    OP
       2017-11-29 13:54:30 +08:00
    @afeicool 被 Python 的缩进坑过,咬牙切齿了很久,无爱。
    bilberry
        7
    bilberry  
       2017-11-29 13:54:54 +08:00
    @afeicool 头像好厉害
    afeicool
        8
    afeicool  
       2017-11-29 13:55:32 +08:00   ❤️ 2
    @zn 骚年,偏见是人类最大的缺陷之一
    zn
        9
    zn  
    OP
       2017-11-29 13:58:08 +08:00
    @afeicool 骚年,偏见是一种事实存在并且无法避免的缺陷,接受它的存在吧。就像你只会喜欢美女一样,你无法强迫自己喜欢一个哔哔哔哔的女人。
    Gonejack
        10
    Gonejack  
       2017-11-29 13:58:42 +08:00 via iPhone
    除了 Kotlin 和 Swift 还有什么有出息
    zn
        11
    zn  
    OP
       2017-11-29 14:01:23 +08:00
    @shanechiu “ 70 年代的陈旧语法”,大家是这么说的,我很认同。
    mcfog
        12
    mcfog  
       2017-11-29 14:13:48 +08:00
    你的硬性要求里根本没有语法帅气这一条啊,go 的语法不同人的感受不一样,但至少不影响干活嘛

    顺便,我倒是觉得 php 对二进制和字符编码这块的处理挺好的啊,不如说我觉得对比其他家的 string / buffer / byte[] / unicode 等等啰啰嗦嗦一堆,php 抛开一切直接把 byte[]叫做 string 的作法用起来特别舒服啊。
    嘛,说到跨平台、静态编译,或者是大量二进制操作的性能的话确实出局了就是

    楼主既然是 C 选手的话,不如考虑 Lua ?
    jyf007
        13
    jyf007  
       2017-11-29 14:16:06 +08:00
    @mcfog 英雄所见略同,虽然我只会 shell script
    90safe
        14
    90safe  
       2017-11-29 14:16:48 +08:00
    看了要求,第一反应就是 Go 了
    gouchaoer
        15
    gouchaoer  
       2017-11-29 14:20:37 +08:00
    c 咯
    johnny23
        16
    johnny23  
       2017-11-29 14:22:34 +08:00 via iPhone
    只能是 golang 了 虽然我是 c#爱好者
    simo
        17
    simo  
       2017-11-29 14:23:06 +08:00
    抛弃偏见,go 满足你
    tonymitcher
        18
    tonymitcher  
       2017-11-29 14:24:47 +08:00
    Typescript
    gouchaoer
        19
    gouchaoer  
       2017-11-29 14:30:32 +08:00
    我也不喜欢 go 的语法,另外 java 语法那么完美为什么还嫌弃
    askfilm
        20
    askfilm  
       2017-11-29 14:36:43 +08:00
    对楼主 呵呵
    whypool
        21
    whypool  
       2017-11-29 14:41:17 +08:00
    ruby ?
    huclengyue
        22
    huclengyue  
       2017-11-29 14:43:16 +08:00
    python 感觉不错
    zn
        23
    zn  
    OP
       2017-11-29 14:43:20 +08:00   ❤️ 3
    @askfilm 我在征求意见建议,你没意见没建议的话,不说话不会死人。呵呵呵,呵你妹。
    zn
        24
    zn  
    OP
       2017-11-29 14:47:16 +08:00
    @mcfog PHP 处理二进制数组还是很麻烦的,自己计算长度 unpack,有时候还要自己 ord(char) 然后再 chr(num) 转换回去,挺麻烦的,这方面还是 C 家族的指针好用
    zn
        25
    zn  
    OP
       2017-11-29 14:49:00 +08:00
    @gouchaoer Java 在做正经项目方面是好用,但是个人项目使用的时候显得很啰嗦烦人。
    crabRunning
        26
    crabRunning  
       2017-11-29 14:49:49 +08:00
    比第一语言还好的语言,少年不存在的。
    SuperMild
        27
    SuperMild  
       2017-11-29 15:00:08 +08:00 via iPhone
    Java 在 ide 的加持下,啰嗦完全不是问题啊!
    zn
        28
    zn  
    OP
       2017-11-29 15:04:19 +08:00
    @SuperMild 是问题。啰嗦一次两次没问题,三次四次也没事,但是每次都啰嗦心里就很不爽。
    master13
        29
    master13  
       2017-11-29 15:06:32 +08:00   ❤️ 1
    人人为我,额下一句怎么说来着?
    Kilerd
        30
    Kilerd  
       2017-11-29 15:10:11 +08:00   ❤️ 4
    如果你是嫌弃 Python 的缩进问题,那么只能证明你在写其他语言的时候都没有正确或者良好的缩进习惯。
    pluschen
        31
    pluschen  
       2017-11-29 15:11:42 +08:00
    我一条条要求对比下来,没发现 C 语言不符合的条目呢。
    acgnsstech
        32
    acgnsstech  
       2017-11-29 15:12:24 +08:00
    我正在开发类似于楼主需求的这种编程语言。。。

    但是 进展太慢。。。

    楼主再等等 大概 3 年后再见~~
    zn
        33
    zn  
    OP
       2017-11-29 15:12:51 +08:00
    @Kilerd 我是嫌弃它的缩进头重脚轻看着不舒服
    thankuu
        34
    thankuu  
       2017-11-29 15:13:21 +08:00
    觉得 java 啰嗦不妨试试全宇宙最复杂语言 Scala ?
    zn
        35
    zn  
    OP
       2017-11-29 15:14:10 +08:00
    @pluschen C 主要是基础设施太简陋,要办点稍微复杂的事情就需要自己造各种轮子或者找别人造好的轮子。
    fhy1994
        36
    fhy1994  
       2017-11-29 15:14:13 +08:00
    Golang Python
    zn
        37
    zn  
    OP
       2017-11-29 15:14:40 +08:00
    @acgnsstech 哈哈哈,骚年,我信你,我等你。
    zhengxiaowai
        38
    zhengxiaowai  
       2017-11-29 15:14:41 +08:00
    这世界上哪有银弹
    zn
        39
    zn  
    OP
       2017-11-29 15:15:20 +08:00
    @thankuu 用 Scala 的话我还不如投入 kotlin 的怀抱
    SuperMild
        40
    SuperMild  
       2017-11-29 15:15:51 +08:00 via iPhone
    @zn 自动补全,代码自动生成,自动隐藏啰嗦部分的代码,写起来简直如行云流水
    zn
        41
    zn  
    OP
       2017-11-29 15:19:04 +08:00
    @zhengxiaowai 语言并不是银弹,语言只是工具。然而工具有趁手的和不趁手的。而一个人的认知范围是有限的,大家的认知范围加起来就很广。也许碰巧有位朋友介绍了一种我之前并不知道的语言,而这种语言恰恰满足我的大部分要求,我想要的就是这种碰巧,至于有没有运气碰上,那就不知道了。that's all.
    zn
        42
    zn  
    OP
       2017-11-29 15:21:10 +08:00
    @SuperMild Java 是我最喜欢的语言之一,然而我觉得并不适合我个人项目的要求。
    keenwon
        43
    keenwon  
       2017-11-29 15:25:32 +08:00
    php 语法都能忍,忍不了 go ?
    robertlyc
        44
    robertlyc  
       2017-11-29 15:26:10 +08:00
    ruby
    skadi
        45
    skadi  
       2017-11-29 15:26:26 +08:00
    可以试试 nim
    natforum
        46
    natforum  
       2017-11-29 15:27:19 +08:00
    c plus
    SuperMild
        47
    SuperMild  
       2017-11-29 15:34:27 +08:00 via iPhone
    我觉得,楼主你对各种语言都有了解,如果有人说出一种你没想到的语言,那要么是小众语言,不符合你要轮子丰富的要求,要么就是有特色的语言,不符合你的语法审美。
    iiusky
        48
    iiusky  
       2017-11-29 15:46:53 +08:00
    学汇编吧
    owenliang
        49
    owenliang  
       2017-11-29 15:55:11 +08:00
    golang 倒是真的和 C"混编"。
    zn
        50
    zn  
    OP
       2017-11-29 16:02:07 +08:00
    @keenwon 你说得很对,我一开始也是这么觉得的,只是越用越觉得难受。至于 PHP,可能是先入为主然后不觉得难受吧。
    roricon
        51
    roricon  
       2017-11-29 16:10:02 +08:00
    elixir 名字先拼对了可以吗?
    zn
        52
    zn  
    OP
       2017-11-29 16:17:13 +08:00
    @roricon 嗯,拼错了,抱歉。
    freejewu
        53
    freejewu  
       2017-11-29 16:18:44 +08:00 via Android
    @afeicool 最近也在玩蟒蛇,缩进太特么坑爹了
    LokiSharp
        54
    LokiSharp  
       2017-11-29 16:18:49 +08:00
    朋友,你听说过 Python 嘛?
    mooncakejs
        55
    mooncakejs  
       2017-11-29 16:27:24 +08:00
    javascript 或者 typescript
    zztt168
        56
    zztt168  
       2017-11-29 16:52:05 +08:00
    我是来凑热闹的,我只会 python,就推荐 python 吧,对缩进有意见用 pycharm 就好。
    overflowHidden
        57
    overflowHidden  
       2017-11-29 16:52:36 +08:00
    @afeicool anaconda ?
    linuxfans
        58
    linuxfans  
       2017-11-29 17:01:59 +08:00 via Android
    居然没人推荐 forth,简直条条都中
    vescape920
        59
    vescape920  
       2017-11-29 17:14:45 +08:00
    PHP 是世界上最好的语言 你还想找比 PHP 还好的语言???
    parkcg
        60
    parkcg  
       2017-11-29 17:17:52 +08:00 via Android
    技术栈跟我有点像啊,我目前也是做 php,移动端也都做过。曾经学习过 Elixir Erlang, 因为精力有限放弃了。
    xvx
        61
    xvx  
       2017-11-29 17:24:24 +08:00
    推一把蟒蛇( Python )。
    因为我最熟悉也最喜欢的就这个。
    joeke
        62
    joeke  
       2017-11-29 17:36:06 +08:00
    学 go 吧
    zn
        63
    zn  
    OP
       2017-11-29 17:45:15 +08:00
    @vescape920 没有最好,只有更好,哈哈哈哈
    zn
        64
    zn  
    OP
       2017-11-29 17:47:39 +08:00
    @linuxfans 特意去了解了一下 Forth,感觉太非主流了,除了个人自用之外貌似没用武之地啊。
    lizon
        65
    lizon  
       2017-11-29 17:48:27 +08:00
    Go,语法这种问题都是小问题,能适应
    我深恶痛绝 Go 的花括号的换行,现在也觉得难看
    但是 Go 带给我的便利远远超过语法带来的不适应
    des
        66
    des  
       2017-11-29 17:50:09 +08:00 via Android
    还是推荐 Python,不然就是要么吐槽一堆,要么没人用
    des
        67
    des  
       2017-11-29 17:52:58 +08:00 via Android
    @des 而且逆向的话,不少都和 Python 有关,比如 ida。再说了胶水语言真不是吹的
    8355
        68
    8355  
       2017-11-29 17:58:58 +08:00
    感觉只有 Golang
    linuxfans
        69
    linuxfans  
       2017-11-29 18:09:19 +08:00
    @zn 因为很多地方偷偷用都不愿意让人知道,比如 NASA、SUN、IBM 等等…
    如果 C 语言让你觉得它是世界上最好的语言(好吧,你们说 PHP 我也不反对,反正有这话的时候 PHP 可能还没出生呢)
    那么 Forth 会让你觉得自己是世界上最好的程序员
    beginor
        70
    beginor  
       2017-11-29 18:18:02 +08:00 via Android
    玩逆向肯定少不了 IDA,IDA 支持 Python 脚本, 所以还是推荐 Python。
    zn
        71
    zn  
    OP
       2017-11-29 18:23:55 +08:00 via iPhone
    @beginor @des 嗯,从这点考虑的话,Python 确实是最佳选择
    wenxiuzh
        72
    wenxiuzh  
       2017-11-29 18:30:48 +08:00
    没有人推荐 hh 哦,支持 hvvm 的,兼容 PHP,php 代码可以转成 hh,hh 有一些 php 没有的特性
    cuebyte
        73
    cuebyte  
       2017-11-29 18:33:39 +08:00   ❤️ 1
    笑看楼上一群 go 粉,go 语法就是烂,还说不得了?作为一个 2000 年后的语言向下比 PHP 有意思?
    zn
        74
    zn  
    OP
       2017-11-29 19:05:18 +08:00 via iPhone
    @cuebyte Go 语法真是烂,还有不方便代码重用,除此之外别的都很好
    qq976739120
        75
    qq976739120  
       2017-11-29 19:21:57 +08:00   ❤️ 2
    python 的缩进很舒服啊....大括号看起来才眼花呢
    zn
        76
    zn  
    OP
       2017-11-29 19:22:42 +08:00 via iPhone
    @qq976739120 这是宗教信仰,哈哈哈
    respawn
        77
    respawn  
       2017-11-29 19:45:31 +08:00
    Cython,注意不是 CPython,前提是"会用 Python",所以还是推荐 Python.
    zjsxwc
        78
    zjsxwc  
       2017-11-29 19:49:02 +08:00
    偏个题,楼主, php 二进制操作推荐用哪个库?
    这个好用吗? https://packagist.org/packages/TrafficCophp/ByteBuffer
    zjsxwc
        79
    zjsxwc  
       2017-11-29 19:50:58 +08:00
    zn
        80
    zn  
    OP
       2017-11-29 19:53:08 +08:00 via iPhone
    @zjsxwc 我都没用过,现在涉及到二进制处理我都是用 C 和 Objective C
    zn
        81
    zn  
    OP
       2017-11-29 19:54:02 +08:00 via iPhone
    @respawn 有空去看看
    codecrash
        82
    codecrash  
       2017-11-29 19:54:07 +08:00 via Android
    少年来学 Lisp 吧
    zn
        83
    zn  
    OP
       2017-11-29 19:55:09 +08:00 via iPhone
    @codecrash 久闻大名,但是不知道有什么特别吸引人的特性?
    codecrash
        84
    codecrash  
       2017-11-29 20:05:13 +08:00
    @zn #83
    1,跨平台.手机差那么点意思
    2,活的那是相当得长久了
    3 能方便地和 C 混编 有 ffi 呀
    4 能像 Exlixir 那样可以编译运行,也可以脚本方式运行(大大加分)
    5 语法你要是没接触过,那绝对新奇
    6 IDE 没什么好用的,emacs 算一个吧
    7 性能看你选的是哪种 lisp 实现,不差
    8,强大的宏

    缺点:
    小众,不太适合用来找工作,作为兴趣学学还不错
    betwinyou
        85
    betwinyou  
       2017-11-29 20:09:47 +08:00
    装的一手好 B
    respawn
        86
    respawn  
       2017-11-29 20:31:31 +08:00
    @codecrash 请问敲碎过几个键盘了?来这推荐 LISP.
    kran
        87
    kran  
       2017-11-29 20:44:42 +08:00
    littleshy
        88
    littleshy  
       2017-11-29 20:44:44 +08:00
    swift 就语言上还是挺好的,希望快速发展了。
    winglight2016
        89
    winglight2016  
       2017-11-29 20:53:05 +08:00
    我来推荐 js 吧,js 才是真正的万能语言啊,从后台到 APP,从平台到智能硬件,有啥活做不了的?
    k9982874
        90
    k9982874  
       2017-11-29 20:53:57 +08:00
    php 用 pack/unpack 到 16 进制也没什么不方便
    IllBeBack
        91
    IllBeBack  
       2017-11-29 20:54:35 +08:00
    http://www.pilotlogic.com/sitejoom/index.php/codetyphon

    FP (free pascal),几乎满足你所有条件

    唯一不足:不能以脚本方式运行。但编译速度绝对一流

    中国最近出了个 FP 吹,已经在沪江跨平台用上了:
    http://rarnu.com
    zn
        92
    zn  
    OP
       2017-11-29 21:00:14 +08:00
    @IllBeBack Interesting,我去瞧瞧
    pezy
        93
    pezy  
       2017-11-29 21:00:57 +08:00 via iPhone
    非常符合 C++
    0w0b
        94
    0w0b  
       2017-11-29 21:09:34 +08:00
    IllBeBack
        95
    IllBeBack  
       2017-11-29 21:25:22 +08:00
    @zn

    http://www.itdks.com/eventlist/detail/1491

    可以看视频回放,听一下他是怎么安利 FP 的,2:09:00 起
    zn
        96
    zn  
    OP
       2017-11-29 21:55:39 +08:00
    @IllBeBack 看视频居然需要登录。
    zn
        97
    zn  
    OP
       2017-11-29 21:56:21 +08:00
    @0w0b 有点意思。

    这贴值了,认识了好几个挺有意思的语言。
    jobtesting
        98
    jobtesting  
       2017-11-29 21:57:40 +08:00 via iPhone
    html
    codecrash
        99
    codecrash  
       2017-11-29 22:17:09 +08:00
    @respawn #86 这和敲碎多少键盘没什么太大关系吧?
    bigknife
        100
    bigknife  
       2017-11-29 22:20:57 +08:00
    Scala Or Haskell
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   838 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 20:39 · PVG 04:39 · LAX 13:39 · JFK 16:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.