text:
Jakarta Server Pages

Jakarta Server Pages (JSP; formerly JavaServer Pages) is a collection of technologies that helps software developers create dynamically generated web pages based on HTML, XML, SOAP, or other document types. Released in 1999 by Sun Microsystems, JSP is similar to PHP and ASP, but uses the Java programming language.

To deploy and run Jakarta Server Pages, a compatible web server with a servlet container, such as Apache Tomcat or Jetty, is required.

Overview

Architecturally, JSP may be viewed as a high-level abstraction of Jakarta Servlets. JSPs are translated into servlets at runtime, therefore JSP is a Servlet; each JSP servlet is cached and re-used until the original JSP is modified.

Jakarta Server Pages can be used independently or as the view component of a server-side model–view–controller design, normally with JavaBeans as the model and Java servlets (or a framework such as Apache Struts) as the controller. This is a type of Model 2 architecture.

JSP allows Java code and certain predefined actions to be interleaved with static web markup content, such as HTML. The resulting page is compiled and executed on the server to deliver a document. The compiled pages, as well as any dependent Java libraries, contain Java bytecode rather than machine code. Like any other .jar or Java program, code must be executed within a Java virtual machine (JVM) that interacts with the server's host operating system to provide an abstract, platform-neutral environment.

JSPs are usually used to deliver HTML and XML documents, but through the use of OutputStream, they can deliver other types of data as well.

The Web container creates JSP implicit objects like request, response, session, application, config, page, pageContext, out and exception. JSP Engine creates these objects during translation phase.

Directives, scriptlets, and expressions, declaration
JSPs use several delimiters for scripting functions. The most basic is, which encloses a JSP scriptlet. A scriptlet is a fragment of Java code that runs when the user requests the page.

Other common delimiters include  for expressions, where the scriptlet and delimiters are replaced with the result of evaluating the expression, and directives, denoted with.

Java code is not required to be complete or self-contained within a single scriptlet block. It can straddle markup content, provided that the page as a whole is syntactically correct. For example, any Java if/for/while blocks opened in one scriptlet must be correctly closed in a later scriptlet for the page to successfully compile. This allows code to be intermingled and can result in poor programming practices.

Content that falls inside a split block of Java code (spanning multiple scriptlets) is subject to that code. Content inside an if block will only appear in the output when the if condition evaluates to true. Likewise, content inside a loop construct may appear multiple times in the output, depending upon how many times the loop body runs.

Example
The following would be a valid for loop in a JSP page:

The output displayed in the user's web browser would be: Counting to three:

This number is 1.

This number is 2.

This number is 3.

OK.

The useBean Tag
The JSP  tag enables the developer to access and create a Javabean. Although using the  tag looks similar to an HTML tag, all JSP tags for JavaBeans use XML syntax. Therefore the code containing the  tag is case-sensitive.

The  tag contains several attributes. The  attribute declares the name that is used for gaining access to the bean. The  attribute declares the package and class for the bean. The  declares the object responsible for storing the bean. The value for the scope defines the duration for which the bean is available for the rest of the java application to use. The scope can be one of the following four values:

 * The page scope implies that the bean is located in the implicitly defined object, and is only available for the current page. By default, all beans have a scope of page.
 * The request scope implies that the bean can be found in the object. This bean can be accessed by all other JSPs and servlets that have access to the current request object.
 * The session scope implies that the bean can be found in the object. This bean can be accessed by all other JSPs and servlets that have access to the specified HttpSession object.
 * The application scope implies that the bean can be found in the  object. This bean can be accessed by all other JSPs and servlets that have access to the specified ServletContext object.

The getProperty and setProperty Tags
After a bean has been created using the  tag, the   and   tags can be used for getting and setting the properties of the bean. The JSP  is used to get the property of created bean. The JSP  tag is used to set the properties for a bean. For the   and   tags, the name attribute is used to specify the bean's name. So the name attribute must match the id attribute provided by the  tag.

Expression Language
Version 2.0 of the JSP specification added support for the Expression Language (EL), used to access data and functions in Java objects. In JSP 2.1, it was folded into the Unified Expression Language, which is also used in JavaServer Faces.

The JSP Expression Language uses a compact syntax which enables the developer to get attributes and JavaBean properties from a given request object. When using EL, a dollar sign ("$") must be added at the beginning of the code. The dollar symbol is followed by an opening brace ("{"), as well as a closing brace ("}"). The code is then written between the opening and closing braces.

Example
The following is an example of EL syntax:

The value of  in the object   is.

Additional tags
The JSP syntax add additional tags, called JSP actions, to invoke built-in functionality. Additionally, the technology allows for the creation of custom JSP tag libraries that act as extensions to the standard JSP syntax. One such library is the JSTL.

Jakarta Standard Tag Library
Jakarta Standard Tag Library (JSTL) supports common tasks that must be performed in JSPs. Examples includes iteration and conditionals (the equivalent of "for" and "if" statements in Java).

Out of all the libraries in JSTL, the JSTL core library is most commonly used. A taglib directive must be used to specify the URI of the JSTL core library using a prefix. Although there are many different choices for the prefix, the "c" prefix is commonly used for this library.

XML-compliant JSP
JSP pages may also be written in fully valid XML syntax. Such JSP files commonly use the alternative  file extension, which usually causes the application server to validate the XML syntax.

Since the usual JSP syntax  is not valid in XML, a developer must use alternative tags provided by JSP. For example, the common  directive may instead be written as a   tag, and tag libraries are imported using XML namespaces, instead of the usual   tag.

Compiler
A JavaServer Pages compiler is a program that parses JSPs and transforms them into executable Java Servlets. A program of this type is usually embedded into the application server and run automatically the first time a JSP is accessed, but pages may also be precompiled for better performance, or compiled as a part of the build process to test for errors.

Some JSP containers support configuring how often the container checks JSP file timestamps to see whether the page has changed. Typically, this timestamp would be set to a short interval (perhaps seconds) during software development, and a longer interval (perhaps minutes, or even never) for a deployed Web application.

Criticism
According to Joel Murach and Michael Urban, authors of the book "Murach's Java Servlets and JSP", embedding Java code in JSP is generally bad practice. A better approach would be to migrate the back-end logic embedded in the JSP to the Java code in the Servlet. In this scenario, the Servlet is responsible for processing, and the JSP is responsible for displaying the HTML, maintaining a clear separation of concerns.

In 2000, Jason Hunter, author of "Java Servlet Programming" described a number of "problems" with JavaServer Pages. Nevertheless, he wrote that while JSP may not be the "best solution for the Java Platform" it was the "Java solution that is most like the non-Java solution," by which he meant Microsoft's Active Server Pages. Later, he added a note to his site saying that JSP had improved since 2000, but also cited its competitors, Apache Velocity and Tea (template language). Today, several alternatives and a number of JSP-oriented pages in larger web apps are considered to be technical debt.

Servlet containers

 * Apache Tomcat
 * Apache TomEE
 * Jetty (web server)
 * GlassFish
 * Oracle iPlanet Web Server
 * WebSphere Application Server

Java-based template alternatives

 * Adobe ColdFusion
 * Lucee
 * FreeMarker
 * JHTML
 * Thymeleaf

title: Jakarta Server Pages


text:
User talk:Anders Törlind

Cool! Your userpage was created on Wednesday, December 31, 1969. Amazing that you have been part of wikipedia even before there was an internet. (actually, this is a funny bug in the system) Anyway, just wanted to say hi. --maveric149

Heh! Hi, i'm just returning to a certain measure of activity after a couple of months of unhealthy gaming. See ya around :-) --Anders

No such thing as unhealthy gaming. Potentially more healthy than Wikipedia! (Give me vampires, robots, demons over vandals any day :). Just wanted to welcome you back, I like the rainforest and climate articles. A cut above the average new article. Rgamble

Depressingly, that says more about the average quality than the merits of my articles :-/ As for unhealthy gaming well...Nothing ends that as fast as actually having to work, heh. --Anders

Thanks for the addition to Tobacco! One question, though: you mention that "portion snuff" is suitable to be placed under the lip: i.e. dipped. Then you say that "snuff dipping is not practiced in Scandinavia". Isn't this contradictory? --Ben

Just some faulty understanding of the English language... Perhaps mention of what dipping actually is would remedy misunderstandings from non-snuff users of non anglosaxon origin? :-) Ato

Gotcha. There's been more confusion on the subject of "dipping" on the talk page of that article, among other American tobacco consumers as well. Perhaps we should simply eliminate the term "dipping" from the article? --Ben

Anders, I just wrote a huge long comment in here but I misread the talk page and thought it was directed at me. I couldn't tell because there was no date. Sorry about the confusion and I removed my original comment from in here because I was responding to something you didnt say to me so it didnt make sense. Anyway, nice to meet you. --Jpittman 23:27, 22 Sep 2004 (UTC)

Your user page
Hello, I found your user page while doing some wikiarcheology. . I have restored all of its earliest surviving revisions from old copies of the Wikipedia database, so they are available to everyone now. Hope you don't mind. Graham 87 11:07, 23 June 2013 (UTC)

license: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/4.0/

title: User talk:Anders Törlind


text:
Concordia University

Concordia University (Université Concordia) is a public English-language research university located in Montreal, Quebec, Canada. Founded in 1974 following the merger of Loyola College and Sir George Williams University, Concordia is one of the three universities in Quebec where English is the primary language of instruction (the others being McGill and Bishop's). As of the 2022–23 academic year, there were 49,898 students enrolled in credit and non-credit courses at Concordia, making the university among the largest in Canada by enrollment. The university has two campuses, set approximately 7 km apart: Sir George Williams Campus is the main campus, located in the Quartier Concordia neighbourhood of Downtown Montreal in the borough of Ville Marie; and Loyola Campus in the residential district of Notre-Dame-de-Grâce. With four faculties, a school of graduate studies and numerous colleges, centres and institutes, Concordia offers over 400 undergraduate and over 120 graduate programs and courses.

Concordia is a non-sectarian and coeducational institution, with more than 254,000 alumni. The university is a member of the Association of Universities and Colleges of Canada, International Association of Universities, Canadian Association of Research Libraries, Canadian University Society for Intercollegiate Debate, Canadian Bureau for International Education and Canadian University Press. The university's varsity teams, known as the Stingers, compete in the Quebec Student Sport Federation of U Sports.

History
The roots of Concordia University’s founding institutions go back more than 120 years with the establishment of Loyola College in 1896 and Sir George Williams University in 1926.

Loyola College
Loyola College traces its history to an English-language program at the Collège Sainte-Marie de Montréal (today part of the Université du Québec à Montréal) at the Jesuit Sacred Heart Convent. In 1896, Loyola College was established at the corner of Bleury Street and Saint Catherine Street, and it was named in honour of Ignatius of Loyola, founder of the Society of Jesus. On March 10, 1898, the institution was incorporated by the Government of Quebec and became a full-fledged college. The same year, following a fire, the college was relocated further west on Drummond Street, south of Saint Catherine Street. Although founded as a collège classique (the forerunners of Quebec's college system), Loyola began granting university degrees through Université Laval in 1903.

The college moved into the present west-end campus on Sherbrooke Street West in Notre-Dame-de-Grâce in 1916. The School of Sociology opened in 1918. Since Loyola College never became a chartered university, it did not have the ability to grant its own university degrees. In 1920, the institution became affiliated with Université de Montréal, which began granting its degrees instead of Université Laval.

Memorial bronze honour roll plaques in the entrance hall near the administrative offices are dedicated to those from Loyola College who fought in the First World War, Second World War and Korean War.

The inter-war period was marked by the shift of education in the institution, the collège classique education was replaced by humanistic education (Liberal Arts College) in 1940, and Loyola became a four-year institution. Theology and philosophy were taught to all students until 1972.

In 1940, the Faculty of Science and the Department of Engineering were created. In addition to providing the same undergraduate programs as other colleges, the institution also offered innovative fields of study at the time, such as exercise science and communication studies. Students could enrol in academic majors starting in 1953 and honours programs in 1958. Students graduating from Loyola could afterwards pursue graduate-level education in other universities, with a few earning Rhodes Scholarships.

Starting in 1958, Loyola also began offering its first evening courses for students who were not able to go to school full-time. New courses were given in library science and faith community nursing. Since its creation, Loyola College had welcomed almost exclusively young English-speaking Catholic men as students. It became co-ed in 1959 and became less homogeneous with the ever-increasing number of foreign students.

Obtaining a university charter was an important issue in the 1960s. Although many wanted Loyola College to become Loyola University, the Government of Quebec preferred to annex it to Sir George Williams University. Negotiations began in 1968 and ended with the creation of Concordia University on August 24, 1974.

Sir George Williams University
In 1851, the first YMCA in North America was established on Ste. Helene Street in Old Montreal. Beginning in 1873, the YMCA offered evening classes to allow working people in the English-speaking community to pursue their education while working during the day. Sixty years later, the Montreal YMCA relocated to its current location on Stanley Street in Downtown Montreal. In 1926, the education program at the YMCA was reorganized as Sir George Williams College, named after George Williams, founder of the original YMCA in London, England, upon which the Montreal YMCA was based. In 1934, Sir George Williams College offered the first undergraduate credit course in adult education in Canada.

Sir George Williams College received its university charter from the provincial government in 1948, though it remained the education arm of the Montreal YMCA. Sir George Williams expanded into its first standalone building, the Norris Building, in 1956. In 1959, the college requested that the Quebec legislature amend its university charter, changing its name to Sir George Williams University. It established a Centre for Human Relations and Community Studies in 1963. Sir George Williams continued to hold classes in the YMCA building until the construction of the Henry F. Hall Building in 1966.

The university gained international attention in 1969 for what is known as the "Computer Centre Incident." Notably in spring 1968, six black West Indian students at Sir George Williams University accused a biology lecturer (later assistant professor) of racism. The complaint was lodged to the dean of students, Magnus Flynn. Dissatisfied with how the administration was handling their complaint, the students decided to make it a public issue in fall 1968. The students occupied and destroyed the Hall Building's ninth floor computer lab after threatening to do so should the riot squad be called. The events forced the university to re-evaluate its policies, leading to the creation of the Ombuds Office and establishment of the University Regulations on Rights and Responsibilities in April 1971. (See Sir George Williams Affair).

Following several years of discussions and planning, Sir George Williams University merged with Loyola College to create Concordia University in 1974. Concordia provided students with representative student organizations and greater power over administrative decisions at the university.

Merger
In 1968, in the wake of the Parent Commission Report, which recommended the secularization of Quebec's educational system, the Government of Quebec asked Loyola College and Sir George Williams University to consider some form of union. The proposed merger was discussed by the Loyola-Sir George Williams Joint Steering Committee, a committee created to analyze all forms of possible mergers of the two institutions. It was proposed, in 1969, to create a university federation that allowed students to take courses at both campuses without paying additional fees. There was also mention of a shuttle bus service linking the remote facilities 7 km apart.

Criticized for the difficulties encountered by the cohesion of the various departments and faculties, this option was set aside, but not totally rejected by the Joint Steering Committee. The Joint Committee of Representatives of the Board of Trustees of Loyola College and the Board of Governors of Sir George Williams University was formed in December 1971 and in fall 1972 produced a document outlining the basis of a university with two campuses. While the committee considered a number of possible models, including that of a loose federation, the solution finally adopted was that of an integrated institution, Concordia University, operating under the existing charter of Sir George Williams University. Following several revisions in November 1972, the document became the main plan of the proposed merger. It was accepted by both institutions, which began the process of consolidating their operations.

In early 1973, the two institutions announced the merger would take place that fall. However, legal and administrative procedures delayed the merger for another year. On August 24, 1974, the Government of Quebec recognized the merger, thus creating Concordia University. The name was taken from the motto of the city of Montreal, Concordia salus (meaning "well-being through harmony").

"'When you join together two lively institutions, each with its own philosophies and ways of doing things, each firmly dedicated to freedom of thought and speech, you must expect a measure of friction. We look forward now to a new period of creative friction.'"

Post-merger
The legal existence of Concordia dates from August 24, 1974. The integration of the various faculties of the two institutions into a coherent whole took several years. The five faculties of the new university were a combination of existing faculties and departments prior to the merger. There was a Faculty of Commerce, Faculty of Science and Faculty of Arts at Sir George Williams University. Additionally, there was a Faculty of Arts and Science at Loyola College. The Faculty of Engineering of both institutions had previously been combined.

The Faculty of Fine Arts was created in 1976.

The first phase of the combination of the Faculties of Arts and Science began in 1977 and ended in 1985.

In the late 1980s, the Georges P. Vanier Library on the Loyola Campus was enlarged, while in 1992, the library on the Sir George Williams Campus moved to the new J.W. McConnell Building. The Norris Building was closed the same year.

On August 24, 1992, Valery Fabrikant, a mechanical engineering professor, shot five colleagues, killing four, on the ninth floor of the Hall Building. Fabrikant was convicted of the murders and sentenced to life imprisonment. The university erected a memorial to the slain professors (four granite tables) in the Hall Building lobby.

Starting in 1998, the university entered a major phase of expansion to meet its growing student enrolment. In August 2003, Concordia inaugurated the Richard J. Renaud Science Complex on the Loyola Campus.

In 2005, the university launched a major urban redevelopment project in the neighbourhood surrounding the Sir George Williams Campus, known as the Quartier Concordia. That same year, the Engineering, Computer Science and Visual Arts Integrated Complex opened its doors on Saint Catherine Street West between Guy Street and Mackay Street.

In September 2009, the university marked the opening of the new building for the John Molson School of Business.

In September 2015, the university held a ribbon cutting for the District 3 Innovation Center's new space on the sixth floor of Concordia's Faubourg Building.

The university opened its interdisciplinary Applied Science Hub in 2020.

Campuses

The university has two campuses, set approximately 7 km (4 miles) apart: Sir George Williams Campus in the downtown core of Montreal, in an area known as Quartier Concordia (around the Guy–Concordia Metro station), and Loyola Campus in the residential west-end district of Notre-Dame-de-Grâce. They are connected by free shuttle-bus service for students, faculty and staff.

Libraries, archives and galleries
Concordia University has three main library locations. The R. Howard Webster Library is located in the J.W. McConnell Building on the Sir George Williams Campus and the Georges P. Vanier Library is located on the Loyola Campus. On September 2, 2014, the Library opened the Grey Nuns Reading Room, a silent study space for Concordia students located in the former Chapel of the Invention of the Holy Cross. The Concordia Library houses several special and unique collections including the Azrieli Holocaust Collection and the Irving Layton Collection. Most special collections are located in the Vanier Library. The Library also maintains the university's institutional repository, Spectrum. The Library is a member of the Canadian Association of Research Libraries. The Library also has partnerships with the Canadian Research Knowledge Network and the Data Liberation Initiative.

Concordia's Henry F. Hall Building houses the Leonard and Bina Ellen Art Gallery. Samuel Schecter, an art enthusiast and businessman, set up two funds in 1962 to be used for the purchase of Canadian art at Sir George Williams University and at Loyola College (Montreal). When Sir George Williams University and Loyola College merged to form Concordia in 1974, their respective art collections were also combined. The collection of the Leonard and Bina Ellen Gallery consists of 1,800 paintings, sculptures, prints, photographs and videos, many of the works by 20th-century Canadian artists.

Concordia's Engineering, Computer Science and Visual Arts Complex houses the FOFA Gallery, a primary venue for exhibiting works by faculty, students and alumni of the Faculty of Fine Arts.

Concordia's Records Management and Archives stores official records of, or relating to, or people/activities connected with Concordia University and its two founding institutions. The collection consists of manuscripts, texts, photographs, audio-visual material and artifacts.

New buildings
In 2001, Concordia embarked on a mission to develop and expand the quality of the downtown campus, and to revive the west end in Montreal.

The university also acquired the historic Grey Nuns Mother House near its Sir George Williams Campus, for $18 million. Built in 1871, it would alone double the size of the current downtown campus. From 2007 to 2022, the university moved into the building in four separate phases. The large property will house the Faculty of Fine Arts and possibly the Mel Hoppenheim School of Cinema, and other departments. Concordia Residence Life currently houses nearly 250 students each year in the Grey Nuns Building. The dorm rooms are among the largest in the country, as many of the rooms have been transformed from when the section of the Grey Nuns Building was occupied by the Grey Nuns. The site was designated a National Historic Site of Canada in 2011.

The Engineering, Computer Science and Visual Arts Integrated Complex (EV Building) at Saint Catherine Street and Guy Street was opened in September 2005. The building is directly connected to the Guy–Concordia Metro station and also houses Le Gym, a facility of Concordia's Department of Recreation and Athletics. Across the street, the 100-year-old TD Canada Trust building was donated to Concordia in 2005 by the Toronto-Dominion Bank.

Construction of the new John Molson Building (MB), the home of the John Molson School of Business located on the corner of Guy Street and De Maisonneuve Boulevard West, began in February 2007. At a ceremony at Concordia on October 30, 2006, the Quebec Minister of Education, Recreation and Sports, Jean-Marc Fournier, announced an investment of $60 million towards the construction of the new building. The government's $60 million represented about half of the total construction costs. Construction started on January 22, 2006, and the building was completed and opened in September 2009. The 15-story building now houses the John Molson School's about 9,100 full- and part-time students under the same roof for the first time. The departments of contemporary dance, theatre and music also moved into the new MB Building. It is connected to the EV Building by a tunnel under Guy Street.

In April 2010, a 120-metre tunnel completed the underground connections of the Guy-Concordia Metro station with the Henry F. Hall Building and the J.W. McConnell Building.

Concordia opened the Applied Science Hub on the Loyola Campus in December 2020. The $63.1-million state-of-the-art facility — built thanks to $36.7 million in support from the Government of Canada and the Government of Quebec — was strategically designed to enable interdisciplinary collaboration and research between faculty and students in the Faculty of Arts and Science, Gina Cody School of Engineering and Computer Science as well as the District 3 Innovation Centre.

Quartier Concordia
Quartier Concordia is a neighbourhood redevelopment project centred around Concordia University's Sir George Williams Campus in downtown Montreal. Bordered by Sherbrooke Street to the north, Saint Mathieu Street to the west, René Lévesque Boulevard to the south and Bishop Street to the east, the district is designed to be a green urban campus that will improve the use and quality of public places and spaces, student life on campus and transportation.

As part of the redesign, the small Norman Bethune Square was redesigned and enlarged. Sidewalks in the area were also widened, with additional trees.

Since 2010, a tunnel links the university's Henry F. Hall and J.W. McConnell buildings with the Guy-Concordia Metro station. However, a project to create a green space on Mackay Street was put on hold.

Governance
Concordia is led by its president and vice-chancellor (referred to as the president), provost and vice-presidents. The Board of Governors and the Senate manage the university's affairs and academic integrity. The president and the senior leadership ensure transparency and accountability of the administration. The administration is supervised by the Board of Governors and Senate. Under the Charter of Concordia University, the university's highest governing body is the Board of Governors, which has final authority over the affairs of the university. The Senate derives its authority from the Board of Governors.

Academic units
The university has four faculties — Faculty of Arts and Science, Faculty of Fine Arts, Gina Cody School of Engineering and Computer Science and John Molson School of Business — as well as the School of Graduate Studies. The respective faculties supervise the academic departments/institutes. For example, the Faculty of Art and Science oversees the Department of Applied Human Sciences and Simone de Beauvoir Institute.

Finances
In the 2021–22 year, Concordia received $586.5 million in revenue. Fifty-two per cent of the university's revenue comes from grants of the Government of Quebec, which are given based on the student population. As of 2022, the university's foundation has $358.451 million in its endowment. In November 2017, Concordia launched the Campaign for Concordia. The campaign's original target was $250 million, since raised to $350 million. Its goal is to support the university's nine strategic directions that will advance Concordia's position as "Canada's next-generation university." In January 2018, Concordia President Alan Shepard reported that the university had already reached "more than halfway" of its goal. As of 2023, the campaign is still ongoing.

Academics

Students begin their university studies in September or, in some cases, in January or May. An undergraduate degree normally requires three or four years of full-time study, a master's one to three years, and a PhD at least four years. Diplomas and certificates usually take no longer than a year and a half to complete.

Concordia has more than 400 undergraduate programs under the Faculty of Arts and Science, the Gina Cody School of Engineering and Computer Science, the Faculty of Fine Arts and the John Molson School of Business. Students are normally enrolled in one of these faculties but may take courses from any of the others as part of their studies. Class sizes vary from 30 to 400 students.

The School of Graduate Studies offers about 120 programs leading to master's and doctoral degrees, and graduate diplomas and certificates for professionals seeking to upgrade their knowledge and skills.

Concordia Continuing Education offers university-level studies and training to those from diverse backgrounds and stages of life.

The Institute for Co-operative Education administers more than 70 bachelor's and master's programs in an alternating co-op work-study format. Concordia's co-op programs enable students to enrich their learning by participating in career-relevant 12–17-week full-time, paid work terms. Depending on their faculty and major, co-op students will usually graduate with a minimum of 12 months of academically relevant work experience. There are also Industrial Experience and Professional Experience options in certain disciplines that enable students to participate in a summer-only work term. Concordia is a member of the Canadian Association for Co-operative Education (CAFCE).

During the 2022–2023 academic year, there were 35,404 undergraduate students, 10,084 graduate students and 4,410 continuing education students enrolled at Concordia.

Faculty of Arts and Science
Concordia's Faculty of Arts and Science consists of 21 departments and seven colleges, schools and institutes in the humanities, sciences and social sciences at the undergraduate and graduate levels. There are 257 programs, offering more than 2,400 courses. There are 869 full-time and part-time faculty members. During the 2022-23 academic year, there were 18,502 undergraduate and graduate students enrolled in the faculty.

In addition to regular academic programs, the Faculty of Arts and Science also includes three colleges, two schools and two institutes. These are the Liberal Arts College, the Loyola College for Diversity and Sustainability, the School of Community and Public Affairs, the School of Irish Studies, the Science College, the Simone de Beauvoir Institute and the Concordia Institute for Canadian Jewish Studies.

The Loyola College for Diversity and Sustainability (formerly Loyola International College) is an interdisciplinary college on the Loyola Campus, the original site of Loyola College. It offers minor programs in Diversity and the Contemporary World and Sustainability Studies.

At the undergraduate level, the Faculty of Arts and Science offers both Bachelor of Arts (BA) and Bachelor of Science (BSc) programs with majors ranging from economics, political science and sociology to actuarial mathematics, biology and ecology.

Gina Cody School of Engineering and Computer Science
The Gina Cody School of Engineering and Computer Science, formerly known as Faculty of Engineering and Computer Science, is named after Concordia alumna Gina Cody, who donated $15 million to the university in 2018. In response, the university renamed its faculty of engineering and computer science in her honour, making it the first engineering school to be named after a woman in Canada and globally. In 2018, Maclean's ranked its programs as one of the best in Canada. The faculty offers more than 50 undergraduate and graduate-level programs in the following departments: Building, Civil and Environmental Engineering; Centre for Engineering in Society; Computer Science and Software Engineering; Concordia Institute for Information Systems Engineering; Chemical and Materials Engineering; Electrical and Computer Engineering, and Mechanical, Industrial and Aerospace Engineering. The engineering programs are all accredited by the Canadian Engineering Accreditation Board (CEAB). During the 2022-23 academic year, there were 11,848 undergraduate and graduate students enrolled in the faculty.

Troitsky Bridge Building Competition The Troitsky Bridge Building Competition brings together engineering students from across Canada and parts of the United States. Teams of students representing their universities must build a 1-metre-long bridge using only regular popsicle sticks, toothpicks, dental floss, and white glue. A panel of judges grades the bridges based on originality and presentation while a hydraulic loading device is used to determine the maximum load and performance.

Faculty of Fine Arts
The Faculty of Fine Arts offers 26 undergraduate programs and 17 graduate programs. It includes nine departments and four research institutes. During the 2022-23 academic year, there were 3,982 undergraduate and graduate students enrolled in the faculty. Among the departments is The Mel Hoppenheim School of Cinema. It is informally identified as MHSoC, and offers study in the fields of film animation, film production and film studies. It is the largest, university-based centre for the study of film animation, film production and film studies in Canada.

John Molson School of Business
The John Molson School of Business (formerly the Faculty of Commerce and Administration) offers 18 different programs at the undergraduate and graduate levels from five different departments. The departments are Accountancy, Finance, Marketing, Management and Supply Chain and Business Technology Management. During the 2022-23 academic year there were 9,097 undergraduate students and graduate students enrolled, and John Molson School has 61,000 alumni. The John Molson School is accredited by the Association to Advance Collegiate Schools of Business (AACSB). The business school is located in a LEED silver-certified building.

Reputation
Concordia University has placed well in postsecondary school rankings. The 2024 QS World University Rankings ranked the university 387 in the world. In the 2023 Academic Ranking of World Universities rankings, the university ranked 501–600 in the world. The 2024 Times Higher Education World University Rankings placed Concordia 501–600 in the world. In U.S. News & World Report 2022–23 global university rankings, the university placed 653rd in the world. The university was also ranked by Maclean's Canadian university rankings. In October 2023, Maclean's ranked Concordia 9th in Canada under its comprehensive universities category.

The university's John Molson School of Business was ranked among the top 10 Canadian business schools and the top 100 worldwide by The Economist in 2022. Moreover, Concordia was ranked seventh in Canada and 229th among world universities in the International Professional Classification of Higher Education Institutions, a worldwide ranking compiled by the École des Mines de Paris that uses as its sole criterion the number of graduates occupying the rank of chief executive officer at Fortune 500 companies.

Student housing
Four residence buildings are available for students who wish to live on campus: Grey Nuns Residence, Jesuit Residence, Hingston Hall (HA) and Hingston Hall (HB).

For students who choose to live off campus, the Concordia Student Union's Off-Campus Housing and Job Bank (HoJo) offers classified ads, legal advice and safety resources.

Sustainability
Concordia's "sustainability hub" promotes sustainable development. In February 2019, Concordia became the first university in Canada to issue a sustainable bond. According to the university webpage the bond will "generate environmental and social benefits as defined by the United Nations' Sustainable Development Goals". According to Denis Cossette, the university's chief financial officer, "the $25-million senior unsecured bond offers investors a 3.626 per cent yield and has a duration of 20 years." Because of this bond, Concordia would be able to issue sustainable bonds instead of green bonds.

Athletics
Concordia University's athletic teams are called the Concordia Stingers. They compete with other schools in Canadian Interuniversity Sport, and more specifically, in the Quebec Student Sports Federation and the Quebec University Football League. The university has 10 varsity teams. In the fall, teams compete in Canadian football, men's and women's soccer, men's and women's rugby union and sport wrestling. There are female and male wrestlers on the team from year to year, and they compete as one team. In the winter, teams compete in men's and women's ice hockey and men's and women's basketball.

The Concordia Stingers women's ice hockey team won the Canadian national championships in 1998, 1999 and 2022. The Stingers baseball club beat Cape Breton University Capers 12–2 to win the 2009 National Baseball Crown.

Student organizations
The Concordia Student Union (CSU) represents undergraduate students. Its membership totals more than 35,000 students. Concordia students voted in favour of accreditation of their student union in a referendum in December 2000. As a result, the CSU is now legally accountable only to its student constituents.

The Graduate Students' Association (GSA) represents the collective interests and promotes the general welfare of the graduate students of Concordia University. Its membership was more than 10,000 students for the 2022-23 academic year.

Another noteworthy aspect of Concordia University is the number of longstanding fee-levy groups which provide numerous services, funded by the student population in the form of per-credit fees. These include the People's Potato, which offers a four-course vegan meal, the anti-capitalist grocery store The Frigo Vert, and the Coop Bookstore. .

Concordia University is home to local and international fraternities and sororities:
 * ΔΦΕ - Delta Phi Epsilon sorority, represented by the Beta Pi chapter, was established at Concordia in 1994.
 * ΖΤΩ - Zeta Tau Omega sorority was founded in 1968 by six women studying at Montreal.
 * ΜΟΖ - Mu Omicron Zeta fraternity (MOZ) was founded in 1992.
 * The Brotherhood of Omicron is another locally based fraternity at Concordia, formed in 1965.
 * ΤΚΕ - Tau Kappa Epsilon fraternity has its Kappa Chi chapter at Concordia, which was founded in 1967 at Loyola College.
 * ΑΕΠ - Alpha Epsilon Pi (ΑΕΠ) — the largest fraternity in Canada—established its Gamma Lambda chapter at Concordia in 2015.
 * ΣΘΠ - Sigma Thêta Pi fraternity founded its Mu chapter on the Concordia campus in 2015?, but this has since gone dormant.

Student media
Concordia University has a campus radio station, CJLO, and television station, CUTV. Concordia also has three student-run newspapers, The Link, The Concordian and French-language L'Organe. The Concordian and L'Organe are members of Canadian University Press (CUP); The Link left the CUP network in 2012. The university also assists in the publishing of the only student-run, bilingual literary/arts magazine, The Void, founded in 2002, as well as arts magazine Interfold.

Sir George Williams affair
The Sir George Williams affair (also referred to as "The Sir George Williams Computer Centre Incident") was a 1969 event at Sir George Williams University now a part of Concordia University. It was the largest student occupation in Canadian history, and resulted in $2 million of property damage. Among those arrested and convicted were Roosevelt Douglas, who later became Prime Minister of Dominica, and who was a son of one of the richest men in Dominica. Also arrested was Anne Cools, who later became a Canadian Senator. Deeply involved also was student Cheddi "Joey" Jagan Jr., who was of Indo-Guyanese and Ashkenazi Jewish descent, and the son of Cheddi Jagan, an American-educated dentist and former Premier and Chief Minister of British Guiana at the time, and his American wife Janet Jagan who was a nurse.

Strike of 1999
As the 1990s progressed, student activism began growing, coming to a head in 1999 with the election of the first in a series of radical slates to the Concordia Student Union. Under the presidency of Rob Green, a referendum regarding a strike garnered 2,284 votes of support. This was an unusually strong show of support, as student governments at Concordia are often elected on the basis of less than 1,000 votes in their favour. The strike lasted from November 3 to 5 and targeted a range of issues, including student representation in the university senate, corporate presence and advertising on campus, and government. There were several demonstrations, where both protesters and police were reported to be injured.

Anti-Netanyahu riot
On September 9, 2002, a scheduled speech from the former (and later subsequent) Israeli Prime Minister Benjamin Netanyahu was cancelled following violent pro-Palestinian riots inside the Henry F. Hall Building. Protestors raised concerns about Israeli human rights abuses in the Palestinian territories, namely in the West Bank and the Gaza Strip. Netanyahu accused protestors of being supporters of terrorism. The event is depicted in a documentary named Confrontation at Concordia.

Notable alumni and faculty
Concordia's alumni and faculty have achieved fame for their accomplishments in many fields. Distinguished alumni include:
 * Gad Saad, marketing professor, author and speaker
 * Barbara Davidson, Pulitzer Prize and Emmy Award winning photographer and filmmaker
 * Mohan Munasinghe, Vice-chair of the Nobel Peace Prize-winning Intergovernmental Panel on Climate Change
 * Former Governor General of Canada Georges Vanier
 * Presidents and chief executive officers of major businesses Dominic D'Alessandro, Mireille Gingras, Gerald T. McCaughey, and the late L. Jacques Menard
 * Academic Kim Sawchuk
 * Actor, comedian and producer Will Arnett
 * Actors James Tupper, Adam Kelly, Patrick Kwok-Choon, Mylène Dinh-Robic and Annie Murphy
 * Athletes Cammi Granato, Jim Corsi, Garry Kallos, and Andy Borodow
 * Attorney Kathleen Zellner
 * Authors L. Ian MacDonald, E. Annie Proulx, Mordecai Richler and Nino Ricci
 * Cultural anthropologist Theresa H. Arriola
 * Dance artist Lara Kramer
 * Fashion maven Steven Cojocaru
 * Filmmakers Moyra Davey, Jorge Thielen Armand, René Balcer, Peter Lenkov, Alex Rice, Lynne Stopkewich, B. P. Paquette, Donald Tarlton, Steven Woloshen, Louise Archambault, Maziar Bahari, Simone Rapisarda Casanova, and Yung Chang
 * Internet persona and animal rights activist Kadie Karen Diekmeyer
 * Mountaineer and speaker Theodore Fairhurst
 * Musicians Emily Haines, Régine Chassagne, Sarah Neufeld, Michael Laucke, Richard Reed Parry, Amy Millan and Matthew Otto of Majical Cloudz
 * News anchors Dareen Abu Ghaida and Mutsumi Takahashi
 * Painter Pierre Henry
 * Nakuset, an Cree Indigenous activist and survivor of the Sixties Scoop

title: Concordia University


text:
JSP

JSP may refer to:

Computing

 * Jackson structured programming
 * JavaServer Pages, server-side Java
 * Java stored procedure (SQL/JRT)

Organisations

 * The Japanese School in Perth
 * Jewish Settlement Police, an organization established in Mandatory Palestine in 1936
 * JSP Records, a record label

Politics

 * Japan Socialist Party, a political party existed from 1945 to 1996 in Japan
 * Jai Samaikyandhra Party, a political party in India
 * Jana Sena Party, a political party in India

Other uses

 * Japanese Surrendered Personnel
 * Jacketed, soft point, a soft-point bullet
 * Jesup station (Amtrak station code), a train station in Georgia, US
 * Joint Schools Project, a 1960s "New Maths" project for schools in West Africa and later in the British Caribbean
 * Joint Service Publication, a UK MoD document
 * The Joseph Smith Papers, the published volumes of all of Joseph Smith's writings
 * Joseph Smith Papyri, Egyptian papyrus fragments

title: JSP


text:
User:Tommy~enwiki

=How to contact me=

My talk page
User_talk:Tommy

I have my talk page on my watchlist and check it a few times a month or so.

Email
I read my email at least once a day.

A picture of my email address Stock market speculator. Bullish on index funds and Tesla stocks. I use this address to sign messages with:

=My homepage= TBA

title: User:Tommy~enwiki


text:
Comparison of Java and C++

Java and C++ are two prominent object-oriented programming languages. By many language popularity metrics, the two languages have dominated object-oriented and high-performance software development for much of the 21st century, and are often directly compared and contrasted. Java's syntax was based on C/C++.

Design aims
The differences between the programming languages C++ and Java can be traced to their heritage, as they have different design goals.

C++ was designed for systems and applications programming (i.e., infrastructure programming), extending the procedural programming language C, which was designed for efficient execution. To C, C++ added support for object-oriented programming, exception handling, lifetime-based resource management (Resource Acquisition Is Initialization (RAII)), generic programming, template metaprogramming, and the C++ Standard Library which includes generic containers and algorithms (the Standard Template Library or STL), and many other general purpose facilities.

Java is a general-purpose, concurrent, class-based, object-oriented programming language that is designed to minimize implementation dependencies. It relies on a Java virtual machine to be secure and highly portable. It is bundled with an extensive library designed to provide abstraction of the underlying platform. Java is a statically typed object-oriented language that uses a syntax similar to (but incompatible with) C++. It includes a documentation system called Javadoc.

The different goals in the development of C++ and Java resulted in different principles and design trade-offs between the languages. The differences are as follows:

Syntax

 * Java syntax has a context-free grammar that can be parsed by a simple LALR parser. Parsing C++ is more complicated. For example,  is a sequence of comparisons if Foo is a variable, but creates an object if Foo is the name of a class template.
 * C++ allows namespace-level constants, variables, and functions. In Java, such entities must belong to some given type, and therefore must be defined inside a type definition, either a class or an interface.
 * In C++, objects are values, while in Java they are not. C++ uses value semantics by default, while Java always uses reference semantics. To opt for reference semantics in C++, either a pointer or a reference can be used.

 * In C++, it is possible to declare a pointer or reference to a const object in order to prevent client code from modifying it. Functions and methods can also guarantee that they will not modify the object pointed to by a pointer by using the "const" keyword. This enforces const-correctness.
 * In Java, the  keyword is similar to the   keyword in C++, but its usage is more limited. For the most part, const-correctness must rely on the semantics of the class' interface, i.e., it is not strongly enforced, except for public data members that are labeled.

 * C++ supports  statements, which may lead to spaghetti code programming. With the exception of the goto statement (which is very rarely seen in real code and highly discouraged), both Java and C++ have basically the same control flow structures, designed to enforce structured control flow, and relies on break and continue statements to provide some  -like functions. Some commenters point out that these labelled flow control statements break the single point-of-exit property of structured programming.
 * C++ provides low-level features which Java mostly lacks (one notable exception being the  API for direct memory access and manipulation). In C++, pointers can be used to manipulate specific memory locations, a task necessary for writing low-level operating system components. Similarly, many C++ compilers support an inline assembler.  Assembly language code can be imported to a C program and vice versa.  This makes C language even faster. In Java, such code must reside in external libraries, and can only be accessed via the Java Native Interface, with a significant overhead for each call.

Semantics

 * C++ allows default values for arguments of a function/method. Java does not. However, method overloading can be used to obtain similar results in Java but generate redundant stub code.
 * The minimum of code needed to compile for C++ is a function, for Java is a class.
 * C++ allows a range of implicit conversions between native types (including some narrowing conversions), and also allows defining implicit conversions involving user-defined types. In Java, only widening conversions between native types are implicit; other conversions require explicit cast syntax.
 * A result of this is that although loop conditions (,  and the exit condition in  ) in Java and C++ both expect a boolean expression, code such as   will cause a compile error in Java because there is no implicit narrowing conversion from int to boolean, but will compile in C++. This is handy if the code was a typo and   was intended.  However, current C++ compilers will usually generate a warning when such an assignment is performed within a conditional expression. Similarly, standalone comparison statements, e.g.  , without a side effect usually lead to a warning.
 * For passing parameters to functions, C++ supports both pass-by-reference and pass-by-value. In Java, primitive parameters are always passed by value. Class types, interface types, and array types are collectively called reference types in Java and are also always passed by value.
 * Java built-in types are of a specified size and range defined by the language specification. In C++, a minimal range of values is defined for built-in types, but the exact representation (number of bits) can be mapped to whatever native types are preferred on a given platform.
 * For instance, Java characters are 16-bit Unicode characters, and strings are composed of a sequence of such characters. C++ offers both narrow and wide characters, but the actual size of each is platform dependent, as is the character set used. Strings can be formed from either type.
 * This also implies that C++ compilers can automatically select the most efficient representation for the target platform (i.e., 64-bit integers for a 64-bit platform), while the representation is fixed in Java, meaning the values can either be stored in the less-efficient size, or must pad the remaining bits and add code to emulate the reduced-width behavior.
 * The rounding and precision of floating point values and operations in C++ is implementation-defined (although only very exotic or old platforms depart from the IEEE 754 standard). Java provides an optional strict floating-point model (strictfp) that guarantees more consistent results across platforms, though at the cost of possibly slower run-time performance. However, Java does not comply strictly with the IEEE 754 standard. Most C++ compilers will, by default, comply partly with IEEE 754 (usually excluding strict rounding rules and raise exceptions on NaN results), but provide compliance options of varied strictness, to allow for some optimizing. If we label those options from least compliant to most compliant as fast, consistent (Java's strictfp), near-IEEE, and strict-IEEE, we can say that most C++ implementations default to near-IEEE, with options to switch to fast or strict-IEEE, while Java defaults to fast with an option to switch to consistent.
 * In C++, pointers can be manipulated directly as memory address values. Java references are pointers to objects. Java references do not allow direct access to memory addresses or allow memory addresses to be manipulated with pointer arithmetic. In C++ one can construct pointers to pointers, pointers to ints and doubles, and pointers to arbitrary memory locations. Java references only access objects, never primitives, other references, or arbitrary memory locations. In Java, memory can be read and written by arbitrary values using the  API, however it is deprecated and not recommended.
 * In C++, pointers can point to functions or member functions (function pointers). The equivalent mechanism in Java uses object or interface references.
 * Via stack-allocated objects, C++ supports scoped resource management, a technique used to automatically manage memory and other system resources that supports deterministic object destruction. While scoped resource management in C++ cannot be guaranteed (even objects with proper destructors can be allocated using  and left undeleted) it provides an effective means of resource management. Shared resources can be managed using , along with   to break cyclic references. Java supports automatic memory management using garbage collection which can free unreachable objects even in the presence of cyclic references, but other system resources (files, streams, windows, communication ports, threads, etc.) must be explicitly released because garbage collection is not guaranteed to occur immediately after the last object reference is abandoned.
 * C++ features user-defined operator overloading. Operator overloading allows for user-defined types to support operators (arithmetic, comparisons, etc.) like primitive types via user-defined implementations for these operators. It is generally recommended to preserve the semantics of the operators. Java supports no form of operator overloading (although its library uses the addition operator for string concatenation).
 * Java features standard application programming interface (API) support for reflective programming (reflection) and dynamic loading of arbitrary new code.
 * C++ supports static and dynamic linking of binaries.
 * Java has generics, which main purpose is to provide type-safe containers. C++ has compile-time templates, which provide more extensive support for generic programming and metaprogramming. Java has annotations, which allow adding arbitrary custom metadata to classes and metaprogramming via an annotation processing tool.
 * Both Java and C++ distinguish between native types (also termed fundamental or built-in types) and user-defined types (also termed compound types). In Java, native types have value semantics only, and compound types have reference semantics only. In C++ all types have value semantics, but a reference can be created to any type, which will allow the object to be manipulated via reference semantics.
 * C++ supports multiple inheritance of arbitrary classes. In Java a class can derive from only one class, but a class can implement multiple interfaces (in other words, it supports multiple inheritance of types, but only single inheritance of implementation).
 * Java explicitly distinguishes between interfaces and classes. In C++, multiple inheritance and pure virtual functions make it possible to define classes that function almost like Java interfaces do, with a few small differences.
 * Java has both language and standard library support for multi-threading. The  keyword in Java provides mutex locks to support multi-threaded applications. Java also provides libraries for more advanced multi-threading synchronizing. C++11 has a defined memory model for multi-threading in C++, and library support for creating threads and for many synchronizing primitives. There are also many third-party libraries for this.
 * C++ member functions can be declared as virtual functions, which means the method to be called is determined by the run-time type of the object (a.k.a. dynamic dispatching). By default, methods in C++ are not virtual (i.e., opt-in virtual). In Java, methods are virtual by default, but can be made non-virtual by using the  keyword (i.e., opt-out virtual).
 * C++ enumerations are primitive types and support implicit conversion to integer types (but not from integer types). Java enumerations can be  and are used like classes. Another way is to make another class that extends  ) and may therefore define constructors, fields, and methods as any other class. As of C++11, C++ supports strongly-typed enumerations which provide more type-safety and explicit specification of the storage type.
 * Unary operators '++' and '--': in C++ "The operand shall be a modifiable lvalue. [skipped] The result is the updated operand; it is an lvalue...", but in Java "the binary numeric promotion mentioned above may include unboxing conversion and value set conversion. If necessary, value set conversion {and/or [...] boxing conversion} is applied to the sum prior to its being stored in the variable.", i.e. in Java, after the initialization "Integer i=2;", "++i;" changes the reference i by assigning new object, while in C++ the object is still the same.

Resource management
The solution to this is to null out object references. A second common reason for memory leak is the use of cache that has become no longer relevant. The solution to memory leaks due to using old cache is to represent the cache using a.
 * Java offers automatic garbage collection, which may be bypassed in specific circumstances via the Real time Java specification. Memory management in C++ is usually done via constructors, destructors, and smart pointers. The C++ standard permits garbage collection, but does not require it. Garbage collection is rarely used in practice.
 * C++ can allocate arbitrary blocks of memory. Java only allocates memory via object instantiation. Arbitrary memory blocks may be allocated in Java as an array of bytes.
 * Java and C++ use different idioms for resource management. Java relies mainly on garbage collection, which can reclaim memory, while C++ relies mainly on the Resource Acquisition Is Initialization (RAII) idiom. This is reflected in several differences between the two languages:
 * In C++ it is common to allocate objects of compound types as local stack-bound variables which are destroyed when they go out of scope. In Java compound types are always allocated on the heap and collected by the garbage collector (except in virtual machines that use escape analysis to convert heap allocations to stack allocations).
 * C++ has destructors, while Java has finalizers. Both are invoked before an object's deallocation, but they differ significantly. A C++ object's destructor must be invoked implicitly (in the case of stack-bound variables) or explicitly to deallocate an object. The destructor executes synchronously just before the point in a program at which an object is deallocated. Synchronous, coordinated uninitializing and deallocating in C++ thus satisfy the RAII idiom. Destructors in C++ is the normal way of getting back the resources associated with an object, and is a needed counterpart to constructors. In Java, object deallocation is implicitly handled by the garbage collector. A Java object's finalizer is invoked asynchronously some time after it has been accessed for the last time and before it is deallocated. Very few objects need finalizers. A finalizer is needed by only objects that must guarantee some cleanup of the object state before deallocating, typically releasing resources external to the JVM. Direct usages of finalizers are usually not advised, as they are unpredictable, usually dangerous, and most of the time unneeded. One has to be cautious not to think of finalizers as C++ destructors. Rather, the try-with-resources or try-finally block achieves a more similar purpose as the destructor. One problem with finalizers or cleaners is that it is not guaranteed that they will run immediately. Hence, a finalizer should never be used for tasks that are time-critical. Additionally, finalizers come with severe performance penalties and significantly increase the time it takes for objects to be deallocated, so their use is discouraged and deprecated in Java 9.
 * With RAII in C++, one type of resource is typically wrapped inside a small class that allocates the resource upon construction and releases the resource upon destruction, and provide access to the resource in between those points. Any class that contain only such RAII objects do not need to define a destructor since the destructors of the RAII objects are called automatically as an object of this class is destroyed. In Java, safe synchronous deallocation of resources can be performed deterministically using the try/catch/finally construct. Alternatively, the try-with-resources construct, which was introduced in Java 7, should be used in preference to try-finally construct. The try-with-resources construct is more concise and readable. It also provide more helpful diagnostic information, since suppressed exception are not discarded, and will be printed in the stack trace with information saying that they were suppressed.
 * In C++, it is possible to have a dangling pointer, a stale reference to an object that has already been deallocated. Attempting to use a dangling pointer typically results in program failure. In Java, the garbage collector will not destroy a referenced object.
 * In C++, it is possible to have uninitialized primitive objects. Java enforces default initialization.
 * In C++, it is possible to have an allocated object to which there is no valid reference. Such an unreachable object cannot be destroyed (deallocated), and results in a memory leak. In contrast, in Java an object will not be deallocated by the garbage collector until it becomes unreachable (by the user program). (Weak references are supported, which work with the Java garbage collector to allow for different strengths of reachability.) Garbage collection in Java prevents many memory leaks, but leaks are still possible under some circumstances.  The automatic garbage collector may give the false impression that in Java one does not need to think about memory management. However this is not quite true. Loosely speaking, this is because a program can have "memory leaks", more formally known as "unintentional object retentions". An example of a memory leak that may occur is for a program that has been written without any logical errors, except that it did not eliminate obsolete references. This results in higher use of garbage collector activity, higher memory footprint. In extreme circumstances, this problem can lead to an OutOfMemoryError, but this rarely happens.

Libraries

 * C++ provides cross-platform access to many features typically available in platform-specific libraries. Direct access from Java to native operating system and hardware functions requires the use of the Java Native Interface.

Runtime

 * Due to its unconstrained expressiveness, low level C++ language features (e.g. unchecked array access, raw pointers, type punning) cannot be reliably checked at compile-time or without overhead at run-time. Related programming errors can lead to low-level buffer overflows and segmentation faults. The Standard Template Library provides higher-level RAII abstractions (like vector, list and map) to help avoid such errors. In Java, low level errors either cannot occur or are detected by the Java virtual machine (JVM) and reported to the application in the form of an exception.
 * The Java language requires specific behavior in the case of an out-of-bounds array access, which generally requires bounds checking of array accesses. This eliminates a possible source of instability but usually at the cost of slowing execution. In some cases, especially since Java 7, compiler analysis can prove a bounds check unneeded and eliminate it. C++ has no required behavior for out-of-bounds access of native arrays, thus requiring no bounds checking for native arrays. C++ standard library collections like std::vector, however, offer optional bounds checking. In summary, Java arrays are "usually safe; slightly constrained; often have overhead" while C++ native arrays "have optional overhead; are slightly unconstrained; are possibly unsafe."

Templates vs. generics
Both C++ and Java provide facilities for generic programming, templates and generics, respectively. Although they were created to solve similar kinds of problems, and have similar syntax, they are quite different.

 * {| class="wikitable"

! C++ Templates ! Java Generics
 * Classes, functions, aliases and variables can be templated.
 * Classes and methods can be genericized.
 * Parameters can be variadic, of any type, integral value, character literal, or a class template.
 * Parameters can be any reference type, including boxed primitive types (i.e. Integer, Boolean...).
 * Separate instantiations of the class or function will be generated for each parameter-set when compiled. For class templates, only the member functions that are used will be instantiated.
 * One version of the class or function is compiled, works for all type parameters (via type-erasure).
 * Objects of a class template instantiated with different parameters will have different types at run time (i.e., distinct template instantiations are distinct classes).
 * Type parameters are erased when compiled; objects of a class with different type parameters are the same type at run time. It causes a different constructor. Because of this type erasure, it is not possible to overload methods using different instantiations of the generic class.
 * Implementation of the class or function template must be visible within a translation unit in order to use it. This usually implies having the definitions in the header files or included in the header file. As of C++11, it is possible to use extern templates to separate compiling of some instantiations.
 * Signature of the class or function from a compiled class file is sufficient to use it.
 * Templates can be specialized—a separate implementation could be provided for a particular template parameter.
 * Generics cannot be specialized.
 * Template parameters can have default arguments. Pre-C++11, this was allowed only for template classes, not functions.
 * Generic type parameters cannot have default arguments.
 * Wildcards unsupported. Instead, return types are often available as nested typedefs. (Also, C++11 added keyword, which acts as a wildcard for any type that can be determined at compile time.)
 * Wildcards supported as type parameter.
 * Bounding of type parameters and enforcement of relationships between type parameters effectively possible through metaprogramming, or since C++20, directly via  and other concepts
 * Supports bounding of type parameters with "extends" and "super" for upper and lower bounds, respectively; allows enforcement of relationships between type parameters.
 * Allows instantiation of an object with the type of the parameter type.
 * Precludes instantiation of an object with the type of the parameter type (except via reflection).
 * Type parameter of class template can be used for static methods and variables.
 * Type parameter of generic class cannot be used for static methods and variables.
 * Static variables unshared between classes and functions of different type parameters.
 * Static variables shared between instances of classes of different type parameters.
 * Class and function templates do not necessarily enforce type relations for type parameters in their declaration. Use of an incorrect type parameter results in compiling failure, often generating an error message within the template code rather than in the user's code that invokes it. Proper use of templated classes and functions is dependent on proper documentation. Metaprogramming provides these features at the cost of added effort. Since C++20, concepts can be used to provide these features.
 * Generic classes and functions can enforce type relationships for type parameters in their declaration. Use of an incorrect type parameter results in a type error within the code that uses it. Operations on parametrized types in generic code are only allowed in ways that can be guaranteed to be safe by the declaration. This results in greater type safety at the cost of flexibility.
 * Templates are Turing-complete (see template metaprogramming).
 * Generics are also Turing-complete
 * }
 * Precludes instantiation of an object with the type of the parameter type (except via reflection).
 * Type parameter of class template can be used for static methods and variables.
 * Type parameter of generic class cannot be used for static methods and variables.
 * Static variables unshared between classes and functions of different type parameters.
 * Static variables shared between instances of classes of different type parameters.
 * Class and function templates do not necessarily enforce type relations for type parameters in their declaration. Use of an incorrect type parameter results in compiling failure, often generating an error message within the template code rather than in the user's code that invokes it. Proper use of templated classes and functions is dependent on proper documentation. Metaprogramming provides these features at the cost of added effort. Since C++20, concepts can be used to provide these features.
 * Generic classes and functions can enforce type relationships for type parameters in their declaration. Use of an incorrect type parameter results in a type error within the code that uses it. Operations on parametrized types in generic code are only allowed in ways that can be guaranteed to be safe by the declaration. This results in greater type safety at the cost of flexibility.
 * Templates are Turing-complete (see template metaprogramming).
 * Generics are also Turing-complete
 * }
 * Templates are Turing-complete (see template metaprogramming).
 * Generics are also Turing-complete
 * }
 * }

