
1 pdxjun 2024-11-13 10:38:23 +08:00 图裂了 |
2 4332weizi 2024-11-13 10:44:02 +08:00 头一次见这种 new |
4 chashao 2024-11-13 10:46:01 +08:00 new 是一个库函数调用么? |
5 daqing OP |
6 menglizhi2333 2024-11-13 10:46:56 +08:00 这个语言设计目的是什么? |
8 daqing OP @menglizhi2333 目的是希望能更加清晰的表达思想 |
9 bzj 2024-11-13 10:50:22 +08:00 语法像 go ,但是面向对象简直就是画蛇添足 |
10 sankooc 2024-11-13 10:50:34 +08:00 编译成目标代码么 还是需要运行时啊 |
11 Ocyss 2024-11-13 10:51:15 +08:00 类型首字母大写有什么好处, 小写能作为变量么? |
12 MisterQ 2024-11-13 10:51:30 +08:00 不懂设计开发语言底层逻辑,纯好奇,为什么新语言就要定义一种和其他语言都不一样的语法(比如这个 new ),为了表明是不一样的语言? |
13 dandycheung 2024-11-13 10:51:55 +08:00 via Android 这个 new 设计的挺好的。想当年从 C 语言拓展到 C++ 的时候,一开始接触到 new 的用法非常不自在,感觉明明是一个执行动作的函数,为什么不用小括号,毕竟连 if 后面都有嘛, |
14 InDom 2024-11-13 10:54:05 +08:00 看着像 GoScript 。 |
15 shakaraka PRO go 和 js 的杂交版 |
16 finab 2024-11-13 11:02:19 +08:00 不如改成 new HelloName(name: name) ,多个参数 new HelloName(name: name, name2: name2) |
17 Felldeadbird 2024-11-13 11:04:41 +08:00 底层用什么写。 |
18 thinkwei2012 2024-11-13 11:11:01 +08:00 |
19 Leviathann 2024-11-13 11:13:09 +08:00 出现了关键字 func goboy:像 go |
22 ztty 2024-11-13 11:23:14 +08:00 我的理解设计新的编程语言所需要做的就只是写个新的编译器,不知道我的理解对不对 |
24 daqing OP @dandycheung 是的,Emo 的设计目标之一,是尽可能的符合常识。 |
28 daqing OP @Felldeadbird 目前是用 Go 实现的 |
30 PTLin 2024-11-13 11:26:20 +08:00 你这风格融合了不少语言呀,rust dart 什么的 |
33 shakaraka PRO @daqing #27 还有 ```name: String``` ts 里的就是这样,go 的是 ``` func hello (name string) 而且你函数还没设计返回类型呢,默认难道是 void ? |
34 MrLiu04 2024-11-13 11:35:29 +08:00 很好,我想用你这款语言来编写一个外卦 APP ,就是监听微信抢红包,定时打开钉钉打卡,还能自动帮我薅羊毛,可以吗? |
36 CEBBCAT 2024-11-13 11:42:29 +08:00 |
37 Donahue 2024-11-13 12:10:19 +08:00 大学生 编译原理课程设计水平? |
38 rxswift 2024-11-13 12:13:17 +08:00 6 啊 |
39 yolee599 2024-11-13 12:18:26 +08:00 前面有 var name ,后面有 const runner ,有点看不懂。 这个 new 的语法属实有点抽象,比较嗦,以及难看懂,看样子是可以传任意多参数?只要在类里面加一个变量就可以再加一个构造参数? |
42 jsq2627 2024-11-13 14:22:35 +08:00 > V2EX 第 51 号会员 哇 真大佬 |
43 2024 2024-11-13 14:29:29 +08:00 可以开源出来吗,代码学习学习 |
44 Pantheoon 2024-11-13 14:56:22 +08:00 文件后缀为啥是 emo?是因为写这个语言的这段时间情绪状态不高吗 |
45 OnlyO 2024-11-13 14:57:34 +08:00 厉害, 支持, 虽然我看着感觉像是 Kotlin |
46 fcten 2024-11-13 15:25:56 +08:00 objective-go |
47 Nzelites 2024-11-13 15:26:14 +08:00 虽然一下没理解设计思路 但是看起来挺有趣的 |
48 iamzuoxinyu 2024-11-13 16:14:47 +08:00 提一点:如果你的类型不作为运行时的一种数据(类似 lua/js 那种 prototype oriented 模式),new 作为关键字,最好不要用函数调用的语法, 否则 new() 的第一个参数传入类型名字其实也挺奇怪的(除非)。 |
49 Ghostisbored 2024-11-13 16:29:19 +08:00 都已经卷到这个程度了么 |
51 byp 2024-11-13 17:58:44 +08:00 啥时候自举啊 |
52 yangliudi123 2024-11-13 18:49:22 +08:00 via iPhone 编译器不是必须的,解释器也行。 |
53 caola 2024-11-13 19:12:14 +08:00 6 啊,我也有过自己写一套语言。 我的想法是开发一个全部只有 字符串(string) 一种类型的语言,这样就不用去处理各种类型上的烦事,考虑到内存分配问题可以提前手动指定是属于 tinytext 、text 、mediumtext 、longtext ,默认是自动变长的。随着以后的计机算性能越来越好,这种单一类型的语言性能不会很差,重要的是开发效率上去了。 与 PHP 不同的是 这个语言是面向底层级的语言,与 rust 一样要属于内存安全型。 好了,我的想象已经完了,但我肯定不会去开发的,除非财务自由了再考虑付出行动研究。 |
54 newtype0092 2024-11-13 19:28:19 +08:00 想起来以前做游戏的时候,用 lua 这种没有 class 的脚本语言需要模拟 class 的时候就会定义一个类似这样的 new 方法来初始化。 这里 new 的第二个参数是个 kv 字典,如何保证 k 和 class 的成员属性对应就很麻烦,能处理的方式非常多,对 class 这种基础特性来说就有点太自由了。 |
55 asche910 2024-11-13 19:59:35 +08:00 本来想找找茬的,一看“V2EX 第 51 号会员”,算了,我不够格 |
56 Jirajine 2024-11-13 20:06:13 +08:00 via Android @caola #53 上一个只有字符串一种类型的语言是 shell 脚本,还有一个 Tcl 也能算。开发效率如何我就不说什么了。 |
58 Kilerd 2024-11-13 20:39:09 +08:00 看了看源码: 手搓 parser 、没有抽象出 VM ,用了 native golang 来做 eval ,没有抽象出 opcode 和 bytecode 还在初始阶段就是了。 看起来是一个强类型的解析式语言 |
59 lambdaX999 2024-11-13 20:42:45 +08:00 确实像 swift |
62 daqing OP @yolee599 var 是变量,const 是声明常量,应该不难理解吧。new 是一个构造函数,用于创建类的实例。new 的第二个参数,是用于初始化类的实例变量的。 |
65 daqing OP @iamzuoxinyu 类本身,也是一个对象。HelloWorld 是类对象,传入这个名字没问题吧,你要是有 ruby 经验,就能理解。 |
67 daqing OP @newtype0092 最简单的对应方法,就是一一对应啊。比如: class Foo { var name: String var title: String } cosnt foo = new(Foo, {"name": "David", "title": "CTO"}) 这里的规则,就是一一对应。Foo 声明了哪些字段,后面的 kv 字典,就去初始化赋值。 |
70 daqing OP @lambdaX999 是的,受 Swift 影响比较大 |
71 newtype0092 2024-11-13 21:48:56 +08:00 @daqing #67 我是指维护这种简单的对应方式,可能会需要复杂的处理逻辑。 举个例子,如果把 "name" typo 成 "nama" 会怎么样? 如果严格不允许这种情况,那这里 k 作为一个字符串类型就很奇怪,因为字符串不匹配的错误一般在执行时才会抛出。但这种问题明显在静态检查时就抛出来更好。 |
72 daqing OP |
73 daqing OP 不过,从语义上讲,如果 new()的第二个参数,用来初始化值,那么,不应该出现,和 class 中的定义,对不上的情况。所以,这时候也可以作为 Error ,抛出。 |
74 xiangyuecn 2024-11-13 22:15:08 +08:00 回复一句 没别的意思 单纯见不得 const 关键字 |
75 daqing OP |
76 inframe 2024-11-13 22:45:52 +08:00 开发角度:用这种技能用来写 DSL 比较方便 |
77 moudy 2024-11-13 22:58:50 +08:00 @daqing #72 静态检查搞不定 { kv2.get("fieldName"):kv2.get("fieldValue")} |
78 Kevin2 2024-11-13 23:07:05 +08:00 via Android 感觉超酷! |
81 struggle001 2024-11-14 00:11:25 +08:00 推广下 www.fibjs.org |
82 struggle001 2024-11-14 00:12:12 +08:00 https://fibjs.org 不带 www |
84 levelworm 2024-11-14 05:50:31 +08:00 @inframe 我觉得如果团队允许的话,的确蛮爽的,相当于自己创造一门语言了。只不过大多数时候大伙还是会选用已有的选项。创造一门语言需要的精力实在是太多了。光是测试就要写很多。 楼主这种如果能够编译成 LVVM 的 IR 就可以了,不用自己写后端。 |
86 zhiyu1998 2024-11-14 12:21:11 +08:00 Emo 语言,越写越 Emo |
88 ixoy 2024-11-14 18:17:51 +08:00 新语言解决了什么特别问题?有什么别于其他语言的新特性? |