首页 文章 精选 留言 我的

精选列表

搜索[窗口预览],共10002篇文章
优秀的个人博客,低调大师

ECMAScript 2021 特性预览

最新举行的一次 TC39 会议正式确定了 ECMAScript 2021 的完整功能列表。具体包含以下内容: String.prototype.replaceAll 此前,如果想要替换所有的 string occurrences,则需要使用 String.prototype.replace 和全局 regexp 的组合。现在,String.prototype.replaceAll简化了这一点。 const string = "it-is-just-a-test"; // instead of doing this string.replace(/-/g, "_") // "it_is_just_a_test" // in ES2021 we can do string.replaceAll("-", "_") // "it_is_just_a_test" Promise.any 将 Promise.any 加入了 2021 年规范中的 Promise combinators 列表。当你想处理第一个 fulfills 的 Promise 时,可以使用 Promise.any。与 Promise.race 不同,当其中一个 promises fail 时,它不会 reject。更多详情可查看“Promise combinators explained”。 const API = "https://api.github.com/users" Promise.any([ fetch(`${API}/pawelgrzybek`), fetch(`${API}/gabriel403`) ]) .then(response => response.json()) .then(({name}) => console.log(`Cool dude is: ${name}`)) .catch(error => console.error(error)); WeakRefs WeakRefs 提案为语言带来了两个新的 contructors:WeakRef 和 FinalizationRegistry。这些新功能是更复杂、更低级的语言概念。 WeakRef 当将一个对象分配给一个变量时,它指向存储这个对象的值的那块内存(强引用)。如果程序不再引用这个对象,garbage collector会销毁它并回收内存。WeakRef 的一个实例创建了一个对给定对象的引用,如果该对象仍然在内存中,则返回该对象;如果目标对象已经被垃圾回收,则返回未定义的对象。 const obj = { spec: "ES2021" }; const objWeakRef = new WeakRef(obj); // do something cool objWeakRef.deref(); // returns obj in case it is still in memory // returns undefined in case it has been garbage collected FinalizationRegistry FinalizationRegistry 的实例在注册的目标对象被垃圾收集后触发回调函数。 const obj = { spec: "ES2021" }; const registry = new FinalizationRegistry(value => { console.log(`The ${value} object has been garbage collected.`) }); registry.register(obj, "ECMAScript 2021"); // perform some action that triggers garbage collector on obj // The ECMAScript 2021 object has been garbage collected. 值得注意的是,官方提示要尽量避免使用WeakRef和FinalizationRegistry,垃圾回收机制依赖于 JavaScript 引擎的实现,不同的引擎或是不同版本的引擎可能会有所不同。 Logical Assignment Operators 顾名思义,逻辑赋值运算符是逻辑运算符(&&, || and ??)和赋值运算符(=)的组合。 // set a to b only when a is truthy a &&= b; // set a to b only when a is falsy a ||= b; // set a to b only when a is nullish a ??= b; Numeric separators 数字的可读性随着数字长度的增加而降低。现在,则可以使用下划线(_, U+005F)来分隔数字组,使得长数字更加清晰可读。这个功能在 Java、Python、Perl、Ruby、Rust、Julia、Ada、C#等其他编程语言中也很有名。 const population = 37_653_260 详情可查看:https://pawelgrzybek.com/whats-new-in-ecmascript-2021/

优秀的个人博客,低调大师

Grok-1.5 Vision 预览

xAI 宣布推出 Grok-1.5V —— 第一代多模式模型,用于连接数字世界和物理世界。 除了强大的文本功能之外,Grok 现在可以处理各种视觉信息,包括文档、图表、屏幕截图和照片,预计该版本很快就会向早期测试者和现有 Grok 用户推出。 公告指出,Grok-1.5V 在多个领域(从多学科推理到理解文档、科学图表、图表、屏幕截图和照片)与现有的前沿多模态模型相比都具有很强的竞争力。在 RealWorldQA 基准测试中的表现也要优于同类产品。 RealWorldQA 是由 xAI 新推出的一个基准测试,旨在评估多模态模型的基本真实世界空间理解能力。 RealWorldQA 的初始版本包含 700 多张图像,每张图像都有一个问题和易于验证的答案。除了其他真实世界的图像之外,该数据集还包含从车辆拍摄的匿名图像。后续还将随着多模式模型的改进而进行扩展,RealWorldQA 在CC BY-ND 4.0下发布。现已可供下载 (677MB)。 示例:看图写代码 用户:你能把它翻译成 Python 代码吗? Grok:当然可以!您提供的流程图描述了一个简单的猜谜游戏:计算机生成一个随机数,用户必须猜出它。下面是表示流程图中逻辑的 Python 代码: import random def guess_number(): # Generate a random number between 1 and 10 target = random.randint(1, 10) while True: guess = int(input("Guess a number between 1 and 10: ")) if guess == target: print("You won!") break else: print("Wrong guess, try again!") if __name__ == "__main__": guess_number() 在接下来的几个月中,Grok 预计将在图像、音频和视频等各种模式中对这两种功能进行重大改进。与此同时,该公司还在进行招聘。

