lua/js/py复杂度分析,及terralang:一种最容易和最小的“双核”应用开发语言

Lua与JavaScript的区别及编程特点 通过以上示例代码,可以看到Lua和JavaScript在语法和用法上存在一些差异。Lua更注重的是简洁、高效和可嵌入性,适用于游戏开发和嵌入式系统。而JavaScript则更适合Web开发,具有强大的Web交互能力、广泛的库和框架以及异步编程的特点。根据实际需求,选择合适的语言可以更好地完成编程任务。Lua和JavaScript是两种常用的脚本编程语言,它们在语法、用途和特点上有一些区别。下面将详细介绍这两种语言的区别以及它们的编程特点。 阅读详情

本文关键字:为语言学习划分一个核心工程。双核语言

说到最常见的编程语言,肯定是c,不光因为它是专业非专业的学编程人士首先接确到的第一门教程级语言,也是因为所有语言都是某种“c系派生”,,,可是它足够简单吗?如果把它放在跟现在的那些语言在一起,它肯定是最简单的(一门语言最重要的就是它支持并内建的简元类型和数据结构,运算符,流程语句,作用域,抽象类型/用户类型支持。其它的都是库级和应用级的。,,而c语言规则和标准库都可以在几小时看完并理解,内置的数据结构只有数组,内置的复合数据类型只有结构体/同位体/位域,唯一的高阶语法是指针和函数数组结合处的应用,排除c面向的问题域全是内存池,编译原理,数据库引擎实现不讲,c本身的语言级复杂性就仅来自在这,在于基于指针可以形成很强大多变和复杂的抽象和它一些其它部分的二义性,),换句话说,c建立了现代高级语言学习和应用的标准核心和最低入阶曲线标准。过程式足够图灵完备学好它已经足够启动编程学习,其它语言只是在c的核心上扩展出其它的机制并集成到自己的核心层,造就出的新的学习曲线,选择性学习即可。

但是考察现在新出现的编程语言,如果向大部分和绝大多数非专业的人打听学习它们的复杂度,十之八九得到的答案会是:c本来就很难了,新的编程和编程语言也越来越难了------ 这不光是因为当代编程始终停留在“c风格,用专业的手段干专业的事情”上,从几十年前的C时代开始也没什么本质面向降低难度的变化(见《一种云化busybox demolets的设想和一种根本降低编程实践难度的设想:免部署无语法编程》)而且还是因为,新出现语言的过程中对往往着重于对c增强cpp进行简化的工作,现代语言的核心往往反而在C过程上集成了越来越多复杂的东西,成为新的复杂度标配,但殊不知对c的简化或许更为必要。因为它决定一个最小学习核心。(见《一种最小(限制规模)语言kernel配合极简(无语法)扩展系统的开发》中的解决方案)----- 这一切都阻碍了很多人想学习编程和坚持下来的决心。

多语言学习为什么要强调一个极简语言核心和标准,和如何去做
因为从不专业到专业,一个人要学习的逻辑体量当然是从少到多,比如对于一个普通人,一般来说,一个类型系统,词法和语法,函数,运算符这些过程式对他们来说就足够复杂了,不能再多了,以后面临多语言学习的需求下,最好是所有的语言共享一个基本相同的类C基础和核心。
除此之外,逻辑的内部体量也应该小,人的属性和学习过程只能是举一反三,前后相续,逻辑不用断层,这样容易建立联系,否则会给学习曲线造成不小的断层无法继续。我们应该用已有的抽象去建立抽象,而不是不断提出新的抽象。用已有的道理去解释新道理。

lua/js/python的核心复杂度比较

最小的应用开发语言核心应该只提供什么?我们用相关的lua/js/py来分析其复杂性。

首先,c的过程式肯定是一门现代语言必须集成的。

