Виктор Кон . . 05-02-2025 . . kohnvict.narod.ru
Язык программирования (ЯП) как элемент жизнедеятельности общества людей требует определения, которое бы четко указывало о чем говорить стоит, а что не относится к теме. Хотя определений ЯП существует много и наверно есть общепринятое, которое формулируется либо в Википедии, либо Главными Специалистами, я хочу предложить простую идею. Она в том, что этот язык является средством общения, как и любой разговорный язык. Как Математика является языком описания Законов Природы, так и ЯП является языком описания алгоритмов и способов решения самых различных задач. Из такого определения сразу следует, что языков таких много и может быть еще больше. Как и среди разговорных языков есть языки мертвые, на которых в настоящее время никто не говорит, есть языки с малым числом носителей и есть мировые языки, которые знают почти все. И это свойство никак не зависит от качества языка. Просто так получилось по многим причинам, перечислять которые нет пока необходимости.
Среди разговорных языков есть такие, происхождение которых до сих пор не известно, но есть и искусственные языки, придуманные относительно недавно с целью быть универсальными языками для всех людей на планете. Однако они не имеют успеха. Любой ЯП -- это придуманный язык для общения человека и Программы. Надо объяснить почему Программы, а не Компьютера, ведь Программа сама написана на ЯП. Я определяю Программу как Метод решения задачи с помощью комплекса алгоритмов. С одной стороны, Компьютер выполняет Программу, с другой -- программа написана на ЯП, но это разные понятия. И сразу отметим, что Компьютер может выполнять разные Программы, а любая Программа может быть написана на разных ЯП.
Программа очевидно является неким черным ящиком, в который подаются входные данные (ВД), и из которого выходят ее результаты работы (РР). Есть специальный частный случай программы, когда ВД -- это один ЯП, а РР -- другой ЯП. Такая программа является переводчиком с языка 1 на язык 2, или транслятором, или компилятором. Но компилятором обычно называют такую программу-переводчик, когда ЯП 2 написан в коде операционной системы (ОС) компьютера, то есть наборе инструкций, которые выполняет ОС конкретного компьютера. Хотя в последнее время все такие программы уже можно называть компиляторами. Но бывают Программы другого типа, когда ВД имеют самую разную структуру (числа, тексты, картинки и т. д.) и РР тоже разные. Такие программы решают задачи, которые можно отнести к ИИ (искусственному интеллекту), пусть и в очень узком понимании этого понятия. Но есть и третий тип программ, у которых ВД представляет собой Программу на ЯП, а РР имеют разную структуру, то есть решение задачи. Такую программу назовем интерпретатором.
Программу в коде ОС формально тоже можно назвать ВД для интерпретатора, но в данном случае интерпретатором является не программа, а процессор компьютера. Такая программа является исполняемой. Любые программы, написанные на ЯП более высокого уровня перед исполнением требуют компиляции. И тут снова есть варианты. Пока компьютеры были очень слабые, и ВД подавались компьютеру в виде перфокарт (перфолент) компиляция программы в код ОС выполнялась в оперативной памяти компьютера и затем код сразу выполнялся. Так много лет работал компьютер БЭСМ-6 на фортране. После того, как появились магнитные носители информации, этот код стали записывать в файлы, которые и представляли собой исполняемые программы. В ОС Виндовс такие файлы имеют расширение exe. Но ОС Виндовс имеет и свой командный ЯП текстом, который она тоже интерпретирует, то есть исполняет. А в системе Юникс тип файла специально объявляется независимо от расширения.
Многие другие ЯП высокого уровня, например, Питон, интерпретируются исполняемой программой, сразу в коде ОС. А сами эти программы могут быть написаны на других ЯП с последующей компиляцией. У интерпретируемых программ есть преимущества в гибкости и возможности подключения одних программ к другим программам, которые могут интерпретироваться разными программами. Так в Питоне подключения других программ выполняются в самом начале перед выполнением основного кода программы. Они оформляются в виде пакетов. И таких пакетов накоплено уже несколько сотен тысяч. Но возможна и другая технология когда программа, написанная на каком-то ЯП компилируется не в код ОС а в так называемый байт-код. При этом проверяются все ошибки грамматики и выдается реально работоспособная программа. А уже этот байт-код интерпретируется в конкретной ОС специальной программой, причем без записи кода ОС. То есть компиляция в код ОС происходит в процессе выполнения.
Такой метод впервые был применен в Java технологии. Очевидно так хорошо работать на компьютере с большой оперативной памятью, который не выключает программы длительное время. Иначе на компиляцию будет тратиться много времени и такая программа будет работать медленно. Пока программа работает, весь скомпилированный код находится в памяти компьютера. Стоит закрыть программу и он исчезает. На практике большие программы на Java, которые долго работают, никак не теряют в скорости, и не только на серверах, но и на персональных компьютерах. Моя Java программа вполне успешно работала даже на карманном компьютере в период от 2004 до 2015 годов. Преимуществом такой технологии является то, что байт-код не зависит от ОС. Он без всяких изменений работает в любой ОС, в которой имеется виртуальная машина языка Java. Она называется JRE (java runtime environment).
Впоследствии виртуальные машины появились и для других ЯП. При создании Java технологии предполагалось, что ЯП будет работать во всех ОС и на всех платформах, включая интернет. Но главным состоянием общества людей является война в любой форме, в том числе и в форме конкуренции. Началось с того, что Виндовс не захотела принимать чужую технологию. Она разработала собственную технологию, которую впоследствии назвали C# (си шарп). JRE для Виндовс все же существует как сторонняя программа, не входящая в ОС. Она никак ОС Виндовс не использует, у нее все свое. В браузеры (интернет) ЯП Java поначалу пустили, но потом все же запретили. Конкуренция часто прикрывается безопасностью. Все неугодные для ОС программы объявляются вредными и небезопасными. С другой стороны, очень слабый ЯП Javascript доразвили до приличного состояния и в нем уже стало можно что-то делать.
Итак, все определения сделаны и ответ на вопрос что такое ЯП мы имеем. Попробуем понять как ЯП создаются. Тут снова помогает история вопроса. Самая первая проблема, которая стояла перед обществом людей сводилась к математике. Уже изобрели атомные бомбы, появились ракеты и человек собирался в космос. Нужны были расчеты уравнений механики, ядерной физики и химии. И появились ламповые переключатели, способные записать число в двоичной системе. На первом этапе, пока компьютеры были простые, программы писались прямо в коде процессора. Например, на ЭВМ М-20 код был такой. Компьютер имел память, способную записывать числа. Программа брала группы чисел по 4 типа О П В Р где О -- число, которое указывало номер операции (сложение, вычитание и т. д.) П -- первый операнд, В -- второй операнд. Это числа над которыми выполнялась операция. И, наконец, Р -- результат. Числа указывали на самом деле номера ячеек памяти, в которых находились другие числа. Ячейки памяти были переменными, а числа в них -- их значениями.
Большая коллекция таких команд создавала программу. Команды выполнялись одна за другой, но были и такие команды, которые меняли порядок выполнение других команд. При этом можно было какой-то участок кода проходить много раз. Так создавались процедуры. А некоторые команды делали разные переходы в зависимости от знака числа операции, так появились условия. И до сих пор в коде ОС есть только процедуры и условия и больше ничего. Со временем архитектура двоичных операций усложнялась. Появилась быстрая, но небольшая, память, большая, но медленная, память. Росло число битов в процессоре. Когда появился фортран, то весь код разбивался на подпрограммы (так назывались процедуры). Память разделилась на локальную и общую, общие куски памяти имели имена, как и подпрограммы. У подпрограмм кроме имени, были аргументы.
Если бы компьютеры продолжали только решать математические задачи, то кроме фортрана ничего и не надо было бы. Все уже тогда работало как часы. Но на замену текстовым принтерам пришли игольчатые принтеры, а потом и лазерные. Они могли рисовать. Появились методы кодирования картинок числами и процедуры рисования графических элементов. На фортране появился пакет подпрограмм, который позволял делать рисунки. И оказалось, что сделать рисунок за одну попытку не получается. Нужно много попыток. И появилась проблема, которая состоит в том, что рисунки делаются быстро, а компиляция -- медленно. Компиляция очень сильно тормозила весь творческий процесс. Но на фортране не было другого способа работы, только компиляция.
И вот в этот момент я взялся писать собственную программу -- интерпретатор нового языка программирования, который я назвал КВИК. Так произносится слово (быстрый) на английском языке. С другой стороны, это шифр моей фамилии и имени Кон ВИКтор. Главная цель была -- быстро рисовать графики для науки, не тратить время на компиляцию. Честно скажу, я не знаю как другие люди создавали свой ЯП. Я ничего не читал, все придумал сам. У меня с самого начала были идеи о том, каким должен быть именно мой язык. Я, фактически, использовал его и на фортране, но в виде процедур. Начав с графики я постепенно научился работать с видео памятью, подключив процедуры на ассемблере, сделал средства общения с пользователем и много чего еще. Виндовс еще не было, у а меня была программа, которая работала быстро и почти как в Виндовс. На всю работу я потратил полтора года.
В России в это время сменился строй. Кончился СССР, и коммунизм сменился капитализмом. Денег не платили, но разрешили все продавать. Я потерял свои сбережения, но собирался продавать программу, тем более, что она реально была удобной и интересной. Я стал ездить по научным институтам, выступать на семинарах и показывать программу. Но оказалось, что денег нет ни у кого. Покупать никто не хотел. Интернета еще не было и возможности для рекламы были слабые. Но я не переживал. Творчество само по себе -- приятная процедура, плюс я пообщался с разными людьми. Программа мне все равно помогла потому что через три года я оказался во Франции, где сумел быстро решить поставленные мне задачи. Там уже вовсю работала система Юникс и были отличные программы, но у меня не было времени их учить. Систему то я выучил, а программу использовал свою.
Интересно, что я сделал свою программу в то же время, что и автор Питона. Но Питон сразу делался для всех, и на Западе, а я не мог заниматься бизнесом в полной мере. Я ученый и работал в бюджетном институте. ЯП Java появился чуть позже и в самом начале работал очень медленно. И появилась Виндовс, которая на 386 компьютерах уже со скрипом работала, а на 486 уже работала нормально. В ОС Виндовс моя программа блокировалась. Эта ОС не разрешала многое из того, что я делал для ускорения графики. Я реально мог в два счета поломать систему. Но отдельные элементы кода все же работали. В конце 90-х я выучил ЯП Постскрипт, а позднее (в 1998 году) ЯП Javascript. Но продолжал работать на фортране, который уже стал совсем не адекватным языком. Надо было менять ЯП. В 2003 году ЯП Java уже нормально работал и был номер 1. И я решил переходить на него. В то время были книги только на английском языке, написанные очень невразумительно. Какое-то время я побуксовал, но выучил. А в конце 2003 года мне показали карманный компьютер и попросили написать программу, которая бы на нем работала.
В начале 2004 года я купил себе карманный компьютер российской фирмы Rover. Он работал под ОС Виндовс Мобайл. И нашлись энтузиасты, которые сделали JRE для этой ОС. Я достал код своего интерпретатора на фортране, немного его переделал и за две недели вручную перекодировал фортран на джаву. И новая программа сразу заработала. Она получила название vkacl. По русски я ее называю Эдкол. Я ее выставил в каталоги программ и ее скачивали, пользовались и обсуждали. Других программ, которые бы могли считать, имели бы интерфейс и графику на карманном компьютере, в то время не было. Мой карманный компьютер проработал 9 лет до 2013 года. Он бы и дальше работал, но я купил себе смартфон на Андроид. А там JRE не было. Но был браузер и можно было запускать программы на Javascript. Я решил, что мне хватит. А свой язык я уже давно использовал на ноутбуках, у него был сайт и его скачивали очень неплохо. Но я не программист, а ученый-физик. И ЯП я уже реально делал для себя. Язык продолжал развиваться, появлялись новые возможности.
Зачем я это делал? Это третий вопрос. Ответ простой. Мне нравились возможности ЯП Java, но не нравился ее синтаксис и ее архитектура. И то, что надо компилировать в байт-код. Я просто то же самое, что делает Java, делал на более простом языке, который очень компактно записывается и имеет простую структуру. А на Java я сделал чистый интерпретатор, код не надо компилировать и все, что лично мне нужно, там было. А в чистый интерпретатор можно добавить любое количество готовых программ, которые уже написаны на Java. Но мне пока хватает работы с pdf файлами.
Надо отметить, что у интерпретируемых языков есть не только плюсы, но и минусы. Исполняемая программа после компиляции не содержит ошибок в программе. Все ошибки были исправлены на стадии компиляции. А интерпретируемая программа сразу в сыром виде от пользователя включается в работу. То есть все ошибки программирования выявляются в процессе работы программы. Разумеется, интерпретатор, должен все такие ошибки показывать. И он это делает, но разным способом, и вовсе не все ошибки. Если интерпретатор написан на ЯП Java, то те ошибки, которые программа пропустила, укажет JRE, однако тоже не всегда. И возникают такие ситуации, что программа не работает, а понять где ошибка и какая она -- не просто. Все зависит от качества интерпретатора. Я сталкивался даже с такими ситуациями, когда JRE неправильно выполняла совершенно правильный код.
А потом случился интересный момент. Я вдруг заметил, что кругом стали толкать Питон, его реклама торчит из каждого уголка интернета. У ЯП Питон есть разновидность Jyton, в которoм интерпретатор тоже сделан на Java. Я выучил Питон, и он лично мне активно не понравился как раз своим синтаксисом и сложностью. А кругом говорят, что это простой язык. Студентов уже поголовно учат этому Питону, но начали уже и школьников учить. Но у меня тот же Питон, только проще и легче для установки. И я было решил тоже рекламировать свой язык. Но почитав кое-что из комментариев на сайте про персональные компьютеры, я понял, что так ничего не делается. Детей заставляют учить Питон и они не могут выбирать. А программы обучения утверждаются министерством. Школьники должны учить мой ЯП vkacl как второй, но учить второй язык никто не будет.
Теперь про идеальный и универсальный язык. Это тоже бесполезно. У каждого человека свои задачи и никто не может знать всего. Математикам нужен свой ЯП, художникам -- свой, музыкантам -- свой. Сейчас ученые пишут свои программы на Питоне, а он совсем для этого не приспособлен. Люди очень разные, большинство -- очень глупые, их на два ЯП не хватит и выучив какой-то один ЯП, они с ним и остаются. Языков, которые иcпользуют JRE, очень много, в том числе и Котлин. Котлин может понравиться только потому, что делает программы для системы Андроид (то есть для смартфонов). Но реально работающие люди смартфонами не пользуются. Для меня он только фото и видео камера, ну и еще немного музыки.
Еще один вопрос -- нужен ли русский язык в ЯП? Ответ -- однозначно нет. Математика пишется на латинском языке. От него не избавиться, а переключать клавиатуру с одного языка на другой -- очень неприятное занятие. Особенно на ноутбуках с тачпадом. На самом деле ЯП Java продолжает развиваться, он немного отстал и сейчас догоняет. И на мой вкус -- это реально очень мощный язык, работающий в разных ОС без компиляции. Лучше еще не скоро придумают. Многие новые ЯП делаются из единственного желания их авторов вытеснить конкурентов. Но и некоторые другие языки типа JS и PS полезны тем, что очень разные и имеют свою очень четко обозначенную область применимости. Графика в Java скопирована с PS, но синтаксис другой и менее удобный. Все, что разумно делать -- изобретать ЯП с интерпретатором на джава, но более простые. Это делается, но не имеет успеха. Сейчас мода на Питон. И это печально.
.