优秀的个人博客,低调大师

ECMAScript 2023 新特性预览

ECMAScript 2023 的最终版本预计将于今年 6 月底发布。最新举行的一次 TC39会议基本已经确定了 ECMAScript 2023 的新功能列表,预计不会再有任何重大的编辑更改。 本文整理了在 2023 年进入 Stage 4 的几个提案。按照 TC39 的运作流程,每个提案都从 Stage 0 开始,进入 Stage 4 则意味着该提案已被 ECMAScript 编辑签署同意意见,成为了事实上的标准特性。 Array find from last 该提案在Array和TypedArray原型上增加了findLast()和findLastIndex()方法。它们与find()和findIndex()做同样的事情,但顺序相反。这两个方法都很方便,可跳过创建临时的重复、突变和混乱的索引减法。 const isEven = (number) => number % 2 === 0; const numbers = [1, 2, 3, 4]; // from first to the last lookup console.log(numbers.find(isEven)); // 2 console.log(numbers.findIndex(isEven)); // 1 // from last to the first lookup console.log(numbers.findLast(isEven)); // 4 console.log(numbers.findLastIndex(isEven)); // 3 Hashbang Grammar Hashbang,也称为 shebang,是可执行脚本开头的字符序列,用于定义要运行的程序的解释器。当 Unix 内核的程序加载器执行 JavaScript 程序时,主机会剥离 hashbang 以生成有效源,然后再将其传递给引擎。Hashbang Grammar 提案标准化了它的完成方式。 #!/usr/bin/env node console.log('hi 👋'); Symbols as WeakMap keys 在 JavaScript 中,Objects 和 Symbols 被保证是唯一并且不能被重新创建的,这使得它们都是WeakMapkeys 的理想候选者。以前的版本或规范只允许以这种方式使用 Objects ,但新的 Symbols as WeakMap keys 提案则提出将non-registered Symbols添加到允许的键列表中。 const weak = new WeakMap(); const key = Symbol("ref"); weak.set(key, "ECMAScript 2023"); console.log(weak.get(key)); // ECMAScript 2023 Change Array by Copy Array.prototype上的reverse()、sort()和splice()方法就地改变数组。Change Array by Copy提案添加了那些返回新 copy 方法的等价物——toReversed()、toSorted()和toSpliced()。该提案还添加了一个with()方法,该方法返回一个新的数组,其中给定索引处的元素被替换为给定值,以避免使用 bracket notation 的就地突变。 const original = [1, 2, 3, 4]; const reversed = original.toReversed(); console.log(original); // [ 1, 2, 3, 4 ] console.log(reversed); // [ 4, 3, 2, 1 ] const original = [1, 3, 2, 4]; const sorted = original.toSorted(); console.log(original); // [ 1, 3, 2, 4 ] console.log(sorted); // [ 1, 2, 3, 4 ] const original = [1, 4]; const spliced = original.toSpliced(1, 0, 2, 3); console.log(original); // [ 1, 4 ] console.log(spliced); // [ 1, 2, 3, 4 ] const original = [1, 2, 2, 4]; const withThree = original.with(2, 3); console.log(original); // [ 1, 2, 2, 4 ] console.log(withThree); // [ 1, 2, 3, 4 ]

优秀的个人博客,低调大师

Beetl3.0 功能预览

