Python 3.0 и эволюция языка

Еще один очень минимальный подход:

trap 'SECONDS=0' DEBUG
export PS1='your_normal_prompt_here ($SECONDS) # '

Показывает количество секунд с момента запуска последней простой команды. Счетчик не сбрасывается, если вы просто нажмете Enter, не вводя команду, что может быть удобно, когда вы просто хотите узнать, сколько времени прошло с тех пор, как вы в последний раз что-то делали в нем. Он отлично работает для меня в Red Hat и Ubuntu. Это не работало для меня под Cygwin, но я не уверен, что это ошибка или просто ограничение на попытку запустить Bash под Windows.

. Один из возможных недостатков этого подхода заключается в том, что вы сохраняете сброс SECONDS , но если вам действительно нужно сохранить SECONDS в качестве количества секунд с момента вызова оболочки, вы можете создать свою собственную переменную для счетчика PS1 вместо прямого использования SECONDS. Другим возможным недостатком является то, что значительная секундная величина, такая как «999999», может быть лучше показана как дни + часы + минуты + секунды, но легко добавить простой фильтр, такой как:

seconds2days() { # convert integer seconds to Ddays,HH:MM:SS
  printf "%ddays,%02d:%02d:%02d" $(((($1/60)/60)/24)) \
  $(((($1/60)/60)%24)) $((($1/60)%60)) $(($1%60)) |
  sed 's/^1days/1day/;s/^0days,\(00:\)*//;s/^0//' ; }
trap 'SECONDS=0' DEBUG
PS1='other_prompt_stuff_here ($(seconds2days $SECONDS)) # '

переводит «999999» в «11days, 13: 46: 39». Сед в конце меняет «1days» на «1day» и отбрасывает пустые начальные значения, такие как «0days, 00:». Отрегулируйте вкус.

13
задан Toni Ruža 7 November 2008 в 21:11
поделиться

12 ответов

Стоит упомянуть, что обратная совместимость несет собственные расходы. В некоторых случаях почти невозможно развить язык идеальным способом, если 100%-я обратная совместимость требуется. Реализация Java дженериков (который стирает информацию о типе во время компиляции, чтобы быть backwardly-совместимой) является хорошим примером того, как реализование опций с 100%-й обратной совместимостью может привести к субоптимальной функции языка.

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

7
ответ дан tzot 7 November 2008 в 21:11
поделиться
  • 1
    @Pacerier, JavaScript теперь поддерживает типизированные массивы (arraybuffers) и Блобы, которые являются собственными двоичными типами. Они могут быть отправлены и получены по WebSocket непосредственно без необходимого преобразования. Эти типы (и поддержка Websocket) поддерживаются в текущих выпусках Chrome, Firefox, Opera и будут поддерживаться в IE10. – kanaka 17 July 2012 в 19:34

Единственный язык, о котором я могу думать для попытки такого изменения по транспортировке нефти и газа, был бы Perl. Конечно, Python бьет Perl к той конкретной финишной черте путем выпуска сначала. Нужно отметить, однако, что изменения Perl намного более обширны, чем Python и вероятно будут более трудными к detangle.

(существует цена за Perl "существует больше чем Один Способ Сделать Это" философия.)

существуют примеры как изменения от версии до версии основанных на.NET языков (нелепый, полагая, что смыслом.NET, как предполагалось, была устойчивость API и межплатформенная совместимость). Однако я едва назвал бы те языки "зрелыми"; это всегда было больше design-on-the-go, build-the-plane-as-we-fly подход к вещам.

Или, поскольку я склонен думать о нем, большинство языков прибывает или из "органического роста" или из "спроектированной конструкции". Perl является идеальным примером органического роста; это запустилось как необычное крыло инструмента обработки текста awk/sed и превратилось в полный язык.

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

