1. Куча / Говнокод #26733

    +1

    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
    25. 25
    26. 26
    27. 27
    28. 28
    namespace Test;
    
    /**
     * MyTest (test/mytest.zep)
     */
    class MyTest
    {
        public function someMethod()
        {
            /* Variables must be declared */
            var myArray;
            int i = 0, length;
    
            /* Create an array */
            let myArray = ["hello", 0, 100.25, false, null];
    
            /* Count the array into a 'int' variable */
            let length = count(myArray);
    
            /* Print value types */
            while i < length {
                echo typeof myArray[i], "\n";
                let i++;
            }
    
            return myArray;
        }
    }

    Язык программирования «Зефир».

    https://docs.zephir-lang.com/0.12/en/introduction

    Запостил: TEH3OPHblu_nemyx, 03 Июня 2020

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

    • SEO-пост: извращения, компиляция, тупизация, языки.
      Ответить
    • Земфир
      Ответить
    • Йажа какая-то.

      >while i < length {
      Видимо сделали фигурные {} скобки обязательными, что дало возможность сделать круглые () скобки опциональными.
      Ответить
    • Фу блять, фу нахуй, какое же говнище.

      unsigned integer variables are like integer but they don’t have sign, this means you can’t store negative numbers in these sort of variables:
      
      uint a;
      
      let a = 50; 
      
      let a = -70; //automatically casted to 70
      
      let a = 100.25;//automatically casted to 100
      
      let a = null; //automatically casted to 0
      
      let a = false; //automatically casted to 0
      
      let a = "hello";//throws a compiler exception


      Особенно когда -70 НЕЯВНО превращается в 70.
      Ответить
      • > throws a compiler exception

        Это в рунтиме?
        Ответить
        • В рунтиме конеплятора.
          Ответить
          • Кококококой рунтиме )))

            А компилтиме конпелятора — это то, что зашито в сам конпелятор, и чтобы его изменить, нужно переконпилировать сам кокококонпелятор?
            Ответить
      • >> Особенно когда -70 НЕЯВНО превращается в 70.

        Они наврали. Ничего там не превращается. Он тупо высирает в сишный код как есть, а во что это превратится, зависит от того, какой тип используется в сишном коде.

        Разработчик sergeyklay не видит проблемы:
        https://github.com/phalcon/zephir/issues/1291
        Ответить
        • Дык сишное -70 это не 70. Как оно так получается то?
          Ответить
        • показать все, что скрытоvanished
          Ответить
          • У «PDP-10» в машинном слове 36 бит, причём машинные слова не разбиты на байты.

            Авторы одного из компиляторов «Си» для этой платформы решили разбить машинное слово на четыре байта по 9 бит.

            Ещё в DSP (digital signal processors) бывают большие байты. Там в байте спокойно может оказаться 64 бита.
            Ответить
    • https://docs.zephir-lang.com/0.12/en/motivation

      If You Are a C Programmer…
      
      C is one of the most powerful and popular languages ever created. In fact, PHP is written in C, which is one of the reasons why PHP extensions are available for it. C gives you the freedom to manage memory, use low level types and even inline assembly routines.
      
      However, developing big applications in C can take much longer than expected compared to PHP or Zephir, and some errors can be tricky to find if you aren’t an experienced developer.
      
      Zephir was designed to be safe, so it does not implement pointers or manual memory management, so if you’re a C programmer, you will feel Zephir less powerful, but more friendly, than C.
      Почему всякий отброс с «новым крутым языком» равняется на божественную Сишку?
      Ответить
      • >Zephir was designed to be safe, so it does implicitly convert -70 to 70
        Ответить
        • А -2147483648?
          Ответить
          • Проверяем:
            namespace Pituh;
            
            class Pituh {
                public function main() {
                    int i = -2147483648;
                    echo i;
                }
            }
            Выхлоп:
            ...
            PHP_METHOD(Pituh_Pituh, main) {
            
            	zend_long i;
            
            
            	i = -2147483648;
            	php_printf("%d", i);
            
            }
            Ответить
          • Пример с типом uint у меня не компилируется:
            [ERROR] Unknown type: uint in C:\pituh\pituh.zep on line 7

            Не знаю, как исправить.

            Вообще у них есть странные глюки парсера:
            https://github.com/phalcon/zephir/issues/309
            Ответить
            • С типом uchar прокатило. Выдал в сишный выхлоп литерал -2147483648 даже без ворнинга.
              Ответить
    • показать все, что скрытоvanished
      Ответить
      • Испытательный полигон:
        namespace Pituh;
        
        class Test {
            public static function main() {
                uchar i = 0;
                let i = -2147483648;
                let i = -70;
                let i = 3.62;
                echo i;
            }
        }

        Выхлоп:
        PHP_METHOD(Pituh_Test, main) {
        
        	unsigned char i;
        
        
        	i = 0;
        	i = -2147483648;
        	i = -70;
        	i = (long) (3.62);
        	php_printf("%c", i);
        
        }


        Какой анскилл )))
        Ответить
        • > Pituh_Test

          Падажжи, то есть классы Pituh\Test и Pituh_Test вызовут коллизию имен?
          Ответить
    • Ещё один багор:
      https://github.com/phalcon/zephir/issues/653

      Ворнинг при объявлении класса, имя которого начинается на букву «u», потому что после склейки имени неймспейса с именем класса получается «\u», что трактуется как начало литерала уникодного символа с шестнадцатеричным кодом.

      Т. е. если у нас в неймспейсе «Nya» объявлен класс «Uwu», то после склейки получается «Nya\Uwu», и компилятор ищет шестнадцатеричные цифры после «\U».
      Ответить

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