1)事情要从最近的语言都加入了函数式(不要把这里的函数式想象成过程中的函数)开始。函数式在80,90年代非常流行,现在热度也不减,它本来是数学上专业的东西,冯氏机or函数机曾经也是选型圣战之一。它的典型特点和给类c语言新增的复杂度,就是提出了函数也是值,也能进入表达式和变量,那么为什么过程式能干所有的事,足够图灵完备,还要函数式呢,因为函数式有巨大的好处,是升级了的过程,1,函数能保存状态和携带数据(过程中的函数只是数据处理器,只能在参数等出入口放置数据),成为某些设计必要的东西和原来过程下的代替如callback,2,函数能给数据结构天然的迭代器抽象促成for each in,3,函数给协程和用户级多任务/异步机制有天然的支持。4,函数能表达高阶数学抽象就不说了。

lua只是有限地利用了函数。而像js这样的语言,起源于c+一种Scheme函数语言,整个编译器实现处,用函数可以作为”元“,解释和实现很多其它的语言机制,比如面向对象,甚至面向过程本身,允许类似直接在抽象树上写程序的方法(即用户用函数写程序实际上模拟了一种语言发明,库级的东西与语言级原理相当对应)。

所以对于深刻理解了函数机制的人,他们很容易学会lua或js的函数部分和非函数部分。对于初级入阶的人,也显得相对学习起来容易。这就是js函数的举一反三机制。

这样看来,拥有c过程和函数为kernels的语言其实也不复杂。比如lua,js,都在接受范围之内,但js干脆把class这种udt/adt和oo(有class不一定要oo)也归入语言核心,实际上就有点过于复杂了。lua和js还有一个历史共同点,都有过成功的jit实现。

2)另外一种极端是py,它也容易举一反三。因为它在数据类型上(它区别于js的地方在于用内置数据结构造扩展而不是提出一种作为代码结构的函数机制),像lua一样,统一为某种meta数据结构,lua是table+metable,py中一切即对象,py为语言实现和py写成的app准备了一个元对象系统(这个对象不是必须有类的那种对象,而是一种语言实现层面的复杂udt/adt数据结构),所有变量都是对象,任何对象和语言元素都出现在用py写的app与运行时形成内存中的对象树中,并形成一个统一运行时速查数据库,可以插入很多内置__xxx__属性方便学习和调试时速查(这同时也使得语言runtime和语言服务languae service更灵活,比如在其中构建编译器更灵活,py更好变成toolchain)。比如py的int是一种对象,非一种primitve type,而是一种基于metaobj复杂化的类型。python在语言层掩盖了metaobj实现,呈现为1,一种“简单新手语言”的标准(每种做法提倡only one way标准化和自然语言表达化),2,其元对象机制和运行时也成为某种“语言实现”的标准,但实际上很难说这种简化机制是复杂化还是一种真正的简化,因为它在其它层面增加了复杂度。

py扩展语言的方法是库级扩展这个宠大的对象系统(其本质是在传统运行期执行栈帧中增加新的数据结构-也是发明py本身的技术,相比之下js的更类似于某种写ast的动作-也是发明js自身的技术),不过py复杂度总体上跟lua和js没法比较,因为python它强调battery included in stdlib,而lua和js只有一个最小核心和最小标准库。

可以看出,py和js都是用语言自身的机制造语言并允许用户扩展语言自身(下面会谈到terralang借助metaprogramming允许你将库真正写成语言而且可import as lib到terralang),而java,cpp这些,用rtti这种完全新提出的东西造class和OO。前者没有增加用户学习曲线的复杂性,而后者增加的不是一大坨。

这样,lua实际上在c的基础上,至少增加了二种高阶语法体系,如果说c只有指针,lua实际上有面向函数和面向对象的气质和血统了(lua的模式匹配用来抢php,perl的市场也是kernel级的?)而过程式+函数式,往往是一种现代语言核心复杂度的标配了。。不过lua不同的地方在于,它聪明地让该属于核心的部分放到核心,把该留给用户的部分还给用户和库,以及应用。

3)lua/luajit聪明的地方还在于,它自己不准备发展得越来越大而定位于与宿主语言(这其中它只全面拥抱c)协作,所以它所有的机制包括扩展都足够“简元”,luajit的ffi使得lua就是c的脚本版本(而且这种互操作非单向而是严密双向的),使得c实际派生出另一个cscript分支,而避免了像js和py这种语言一样将这一切(编程涉及到的二种职责,见《一种最小(限制规模)语言kernel配合极简(无语法)扩展系统的开发》)放到一门新设计的语言kernel中。显式化这二者的界限而不是集成到一起模糊化反而是重要的。

