[Fix][Impl] 为了消除类构造带来的语法歧义,同时保持实现简洁和括号省略的语法,自此版本,引入了 `new` 操作符
造成歧义的原方法:
if a == A{}
条件是 a == A,还是 a == A{} ?
因此,现在使用 new a_struct{}来构造类
[Opti] 相较于 Fig v0.4.1-alpha版本,release O3同编译条件下
Fib普通递归法性能提升 ~50%
具体方式:
增加了小整数优化,-128~127的整数现在会直接从IntPool获取而不是新构造
...忘了
[Fix] 类构造 shorthand模式忘写了,现在补上了
[Feat][Impl] 类型声明现在接受一个表达式,原为Identifier。实现 var start: time.Time = time.now() 的效果
这是符合语法和语言特性的支持,类型为一等公民。类似Python的 <class 'type'>
[Impl] 修改了部分错误输出的细节
51 lines
966 B
Plaintext
51 lines
966 B
Plaintext
/*
|
|
Official Module `time`
|
|
Library/time/time.fig
|
|
|
|
Copyright © 2026 PuqiAR. All rights reserved.
|
|
*/
|
|
|
|
import _builtins; // provides __ftime_now_ns (int64_t)
|
|
|
|
|
|
public struct Time
|
|
{
|
|
ns: Int; // int64_t, private
|
|
|
|
public func toNanos() -> Int
|
|
{
|
|
return ns;
|
|
}
|
|
|
|
public func toMicros() -> Int
|
|
{
|
|
return __fvalue_int_from(ns / 1000); // convert double to int
|
|
}
|
|
|
|
public func toMillis() -> Double
|
|
{
|
|
return ns / 1000 / 1000;
|
|
}
|
|
|
|
public func toSeconds() -> Double
|
|
{
|
|
return ns / 1000 / 1000 / 1000;
|
|
}
|
|
|
|
public func since(other: Time) -> Int
|
|
{
|
|
const time_ns := other.toNanos();
|
|
const result := ns - time_ns;
|
|
if result < 0
|
|
{
|
|
throw "time has been reversed! 😢";
|
|
}
|
|
return result;
|
|
}
|
|
// TODO: support `-` operator when Fig supports overload
|
|
}
|
|
|
|
public func now() -> Time
|
|
{
|
|
return new Time{__ftime_now_ns()};
|
|
} |