Miscellaneous

 * Java and C++ use different means to divide code into multiple source files. Java uses a package system that dictates the file name and path for all program definitions. Its compiler imports the executable class files. C++ uses a header file source code inclusion system to share declarations between source files.
 * Compiled Java code files are generally smaller than code files in C++ as Java bytecode is usually more compact than native machine code and Java programs are never statically linked.
 * C++ compiling features an added textual preprocessing phase, while Java does not. Thus some users add a preprocessing phase to their build process for better support of conditional compiling.
 * Java's division and modulus operators are well defined to truncate to zero. C++ (pre-C++11) does not specify whether or not these operators truncate to zero or "truncate to -infinity". -3/2 will always be -1 in Java and C++11, but a C++03 compiler may return either -1 or -2, depending on the platform. C99 defines division in the same fashion as Java and C++11. Both languages guarantee (where a and b are integer types) that  for all a and b (b != 0). The C++03 version will sometimes be faster, as it is allowed to pick whichever truncation mode is native to the processor.
 * The sizes of integer types are defined in Java (int is 32-bit, long is 64-bit), while in C++ the size of integers and pointers is compiler and application binary interface (ABI) dependent within given constraints. Thus a Java program will have consistent behavior across platforms, whereas a C++ program may require adapting for some platforms, but may run faster with more natural integer sizes for the local platform.