这种可分的结合是非常合理的:c需要lua扩展,因为它解决了“用c实现对象系统”,C不能构建高级抽象的传统难点,而lua也需要c,因为一些扩展只能用系统逻辑实现来写。这二者相互穿插,在他们的领域都互相需要。而且你放心,能saveobj到exe的terra代码也允许是纯pure lua code。lua runtime/c runtime都可以分别发布,terralang只是整合它们形成的一个console editor性质的东西,在terralang中并没有runtime,savetoobj的terra source .t只需lua runtime便可运行,不必带terralang这个近100m的宠物大物。
对于cscript,我们在《qtcling》《terracling》中讲到选型一门真正的c脚本的历程,但似乎只有ffi+lua才是真正的优选之道。

这一切的作用,就是控制了良好的外部复杂度和留给用户入阶处能举一反三的余地。

terralang:一种terra/lua组成的混合的最简应用开发语言核心和扩展体系

再来详细说说terralang,它是代替lua/c(这二种语言本来就是极简的)作为语言standalone kernels复杂度控制的新招:混合kernels。它进一步发展了上述c和lua的关系(相互扩展和混合),更加科学和实用地将复杂度控制和各层用户入阶考虑做到了极致。避免了单kernel的根本缺陷。

怎么说呢?terralang基于clang,是一个极强的静态分析工具,可以让古老的c工作在一个现代的实现平台上(terra),terrlang中的terra是用clang实现的编译型语言,它面向接近c,却力求与lua靠扰,追求terra/lua之间的混合编程(terra中可lua,lua中可terra,顶层是lua,terra只是embeded并被lua metaprogrammed,你可以将terralang视为一个lua,一个lua with terra extends, standalone mixed terra/lua:terralang )。继续了独立的lua/c/ffi时代这二种语言间的交互能力工作。将这一切发展到一门”双核语言“上,方法是:terra函数是一种lua value,就像函数是一种lua type/value一样,然后统一terra/lua上下文语境中的词法作用域。这样二门语言就混合了


(此处不设回复)

lua2js4cocos:lua将cocos2d-js转换为javascript lua2js4cocos lua转换为cocos的javascript cocos2dx-lua到cocos2dx-js 将lua文件放入输入中运行lua2js.py脚本,该js文件将在输出中生成。 立即下载

相关推荐

terra:Terra是一种嵌入式Lua编程语言并由其进行元编程的低级系统编程语言。

Terra入门 扎克·德维托(zdevito在CS点斯坦福点EDU) Terra是一种新的低级系统编程语言,旨在与Lua编程语言无缝地互操作。 它也与现有的C代码向后兼容(在嵌入)。 与C一样,Terra是具有手动内存管理功能的单态,静态类型的编译语言。 但是与C不同,它旨在简化与Lua的交互。 Terra代码共享Lua的语法和控制流构造。 从Terra调用Lua函数(或从Lua调用Terra函数)很容易。 此外,您可以使用Lua对Terra代码进行元编程。 Lua元程序在Terra代码中处理诸如条件编译,名称空间和模板之类的细节,这些细节通常是低级语言的特殊构造。 此耦合还启用了更强大的功能,例如功能专门化,lisp风格的宏和手动控制的JIT编译。 由于Terra的编译器也可以在运行时使用,因此库或嵌入式语言可以轻松地动态生成低级代码。 本指南是Terra编程的简介。 对Lua语言

LUA与python根本就不具有可比性

     网上经常看到别人拿lua与python来进行对比,但是,本人认为,lua与python根本就不具有可比性.原因如下:    1、两者的定位不同。python的定位在于自身的独立开发,即是说python定位于自己能解决所有的问题。lua定位在与其它的代码,尤其是C++代码进行相互配合的编译,单独的Lua本身没有任何的意义。   2、站在解决问题的角度上看。python依靠自身越来越

