Каковы сходства между Perl и Java? [закрыто]


14

Я решил, что я изучаю Java как мой второй язык (я разработчик Perl). Но, просто прочитав несколько онлайн-уроков, я действительно не могу найти сходства между ними. Что мне будет легко понять при изучении Java?


Начните с решения «Я НРАВИТСЯ ЭТОТ ЯЗЫК!». Всякий раз, когда вы сталкиваетесь с чем-то трудным, просто запомните свое решение и избавьте себя от большого количества зубов и выдергивания волос.

1
Рекомендуемое чтение: Горилла против Акулы

Ответы:


32

Perl - это многоуровневый, интерпретируемый, динамический язык программирования высокого уровня общего назначения. Java - это высокоуровневый, универсальный, в основном однопарадигальный, статически типизированный язык программирования.

Итак, оба высокого уровня :

Язык программирования высокого уровня - это язык программирования с сильной абстракцией от деталей компьютера.

и общего назначения :

В компьютерном программном обеспечении язык программирования общего назначения (GPL) - это язык программирования, предназначенный для написания программного обеспечения в самых разных областях применения.

По сути это означает, что все, что вы можете делать с Perl, вы можете делать и с Java. И, как упоминает @KyleHodgson , оба их синтаксиса являются производными от C и C ++, а синтаксис для простых вещей, таких как forциклы и ifоператоры, по сути одинаков - и, как отмечает @DipanMehta , оба являются сборщиком мусора . И, конечно, оба очень популярны и имеют живые сообщества.

Но на этом сходство заканчивается. Perl - это мультипарадигма, поддерживающая широкий спектр парадигм программирования:

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

Так что Perl позволяет более одного способа структурировать ваш код 1 , тогда как Java - только один. Это не плохо (или хорошо), просто другое. Если вы еще не написали объектно-ориентированный код на Perl, Java на первый взгляд может показаться немного чуждым. Не отчаивайтесь, объектная ориентация - это то, что вам в конечном итоге придется изучить, если вы рассматриваете карьеру в разработке программного обеспечения, а изучение Java - хороший способ изучения базовых концепций объектной ориентации - не идеальный способ, но безусловно, хороший способ.

И, как вы знаете, Perl интерпретируется, тогда как Java ... ну ... совершенно другой зверь . В Java вы пишете свой код так же, как в Perl, а затем компилируете его . Результатом является не исполняемый файл, а байт-код Java . Этот промежуточный формат исполняется (наконец-то!) В виртуальной машине Java , которая в некоторой степени аналогична интерпретатору Perl. JVM должна быть установлена ​​заранее для запуска Java-программы, в том числе и потому, что вам нужно установить интерпретатор Perl для выполнения сценария Perl 2 .

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

Что подводит нас к последнему значительному различию:

Perl динамический 3 :

Динамический язык программирования - это термин, широко используемый в компьютерных науках для описания класса языков программирования высокого уровня, которые во время выполнения исполняют многие обычные поведения, которые другие языки могут выполнять во время компиляции, если они вообще существуют. Эти поведения могут включать расширение программы, добавление нового кода, расширение объектов и определений или изменение системы типов во время выполнения программы.

и динамически набрал 4 :

Говорят, что язык программирования динамически типизируется, когда большая часть его проверки типов выполняется во время выполнения, а не во время компиляции.

и Java статически типизирован :

Говорят, что язык программирования использует статическую типизацию, когда проверка типов выполняется во время компиляции, а не во время выполнения.

Что, проще говоря, означает, что в Java вы должны объявить тип ваших переменных и методов перед их использованием. Есть и другие отличия, но я бы не хотел испортить удовольствие от их самостоятельного открытия :)

И, наконец, есть одно очень важное отличие: Java - это любимый язык научных кругов 5 и корпоративного мира, в то время как вы больше не будете встречаться с Perl в академических условиях (там, где я впервые встретился с ней), и его карьерные перспективы уменьшаются (все еще довольно много рабочих мест, но далеко не так много, как Java, .Net языки или PHP). Я не буду комментировать причины, я просто констатирую (грустные) факты. Поскольку вы еще очень молоды, изучая Java, вы будете немного более подготовлены к получению степени по компьютерным наукам, если решите пойти по этому пути.

