The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Facebook развивает TransCoder для перевода кода с одного языка программирования на другой, opennews (?), 06-Окт-20, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


51. "Facebook развивает TransCoder для перевода кода с одного язы..."  +4 +/
Сообщение от ixrws (??), 06-Окт-20, 18:20 
Полная хрень. Впрочем любой кто более-менее серьёзно либо ковырялся в компиляторах либо сталкивался с переписыванием кода с одного языка на другой - прекрасно понимает, что никакие нейросети тут не по могут. Если эта нейросеть будет иметь мозг, как хотя бы 100 спецов на разных языках и именно что будет думать, когда переписывает код, тогда да. Но до этого нынешние нейросети никогда, то есть ни завтра, ни послезавтра, ни через 100 лет не дорастут. Они работают не так просто, человека заменить не могут, опыт не накапливают, зарплату не получают, детей не растят.
В идеале, если выкинуть нахрен эти нейросети, можно сделать компилятор скажем из python в C++ и наоборот. Но вначале он будет настолько тупой(как сейчас и есть подобные компиляторы), что конвертированный код будет непригоден вообще ни для чего. А потом, если вложить туда мегабабки и миллионы часов разработки, можно будет добиться, чтобы более-менее стандартные варианты кода оно хоть как-то бы преобразовывало не создавая кучу ошибок и результатирующий код работал бы хотя бы не медленее оригинала. Добиться же нормального преобразования кода теоретически можно, но боюсь тут уже даже мегабабки не помогут, слишком много часов разработки.

Короче говоря, нормальный преобразователь должен не только тупо делать реализацию malloc в python чтобы там работал код, который из С конвертировали. А должен будет делать в зависимости от ситуации массивы, словари, объекты. И наоборот. А не как сейчас когда скомпиляют какой-нибудь python или perl в C, а в итоге код в лучшем случае также работает, а то и медленее. Про количество ошибок порождённых и говорить нечего.

А что до юнит тестов кода, то это невозможно технически. Если бы можно было с помощью анализаторов выловить все проблемы, то никто бы даже не рыпался выдумать всякие умные указатели, rust и прочие. Просто бы добавили поддержку анализаторов во все ide и разработчик бы не ошибался. Но как мы знаем, даже Microsoft Office не может даже пунктуацию то толком исправлять. Куда уж миру нормальных анализаторов.

Ответить | Правка | Наверх | Cообщить модератору

84. "Facebook развивает TransCoder для перевода кода с одного язы..."  –1 +/
Сообщение от Аноним (85), 06-Окт-20, 22:48 
Не придирайся. Качество - дело наживное.
Ответить | Правка | Наверх | Cообщить модератору

102. "Facebook развивает TransCoder для перевода кода с одного язы..."  +3 +/
Сообщение от Ordu (ok), 07-Окт-20, 04:02 
> Полная хрень.

Прежде чем кидаться такими утверждениями о проделанной кем-то работе, стоит поинтересоваться тем, какие конкретно задачи автор решал, и насколько эти задачи актуальны. В новости есть ссылка на научную статью, а в научных статьях принятно об актуальности писать в абстракте (кратко) и во введении. Там же во введении всегда можно найти отсылки к related works, и узнать про то, как данное исследование/данная разработка вписывается в эти related works. И если бы ты открыл эту статью, то ты легко бы нашёл там следующее:

> Migrating an existing codebase to a modern or more efficient language like Java or C++ requires expertise in both the source and target languages, and is often costly. For instance, the Commonwealth Bank of Australia spent around $750 million and 5 years of work to convert its platform from COBOL to Java. Using a transcompiler and manually adjusting the output source code may be a faster and cheaper solution than rewriting the entire codebase from scratch. In natural language, recent advances in neural machine translation have been widely accepted, even among professional translators, who rely more and more on automated machine translation systems. A similar phenomenon could be observed in programming language translation in the future.