shgaol的专栏 1万+

Terra是一种低级系统编程语言,嵌入在Lua编程语言中并由其元编程。_C++_Terra_下载.zip

Terra是一种低级系统编程语言,嵌入在Lua编程语言中并由其元编程。_C++_Terra_下载.zip

javascript与python性能对比-lua与python性能测试比较

CLR/C#/Java/Python/IronPython/JavaScript/Lua/Ruby/Squirre l性能测试今天蛋疼地看到一篇,考虑到已经是2年前的文章了,现在的编译器可能会进一步优化,所以自行测试了一遍。这是2007年,该文的作者拿到了最佳优化奖,但此处的代码并非最优化的,只是改进了乘方、自己实现随机数而已。(最优版本可参见和,感觉很变态…)其中,C++和C++ CLR的代...

weixin_39949297的博客 1519

autodl云服务器使用中的conda源报错

通过find path -name filename找到.condarc文件,在autodl服务器中,一般在/root/.condarc。为了利用jypyter打开conda虚拟环境运行,需要下载ipykenel。这个报错是源的问题,在通过源获取包元数据时出现了HTTP 429错误。通过conda换源解决。修改.condarc文件,命令: vim .condarc。但这样还不能解决问题,得把报错中有问题的源注释掉。通过以下命令添加清华镜像源。把报错的链接源注释如下。

Ty_kilig的博客 1584

pytorch中的wheel文件

whl 文件是 Python 的一个软件包分发格式,用于在 Python 中安装软件包。它是 Python Wheel 的缩写,也被称为 wheel 文件。这种文件格式旨在简化 Python 软件包的安装和分发。对于 PyTorch 而言,它提供了预编译的 .whl 文件,您可以通过 pip 安装这些文件来快速方便地安装 PyTorch。这些 .whl 文件是已经编译好的二进制分发文件,可以直接安装在您的 Python 环境中,而无需再进行编译。

bj_zhb的博客 3126

python lua 性能比较 内存_Lua 的速度为什么比 Python 快?

最近研究了下Python的代码,有了一些新的发现。大量的内置字符串常量没有做Intern优化,在python源码中搜索形如"__dict__"之类的常量是这么用的:PyObject* xxxObject = PyObject_GetAttrString(someObject, "__dict__");这样会导致每次调用到这里时都会去查找一下有没有创建过这个字符串。实际上对于脚本虚拟机中这类常量应该...

weixin_39607620的博客 520

手把手教你使用transciver-ip核的配置

手把手教你使用transciver-ip核的配置

u012938458的博客 5411

python lua 性能比较 内存_Javascript,C++,C#,Java,Lua,Python,Ruby,F#语言渲染性能评测

512x512 像素,每像素 10000 个采样,Intel C++ OpenMP 版本渲染时间为 18 分 36 秒。估计 Ruby 版本約需 351 天。本人陆续移植了 C++代码至 Java、JavaScript、Lua、Python 和 Ruby,赵姐夫亦尝试了 F#。本文提供测试源代码、测试结果、简单分析、以及个人体会。声明首先,为免误会,再次重申,本测试有其局限,只能测试某一应用、某一...

weixin_39929635的博客 452

【机械视觉】Halcon—【二、Halcon算子全面介绍(超详细版)】

Halcon 的算子(operators)按照功能被系统性地划分为多个类别,官方文档中目前(Halcon 22.11 版本)共有 19 个主分类,每个主分类下还有若干子分类。 本人在此对这19个分类的常用核心算子进行了一系列的总结,且本人在文章最后还总结了一些案例经验。 注意: ​​​​​​​跨分类调用:某些算子可能在多个分类中,但官方文档中会明确其主分类。 例如: read_image(文件操作)常被其他分类(如图像处理)的示例调用,但其核心功能是文件读取。

qq_3517289697的博客 3913

Vivado 18.3安装全攻略:从下载到配置的完整指南

