Mariano Martinez Peck, N. Bouraqadi, M. Denker, Stéphane Ducasse, L. Fabresse
A proxy object is a surrogate or placeholder that controls access to another target object. Proxy objects are a widely used solution for different scenarios such as remote method invocation, future objects, behavioral reflection, object databases, inter-languages communications and bindings, access control, lazy or parallel evaluation, security, among others. Most proxy implementations support proxies for regular objects but they are unable to create proxies for classes or methods. Proxies can be complex to install, have a significant overhead, be limited to certain type of classes, etc. Moreover, most proxy implementations are not stratified at all and there is no separation between proxies and handlers. In this paper, we present Ghost, a uniform, light-weight and stratified general purpose proxy model and its Smalltalk implementation. Ghost supports proxies for classes or methods. When a proxy takes the place of a class it intercepts both, messages received by the class and lookup of methods for messages received by instances. Similarly, if a proxy takes the place of a method, then the method execution is intercepted too.
{"title":"Efficient proxies in Smalltalk","authors":"Mariano Martinez Peck, N. Bouraqadi, M. Denker, Stéphane Ducasse, L. Fabresse","doi":"10.1145/2166929.2166937","DOIUrl":"https://doi.org/10.1145/2166929.2166937","url":null,"abstract":"A proxy object is a surrogate or placeholder that controls access to another target object. Proxy objects are a widely used solution for different scenarios such as remote method invocation, future objects, behavioral reflection, object databases, inter-languages communications and bindings, access control, lazy or parallel evaluation, security, among others.\u0000 Most proxy implementations support proxies for regular objects but they are unable to create proxies for classes or methods. Proxies can be complex to install, have a significant overhead, be limited to certain type of classes, etc. Moreover, most proxy implementations are not stratified at all and there is no separation between proxies and handlers.\u0000 In this paper, we present Ghost, a uniform, light-weight and stratified general purpose proxy model and its Smalltalk implementation. Ghost supports proxies for classes or methods. When a proxy takes the place of a class it intercepts both, messages received by the class and lookup of methods for messages received by instances. Similarly, if a proxy takes the place of a method, then the method execution is intercepted too.","PeriodicalId":393791,"journal":{"name":"International Workshop on Smalltalk Technologies","volume":"113 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2011-08-23","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"124326303","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}
M. Dias, Mariano Martinez Peck, Stéphane Ducasse, G. Arévalo
Serializing object graphs is an important activity since objects should be stored and reloaded on different environments. There is a plethora of frameworks to serialize objects based on recursive parsing of the object graphs. However such approaches are often too slow. Most approaches are limited in their provided features. For example, several serializers do not support class shape changes, global references, transient references or hooks to execute something before or after being stored or loaded. Moreover, to be faster, some serializers are not written taking into account the object-oriented paradigm and they are sometimes even implemented in the Virtual Machine hampering code portability. VM-based serializers such as ImageSegment are difficult to understand, maintain, and fix. For the final user, it means a serializer which is difficult to customize, adapt or extend to his own needs. In this paper we present a general purpose object graph serializer based on a pickling format and algorithm. We implement and validate this approach in the Pharo Smalltalk environment. We demonstrate that we can build a really fast serializer without specific VM support, with a clean object-oriented design, and providing most possible required features for a serializer. We show that our approach is faster that traditional serializers and compare favorably with ImageSegment as soon as serialized objects are not in isolation.
{"title":"Clustered serialization with fuel","authors":"M. Dias, Mariano Martinez Peck, Stéphane Ducasse, G. Arévalo","doi":"10.1145/2166929.2166930","DOIUrl":"https://doi.org/10.1145/2166929.2166930","url":null,"abstract":"Serializing object graphs is an important activity since objects should be stored and reloaded on different environments. There is a plethora of frameworks to serialize objects based on recursive parsing of the object graphs. However such approaches are often too slow. Most approaches are limited in their provided features. For example, several serializers do not support class shape changes, global references, transient references or hooks to execute something before or after being stored or loaded. Moreover, to be faster, some serializers are not written taking into account the object-oriented paradigm and they are sometimes even implemented in the Virtual Machine hampering code portability. VM-based serializers such as ImageSegment are difficult to understand, maintain, and fix. For the final user, it means a serializer which is difficult to customize, adapt or extend to his own needs.\u0000 In this paper we present a general purpose object graph serializer based on a pickling format and algorithm. We implement and validate this approach in the Pharo Smalltalk environment. We demonstrate that we can build a really fast serializer without specific VM support, with a clean object-oriented design, and providing most possible required features for a serializer. We show that our approach is faster that traditional serializers and compare favorably with ImageSegment as soon as serialized objects are not in isolation.","PeriodicalId":393791,"journal":{"name":"International Workshop on Smalltalk Technologies","volume":"1 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2011-08-23","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"131285158","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}
Klotz is an agile 3D visualization engine. Visualizations are produced from an arbitrary model described in terms of objects and interconnections. Any arbitrary model may be visualized. Klotz uses a semi-descriptive scripting language to easily and interactively build visualizations. Klotz, on its current version, offers four layouts to easily exploit the third dimension when visualizing data. Klotz is entirely implemented in Pharo. The engine is fully based on the facilities offered by Morphic.
{"title":"Klotz: an agile 3D visualization engine","authors":"Ricardo Jacas, Alexandre Bergel","doi":"10.1145/2166929.2166933","DOIUrl":"https://doi.org/10.1145/2166929.2166933","url":null,"abstract":"Klotz is an agile 3D visualization engine. Visualizations are produced from an arbitrary model described in terms of objects and interconnections. Any arbitrary model may be visualized. Klotz uses a semi-descriptive scripting language to easily and interactively build visualizations.\u0000 Klotz, on its current version, offers four layouts to easily exploit the third dimension when visualizing data. Klotz is entirely implemented in Pharo. The engine is fully based on the facilities offered by Morphic.","PeriodicalId":393791,"journal":{"name":"International Workshop on Smalltalk Technologies","volume":"87 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2011-08-23","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"117300101","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}
J. Ressia, Tudor Gîrba, Oscar Nierstrasz, F. Perin, L. Renggli
Reuse in object-oriented languages typically focuses on inheritance. Numerous techniques have been developed to provide finer-grained reuse of methods, such as flavors, mixins and traits. These techniques, however, only deal with reuse at the level of classes. Class-based reuse is inherently static. Increasing use of reflection and meta-programming techniques in real world applications underline the need for more dynamic approaches. New approaches have shifted to object-specific reuse. However, these techniques fail to provide a complete solution to the composition issues arising during reuse. We propose a new approach that deals with reuse at the object level and that supports behavioral composition. We introduce a new abstraction called a talent which models features that are shared between objects of different class hierarchies. Talents provide a composition mechanism that is as flexible as that of traits but which is dynamic.
{"title":"Talents: dynamically composable units of reuse","authors":"J. Ressia, Tudor Gîrba, Oscar Nierstrasz, F. Perin, L. Renggli","doi":"10.1145/2166929.2166940","DOIUrl":"https://doi.org/10.1145/2166929.2166940","url":null,"abstract":"Reuse in object-oriented languages typically focuses on inheritance. Numerous techniques have been developed to provide finer-grained reuse of methods, such as flavors, mixins and traits. These techniques, however, only deal with reuse at the level of classes.\u0000 Class-based reuse is inherently static. Increasing use of reflection and meta-programming techniques in real world applications underline the need for more dynamic approaches. New approaches have shifted to object-specific reuse. However, these techniques fail to provide a complete solution to the composition issues arising during reuse.\u0000 We propose a new approach that deals with reuse at the object level and that supports behavioral composition. We introduce a new abstraction called a talent which models features that are shared between objects of different class hierarchies. Talents provide a composition mechanism that is as flexible as that of traits but which is dynamic.","PeriodicalId":393791,"journal":{"name":"International Workshop on Smalltalk Technologies","volume":"22 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2011-08-23","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"127031845","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}
Nick Papoulias, N. Bouraqadi, M. Denker, Stéphane Ducasse, L. Fabresse
Mirrors are meta-level entities introduced to decouple reflection from the base-level system. Current mirror-based systems focus on functional decomposition of reflection. In this paper we advocate that mirrors should also address structural decomposition. Mirrors should not only be the entry points of reflective behavior but also be the storage entities of metainformation. This decomposition can help resolve issues in terms of resource constraints (e.g. embedded systems and robotics) or security. Indeed, structural decomposition enables discarding meta-information.
{"title":"Towards structural decomposition of reflection with mirrors","authors":"Nick Papoulias, N. Bouraqadi, M. Denker, Stéphane Ducasse, L. Fabresse","doi":"10.1145/2166929.2166941","DOIUrl":"https://doi.org/10.1145/2166929.2166941","url":null,"abstract":"Mirrors are meta-level entities introduced to decouple reflection from the base-level system. Current mirror-based systems focus on functional decomposition of reflection. In this paper we advocate that mirrors should also address structural decomposition. Mirrors should not only be the entry points of reflective behavior but also be the storage entities of metainformation. This decomposition can help resolve issues in terms of resource constraints (e.g. embedded systems and robotics) or security. Indeed, structural decomposition enables discarding meta-information.","PeriodicalId":393791,"journal":{"name":"International Workshop on Smalltalk Technologies","volume":"10 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2011-08-23","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"125252094","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}
Agile programming aware computer scientists know how much productivity they owe to their development environments, and more precisely to advanced debuggers. Indeed, debuggers are mandatory to support an optimistic do-fix-rerun approach. This development scheme does not make sense in hardware design where agile has a different meaning; it refers to reconfigurable architectures. Despite such architectures support tailoring and refactoring application circuits and promote short development cycles, the overall programing scheme still conforms to waterfall models and component based integration. This paper presents a path to offer probe-based development to hardware designers, and introduces our Red Pill environment that merges several abstraction levels ranging from C like parallel coding to hardware realization embedding debug facility. Red Pill is developed using VisualWorks and reproduces some of Cincom Smalltalk browser well known features that traditionally lack when validating circuits.
{"title":"Smalltalk debug lives in the matrix","authors":"Loïc Lagadec, Damien Picard","doi":"10.1145/1942790.1942792","DOIUrl":"https://doi.org/10.1145/1942790.1942792","url":null,"abstract":"Agile programming aware computer scientists know how much productivity they owe to their development environments, and more precisely to advanced debuggers. Indeed, debuggers are mandatory to support an optimistic do-fix-rerun approach.\u0000 This development scheme does not make sense in hardware design where agile has a different meaning; it refers to reconfigurable architectures. Despite such architectures support tailoring and refactoring application circuits and promote short development cycles, the overall programing scheme still conforms to waterfall models and component based integration.\u0000 This paper presents a path to offer probe-based development to hardware designers, and introduces our Red Pill environment that merges several abstraction levels ranging from C like parallel coding to hardware realization embedding debug facility. Red Pill is developed using VisualWorks and reproduces some of Cincom Smalltalk browser well known features that traditionally lack when validating circuits.","PeriodicalId":393791,"journal":{"name":"International Workshop on Smalltalk Technologies","volume":"2013 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2010-08-13","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"114514203","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}
Network-based provisioning of custom-made and adaptive services offers unlimited opportunities for service development. Examples include ICT-based information, assistance, coordination, and remote monitoring services for senior citizens. Addressing diversity and unpredictable changeability requirements of such service platforms entails novel design solutions. I present Web Pontoon, a method tailored specifically for handling these requirements by a combination of web content management, client-side end-user programming, closed-loop management of object lifecycles, and domain-driven design. Opportunities for massive deployment of relevant applications are being studied.
{"title":"Web Pontoon: a method for reflective web applications","authors":"Reza Razavi","doi":"10.1145/1942790.1942791","DOIUrl":"https://doi.org/10.1145/1942790.1942791","url":null,"abstract":"Network-based provisioning of custom-made and adaptive services offers unlimited opportunities for service development. Examples include ICT-based information, assistance, coordination, and remote monitoring services for senior citizens. Addressing diversity and unpredictable changeability requirements of such service platforms entails novel design solutions. I present Web Pontoon, a method tailored specifically for handling these requirements by a combination of web content management, client-side end-user programming, closed-loop management of object lifecycles, and domain-driven design. Opportunities for massive deployment of relevant applications are being studied.","PeriodicalId":393791,"journal":{"name":"International Workshop on Smalltalk Technologies","volume":"195 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2010-08-13","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"132289804","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}
In conventional software applications, synchronization code is typically interspersed with functional code, thereby impacting understandability and maintainability of the code base. At the same time, the synchronization defined statically in the code is not capable of adapting to different runtime situations. We propose a new approach to synchronization which strictly separates the functional code from the synchronization requirements to be used and which adapts objects to be synchronized dynamically to their environment. First-class synchronization specifications express safety requirements, and a Dynamic Synchronization System dynamically adapts objects to different runtime situations. We present an overview of a prototype of our approach together with several classical concurrency problems, and we discuss open issues for further research.
{"title":"Dynamic synchronization: a synchronization model through behavioral reflection","authors":"J. Ressia, Oscar Nierstrasz","doi":"10.1145/1735935.1735952","DOIUrl":"https://doi.org/10.1145/1735935.1735952","url":null,"abstract":"In conventional software applications, synchronization code is typically interspersed with functional code, thereby impacting understandability and maintainability of the code base. At the same time, the synchronization defined statically in the code is not capable of adapting to different runtime situations. We propose a new approach to synchronization which strictly separates the functional code from the synchronization requirements to be used and which adapts objects to be synchronized dynamically to their environment. First-class synchronization specifications express safety requirements, and a Dynamic Synchronization System dynamically adapts objects to different runtime situations. We present an overview of a prototype of our approach together with several classical concurrency problems, and we discuss open issues for further research.","PeriodicalId":393791,"journal":{"name":"International Workshop on Smalltalk Technologies","volume":"1 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2009-08-31","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"132764457","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}
Verónica Uquillas Gómez, Andy Kellens, K. Gybels, T. D'Hondt
Program querying has become a valuable asset in the programmer's toolbox. Using dedicated querying languages, developers can reason about their source code in order to find errors, refactoring opportunities and so on. Within Smalltalk, the SOUL language has been proposed as one such language that offers a declarative and expressive means to query the source code of object-oriented programs. Ever since its inception, SOUL has been used as the underlying technique for a number of academic software engineering tools. Despite its success, one of the problems of SOUL is that, due to its backward chained implementation, it is less suited as a basis for such pro-active software tools. Using SOUL, a developer has to launch the queries over the system manually, rather than automatically receiving feedback whenever the underlying source code is changed. In this paper we present PARACHUT, an alternative logic query language that is based on forward chaining and temporal logic and that allows developers to express queries over the change history of the system. Furthermore, PARACHUT's data-driven nature makes it possible to provide instant feedback to developers when the source code is changed, thus providing better support for pro-active software tools.
{"title":"Experiments with pro-active declarative meta-programming","authors":"Verónica Uquillas Gómez, Andy Kellens, K. Gybels, T. D'Hondt","doi":"10.1145/1735935.1735947","DOIUrl":"https://doi.org/10.1145/1735935.1735947","url":null,"abstract":"Program querying has become a valuable asset in the programmer's toolbox. Using dedicated querying languages, developers can reason about their source code in order to find errors, refactoring opportunities and so on. Within Smalltalk, the SOUL language has been proposed as one such language that offers a declarative and expressive means to query the source code of object-oriented programs.\u0000 Ever since its inception, SOUL has been used as the underlying technique for a number of academic software engineering tools. Despite its success, one of the problems of SOUL is that, due to its backward chained implementation, it is less suited as a basis for such pro-active software tools. Using SOUL, a developer has to launch the queries over the system manually, rather than automatically receiving feedback whenever the underlying source code is changed. In this paper we present PARACHUT, an alternative logic query language that is based on forward chaining and temporal logic and that allows developers to express queries over the change history of the system. Furthermore, PARACHUT's data-driven nature makes it possible to provide instant feedback to developers when the source code is changed, thus providing better support for pro-active software tools.","PeriodicalId":393791,"journal":{"name":"International Workshop on Smalltalk Technologies","volume":"16 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2009-08-31","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"125438226","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}
J. Fernández, Santiago Robles, Andrés Fortier, Stéphane Ducasse, G. Rossi, S. Gordillo
Web development has moved from simple static pages to complex web applications, some of them resembling desktop ones. In most of these applications the web browser acts as thin-client (or a view) of the model that sits on the server. Despite the technological evolution of the web, there is still no standard mechanism to send data or events from the server to the client without an explicit request from the later, thus forcing the web browser to constantly poll the server for updates. To solve this problem a set of techniques under the name of Comet were proposed, allowing to send information from the server to the web browser without an explicit client request. In this paper we introduce Meteoroid, a Comet approach to make "live" Seaside applications. Our framework exploits the Model-View-Controller (MVC) paradigm for building simple yet scalable web applications, requiring very little programming effort.
{"title":"Meteoroid towards a real MVC for the web","authors":"J. Fernández, Santiago Robles, Andrés Fortier, Stéphane Ducasse, G. Rossi, S. Gordillo","doi":"10.1145/1735935.1735941","DOIUrl":"https://doi.org/10.1145/1735935.1735941","url":null,"abstract":"Web development has moved from simple static pages to complex web applications, some of them resembling desktop ones. In most of these applications the web browser acts as thin-client (or a view) of the model that sits on the server. Despite the technological evolution of the web, there is still no standard mechanism to send data or events from the server to the client without an explicit request from the later, thus forcing the web browser to constantly poll the server for updates. To solve this problem a set of techniques under the name of Comet were proposed, allowing to send information from the server to the web browser without an explicit client request. In this paper we introduce Meteoroid, a Comet approach to make \"live\" Seaside applications. Our framework exploits the Model-View-Controller (MVC) paradigm for building simple yet scalable web applications, requiring very little programming effort.","PeriodicalId":393791,"journal":{"name":"International Workshop on Smalltalk Technologies","volume":"20 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2009-08-31","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"122802864","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}