Talk:Language Comparison Table: Difference between revisions

 
(30 intermediate revisions by 14 users not shown)
Line 1:
== Haskell and what makes a standard a standard ==
 
Is Haskell standardized by some standards body, ISO, IEC etc? (Language report certainly does not qualify as a standard. All languages have reports, since Algol 68 times...) --[[User:Dmitry-kazakov|Dmitry-kazakov]] 17:48, 22 July 2008 (UTC)
: No, it isn't, but the Haskell 98 Report '''is''' the standard definition for the language -- all compilers support it, and all compilers have switches to distinguish between Haskell 98 and their own extensions. Like all C compilers support ANSI C. Compare to, say, OCaml, where the current INRIA implementation of the compiler is the standard :-) Or Lisp, or Smalltalk, with their plethora of different implementations. And since it is one of the design goals of Haskell to have the language completely formally specified, I guess one should mention it somewhere.
Line 8 ⟶ 10:
::: If you for some reason want the table to contain just "official" standards, fine with me -- just clearly say so on the page, and make explicit how to find out if a standard is "official" or not. But I think for practical purposes, that would be the wrong approach: What is really interesting for a programming language is if one can rely on some common core constructs supported by virtually all implementations, and where to find the information which these constructs are. At least that's what would interest '''me''' when learning a new language.
::: Or, if you for some reason think that standards with some letters in it are "worth" more and should stand out, why not just use green/yellow/red as background? That should give people like me the information they are looking for, and keep the distinction. --[[User:Dirkt|Dirkt]] 10:31, 23 July 2008 (UTC)
 
::::It seems that you are confusing a practice with the means to enforce, codify, etc it.
::::As for RFC notes, they are edited and published by the Internet Engineering Task Force (IETF). IETF has a defined procedure of discussing and approval the documents they publish, an organizational structure, and last but not least, it declares standardization one of its goals [see [http://tools.ietf.org/html/rfc2418 RFC 2418]]. This makes IETF a standards body, and only '''so''' RFC notes standards. Implied usefulness or acceptance of RFC notes plays here no role whatsoever. --[[User:Dmitry-kazakov|Dmitry-kazakov]] 17:18, 23 July 2008 (UTC)
 
== Passing by reference in C and C++ ==
[[C]] and [[C++]] have only by-value passing mode. See an explanation in [[Parameter Passing]] --[[User:Dmitry-kazakov|Dmitry-kazakov]] 17:03, 25 July 2008 (UTC)
 
Line 63 ⟶ 65:
== Garbage Collection? ==
 
I'm not sure how interesting the stat would be, but how do you guys feel about adding a "Has [[Garbage Collectioncollection]]" column to the table? I don't know how many modern language don't have it. The only languages I can be sure of are Java and C/C++. --[[User:Mwn3d|Mwn3d]] 16:39, 1 February 2009 (UTC)
: Done, also is there a way to add a foot note? C and C++ have optional GC with Boehm GC, but that's not really optional in the language, nor is it optional by implementation (like Ada is)
::I don't think the column for Garbage collection is very interesting. It is just one method for freeing memory. And even if it is used, it is automatic, so the programmer does not need to care about it.
::I notice that BASIC is said to have garbage collection. However, this is only true for some Basic implementations. For example Sinclair Basic, Beta Basic and SAM Basic do not have garbage collection. Instead, the memory is freed to the system immediately, so there is never any garbage to collect. This makes for example array redimensioning somewhat slower than with some other Basic implementations, but then garbage collection is never fired randomly to slow down the operation. --[[User:PauliKL|PauliKL]] 13:15, 16 February 2009 (UTC)
:::The GC column isn't necessarily interesting as in "reading about this is enjoyable." It's more interesting as in "it would be nice to know about this characteristic of this language I'm (thinking about) learning." If I'm looking at a new language, I'd like to know if I need to reach back into my brain to get the C/C++ memory management practices out, or if I can leave them safely tucked away and concentrate on other basic features.
:::I'll fix the BASIC entry. --[[User:Mwn3d|Mwn3d]] 13:54, 18 February 2009 (UTC)
 
== About this page ==
Line 104 ⟶ 111:
 
: There's another difference (between C and C++): in C, "pass-by-reference" needs awareness by the caller, which must obtain the pointer of the object it wants the callee can modify. In C++, pass-by-reference does not need the "help" of the caller, it is a request of the callee, by declaration. --[[User:ShinTakezou|ShinTakezou]] 23:03, 1 February 2009 (UTC)
==Language pages==
It's awesome that we have all this information here, but why is virtually none of it reflected in the relevant languages' pages? I'm going to work on getting the language pages categorized according to their entries in this table. --[[User:Short Circuit|Short Circuit]] 08:18, 15 February 2009 (UTC)
:Speaking of category tree, the "category tree" extension will be getting more and more useful as these categories are created and populated. I think it would be really good to have. --[[User:Mwn3d|Mwn3d]] 15:18, 15 February 2009 (UTC)
 
== Column changing ==
 
How would you guys feel about removing the design goals column and added an execution method column? Design goals should probably be discussed on the category pages anyway. --[[User:Mwn3d|Mwn3d]] 19:34, 30 July 2009 (UTC)
 
== Shorten paradigm links ==
 
Most of the paradigm links are in the form of <nowiki>"[[{blah} programming]]"</nowiki>. Can someone script something up real quick to shorten the display title of the links by changing the wikicode to something like <nowiki>"[[{blah} programming|{blah}]]"</nowiki>? Seems like an easy Perl program, but I don't know Perl. --[[User:Mwn3d|Mwn3d]] 20:27, 9 November 2009 (UTC)
:Done. Here, for completeness, is the regex I used: <code>s/(\[\[((?:\w| |-|')+?) programming)\]\]/$1|$2]]/g</code>. —[[User:Underscore|Underscore]] ([[User talk:Underscore|Talk]]) 23:44, 9 November 2009 (UTC)
::Good job. The table looks a lot cleaner now. Thanks a bunch. --[[User:Mwn3d|Mwn3d]] 00:46, 10 November 2009 (UTC)
 
== Goal Direction / Logical Paridigms ==
 
I've been starting to look at the LCT and some of the parameters and have some questions. Specifically, I was looking at goal directed evaluation in Icon/Unicon which is similar to things that Prolog does. There doesn't seem to be a paradigm for this and I was thinking there should be. How do others feel? [[User:Dgamey|David]] 2010-04-06
: Add it; I don't think there's a standards body for defining paradigms. :) --[[User:Short Circuit|Michael Mol]] 15:49, 7 April 2010 (UTC)
 
== Binding with other site features ==
 
Does anyone have thoughts on ways of binding the LCT with the extended options for [[Template:Language]], and the pages/categories that use [[Template:Feature]]? I'd like the LCT to get greater visibility, but I think it needs to be a bit more integrated. (Nevermind that the ehnancements to Template:Language and the categories that use Template:Feature were inspired by the LCT.) --[[User:Short Circuit|Michael Mol]] 15:54, 7 April 2010 (UTC)
:There were talks of a bot a while ago I think. That would be a sort of dirty way to do it. Something more automatic would probably be preferred, but might require extra web-fu. --[[User:Mwn3d|Mwn3d]] 17:22, 7 April 2010 (UTC)
:: Bots are the normal way to do things in MediaWiki, and, in any case, they stand to be a good first step before integrating code in the server software itself; the kinks and such can still be worked out before the execution environment becomes something ''I'm'' responsible for maintaining. :) --[[User:Short Circuit|Michael Mol]] 17:24, 7 April 2010 (UTC)
 
== Standard BASIC ==
 
The BASIC entry notes that there are ISO and ECMA standards for the language. While this is true, the vast majority of implementations simply ignore the standards; indeed, many compiler writers have chosen instead to "standardize" on some variation of Microsoft BASIC, due to its popularity. Should this be noted somehow in the table itself? -- [[User:Eriksiers|Eriksiers]] 20:04, 10 April 2010 (UTC)
: Create an Encyclopedia page to hold the extended and supporting details and references for that cell? *bemusedly notes that you could directly transclude that page, with &lt;includeonly&gt; and &lt;noinclude&gt; sections.* --[[User:Short Circuit|Michael Mol]] 22:03, 10 April 2010 (UTC)
:: You mean something like "BASIC standards"? Hmm... Lemme think on it, and dig up some links. -- [[User:Eriksiers|Erik Siers]] 21:04, 11 April 2010 (UTC)
::: More generally, [[Encyclopedia:Language/Column]], considering it's probable other cells in the table can and will be able to benefit from the same treatment. But, yeah. --[[User:Short Circuit|Michael Mol]] 21:08, 11 April 2010 (UTC)
 
== Other considerations for language comparision tables ==
 
Here are some considerations that I use in my documentation. It may be useful to include these in the table also:
 
* Compilation Model - Is there a compiler available that converts the programs into
native mode executables? Or can the program be converted to bytecode for use by a bytecode interpreter? Or is [[JIT]] compilation used at runtime, or is the language only utilized by an interpreter?
 
* Input / Output Model - Does the language support the use of C IO Model, or does the language only utilize [[redirection]] operators, or does it use its own IO model (such as REXX).
 
* Named Locations - Does the language support the use of location names, or are line numbers required?
 
* Does the language support [[terminal control]]? If so, to what extent? (I will develop a scale for this)
 
* Does the language support the use of colour terminals?
 
* Does the language support the use of graphics? If so, is this achieved via svgalib, or is an X server required?
 
* Does the language support the use of sound? Is this just a terminal beep, or can the language be used to drive a pc speaker? Is there support in the language for use of a sound card?
 
* Does the language support the use of scoped variables?
 
* Does the language support the use of structures or user defined types?
 
* Does the language have the facility to obtain command line parameters for the program?
 
* Does the language provide a facilty for processing [[environment]] variables?
 
* Does the language provide support for outputting text to a line printer (for example via an LPRINT command)?
 
* Does the language provide support for on error events?
 
* Does the language provide a freefile facility for determining unused data stream or file numbers?
 
* Does the language provide the facility to determine whether or not a key has been pressed (for example an INKEY$ function).
 
* Does the language provide support for multiline if conditional branching?
 
* Does the language provide support for conditional compilation directives?
 
* If the language is interpreted, rather than compiled, can a [[hashbang]] mechanism be used at the top of the program to trigger an appropriate interpreter?
:Several points are related to library functions, not the language itself. Namely all about I/O, sound, graphics, terminal. The shebang mechanism is as OS question: for instance Mac OS 9 had a completely different mechanism to tell which command to use to open a given file (stored as a file property), and Windows uses the PATHEXT environment variable as well as the registry. [[User:Eoraptor|Eoraptor]] ([[User talk:Eoraptor|talk]]) 14:28, 15 August 2020 (UTC)
 
==Perl 6 - Strongly typed==
I am intrigued by the following comment that TimToady added to an edit where Perl6 is changed to be strongly typed:
:''Perl 6 is strongly typed; all apparent polymorphism/conversion is user-controllable''
What does the comment mean w.r.t. an expression like <code>'1' + 1</code>. Would it work? Are there interpreter options and/or program statements that could make it work/not work? Would it work 'by default'? I just have a thought that a fuller answer might be more than say the answers for Java, Haskel or Python. --[[User:Paddy3118|Paddy3118]] 20:47, 13 September 2011 (UTC)
:You left out the most salient bit of the comment, which was "by the definition provided". So my remarks should be taken in the context [http://rosettacode.org/wiki/Type_strength]. Also, if you are extrapolating from the weak semantics of Perl 5, forget that, because Perl 6 has a completely different type system.
:So let's look at <tt>'1' + 1</tt>. The term <tt>'1'</tt> is known to be of type Str, while the <tt>1</tt> is of type Int. These are both types with well-defined, implementation-independent sets of values. (They are not confused into scalar values as they are in Perl 5.) The default string type is a sequence of Unicode graphemes without arbitrary size limit. The default integer type is the set of all integers without arbitrary size limit. So we don't have the problem of undefined types or overflow that the definition points out in C, nor is there any implementation dependency. Conversion of string to number is required to complain about ill-formed numbers. Any conformant implementation of Perl 6 must support these semantics.
:The expression in question does work by default, but not because of any implicit coercion within the actual addition operator, well, operators, really, since they're multi subs, which have signatures that know how to add integers, rationals, floaters, etc. But they don't do implicit coercion; instead, we use "mechanisms resembling weak typing" to define allowable coercions. There is a specific generic signature that allows coercion of strings to numeric, after which the appropriate numeric operator is applied. These signatures are defined in a magical outer lexical scope called the setting, and are ostensibly written in Perl 6, apart from the places where circularity must be broken by use of primitives. (A setting is allowed to cheat as long as everything in the setting ''appears'' to be written in Perl 6.)
:Any or all such overloaded signatures may therefore be shadowed in an inner scope, including the coercive generic signatures. One of the strong design principles of Perl 6 is that every lexical scope know exactly what language it is using, where "exactly" does not preclude genericity, but only accidental genericity. Therefore lexical scoping is how we override anything in the outer language and produce a new language in an inner lexical scope. Since Perl 6 is designed to be completely mutable in this sense, such an inner language can appear to be as weakly typed as you like, but since all of the outer primitives are, in fact, strongly typed, Perl 6 is better characterized as strongly typed.
:But finally, I'd like to point out that the very first thing the definition in question says is that type strength is a "vague term". <tt>:-)</tt> --[[User:TimToady|TimToady]] 23:44, 13 September 2011 (UTC)
::Thanks TimToady for the answer. I'm going to have to read this again to digest it, but then I ''did'' think my comment was probably asking to reveal more than just the tip of the iceberg. (Sometime soon I'm going to have to learn more of Perl6 as it continues to pique my interest). --[[User:Paddy3118|Paddy3118]] 03:13, 14 September 2011 (UTC)
 
== REXX ==
 
Please add entries for
REXX
ooRexx
NetRexx
--[[User:Walterpachl|Walterpachl]] ([[User talk:Walterpachl|talk]]) 04:11, 22 June 2013 (UTC)
 
== Esoteric languages ==
 
I think esoteric languages should be added to this table, possibly in another section. --[[User:12Me21]]
 
: Wouldn't most of the column headings be irrelevant for most esoteric languages.? --[[User:Rdm|Rdm]] ([[User talk:Rdm|talk]]) 23:40, 30 April 2015 (UTC)
1,336

edits