本文详细介绍了Vivado 18.3的安装全流程,从下载准备到配置优化,特别适合FPGA开发者。文章包含硬件要求、版本选择、组件配置等实用技巧,帮助用户避免常见安装问题,确保稳定运行。重点解析了License配置和系统优化设置,提升开发效率。

weixin_28331555的博客 567

Lua 的速度为什么比 Python 快?

Lua 和 Python 同为虚拟机解释型脚本语言,为什么 Lua 的执行速度比 Python 高?有一些 PUC-Rio Lua(也就是没 JIT 的)和 Python 的 benchmark 对比。结论是 Python 比 C 大约慢 70 倍,Lua 大约慢 30-40 倍。

pzh的博客 4287

手把手教你ensp仿真搭建校园网(含防火墙及无线网络)系列(三)校园无线网络AC+AP配置

本系列博客将带你从零开始,使用 华为 eNSP(Enterprise Network Simulation Platform) 仿真搭建一个完整的校园网络,涵盖 核心层、汇聚层、接入层、防火墙安全策略、无线AC+AP组网 等实战场景。无论你是网络初学者还是希望深化实战经验的工程师,都能通过本教程掌握企业级网络的规划、配置与排错技巧。

echo的博客 1357

Terra 语言入门指南:从零开始学习高性能系统编程

还在为系统编程的性能瓶颈而烦恼?想要一种既能与C语言无缝交互,又具备现代元编程能力的语言吗?Terra(泰拉)语言正是你需要的解决方案!本文将带你从零开始,全面掌握这门革命性的高性能系统编程语言。 通过本文,你将学到: - Terra 语言的核心概念和设计哲学 - 完整的安装配置指南(支持多平台) - 基础语法和高级特性的实战示例 - Lua与Terra的深度交互技巧 - 性能优化和实际应用场景...

gitblog_00567的博客 577

杰理AC696N系列芯片外部中断使用教程

本教程详细介绍了杰理AC696N芯片的GPIO引脚中断唤醒功能实现方法。主要内容包括: 功能特点: 支持任意GPIO引脚配置为中断源 可灵活选择上升沿或下降沿触发 提供自定义中断回调函数接口 核心实现: 通过port_wkup_interrupt_init()函数配置GPIO属性 使用request_irq()注册中断服务程序 提供中断使能/关闭接口 注意事项: 此功能在低功耗模式下无效 需注意引脚冲突和中断优先级设置 建议在回调函数中实现简洁的逻辑 应用场景: 按键检测 外部信号监测 事件触发等 本方案提

qq_42014563的博客 944

【QT开发教程】Qt中的数据加密与解密

在现代应用程序中,数据加密与解密是保护敏感信息的重要手段。Qt本身并不直接提供数据加密与解密的支持,但可以使用第三方库,如OpenSSL或Crypto++,来实现这一功能。本文将介绍如何在Qt中使用OpenSSL进行数据加密与解密,包括基本概念、使用方法以及一些实际的示例。

科技改变人类,技术成就未来 1156

lua和python哪个简单_为什么很多程序员认为:Lua的速度比Python快?

为什么这么说?因为python依靠自身越来越强大的库,让编程者能实现越来越多,越来越复杂的问题。而lua本身则必须与其它的编译语言结合,才能解决问题。就拿C+++lua来举例说明吧~因为C++的复杂性,在其解决问题提供方便的同时,也给程序员带来了很大的麻烦,这些麻烦主要有两个方面:1、C++本身,特别是能用好C++,对程序员就来说就是一个很高的要求。2、在解决复杂问题时,C++程序结构的复杂性和逻...

weixin_31919471的博客 757

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

一种最小(限制规模)语言kernel配合极简(无语法)扩展系统的开发

本文关键字:可裁剪语言。better c only rust 在《terra++ - 一种中心稳定,可扩展的devops可编程语言系统》《terracling前端metalangsys后端uniform backend免编程binding生成式语言系统设想》《利用terralang实现terrapp(1):深刻理解其工作原理和方法论》中我们讲到对语言核心和扩展进行可裁剪的特性(类linux kernel)。这是因为现在围绕语言为中心作为代表的各种开发生态已经十分破碎,又变动频繁断层横生,提高了人们学习它们的

