template

基于ANTLR语法树编写解释引擎最佳实践

你说的曾经没有我的故事 提交于 2019-12-23 02:31:05
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Tiny模板引擎的实现方式原来是采用的编译方式,最近发生了一些问题,因此我觉得有必要把编译方式调整为解释方式,为此就开始了此次实现活动。 编译方式存在的问题 当时采用编译方式,主要是考虑到编译方式在运行时不必再去遍历语法树,因此就采用了编译方式。但是在实际应用当中,出现了如下问题: 文件路径冲突的问题 由于采用的是编译方式,这个时候就存在在一个选择,即:Java源代码落地或不落地的选择。如果Java文件不落地,则在有问题的时候,如果想要进行代码调试(虽然这种场景并不多见),那么就没有源代码可供调试。如果Java代码落地,则会存在一个问题,那就是资源文件在磁盘文件中产生冲突的问题。 同样的问题对于class文件也存在,如果不落地,那么每次应用重启动的时候,都要重新编译这些文件以产生class文件;如果落地,则也会产生冲突的问题。 当然,Tiny模板引擎通过增加一个配置项,解决了这个冲突的问题,但是由于增加了一个配置项,从客观上增加了维护人员的工作量,也容易造成当维护人员不了解这里面的道道,忘记设置从而导致在一台服务器中部署多个Tiny应用时多个应用中的模板文件生成的java文件和class文件的冲突,从而导致出现问题。 PermSize内存占用问题 采用编译方式的时候,由于每个模板文件都要生成一个类

Consul Template

↘锁芯ラ 提交于 2019-12-13 23:56:08
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 在consul-template没出现之前,大家构建服务发现系统,大多采用的是zookeeper、etcd+confd这样类似的系统,之前写过一篇consul+confd的文,讲的是如何动态生成配置文件的,如今consul官方推出了自己的模板系统,就是consul-template,这样的话动态的配置系统可以分化为etcd+confd和consul+consul-template两大阵营。consul是一个和etcd类似但又强于etcd的系统,关于etcd和consul可以翻阅以前的文章,consul-template的定位就和confd差不多一样了,confd的后端可以是etcd或者consul,相信consul搭配consul-template能发挥更大的效果。consul-template提供了一个便捷的方式从consul中获取存储的值,consul-template守护进程会查询consul实例,来更新系统上指定的任何模板,当更新完成后,模板可以选择运行一些任意的命令。 consul template的使用场景:consul template可以查询consul中的服务目录、key、key-values等。这种强大的抽象功能和查询语言模板可以使consul template特别适合动态的创建配置文件

如何选择Javascript模板引擎(javascript template engine)?

