1. Python / Говнокод #26708

    +2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    def get_build_version():
        """Return the version of MSVC that was used to build Python.
    
        For Python 2.3 and up, the version number is included in
        sys.version.  For earlier versions, assume the compiler is MSVC 6.
        """
        prefix = "MSC v."
        i = sys.version.find(prefix)
        if i == -1:
            return 6
        i = i + len(prefix)
        s, rest = sys.version[i:].split(" ", 1)
        majorVersion = int(s[:-2]) - 6
        if majorVersion >= 13:
            # v13 was skipped and should be v14
            majorVersion += 1
        minorVersion = int(s[2:3]) / 10.0
        # I don't think paths are affected by minor version in version 6
        if majorVersion == 6:
            minorVersion = 0
        if majorVersion >= 6:
            return majorVersion + minorVersion
        # else we don't know what version of the compiler this is
        return None

    Определение версии конпелятора, которой был собран «CPython».

    Запостил: TEH3OPHblu_nemyx, 30 Мая 2020

    Комментарии (40) RSS

    • SEO-пост.

      Совершенно логично, что если в штампе версии «1900», то это 14-я версия «Visual Studio» (19 - 6 = 13, но 13 пропускаем, потому что число несчастливое).
      Ответить
      • > 1900 это 14я версия

        Которая ещё называется 2015. Чтобы все окончательно запутать.
        Ответить
        • Чтобы ещё больше запутать, 2017 тоже называется 14, и 2019 тоже называется 14, только минорные версии различаются. Начиная с 2015, всё это говно ставится в директорию «Microsoft Visual Studio 14.0», а для 2017 и 2019 создаются поддиректории (типа VC\Tools\MSVC\14.15.26726).

          А теперь у них помимо MSVC ещё и «шланг» зачем-то есть (VC\Tools\ClangC2).
          Ответить
          • > тоже называется 14

            Ну у них и в версии что-то типа 1920 осталось. Так что теперь вообще хер отличишь.
            Ответить
            • Да, только последняя цифра может ещё меняться. Были выпуски 2017 с номерами конпелятора 1910, 1913, 1914, 1915...
              Ответить
            • Если я правильно понял, отличить можно.
              2015 себя подписывает как 1900.
              2017 — как 1910...1919 в зависимости от минорной версии.
              2019 — как 1920...1929 и т. д.
              Ответить
              • показать все, что скрытоvanished
                Ответить
                • А ещё
                  NT 5.1: Windows XP
                  NT 5.2: Windows Server 2003
                  NT6.0: Windows Vista, Windows Server 2008 (без R, попрошу не путать)
                  NT6.1: Windows 7, Windows Server 2008 R2 (именно с R2, а то могут ведь напутать)
                  NT6.2: Windows 8, Windows Server 2012
                  NT6.3: Windows 8.1, Windows Server 2012 R2 (такая же фигня с буквой R)

                  А ещё у нас был говнокод на «Йаже», который объясняет, почему не вышла Windows 9, а сразу появилась десятка.
                  Ответить
                • Нашёл интересное:
                  https://govnokod.ru/16791

                  А ещё на «йажаскрипте»:
                  if (navigator.appVersion.indexOf("Windows 9") != -1)


                  Именно поэтому «Windows 9» так и не вышла.
                  Ответить
                • показать все, что скрытоvanished
                  Ответить
              • Да, я не ошибся. Вот из хелпа:
                Visual Studio 6.0 		1200
                Visual Studio .NET 2002 (7.0) 	1300
                Visual Studio .NET 2003 (7.1) 	1310
                Visual Studio 2005 (8.0) 	1400
                Visual Studio 2008 (9.0) 	1500
                Visual Studio 2010 (10.0) 	1600
                Visual Studio 2012 (11.0) 	1700
                Visual Studio 2013 (12.0) 	1800
                Visual Studio 2015 (14.0) 	1900
                Visual Studio 2017 RTW (15.0) 	1910
                Visual Studio 2017 версия 15.3 	1911
                Visual Studio 2017 версии 15.5 	1912
                Visual Studio 2017 версии 15.6 	1913
                Visual Studio 2017 версии 15.7 	1914
                Visual Studio 2017 версии 15.8 	1915
                Visual Studio 2017 версии 15.9 	1916
                Visual Studio 2019 RTW (16.0) 	1920
                Visual Studio 2019 версии 16.1 	1921
                Visual Studio 2019 версии 16.2 	1922
                Visual Studio 2019 версии 16.3 	1923
                Visual Studio 2019 версии 16.4 	1924
                Visual Studio 2019, версия 16.5 1925
                Visual Studio 2019 версии 16.6 	1926
                Ответить
        • Со страницы https://windows.php.net/:

          All binary packages we were offering contained "vc#" (for instance, "vc14") in the filename to designate the Visual Studio version which has been used to build them. This number ("#") has tradionally been the major number of the respective platform toolset. The preview releases of Visual Studio 2017 shipped with platform toolset 15.00, so we used "vc15" to mark the files. The first GA release of Visual Studio 2017, however, shipped with platform toolset 14.10 (to signal the backward compatibility), but the internal Visual Studio version number stayed 15.00. To avoid confusion with already distributed packages, we stuck with the "vc15" marker. For our Visual Studio 2019 builds (PHP 7.4 and master) we finally changed from "vc#" to "vs#" (note the "s"), where the number now designates the major internal Visual Studio version number. We are planning to stick with this new naming scheme for the foreseeable future.

          Т.е. у VS2017 внутренний номер студии 15, внутренний номер тулсета 14.1x, _MSC_VER >= 1910; у VS2019 внутренний номер студии 16, внутренний номер тулсета 14.2x, _MSC_VER >= 1920.

          Правда, легко запомнить?
          Ответить
          • безумные шляпники, блин
            Ответить
            • Они вышли на опушку леса. Алиса вздрогнула от неожиданности - в эту минуту она думала только о пудинге.
              - Ты загрустила? - огорчился Рыцарь. - Давай я спою тебе в утешение песню.
              - А она очень длинная? - спросила Алиса. В этот день она слышала столько стихов!
              - Она длинная, - ответил Рыцарь, - но очень, очень красивая! Когда я ее пою, все рыдают... или...
              - Или что? - спросила Алиса, не понимая, почему Рыцарь вдруг остановился.
              - Или... не рыдают. Заглавие этой песни называется «Пуговки для сюртуков».
              - Вы хотите сказать - песня так называется? - спросила Алиса, стараясь заинтересоваться песней.
              - Нет, - ты не понимаешь, - ответил нетерпеливо Рыцарь. - Это заглавие так называется. А песня называется «Древний старичок».
              - Мне надо было спросить: это у песни такое заглавие? - поправилась Алиса.
              - Да нет! Заглавие совсем другое. «С горем пополам!» Но это она только так называется!
              - А песня эта какая? - спросила Алиса в полной растерянности.
              - Я как раз собирался тебе об этом сказать. «Сидящий на стене»! Вот какая это песня! Музыка собственного изобретения!
              Ответить
    • А в чём суть кода то? Нахер им эта версия?
      Ответить
      • показать все, что скрытоvanished
        Ответить
        • Кстати, для чего нужно все пакеты собирать одной версией? Чтобы на лишние рантаймы не ссылаться?
          Ответить
          • Чтобы собралось и UBца не соснуть. Они как бы только последние годы стали binary compatible. Кстати, удачи им с поиском последних версий конпелятора, там всё гораздо веселее чем в 10 и 14...
            Ответить
            • Я влез поглубже в питоновский distutils. Поиском конпелятора занимаются несколько файлов:
              ccompiler.py — выполняет общую диспетчеризацию;
              msvccompiler.py — ищет старое говно типа шестой и седьмой студии;
              msvc9compiler.py — ищет студию с 8-й (2005) по 12-ю (2013).
              _msvccompiler.py — ищет студии, начиная с 14-й (2015), причём для 2015 и 2017 отдельные функции.

              Грёбаные костыли...
              Ответить
              • _msvccompiler. Гениальное название.
                Ответить
                • По этому пакету целая рабочая группа:
                  https://mail.python.org/archives/list/[email protected]/
                  https://mail.python.org/pipermail/distutils-sig/
                  https://wiki.python.org/moin/Distutils/DiscussionOverview
                  Ответить
                  • > distutils

                    Не, ну это один из основополагающих пакетов питона. Ему можно рабочую группу.

                    Но название с подчерком это конечно полный пиздец.
                    Ответить
                    • Там ещё интереснее. Для 2015-й студии он просто смотрит ключ реестра. А для более новых импортирует ещё один модуль с подчерком.

                      Оцени задачу в багтрекере (он у меня почему-то не грузится):
                      http://web.archive.org/web/20191214085713/bugs.python.org/issue35067

                      Remove _distutils_findvs and use vswhere.exe instead.
                      Ответить
                      • http://isitblockedinrussia.com/?host=https%3A%2F%2Fbugs.python.org%2Fis sue35067

                        Yes! It appears that https://bugs.python.org/issue35067 is currently blocked in Russia.

                        Details:

                        URL https://bugs.python.org/issue35067
                        Domain bugs.python.org
                        IP 188.166.48.69
                        Decision 27-31-2018/Ид2971-18 made on 2018-04-16 by Генпрокуратура.

                        This block affects IP 188.166.0.0/17.
                        Ответить
                        • В рашке питон без багов. Слава роскомнадзору.
                          Ответить
                          • Кстати, про vswhere:
                            https://docs.microsoft.com/ru-ru/visualstudio/install/tools-for-managing-visual-studio-instances?view=vs-2019


                            https://github.com/microsoft/vswhere

                            vswhere -legacy -format json:
                            [
                              {
                                "instanceId": "VisualStudio.12.0",
                                "installationPath": "C:\\Program Files\\Microsoft Visual Studio 12.0\\",
                                "installationVersion": "12.0"
                              },
                              {
                                "instanceId": "VisualStudio.11.0",
                                "installationPath": "C:\\Program Files\\Microsoft Visual Studio 11.0\\",
                                "installationVersion": "11.0"
                              },
                              {
                                "instanceId": "VisualStudio.10.0",
                                "installationPath": "c:\\Program Files\\Microsoft Visual Studio 10.0\\",
                                "installationVersion": "10.0"
                              }
                            ]
                            Ответить
                        • показать все, что скрытоvanished
                          Ответить
                        • Царь борется со скрипушнёй.

                          Вот заблокировали бажного Питоха.

                          Всё правильно. Учите Си.
                          Ответить
                      • В нашем цирке новый номер: Питун на колёсахкостылях.
                        Ответить
                    • Вот тут вообще красиво:
                      https://github.com/python/cpython/pull/5228/commits/eb9c72e195021067b75a0615a5642ca7aaae3d62#diff-f367ef9efd9e0d75502e710b30271716


                      В последних версиях немного почистили, но всё равно скелеты остались.
                      Ответить
              • Гребанные не костыли, а аппарат искусственного воспаления легких = ивл
                Ответить
            • >Чтобы собралось и UBца не соснуть. Они как бы только последние годы стали binary compatible.

              Кроссплатформенный язык говорили они. Виртуальная машина там, байт-код, вотэтоврот всё.
              Ответить
              • Мне кажется, Борманд сказал про MSVC, а не про «Питон».
                Ответить
                • Так в итоге от этой платформушни страдает пайтушня.
                  Ответить

    Добавить комментарий