Это про востребованность решения. В области, где баксы крутятся сотнями миллионов, работа нацеленная на повышение продуктивности труда и снижение стоимости может оказаться очень прибыльной. При этом, если ты подумаешь, то ты поймёшь, что чем дешевле будет перевод с языка на язык, тем больше таких переводов будет выполняться -- это закон спроса-предложения из экономики. А чем больше переводов тем, потенциально, больше денег.

Правда тут есть интересные утверждения, которые не подкреплены ссылками -- было бы неплохо ссылку на описание того, что именно делал Commonwealth Bank of Australia, и по поводу профессиональных переводчиков полагающихся на поддержку машинного перевода очень хочется ссылку: откуда авторы знают про них? Где-то что-то слышали об этом? Насколько их информация достоверна? Может они на опеннете слышали об этом? Но на опеннете чего только не услышишь.

А насчёт того, что реально было сделано:

• We introduce a new approach to translate functions from a programming language to another,
that is purely based on monolingual source code.

Демонстрация нового подхода, бла-бла-бла... любопытно, конечно, но ни о чём.

• We show that TransCoder successfully manages to grasp complex patterns specific to each
language, and to translate them to other languages.

Вот это уже интереснее: человек мыслит о коде паттернами. Чтобы понять код, программист не столько разглядывает индивидуальные выражения и строчки, сколько пытается ухватить полную картину и переформулировать код в терминах типа "итерация по элементам массива", "поиск элемента в массиве", "операция fold/filter/...", инициализация... Человеку, при наличии некоторого опыта, это даётся легко, а вот алгоритмы вечно с этим имеют огромные проблемы. В то же время нейросетки отличаются от алгоритмов тем, что им выявление паттернов даётся довольно просто.

• We show that a fully unsupervised method can outperform commercial systems that leverage
rule-based methods and advanced programming knowledge.

Не совсем ясно, что имеется в виду под "advanced programming knowledge" -- но парой абзацев выше можно найти "Currently, the majority of transcompilation tools are rule-based; [...] they apply handcrafted rewrite rules. Creating them requires a lot of time, and advanced knowledge in both the source and target languages." То есть фишка в том, что для создания rule-based системы нужны дорогущие специалисты, которые шарят в исходном и целевом языке. С системой же на нейросетках можно сэкономить, посадив вместо команды таких специалистов студента, который будет принимать багрепорты в виде примеров кода, которые плохо транслируются, и загонять их в набор сэмплов для обучения нейросетки. Такого студента можно за месяц научить выполнять все эти работы и платить ему не $200k в месяц, а $50k. Это круто, резко скидывает стоимость проекта.

Но стоимость была бы не важна, если бы не "outperform commercial systems", что уже серьёзная заявка. Если коммерческие системы, которые зарабатывают денег тем, чтобы такие системы пилить и применять, могут проиграть конкуренцию нейросетке, которую может натренировать любой Васян, скачав код с github'а и прикупив себе парочку видеокарт, то это очень серьёзно. Это потенциальный game changer.

• We build and release a validation and a test set composed of 852 parallel functions in 3
languages, along with unit tests to evaluate the correctness of generated translations.

Что говорит нам о том, что эта статья не просто теоретическая статья, но вполне практическая статья, где можно надеятся найти методологию оценки/контроля качества перевода кода, которая на практике важнее, чем автоматизация перевода.

• We will make our code and pretrained models publicly available.

Ок. Это значит, что можно поиграться, и оценить перспективы "на глаз", прежде чем тратить время на серьёзное погружение в тему.

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

Такого рода утверждения в голове у человека возникают примерно так: явление X никогда не наблюдалось в прошлом, следовательно, по принципу индукции, явление X никогда не будет наблюдаться в будущем. Но фишка в том, что индукция (не матиндукция, а индукция как инструмент естественных наук) -- это довольно хитрая штука, и применять её надо аккуратно. Люди, чтобы не забывать об этом, придумали мудрое высказывание "всё когда-нибудь случается в первый раз". Оно не покрывает всех граблей применения индукции, но иногда всё же полезно.