无人久伴 提交于 2019-12-10 17:02:49
日期:2012-9-17 来源: GBin1.com 随着前端开发的密集度越来越高,Ajax和JSON的使用越来越频繁,大家肯定免不了在前台开发中大量的使用标签,常见到的例子如下: 你的到了一个JSON对象,如下: var data={ email: 'terry.li@gbin1.com, gender: 'male' } 然后你需要将json数据组织成页面内容,如下: var email, gender; email= '<div class="mail">' + data.email+ </div>'; gender= '<div class="gender">' + data.gender + </div>'; $('#contentwrapper‘).append(content).append(gender); 代码执行功能非常简单,将json数据生成web页面中的内容,如下: <div class="mail">terry.li@gbin1.com</div> <div class="gender">Male</div> 如果只是简单代码组合可能还好一些,但是如果页面大量使用类似的结构的话,除非一直是同一个程序员维护,否则后期的管理成本会相对非常的高。 为 了解决这个问题, 我们通常会引入"javascript模板引擎概念“,提到模板,相信大家都不会陌生

一个精巧的Javascript Template引擎

£可爱£侵袭症+ 提交于 2019-12-10 16:43:08
基于MVC模式的web框架在渲染页面时,都会提供可以内嵌后端语言的模板引擎,用于使用动态数据生成页面。在某些场景下,无法使用后端的模板引擎,但又需要使用动态数据渲染页面内容,这时便可选择基于Javascript的模板引擎。 背景:之前公司有一套C/S产品线,后来为了产品的web化,在中间件上封装了一个Restful service接口,用以响应web前端的数据请求。前端只提供了供Javascript调用的数据接口,返回的数据格式为序列化的JSON。因此页面的渲染只能在前端,由Javascript调用Restful service接口获得动态数据之后才能进行。 基于这种场景,考虑寻找一个Javascript的模板引擎进行页面渲染。由于本次需求(一个网站)相对简单,因此没有选择功能强大且复杂的模板引擎,而是采用了一个极其简单的引擎。 这个模板引擎是John Resig在 几年前 写的( 这里 ),代码非常简洁。jquery之前有几个版本提供了模板引擎的功能,后来又去掉了,我没有实际用过jquery的模板功能,只搂了一眼使用方式,猜测跟这个模板引擎应该是有渊源的。John在他的书《 Secrets of the JavaScript Ninja》里也对这段代码做了介绍。下面是这个模板引擎的全部代码: /* * javascript template from John Resig *

了解angular2--template(译)

纵饮孤独 提交于 2019-12-10 13:51:23
Angular新旧版本的template很相似,让我们根据一个简答的模板来了解一下ng2 <div> Hello my name is {{name}} and I like {{thing}} quite a lot. </div> {{}}:rending ---用两个大括号来传递变量值 []:属性绑定---用中括号来绑定变量和组件 <video-control [player]="myPlayer"></video-control> 如果<video-control>组件中已经声明了player属性,那么通过这个组件中的类生成的实例都可以被使用 ():监听事件 <my-component (click)="onClick($event)"></my-component> 如果要让事件冒泡到他的父元素上,只需要用在事件前加上`即可 <my-component (^click)="onClick($event)"> <button>I bubble up</button> </my-component> *:星号根据后面的标记嵌入一个新的模板页面到这个组件中,就像这样 <my-component *ng-for="object in array"> </my-component>> 这将会在组件中插入一个新的页面,而不必向这个组件传递数据 原文链接 angular2的模板 来源:

C++使用模板类实现任意类型switch和变量case

让人想犯罪 __ 提交于 2019-12-09 22:23:19
最近自己维护的一个项目 program_options (是一个命令行生成与解析的C++库)在实际应用的时候遇到一个需求: 需要switch一个字符串来执行相应代码块,然而原生的switch-case条件选择语法针对condition有严格的限制,下面摘录一段switch的语法标准: switch statement Transfers control to one of the several statements, depending on the value of a condition. Syntax attr (optional) switch ( condition ) statement attr (C++11) - any number of attributes condition - any expression of integral or enumeration type, or of a class type contextually implicitly convertible to an integral or enumeration type, or a declaration of a single non-array variable of such type with a brace-or-equals initializer.

Tiny模板语言(VelocityPlus)初步入门

烂漫一生 提交于 2019-12-09 14:04:43
1 关于用户手册 本文主要介绍如何在模板中使用Tiny模板语言,通过查阅本手册,可以对Tiny模板语言 TTL(Tiny Template Language)的用法有一个较全面的认识,并学会如何有效地使用Tiny模板语言。同时,本文提供了较多的例子帮您来学习并掌握它。 2 Tiny模板语言概述 Tiny 模板语言是一个参考 Velocity 语法的模板语言,它对 Velocity 模板语言中一些功能不太完全及使用过程中比较不方便的地方进行全面的扩展和升级,同时为了更好的适应Web界面层的开发,还提供了强大的布局功能。 本文中的例子都使用Tiny 模板语言来开发。 <HTML> <BODY> Hello ${customer.Name}! <table> #for( mud : mudsOnSpecial ) #if ( customer.hasPurchased(mud) ) <tr> <td> ${flogger.getPromo( mud )} </td> </tr> #end #end </table> </BODY> </HTML> 感谢您选择Tiny模板引擎! 3 Tiny模板语言能为您做什么? 假设您是一家专门出售Mud的在线商店的页面设计人员,让我们暂且称它为“在线MUD商店”。您的业务非常繁忙,客户下了各种类型和数量的Mud订单

c++模版的使用(template)

喜夏-厌秋 提交于 2019-12-07 13:04:43
1. 模板的概念。 我们已经学过 重载(Overloading) ,对重载函数而言,C++的检查机制能通过函数参数的不同及所属类的不同。正确的调用重载函数。例如,为 求两个数的最大值 ,我们定义MAX()函数需要对不同的数据类型分别定义不同 重载(Overload) 版本。 // 函数1. int max( int x, int y); {return(x>y)?x:y ;} // 函数2. float max( float x, float y){ return (x>y)? x:y ;} // 函数3. double max( double x, double y) {return (c>y)? x:y ;} 但如果在主函数中,我们分别定义了 char a,b; 那么在执行max(a,b);时 程序就会出错,因为我们没有定义char类型的重载版本。 现在,我们再重新审视上述的max()函数,它们都具有同样的功能,即求两个数的最大值,能否只写一套代码解决这个问题呢?这样就会避免因重载函数定义不 全面而带来的调用错误。为解决上述问题C++引入模板机制, 模板定义:模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性。模版可以分为两类,一个是函数模版,另外一个是类模版。 2. 函数模板的写法 函数模板的一般形式如下:

翻译:introduce to tornado

余生颓废 提交于 2019-12-05 22:23:47
在第二章中,我们看到了如何使用tornado的template轻松地将数据从handler传送给web页面。让我们在保持简洁的web tag结构的同时,轻松地向web页面插入动态数据,然而大部分网站都希望使用一个高可用的响应模型,将内容按照页眉、页脚和布局框架的形式进行管理。在这一章我们将让你了解到如何通过tornado的template或UI模块完成这种扩展。 块和替换 当你花费了大量的时间为你的web应用创建和制作模板时,你有没有发现,它们似乎只是按照逻辑的形式进行布局,你希望你的前端代码和后端代码一样能够尽可能多的重用对吗?tornado提供了丰富的模板集成和扩展的块语句帮助你完成这一点,tornado可以按照你想要的方式灵活的控制和改变你现有的模板,提高它们的重用性。如果想要扩展现有的模板,你只需要将{% extends ”filename.html“%}放到你的模板中。例如使用你的父模板(main.html)去扩展一个新的模板,你只需要这么做: {% extends ”main.html” %} 它将会在新的web页面中继承并使用main.html,然后将main.html的内容插入到你希望显示的地方。有了这个系统,你可以创建一个主模板,嵌入到其他有特殊需求的子模版中,在子模块中你可以使用动态内容或效果快速地扩展你的应用。 基本的块

TinyTemplate(Velocity Plus版)即将火热推出~~~

牧云@^-^@ 提交于 2019-12-03 04:17:41
本来是没有自己写一个模板引擎的计划的,因为按我的理解,一直认识这种“语言”级的引擎,难度是非常大的。总感觉自己的水平不够,因此不敢有这个念头。直到大量使用Velocty的时候,碰到velocty诸多尽如人意的地方,但是又无能为力,退回到JSP吧,又心不有甘。于是就期望着寻找一种语法结构接近velocty,但是又没有Velocity这些不方便之处的模板语言。于是进到一个模板语言群,一群大佬们个个至少是一个模板语言的作者,于是作者在里面表达了自己的期望,大佬们都介绍了自己的模板引擎,于是作者一个接一个的看源码,看文档。说实际,看文档,感觉都非常不错,都有自己的特色,看语法也都不错,除了一部分自己特别关注的点没有之外,其部分都非常不错了。但是距离自己的诉求还是有差距,怎么办呢?于是就准备找一个最接近的模板引擎来进行一定的扩展,挑来挑去就挑中了jetbrick这个模板语言(在此对Jetbrick致以强烈的衷心的感谢!!)。 之所以挑这个呢,是因为以下几个原因: Antlr语言文件编写非常清晰,对于我这种Antlr盲来说,也可以看得懂,甚至可以照葫芦画瓢修改修改,这个非常重要,在后期作者进行了相当的语法改进,这个方面有极度体现 代码质量较好,使用sonar进行进行分析,给的结果都还是相当不错的,在作者看过的所有的模板语言中,算上成之选 语法结构与Velocity的非常接近,这点对我也非常重要