Size: a a a

Compiler Development

2020 March 15

MB

Mikail Bagishov in Compiler Development
Александр Вольнов
По крайней мере там с памятью и адресной арифметикой напортачить сложно благодаря GC. Ну и для моих задач я обходился одними каналами. А мьютексы в Go не рекомендуют использовать.
Ну а в плюсах не рекомендуют использовать указатели и адресную арифметику, потому что есть всякие там unique_ptr. А в моих задачах можно и одними массивами обойтись.
источник

К

Константин in Compiler Development
Кстати, она уже написана?
источник

А

Алексей in Compiler Development
Александр Вольнов
Тогда вы наверняка с ним подружитесь.
А тебе чем этот язык не нравится? Понятно, что там много косяков и костылей типа пустых интерфейсов, не хватает дженериков, а вместо RAII defer нужно вручную писать.
Зато это один из немногих нативных safe языков. В нём легко писать асинхронный сетевой код и он не такой замороченный, как Rust. В нём просто сходу делается кросскомпиляция, которая была необходима для моего проекта на работе. Когда я показал своему коллеге-сишнику, как работает кросскомпиляция в Go, он не поверил, что это может быть так просто и сказал, что это волшебство какое-то.
обработка ошибок - самая большая боль
источник

А

Алексей in Compiler Development
точнее то непонятное нечто, что вместо нормальной обработки ошибок туда впихнули
источник

А

Алексей in Compiler Development
ну и совершенно небезопасные слайсы вместо нормальных динамических массивов здорового человека
источник

АВ

Александр Вольнов in Compiler Development
Mikail Bagishov
Даже так - есть баги, от которых C++ способен застраховать, а го нет. Например взять Read-лок у RWLock, а потом что-то туда писать.
В C++ горутин пока нет, поэтому на нём в принципе сложно сделать то, что мне нужно было. Я бы может и справился, но кроме меня никто на C++ там не писал и учиться с нуля им было бы нерационально. А на Go мой коллега уже через неделю неплохо стал писать.
А ещё Go хорошо ловит и сообщает об ошибках в рантайме. Почитал лог и видно номер строки и имя файла, где она произошла.
источник

А

Алексей in Compiler Development
иммутабельности нет вообще, что позор для языка у которого одна из главных фич - это concurrency
источник

MB

Mikail Bagishov in Compiler Development
Александр Вольнов
В C++ горутин пока нет, поэтому на нём в принципе сложно сделать то, что мне нужно было. Я бы может и справился, но кроме меня никто на C++ там не писал и учиться с нуля им было бы нерационально. А на Go мой коллега уже через неделю неплохо стал писать.
А ещё Go хорошо ловит и сообщает об ошибках в рантайме. Почитал лог и видно номер строки и имя файла, где она произошла.
То что в го есть гринтреды - бесспорно.
Но это не отменяет того факта, что го не является safe языком в отличие от раста, хаскеля, и т.д.
источник

АВ

Александр Вольнов in Compiler Development
Константин
Вы можете подкорректировать 1-ю версию текстового языка, чтобы он тоже соответствовал простой грамматике
Вообще по сути у них грамматики во многом соответствуют, только в тексте токены, а в бинаре байты. Может удастся их обобщить, я не думал в этом направлении.
источник

АВ

Александр Вольнов in Compiler Development
Константин
Кстати, она уже написана?
Если ты про форму Бэкуса-Наура, то я пока с ней детально не разбирался. На текущем этапе достаточно того, что у меня есть интуитивное представление о том, как закодить её парсер, потому что я уже делал подобные парсеры.
источник

A

Alex Ф-ф-фэils!🌠︙ in Compiler Development
Александр Вольнов
В C++ горутин пока нет, поэтому на нём в принципе сложно сделать то, что мне нужно было. Я бы может и справился, но кроме меня никто на C++ там не писал и учиться с нуля им было бы нерационально. А на Go мой коллега уже через неделю неплохо стал писать.
А ещё Go хорошо ловит и сообщает об ошибках в рантайме. Почитал лог и видно номер строки и имя файла, где она произошла.
Есть классические корутины уже, с новым 20-м стд
источник

АВ

Александр Вольнов in Compiler Development
Mikail Bagishov
То что в го есть гринтреды - бесспорно.
Но это не отменяет того факта, что го не является safe языком в отличие от раста, хаскеля, и т.д.
Ну ок, значит не safe, но всё равно выстрелить себе в ногу сложнее, чем в C++. Для меня это не принципиально, потому что я знаю C++ достаточно хорошо, но я не собирался всё один разрабатывать.
источник

MB

Mikail Bagishov in Compiler Development
Александр Вольнов
Ну ок, значит не safe, но всё равно выстрелить себе в ногу сложнее, чем в C++. Для меня это не принципиально, потому что я знаю C++ достаточно хорошо, но я не собирался всё один разрабатывать.
сложнее или нет - это вопрос нетривильный.
Хотя встроенные конструкции в плюсах менее безопасные (например нет проверки границ у оператора [] для встроенных коллекций), теоретически достижимый уровень безопасности в C++ выше.
источник

К

Константин in Compiler Development
Александр Вольнов
Если ты про форму Бэкуса-Наура, то я пока с ней детально не разбирался. На текущем этапе достаточно того, что у меня есть интуитивное представление о том, как закодить её парсер, потому что я уже делал подобные парсеры.
Что значит, не разбирались? Она изучается, максимум, за пол-часа, зато даёт огромный прирост в понимании языка, чей синтаксис задаёт. Это обязательный пункт для нормального построения парсеров, в том числе и без всяких генераторов кода по грамматике. Как документация к языку - это тоже №1 в списке
источник

АВ

Александр Вольнов in Compiler Development
Alex Ф-ф-фэils!🌠︙
Есть классические корутины уже, с новым 20-м стд
Это корутины, которые ни к чему не привязаны ещё. А в Go весь рантайм на горутинах завязан, блокирующие операции не блокируют поток, а обращаются к шедулеру, который переключает поток на другую горутину. В C++ это придётся руками делать, потому что там все блокирующие операции блокируют поток.
источник

A

Alex Ф-ф-фэils!🌠︙ in Compiler Development
Александр Вольнов
Это корутины, которые ни к чему не привязаны ещё. А в Go весь рантайм на горутинах завязан, блокирующие операции не блокируют поток, а обращаются к шедулеру, который переключает поток на другую горутину. В C++ это придётся руками делать, потому что там все блокирующие операции блокируют поток.
Ну инструменты уже есть
источник

A

Alex Ф-ф-фэils!🌠︙ in Compiler Development
И есть либа CppCoro
источник

OS

Oleg Stotsky in Compiler Development
>Это корутины, которые ни к чему не привязаны ещё. А в Go весь рантайм на горутинах завязан, блокирующие операции не блокируют поток, а обращаются к шедулеру, который переключает поток на другую горутину
источник

АВ

Александр Вольнов in Compiler Development
Mikail Bagishov
сложнее или нет - это вопрос нетривильный.
Хотя встроенные конструкции в плюсах менее безопасные (например нет проверки границ у оператора [] для встроенных коллекций), теоретически достижимый уровень безопасности в C++ выше.
Это если знать C++ и все хорошие практики на нём. Но я в команде был единственным, кто знал C++.
источник

OS

Oleg Stotsky in Compiler Development
Вот это не правда
источник