首页 > 最新文献

Dynamic Languages Symposium最新文献

英文 中文
Of scripts and programs: tall tales, urban legends, and future prospects 关于剧本和节目:荒诞故事、都市传说和未来前景
Pub Date : 2009-10-26 DOI: 10.1145/1640134.1640136
J. Vitek
Scripting languages are playing an increasing role in today's software landscape due to their support for rapid and exploratory development. They typically have lightweight syntax, weak data privacy, dynamic typing, powerful aggregate data types, and allow execution of the completed parts of incomplete programs. While many of their uses are web-centric, scripting languages also show up in non-traditional domains such as space exploration and administration of the pension benefits entire countries. Considering their importance to the practice of computing, it is surprising to see that, in academic circles, scripting is still often viewed as an undisciplined and unprincipled attempt at programming. In this talk, I will summarize work carried in collaboration with IBM Research on bridging the divide between scripting and programming. I will motivate our investigations with some success stories of scripting languages used in unusual places. Then I will dispel some misconceptions about the nature of scripts with preliminary results from a large corpus analysis of programs written in a popular scripting language. Finally, I will talk about the design of a new language, called Thorn, that aims to ease the journey from scripts to programs (and back).
脚本语言由于支持快速和探索性的开发,在当今的软件环境中扮演着越来越重要的角色。它们通常具有轻量级语法、弱数据隐私、动态类型、强大的聚合数据类型,并允许执行未完成程序的已完成部分。虽然脚本语言的许多用途是以网络为中心的,但它们也出现在非传统领域,如太空探索和整个国家的养老金福利管理。考虑到它们对计算实践的重要性,令人惊讶的是,在学术界,脚本仍然经常被视为一种没有纪律和没有原则的编程尝试。在这次演讲中,我将总结与IBM Research在弥合脚本和编程之间的鸿沟方面所进行的合作工作。我将用一些脚本语言在不寻常的地方使用的成功案例来激励我们的调查。然后,我将用一种流行的脚本语言编写的程序的大型语料库分析的初步结果来消除一些关于脚本本质的误解。最后,我将讨论一种名为Thorn的新语言的设计,它旨在简化从脚本到程序(以及返回)的过程。
{"title":"Of scripts and programs: tall tales, urban legends, and future prospects","authors":"J. Vitek","doi":"10.1145/1640134.1640136","DOIUrl":"https://doi.org/10.1145/1640134.1640136","url":null,"abstract":"Scripting languages are playing an increasing role in today's software landscape due to their support for rapid and exploratory development. They typically have lightweight syntax, weak data privacy, dynamic typing, powerful aggregate data types, and allow execution of the completed parts of incomplete programs. While many of their uses are web-centric, scripting languages also show up in non-traditional domains such as space exploration and administration of the pension benefits entire countries. Considering their importance to the practice of computing, it is surprising to see that, in academic circles, scripting is still often viewed as an undisciplined and unprincipled attempt at programming. In this talk, I will summarize work carried in collaboration with IBM Research on bridging the divide between scripting and programming. I will motivate our investigations with some success stories of scripting languages used in unusual places. Then I will dispel some misconceptions about the nature of scripts with preliminary results from a large corpus analysis of programs written in a popular scripting language. Finally, I will talk about the design of a new language, called Thorn, that aims to ease the journey from scripts to programs (and back).","PeriodicalId":344101,"journal":{"name":"Dynamic Languages Symposium","volume":"15 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2009-10-26","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"115292535","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 1
Groovy package templates: supporting reuse and runtime adaption of class hierarchies Groovy包模板:支持类层次结构的重用和运行时适应
Pub Date : 2009-10-26 DOI: 10.1145/1640134.1640139
Eyvind W. Axelsen, Stein Krogdahl
We show how package templates, a modularization mechanism originally developed for statically typed languages like Java and C#, can be applied to and implemented in a dynamic language like Groovy, by using the language's capabilities for meta-programming. We then consider a set of examples and discuss dynamic PT from the viewpoints of code modularization and reuse, and dynamic adaption of classes at runtime.
我们展示了包模板(一种最初为Java和c#等静态类型语言开发的模块化机制)如何应用于Groovy等动态语言,并通过使用Groovy的元编程功能在Groovy中实现。然后,我们考虑一组示例,并从代码模块化和重用以及运行时类的动态适应的角度讨论动态PT。
{"title":"Groovy package templates: supporting reuse and runtime adaption of class hierarchies","authors":"Eyvind W. Axelsen, Stein Krogdahl","doi":"10.1145/1640134.1640139","DOIUrl":"https://doi.org/10.1145/1640134.1640139","url":null,"abstract":"We show how package templates, a modularization mechanism originally developed for statically typed languages like Java and C#, can be applied to and implemented in a dynamic language like Groovy, by using the language's capabilities for meta-programming. We then consider a set of examples and discuss dynamic PT from the viewpoints of code modularization and reuse, and dynamic adaption of classes at runtime.","PeriodicalId":344101,"journal":{"name":"Dynamic Languages Symposium","volume":"7 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2009-10-26","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"121833639","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 16
Language embedding and optimization in mython 语言嵌入和优化在神话
Pub Date : 2009-10-26 DOI: 10.1145/1640134.1640141
J. Riehl
Mython is an extensible variant of the Python programming language. Mython achieves extensibility by adding a quotation mechanism that accepts an additional parameter as well as the code being quoted. The additional quotation parameter takes the form of a Mython expression. Unlike other user code, Mython evaluates the quotation parameter at compile-time. The result of the compile-time expression is a function that is used to both parse the quoted code, and extend the compile-time environment. By explicitly passing the compilation environment to compile-time quotation functions, Mython's parameterized quotation allows users to inject code into the language compiler. Injected code can extend the language by modifying the compilation phases, which are visible to the compilation environment. The Mython language is realized by the MyFront compiler, a tool for translating Mython into Python byte-code modules. This paper introduces the Mython language, describes the implementation and usage of the MyFront tool, and shows how MyFront can be used to implement domain-specific optimizations using a little rewrite language.
Mython是Python编程语言的可扩展变体。Mython通过添加一个引用机制来实现可扩展性,该机制可以接受额外的参数以及被引用的代码。附加的quote参数采用Mython表达式的形式。与其他用户代码不同,Mython在编译时计算quotation参数。编译时表达式的结果是一个函数,用于解析加引号的代码,并扩展编译时环境。通过显式地将编译环境传递给编译时引用函数,Mython的参数化引用允许用户将代码注入语言编译器。注入代码可以通过修改编译阶段来扩展语言,这些阶段对编译环境是可见的。Mython语言是由MyFront编译器实现的,MyFront是一个将Mython翻译成Python字节码模块的工具。本文介绍了Mython语言,描述了MyFront工具的实现和使用,并展示了如何使用MyFront使用一个小的重写语言来实现特定于领域的优化。
{"title":"Language embedding and optimization in mython","authors":"J. Riehl","doi":"10.1145/1640134.1640141","DOIUrl":"https://doi.org/10.1145/1640134.1640141","url":null,"abstract":"Mython is an extensible variant of the Python programming language. Mython achieves extensibility by adding a quotation mechanism that accepts an additional parameter as well as the code being quoted. The additional quotation parameter takes the form of a Mython expression. Unlike other user code, Mython evaluates the quotation parameter at compile-time. The result of the compile-time expression is a function that is used to both parse the quoted code, and extend the compile-time environment. By explicitly passing the compilation environment to compile-time quotation functions, Mython's parameterized quotation allows users to inject code into the language compiler. Injected code can extend the language by modifying the compilation phases, which are visible to the compilation environment. The Mython language is realized by the MyFront compiler, a tool for translating Mython into Python byte-code modules. This paper introduces the Mython language, describes the implementation and usage of the MyFront tool, and shows how MyFront can be used to implement domain-specific optimizations using a little rewrite language.","PeriodicalId":344101,"journal":{"name":"Dynamic Languages Symposium","volume":"3 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2009-10-26","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"134200821","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 11
Optimization of dynamic languages using hierarchical layering of virtual machines 使用虚拟机分层的动态语言优化
Pub Date : 2009-10-26 DOI: 10.1145/1640134.1640147
Alexander Yermolovich, Christian Wimmer, M. Franz
Creating an interpreter is a simple and fast way to implement a dynamic programming language. With this ease also come major drawbacks. Interpreters are significantly slower than compiled machine code because they have a high dispatch overhead and cannot perform optimizations. To overcome these limitations, interpreters are commonly combined with just-in-time compilers to improve the overall performance. However, this means that a just-in-time compiler has to be implemented for each language. We explore the approach of taking an interpreter of a dynamic language and running it on top of an optimizing trace-based virtual machine, i.e., we run a guest VM on top of a host VM. The host VM uses trace recording to observe the guest VM executing the application program. Each recorded trace represents a sequence of guest VM bytecodes corresponding to a given execution path through the application program. The host VM optimizes and compiles these traces to machine code, thus eliminating the need for a custom just-in-time compiler for the guest VM. The guest VM only needs to provide basic information about its interpreter loop to the host VM.
创建解释器是实现动态编程语言的一种简单而快速的方法。这种易用性也带来了主要的缺点。解释器比编译后的机器码慢得多,因为它们有很高的分派开销,而且不能执行优化。为了克服这些限制,解释器通常与即时编译器结合使用,以提高整体性能。然而,这意味着必须为每种语言实现一个即时编译器。我们探索了采用动态语言的解释器并将其运行在优化的基于跟踪的虚拟机上的方法,也就是说,我们在主机VM上运行来宾VM。主机虚拟机通过跟踪记录的方式来观察执行应用程序的来宾虚拟机。每个记录的跟踪表示与应用程序中给定的执行路径相对应的来宾VM字节码序列。主机VM优化这些跟踪并将其编译为机器码,从而消除了为来宾VM定制实时编译器的需要。客户VM只需要向主机VM提供有关其解释器循环的基本信息。
{"title":"Optimization of dynamic languages using hierarchical layering of virtual machines","authors":"Alexander Yermolovich, Christian Wimmer, M. Franz","doi":"10.1145/1640134.1640147","DOIUrl":"https://doi.org/10.1145/1640134.1640147","url":null,"abstract":"Creating an interpreter is a simple and fast way to implement a dynamic programming language. With this ease also come major drawbacks. Interpreters are significantly slower than compiled machine code because they have a high dispatch overhead and cannot perform optimizations. To overcome these limitations, interpreters are commonly combined with just-in-time compilers to improve the overall performance. However, this means that a just-in-time compiler has to be implemented for each language.\u0000 We explore the approach of taking an interpreter of a dynamic language and running it on top of an optimizing trace-based virtual machine, i.e., we run a guest VM on top of a host VM. The host VM uses trace recording to observe the guest VM executing the application program. Each recorded trace represents a sequence of guest VM bytecodes corresponding to a given execution path through the application program. The host VM optimizes and compiles these traces to machine code, thus eliminating the need for a custom just-in-time compiler for the guest VM. The guest VM only needs to provide basic information about its interpreter loop to the host VM.","PeriodicalId":344101,"journal":{"name":"Dynamic Languages Symposium","volume":"1 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2009-10-26","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"129996734","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 33
Fast type reconstruction for dynamically typed programming languages 动态类型编程语言的快速类型重构
Pub Date : 2009-10-26 DOI: 10.1145/1640134.1640145
F. Pluquet, Antoine Marot, Roel Wuyts
Type inference and type reconstruction derive static types for program elements that have no static type associated with them. They have a wide range of usage, such as helping to eliminate the burden of manually specifying types, verifying whether a program is type-safe, helping to produce more optimized code or helping to understand programs. While type inference and type reconstruction is an active field of research, most existing techniques are interested foremost in the precision of their approaches, at the expense of execution speed. As a result, existing approaches are not suited to give direct feedback in development environments, where interactivity dictates very fast approaches. This paper presents a type reconstruction algorithm for variables that is extremely fast (in the order of milliseconds) and reasonably precise (75 percent). The system is implemented as a byte-code evaluator in several Smalltalk environments, and its execution speed and precision are validated on a number of concrete case studies.
类型推断和类型重构为没有静态类型关联的程序元素派生静态类型。它们有广泛的用途,例如帮助消除手动指定类型的负担,验证程序是否是类型安全的,帮助生成更优化的代码或帮助理解程序。虽然类型推断和类型重构是一个活跃的研究领域,但大多数现有技术最感兴趣的是其方法的准确性,而牺牲了执行速度。因此,现有的方法不适合在交互性要求非常快的方法的开发环境中提供直接反馈。本文提出了一种快速(毫秒级)且相当精确(75%)的变量类型重构算法。该系统作为字节码评估器在几个Smalltalk环境中实现,其执行速度和精度在许多具体案例研究中得到验证。
{"title":"Fast type reconstruction for dynamically typed programming languages","authors":"F. Pluquet, Antoine Marot, Roel Wuyts","doi":"10.1145/1640134.1640145","DOIUrl":"https://doi.org/10.1145/1640134.1640145","url":null,"abstract":"Type inference and type reconstruction derive static types for program elements that have no static type associated with them. They have a wide range of usage, such as helping to eliminate the burden of manually specifying types, verifying whether a program is type-safe, helping to produce more optimized code or helping to understand programs. While type inference and type reconstruction is an active field of research, most existing techniques are interested foremost in the precision of their approaches, at the expense of execution speed. As a result, existing approaches are not suited to give direct feedback in development environments, where interactivity dictates very fast approaches. This paper presents a type reconstruction algorithm for variables that is extremely fast (in the order of milliseconds) and reasonably precise (75 percent). The system is implemented as a byte-code evaluator in several Smalltalk environments, and its execution speed and precision are validated on a number of concrete case studies.","PeriodicalId":344101,"journal":{"name":"Dynamic Languages Symposium","volume":"55 1 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2009-10-26","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"116567459","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 27
Hosting an object heap on manycore hardware: an exploration 在多核硬件上托管对象堆:一种探索
Pub Date : 2009-10-26 DOI: 10.1145/1640134.1640149
D. Ungar, Sam S. Adams
In order to construct a test-bed for investigating new programming paradigms for future "manycore" systems (i.e. those with at least a thousand cores), we are building a Smalltalk virtual machine that attempts to efficiently use a collection of 56-on-chip caches of 64KB each to host a multi-megabyte object heap. In addition to the cost of inter-core communication, two hardware characteristics influenced our design: the absence of hardware-provided cache-coherence, and the inability to move a single object from one core's cache to another's without changing its address. Our design relies on an object table, and the exploitation of a user-managed caching regime for read-mostly objects. At almost every stage of our process, we obtained measurements in order to guide the evolution of our system. The architecture and performance characteristics of a manycore platform confound old intuitions by deviating from both traditional multicore systems and from distributed systems. The implementor confronts a wide variety of design choices, such as when to share address space, when to share memory as opposed to sending a message, and how to eke out the most performance from a memory system that is far more tightly integrated than a distributed system yet far less centralized than in a several-core system. Our system is far from complete, let alone optimal, but our experiences have helped us develop new intuitions needed to rise to the manycore software challenge.
为了构建一个测试平台,用于研究未来“多核”系统(即至少有1000个核的系统)的新编程范式,我们正在构建一个Smalltalk虚拟机,该虚拟机试图有效地使用56个片上64KB的缓存集合来托管一个数兆字节的对象堆。除了核间通信的成本之外,两个硬件特征影响了我们的设计:缺乏硬件提供的缓存一致性,以及无法在不改变地址的情况下将单个对象从一个核心的缓存移动到另一个核心的缓存。我们的设计依赖于一个对象表,并利用用户管理的缓存机制来处理读取最多的对象。在我们的过程的几乎每一个阶段,我们获得测量,以指导我们的系统的发展。多核平台的体系结构和性能特征与传统的多核系统和分布式系统都有所不同,从而混淆了旧的直觉。实现者面临着各种各样的设计选择,例如何时共享地址空间,何时共享内存而不是发送消息,以及如何从内存系统中获得最大的性能,内存系统比分布式系统集成得更紧密,但比多核系统集中得更少。我们的系统还远远不够完整,更不用说最优了,但是我们的经验已经帮助我们开发出了应对多核心软件挑战所需的新直觉。
{"title":"Hosting an object heap on manycore hardware: an exploration","authors":"D. Ungar, Sam S. Adams","doi":"10.1145/1640134.1640149","DOIUrl":"https://doi.org/10.1145/1640134.1640149","url":null,"abstract":"In order to construct a test-bed for investigating new programming paradigms for future \"manycore\" systems (i.e. those with at least a thousand cores), we are building a Smalltalk virtual machine that attempts to efficiently use a collection of 56-on-chip caches of 64KB each to host a multi-megabyte object heap. In addition to the cost of inter-core communication, two hardware characteristics influenced our design: the absence of hardware-provided cache-coherence, and the inability to move a single object from one core's cache to another's without changing its address. Our design relies on an object table, and the exploitation of a user-managed caching regime for read-mostly objects. At almost every stage of our process, we obtained measurements in order to guide the evolution of our system.\u0000 The architecture and performance characteristics of a manycore platform confound old intuitions by deviating from both traditional multicore systems and from distributed systems. The implementor confronts a wide variety of design choices, such as when to share address space, when to share memory as opposed to sending a message, and how to eke out the most performance from a memory system that is far more tightly integrated than a distributed system yet far less centralized than in a several-core system. Our system is far from complete, let alone optimal, but our experiences have helped us develop new intuitions needed to rise to the manycore software challenge.","PeriodicalId":344101,"journal":{"name":"Dynamic Languages Symposium","volume":"71 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2009-10-26","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"126358281","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 16
Contextual values 上下文值
Pub Date : 2008-07-08 DOI: 10.1145/1408681.1408684
É. Tanter
Context-oriented programming proposes to treat execution context explicitly and to provide means for context-dependent adaptation at runtime. There are many mechanisms that can be used to make either variable bindings or application code adapt dynamically, like dynamically-scoped variables, dynamic layer activation, and contextual dispatch. There are no means however, to make actual values be context-dependent. This means that side effects engendered by dynamically-activated adaptations are potentially global. We propose contextual values: values that actually depend on the context in which they are looked at and modified. We explore how contextual values can be provided, either as a simple library or directly into the language through different designs, for which we provide the operational semantics in the form of Scheme interpreters. Being able to scope side effects to certain contexts is a step forward for context-oriented programming, and can have interesting applications in other areas like security and dynamic software evolution.
面向上下文的编程建议显式地处理执行上下文,并提供在运行时进行依赖于上下文的适应的方法。有许多机制可用于使变量绑定或应用程序代码动态适应,如动态作用域变量、动态层激活和上下文分派。但是,没有办法使实际值依赖于上下文。这意味着由动态激活的适应所产生的副作用可能是全球性的。我们提出了上下文值:实际上依赖于它们被观察和修改的上下文的值。我们将探讨如何提供上下文值,无论是作为简单的库还是通过不同的设计直接提供到语言中,为此我们以Scheme解释器的形式提供操作语义。能够将副作用限定在特定的上下文中是面向上下文编程的一个进步,并且可以在安全性和动态软件进化等其他领域中有有趣的应用。
{"title":"Contextual values","authors":"É. Tanter","doi":"10.1145/1408681.1408684","DOIUrl":"https://doi.org/10.1145/1408681.1408684","url":null,"abstract":"Context-oriented programming proposes to treat execution context explicitly and to provide means for context-dependent adaptation at runtime. There are many mechanisms that can be used to make either variable bindings or application code adapt dynamically, like dynamically-scoped variables, dynamic layer activation, and contextual dispatch. There are no means however, to make actual values be context-dependent. This means that side effects engendered by dynamically-activated adaptations are potentially global. We propose contextual values: values that actually depend on the context in which they are looked at and modified. We explore how contextual values can be provided, either as a simple library or directly into the language through different designs, for which we provide the operational semantics in the form of Scheme interpreters. Being able to scope side effects to certain contexts is a step forward for context-oriented programming, and can have interesting applications in other areas like security and dynamic software evolution.","PeriodicalId":344101,"journal":{"name":"Dynamic Languages Symposium","volume":"108 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2008-07-08","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"115650301","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 24
The Clojure programming language Clojure编程语言
Pub Date : 2008-07-08 DOI: 10.1145/1408681.1408682
R. Hickey
Customers and stakeholders have substantial investments in, and are comfortable with the performance, security and stability of, industry-standard platforms like the JVM and CLR. While Java and C# developers on those platforms may envy the succinctness, flexibility and productivity of dynamic languages, they have concerns about running on customer-approved infrastructure, access to their existing code base and libraries, and performance. In addition, they face ongoing problems dealing with concurrency using native threads and locking. Clojure is an effort in pragmatic dynamic language design in this context. It endeavors to be a general-purpose language suitable in those areas where Java is suitable. It reflects the reality that, for the concurrent programming future, pervasive, unmoderated mutation simply has to go. Clojure meets its goals by: embracing an industry-standard, open platform - the JVM; modernizing a venerable language - Lisp; fostering functional programming with immutable persistent data structures; and providing built-in concurrency support via software transactional memory and asynchronous agents. The result is robust, practical, and fast. This talk will focus on the motivations, mechanisms and experiences of the implementation of Clojure.
客户和涉众在JVM和CLR等行业标准平台上进行了大量投资,并对其性能、安全性和稳定性感到满意。虽然这些平台上的Java和c#开发人员可能羡慕动态语言的简洁、灵活性和生产力,但他们担心在客户认可的基础设施上运行、访问现有的代码库和库以及性能。此外,他们还面临着使用本地线程和锁定处理并发性的持续问题。Clojure是在这方面的实用动态语言设计的一种努力。它努力成为一种通用语言,适合于Java适合的领域。它反映了这样一个现实:为了并发编程的未来,普遍的、不受节制的突变必须消失。Clojure通过以下方式实现了它的目标:拥抱一个行业标准的开放平台——JVM;使一门古老的语言——Lisp——现代化;促进不可变持久数据结构的函数式编程;并通过软件事务性内存和异步代理提供内置并发支持。结果鲁棒、实用、快速。本讲座将重点介绍Clojure实现的动机、机制和经验。
{"title":"The Clojure programming language","authors":"R. Hickey","doi":"10.1145/1408681.1408682","DOIUrl":"https://doi.org/10.1145/1408681.1408682","url":null,"abstract":"Customers and stakeholders have substantial investments in, and are comfortable with the performance, security and stability of, industry-standard platforms like the JVM and CLR. While Java and C# developers on those platforms may envy the succinctness, flexibility and productivity of dynamic languages, they have concerns about running on customer-approved infrastructure, access to their existing code base and libraries, and performance. In addition, they face ongoing problems dealing with concurrency using native threads and locking. Clojure is an effort in pragmatic dynamic language design in this context. It endeavors to be a general-purpose language suitable in those areas where Java is suitable. It reflects the reality that, for the concurrent programming future, pervasive, unmoderated mutation simply has to go. Clojure meets its goals by: embracing an industry-standard, open platform - the JVM; modernizing a venerable language - Lisp; fostering functional programming with immutable persistent data structures; and providing built-in concurrency support via software transactional memory and asynchronous agents. The result is robust, practical, and fast. This talk will focus on the motivations, mechanisms and experiences of the implementation of Clojure.","PeriodicalId":344101,"journal":{"name":"Dynamic Languages Symposium","volume":"17 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2008-07-08","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"115363417","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 191
Language design: back to the future? 语言设计:回到未来?
Pub Date : 2008-07-08 DOI: 10.1145/1408681.1408686
L. Tratt
Programming languages are the medium used to express our wishes to a computer. Unlike human languages, we can alter, destroy, and create them at will. Despite this, mainstream programming languages are surprisingly homogeneous with the differences between them often amounting to little more than surface syntax issues. New ideas rarely get a toe-hold in the marketplace and those that do have typically been used for decades by a sizeable minority (e.g. dynamic typing). In this talk the speaker will suggest reasons for the inherent conservativeness of programming languages, their designers, and their users. He will look back at some largely forgotten languages - some older than others - that introduced distinctive language features, and offer thoughts on their successes and failures. He will show how a series of seemingly outlandish ideas scavenged from such languages can be blended together to form part of a coherent modern language - one that also aims to try and inject a few new memes of its own into the languages pool.
编程语言是用来向计算机表达我们愿望的媒介。与人类语言不同,我们可以随意改变、破坏和创造它们。尽管如此,主流编程语言惊人地同质,它们之间的差异通常只是表面的语法问题。新的想法很少能在市场上站稳脚跟,而那些能够站稳脚跟的想法通常已经被相当多的少数人使用了几十年(例如动态类型)。在这次演讲中,演讲者将提出编程语言、它们的设计者和它们的用户固有的保守性的原因。他将回顾一些基本上被遗忘的语言——有些比其他语言更古老——这些语言引入了独特的语言特征,并对它们的成功和失败提供一些思考。他将展示如何将从这些语言中提取出来的一系列看似古怪的想法混合在一起,形成连贯的现代语言的一部分——这种语言也旨在尝试向语言池中注入一些自己的新模因。
{"title":"Language design: back to the future?","authors":"L. Tratt","doi":"10.1145/1408681.1408686","DOIUrl":"https://doi.org/10.1145/1408681.1408686","url":null,"abstract":"Programming languages are the medium used to express our wishes to a computer. Unlike human languages, we can alter, destroy, and create them at will. Despite this, mainstream programming languages are surprisingly homogeneous with the differences between them often amounting to little more than surface syntax issues. New ideas rarely get a toe-hold in the marketplace and those that do have typically been used for decades by a sizeable minority (e.g. dynamic typing). In this talk the speaker will suggest reasons for the inherent conservativeness of programming languages, their designers, and their users. He will look back at some largely forgotten languages - some older than others - that introduced distinctive language features, and offer thoughts on their successes and failures. He will show how a series of seemingly outlandish ideas scavenged from such languages can be blended together to form part of a coherent modern language - one that also aims to try and inject a few new memes of its own into the languages pool.","PeriodicalId":344101,"journal":{"name":"Dynamic Languages Symposium","volume":"239 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2008-07-08","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"116123278","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 0
Efficient floating-point number handling for dynamically typed scripting languages 动态类型脚本语言的高效浮点数处理
Pub Date : 2008-07-08 DOI: 10.1145/1408681.1408687
Shiro Kawai
Typical implementations of dynamically typed languages treat floating-point numbers, or flonums, in a "boxed" form, since those numbers don't fit in a natural machine word if a few bits in the word are reserved for type tags. The naïve implementations allocate every instance of flonums in the heap, thus incur large overhead on numerically intensive computations. Compile-time type inference could eliminate boxing of some flonums, but it would be costly for highly dynamic scripting languages, in which a compiler runs every time a script is executed. We suggest two modified stack machine architectures that avoid heap allocations for most intermediate flonums, and can be relatively easily retrofitted to existing stack-based VMs. The basic idea is to have an arena for intermediate flonums that works as a part of extended stack or as a nursery. Like typical VMs, flonums are tagged pointers that point to native floating-point numbers, but when a new flonum is pushed onto the VM's stack, it actually points to a native floating-point number placed in the arena. Heap allocation only occurs when the flonum pointer needs to be moved to the heap. The two architectures differ in the strategies to manage the arena. We implemented and evaluated those strategies in a Scheme implementation"Gauche." Both strategies showed 30%-140% speed up in numerical computation intensive benchmarks, eliminating 99.8% of heap-allocation of intermediate flonums, with little penalty in non-numerical benchmarks. Profiling showed the speed improvement came from the elimination of flonum allocation and garbage collection.
动态类型语言的典型实现将浮点数或flonums以“盒装”形式处理,因为如果单词中的一些位保留给类型标记,这些数字就不适合自然的机器单词。naïve实现在堆中分配每个flonums实例,因此在数字密集型计算上产生很大的开销。编译时类型推断可以消除一些flonums的装箱,但是对于高度动态的脚本语言来说,这将是代价高昂的,在这种语言中,每次执行脚本时都会运行编译器。我们建议采用两种改进的堆栈机器架构,它们可以避免大多数中间空间的堆分配,并且可以相对容易地改造到现有的基于堆栈的vm。基本的想法是为中间菌群提供一个舞台,作为扩展堆栈的一部分或作为苗圃。像典型的VM一样,flonum是指向本机浮点数的标记指针,但是当一个新的flonum被压入VM的堆栈时,它实际上指向放置在竞技场中的本机浮点数。堆分配仅在需要将浮动指针移动到堆时发生。这两种体系结构在管理竞技场的策略上有所不同。我们在Scheme实现“Gauche”中实现并评估了这些策略。这两种策略在数值计算密集型基准测试中都显示出30%-140%的速度提升,消除了99.8%的中间堆分配,在非数值基准测试中几乎没有损失。分析显示,速度的提高来自于消除了flonum分配和垃圾收集。
{"title":"Efficient floating-point number handling for dynamically typed scripting languages","authors":"Shiro Kawai","doi":"10.1145/1408681.1408687","DOIUrl":"https://doi.org/10.1145/1408681.1408687","url":null,"abstract":"Typical implementations of dynamically typed languages treat floating-point numbers, or flonums, in a \"boxed\" form, since those numbers don't fit in a natural machine word if a few bits in the word are reserved for type tags. The naïve implementations allocate every instance of flonums in the heap, thus incur large overhead on numerically intensive computations. Compile-time type inference could eliminate boxing of some flonums, but it would be costly for highly dynamic scripting languages, in which a compiler runs every time a script is executed.\u0000 We suggest two modified stack machine architectures that avoid heap allocations for most intermediate flonums, and can be relatively easily retrofitted to existing stack-based VMs. The basic idea is to have an arena for intermediate flonums that works as a part of extended stack or as a nursery. Like typical VMs, flonums are tagged pointers that point to native floating-point numbers, but when a new flonum is pushed onto the VM's stack, it actually points to a native floating-point number placed in the arena. Heap allocation only occurs when the flonum pointer needs to be moved to the heap. The two architectures differ in the strategies to manage the arena.\u0000 We implemented and evaluated those strategies in a Scheme implementation\"Gauche.\" Both strategies showed 30%-140% speed up in numerical computation intensive benchmarks, eliminating 99.8% of heap-allocation of intermediate flonums, with little penalty in non-numerical benchmarks. Profiling showed the speed improvement came from the elimination of flonum allocation and garbage collection.","PeriodicalId":344101,"journal":{"name":"Dynamic Languages Symposium","volume":"66 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2008-07-08","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"131634441","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 2
期刊
Dynamic Languages Symposium
全部 Acc. Chem. Res. ACS Applied Bio Materials ACS Appl. Electron. Mater. ACS Appl. Energy Mater. ACS Appl. Mater. Interfaces ACS Appl. Nano Mater. ACS Appl. Polym. Mater. ACS BIOMATER-SCI ENG ACS Catal. ACS Cent. Sci. ACS Chem. Biol. ACS Chemical Health & Safety ACS Chem. Neurosci. ACS Comb. Sci. ACS Earth Space Chem. ACS Energy Lett. ACS Infect. Dis. ACS Macro Lett. ACS Mater. Lett. ACS Med. Chem. Lett. ACS Nano ACS Omega ACS Photonics ACS Sens. ACS Sustainable Chem. Eng. ACS Synth. Biol. Anal. Chem. BIOCHEMISTRY-US Bioconjugate Chem. BIOMACROMOLECULES Chem. Res. Toxicol. Chem. Rev. Chem. Mater. CRYST GROWTH DES ENERG FUEL Environ. Sci. Technol. Environ. Sci. Technol. Lett. Eur. J. Inorg. Chem. IND ENG CHEM RES Inorg. Chem. J. Agric. Food. Chem. J. Chem. Eng. Data J. Chem. Educ. J. Chem. Inf. Model. J. Chem. Theory Comput. J. Med. Chem. J. Nat. Prod. J PROTEOME RES J. Am. Chem. Soc. LANGMUIR MACROMOLECULES Mol. Pharmaceutics Nano Lett. Org. Lett. ORG PROCESS RES DEV ORGANOMETALLICS J. Org. Chem. J. Phys. Chem. J. Phys. Chem. A J. Phys. Chem. B J. Phys. Chem. C J. Phys. Chem. Lett. Analyst Anal. Methods Biomater. Sci. Catal. Sci. Technol. Chem. Commun. Chem. Soc. Rev. CHEM EDUC RES PRACT CRYSTENGCOMM Dalton Trans. Energy Environ. Sci. ENVIRON SCI-NANO ENVIRON SCI-PROC IMP ENVIRON SCI-WAT RES Faraday Discuss. Food Funct. Green Chem. Inorg. Chem. Front. Integr. Biol. J. Anal. At. Spectrom. J. Mater. Chem. A J. Mater. Chem. B J. Mater. Chem. C Lab Chip Mater. Chem. Front. Mater. Horiz. MEDCHEMCOMM Metallomics Mol. Biosyst. Mol. Syst. Des. Eng. Nanoscale Nanoscale Horiz. Nat. Prod. Rep. New J. Chem. Org. Biomol. Chem. Org. Chem. Front. PHOTOCH PHOTOBIO SCI PCCP Polym. Chem.
×
引用
GB/T 7714-2015
复制
MLA
复制
APA
复制
导出至
BibTeX EndNote RefMan NoteFirst NoteExpress
×
0
微信
客服QQ
Book学术公众号 扫码关注我们
反馈
×
意见反馈
请填写您的意见或建议
请填写您的手机或邮箱
×
提示
您的信息不完整,为了账户安全,请先补充。
现在去补充
×
提示
您因"违规操作"
具体请查看互助需知
我知道了
×
提示
现在去查看 取消
×
提示
确定
Book学术官方微信
Book学术文献互助
Book学术文献互助群
群 号:481959085
Book学术
文献互助 智能选刊 最新文献 互助须知 联系我们:info@booksci.cn
Book学术提供免费学术资源搜索服务,方便国内外学者检索中英文文献。致力于提供最便捷和优质的服务体验。
Copyright © 2023 Book学术 All rights reserved.
ghs 京公网安备 11010802042870号 京ICP备2023020795号-1