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

    +146

    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
    я придумал отличную идею для нового языка программирования.
    это будут смешанные присваивания.
    можно будет писать например так:
    x <- y (тоже самое что и x = y)
    или
    x -> y ( y = x)
    также обмен значений:
    x <-> y
    паралельное присваивание (для обоих видов):
    a,b,c -> x,y,z (x = a,y =b, z =c)
    множественное присваивание:
    a -> b -> c ( b = a, c = a)
    a <- b <- c ( a = b, b = c)
    и их комбинации
    x, y, z <- a,b,c <- i,j,k <- 1,2,3 -> d,e,f
    правда круто?

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

    Запостил: Fai, 02 Сентября 2011

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

    • интересно как выполнится например такое
      1, 2 -> y,x <-> x,y <-> y,x <- 1,2
      Ответить
      • Если предположить, что у всех операций одинаковый приоритет, о чем автор кода либо умолчал, либо забыл, либо не знал о том, что это такое, то последний выполнится y,x <- 1,2; что дает нам результат у = 1, х = 2.
        Вообще - неплохая идея для эзотерического языка программирования.
        Ответить
        • Интересная, но присваивания с инкрементом ( += ) как сюда впихнуть например?
          Ответить
          • a,b,c <+ 1,2,3 ?
            Ответить
            • с декрементом тогда весело
              Ответить
              • а также ошибки типа:
                x <- 1
                x < -1
                x<-1
                Ответить
                • Напоминает Scala. Там таких косяков наделать - раз плюнуть :)
                  Ответить
                  • Примерами таких косяков не поделитесь?
                    Ответить
                    • например, x<-1 в java распарсится как x < (- 1), а в scala - x.<-(1). Веселее всего будет в том случае, если в классе, к которому принадлежит x (пусть X), определён оператор
                      def <- (i: Int):T = something
                      Ответить
                    • То есть в scala есть имеем:
                      x <- 1 == x<-1 == x.<-(1)
                      x < -1 == x.<(1.unary_-())
                      Ответить
                      • Спасибо. Коварный синтаксис. Пожалуй, в таких случаях лучше ставить скобки для безопасности.
                        Ответить
                        • Да, код на правильный scala обычно легко читать, но писать его довольно сложно )
                          Ответить
              • А всё потому, что разработчики языков программирования отказывались признавать Unicode. Единственный язык с кучей псевдографических символов — APL — до сих пор считается панковским.

                Есть и другой путь: ключевые слова.
                Ответить
      • x,y,i -> p,o,t
        Ответить
      • Жду описание семантики следующих выражений:
        a -> b <- c
        x,y,z <- a,b <- c
        x,y,z -> a,b -> c
        a -> -b -> c
        a <- -b <- c
        a+b <- x+y
        a+b <-> x+y
        Ответить
        • 1.b=a;b=c;
          2.x=a;y=b;z=b;a=c;b=c;
          3.a=x;b=y;c=a;
          4.b=-a;c=-b;
          5.a=-b;b=c;
          6,7.для значений a+b и x+y выделяется память, затем уничтожается, но исходные переменные не меняются.
          Ответить
        • a -> -b -> c
          Эквивалентно
          -b <- a
          c <- (-b)
          Присваивать выражению вроде как пока нельзя.
          Ответить
    • >присваивания
      >паралельное присваивание
      >множественное присваивание

      Мутабельный петух раскукарекался.
      Ответить
    • "бешеной популярностью" будет пользоваться твоя жеппа на гей-вечеринках.
      Ответить
    • А чо с типизацией?
      Ответить
      • >....чтобы отличить тот анализ, который производится при компиляции, и который мы рассматриваем здесь, от динамической или [i]латентной[i] типизации в языках вроде Scheme, в которых теги типов...
        Ответить
      • А за типизацию у нас @wvxvw отвечает.
        Ответить
    • какой-то сахар для присваиваний один, где язык?
      Ответить
    • Любой функциональщик вам скажет, что присваивание не нужно.
      Ответить
      • Видели язык программирования METAFONT, придуманный Дональдом Кнутом для генерации шрифтов? Там есть и оператор присваивания :=, и оператор уравнения =, поэтому в порядке вещей код наподобие такого:
        x := 1;
        y := 2;
        x := x + 1;
        5 + x = y + z;
        Интерпретатор, поняв, что значение z не присвоено, попытается из последнего уравнения найти значение z. А предыдущая строка — не уравнение, а императивное присвоение, что рвёт мозг в одном контексте с уравнениями.
        Ответить
        • я не только видел, я на нём ещё и писал. шуток чтоли не понимаете.
          Ответить
        • LaTeX вообще обожаю, на мой взгляд, это лучшее, что изобрело человечество в плане подготовки электронных документов (из открытого ПО, с проприетарным софтом для высококлассной вёрстки я не знаком). The TeX Book у меня есть, но на plain TeX я не пишу - потребности нет.
          Ответить
    • идеи уже реализованы:
      1. операция обмена есть во многих языках, таких, как пхп, перл, питон, руби
      2. операция "стрелка" для присваивания тоже встречалась в каком-то языке со стековым программирование (то ли лисп, то ли что-то другое)

      не вижу революционных концепций, что бы браться за реализацию
      Ответить
    • "Здравствуйте. Я, Фай. Хотел что бы вы сделали язык, прогроммирования суть такова... Пользователь может присваивать налево, направо и в обе стороны. И если пользователь присваивает налево то налево стрелка, переменные через запятую набигают ошибки и непонимание. Можно строить цепочки..."
      Ответить
      • Я джва года жду такой язык.
        Ответить
        • Принципиально новый язык
          Ответить
          • Самое главное — не забыть написать IDE с нескучными обоями.
            Ответить
            • И ось, под которой IDE будет работать. Думаю 1млн € хватит
              Ответить
              • Первая коммерческая программа, которая будет написана на этом языке, будет выполнять функции антивируса.
                Ответить
                • первые 10 не коммерческих будут выполнять функции вирусов, дабы стимулировать общественность к покупке.
                  Ответить
    • Получится говнокодный язычёк.
      Ответить
    • Я еще только что придумал присваивание вверх, вниз и по кругу
      a -> b
      ^    |
      |    v
      d <- c

      Реквестирую присваивание вперед (к зрителю), назад, под произвольным углом и с подкруткой.

      Получим язык программирования типа "биллиард" для N-мерного пространства. Еще можно добавить ветер, гравитацию, трение и вазелин. Язык программирования будет дерьмовый, но игра забавная получится.
      Ответить
    • Язык, в котором есть только присваивания - не нужен.
      Ответить
    • Напомнило
      http://99-bottles-of-beer.net/language-perl-737.html
      Ответить
    • Fai - дибил, такая идея вообще никому не нужна.
      Ответить
      • http://bfolder.ru/_ph/33/2/96091926.jpg
        Ответить
      • да, тут нет мотивации для нового ЯП.
        нужна аргументация "кому и для чего это необходимо"
        Ответить
        • К слову, пасту я выложил сюда, потому что считаю идею говном, а полученный язык - говноязыком по определению.
          Комментарии к пасте я специально довёл до абсурда, но и этого оказывается было недостаточно каким-то идиотам.
          В следующий раз оберну нужным тегом.
          Ответить
        • Аргумент "Что бы был" некатит уже?
          Ответить
          • до полноценного ЯП тут не хватает определений. Что за ЯП из одних присваиваний?
            Ответить
            • x <- true;
              y <- 4565.2;
              Ответить
              • й <- "fgsfds";
                Ответить
                • Вот теперь полноценный ЯП.
                  1) Числа есть
                  2) булевые значение есть
                  3) Строки есть
                  4) Присваивания есть
                  Ответить
    • Предлагаю расширить одноместные операторы:
      x <- y ~ b -> a
      x <- (y < z) ! (b < c) -> a
      x ++ y
      x -- y
      /* потом расширить двухместные: */
             x
             ^
             |
             y
      a <- b + c
             z
      /* то же повторить для -, *, /, %, &, ^ */

      Очередь дойдёт и до тернарных конструкций:
      (x < y)? doA : doB ?(a < b)
      Ответить
      • P.S. Не знаю, как быть с тем, что - и | при повороте меняются ролями.
        Ответить
      • >>x <- y ~ b -> a
        >>x <- (y < z) ! (b < c) -> a
        Поподробнее можно?
        Ответить
        • Захотелось записать одной строкой x <- ~y и ~b -> a, но получилось некрасиво. С постинкрементом пример удачнее.
          Ответить
      • А < меняется на > в правой части? Уж зеркалить, так зеркалить.
        Ответить
    • А как же разработка gamedev'а?!!

      Диагональное и вихревое программирование...
      http://www.gamedev.ru/code/forum/?id=19939
      Ответить
    • Уже опередили: https://en.wikipedia.org/wiki/R_(programming_language)

      Выдержка из официальной документации (http://cran.r-project.org/doc/manuals/r-release/R-intro.html#Vectors-and-assignment):

      2.1 Vectors and assignment

      R operates on named data structures. The simplest such structure is the numeric vector, which is a single entity consisting of an ordered collection of numbers. To set up a vector named x, say, consisting of five numbers, namely 10.4, 5.6, 3.1, 6.4 and 21.7, use the R command
      > x <- c(10.4, 5.6, 3.1, 6.4, 21.7)

      This is an assignment statement using the function c() which in this context can take an arbitrary number of vector arguments and whose value is a vector got by concatenating its arguments end to end.7

      A number occurring by itself in an expression is taken as a vector of length one.

      Notice that the assignment operator (‘<-’), which consists of the two characters ‘<’ (“less than”) and ‘-’ (“minus”) occurring strictly side-by-side and it ‘points’ to the object receiving the value of the expression. In most contexts the ‘=’ operator can be used as an alternative.

      Assignment can also be made using the function assign(). An equivalent way of making the same assignment as above is with:
      > assign("x", c(10.4, 5.6, 3.1, 6.4, 21.7))

      The usual operator, <-, can be thought of as a syntactic short-cut to this.

      Assignments can also be made in the other direction, using the obvious change in the assignment operator. So the same assignment could be made using
      > c(10.4, 5.6, 3.1, 6.4, 21.7) -> x
      Ответить

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