Category: лытдыбр

Category was added automatically. Read all entries about "лытдыбр".

vadim kataev logo compuvisor vm agent ai

Языки программирования. Сравнение.

Когда то давно я начал увлекаться программированием взяв в библиотеке одну интересную книгу. Хотя сейчас я и не помню про что она была, но в ней была замечательная программа "Угадай число". Попробовав как программа работает я был потрясён тем, что я могу всё изменять и в буквальном смысле "сотворить" свой собственный мир.


Бейсик

Действительно чудо-язык. Его простота и позволяла уже в раннем детстве писать довольно таки не тривиальные программы. Спасибо Гейтсу за популяризацию этого языка. Я помню все эти статьи в журналах "Наука и Жизнь" и "Техника Молодёжи", "Радио" и "Юный Техник" с его приложением, переведёные польские журналы. Там были интересные примеры решения самых разнообразных проблем - от "вечного" календаря до игры "тетрис". Но уже тогда было заметно, что бэйсик не отвечает всем потребностям программиста, не позволяя реализовывать многие вещи, либо если позволяя то очень непродуктивно и за счёт нечитабельного кода.

Его сила была так же и в его всеобщности - большинство компьютеров , как IBM PC, Электроника УКНЦ, вся серия Spectrum, некоторые русские клоны IBM имели его даже в ПЗУ и не требовали даже дискеты для запуска интерпретатора (насколько помню, производные Apple Macintosh не имели бэйсика в ПЗУ).
Но разочарование в языке пришло тогда, когда я познакомился поближе с языком Pascal.


Pascal

Pascal я попробовал впервые на Электроника УКНЦ но по настоящему писать программы начал уже на 286м и продолжил на 386м Intel компьютере. Это был очень красивый язык, в котором была строгая типизация данных и понятный мощный синтаксис. Сильной стороной Pascal была его расширяемость и библиотеки для решения проблем из области математики , обработки текстов и пользовательского интерфейса, а так же скорость компиляции больших проектов. Его слабой стороной мне тогда казалась неудобность работы на низком уровне, как то с указателями, ассемблером и низкоуровневой математикой; то есть писать например графические игры на Pascal тогда казалось неудобно.


С

Это была фантастика ! Мощность, производительность и скорость программ поражали ум. Сложнейшие задачи решались мгновенно. Скорость работы с графикой позволяла чувствовать себя уже чуть ли не богом, и когда стали выходить известные 3D игры написанные на C, например Doom, уверенность в том, что ты используешь верный инструмент, только росла. Я начал писать графические игрушки на C, пользовательский графический интерфейс (аля Win3.1), обработка музыкальных файлов, различные утилиты для решения простейших файловых задач. Я начал экспериментировать с искусственной жизнью - каждый файл каталога представлял из себя особь и они жили, взаимодействовали и развивались под управлением программы которая являлась для них законами - то есть средой. Экспериментировал так же с физикой, писал различные визуализаторы физических проблем.

Я ломал всевозможные игрушки, ресурсные файлы программ, выдирал спрайты и писал собственные, гораздо примитивные игрушки, но зато сам процесс написания был моим крэком :) У меня был свой собственный графический редактор и эксплорер. Мощность домашнего компьютера не позволяла запускать на нём Windows 3.1 и я писал свой собственный GUI, который позволял мне настраивать систему DOS, запускать файлы или просматривать картинки.
В конец я опустился, параллельно всё более и более используя ассемблер.


Assembler x86

Мой компьютер был слаб. Слаб не только процессором, но и памятью, жёстким диском и возможностями графической карты. Что бы писать программы использующие 3D графику, приходилось производить оптимизацию программы, переписывая части на ассемблер. В то время я стал глубже интересоваться ассемблером и алгоритмами, красиво решаемыми на этом самом примитивном но самом мощном языке. Ассемблер начинал казаться мне очень правильным и даже, как ни странно, удобочитаемым. Надо было просто соблюдать ряд правил при написании программ и они читались и редактировались ни чуть не хуже чем скажем программы на C. Дебаггер был так же на высоте. На ассемблере прекрасно можно было писать понятные билиотеки 3D графики или математики, которые потом легко включались в большой C проект.


