• go语言的设计的一点粗浅看法 人工智能


        Go是Google开发的一种编译型,并发型,并具有垃圾回收功能的编程语言。罗伯特·格瑞史莫(Robert Griesemer),罗勃·派克(Rob Pike)及肯·汤普逊于2007年9月开始设计Go语言,[1],稍后Ian Lance Taylor, Russ Cox加入专案中。

        Go语言这个出自大公司Google的大牛的作品, 为什么没有象出自Microsoft的anders hejlsberg的C#这么吸引人并流行起来呢?其实Go语言的设计者也是有名的大牛,但为什么三个臭皮匠,竟然抵不过一个诸葛亮呢.本人以初学者第一次接触Go语言来说说粗浅的看法.    

    package main
     
    import "fmt"
     
    func main() {
            fmt.Println("Hello, World")
    }

    看上面这个Hello world.首先这就有问题.Go号称是最接近C但目标是取代C的.但这个名家之手的东西,以本人初学者来看就有两大问题.

    1.没有标点符号,语法很接近C,但没有符号,这就象我们写文章,读惯了带逗号句号的,突然有个东西号出来的都没有,会很不习惯.这代码乍一看还以为蹩脚C入门者写Hello world.给写错了.

    2.fmt是什么库?看名字是看不出来的,想不到大牛对于命名也和初学者一样,初学者学一门语言,一般肯定先从Hello world.入手,从控制台输出入手.这给初入门学习者开了个坏头.

    以Wiki例子

    package main
     
    import (
            "os"
            "flag" // command line option parser
    )
     
    var omitNewline = flag.Bool("n", false, "don't print final newline")
     
    const (
            Space   = " "
            Newline = "\n"
    )
     
    func main() {
            flag.Parse() // Scans the arg list and sets up flags
            var s string = ""
            for i := 0; i < flag.NArg(); i++ {
                    if i > 0 {
                            s += Space
                    }
                    s += flag.Arg(i)
            }
            if !*omitNewline {
                    s += Newline
            }
            os.Stdout.WriteString(s)
    }

        先以初学者的感觉来看,首先,所谓初学者,在当代其实大多数都知道点C, C++或别的什么,因为学校里就有这课程.然后再来年上面这堆代码.直觉告诉我,这很象一个C或C++或什么的初学者写出的,不注重语法,错误百出的代码.因为一般初学者喜欢两件事,一是忘记语法的哪些地方要括号哪些地方不加.还有就是标点符号.

        当然这也许就是设计者大牛们考虑到的因素,干脆就不需要了.但问题来了,如果你写惯C类代码,再来写它或看它会感觉不太适应,然后再切回C类也一样.纠结于标点符号.这一点上,Python也是一样的,但Python通过空格强制,起码让你不会认为在写C类程序.

      var s string = "" 这样的变量定义, 不太理解为什么要这么做,从初学者的角度就是不容易理解.当然对于直接没接触过任何编程语言的人除外.

    for i := 0 同样变量定义和赋值语句,这个:=是怎么回事?为什么和上面的变量定义不一样?从初学者的角度就是不容易理解.当然对于直接没接触过任何编程语言的人除外.

     从语法层面,未经仔细考虑用户感受的设计,让使用者产生凌乱的感觉.这让人想到了windows8的Start键.或许这是一种更优秀的设计,但一开始的确不顺手.

    当然,Go提供了一些新的理念,比如以组合为范式,简单的说,只要是方法签名相同,就可以当成接口,这倒是一个不错的想法,动态语言就是这么干的.C#的delegate和interface也是这么干的.但不同.GO做这些都是隐式的.(也许这里表达的不准确,因为没有仔细看过go语言)

    以本人的初浅观点来看,Go语言未能仔细设计语言的表达,一开始就犯下很多初学者的错误,功能再强,让Hello world这样的程序就阻挡了人的学习欲望.也许将来有那么一天,Go大放异彩,让人克服入门的小问题而去使用它.

  • 相关阅读:
    数据库中随机返回n条数据的方法
    sql中NULL之恨
    数据库性能的查询优化特刊待续
    sql中exists替换in的区别
    代码的效率问题看一下代码
    检测数据库性能的方法
    Linux随堂1
    设置网页的图标
    C# 线程、timer例句
    转:1.2 Oracle表空间的操作
  • 原文地址:https://www.cnblogs.com/DSharp/p/3069801.html
Copyright © 2020-2023  润新知