领域特定语言(domain-specific language、DSL)指的是专注于某个应用程序领域的计算机语言,如SQL语言,正则表达式。
DSL分为两类:
- 内部DSL(Internal DSL),DSL和宿主语言是相同的语言。
- 外部DSL(External DSL),DSL和宿主语言不同,需要自己写解释器。
抛个问题先:世界上最强大的 DSL 实现语言,不是 Haskell 或者 Scala,而应该是 Scheme?
看不懂没关系,留在以后思考。
通用语言在解决某些特定领域的问题有时会显得有些吃力,这时候DSL似乎就有了用武之地。
个人感觉,若能在某些特定领域拥有比其它同学更简单、更高效的解决方法和手段,也是自己的一个加分项和优势。
Python是一门通用、灵活、高效的语言,它在解决某些特定领域问题时会比较擅长。
目前,Python是数据科学和机器学习领域的明星语言,这些也都源于它所具有的语言特性和优势。
一个简单的Internal DSL for SQL DDL。
from contextlib import contextmanager
class Table(object):
def __init__(self, table_name):
self.table_name = table_name
self.fields = {}
def __getattr__(self, name):
def f(**kvs):
self.fields[name] = kvs
return f
def execute(self):
print ("Creating table %s with fields %s"%(self.table_name, self.fields))
@contextmanager
def create_table(table_name):
table = Table(table_name)
yield table
table.execute()
with create_table('User') as t:
t.first_name(type='char', length=30)
t.last_name(type='char', length=30)
t.age(type='int')
运行结果:
Creating table User with fields {'first_name': {'type': 'char', 'length': 30}, 'last_name': {'type': 'char', 'length': 30}, 'age': {'type': 'int'}}
- 王垠《聊聊 DSL》
- Creating Domain Specific Languages in Python
- Domain-specific languages to Manycore and GPU: Building High-Performance Tools with Python
- Writing a Domain Specific Language (DSL) in Python
配图来自Twitter:@makadamixa