идея сделать эти виды далеко идущих изменений несколько в новинку для языков программирования, потому что сами языки программирования изменились по своей природе. Это раньше было, что методологии программирования изменились только, когда новый процессор вышел, который имел новую систему команд. Ранние языки склонялись к любому быть таким образом низкий уровень и соединены с ассемблером (например, C) или столь совершенно динамичный по своей природе (Forth, Lisp), что такое изменение по транспортировке нефти и газа даже не подошло бы как соображение.

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

я думаю в дни для прибытия, Глобальная Блокировка Интерпретатора окажется более центральной, чем изменения синтаксиса. Хотя новая многопроцессорная библиотека могла бы облегчить большую часть из этого.

16
ответ дан Jason L 7 November 2008 в 21:11
поделиться
  • 1
    Я испытываю затруднения из-за base64 решения. Для меня, кажется, что, если данные, которые должны быть закодированы, имеют недопустимые символы UTF-8 в нем, звоня atob на нем результаты в " INVALID_CHARACTER_ERR: Исключение DOM 5" на хроме или " Строка содержит недопустимый character" на Firefox. Например, atob (" aGVsbG8 =") дает " hello" но atob (" AQAAA") приводит к той ошибке. – marc40000 9 March 2012 в 14:55

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

также, Lua 4 to 5 был довольно значительным; но ядро языка так минимально, что даже широко достигающие изменения документируются в несколько страниц.

2
ответ дан Javier 7 November 2008 в 21:11
поделиться

C# и платформа.NET повредили совместимость между версиями 1.0 и 1.1, а также между 1,1 и 2.0. Запущенные приложения в различных версиях, требуемых, имея несколько версий времени выполнения.NET, установлены.

, По крайней мере, они действительно включали мастер обновления для обновления источника от одной версии до следующего (это работало на большую часть нашего кода).

4
ответ дан Josh 7 November 2008 в 21:11
поделиться
  • 1
    BTW, если Вы устраняете проблемы, которые я отметил, я отменю downvote. – kanaka 26 April 2011 в 15:13

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

Много примеров этого включенного переименования языка.

Алгол 60 и Алгол 68 так отличались, что встречи по Алголу 68 разбились на фракции. Алгол 68 фракций, фракция Паскаля и фракция PL/I.

Паскаль Wirth, превращенный в Modula-3. Это было очень похоже на Паскаль - очень похожий синтаксис и семантику - но несколько новых возможностей. Это был действительно Паскаль 2 без обратной совместимости?

Lisp к вещи Схемы включил переименовывание.

, Если Вы разыскиваете сканирование старого язык программирования B руководство, Вы будете видеть, что эволюция к C выглядит довольно возрастающей - не радикальный - но это действительно повреждало совместимость.

Фортран существовал во многих формах. Я не знаю наверняка, но я думаю, что Фортран Digital 90 для VAX/VMS не был абсолютно совместим с древними программами IV Фортрана.

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

Нижняя строка я думаю, что взгляды и изучение неизбежно. У Вас есть три ответа на изучение ограничений языка.

  1. Изобретают новый язык, это является совершенно несовместимым.

  2. Возрастающее изменение, пока Вы не вынуждены изобрести новый язык.

  3. совместимость Повреждения управляемым, вдумчивым способом.

я думаю, что № 1 и № 2 являются оба путями труса. Зажимание старого легче, чем попытка сохранить его. Сохранение каждой детальной функции (неважно, как плохо) является большой работой, частью его минимального значения.

Коммерческие предприятия выбирают трусливые подходы от имени "нового маркетинга" или "сохранение наших существующих клиентов". Вот почему коммерческие предприятия программного обеспечения не являются рассадниками инноваций.

я думаю, что [только 1 123] проекты с открытым исходным кодом могут быть инновациями объятия в способе, которым сообщество Python занимается этим изменением.

6
ответ дан S.Lott 7 November 2008 в 21:11
поделиться
  • 1
    - 1, любое совместимое кодирование UTF-8 будет работать. Кроме того, описание плагинов как 100% JavaScript является немного вводящим в заблуждение, так как плагины требуют загрузки и установки и обычно являются не совместимым перекрестным браузером. Т.е. плагины используют средства браузера, не доступные в нормальном контексте JavaScript. – kanaka 26 April 2011 в 14:23