Собственно я это к тому, что если ты не будешь думать о том, что ты думаешь, как ты думаешь, и зачем ты это думаешь, то ты продолжишь думать о всякой туфте, доказывая никому не нужные утверждения, причём потенциально ложные утверждения. Ведь ты бы мог думать совершенно другие мысли. Например о том, что у этой разработки есть потенциал изменить игровую площадку, на которой разворачивается бизнес по переписыванию кода. Такие изменения игровых площадок дают возможность новым игрокам присоединиться к игре, и одним из таких игроков можешь быть ты. Может быть тебе это неинтересно -- но это другой вопрос: если ты не научишься видеть такого рода изменения игровых площадок, у тебя не будет возможности заметить вовремя такие изменения, которые тебе будут интересны, и ты будешь узнавать об интересных тебе возможностях задним числом, то есть они для тебя будут упущенными возможностями.

Ответить | Правка | К родителю #51 | Наверх | Cообщить модератору

112. "Facebook развивает TransCoder для перевода кода с одного язы..."  +1 +/
Сообщение от myhand (ok), 07-Окт-20, 07:38 
> Это про востребованность решения.

Ну-ну.

> В области, где баксы крутятся сотнями миллионов, работа нацеленная на повышение продуктивности труда и снижение стоимости может оказаться очень прибыльной.

Че-т я не вижу кобола в списке этой приблуды, равно как и оценки стоимости
миграции с ее помощью.

> С системой же на нейросетках можно сэкономить, посадив вместо команды таких специалистов студента, который будет принимать багрепорты в виде примеров кода, которые плохо транслируются, и загонять их в набор сэмплов для обучения нейросетки. Такого студента можно за месяц научить выполнять все эти работы и платить ему не $200k в месяц, а $50k. Это круто, резко скидывает стоимость проекта.

Не уверен.  Положим, если вовсе не скомпилилось - это баг, который васян-студент может
загнать в базу.  А если скомпилилось, но с багом в логике, что вылетит хрен
знает когда в рантайме?

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

PS: Видел от фейсбушников (частью - тех же) статью про использование машинного
обучения в задачах компьютерное алгебры: интегрирование, решение ОДУ.  Но это примеры,
где сравнительно легко проверить корректность ответа (т.е. его синтаксическую корректность
и, например, производную для интеграла - что просто).  Это вполне имеет смысл.
А вот в данном пример - больше выглядит на то, как сейчас машинное обучение суют
во все нескромные места, если вы понимаете о чем я.

Ответить | Правка | Наверх | Cообщить модератору

121. "Facebook развивает TransCoder для перевода кода с одного язы..."  +1 +/
Сообщение от Ordu (ok), 07-Окт-20, 10:04 
>> Это про востребованность решения.
> Ну-ну.
>> В области, где баксы крутятся сотнями миллионов, работа нацеленная на повышение продуктивности труда и снижение стоимости может оказаться очень прибыльной.
> Че-т я не вижу кобола в списке этой приблуды, равно как и
> оценки стоимости миграции с ее помощью.

Фейсбук, как я понимаю, пилит эту штуку под свои задачи. И в фейсбуке вряд ли есть легаси на коболе. Если бы ты видел там в списке кобол и указание стоимости, в которую обошёлся перевод с кобола на C++, то тогда у меня не было бы причин говорить о том, что это _потенциальный_ game-changer, потому что наличие таких данных говорило бы о том, что это уже _упущенная_ возможность влезть на новую игровую площадку.

>> С системой же на нейросетках можно сэкономить, посадив вместо команды таких специалистов студента, который будет принимать багрепорты в виде примеров кода, которые плохо транслируются, и загонять их в набор сэмплов для обучения нейросетки. Такого студента можно за месяц научить выполнять все эти работы и платить ему не $200k в месяц, а $50k. Это круто, резко скидывает стоимость проекта.
> Не уверен.  Положим, если вовсе не скомпилилось - это баг, который
> васян-студент может
> загнать в базу.  А если скомпилилось, но с багом в логике,
> что вылетит хрен
> знает когда в рантайме?