An example comparing C++ and Java exists in Wikibooks.

Performance
In addition to running a compiled Java program, computers running Java applications generally must also run the Java virtual machine (JVM), while compiled C++ programs can be run without external applications. Early versions of Java were significantly outperformed by statically compiled languages such as C++. This is because the program statements of these two closely related languages may compile to a few machine instructions with C++, while compiling into several byte codes involving several machine instructions each when interpreted by a JVM. For example:

Since performance optimization is a very complex issue, it is very difficult to quantify the performance difference between C++ and Java in general terms, and most benchmarks are unreliable and biased. Given the very different natures of the languages, definitive qualitative differences are also difficult to draw. In a nutshell, there are inherent inefficiencies and hard limits on optimizing in Java, given that it heavily relies on flexible high-level abstractions, however, the use of a powerful JIT compiler (as in modern JVM implementations) can mitigate some issues. In any case, if the inefficiencies of Java are too great, compiled C or C++ code can be called from Java via the JNI.

Some inefficiencies that are inherent to the Java language include, mainly:

 * All objects are allocated on the heap. Though allocation is extremely fast in modern JVMs using 'bump allocation', which performs similarly to stack allocation, performance can still be negatively impacted due to the invocation of the garbage collector. Modern JIT compilers mitigate this problem to some extent with escape analysis or escape detection to allocate some objects on the stack, since Oracle JDK 6.
 * Performance-critical projects like efficient database systems and messaging libraries have had to use internal unofficial APIs like  to gain access to manual resource management and be able to do stack allocation; effectively manipulating pseudo-pointers.
 * A lot of run-time casting required even using standard containers induces a performance penalty. However, most of these casts are statically eliminated by the JIT compiler.
 * Safety guarantees come at a run-time cost. For example, the compiler is required to put appropriate range checks in the code. Guarding each array access with a range check is not efficient, so most JIT compilers will try to eliminate them statically or by moving them out of inner loops (although most native compilers for C++ will do the same when range-checks are optionally used).
 * Lack of access to low-level details prevents the developer from improving the program where the compiler is unable to do so.
 * The mandatory use of reference-semantics for all user-defined types in Java can introduce large amounts of superfluous memory indirections (or jumps) (unless elided by the JIT compiler) which can lead to frequent cache misses (a.k.a. cache thrashing). Furthermore, cache-optimization, usually via cache-aware or cache-oblivious data structures and algorithms, can often lead to orders of magnitude improvements in performance as well as avoiding time-complexity degeneracy that is characteristic of many cache-pessimizing algorithms, and is therefore one of the most important forms of optimization; reference-semantics, as mandated in Java, makes such optimizations impossible to realize in practice (by neither the programmer nor the JIT compiler).
 * Garbage collection, as this form of automatic memory management introduces memory overhead.