Команда Python очень упорно работала для создания отсутствия обратной совместимости максимально безболезненным к точке, где 2,6 релиза Python были созданы с умом к безболезненному процессу обновления. Как только Вы обновили до 2,6 существуют сценарии, которые можно выполнить, который переместит Вас в 3,0 без проблемы.

9
ответ дан Andrew Cox 7 November 2008 в 21:11
поделиться

Цена настаивания почти абсолютном назад совместимость просто слишком высока. Проведите две минуты, программируя в C++, если Вы хотите видеть почему.

13
ответ дан dsimcha 7 November 2008 в 21:11
поделиться
  • 1
    @marc40000, можно закодировать (window.btoa) любую строку (неважно, какие странные значения binary/unicode это имеет в нем). Для декодирования строки (window.atob) это должен быть действительный стандарт base64 закодированный. Что означает, что это может только использовать стандартные 64 base64 символа (A-Z, a-z, 0-9, +,/), и это должно быть дополнено к четырехбайтовой границе с " = ". в Вашем случае Ваша ошибка состоит в том потому что " AQAAA" не закодированный base64. Это слишком коротко и не заполнено. Это работает: atob (" AQAAAA ==") – kanaka 10 March 2012 в 19:45

gcc регулярно изменяется, как он обрабатывает C++ почти каждый незначительный выпуск. Конечно, это - больше последствие сжатия gcc, как они следуют правилам и самого меньшему количеству C++, изменяющегося.

0
ответ дан Ignacio Vazquez-Abrams 7 November 2008 в 21:11
поделиться
  • 1
    Точно: можно ли процитировать единственный пример использования этого и тот который couldn’t быть решенными лучше / одинаково хорошо использование dynamic_cast? – Konrad Rudolph 19 July 2011 в 19:46

Perl 6 также проходит этот тип разделения прямо сейчас. Perl, который 5 программ не выполнят непосредственно на Perl 6, но будет переводчиком для перевода кода в форму, которая может работать (я не думаю, что это может обработать 100% случаев).

Perl 6 даже имеет свою собственную статью о Википедии.

1
ответ дан Greg Hewgill 7 November 2008 в 21:11
поделиться
  • 1
    Это, до сих пор, похоже на самое близкое к тому, чтобы быть " answer".... – Richard Corden 20 July 2011 в 15:13

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

1
ответ дан Alex 7 November 2008 в 21:11
поделиться
  • 1
    @Konrad Rudolph: Да, существует. dynamic_cast бросит производный класс к базовому классу очень хорошо, поэтому если оператор сравнения, который называют, будет в базовом классе, Вы won' t получают функциональность, которую Вы хотите. – Thomas Minor 19 July 2011 в 20:58

Не был бы VB6 на VB.net быть самым большим примером этого? Или Вы все считаете их двумя отдельными языками?

4
ответ дан Greg 7 November 2008 в 21:11
поделиться
  • 1
    @kanaka Да, я вижу то, что Вы имеете в виду, и сделанный немного убираются – sra 27 April 2011 в 06:05

Новая версия языка программирования Ruby также повредит совместимость.

И думают о библиотеках, которыми можно было бы пользоваться: gtk, QT, и так далее (у них также есть несовместимые версии).

я думаю, что несовместимость иногда необходима (но не слишком часто) для поддержки прогресса.

0
ответ дан pihentagy 8 November 2008 в 07:11
поделиться
  • 1
    @tp1: Хм.... таким образом я должен задаться вопросом что ' typeid' дает нам? Если я понимаю Ваш последний комментарий you' ре говоря, что class I реализации необходимый интерфейс так или иначе - в этом случае мы могли просто использовать шаблон "посетитель" и we' d пишут посетителям, которые будут воздействовать на узлы, о которых они заботятся и игнорируют узлы они don' t. Никакой typeid или void* требуемый. – Richard Corden 22 July 2011 в 20:15
Другие вопросы по тегам:

Похожие вопросы: