From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Original-To: poffice@blade.nagaokaut.ac.jp Delivered-To: poffice@blade.nagaokaut.ac.jp Received: from kankan.nagaokaut.ac.jp (kankan.nagaokaut.ac.jp [133.44.2.24]) by blade.nagaokaut.ac.jp (Postfix) with ESMTP id F29DD17D688C for ; Mon, 1 Jun 2015 19:43:34 +0900 (JST) Received: from funfun.nagaokaut.ac.jp (funfun.nagaokaut.ac.jp [133.44.2.201]) by kankan.nagaokaut.ac.jp (Postfix) with ESMTP id 9239AB5D96F for ; Mon, 1 Jun 2015 20:02:38 +0900 (JST) Received: from funfun.nagaokaut.ac.jp (localhost.nagaokaut.ac.jp [127.0.0.1]) by funfun.nagaokaut.ac.jp (Postfix) with ESMTP id E55E597A83A for ; Mon, 1 Jun 2015 20:02:40 +0900 (JST) X-Virus-Scanned: amavisd-new at nagaokaut.ac.jp Authentication-Results: funfun.nagaokaut.ac.jp (amavisd-new); dkim=fail (1024-bit key) reason="fail (message has been altered)" header.d=sendgrid.me Received: from funfun.nagaokaut.ac.jp ([127.0.0.1]) by funfun.nagaokaut.ac.jp (funfun.nagaokaut.ac.jp [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id zG8SLO2I0coZ for ; Mon, 1 Jun 2015 20:02:40 +0900 (JST) Received: from voscc.nagaokaut.ac.jp (voscc.nagaokaut.ac.jp [133.44.1.100]) by funfun.nagaokaut.ac.jp (Postfix) with ESMTP id A951E97A832 for ; Mon, 1 Jun 2015 20:02:40 +0900 (JST) Received: from neon.ruby-lang.org (neon.ruby-lang.org [221.186.184.75]) by voscc.nagaokaut.ac.jp (Postfix) with ESMTP id 0480E95241E for ; Mon, 1 Jun 2015 20:02:37 +0900 (JST) Received: from [221.186.184.76] (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id A80AF120434; Mon, 1 Jun 2015 20:02:36 +0900 (JST) X-Original-To: ruby-core@ruby-lang.org Delivered-To: ruby-core@ruby-lang.org Received: from o2.heroku.sendgrid.net (o2.heroku.sendgrid.net [67.228.50.55]) by neon.ruby-lang.org (Postfix) with ESMTPS id D872B12040C for ; Mon, 1 Jun 2015 20:02:28 +0900 (JST) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sendgrid.me; h=from:to:references:subject:mime-version:content-type:content-transfer-encoding:list-id; s=smtpapi; bh=nKf0wSaJXsWnBgwYI9+QULGKBy4=; b=ZQqq1RADLUbs8PqJmS AMgMREevZ2zaVOu17kG/cvLXlnJPmaDKO5cKnU3QL24PcEwEvsgN7dl2XXRDa9cm qnxQgqO9uehJzeCaS2lNmJ+IhBD+a+HuwdE97+bZT6sh+qsdz1gwRYiqhVCJ/deW lyo/9qUlYCYS3wpD+unL9WOyc= Received: by filter0459p1mdw1.sendgrid.net with SMTP id filter0459p1mdw1.16209.556C3BBF50 2015-06-01 11:02:23.845566364 +0000 UTC Received: from herokuapp.com (ec2-54-161-103-63.compute-1.amazonaws.com [54.161.103.63]) by ismtpd-027 (SG) with ESMTP id 14daec96511.1b07.5f69f8 for ; Mon, 01 Jun 2015 11:02:23 +0000 (UTC) Date: Mon, 01 Jun 2015 11:02:23 +0000 From: nobu@ruby-lang.org To: ruby-core@ruby-lang.org Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Redmine-MailingListIntegration-Message-Ids: 43879 X-Redmine-Project: ruby-trunk X-Redmine-Issue-Id: 11203 X-Redmine-Issue-Author: ko1 X-Redmine-Sender: nobu X-Mailer: Redmine X-Redmine-Host: bugs.ruby-lang.org X-Redmine-Site: Ruby Issue Tracking System X-Auto-Response-Suppress: All Auto-Submitted: auto-generated X-SG-EID: ync6xU2WACa70kv/Ymy4QrNMhiuLXJG8OTL2vJD1yS4MysBR/4No7peN0qrHQ89Dm8ylhqUv8A5+5J jdisiaTBR93IuRfSsfjVpxbzfMWSkf3Y6djX9gedMXJ45SCHMC+OB+C3JoBbV2l++VEZ0EfiO6BXqD lTAdtn/IAAAee6JjRdcFCm/sg++4tS9XHZWP X-ML-Name: ruby-core X-Mail-Count: 69426 Subject: [ruby-core:69426] [Ruby trunk - Bug #11203] Change method entries into VALUE X-BeenThere: ruby-core@ruby-lang.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Ruby developers List-Id: Ruby developers List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: ruby-core-bounces@ruby-lang.org Sender: "ruby-core" Issue #11203 has been updated by Nobuyoshi Nakada. Description updated ---------------------------------------- Bug #11203: Change method entries into VALUE https://bugs.ruby-lang.org/issues/11203#change-52698 * Author: Koichi Sasada * Status: Open * Priority: Normal * Assignee: * ruby -v: * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- Now, `rb_method_entry_t` is an allocated data pointed from method tables (`class/module` has) and from control frame stacks. I will change this data structure to make `VALUE` (`T_IMEMO/ment`). And I put them onto value frames instead of control frame stacks. This change has several advantages. * Solve these issues. * [Bug #11200] Memory leak of method entries * [Bug #11046] `__callee__` returns incorrect method name in orphan proc * Simplify sweeping process of method entry * We can remove `rb_control_frame_t::me` * No need to push CREF for every method invocation. Method entries know required CREF. * We can share per method CREF only for make them public visibility scope. * We can introduce other optimization techniques. * We can remove `rb_control_frame_t::klass` field because method entries can manipulate this information. * We can introduce new method cache mechanism (maybe). The following pictures show how SVAR/CREF/MENT are located at value stacks. ![before-value-stack](1.PNG) ![after-value-stack](2.PNG) The following picture shows how alias was implemented. ![alias-relation](3.PNG) ---Files-------------------------------- 1.PNG (46.6 KB) 2.PNG (43.4 KB) 3.png (31.8 KB) -- https://bugs.ruby-lang.org/