Английский, мазафака, ты можешь в него? "Using a transcompiler and manually adjusting the output source code may be a faster and cheaper solution" Какие слова непонятны? Или вообще всё непонятно? Давай я изложу тогда подробнее то, что написано, и то что непосредственно вытекает из написанного.

Речь идёт о том, что транскомпиль используется для перевода, и результат затем обрабатывается вручную. Я процитировал в предыдущем комменте также слова о валидации, которые наводят на мысль о том, что там всё чуть интереснее, и не все проверки результата выполняются вручную. Наличие _коммерческих_ rule-based систем прямо намекает на то, что под них есть рынок и этот сценарий перевода с поддержкой транскомпиля -- это не просто фантазии автора, это вполне себе рынок, где люди работают и даже ради этого запиливают софт. Да, я согласен, ссылок недостаточно -- был бы интересен обзор такого рода проектов, как с использованием транскомпиляторов так и полностью на ручной тяге. Но тут опять же -- если тебе эта тема интересна настолько, что ты хочешь точнее оценить перспективы, то ты сам можешь провести такое исследование рынка.

myhand, ты иногда демонстрируешь проблески интеллекта, но складывается впечатление, что тебе так хочется спорить, что ты готов вышвырнуть свой интеллект в окно, натянуть клоунский колпак strawman'а, лишь бы получить хоть какую-нибудь позицию, которая позволяет спорить.

Ответить | Правка | Наверх | Cообщить модератору

126. "Facebook развивает TransCoder для перевода кода с одного язы..."  +1 +/
Сообщение от myhand (ok), 07-Окт-20, 10:58 
> Фейсбук, как я понимаю, пилит эту штуку под свои задачи.

Или в фейсбуке дядиньки просто работают...  Ну вряд-ли там новую CAS пилят,
согласись, хотя статейки (куда интереснее) печатают.

Не будем делать далеко идущих выводов.

> Английский, мазафака, ты можешь в него? "Using a transcompiler and manually adjusting
> the output source code may be a faster and cheaper solution"
> Какие слова непонятны?

Непонятны не слова, а цифры.  Как ты "around $750 million and 5 years of work to convert its platform from COBOL to Java" конвертируешь в "chaper solution", если все-равно
необходимо "manually adjusting" конвертировать труд этой бредогенерилки?

> Речь идёт о том, что транскомпиль используется для перевода, и результат затем
> обрабатывается вручную.

Если раньше был необходим труд специалистов и теперь необходим труд специалистов - то в
чем разница?

> Наличие _коммерческих_ rule-based систем
> прямо намекает на то, что под них есть рынок и этот
> сценарий перевода с поддержкой транскомпиля -- это не просто фантазии автора,
> это вполне себе рынок, где люди работают и даже ради этого запиливают софт.

Этот софт работает на других принципах.  В частности, результат гарантированно
синтаксически корректен, он также не добавляет новых логических ошибок.

Да, результат обработки "rule-based" систем удобнее обрабатывать специалистам,
посколько это лишь детерминированно трансформированный человеческий input, а не продукт
надмозга, который может даже не конпилироваться.

> myhand, ты иногда демонстрируешь проблески интеллекта, но складывается впечатление, что
> тебе так хочется спорить, что ты готов вышвырнуть свой интеллект в
> окно, натянуть клоунский колпак strawman'а, лишь бы получить хоть какую-нибудь позицию,
> которая позволяет спорить.

Дон поражен в пятку...

Ответить | Правка | Наверх | Cообщить модератору

128. "Facebook развивает TransCoder для перевода кода с одного язы..."  +/
Сообщение от Ordu (ok), 07-Окт-20, 12:18 
> Непонятны не слова, а цифры.  Как ты "around $750 million and
> 5 years of work to convert its platform from COBOL to
> Java" конвертируешь в "chaper solution", если все-равно
> необходимо "manually adjusting" конвертировать труд этой бредогенерилки?
>> Речь идёт о том, что транскомпиль используется для перевода, и результат затем
>> обрабатывается вручную.
> Если раньше был необходим труд специалистов и теперь необходим труд специалистов -
> то в
> чем разница?

А, тебе не приходилось переписывать код? Процесс может быть организован по-разному (можно переписывать сразу всё целиком, можно переписывать функцию за функцией, после каждой добиваясь работоспособности, можно переписывать большими блоками -- типа подсистему за подсистемой), но этому процессу, по-любому, неплохо было бы включать в себя фазу покрытия исходного кода тестами, которые затем можно применить к переписанному коду, с тем чтобы сравнить результаты. В любом случае -- руками ли ты переписываешь или автоматически -- тебе придётся заниматься выверкой кода, потому как привнесение новых ошибок неизбежно.

Автоматическая конвертация избавляет тебя от собственно переписывания кода. Тебе точно так же надо будет писать тесты, точно так же надо будет выяснять причины, почему тесты фейлятся. Но переписывать не надо будет. При автоматической трансляции, я полагаю, будет больше сфейлившихся тестов, и поэтому исправление багов трансляции займёт больше времени. Но переписывание кода довольно долгий процесс, это существенно быстрее, чем писать с нуля, но ты сам подумай: сколько человекочасов надо чтобы переписать 100k строк? Вот эти человекочасы вычитаются, из процесса транскомпилем, и добавляются дополнительные человекочасы на большее количество сфейлившихся тестов.

И это очень полезно: гораздо полезнее тратить время на поиск и исправление багов, нежели на переписывание. Переписывание -- это тупая рутина, которая неизбежно приводит к тому, что внимание рассеивается, концентрация теряется, и вот ты уже добавляешь один баг за другим, и при этом твои баги гораздо более креативны нежели любые баги, которые может привнести алгоритм: чем больше интеллекта, тем заморочнее его ошибки.

>> Наличие _коммерческих_ rule-based систем
>> прямо намекает на то, что под них есть рынок и этот
>> сценарий перевода с поддержкой транскомпиля -- это не просто фантазии автора,
>> это вполне себе рынок, где люди работают и даже ради этого запиливают софт.
> Этот софт работает на других принципах.  В частности, результат гарантированно
> синтаксически корректен, он также не добавляет новых логических ошибок.

Ну, эмм... я не знаю, если честно, но я бы не полагался на отсутствие логических ошибок. Синтаксические же ошибки... Ну во-первых здесь в новости написано, что они по большей части корректируются дополнительными ограничениями в декодировщике. Во-вторых, синтаксические ошибки -- это туфта. Их исправление это конечно муторная отупляющая рутина, но они правятся элементарно. Вот когда новый код ведёт себя не так, как вёл себя старый, вот тут можно серьёзно залипнуть на исследовании старого кода, который хрен пойми что и как делает, и/или выяснении причи, почему новый код ведёт себя иначе.

Но как бы там не было, нельзя полагался на результат переписывания, каким бы образом он бы не был получен -- ручным переписыванием, rule-based транскомпиль, нейросетка... какая разница? В любом случае будут привнесены новые баги, а старые неисправленные усугубятся. А раз доверия коду нет, значит валидация, валидация и ещё раз валидация. Причём не глазами -- глазами человек очень плохо ищет ошибки. Причём с нелокальными ошибками всё гораздо хуже (то есть с ошибками, которые нельзя увидеть анализируя код в окрестности какой-то строки, которые можно заметить, только если посмотреть в три разных окрестности трёх разных строк и прокрутить какой-нибудь специфический сценарий работы этого кода). Unit-тесты очень заходят, интеграционные тесты тоже весьма и весьма полезны.

Ответить | Правка | Наверх | Cообщить модератору

131. "Facebook развивает TransCoder для перевода кода с одного язы..."  +/
Сообщение от myhand (ok), 07-Окт-20, 12:41 
> А, тебе не приходилось переписывать код?