minlearn's techrepos 363

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

lua5.4:长度操作符#详解

在lua中,#叫长度操作符,是一元前缀运算符,用来返回字符串(string)或者表(table)的长度。 1、对于字符串来说,其返回值是该字符串占有多少个字节。也就是当字符串中的一个字符占一个字节时,字符串的长度。 2、#作用于表时,返回的实际上是表的一个边界(border)。 一个表t的边界border,是一个满足下列条件的非负数: (border ==0 or t[border] != nil) and (t[border+1]==nil or border ==math.maxinteger) 在lu

watqw的博客 3083

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

探索未来编程的新维度:Terra 语言与生态系统

是一个创新的、高性能的动态类型编程语言,设计目标是为科学计算和系统级编程提供强大而灵活的工具。它的独特之处在于结合了 Lua 的易用性和 C/C++ 的性能,使得开发者能够在享受高级语言便利性的同时,也能直接利用底层硬件的潜力。 ## 技术分析 ### Terra 语言特性 - **混合型态系统**:Terra 允许开发者在编写时静态类型和动态类型自由切换,以适应不同场景的需求。 -

gitblog_00082的博客 656

python lua 性能比较 内存_Lua、Luajit、Python、Node.js和Java性能测试对比

这个Github项目提供了Lua、Luajit、Python、Node.js和Java等动态语言的性能测试,具体语言版本包括:Lua 5.3.3Luajit 2.0.4Python 3.5.1Pypy 2.4.0HipHop VM 3.13.2NodeJS v6.2.1OpenJDK 1.8.0_92 (reference)主要测试下面算法的性能:二叉树fannkuchreduxfastanbod...

weixin_39895096的博客 1219

microPython VS lua

microPython VS lua

unsv29的专栏 5532

正则表达式处理脚本转译lua2js

最近的工作是项目移植 需要把大量的lua脚本转译成js脚本(cocos2dx升级cocoscreator) 因此也学习了一下强大的正则表达式 通过notepad++,使用宏录制,正则表达式替换的方法 实现了半自动化脚本转译 原文地址:http://www.cnblogs.com/billyrun/articles/6576248.html 具体来说 简单的部分比如loca...

weixin_30924239的博客 620

科普:JavaScript与Lua的区别

在本文中,我们将详细介绍Lua和JavaScript之间的区别,以帮助读者更好地理解它们的特点和用途。(1)游戏开发:Lua被广泛应用于游戏中的脚本编写,例如World of Warcraft、EVE Online、Angry Birds等游戏都使用了Lua。但是它们的语法有很多不同之处。在JavaScript中,变量的作用域可以是全局的或局部的。(2)网络编程:Lua可以与C、C++等语言结合使用,用于编写高性能的网络应用程序,例如Nginx、Redis等。在Lua中,变量的作用域可以是全局的或局部的。

记录 IT 领域经验与见解的博客 3233

探索2023年排名前10的编程语言_难易程度_薪酬情况_编程语言难度排名

探索2023年排名前10的编程语言_难易程度_薪酬情况_编程语言难度排名

Python单行客的博客 3443

利用terralang实现terrapp(1):深刻理解其工作原理和方法论

本文关键字:发明自己的语言,可lua扩展的语言系统,用库发明语言vs用语言发明语言,是toolchain语言也是app生产语言,全生态语言 整个xaas系列文章中,我们编译组装了自己的dbcolinux,现在我们要发明自己的语言,如果说linux生态允许我们很大自由地定制一个完善的OS,那么terralang类似地,就是一个给我们定制语言系统的工具,它的设计目的之一就是这个,而且经过了专门的去复杂化。我们可以在少量知识和实践储备的前提下,copy-paste式地发明自己的简单语言系统 我们要定制的语言系统是

minlearn's techrepos 559
上一篇: 一种最小(限制规模)语言kernel配合极简(无语法)扩展系统的开发
下一篇: 一种设想:利用tinycorelinux+chrome模拟chromeos并集成vscodeonline
Minlearn
博客等级 码龄18年 20粉丝 146原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值