Конечно, не разочаровывайтесь в Perl, но изучайте Java. Тот факт, что они больше отличаются друг от друга, также означает, что вы изучите совершенно разные подходы и навыки программирования, это трудный путь, но в конечном итоге он сделает вас лучшим программистом.

1 "Тим Тоади"

2 Сообщество Perl активно изучает возможности виртуальной машины Perl через Parrot .

3 Динамический не всегда означает динамический тип.

4 Perl динамически типизируется для пользовательских типов, статически типизируется по отношению к различающимся массивам, хэшам, скалярам и подпрограммам и строго типизируется через use strict, так что, по сути, это язык системы переменных типов, но для сохранения здравого смысла давайте назовем его динамически набран.

5 На грани злоупотребления, как пишет Джоэл Спольски в «Опасностях JavaSchools» .


6
По сравнению с Perl, Java не является языком высокого уровня. Для написания чего-либо требуется гораздо больше Java-кода, чем для Perl-кода.
tchrist

1
@tchrist Какое количество кода имеет отношение к тому, является ли язык высокого уровня или выше / ниже уровня другого языка?
Яннис

1
@YannisRizos Это довольно легко ответить. Если для этого требуется больше кода, значит, вы не имеете дело с достаточно высоким уровнем абстракции. Один яркий пример - хитрая обработка строк в Java. Он не поддерживает высокоуровневую концепцию абстрактных кодовых точек Unicode, за исключением движка регулярных выражений в Java 7. Это приводит к большим ошибкам из-за того, что низкоуровневый язык Java сравнивается с Perl.
tchrist

@tchrist Субъективность этого термина не оставляет много места для нормального сравнения, линии слишком размыты, и оба языка имеют чрезвычайно широкий набор функций, некоторые из которых очень высокого уровня, а некоторые низковатые. Поэтому я буду думать, что они находятся на одном уровне, и не буду сильно беспокоиться об этом. У меня был подобный разговор здесь , который вдохновил меня не терять время на сравнение языков;)
Яннис

@YannisRizos Вы не можете найти концепцию высокого уровня в Java, которой нет в Perl, но вы можете найти много концепций высокого уровня в Perl, которой нет в Java. Таким образом, Perl является более высоким уровнем. Perl имеет функциональные указатели; Ява не Perl перегружен оператором; Ява не Perl имеет детерминированные деструкторы; Ява не Perl может перегружать функции по типу возвращаемого значения; Ява не может. Я могу идти по этому пути очень долго. Вы, конечно, должны продолжать «чувствовать», как вам больше нравится, и по любой причине, но это не связано с субъективным анализом.
tchrist

2

Ну, они оба используют синтаксис типа C - точки с запятой, фигурные скобки и тому подобное. Лично, когда я несколько лет назад пытался переключиться с Perl на Java, самая большая вещь, которая поразила меня, - это объектно-ориентированное программирование. Я разработал некоторые объекты в Perl, но мне больно пытаться представить жизнь в Царстве Существительных.


@ downvote, почему? (Я не так влюблен в ответ, просто любопытно, что вы сочли таким проблематичным.)
Кайл Ходжсон,

1

Делаем попытку альтернативного ответа, поскольку выбранный в настоящее время, кажется, фокусируется на различиях между ними (действительно, между Perl и Java не так много общего).

сходства

  • Они оба C-подобные (у них есть петли, фигурные скобки и точки с запятой)
  • Они принципиально необходимы
  • Ни один не производит скомпилированные двоичные файлы
  • Они оба очень зрелые
  • Они оба проверены в боевых условиях на предприятии (Perl больше как ops glue и Java больше как приложения / сервисы)
  • Они оба популярны
  • Они оба поддерживают объектную ориентацию
  • Они оба имеют широкий спектр доступных структур
  • Обе они опубликовали книги о них
  • Они оба более высокого уровня, чем C / сборка
  • Они оба «медленные» (для различных специфических сценариев «медленный», в том числе и C / сборка)
  • Они оба управляют памятью автоматически («сборка мусора»)
  • Ни один не хип / прохладный с лета 2012
  • Они оба укоренились в сообществе открытого исходного кода
  • Они оба доступны для многих платформ

Если ваш Perl-код является очень строгим и ортогональным (хорошо проверенным, хорошо документированным, использует Moose или строгую объектную ориентацию), то эти концепции будут очень хорошо переноситься в Java, поскольку Java чрезвычайно ортогональна и не столь выразительна.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.