C++

Хотя возможностей языка C хватало на то чтобы решать большинство задач на персональном компьютере, всё более растущая сложность и величина программ приводила к длительной отладке и поискам ошибок. Я начал изучать C++ когда стал писать программы с не родными GUI. Сначала мне казалось что чёрт ногу сломит во всех этих иерархиях классов и виртальных функциях, но читая действительно громадные коды, начинал понимать, что альтернативы объектно-ориентированному представлению кода программы иногда может просто не быть. Процедурное программирование иногда само вынкжденно притворяться объектно-ориентированным - я часто раньше делал на C указатели на функции и итераторы, тогда как простейшее наследование свойств классов на C++ оставляло код понятным и ясным. И всё таки одному C++ я не доверял из за его медленности компиляции и работы программ написанных на нём, поэтому я очень часто смешивал части проекта на С, С++ и ассеблере, что позволяло добиться где надо ясности, и где надо скорости. Я до сих пор иногда прибегаю к помощи этих языков.


Java

Не помню, зачем мне она понадобилась, но так получилось, что пришлось что то писать на Java. Сильными языком я её назвать не мог, так как чувствовал себя связанным по рукам и ногам, но была у Java привлекательная сторона в том, что она обладала строгой красивой объектно-ориентированной структурой. Огромным плюсом языка была его аппаратная независимость. Написано хоть где - работает везде, что весьма импонировало веб-программированию. Язык так же очень хорошо подходил для написания новичками в программировании каких то полезных вещей, а так же имел возможность создания апплетов, что сделало его мгновенно очень популярным. Это был первый пример широкого распространения языка, генерирующего байтовый код для виртуальной машины. Иногда я вынужденно использую язык Java.

По крайней мере продукт Sun стоит сейчас почти на каждом компьютере, а интересных полезных Java приложений и библиотек классов становится всё больше. Сейчас языки-конкуренты вплотную наступают на пятки Java, так что Sun придётся постараться что бы удержаться первыми, хотя на мой взгляд правильным решением была бы передача разработки языка OpenSource Community. В целом, язык хорошо подходит для решения не крупных классов задач, не выдвигая слишком высоких требований для программистов, своего рода Бейсик нашего времени.


Delphi(Object Pascal)

Это не просто дальнейшее развитие языка Pascal. Сохранив самое лучшее от языка Pascal и добавив достоинства Java, Delphi стал популярным языком программирования работы с базами данных и даже GUI. Язык, к сожалению сильно интегрирован с IDE разработки, что делает его сильно ограниченным. Сильной стороной является простота и скорость разработки GUI приложений для Win32 или Qt. В основном Delphi используется как средство для создания простейших проектов для работы с реляционными базами данных, создания CGI приложений для веба, а так же программ с Windows GUI, превосходя в этой сфере по простоте и скорости создания/отладки/компиляции собственные средства разработки фирмы Microsoft.


Bash

Это не совсем язык программирования в широком понимании этого термина, скорее это язык написания скриптов - конструкций, широко использующих готовые программы как функции. Bash - это интерпретатор комманд, он имеет простейшие механизмы для реализации логики, циклов и процедур. Я использую его каждый день что бы автоматизировать свои многие действия.
Минусы: неясные зависимости - пользователь может не иметь установленными некоторые программы либо иметь их другие версии, что скажется на полной неработоспособности скрипта. Плюсы: "мгновенное" написание программ, на написание которых на C или Java понадобился бы не один день.


Fortran

Я никогда не писал на этом языке, но недавно мне пришлось переводить один древний Fortran код (с комментариями на французском языке :) ) в код Perl. Язык довольно простой и очень ограниченный, я думаю, что уже мало кто использует его в наши дни. Сильные стороны языка я затрудняюсь назвать.



PHP

Моё знакомство с языком PHP было очень коротким. Я искал простейший способ реализации интрнет-магазина, и PHP выглядел весьма не плохо в этой роли. PHP неплохо смотрится в связке с MySQL для веб, но написан со множеством багов, так что для серъёзных проектов его лучше не использовать.



