Python по сравнению с Ruby для [закрытого] метапрограммирования

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

89
задан 3 revs, 2 users 69% 26 July 2018 в 13:03
поделиться

26 ответов

Нет действительно огромной разницы между Python и рубином, по крайней мере, на идеологическом уровне. По большей части они - просто различные разновидности того же самого. Таким образом я рекомендовал бы видеть, какой соответствует Вашему стилю программирования больше.

15
ответ дан Jason Baker 24 November 2019 в 07:12
поделиться

Я предлагаю, чтобы Вы испытали оба языка и выбрали тот, который обращается к Вам. И Python и Ruby могут сделать то, что Вы хотите.

Также читает этот поток .

0
ответ дан 2 revs 24 November 2019 в 07:12
поделиться

если Вы любите повышение, необходимо учиться жить с шипами:)

1
ответ дан AgentOrange 24 November 2019 в 07:12
поделиться

Я не уверен, что Python выполнил бы все вещи, которых Вы требуете (особенно точка о минимальном различии между кодом и данными), но существует один аргумент в пользу Python. Существует проект там, который облегчает для Вас расширениям программы для Python в D, таким образом, у Вас может быть лучший из обоих миров. http://pyd.dsource.org/celerid.html

1
ответ дан Mauli 24 November 2019 в 07:12
поделиться

Для синтаксиса стиля Python и подобных шепелявости макросов (макросы, которые являются реальным кодом) и хороший DSL видят , сходятся .

1
ответ дан 2 revs 24 November 2019 в 07:12
поделиться

Я имею, используют Python a очень бит, но намного больше Ruby. Однако я утверждал бы, что они оба обеспечивают то, что Вы попросили.

, Если я вижу все Ваши четыре точки тогда, можно, по крайней мере, проверить: http://www.iolanguage.com/

И Mozart/Oz может быть интересным для Вас также: http://mozart.github.io/

Friedrich

Отношений
2
ответ дан 3 revs, 2 users 94% 24 November 2019 в 07:12
поделиться

Что относительно OCaml?

функции OCaml: статическая система типов, вывод типа, параметрический полиморфизм, хвостовая рекурсия, сопоставление с образцом, первый класс лексические закрытия, функторы (параметрические модули), обработка исключений и возрастающая автоматическая сборка "мусора" поколений.

я думаю, что это удовлетворяет следующее:

Важный:

  1. Хороший, чистый, нормальный синтаксис и последовательная, интуитивная семантика. В основном хорошо продуманный, забавный использовать, современный язык.
  2. Несколько парадигм. Никакая парадигма не является правильной для каждого проекта, или даже каждой небольшой подпроблемы в рамках проекта.
  3. интересный язык, который на самом деле влияет на способ, которым каждый думает о программировании.

Несколько важный:

  1. Производительность. Было бы хорошо, если бы производительность была достойна, но когда производительность будет реальным приоритетом, я буду использовать D вместо этого.
  2. Хорошо зарегистрированный.
2
ответ дан 2 revs 24 November 2019 в 07:12
поделиться

Ruby является моим выбором после исследования Python, Smalltalk и Ruby.

2
ответ дан ryw 24 November 2019 в 07:12
поделиться

Если бы Вы любите стиль шепелявости code-is-data понятие, но не любите синтаксис Lispy, возможно , Пролог был бы хорошим выбором.

, Квалифицирует ли это как "забава использовать, современный язык", я уеду другим для оценки.;-)

2
ответ дан JesperE 24 November 2019 в 07:12
поделиться

я читал на Lisp немного, и я хотел бы найти язык, который позволяет часть интересного материала, который Lisp делает, но без странного синтаксиса, и т.д. Lisp.

не Был бы все мы.

минимальное различие между кодом и данными, стиль Lisp

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

, Если Вы хотите легкий для чтения синтаксис, у Вас есть Python. Однако код не представлен в любой из наиболее часто используемых встроенных структур данных. Это fails— как большинство языков do— в объекте № 1 Вашего 'важного' списка. Это мешает обеспечивать полезную справку.