Милое дело!

> руками ли ты переписываешь или автоматически

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

> Автоматическая конвертация избавляет тебя от собственно переписывания кода.

Хороший вопрос - насколько...

> Тебе точно так же надо будет писать тесты

Не понял, а что мешает сконвертировать тесты?  Ну если они не на том же языке пишутся - так
не по олбански-же?

> При автоматической трансляции, я полагаю, будет больше сфейлившихся тестов, и поэтому исправление багов трансляции займёт больше времени.

У тебя какое-то болезненное чувство к наборам тестов.  Это полезно для выявления каких-то
тривиальных вещей, для уверенности что каждый кусок кода хоть где-то - отработал.

Но - не более.

> Вот эти человекочасы вычитаются,
> из процесса транскомпилем, и добавляются дополнительные человекочасы на большее количество
> сфейлившихся тестов.

Я опасаюсь что из этого, для начала, ты не вычел время на чтение и понимание трансконпилировавшегося (или нет) текста...  Читать машинное творчество непросто, да.

> Переписывание -- это тупая рутина

Не совсем.  Разные языки - разные стили программирования.  Т.е. если даже в рамках
одного языка - это задача, то различие языков просто вынуждает к рефакторингу.

> Ну, эмм... я не знаю, если честно, но я бы не полагался
> на отсутствие логических ошибок.

Про это я писал.  Как тебе трансляция одной логической ошибки - в две?  Или в 10?

Вот поэтому мне и кажется это бесперспективным.  В отличие от задач, где легко
можно проверить результат, но сложно его получить обычными алгоритмами.

> Во-вторых, синтаксические ошибки -- это туфта.

Да, но если человеческое время надо тратить даже на такую туфту - тушите свет.

> Но как бы там не было, нельзя полагался на результат переписывания, каким
> бы образом он бы не был получен -- ручным переписыванием, rule-based
> транскомпиль, нейросетка... какая разница?

Разница есть.  rule-based - дает определенные гарантии о поведении результата.

Ответить | Правка | Наверх | Cообщить модератору

138. "Facebook развивает TransCoder для перевода кода с одного язы..."  +/
Сообщение от Ordu (ok), 07-Окт-20, 15:36 
>> руками ли ты переписываешь или автоматически
> Тут я не копенгаген по части практической, но теоретически - машинная трансляция
> по заданным правилам как раз позволяет избежать необходимости ручной выверки кода.

Я думаю, что такой компилятор можно написать, но он нагенерит тебе такой код, что лучше в него не заглядывать даже. Фишка ведь в том, чтобы получить код, который затем можно поддерживать.

>> Автоматическая конвертация избавляет тебя от собственно переписывания кода.
> Хороший вопрос - насколько...

Да, хороший вопрос. Судя по заявлениям этой статьи, нейросетка избавляет лучше, чем rule-based конвертация.

>> Тебе точно так же надо будет писать тесты
> Не понял, а что мешает сконвертировать тесты?

Если они есть, то их можно скомпилировать. Наверное. Возможно привнесение багов в процессе компиляции, вопрос в том, насколько, вероятно, что баг внесённый в функцию не задетектится тестом, потому что в тесте тоже появился баг.