However, there are a number of benefits to Java's design, some realized, some only theorized:

 * Java garbage collection may have better cache coherence than the usual use of malloc/new for memory allocation. Nevertheless, arguments exist that both allocators equally fragment the heap and neither exhibits better cache locality. However, in C++, allocation of single objects on the heap is rare, and large quantities of single objects are usually allocated in blocks via an STL container and/or with a small object allocator.
 * Run-time compiling can potentially use information about the platform on which the code is being executed to improve code more effectively. However, most state-of-the-art native (C, C++, etc.) compilers generate multiple code paths to employ the full computational abilities of the given system. Also, the inverse argument can be made that native compilers can better exploit architecture-specific optimizing and instruction sets than multi-platform JVM distributions.
 * Run-time compiling allows for more aggressive virtual function inlining than is possible for a static compiler, because the JIT compiler has more information about all possible targets of virtual calls, even if they are in different dynamically loaded modules. Currently available JVM implementations have no problem in inlining most of the monomorphic, mostly monomorphic and dimorphic calls, and research is in progress to inline also megamorphic calls, thanks to the recent invoke dynamic enhancements added in Java 7. Inlining can allow for further optimisations like loop vectorisation or loop unrolling, resulting in a huge overall performance increase.
 * In Java, thread synchronizing is built into the language, so the JIT compiler can potentially, via escape analysis, elide locks, significantly improve the performance of naive multi-threaded code.

Also, some performance problems occur in C++:

 * Allowing pointers to point to any address can make optimizing difficult due to the possibility of pointer aliasing.
 * Since the code generated from various instantiations of the same class template in C++ is not shared (as with type-erased generics in Java), excessive use of templates may lead to significant increase of the executable code size (code bloat). However, because function templates are aggressively inlined, they can sometimes reduce code size, but more importantly allow for more aggressive static analysis and code optimizing by the compiler, more often making them more efficient than non-templated code. In contrast, Java generics are necessarily less efficient than non-genericized code.
 * Because in a traditional C++ compiler, dynamic linking is performed after code generating and optimizing in C++, function calls spanning different dynamic modules cannot be inlined. However modern C++ compilers like MSVC and Clang+LLVM offer link-time-code-generation options that allow modules to be compiled to intermediate formats which allows inlining at the final link stage.

Language specification
The C++ language is defined by ISO/IEC 14882, an ISO standard, which is published by the ISO/IEC JTC1/SC22/WG21 committee. The latest, post-standardization draft of C++17 is available as well.

The C++ language evolves via an open steering committee called the C++ Standards Committee. The committee is composed of the creator of C++ Bjarne Stroustrup, the convener Herb Sutter, and other prominent figures, including many representatives of industries and user-groups (i.e., the stake-holders). Being an open committee, anyone is free to join, participate, and contribute proposals for upcoming releases of the standard and technical specifications. The committee now aims to release a new standard every few years, although in the past strict review processes and discussions have meant longer delays between publication of new standards (1998, 2003, and 2011).

