Jawa / Говнокод #27044 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
var io = java.io
var BufferedReader = io.BufferedReader
var BufferedWriter = io.BufferedWriter
var InputStreamReader = io.InputStreamReader
var OutputStreamWriter = io.OutputStreamWriter

var Socket = java.net.Socket
var socket = new Socket("localhost", 5050)
var input = new BufferedReader(new InputStreamReader(socket.getInputStream()))
var output = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

while(true){
  var data = input.readLine()
  console.log(data)
}

Один петух написал мне в три часа ночи с прозьбой помочь с кодом

Запостил: digitalEugene digitalEugene, (Updated )

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

    • переписал и починил, проверь
      local socket = require("socket")
      
      local server = socket.bind("*", 5050)
      local client = server:accept()
      while true do
        local line = client:receive()
        print(line)
      end


      насколько всё таки код короче и илегантнее на луа
      Ответить
        • не могу перевести на пхп, не знаю пхп
          Ответить
        • Добрый день!
          <?php
          
          $socket = socket_create(AF_INET, SOCK_STREAM,  SOL_TCP);
          socket_bind($socket, 'localhost', 5050);
          socket_listen($socket);
          $resource = socket_accept($socket);
          while(true) {
            $line = socket_read($resource, 80, PHP_NORMAL_READ); // останавливаться на \r, \n и на 80 символах
            echo $line, PHP_EOL;
          }
          Ответить
          • >AF_INET, SOCK_STREAM, SOL_TCP
            какая низкоуровневая параша это ваш пых по сравнению с луа

            язык для пердоликов и микрокалькуляторов
            Ответить
      • А я за «Python».
        import socketserver
        
        
        class Handler(socketserver.StreamRequestHandler):
            def handle(self):
                while True:
                    print(self.rfile.readline())
        
        
        with socketserver.TCPServer(('127.0.0.1', 5050), Handler) as server:
            server.handle_request()

        Просто, понятно, удобно. Надо вместо «TCP» использовать «UDP» или «юникс-сокеты»? Просто заменяем «TCPServer» на «UDPServer» или «UnixStreamServer».
        Ответить
        • какие-то глупые лесенки.. вы всегда в питоне каждую следующую строчку с отступом пишете?

          В луа вон всё красиво и стройно, и udp тамтоже есть
          Ответить
          • почему вы все переписываете кот на однопоточный одноразовый сервер для единственного клиента?
            Ответить
            • Этот сервер пока еще не очень популярен, мы не думаем, что у него будет клиентов больше, чем один.

              Хотя гост мог бы и на asyncio переписать
              Ответить
                • Хуй подсказывает вон, что и в луа есть кокорутины.

                  Хотя там всё довольно вручную конечно:
                  * читнул из неблокирующего сокета с таймаутом 0
                  * получил таймаут
                  * елднул управление следующей корутине
                  Ответить
                  • луа это же поебень, на которой аддоны к ворлд оф варкрафт писались
                    разве вов ещё кому-то нужен?
                    Ответить
                    • нет, но на lua можно писать плагины к FAR: http://www.softpanorama.org/OFM/FAR/index.shtml

                      А значит, язык актуален и нужен.

                      На самом деле много чего можно писать. Хуй вон игрушки на https://love2d.org/ пишет.

                      А вообще молодых людей, жующих риглисперминт, можно встретить где угодно:
                      https://pgconf.ru/media/2016/02/19/sergeev_05_02_2016.pdf

                      Зацени простоту интгерации с сями, кстати. Серьезно. Там есть пример.
                      Ответить
                      • > А вообще молодых людей, жующих риглисперминт, можно встретить где угодно:
                        а ещё есть plsh, ну и что теперь
                        ты хочешь сказать, что луа будет охуительно быстро работать для каких-то кейсов?
                        Ответить
                        • мы как-то сравнивали скриптушню на тупых задачах типа вывода хеллоу ворлд, и lua (судя по time) всех порвал

                          Ну оно и понятно: lua это тоненькая прослоечка совершенно, которая почти ничего сама не умеет, зато имеет приятный синтаксис и очень легко интегрируется с сями
                          Ответить
                            • так скриптушня так и работает обычно
                              * компилируется вбайт код
                              * запускает его
                              * иногда джитит (в случае JS)

                              Питон умеет результаты компиляции в байткод сохранить в .pyc, луа вон умеет luac.

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

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

                                Да и конпеляция скрипта у тебя один раз идёт при загрузке, в критичные места она обычно не попадает.
                                Ответить
                                • Если я его сам написал, то очень даже нужен.
                                  Байткод запустится чуть-чуть быстрее, и реверснуть его будет чуть-чуть сложнее

                                  Допустим, я гейдевка и бандлю с игрой пару скриптов
                                  Чобы мне их не кококококок?
                                  Ответить
                                  • > запустится чуть-чуть быстрее

                                    Ну это ж не кресты с шаблонами. Ты картинки дольше будешь грузить, чем эти скрипты запускать.
                                    Ответить
                                    • курочка по зернышку

                                      алсо, зачем не нужно, чтобы школьники туда лазили и чото там правили?
                                      А бинарь они вообще не опознают
                                      Ответить
                                  • > Чобы мне их не кококококок?

                                    Профита почти ноль, только проблем со сборкой и отладкой себе добавляешь.

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

                                    Ибо есть реальные эксплойты, которые на хосте произвольный код исполняют. Ассемблерный, да.
                                    Ответить
                                    • блин, чужие блобы я не собирался запускать) я про свои
                                      Ответить
                                      • Ну а зачем тебе этот гемор с запуском luac? Его придётся в систему сборки добавлять, самому дебажить игру неудобно будет, придётся постоянно переключаться между текстовыми и бинарными сборками.

                                        Там реально микросекунды - грамматика проще паскалевской, никаких оптимизаций нету.

                                        Я реально не понимаю, что ты пытаешься оптимизнуть. Ты же не будешь грузить скрипты с диска посреди рисования кадра.
                                        Ответить
                                          • > зачем пыхоперхоти zend compiler

                                            >> Ты же не будешь грузить скрипты с диска посреди рисования кадра

                                            А они грузят.
                                            Ответить
                          • Да так и есть.
                            В основном луа используют как прослойку чтобы не пердолится. И очень чосто и поддержку модинга. Например в факторке полостью весь base описан на lua. В Eu4 и в Ck2 Для различных параметров цвета, границ, времени. Например тут: https://docs.cryengine.com/display/SDKDOC4/Script+Usage
                            И вообще нет смысла обсуждать когда этот скриптовый язык победил именно в этой сфере.

                            Ещё Lua использовали в таких играх, как Crysis, King’s of Bounty, Warhammer, Аллоды онлайн, CS, Сталкер, Ведьмак, Sim City, Far Cry, Civilization V и.т.д.

                            Ещё на Lua часто пишутся плагины для nmap, wireshark, nginx или боты для Telegram. А ещё Википедия планирует использовать Lua для встраивания в MediaWiki

                            Lua также используется в обсерваториях, занимающихся исследованиями в области астрофизики и крупных университетах по всему миру (например, в Берлинском Техническом Университете). Также Lua стал чем-то вроде национального языка программирования у себя на родине и используется многими местными компаниями и исследовательскими центрами в самых разных сферах деятельности.

                            спиздил от сюда: https://learn-code.ru/yazyki-programmirovaniya/lua
                            Ответить
            • Сейчас придёт Снаут и перепишет этот код на многопоточный распределённый отказоустойчивый кластер для единственного клиента.

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

                  Особенно если с какой-нибудь джавой сравнить.
                  Ответить
                  • с шестой джавой, да

                    Вообще модель акторов это хорошо и правильно
                    Ведь ООП же изначально именно про это: есть объекты и есть месседжи между ними

                    А что ООП превратили в питушню, в том виновата симула и ее детки (кресты, жаба, сисярп)



                    куот:

                    Симула традиционно не считается объектно-ориентированным языком в каноническом смысле этого слова, в частности, создатель языка Smalltalk Алан Кэй имел в виду под этим термином семантику акторов, впервые реализованную в языке Плэнер Карла Хьюитта, а не расширение алголоподобных языков «объектной» нотацией

                    Пидары испоритли хорошую идею!

                    я за смаллток, и за руби
                    Ответить
                    • «Симула» взлетела, потому что на железе тех лет «Смоллток» тормозил.
                      Ответить
                      • Так и lisp машины наверное сосали по сравнению с PDP в плане перформанса, но это не мешает нам считать lisp лучшим языком, правда?
                        Ответить
                            • в схеме макросы не как в других лиспах так что поди она тоже не гомоиконна
                              Ответить
                              • Languages such as Lisp and its dialects,[5] such as Scheme,[6] Clojure[1], Racket[2] employ S-expressions to achieve homoiconicity.
                                Ответить
                                • в жсе можно получить строчку с телом функции и потом ее в функцию превратить если это не [native code]

                                  этого дочтаточно?
                                  Ответить
                                  • не достаточно

                                    в гомоиконах нет разницы между данными и кодом, см xslt, tcl
                                    Ответить
                                      • в том, что код на JS не является данными в JS
                                        Ответить
                                        • код на жсе разве не обычная строка которую можно eval или в конструктор функции хуйнуть?
                                          Ответить
                                          • https://news.ycombinator.com/item?id=8613866

                                            код представляется не как строка в JS.

                                            А в XSLT и данные и код это XML.

                                            А в TCL код выглядит так
                                            proc doAll _ "puts 1;"


                                            тут "puts 1" это просто строка
                                            Ответить
                                            • const factCode = n => n === 0 ? '1' : `${n} * ${factCode(n - 1)}`
                                              eval(factCode(4))
                                              eval(''.replace.call(factCode(4), /\*/g, '+'))

                                              перевел пример

                                              если что я не дурака валяю, реально пытался понять в чем разница
                                              Ответить
                      • Так практики в очередной раз победили кукаретиков
                        Ответить
                        • ну-ну, джаваскриптеры мне так же говорят, когда я обсираю их язык
                          Ответить
                          • – У нас настоящее ООП! Сигналы, сообщения, акторы!
                            – А у нас не тормозит )))
                            Ответить
                            • Если у вас тормозит, завезите jit или добавьте инструкции в CPU (см JS)
                              Ответить
                                • Smalltalk (1983) был пионером в области JIT-технологий (c) педивикия
                                  Ответить
                                    • сомневаюсь, что на фоне другой скриптушни он сильно тормозил

                                      Я не особо глубоко его ковырял, если честно.

                                      Но весьма уважаемый мною руби это наследник smalltalk, lisp и perl
                                      Ответить
                                        • функциональщина

                                          руби очень функциональный, он куда более функционален, чем пайтон, и был таким 20 лет назад, когда мейнстримое говно лямбд не умело
                                          Ответить
                                          • У меня есть мнение, что функциональный подход никогда не был специфической характеристикой Лиспа (а отличие от Схемы)
                                            Ответить
              • На мировом рынке максимум можно будет продать штук пять компьютеров. Допустим, из четырёх слепили отказоустойчивый кластер. Тогда на роль клиента остаётся единственный компьютер.
                Ответить
        • А я за руби
          require 'socket'
          
          s = TCPSocket.new 'localhost', 5050
          
          while line = s.gets
            puts line
          end
          
          s.close
          Ответить
          • А я за перл
            use warnings FATAL => 'all';
            use strict;
            use IO::Socket;
            
            my $sock = IO::Socket::INET->new(
                LocalAddr => '127.0.0.1',
                LocalPort => 5051,
                Proto     => 'tcp');
            my $client = $sock->accept();
            while (1) {
                my $data;
                $client->recv($data, 1024);
                printf $data;
            }
            Ответить
        • Конечно же я за Эйфорию.
          include std/socket.e as s
          
          sequence socket = s:create(s:AF_INET, s:SOCK_STREAM, 0)
          s:bind(socket, "0.0.0.0", 5050)
          s:listen(socket, 2)
          sequence client = s:accept(socket)
          puts(1, "Connected\n" & client[2])
          
          while 1 do
             object data = s:receive(client[1])
             if atom(data) then
          		if data = 0 then 
                              puts(1, "Client disconnected\n")
                          else 
                             printf(2, "Error: %d", data)
                          end if 
                          exit
             end if
             puts(1, data)
          end while


          Заметье, как легко и в тоже время профессионально выглядит код. Сразу видно, что это язык для серьезных людей, а не чичи-гага
          Ответить
            • К сожалению, нет.
              Единственный способ проверить тип -- вот так.

              Фуенкция, как ты верно уже смекнул, возвращает sequence -- последовательность байт -- в случае успеха, или атом -- код ошибки.
              Ответить
        • вообще он луа просил, ну ладно, я тогда клиегнта напишу
          telnet localhost 5050
          Ответить
          • Твой клиент отправляет какой-то мусор моему серверу, проверь.

            Хм... у телнета сервак что ли инициирует хендшейк? Я думал клиент.
            Ответить
            • твоя макака мочит хвост в моем стакане

              Кстати, с помощью inetd я могу написать многопользовательский сервер, а с помощью tcpwrappers безопасный. А с помощью sun rpc.. ну ладно, этооффтоп


              Я не понял про хендшейк.
              Я думал, там так.
              telnet: syn
              server: ack
              telnet: syn-ack
              и пошло-поехало
              Ответить
              • У телнета вроде были какие-то расширения, которые клиент с серваком могут согласовать.
                Ответить
              • > с помощью inetd

                Я так делал простенький REST на рагулярках для сервака, где лень было ставить что-то нормальное.
                Ответить
                • так вообще много чего раньше работало: почта, апаче, веб морда к самбе (сват или как-то так) а сейчас никто так не работает кроме ненужностей типа сервера time
                  Ответить

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

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8