у Вас не может быть всего этого. Помните, Вы не являетесь первыми для имения этой мысли. Если бы что-то как Ваш идеальный язык существовало, мы все использовали бы его. Так как реальный мир далек от Ваших идеалов, необходимо будет повторно присваивать приоритет списку пожеланий. "Важный" раздел должен быть перестроен для идентификации то, что является действительно важно для Вас.

69
ответ дан 2 revs, 2 users 81% 24 November 2019 в 07:12
поделиться

Нет действительно много для разделения Python и Ruby. Я сказал бы, что сообщество Python является более многочисленным и более зрелым, чем сообщество Ruby, и это действительно важно для меня. Ruby является более выразительным языком, который имеет положительные и отрицательные последствия. Однако я уверен, что будет много людей для вдаваний в подробности об обоих этих языках, таким образом, я брошу третью опцию в кольцо. Как насчет JavaScript?

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

2
ответ дан Jim 24 November 2019 в 07:12
поделиться

Правовая оговорка: Я только балуюсь или языком, но я, по крайней мере, писал мелко рабочие программы (не только быстрые сценарии, для которых я использую Perl, удар или GNU делают) в обоих.

Ruby может быть действительно хорошим для "нескольких парадигм", указывают 3, потому что он упорно работает, чтобы облегчить создавать проблемно-ориентированные языки. Например, просмотрите онлайн и взгляд на несколько битов кода Ruby on Rails и несколько битов кода Граблей. Они - и Ruby, и Вы видите общие черты, но они не похожи на то, о чем Вы обычно думали бы как тот же язык.

Python, кажется, мне немного более предсказуем (возможно коррелируемый для 'убирания' и 'нормальная' точка 2), но я действительно не знаю, ли поэтому самого языка или просто что это обычно используется людьми с различными значениями. Я никогда не делал попытку глубокого волшебства в Python. Я, конечно, сказал бы, что оба языка хорошо продуманы.

И счет хорошо в 1 и 4. [Редактирование: на самом деле 1 является довольно спорным - существует "оценка" в обоих, как распространенная в интерпретируемых языках, но они едва концептуально чисты. Можно определить закрытия, присвоить методы объектам и этажерку. Не уверенный, идет ли это, насколько Вы хотите.]

Лично я нахожу Ruby большим количеством забавы, но частично поэтому легче получить отвлеченное размышление о прохладных способах сделать вещи. Я на самом деле использовал Python больше. Иногда Вы не хотите прохладный, Вы хотите продолжить его так, это сделано перед временем сна...

ни в Одного из них не трудно войти, таким образом, Вы могли просто решить сделать свою следующую незначительную задачу в одной и той после этого в другом. Или заберите вводную книгу о каждом из библиотеки, просматривать-чтение их обоих и посмотрите то, что захватывает Вас.

16
ответ дан 2 revs 24 November 2019 в 07:12
поделиться

Вы рассмотрели Smalltalk? Это предлагает очень простой, ясный и расширяемый синтаксис с возможностями отражающей способности и самоанализа и полностью интегрированной средой разработки, которая использует в своих интересах те возможности. Взгляните на часть работы, сделанной в Smalltalk Писка, например. Много исследователей, использующих Писк, болтается на список рассылки Писка и #squeak на freenode, таким образом, можно получить справку по сложным вопросам очень легко.

Другие индикаторы его текущей уместности: это работает на любой платформе, которую Вы хотели бы назвать (включая iPhone); Gilad Bracha основывает свою работу Новояза над Писком; команды V8 получают первый опыт в Smalltalk VMs; и Dan Ingalls и Randal Schwartz недавно возвратились к работе Smalltalk после лет в дикой местности.

Всего наилучшего с Вашим поиском - сообщают нам то, что Вы решаете в конце.

15
ответ дан mykdavies 24 November 2019 в 07:12
поделиться