Я не могу сказать, на самом деле, потому что я не переписывал код с поддержкой транскомпилей. Мне приходилось работать с кодом, переписанным таким образом при помощи p2c, но тот код уже был переписан до меня и уже был в работоспособном состоянии, когда мои ручки до него дотянулись. Кстати исходно я исследовал тот код, допиливая его до лучшего состояния. Например, заменяя вызовы writeln на вызовы printf. И приводя к верхнему регистру все константы объявленные через define (в исходном паскалевском коде они, видимо, употреблялись в разных регистрах, и то ли p2c, то ли тот кто правил код до компилируемого состояния, решил эту проблему посредством множественных define'ов для каждой константы -- под каждое написание константы отдельный define.

>> При автоматической трансляции, я полагаю, будет больше сфейлившихся тестов, и поэтому исправление багов трансляции займёт больше времени.
> У тебя какое-то болезненное чувство к наборам тестов.  Это полезно для
> выявления каких-то
> тривиальных вещей, для уверенности что каждый кусок кода хоть где-то - отработал.
> Но - не более.

Вопрос не в тривиальности тех вещей, которые ловятся, а в количестве тех вещей, которые не ловятся (точнее мы не можем знать это количество, и скорее надо говорить о матожидании этого количества или о вероятности напороться на такие вещи). А это уже к тому, каким образом пишутся тесты.

Кстати, когда ты переписываешь код, то можно писать тесты, которые сравнивают работу старого кода с новым. Причём не только результат работы, но и внутренние состояния программ можно сравнивать на разных этапах их выполнения. Я делал так. Понятно, что сравнивать адресные пространства побайтово не получится, даже значения переменной x из исходного кода со значением переменной x из целевого кода не всегда получится сравнить, потому что переменная может прекратить существовать или изменить смысл. Но какие-то переменные остаются, и их можно отслеживать.

Это очень напоминает фишинг. Чем больше тестов, чем подлее тесты, тем больше шансов отловить возникший баг. Плюс помогает опыт: если писать тесты, а потом разглядывать багрепорты о багах, которые проскочили сквозь сеть тестов, и при этом задаваться вопросом о том, как надо было писать тесты, чтобы эти баги не проскочили, то со временем учишься писать тесты так, чтобы через них проскакивали бы только редкие баги. Отчасти опыт можно заменить чтением книжек о тестировании и, кстати, философией. Тесты -- это тоже своего рода способ познания реальности. Нужно вогнать себя в нужный майндсет, прежде чем писать тесты -- надо целенаправленно пытаться порушить код тестом. Надо научиться чувствовать в себе неуверенность, которая возникает при идее засунуть в функцию какие-нибудь подлые данные -- если неуверенность есть, значит НАДО СРОЧНО ВЗЯТЬ И ЗАСУНУТЬ. Тесты часто пишут проверяя что код делает то, что задумано, но надо писать тесты так, чтобы заставить его сделать то, что не задумано.

Очень полезно, когда тест пишет не тот человек, который писал код, и который будет править код, чтобы тот справился с тестом, показавшим, что код кривой. Когда пишешь тесты под свой код, во-первых, сложно придумать кейс на котором код сфейлится: если ты об этом кейсе можешь подумать, то скорее всего ты уже о нём подумал, когда писал код, и учёл этот кейс в коде, и тестом ты лишь отметишь факт того, что ты об этом подумал, когда писал код. Во-вторых есть тенденция делать слишком много допущений о корректности кода -- отчасти потому, что ты точно знаешь как код написан и что он делает (точнее думаешь, что точно знаешь), отчасти потому, что где-то в глубине психики ты знаешь, что если ты напишешь тест, который порушит код, то тебе придётся тратить дополнительное время на отладку кода и исправление. Понятно, что это глупость, но так работает психика: каждый раз когда ты тестом доказал кривость кода, психика воспринимает это как наказание, начинает вырабатываться условный рефлекс, что хороший тест -- это плохо, и этот рефлекс начинает модифицировать твоё поведение в процессе написания тестов так, что ты будешь писать тесты, которые покажут, что код хороший, годный, безбажный. Надо уметь контролировать эти психические процессы, чтобы они не мешали. Или (что лучше) оставлять написание тестов кому-нибудь ещё, тому кто будет получать бонус к премии за каждый тест, который порушит твой код, для кого тест, порушивший твой код, будет не наказанием, а подкреплением и, соответственно, у него будет вырабатываться рефлекс, что хороший тест -- это хорошо. И этот рефлекс будет автоматически подталкивать его к написанию хороших, подлых тестов, так что тот кто писал код будет чертыхаться и бормотать себе под нос, что тестер извращенец и ему давно пора в психушку.

>> Вот эти человекочасы вычитаются,
>> из процесса транскомпилем, и добавляются дополнительные человекочасы на большее количество
>> сфейлившихся тестов.
> Я опасаюсь что из этого, для начала, ты не вычел время на
> чтение и понимание трансконпилировавшегося (или нет) текста...  Читать машинное творчество
> непросто, да.

Одна из фишек этих транскомпилей -- генерить читабельный код. По-крайней мере не менее читабельный чем оригинальный. Нет никакого смысла транскомпилировать, если результат нечитаемый. Точнее есть, но для совсем других задач -- это когда лень писать компилятор в машинный код, и поэтому компилируем в C, чтобы потом C скомпилировать компилятором. Но в новости речь о транскомпиляторах нацеленных на бесповоротный перевод проекта с одного языка на другой. Нет никакого смысла переводить проект с языка на язык с потерей читабельности кода.

>> Переписывание -- это тупая рутина
> Не совсем.  Разные языки - разные стили программирования.  Т.е. если
> даже в рамках
> одного языка - это задача, то различие языков просто вынуждает к рефакторингу.

Да, но через неделю-две ты понимаешь, что этот рефакторинг -- рутина. Поначалу вроде как приходится думать, но потом мышление становится ненужным, потому что все проблемы решаются из памяти по аналогии с уже решёнными проблемами. Ещё через пару недель хочется выть от того, что делаешь руками то, что можно было бы сделать алгоритмически. Я в компьютерные игры довольно давно уже не могу играть, потому что мне хочется выть от того, что большая часть активности может быть автоматизирована алгоритмически. Но тут будет ещё хуже, в этот момент начинаешь писать бажный код, потому что нет двух абсолютно одинаковых проблем, и перенося решение с одной проблемы на другую надо остановится и подумать о том, насколько такой перенос будет валидным, и поначалу останавливаешься и думаешь, но и эти мысли о валидности переноса решения становятся рутиной, и вместо того чтобы думать их, начинаешь извлекать их из памяти в обдуманном виде, и... короче рекурсии не получается, мозги начинают срезать углы и начинают лепить баги.

>> Ну, эмм... я не знаю, если честно, но я бы не полагался
>> на отсутствие логических ошибок.
> Про это я писал.  Как тебе трансляция одной логической ошибки -
> в две?  Или в 10?

Я к этому отношусь оптимистично: если используемые методы детекта логических ошибок хоть чего стоят, то мультипликация логических ошибок повышает шансы заметить их наличие, а значит и шансы на исправление. При этом, если у тебя есть исходный код и скомпилированный код и они работают по разному, то тебе придётся исследовать и тот, и этот, чтобы разобраться, и при некотором везении  ты начнёшь видеть ошибки не только привнесённые, но и те, что уже были.

> Вот поэтому мне и кажется это бесперспективным.  В отличие от задач,
> где легко
> можно проверить результат, но сложно его получить обычными алгоритмами.

А фейсбуку не кажется. И мне не кажется.

>> Но как бы там не было, нельзя полагался на результат переписывания, каким
>> бы образом он бы не был получен -- ручным переписыванием, rule-based
>> транскомпиль, нейросетка... какая разница?
> Разница есть.  rule-based - дает определенные гарантии о поведении результата.

Я не верю в эти гарантии. Если rule-based -- это механический перевод, который, например, при трансляции C++ -> Python, начнёт запиливать в Python'е модель памяти C++, указатели C++, массивы C++, и так далее, если при этом количество правил не такое уж и большое, и правила простые, если внешние API на, которые полагаются исходный и целевой код -- одни и те же, то можно довериться. Но если мы переводим код с использования STL и boost на стандартные Python'овские библиотеки или обратно, то верить такому переводу нельзя. Такой перевод потребует безумное количество правил, среди этих правил будут достаточно сложные, проверить каждое правило задачка ещё та, доказать что эти правила ни при каких условиях не помешают друг-другу практически невозможно.

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру