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

    0

    1. 1
    Подскажите программистских форумов.

    Чтобы общаться про компьютеры с братьями по разуму.

    Только без анальных правил и банов за мат. Чтобы свободное общение, так сказать. Нужны ресурсы типа говнокода, но более оживленные.

    Запостил: 123123123, 21 Августа 2017

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

    • SEO
      Ответить
    • Могу подсказать форум без анальных правил. Только с оральными. Такой же «оживлённый», как Говнокод.

      Нужен ли F#:
      http://holywars.ru/comments/10052
      printf vs std::cout:
      http://holywars.ru/comments/13710
      Delphi vs C++:
      http://holywars.ru/comments/759
      Java vs C#:
      http://holywars.ru/comments/70
      JVM vs .NET:
      http://holywars.ru/comments/219
      JS vs PHP:
      http://holywars.ru/comments/4176
      Статическая типизация vs динамическая:
      http://holywars.ru/comments/12184
      C++ vs Java:
      http://holywars.ru/comments/5413
      Декларативщина vs императивщина:
      http://holywars.ru/comments/15320
      Rust vs Go:
      http://holywars.ru/comments/14886
      Ответить
      • PHP vs PHP нету?
        Ответить
      • Ну раст-то лучше, чем го. О чем тут спорить?
        Ответить
        • > Ну раст-то лучше, чем го. О чем тут спорить?

          Они отлично дополняют друг друга, не понимаю, почему люди так любят линейно упорядоченные множества.
          Ответить
          • Я не люблю. Я просто считаю го говном.
            Ответить
            • А ты на расте много писал? Или ты просто очередной диванный аналитик?
              Ответить
              • Написал хеловорлд еще в далеком 2013, когда в расте были зеленые потоки и сборка мусора. Но не понятно, как это связано с моим отношением к го.
                Ответить
                • Я пробовал писать всяческие утилиты на Go, и это был весьма приятный опыт. На расте я честно пробовал писать самые простые вещи, исплевался. Т.е. теоретически выглядит он неплохо, а на практике ну его в сраку.
                  Хороший язык должен помогать бороться со сложностью, а не увеличивать её на ровном месте. Go неплохо справляется с это задачей.
                  Ответить
                  • Но в го приходится копипастить даже if a > b {} else {}, потому что нет ни дженериков, ни макросов. Какие-то дженерик контейнеры можно только через каст всего в войдзвездочку^W интерфейс{}. По сути, если бы не встроенные магические map, chan, и append, то го был бы абсолютно не юзабелен. Возможно, если прикрутить к нему пхп в качестве препроцессора, то станет получше...
                    А сложность раста - это же так, как мы, крестушки, любим.
                    Ответить
                    • > копипастить даже if a > b {} else {}
                      Это большая проблема, очень серьёзная. Да, отсутствие дженериков причиняет сильную фантомную боль поначалу, но она довольно быстро проходит, когда начинаешь использовать язык на практике. Потому что самые полезные полиморфные примитивы (массивы, хэш-таблицы, каналы) встроены в язык, вместо ErrorOr<T> есть multi-value return (T, error). Вот оверхед от интерфейсов иногда мешает на практике, zero-cost abstractions не хватает.
                      Кмк, для всякого бэкэнда Go очень даже хорош, ибо позволяет в краткие сроки написать быструю и понятную программу, которую поймут и смогут расширять даже люди, не особо знакомые с языком.
                      Ответить
                      • > Потому что самые полезные полиморфные примитивы (массивы, хэш-таблицы, каналы)
                        Мне кажется, этого не достаточно для комфортной жизни. А если захочется очередь? Использовать для этого канал? А если множество? Приспосабливать мапу? А если некий лру кэш?
                        Кажется, как долько задачи выходят за рамки простейшего клиент-серверного бойлерплейта, го проявляет себя во всей красе и начинается боль.
                        Ответить
                        • > А если захочется очередь?
                          Можно сделать на базе массива, примерно как в пакете heap.

                          > Приспосабливать мапу?
                          Да.

                          > А если некий лру кэш?
                          Если хочется универсального решения, придётся перейти на interface{} и тайп-ассёрты. Там, где начинаются полиморфные деревья, заканчивается система типов Go.
                          С другой стороны, если нужен LRU, часто достаточно мономорфной реализации, заточенной под конкретный тип. Конечно, каждый
                          плюсовик (включая меня) начинает сразу ваять сложную универсальную вундервафлю, параметризованную всяческими policy, а в конце рабочего дня, уставший, использует её ровно один раз для конкретного типа.
                          Ответить
                          • > как в пакете heap

                            Ну вот о том речь, что начинаются касты в интерфейс{} и обратно.
                            Ответить
                            • > начинаются касты в интерфейс{}

                              Суть в том, что можно "типобезопасно" смотреть в строго типизированный heap[0] для получения минимума/максимума (это всё равно часто приходится делать, Peek() не завезли), а результат Pop() игнорировать.
                              Ответить
                      • https://pbs.twimg.com/media/DEjApdzXcAAlhH7.jpg:large
                        Ответить
                        • https://mobile.twitter.com/yogthos/status/883058510275149826/photo/1
                          Ответить
                          • Всегда так делаю.

                            А вообще проще написать генератор. На чём угодно. Да хоть в bat-файле.
                            Ответить
                            • Автоматизировал.

                              #!/usr/bin/env python
                              
                              import jinja2
                              import sys
                              
                              print jinja2.Template(sys.stdin.read()).render()


                              package main
                              
                              import (
                                  "fmt"
                              )
                              
                              {% for t in ['float32', 'float64'] %}
                              func Min{{t[0] | upper + t[1:]}}(a, b {{t}}) {{t}} {
                                  if a < b {
                                      return a
                                  } else {
                                      return b
                                  }
                              }
                              {% endfor %}
                              
                              
                              func main() {
                                  fmt.Println(MinFloat32(0.1, 0.22))
                              }


                              cat generic.go | ./preprocess.py | go tool compile -o generic.o /dev/stdin
                              go tool link -o generic generic.o
                              ./generic
                              0.1
                              Ответить
                              • > python

                                Фи, пацаны генерят го-код исключительно на го.
                                https://ideone.com/FkS0sP
                                вешаем на go generate и катим в прод

                                Забавно, оказалось, что go/ast не предназначен для генерации кода, только для парсинга.
                                Ответить
                          • Царская мономорфизация!
                            Ответить
          • Кстати, а Clay совсем закопали?
            Ответить
            • > Clay совсем закопали?

              https://groups.google.com/forum/#!forum/clay-language
              Да, всё давно уже тихо. Все форки тоже засохли.
              Ответить
        • У раста коммьюнити ужасно, если честно. Люди, которые не ели ничего слаще морковки, вдруг открыли для себя один очень частный случай статической верификации (настолько частный, что его можно алгоритмизировать), и теперь считают свой раст какой-то вершиной инженерной мысли.
          Ответить
          • Меня удручает маркетинговая политика го-фанбоев. Простой язык с нормальной инфраструктурой преподносится как серебряная пуля. Мне действительно нравится язык, но статьи вроде https://blog.plan99.net/modern-garbage-collection-911ef4f8bd8e считаю очень полезными. Надо называть вещи своими именами.
            Ответить

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