Lisp удовлетворяет все Ваши критерии, включая производительность, и это - единственный язык, который не имеет (странного) синтаксиса. Если Вы будете сторониться его на таком удивительно ill-informed/wrong-headed основание и следовательно будете пропускать опыт использования, например, Emacs+SLIME+CL, Вы будете делать себя большая плохая услуга.

14
ответ дан user23611 24 November 2019 в 07:12
поделиться

Вы описываете Ruby.

  • Хорошее метапрограммирование. Способность создать классы, методы, функции, и т.д. во времени выполнения. Предпочтительно, минимальное различие между кодом и данными, стилем Lisp.

очень легко расшириться , и изменяют существующие примитивы во времени выполнения. В рубине все - объект, строки, целые числа, четные функции.

можно также создать ярлыки для синтаксического сахара, например, с class_eval.

  • Хороший, чистый, нормальный синтаксис и последовательная, интуитивная семантика. В основном хорошо продуманный, забавный использовать, современный язык.

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

  • Несколько парадигм. Никакая парадигма не является правильной для каждого проекта, или даже каждой небольшой подпроблемы в рамках проекта.

можно следовать обязательный, объектно-ориентированный, функциональный и отражающий.

  • интересный язык, который на самом деле влияет на способ, которым каждый думает о программировании.

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

я попробовал Python, и он не соответствует Вашим важным моментам.

11
ответ дан FelipeC 24 November 2019 в 07:12
поделиться

Ваши 4 "важных" точки приводят к Ruby точно, в то время как 2 "несколько важных" точки, которыми управляет Python. Пусть будет так.

11
ответ дан Neo 24 November 2019 в 07:12
поделиться

Я использую Python для многих проектов, и я думаю, что Python действительно обеспечивает все функции, которые Вы попросили.

важный:

  1. Метапрограммирование: Python поддерживает метаклассы и класс среды выполнения / поколение метода и т.д.
  2. Синтаксис: Хорошо это так или иначе субъективно. Мне нравится синтаксис Python за его простоту, но некоторые Люди жалуются, что Python чувствителен к пробелу.
  3. Парадигмы: поддержки Python процедурное, объектно-ориентированное и основное функциональное программирование.
  4. я думаю, что Python имеет очень практический ориентированный стиль, это было очень вдохновляюще для меня.

Несколько важный:

  1. Производительность: Хорошо это - язык сценариев. Но запись C расширения для Python является общей практикой оптимизации.
  2. Документация: Я не могу жаловаться. Не, который детализировал, как кто-то может знать от Java, но его достаточно хорошего.

, Поскольку Вы - студент градиента, можно хотеть прочитать эту газету, утверждая, что Python - весь, ученому нужно . К сожалению, я не могу сравнить Python с Ruby, так как я никогда не использовал тот язык.

С уважением, Dennis

5
ответ дан xardias 24 November 2019 в 07:12
поделиться

Ну, если Вам не нравится синтаксис шепелявости, возможно, ассемблер является способом пойти.:-)

Это, конечно, имеет минимальное различие между кодом и данными, мультипарадигма (или возможно который без парадигм), и это - расширение ума (если утомительный), испытывают и с точки зрения изучения и с точки зрения приемов, которые можно сделать.

4
ответ дан rickardg 24 November 2019 в 07:12
поделиться

Io удовлетворяет все Ваши "Важные" точки. Я не думаю, что существует лучший язык там для того, чтобы сделать сумасшедшее meta хакерство.

4
ответ дан frigolitmonster 24 November 2019 в 07:12
поделиться

Сравните примеры кода, которые делают то же самое (соединение с новой строкой непустые описания объектов от a myList список) на различных языках (языки расположены в обратно-алфавитном порядке):

Ruby:

myList.collect { |f| f.description }.select { |d| d != "" }.join("\n")

Или

myList.map(&:description).reject(&:empty?).join("\n")

Python:

descriptions = (f.description() for f in mylist)
"\n".join(filter(len, descriptions)) 

Или

"\n".join(f.description() for f in mylist if f.description())

