Rosetta Code:Add a Language: Difference between revisions

→‎Tasks Not Implemented: Changed instructions for creating the Unimplemented page and explicitly linking from the language page.
No edit summary
(→‎Tasks Not Implemented: Changed instructions for creating the Unimplemented page and explicitly linking from the language page.)
 
(13 intermediate revisions by 7 users not shown)
Line 11:
==Basic Information==
 
CafeOBJThese isare athe algebraicbits specificationthat should be done for every language.
It has an executable sub-language which broadly similar to Haskell or ML.
CafeOBJ has many advanced features including: multiple logics, flexible mix-fix syntax, powerful and clear typing system with ordered sorts, parametric modules and views for instantiating the parameters, and module expressions, and more.
Many of these features are inherited from OBJ3 (http://en.wikipedia.org/wiki/OBJ3).
For download and manual see: http://www.ldl.jaist.ac.jp/cafeobj/
 
===Category Page===
<pre>{{stub}}{{CafeOBJ}}</pre>
<small>(CafeOBJ is a algebraic specification language.
 
Once you're sure the language doesn't already have a page on Rosetta Code, you'll need to create a category page for the language. Let's say you're adding a language called Ayrch ('''This is a hypothetical language name; please change it to your actual language name when you actually add your language.''') The first thing you need to do is create the category page. The easiest way is to click on the Search field, type '''Category:Ayrch''', and click Go. It will tell you there is no current page with that name. Click "create this page", and it will give you an empty page to edit.
 
One simple way to start is to make this the entire body of the page:
 
<pre>{{stub}}{{CafeOBJlanguage|Ayrch}}</pre>
 
That will automatically give you a basic language page, and even a nice little stub notification reminding people who visit to fill in more information.
 
===Redirect===
 
The next step is to create a redirect page. This is important, because the ''actual'' page for your Ayrch language is at '''http://rosettacode.org/wiki/Category:Ayrch''', and we want people to be able to go to '''http://rosettacode.org/wiki/Ayrch''', and be able to use syntax like <nowiki>[[Ayrch]]</nowiki> within the wiki to refer to it.
<pre>#REDIRECT [[:Category:CafeOBJ]]</pre>
 
As before, click on the Search field on the left, but this time type '''Ayrch''', and click Go. Again, click "create this page", and it will again give you an empty page to edit.
 
This time, make the entire body of the page:
 
<pre>#REDIRECT [[:Category:CafeOBJAyrch]]</pre>
 
Now, when anyone goes to the Ayrch page, they will be immediately redirected to the category page for Ayrch.
 
===Examples===
<pre>
=={{header|CafeOBJ}}==
 
''You're not done yet!''
<lang CafeOB>
-- Here is a sample sorting program.
mod! SORTING-NAT {
pr(NAT)
[Nat < Strg ]
-- Simple list structure
op nil : -> Strg
op _._ : Strg Strg -> Strg { assoc id: nil }
 
You've created a language category page and have ensured that people who visit the page in the main namespace will reach the right place. You might even have gone back to the category page and filled in a few more details like some history and links to the official sites and resources for the language.
vars N N' : Nat
-- A very short sorting program using transitions in POA logic, which is a type of rewrite logic
ctrans [swap] : (N . N') => (N' . N) if N' <= N .
}
 
What could be missing? ''Code!''
**> Sorting natural numbers using exec command
open SORTING-NAT
exec (3 . 2 . 1) .
**> Sorting natural numbers using search command
**> we can use (show path N) with this command, where N is the nuber of possible states.
red (3 . 2 . 1) =(1,1)=>* (1 . 2 . 3) .
red (3 . 2 . 1) =(1,2)=>* (1 . 2 . 3) .
red (3 . 2 . 1) =(1,3)=>* (1 . 2 . 3) .
**> search for any number of solutions at any depth
red (3 . 2 . 1) =(*,*)=>* (1 . 2 . 3) .
**> print the transitions from initial to goal state
show path 5
eof
</lang>
</pre>
 
You need to provide at least one or two token examples, to give people a taste of the language. Otherwise, there really isn't much of a point for the language to be mentioned on the wiki; Nobody is likely to notice it.
 
If you're pressed for time, browse the [[:Category:Programming Tasks|list of tasks]] and find a couple simple ones you can implement. [[User Output]], [[Loop Structures]] and [[Conditional Structures]] are some common ones that most languages support. For the sake of this demonstration, let's suppose that Ayrch looks a lot like BASIC, and implement [[User Output]].
 
We would need to go to that page, find where the language name would fit (alphabetically), and add this code:
 
<pre>
=={{header|CafeOBJAyrch}}==
<lang ayrch>PRINT "GOODBYE, WORLD!"</lang>
</langpre>
 
That's a very simple example; You might try adding some descriptive information before the <nowiki><lang></nowiki>, such as what compiler it works with, or perhaps some interesting information of how Ayrch does things differently from other languages. Whatever helps to illustrate the language and identify what makes this example interesting.
 
===Tasks Not Implemented===
 
Records and full object style classes.
Finally, you're going to want to create an easy way for other people to discover and add tasks that have not yet been implemented in your language.
 
<!-- In the bottom right of your page, click the link that says, "If you know '''Ayrch''', please write code for some of the ''tasks not implemented in Ayrch''." In the new page that opens, enter the following for the page contents:
-->
 
Use Search Rosetta Code to find Tasks not implemented in Ayrch. The page won't exist but you can create it as suggested in the search results.
Give the page the following content:
<pre>
{{unimpl_Page|Ayrch}}
</pre>
(replace Ayrch with your language name in the search, page name and content).
<br>
Once created, you can add a link to the new page from your language page.
 
==More Advanced==
Line 75 ⟶ 80:
In your user page (not your user talk page), try adding a user box. That generally looks something like this:
 
<pre>{{CafeOBJmylangbegin}}
{{mylang|CafeOBJ|VeryVisual Basic|Active}}
{{mylang|JavaBASIC|ActiveVery Very Rusty}}
{{mylang|HaskellBrainf***|Very AeOBJctiveRusty}}
{{mylang|C++|Very Active}}
{{mylang|Perl|Very Active}}
{{mylang|PHP|Semi-Active}}
{{mylang|UNIX Shell|Very Active}}
{{mylang|C|Semi-Active}}
{{mylang|Java|Rusty}}
{{mylang|JavaScript|Active}}
{{mylang|SQL|Active}}
{{mylang|Visual Basic .NET|Rusty}}
{{mylangend}}</pre>
 
3,022

edits