Beetl是一款全功能,性能优秀的国产模板引擎,可以广泛用于动态页面生成,静态页面生成,代码生成,文本转换,脚本和规则引擎等,从2011年来,一直维护,并得到国内用户的肯定。 1 性能篇 Beetl3.0 现在进展到M1版本,单元测试都通过,俩个模板类的性能测试也跑了一下,结果如下 国内Keb同学提供的性能测试来看 (https://gitee.com/xiandafu/teb) 老外提供的性能测试来看(https://github.com/mbosecke/template-benchmark) 注:Freemaker,Velocity,Thymleaf 都更新到最新版本了,Rocker是编译成class来执行模板 综合来说,整体性能仍然很优秀,这是Beetl一贯风格 2 功能篇 2.1 定界符增强 Beetl3 允许再定义一对“站位符和定界符”,比如定义了模板的定界符<%%>,站位符${},你可以定义一对,比如<!--: --> 和 #{} 如下是一段模板 select * from user_#{seq} where user_id=${userId} 如上SQL模板,可以对#{},和 ${}提供俩个解释,前者文本输出,后者输出"?" 再比如 <span>${seq}:#{text}</span> 可以对#{}自定义解释,增加XSS功能 2.2 片段渲染 增强 Beetl支持模板局部渲染,只要标记AJAX片段,Beetl可以只渲染这一部分,而忽略整体,这是和AJAX调用,取代了传统模板必须使用include来支持重用 3.0 增强了AJAX语法,是的AJAX标记的片段在使用的时候可以是一个独立模板,涉及的变量成为全局变量 @ var data=[1,3]; ....... @ #ajax sayHello:{ hello ${data[0]} @} 渲染整体模板的时候,输出是hello,1,也可以专门渲染sayHello部分 Template t = gt.getAjaxTemplate("/ajax/ajax_template.html","sayHello"); t.binding("data",new int[]{1,3}); String str = t.render(); 2.3 HTML 标签 增强 Beetl3.0 可以支持html标签,且支持绑定变量,比如 <cms:topic type="${xxx}" var="content,index"> ${index}:${content} </cms:topic> topic 是一个自定义标签,java实现会导出俩个变量content,index供渲染标签体内用,新的3.0 支持导出的变量范围扩大到整个模板,使用export关键字比如 <cms:define export="contents"/> //其他地方可以用conents <cms:foreach list="${contents}" var="c"> <span>${c.title}</span> </cms:foreach> 2.4 HTML标签父子关系 这个JSPTag支持,Beetl2.X需要做些扩展,现在直接作为内置功能,因此,你可以用Beet的htmltag做出各种复杂的html扩展标签 2.5 语法糖 新增了 +=,-= 这种语法糖,比如 a+=3; user.age+=1; 2.6 提供语法树节点修改 2.X版本如果要修改语法树,写的代码较多,3.0能轻易的修改语法树,实现自己特有逻辑,比如在线内容管理系统要求编辑输入的循环不能循环超过1万次, @ while(true){ @} 3.0能轻易修改while节点实现,通过GrammarCreator,替换自己的实现,从而限制while循环限制次数,Beetl的所有语法节点都可以被替换,以实现扩展需求,譬如 #{} 的实现需要xxs @Override public PlaceholderST createTextOutputSt2(Expression exp, FormatExpression format) { check("TextOutputSt2"); return new YourXXSPlaceholderST(exp, format, null); } YourXXSPlaceholderST 内部可以参考PlaceholderST.java实现,但增加了XSS校验 2.7 提升了脚本API Beetl实质是脚本语言,因此GroupTemplate核心类新增script相关功能,提供了若干方便的API,你可以轻易使用Beetl实现规则引擎,脚本引擎,并能在性能上取得运算有势 Map ret = groupTemplate.runScript("return 2*利率;",paras); Double d = ret.get("return"); 2.8 采用ASM Beetl2.x是用手写的字节码增强,当时Maven并不流行,所有的jar,都是以小为美,现在看来,已经没有必要了,所以Beetl3.x从新用ASM实现字节码增强,如一个User对象,会在运行时期生成一个辅助类 public class UserAccess extends AttributeAccess{ public Object get(Object obj,String name){ User user = (User)obj; int code = name.hashCode(); switch(code) case 97:return user.getA(); ..... } } 字节码增强 功能是可选的,默认还是采用反射方式实现属性调用 3 其他 Beetl3.X还有许多待完成的功能,比如编写分布式的模板加载器,可以用RedisResourceLoader或者MongoDBResourceLoader,会一直改进,敬请期待,也欢迎提出自己的想法。3.X让我有机会修复了1.x,2.x中的一些难以完善的功能,3.0修复的最早一个功能是在2015年提出来的,终于在3.0有机会改正了

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册