Язык программирования имеет какой-то официальный стандарт. От которого можно в той или иной степени отклоняться. А иногда и нужно, чтобы язык не умер, перестав удовлетворять современным технологиям программирования.
Посмотрим на примере такого распространенного языка, как Паскаль.
Никлаус Вирт описал Паскаль в 1970 году. Будучи соавтором разработки языка Algol-68, он взял за основу алголоподобный синтаксис, в то время считавшийся наиболее удачным.
Первая реализация паскаля была сделана под конкретную машину и носила отпечаток требований её операционной системы. Сюда, например, относится требование, чтобы программа начиналась с оператора Program, содержащего указания на файлы ввода и вывода. С распространением паскаля на другие машины нужда в этих указаниях отпала, но некоторые школьные учителя, даже не зная о причинах, до сих пор уверяют учеников, что программа должна начинаться именно с program!
Шло время, программирование не стояло на месте. Возникали новые языки, создавались новые технологии, компьютеры проникали во все новые области. Появились персональные компьютеры. С этого момента Паскаль получил вторую жизнь. Понятный, быстро изучаемый и компилируемый в компактный код, это был отличный язык для "персоналок" с объемом памяти в 640 Кбайт. Но это был уже не тот, прежний Паскаль. Для работы с персоналками понадобилось его существенно дополнить. так возникла интегрированная система (среда) программирования Turbo Pascal. Именно система, потому что она включала компилятор с диалекта (т.е. с некоторой конкретной реализации) языка Паскаль, текстовый редактор, систему отладки, систему справок и поддержку выполнения программы.
Впоследствии возникли другие диалекты Паскаля, такие как входной язык системы Borland Delphi, язык Free Pascal, язык системы Pascal ABC и наконец, среда программирования PascalABC.NET, которая очень далеко ушла от Паскаля Никлауса Вирта, вобрав в себя лучшие черты и средства языков C#, Python и Haskell.
// PascalABC.NET 3.3, сборка 1625 от 17.01.2018 // Внимание! Если программа не работает, обновите версию!
begin var x:=ReadReal('x='); var n:=ReadInteger('n='); // для сборок, начиная с 30.12.2017 Writeln('(Sin(',x,'))^',n,' = ',Sin(x)**n); // для более ранних версий PascalABC.NET 3.3 Writeln('(Sin(',x,'))^',n,' = ',Power(Sin(x),n));
Для всех прочих паскалей
var x,t:real; n,z:integer;
begin Write('x= '); Readln(x); Write('n= '); Readln(n); t:=Sin(x); if t=0 then Writeln('(Sin(',x,'))^',n,' = 0') else begin if n mod 2=0 then z:=1 else z:=Sign(t); t:=Abs(t); Writeln('(Sin(',x,'))^',n,' = ',z*Exp(n*Ln(t))) end; Readln end.
ну начиная с А а заканчивая В: