Skip to content

Commit b0669a0

Browse files
authored
Merge pull request #89 from perl6/path-to-raku
Path to raku
2 parents a6e246b + 2d7b3f5 commit b0669a0

File tree

2 files changed

+426
-0
lines changed

2 files changed

+426
-0
lines changed

solutions/language/PATH-TO-RAKU.md

Lines changed: 377 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,377 @@
1+
# The Path to Raku
2+
3+
This document describes the steps to be taken to effectuate a rename of
4+
`Perl 6` to `Raku`, as described in issue #81. It does not pretend to be
5+
complete in scope or in time. To change a name of a project that has been
6+
running for 19+ years will take time, a lot of effort and a lot of
7+
cooperation. It will affect people in foreseen and unforeseen ways.
8+
9+
## Language changes
10+
11+
### `.perl`
12+
13+
The `.perl` method should be deprecated in 6.f, and removed in 6.g. It
14+
should be replaced by a `.raku` method, which will be specified in 6.e
15+
(Rakudo can provide for it as soon as implemented). This could be
16+
implemented by a global search/replace of `.perl` to `.raku` (both in
17+
method names and in calls) in `src/core`, `src/Perl6` and `lib`. A new
18+
`Mu.perl` method should be added that will later come to issue a
19+
DEPRECATED message, and then delegate to `.raku`.
20+
21+
To retain compatibility with modules that declare a method `perl`, the
22+
default `raku` method should check if the type in question has a
23+
non-default `perl` method (that is, not the one from `Mu`) and, if so,
24+
call it. Once `.perl` is deprecated, it should issue the deprecation
25+
warning also.
26+
27+
Renaming to `.code` currently clashes with `CallFrame.code`, visually clashes
28+
with the `.codes` method, and it being a generic name, probably also clashes
29+
with modules and other code that exists in the wild.
30+
31+
### `$*PERL` and `Perl`
32+
33+
`$*RAKU` and the `Raku` class will be the replacement of `$*PERL` and the
34+
`Perl` class, which initially will just be aliases. At a language boundary
35+
switch, they will become actual type declarations.
36+
37+
### `PERL6LIB`
38+
39+
A `RAKULIB` environment variable will be introduced into a Rakudo release,
40+
and specified as part of 6.e. If found in the environment, it will be used in
41+
favor of `PERL6LIB`. From 6.f, use of `PERL6LIB` will issue a deprecation
42+
warning.
43+
44+
### `PERL6_HOME`
45+
46+
This was only very recently introduced, and is likely not in wide use yet.
47+
We could consider immediately replacing it with `RAKU_HOME` in an upcoming
48+
Rakudo release, perhaps with a short-term fallback/warning - or error - if
49+
it's missing, but `PERL6_HOME` is found.
50+
51+
### Pragmas
52+
53+
The `use isms <Perl5>` should **NOT** be changed to `use isms <Perl>`.
54+
Similarly `use Foo:from<Perl5>` and the `:lang` parameter to `EVAL` should
55+
not be changed as to allow more flexibility should the Perl 5 community
56+
decide on a name change as well.
57+
58+
### Versioning
59+
60+
Because the next language release (6.e) may not coincide with
61+
the rename, no changes to versioning of the language need to be done. The
62+
next release *will* however be a Raku release, but should be otherwise
63+
completely compatible with previous releases.
64+
65+
A new *language* version would be the opportunity to make the name change
66+
more widely known with associated marketing efforts. But this will *not*
67+
be with the next (monthlyish) release.
68+
69+
Given we are no longer forced to have "6" in the version, there are now
70+
more options to do language versioning properly, and this aspect will
71+
need to be discussed separately at a later time.
72+
73+
### NQP
74+
75+
The acronym for NQP is Not Quite Perl. It stays that way, so no changes
76+
to documentation are needed. Generally, the MoarVM / NQP construct should
77+
not matter a lot for the average user.
78+
79+
## Documentation changes
80+
81+
Wherever `Perl 6` is mentioned in the documentation, this should be changed
82+
to `Raku`. A mention of `Perl 6` in the glossary should remain, and maybe
83+
in the documentation of the `.perl` (to be renamed to `.raku`) method.
84+
85+
A mention to `Perl 6` should only occur when a redirect from `docs.perl6.org`
86+
has been detected / or a special URL to redirect to has been followed (e.g.
87+
https://documentation.raku-lang.org/?from=perl6).
88+
89+
## Website changes
90+
91+
Websites that have `perl6` in their name, should redirect to their
92+
equivalent with a 301 (Moved Permanently). Some way should be devised that
93+
if someone is redirected, that a small explanation of the name change is
94+
offered and that the visitor is indeed at the place they were planning to
95+
be.
96+
97+
## IRC Channels
98+
99+
The IRC channels used by Perl 6 users on freenode (#perl6\*) will need to
100+
be renamed or closed / opened with the new name (#raku\*). New joins should
101+
be forwarded to the new channels.
102+
103+
Colabti.org will need to be asked to log these channels, so that we can have
104+
backlog again. Unfortunately, it appears to be too difficult to migrate #perl6
105+
logs, so the same approach that was done when the #perl6-dev channel was
106+
created, will need to be followed. So searching the logs will need to be
107+
done on the old names.
108+
109+
Further down the road, it would probably be a wise idea to make IRC channel
110+
logging one of the infrastructure tasks.
111+
112+
## External references
113+
114+
Many places on the Internet refer to `Perl 6`. These references will need
115+
to be changed to `Raku`, with a small explanation of the name change. This
116+
should be a coordinated effort to avoid duplicity of work, and to make sure
117+
that the explanation of the name change is consistent.
118+
119+
Many sites, such as Reddit and StackOverflow, use implicit / explicit `perl6`
120+
tags. These will need to be changed or have a `raku` tag added, possibly
121+
with cooperation of the administrators. It should be prevented that "Perl 6"
122+
all of a sudden becomes hard to find on these sites.
123+
124+
Sites such as PerlMonks appear to be really `Perl` (aka `Perl 5`) focused,
125+
and could possible make that clear in their description, or change their
126+
description to specifically include `Raku`. It would look like the
127+
`/r/perl` Reddit description can be changed to indicate that only `Perl 5`
128+
questions are on topic there.
129+
130+
## Technical changes
131+
132+
All technical changes should make sure that all existing scripts continue
133+
to work without change in the foreseeable future. Additional DEPRECATED
134+
messages will be introduced at point of a 6.e language change.
135+
136+
### Executables
137+
138+
As some packagers have already done, the executable should be called `rakudo`,
139+
since `rakudo` is the name of the implementation. `raku` and `perl6` should
140+
be symlinks. If at all technically possible, running a script using the
141+
`perl6` as the executor should provide a DEPRECATED warning at some point.
142+
143+
### Extensions
144+
145+
The extension `.raku` for scripts, `.rakumod` for modules, and `.rakudoc`
146+
for documentation (POD6) to become the defacto standards for files containing
147+
`Raku` code or documentation. The old `.pm`, `.pm6` and `.pod6` extensions
148+
will continue to be supported for 6.e. In 6.f, the `.pm`, `.pm6` and `.pod6`
149+
extensions could be marked as DEPRECATED, causing a message to be generated
150+
when possible.
151+
152+
For testing, the extensions `.rakutest` and `.t` should be used, while the
153+
extension `.t6` will continue to be supported for 6.e, with deprecation
154+
messages appearing from 6.f onward.
155+
156+
Tools and editors should support both `.rakutest` and `.t` extensions. `.t`
157+
extension is shared by other languages, so editors that can interpret
158+
shebangs or have other heuristics should use these means to
159+
disambiguate raku `.t` files from test files written in other
160+
languages. Editors and tools that are raku-oriented (like Comma, zef,
161+
etc.) should assume that `.t` files without a shebang are Raku test
162+
files.
163+
164+
On Windows, installers should add a `.raku` association alongside the `.p6`
165+
association for the time being. Around the time of 6.f, a `.p6` association
166+
could be deselected by default, and perhaps dropped entirely by 6.g.
167+
168+
Here are some examples of filenames with new extensions:
169+
* `Set.rakumod`
170+
* `HyperSeq.rakumod`
171+
* `ThreadPoolScheduler.rakumod`
172+
* `ForClass.rakumod`
173+
* `ForClass.rakudoc`
174+
* `01-basic.rakutest`
175+
176+
Shorter extensions were considered but no good candidates were
177+
found. For example, `.rk*` cannot be used because of their unfortunate
178+
similarity to Racket language file extensions (which uses `.rkt`) and
179+
other direct conflicts with various formats.
180+
181+
There won't be any additional changes to extensions in the near
182+
future. That is, no alternatives (like shorter variants) will be
183+
supported, and the extensions mentioned in this document are final.
184+
185+
### Testing
186+
187+
Roast continues to be the specification of the language. Only the name
188+
of the language it specifies, changes. Internal references to `Perl 6`
189+
will need to be changed.
190+
191+
## Mascot
192+
193+
Camelia will remain the mascot. The only thing that should change there
194+
is that it is the mascot of `Raku` rather than `Perl 6`. The fact that the
195+
wings contain a "P" and a "6" is obscure enough to not be an issue, and could
196+
be seen as a lasting tribute (easter egg) to the origin of "Raku".
197+
198+
## Marketing changes
199+
200+
Renaming `Perl 6` to `Raku` is an event that should be used to get maximum
201+
marketing result. This will need `Raku` marketing materials. Announcement
202+
should be coordinated, e.g. by a blog post on `opensource.com` or similar
203+
outlets, followed up by links on the various social media outlets, such as
204+
Twitter, Facebook, Hacker News, Reddit, etc.
205+
206+
Specific attention should be given for the announcement of Raku in non-latin
207+
script countries (such as India, Japan, China, Taiwan) by making sure any
208+
announcements are also translated into appropriate languages for these regions.
209+
Raku, with its more than excellent Unicode support, should be able to make a
210+
big splash for developers in those regions.
211+
212+
## Social Media
213+
214+
Users who want to blog about `Raku` are suggested to always at least mention
215+
`Raku Programming Language` in their blog post or in the boilerplate of their
216+
blogging engine (exactly that string, for better TIOBE rating). Mentioning of
217+
`Perl 6` in such blog posts should only be done if the blog post is actually
218+
about the renaming process or historical matters.
219+
220+
When using social media that use hash-tags, users are suggested to use the
221+
`#rakulang` hash-tag, and **not** use the `#perl6` hash-tag, unless the
222+
post is actually about the renaming process or historical matters.
223+
224+
Of course, the same applies to more official social media usage by the core
225+
development team.
226+
227+
## Ecosystem changes
228+
229+
From the standpoint of users, there should not be any change: `zef` should
230+
continue to do what it does. The information about what is in the ecosystem,
231+
is not related to the "perl 6" name at the moment, so does not need any
232+
change either.
233+
234+
On PAUSE, Perl 6 distributions are automatically uploaded to a "Perl6"
235+
subdirectory, but this is completely transparent to both the author as well
236+
as anything else that needs to look at that as long as a file `META6.json`
237+
exists in the distribution. So for the foreseeable future, no changes will
238+
be needed there.
239+
240+
Should PAUSE decide to no longer support `Raku` modules in its system, then
241+
alternatives will need to be found and/or implemented.
242+
243+
## Effects on modules in ecosystem
244+
245+
A guide for existing module developers will be provided, which will offer
246+
suggestions of what to do about the rename. If we can generate PRs that's
247+
perhaps also helpful, though we might want that to be opt-in: authors with
248+
a load of modules might be unpleasantly surprised to wake up one morning
249+
to an inbox full of PRs.
250+
251+
Such a guide should help authors with modules that either mention "perl6"
252+
or "p6" in their repo name, or mention "Perl 6" in their documentation.
253+
254+
A proposed draft of such a guide is included at the end of this document.
255+
256+
## Effects on running sub-projects
257+
258+
Projects, such as Comma and Cro do not need any notifications, but other
259+
sub-projects may need to get advance notice. An inventory of these
260+
sub-projects will need to be made, and their maintainers be notified
261+
individually, rather than through social media. This is both to stress
262+
the urgency for a change, and to be able to present a "clean slate" to the
263+
general public when announcements about the name change *are* made through
264+
social media.
265+
266+
## Effects on books
267+
268+
Currently printed copies of books will probably need a sticker like "Covers
269+
the new exciting Raku programming language".
270+
271+
Perl 6 books that have been open sourced, can be adapted by the community or
272+
the original author: a "Migration Guide for Book Authors" should help authors
273+
with this. Since ebook sales currently outperform printed books by an order
274+
of magnitude, preparing another version of an ebook should be a relatively
275+
small effort, which can actually be distributed among many individuals using
276+
modern source control techniques.
277+
278+
## Effects on the Perl community
279+
280+
There is a (small) part of the Perl community that welcome the rename, as they
281+
don't want anything to do with the language and are glad to disassociate it
282+
from the Perl name. There are community members with an active interest in
283+
both Perl 5 and Raku, and some of those who only do one or the other still
284+
feel there is much to be learned from, and shared with, each other, especially
285+
given the many shared design values of the languages.
286+
287+
The name change of `Perl 6` to `Raku` is also intended to have a healing
288+
effect on a community that has been effectively split for many years.
289+
It is the hope of the Raku core development team that future events will
290+
continue to cater for both `Perl` as well as `Raku` presentations.
291+
292+
## Effects on user groups
293+
294+
Each Perl user group (Perl Monger group) will have to decide for themselves
295+
what they want to do with this new situation. More active groups in the
296+
past years, have started using the services of online meeting organizers
297+
such as MeetUp. To indicate the changed situation, it may be a good idea
298+
to change the names of such groups, e.g. from "Foo Perl Mongers Meeting" to
299+
"Foo Perl Family Meetup" or "Foo Perl Community Meetup". Should a user
300+
group decide to only focus on `Perl 5` or `Raku` only, then they are of
301+
course open to not change their name, or to change it to something like
302+
"Foo Raku Meetup". This could coincide with the official announcement,
303+
and maybe special events to celebrate the name change.
304+
305+
## Effects on events
306+
307+
Event organizers are, as always, completely free in the naming of their events.
308+
If an event would like to cater for both `Perl` and `Raku` attendees, then
309+
this should be reflected in the name of the event. An event with just `Raku`
310+
in its name, would appear to cater only for attendees interested in `Raku`.
311+
An event with just `Perl` in its name, would appear to cater for attendees
312+
interested in `Perl 5` only. Suggestions for naming events are (where "Foo"
313+
is a place / country name):
314+
315+
The Foo Perl Community Workshop
316+
The Foo Perl Family Workshop
317+
The Foo Perl and Friends Workshop
318+
The Foo Perl and Raku Conference
319+
The Foo Raku and Friends Workshop
320+
321+
etc. etc.
322+
323+
## Relationship with The Perl Foundation
324+
325+
No changes should be necessary with regards to the relationship with The
326+
Perl Foundation. But this is mostly up to The Perl Foundation. A suggestion
327+
would be to make the website of The Perl Foundation more general: a Perl
328+
Family. With equal attention for Perl, Raku, RPerl and CPerl, and emphasis
329+
on continued development on all projects.
330+
331+
Should The Perl Foundation decide to not want to have anything to do with
332+
`Raku`, only then should an alternate organisational support be discussed.
333+
334+
However, since "Yet Another Society" is doing business as "The Perl
335+
Foundation", maybe it is an idea to create another "doing business as"
336+
called "The Raku Foundation". Which would make it clear that "The Perl
337+
Foundation" is for Perl 5 only, whereas "The Raku Foundation" would be for
338+
Raku only. While both are part of the Perl Mindset in the "Yet Another
339+
Society".
340+
341+
## Draft guide for module developers
342+
343+
The Raku team are grateful to all those who have developed modules for the
344+
language. We recognize that most contributors are doing so on a volunteer
345+
basis, and that this work is often done in one's (lack of) free time.
346+
347+
This guide provides some suggestions on how module authors can handle the
348+
Perl 6 to Raku renaming. While there is a suggested timeline here, it is
349+
to be interpreted as "at your convenience", rather than an expectation to
350+
do these things quickly.
351+
352+
### In the period immediately after the rename is agreed...
353+
354+
You might consider:
355+
356+
* Mentioning Raku in your module's README or other documentation. It's up to
357+
you if you wish to have something like "Raku (formerly Perl 6)", to stay
358+
findable for such searches for some time, or to simply adopt the Raku name
359+
right away.
360+
* Renaming the GitHub repository if it contains `p6` or `perl6` (remember to
361+
update the `sources` entry in `META6.json` if doing this).
362+
363+
In this interest of your module continuing to work with existing Rakudo
364+
installations, please *do not*, at this point:
365+
366+
* Change module file extensions away from `.pm6`
367+
* Rely on `.raku`, `Raku`, `$*RAKU`, and similar
368+
369+
### Around the release of 6.e...
370+
371+
This is expected to happen in 2020. At this point, you might consider:
372+
373+
* Changing module file extensions (remembering to update `META6.json`)
374+
* Switching to use `.raku`, `Raku`, `$*RAKU`, and similar in the module's
375+
code (most modules will not be doing this anyway)
376+
* Dropping remaining mentions of Perl 6 in the documentation, unless it is
377+
there for historical interest

0 commit comments

Comments
 (0)