Perl

Это сильный язык. Скорость разработки мощнейших проектов измеряется несколькими днями. Несмотря на свою интерпретаторскую природу, скорость работы программ написанных на Perl, потрясная. Огромная библиотека готовых решений, делает разработку программ на Perl ещё быстрее. Perl предназначен в основном для работы с текстами, базами данных, сетями и интернетом. Крупнейшие интернет-проекты написанны с помощью этого языка. Большие надежды на новый Perl6, который будет реализован на виртуальной машине Parrot, являющейся так же как и сам Perl, проектом OpenSource. Большинство экспериментов с интеллектуальными агентами я делаю на связке Perl+Bash, хотя начинаю присматриваться к другому детищу OpenSource - языку Python.


Python

С языком я познакомился совсем недавно, но уже могу сказать что это самый красивый язык на свете. Хотя и нацелен язык на решение традиционно Perl'овых задач, он обладает большей ясностью, структурированностью и удобочитаемостью. Разработка мощной программы на Python так же очень быстра. Несомненный плюс, это множественное наследование. Самая сильная сторона языка - продуманный синтаксис. Язык преследует цель - быстрое написание кода без ущерба для расширяемости проекта, что подходит идеально для создания крупных интернет-проектов. Этот язык мне кажется, может быть альтернативой C++ для решения многих классов задач. Из минусов, вероятно работа с Regexp - тут Perl выглядит попроизводительнее.

Но как правильно заметил автор "Собора и базара" - если только попробовать привыкнуть к особому стилю и что то написать на Python, то через несколько минут вы увидите насколько это мощный язык. В частности, что бы реализовать поиск по направленному графу и показать результат графически в PDF мне понадобилось около получаса времени, и то большая часть на прочтение документации - это моя первая helloworld на питон, но я впечатлён его производительностью. Что мне стоит заменить названия узлов такого графа на URLs и огранизовать маршрутинг для агентов, добавив всего несколько функций ? Это сильный язык, по крайней мере для прикладных задач ИИ. По этой причине, на этом языке написаны сильнейшие примеры ИИ на практике, например поисково-аналитические машины, интеллектуальные агенты.


Ruby

Хотя я предпочитаю использовать питон в классе задач обработки текстов, поиска и работы с графами/математикой, язык руби смотрится так же неплохо. Руби работает заметно быстрее питона, имеет ряд интересных решений и использует лучший объектно-ориентированный подход, правда имеет и ряд недостатков:
1 отсутствие множественного наследования (подмена его через особый неудобный механизм),
2 имеет ужасный синтаксис унаследовав многие недостатки языка Perl, так что в целом написание аналогичной программы на языке питон занимает меньше времени
Питон и руби на сегодняшний день являются двумя динамично развивающимися языками и на практике чаще применяют питон да и модулей для него существует очень много.


Идеальным языком программирования для нас, людей, однако же является наш, человеческий язык описания явлений и структуры мира. Ещё нет интерпретаторов, способных писать код на основе нашего сильно "человечного" описания структуры задачи.
Пожалуй, сильными средствами представления не сей день являются "визуальный" язык UML и "лингвистический" SQL, правда для решения очень ограниченного класса задач.

Кстати, словесно-символьная форма представления не самая идеальная: например, почти все языки программирования используют вложенные блоки, которые можно представлять прямоугольниками вместо { и } или вместо begin и end. Во всех языках есть циклы, которые можно так же представлять визуальным блоком, background фон которого можно представлять начальным условием и условием завершения.
Это были бы более выгодные для восприятия человеком условия программирования в ущерб автоматизации обработки этих задач программами (дебаггеры, оптимизаторы, агенты). Поэтому язык всегда есть символьное представление, а уже средства интерфейса языка с человеком есть надстройка над самим языком и не должны присутствовать в языке.

Язык должен быть всеобщим, позволяя разработку на нём независимо от используемой платформы и средств разработки. В этом плане например ни Delphi ни C# не являются языками, годными для серъёзного программирования. Естественно, что первая, полностью не человеком написанная программа будет так же не Delphi, не С# и отнюдь не Java :)