The Java language is defined by the Java Language Specification, a book which is published by Oracle.

The Java language continuously evolves via a process called the Java Community Process, and the world's programming community is represented by a group of people and organizations - the Java Community members —which is actively engaged into the enhancement of the language, by sending public requests - the Java Specification Requests - which must pass formal and public reviews before they get integrated into the language.

The lack of a firm standard for Java and the somewhat more volatile nature of its specifications have been a constant source of criticism by stake-holders wanting more stability and conservatism in the addition of new language and library features. In contrast, the C++ committee also receives constant criticism, for the opposite reason, i.e., being too strict and conservative, and taking too long to release new versions.

Trademarks
"C++" is not a trademark of any company or organization and is not owned by any individual. "Java" is a trademark of Oracle Corporation.

title: Comparison of Java and C++


text:
Talk:HTTP

Correction: Message Format
I've found out that the sentence The client and server communicate by sending plain-text (ASCII) messages is not right as it should be. Only the header is in plain text (ASCII), but not the body. The body must keep its own coding. In the case of binary files it's the binary coding we have to keep. Please correct the sentence stated above to fit therules in everyday webserver programming. — Preceding unsigned comment added by 2003:59:c33:ed00:a844:fb11:223c:a4b (talk) 12:42, 11 October 2017 (UTC)

Requested move 9 February 2023

 * The following is a closed discussion of a requested move. Please do not modify it. Subsequent comments should be made in a new section on the talk page. Editors desiring to contest the closing decision should consider a move review after discussing it on the closer's talk page. No further edits should be made to this discussion.

The result of the move request was: moved per request. Favonian (talk) 06:40, 16 February 2023 (UTC)

Hypertext Transfer Protocol → HTTP – The acronym, HTTP, as far more common than the full name, and should be the title per MOS:ACROTITLE. Related articles like HTML, XML, PHP, CSS, API (the list is too big to name them all) use acronyms. Even HTTPS uses an acronym, so it's weird that HTTP doesn't. Zerbu  💬 01:44, 9 February 2023 (UTC)

 * Support. NasssaNsertalk 02:00, 9 February 2023 (UTC)
 * Support. netjeff (talk) 04:36, 9 February 2023 (UTC)

The discussion above is closed. Please do not modify it. Subsequent comments should be made on the appropriate discussion page. No further edits should be made to this discussion.
 * Oppose per previous RM 162 etc. (talk) 06:00, 9 February 2023 (UTC)
 * Support move. Although it's hard to judge the common name in a case like this, "HTTP" is so well known that it's almost certainly common.  O.N.R.  (talk) 12:13, 9 February 2023 (UTC)

title: Talk:HTTP


text:
Pine (email client)

Pine is a freeware, text-based email client which was developed at the University of Washington. The first version was written in 1989, and announced to the public in March 1992. Source code was available for only the Unix version under a license written by the University of Washington. Pine is no longer under development, and has been replaced by the Alpine client, which is available under the Apache License.

Supported platforms
There are Unix, Windows, and Linux versions of Pine. The Unix/Linux version is text user interface based—its message editor inspired the text editor Pico. The Windows (and formerly DOS) version is called PC-Pine. WebPine was available to individuals associated with the University of Washington (students, faculty, etc.)—a version of Pine implemented as a web application.

Etymology
Many people believe that Pine stands for "Pine Is Not Elm". One of its original authors, Laurence Lundblade, insists this was never the case and that it started off simply as a word and not an acronym, and that his first choice of a backronym for pine would be "Pine Is Nearly Elm". Over time, it was changed by the university to mean Program for Internet News and E-mail. The original announcement said: "Pine was originally based on Elm, but it has evolved much since, ('Pine Is No-longer Elm')."

Licensing and clones
Up to version 3.91, the Pine license was similar to BSD, and it stated that

 * Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee to the University of Washington is hereby granted …

The university registered a trademark for the Pine name with respect to "computer programs used in communication and electronic mail applications" in March 1995.

From version 3.92, the holder of the copyright, the University of Washington, changed the license so that even if the source code was still available, they did not allow modifications and changes to Pine to be distributed by anyone other than themselves. They also claimed that even the old license never allowed distribution of modified versions.

The trademark for the Pine name was part of their position in this matter.

In reaction, some developers forked version 3.91 under the name MANA (for Mail And News Agent) to avoid the trademark issue and the GNU Project adopted it as GNU Mana. Richard Stallman claims that the University of Washington threatened to sue the Free Software Foundation for distributing the modified Pine program, resulting in the development of MANA ceasing and no versions being released.

The Pico clone GNU nano was also written due to the change in licensing terms of Pine and Pico, as explained by nano's author in a blog post criticizing the license in 2001.

The University of Washington later modified their license somewhat to allow unmodified distribution of Pine alongside collections of free software, but the license still does not conform to the Open Source and the Free Software Guidelines so it is source-available software.

Alpine
In 2006, the University of Washington announced that it stopped development of Pine with Pine 4.64, although Pine continues to be supported.

In its place is a new family of email tools based upon Pine, called Alpine and licensed under the Apache License, version 2. November 29, 2006 saw the first public alpha release, which forms a new approach, since the alpha test of Pine was always non-public.

Alpine 1.0 was publicly released on December 20, 2007. The most recent version 2.26 was released on June 3, 2022.

title: Pine (email client)


text:
User:Eanorel

My contributions (those that I can remember at least):

 * Hellenes
 * Hellene
 * Macedonia
 * Byzantine Empire
 * Constantinople
 * Dodoni (Still working on that)
 * Cyprus
 * Greek language
 * Greek language/Lexicon
 * Areios Pagos
 * Unknown God
 * Ikhthus

Please keep an eye for my mistakes since English is not my native language.

/Talk

title: User:Eanorel