From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: David Caldwell Newsgroups: gmane.emacs.devel Subject: Re: Raw string literals in Emacs lisp. Date: Sun, 27 Jul 2014 13:58:37 -0700 Message-ID: <53D567FD.4030708@porkrind.org> References: <878ungor1v.fsf@uwakimon.sk.tsukuba.ac.jp> <8761ijng08.fsf@uwakimon.sk.tsukuba.ac.jp> <871tt7lzro.fsf@fencepost.gnu.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha1; boundary="------------ms050801010204060601030704" X-Trace: ger.gmane.org 1406494752 13746 80.91.229.3 (27 Jul 2014 20:59:12 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sun, 27 Jul 2014 20:59:12 +0000 (UTC) To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Sun Jul 27 22:59:07 2014 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1XBVX9-000137-Jv for ged-emacs-devel@m.gmane.org; Sun, 27 Jul 2014 22:59:07 +0200 Original-Received: from localhost ([::1]:36361 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XBVX8-0003Pb-MM for ged-emacs-devel@m.gmane.org; Sun, 27 Jul 2014 16:59:06 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:48390) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XBVX0-0003PM-Ig for emacs-devel@gnu.org; Sun, 27 Jul 2014 16:59:03 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XBVWv-0001JZ-Ep for emacs-devel@gnu.org; Sun, 27 Jul 2014 16:58:58 -0400 Original-Received: from sa38.galvanix.net ([98.126.48.38]:47027 helo=kill.porkrind.org) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XBVWv-0001G7-35 for emacs-devel@gnu.org; Sun, 27 Jul 2014 16:58:53 -0400 Original-Received: from porkrind.org (cpe-76-170-36-134.socal.res.rr.com [76.170.36.134]) by kill.porkrind.org (Postfix) with ESMTPS id 956885F58D for ; Sun, 27 Jul 2014 13:58:39 -0700 (PDT) Authentication-Results: kill.porkrind.org; dkim=pass reason="1536-bit key; unprotected key" header.d=porkrind.org header.i=@porkrind.org header.b=sUWOmaHT; dkim-adsp=pass; dkim-atps=neutral Original-Received: from blacker.porkrind.org (black.local [10.0.0.10]) (authenticated bits=0) by porkrind.org (8.14.4/8.14.4/Debian-7) with ESMTP id s6RKwbTa006164 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Sun, 27 Jul 2014 13:58:38 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=porkrind.org; s=apoptygma; t=1406494718; bh=jXuhWe5ZQlxjKcbhEoZF6ntKufZ5gqWdB2UsAxg20Rw=; h=Date:From:To:Subject:References:In-Reply-To:From; b=sUWOmaHTMuY/06/lMp5J0ZtAQFFJmda8j9mjdwX1hgo/904cX6jDCGN3OyvK3S3aO 4bCXYFDwZkfO7UDQc+/jEeOm/odF/gY/CcKwd2lvzor1TTZqIrAojgxWTkvCjRWXxp Go9bHhLgQlLvQTOog5W2Xbe2cFmVSrxWsoI3066EMlcPSpv7Exmw1/37NltmFtYtSS B0TgQxDK8TFDi3LxkXteE9nRVTt9ybR4sIvFEPoGM/BH9/IXFzcWgrv4NYF User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko/20100101 Thunderbird/31.0 In-Reply-To: <871tt7lzro.fsf@fencepost.gnu.org> X-Enigmail-Version: 1.6 Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAQAAAD9CzEMAAAACXBIWXMAAAsTAAALEwEAmpwY AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+S X8VGAAABiklEQVR42rRYSZIDIQwzLv7/ZXLoEAzeBKG7ag4DRhZeBKQ0Qr5imLWCrKwn0HImc1Mx aAvmmc/cuAT7RMYws6v/gHeb0p4/y5792GJJlLZWOPgsdV5NaRes4Xe4632sLljD7wKv1Ta74H/h MxecN1Rc2TatYcP7zb+6WFfN/zMSHg1Ymuxjrzd+DuLw6Nlekggt1hvr7KK9tRIX85jjM6GTYhfv nzXH3jBdYc4koueBs66M+Xv9O9n5ML4urWssjGeMY3if3bzGSvk30BQ46OOaxJjLCpzPJAzXrOrD z5VFh58TIiwESIiCHNxxwPTy97qDei8YdpVdyYEv6EQcK8n+iTyE/Cn1eoe7HwN+F56oErVSGtJY Q1sR2ehaUHfjvJuv0tL7qAzEbBmfF2IHrVi8zp9N0pZtQZZHOXp/sLW4+hqKvm3iccaPwP3XgnKX n8/YtVeOsnenRG7VCBFlZ5fe3LOyANCVdGAIwDs7tTXGF4hIk15/iAfSgv2UkNFItSszOG3Ha7r0 GQBerhBkHOAzmQAAAABJRU5ErkJggg== X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 98.126.48.38 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:173188 Archived-At: This is a cryptographically signed message in MIME format. --------------ms050801010204060601030704 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On 7/27/14 6:03 AM, David Kastrup wrote: > "Stephen J. Turnbull" writes: > >> Sure, you can do a lot for readability as PCRE or Python regexps have >> done, but regexps are unreadable almost by design, and those regexp >> syntaxes benefit from rawstrings, too. Almost anything (that doesn't >> involve changing the meaning of existing legal programs) that improves= >> readability of regexps is worthwhile. >> >> Rawstrings are cheap and effective. >=20 > When rawstrings are supported, it becomes more expedient to recognize > things like \n and \t, probably also \f in regexps (\b is already > taken). At the current point of time, they just evaluate to n and t. > That makes input of tabs and newlines in raw strings a nuisance and a > potential source of errors. >=20 > It's not actually an issue with rawstrings as such, but rather of their= > use within regexps. Why not, then, skip rawstrings completely and go directly to a regular expression reader: #r// (or even just #//) instead of #r""? Then you can add whatever semantics are needed for good regexp reading (ie, let '\n', '\t', and others get escaped in the string reading, but allow '\(' to go through unescaped). This will be just as easy to implement as raw strings. Languages like Javascript, Perl, Ruby, Bash, and Groovy have shown that having a special support for regexps at a language level is a very effective way of dealing with them. Plus it opens the door to extensions: #r//p for PCRE/Perl syntax[1] or #r//x for more readable regexps[2], etc. I think using rawstrings is too generic an answer to the problem. Given that so much of Emacs's functionality is reliant an regular expressions, it makes sense to design something specifically for them. Doing that means they can be tailored and tweaked for maximum functionality without worrying about possible other usages that people might come up (which will undoubtedly happen with rawstrings). -David [1] And practically every other language on the planet. Really, it seems like only Emacs is left in the dark ages of basic POSIX regexps where '(' means literal paren and not matching. [2] Another Perl feature, it allows whitespace and comments in regexps, for much improved readability. See http://perldoc.perl.org/perlre.html#/x= --------------ms050801010204060601030704 Content-Type: application/pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIMYDCC BiQwggUMoAMCAQICAwkFtDANBgkqhkiG9w0BAQsFADCBjDELMAkGA1UEBhMCSUwxFjAUBgNV BAoTDVN0YXJ0Q29tIEx0ZC4xKzApBgNVBAsTIlNlY3VyZSBEaWdpdGFsIENlcnRpZmljYXRl IFNpZ25pbmcxODA2BgNVBAMTL1N0YXJ0Q29tIENsYXNzIDEgUHJpbWFyeSBJbnRlcm1lZGlh dGUgQ2xpZW50IENBMB4XDTE0MDIxODEwNDcxNFoXDTE1MDIxOTEyNTQzNVowQDEbMBkGA1UE AwwSZGF2aWRAcG9ya3JpbmQub3JnMSEwHwYJKoZIhvcNAQkBFhJkYXZpZEBwb3JrcmluZC5v cmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkzgZ2USy/IIF69iMaP5dgxFrN n/ppK9+HRpKWsesQ71tTX9+CqObNny15tzbNgORggsM5vVB7EdyNOfwhu2ZUn48MVSKnKnIM LmQPJNlYLbSDM33Q+2amNgoWxyvv3lpP44hXDB0Tftwu+0GMagvxKN2kpgVj5PvCai0NAhtR LZO6pspCTocquiYRovB2gDXq5wUFAU02lvlIgNFSV5QhHMHrAssy2qwU3/aoA9ibRpvSTFes LtawCR1zdqOo/wUrYfXT/XdTWYHXpNSFPNSeoPNoU08/jbH/077fdOLXXDN/NMU5dbWXkveS 4qQHWI0Zmgxj2oYfIOrM9SpcbYNTAgMBAAGjggLYMIIC1DAJBgNVHRMEAjAAMAsGA1UdDwQE AwIEsDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwQwHQYDVR0OBBYEFOd0ivfp8yzr VKmctRAtCmk9fMCHMB8GA1UdIwQYMBaAFFNy7ZKc4NrLAVx8fpY1TvLUuFGCMB0GA1UdEQQW MBSBEmRhdmlkQHBvcmtyaW5kLm9yZzCCAUwGA1UdIASCAUMwggE/MIIBOwYLKwYBBAGBtTcB AgMwggEqMC4GCCsGAQUFBwIBFiJodHRwOi8vd3d3LnN0YXJ0c3NsLmNvbS9wb2xpY3kucGRm MIH3BggrBgEFBQcCAjCB6jAnFiBTdGFydENvbSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAD AgEBGoG+VGhpcyBjZXJ0aWZpY2F0ZSB3YXMgaXNzdWVkIGFjY29yZGluZyB0byB0aGUgQ2xh c3MgMSBWYWxpZGF0aW9uIHJlcXVpcmVtZW50cyBvZiB0aGUgU3RhcnRDb20gQ0EgcG9saWN5 LCByZWxpYW5jZSBvbmx5IGZvciB0aGUgaW50ZW5kZWQgcHVycG9zZSBpbiBjb21wbGlhbmNl IG9mIHRoZSByZWx5aW5nIHBhcnR5IG9ibGlnYXRpb25zLjA2BgNVHR8ELzAtMCugKaAnhiVo dHRwOi8vY3JsLnN0YXJ0c3NsLmNvbS9jcnR1MS1jcmwuY3JsMIGOBggrBgEFBQcBAQSBgTB/ MDkGCCsGAQUFBzABhi1odHRwOi8vb2NzcC5zdGFydHNzbC5jb20vc3ViL2NsYXNzMS9jbGll bnQvY2EwQgYIKwYBBQUHMAKGNmh0dHA6Ly9haWEuc3RhcnRzc2wuY29tL2NlcnRzL3N1Yi5j bGFzczEuY2xpZW50LmNhLmNydDAjBgNVHRIEHDAahhhodHRwOi8vd3d3LnN0YXJ0c3NsLmNv bS8wDQYJKoZIhvcNAQELBQADggEBAEM1tq8Ddzl6dr2W4odR1XozlEXfny4oZiHJCeyVSTV3 l6JXYrphOEY2JYB/q7YdnjwKyg+p3TH7DL8uOLXu0nU/5rycJJYHQWp/Kn5ZDaZ8KM/Wdr98 h7UBFNHStZCduI6+u31SekHL35Y9nLkGegwhx5+tQhFzsPGmckK9+lmsjPMjS7TctG0sdSC3 uQVmH5BVBlkciQ9lpC8mS7Cdtvh1TVBTaxQZmou5kYXPWuNfjAP4jQk5k9iJejpB9ZU1tU1X k/W69tWKWoBUjBACmE5nyFiFPlw9I/fNoOGDJDaW6gJGehVfCyFe5wnqDj5Jl+SOHePLxGkx XifN281SdpMwggY0MIIEHKADAgECAgEeMA0GCSqGSIb3DQEBBQUAMH0xCzAJBgNVBAYTAklM MRYwFAYDVQQKEw1TdGFydENvbSBMdGQuMSswKQYDVQQLEyJTZWN1cmUgRGlnaXRhbCBDZXJ0 aWZpY2F0ZSBTaWduaW5nMSkwJwYDVQQDEyBTdGFydENvbSBDZXJ0aWZpY2F0aW9uIEF1dGhv cml0eTAeFw0wNzEwMjQyMTAxNTVaFw0xNzEwMjQyMTAxNTVaMIGMMQswCQYDVQQGEwJJTDEW MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlm aWNhdGUgU2lnbmluZzE4MDYGA1UEAxMvU3RhcnRDb20gQ2xhc3MgMSBQcmltYXJ5IEludGVy bWVkaWF0ZSBDbGllbnQgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDHCYPM zi3YGrEppC4Tq5a+ijKDjKaIQZZVR63UbxIP6uq/I0fhCu+cQhoUfE6ERKKnu8zPf1Jwuk0t svVCk6U9b+0UjM0dLep3ZdE1gblK/1FwYT5Pipsu2yOMluLqwvsuz9/9f1+1PKHG/FaR/wpb fuIqu54qzHDYeqiUfsYzoVflR80DAC7hmJ+SmZnNTWyUGHJbBpA8Q89lGxahNvuryGaC/o2/ ceD2uYDX9U8Eg5DpIpGQdcbQeGarV04WgAUjjXX5r/2dabmtxWMZwhZna//jdiSyrrSMTGKk DiXm6/3/4ebfeZuCYKzN2P8O2F/Xe2AC/Y7zeEsnR7FOp+uXAgMBAAGjggGtMIIBqTAPBgNV HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUU3Ltkpzg2ssBXHx+ljVO 8tS4UYIwHwYDVR0jBBgwFoAUTgvvGqRAW6UXaYcwyjRoQ9BBrvIwZgYIKwYBBQUHAQEEWjBY MCcGCCsGAQUFBzABhhtodHRwOi8vb2NzcC5zdGFydHNzbC5jb20vY2EwLQYIKwYBBQUHMAKG IWh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL3Nmc2NhLmNydDBbBgNVHR8EVDBSMCegJaAjhiFo dHRwOi8vd3d3LnN0YXJ0c3NsLmNvbS9zZnNjYS5jcmwwJ6AloCOGIWh0dHA6Ly9jcmwuc3Rh cnRzc2wuY29tL3Nmc2NhLmNybDCBgAYDVR0gBHkwdzB1BgsrBgEEAYG1NwECATBmMC4GCCsG AQUFBwIBFiJodHRwOi8vd3d3LnN0YXJ0c3NsLmNvbS9wb2xpY3kucGRmMDQGCCsGAQUFBwIB FihodHRwOi8vd3d3LnN0YXJ0c3NsLmNvbS9pbnRlcm1lZGlhdGUucGRmMA0GCSqGSIb3DQEB BQUAA4ICAQAKgwh9eKssBly4Y4xerhy5I3dNoXHYfYa8PlVLL/qtXnkFgdtY1o95CfegFJTw qBBmf8pyTUnFsukDFUI22zF5bVHzuJ+GxhnSqN2sD1qetbYwBYK2iyYA5Pg7Er1A+hKMIzEz cduRkIMmCeUTyMyikfbUFvIBivtvkR8ZFAk22BZy+pJfAoedO61HTz4qSfQoCRcLN5A0t4Dk uVhTMXIzuQ8CnykhExD6x4e6ebIbrjZLb7L+ocR0y4YjCl/Pd4MXU91y0vTipgr/O75CDUHD RHCCKBVmz/Rzkc/b970MEeHt5LC3NiWTgBSvrLEuVzBKM586YoRD9Dy3OHQgWI270g+5MYA8 GfgI/EPT5G7xPbCDz+zjdH89PeR3U4So4lSXur6H6vp+m9TQXPF3a0LwZrp8MQ+Z77U1uL7T elWO5lApsbAonrqASfTpaprFVkL4nyGH+NHST2ZJPWIBk81i6Vw0ny0qZW2Niy/QvVNKbb43 A43ny076khXO7cNbBIRdJ/6qQNq9Bqb5C0Q5nEsFcj75oxQRqlKf6TcvGbjxkJh8BYtv9ePs XklAxtm8J7GCUBthHSQgepbkOexhJ0wP8imUkyiPHQ0GvEnd83129fZjoEhdGwXV27ioRKbj /cIq7JRXun0NbeY+UdMYu9jGfIpDLtUUGSgsg2zMGs5R4jGCA90wggPZAgEBMIGUMIGMMQsw CQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERp Z2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzE4MDYGA1UEAxMvU3RhcnRDb20gQ2xhc3MgMSBQ cmltYXJ5IEludGVybWVkaWF0ZSBDbGllbnQgQ0ECAwkFtDAJBgUrDgMCGgUAoIICHTAYBgkq hkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0xNDA3MjcyMDU4MzdaMCMG CSqGSIb3DQEJBDEWBBRPhp0pFfJ2NcbAbqk9ZMhcdVfd7DBsBgkqhkiG9w0BCQ8xXzBdMAsG CWCGSAFlAwQBKjALBglghkgBZQMEAQIwCgYIKoZIhvcNAwcwDgYIKoZIhvcNAwICAgCAMA0G CCqGSIb3DQMCAgFAMAcGBSsOAwIHMA0GCCqGSIb3DQMCAgEoMIGlBgkrBgEEAYI3EAQxgZcw gZQwgYwxCzAJBgNVBAYTAklMMRYwFAYDVQQKEw1TdGFydENvbSBMdGQuMSswKQYDVQQLEyJT ZWN1cmUgRGlnaXRhbCBDZXJ0aWZpY2F0ZSBTaWduaW5nMTgwNgYDVQQDEy9TdGFydENvbSBD bGFzcyAxIFByaW1hcnkgSW50ZXJtZWRpYXRlIENsaWVudCBDQQIDCQW0MIGnBgsqhkiG9w0B CRACCzGBl6CBlDCBjDELMAkGA1UEBhMCSUwxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4xKzAp BgNVBAsTIlNlY3VyZSBEaWdpdGFsIENlcnRpZmljYXRlIFNpZ25pbmcxODA2BgNVBAMTL1N0 YXJ0Q29tIENsYXNzIDEgUHJpbWFyeSBJbnRlcm1lZGlhdGUgQ2xpZW50IENBAgMJBbQwDQYJ KoZIhvcNAQEBBQAEggEAdKVXoLK+BGn9x+/rDxQa6EmJFub+1XDO5o98NWPK61gLaaoagjis IsyKGKnvER5kmLygBQFSu1wsMQOFdbqhcAkL+fbygiQ2dsRgq6QpTWa4moeIOF2GYoz8HemY Ti09o2tCapc3ws4Q1PmCbi1cpfZg8l1LujyPUYAXg9XIU+8cEKOLgmdrgCxSamBBGgG2abxG ZygCumDcYKDYEKHB8u7SpIyhv4txGOw+G9dJvlKmoF/QJMtSzNe783U4msqU7gOaFtiMIePR xO3Vj9FyfF38DQYFDGvIv3loVF3KSpt9NDBxryZsLLa37IRuHLO5MNjr+CtL/rvOSevdazhx MQAAAAAAAA== --------------ms050801010204060601030704--