Perl:

join "\n", grep { $_ } map { $_->description } @myList;

Или

join "\n", grep /./, map { $_->description } @myList;

JavaScript:

myList.map(function(e) e.description())
      .filter(function(e) e).join("\n")

Io:

myList collect(description) select(!="") join("\n")

Вот руководство Io.

8
ответ дан 2 revs 24 November 2019 в 07:12
поделиться

Используйте JS, просто проверьте AJS (альтернативный синтаксис JavaScript) на моем github http://github.com/visionmedia , он даст вам более понятные замыкания и т. Д .: D

0
ответ дан 24 November 2019 в 07:12
поделиться

Относительно вашей основной точки (метапрограммирование): Версия 1.6 Groovy имеет встроенное программирование AST (абстрактное синтаксическое дерево) в качестве стандартной и интегрированной функции. Ruby имеет RubyParser, но это надстройка.

0
ответ дан 24 November 2019 в 07:12
поделиться

тот, который поддерживает хаки метапрограммирования, которые просто не могут быть реализованы на статически скомпилированном языке

Мне бы очень хотелось найти язык, который позволяет некоторые из интересных вещей, которые Лисп делает

Лисп может быть скомпилирован.

3
ответ дан 24 November 2019 в 07:12
поделиться

Честно говоря, что касается возможностей метапрограммирования go, Ruby и Python намного больше похожи, чем хотелось бы признавать некоторые из их приверженцев. Этот обзор обоих языков предлагает довольно хорошее сравнение / обзор:

Итак, просто выберите один на основе некоторых критериев . Может быть, вам нравится Rails и вы хотите изучить этот код. Может быть, SciPy вам нравится. Посмотрите на экосистему библиотек, сообщества и т. Д. И выберите одну. Ты конечно выиграл

17
ответ дан 24 November 2019 в 07:12
поделиться

Ruby был бы лучше Lisp с точки зрения «мейнстрима» (что бы это на самом деле не означало, но одна реальная проблема заключается в том, насколько легко было бы найти ответы на ваши вопросы по программированию на Лиспе, если вы захотите пойти с этим.) В любом случае, я обнаружил, что Ruby очень легко освоить. За то же время, которое я потратил на первое изучение Python (или других языков, если на то пошло), я вскоре начал писать лучший код, намного более эффективно , чем когда-либо раньше. Однако это всего лишь мнение одного человека; Полагаю, отнеситесь к этому с недоверием. На данный момент я знаю о Ruby гораздо больше, чем Python или Lisp, но вы должны знать, что я был человеком Python довольно долгое время, прежде чем я переключился.

Lisp определенно довольно крутой и заслуживает внимания; как вы сказали, размер сообщества и т. д. может измениться довольно быстро. При этом сам размер не так важен, как качество сообщества. Например, канал # ruby-lang по-прежнему заполнен невероятно умными людьми. Lisp, кажется, привлекает и некоторых действительно умных людей. Я не могу много говорить о сообществе Python, так как у меня не так много личного опыта, но иногда оно кажется «слишком большим». (Я помню, как люди довольно грубо говорили на своем IRC-канале, и из того, что я слышал от друзей, которые действительно увлекаются Python, это, кажется, скорее правило, чем исключение.)

В любом случае, некоторые ресурсы, которые вы можете найти полезными являются:

1) Серия прагматичных программистов по метапрограммированию Ruby ( http: //www.pragprog. com / screencasts / v-dtrubyom / the-ruby-object-model-and-metaprogramming ) - не бесплатно, но более поздние эпизоды весьма интригуют. (Код бесплатный, если вы хотите загрузить его и посмотреть, что вы узнаете.)

2) О Lisp, автор Пол Грэм ( http://www.paulgraham.com/onlisp.html ). Это немного старовато, но это классика (и ее можно скачать бесплатно).

6
ответ дан 24 November 2019 в 07:12
поделиться

Did you try Rebol?

3
ответ дан 24 November 2019 в 07:12
поделиться