пятничное спецолимпиадное
 thedeemon — 02.08.2024
                                                
                        
                        
Чё-то потянуло меня на прошлой неделе опять посмотреть на язык
Swift и попробовать на нем пописать. Меня интересовало каково это
жить, когда всякие массивы и прочие структуры данных это value типы
с copy-on-write. Но обнаружил, что сам язык сейчас выглядит весьма
симпатично по своему набору фич: тут тебе и обычные классы и
структуры, и алгебраические типы с паттерн матчингом, и
multiparameter type classes, и всякие мелкие удобства. Думал, что
бы такое написать, вспомнил, что давно хотел реализовать Byte Pair Encoding и натравить на enwik8 (100 MB
старого дампа английской википедии). Написал. Потом думаю: а
интересно сравнить насколько этот Свифт тормозной по сравнению с
другими языками. Правда, программа тут получилась такая, где его
потенциальные проблемы с подсчетом ссылок и реализацией генериков
себя не проявляют, а все упирается в скорость хэш-таблиц и
optional/nullable типов. Взял Claude.ai и напильник, и напилил
переводы одной и той же программы на восьми языках. И получилось
местами довольно любопытно, особенно неожиданно то, что Свифт всех
обогнал. Я обычно на JVM-targeted языках не пишу, и допускаю, что
что-то или все сделал или запускал неправильно, хотя вроде бы
перевод получился довольно прямой, и что в нем не так - неясно. Но
в итоге Скала на JVM это какой-то позор. Что Свифт и Раст делают за
минуту, то Скала делает за 15. В пять раз медленнее Котлина на той
же самой JVM! Который вдвое медленнее чем C#, съедая в 15-30 раз
больше памяти. Можно, конечно, меньше памяти им давать, так тоже
работает, но дольше. С++ тут проиграл многим языкам, ибо
стандартные его хэш таблицы совершенно позорные, это давно
известно. А заменять кастомными я не стал, везде брал что есть из
коробки.
 thedeemon — 02.08.2024
                                                
                        
                        
Чё-то потянуло меня на прошлой неделе опять посмотреть на язык
Swift и попробовать на нем пописать. Меня интересовало каково это
жить, когда всякие массивы и прочие структуры данных это value типы
с copy-on-write. Но обнаружил, что сам язык сейчас выглядит весьма
симпатично по своему набору фич: тут тебе и обычные классы и
структуры, и алгебраические типы с паттерн матчингом, и
multiparameter type classes, и всякие мелкие удобства. Думал, что
бы такое написать, вспомнил, что давно хотел реализовать Byte Pair Encoding и натравить на enwik8 (100 MB
старого дампа английской википедии). Написал. Потом думаю: а
интересно сравнить насколько этот Свифт тормозной по сравнению с
другими языками. Правда, программа тут получилась такая, где его
потенциальные проблемы с подсчетом ссылок и реализацией генериков
себя не проявляют, а все упирается в скорость хэш-таблиц и
optional/nullable типов. Взял Claude.ai и напильник, и напилил
переводы одной и той же программы на восьми языках. И получилось
местами довольно любопытно, особенно неожиданно то, что Свифт всех
обогнал. Я обычно на JVM-targeted языках не пишу, и допускаю, что
что-то или все сделал или запускал неправильно, хотя вроде бы
перевод получился довольно прямой, и что в нем не так - неясно. Но
в итоге Скала на JVM это какой-то позор. Что Свифт и Раст делают за
минуту, то Скала делает за 15. В пять раз медленнее Котлина на той
же самой JVM! Который вдвое медленнее чем C#, съедая в 15-30 раз
больше памяти. Можно, конечно, меньше памяти им давать, так тоже
работает, но дольше. С++ тут проиграл многим языкам, ибо
стандартные его хэш таблицы совершенно позорные, это давно
известно. А заменять кастомными я не стал, везде брал что есть из
коробки.Табличка результатов на файле в 1 МБ:
| Language | Time, s | Max Memory, MB | | ------------- | ---------- | -------------- | | Swift | 57 | 33 | | Rust | 59 | 20 | | C# | 73 | 75 | | D | 132 | 55 | | Kotlin* | 162 | 2057 | | Kotlin | 201 | 1070 | | C++ | 270 | 27 | | OCaml | 600 | 90 | | Scala | 941 | 977 |
(Kotlin* - это тот же jar файл, но запущенный с другими параметрами JVM)
Исходники и ключи сборки тут: https://github.com/thedeemon/bpe-comparison/
                            Сохранено
                            
                                
                        
                        |  | </> | 
 
             Bigger — современные технологии для людей с ослабленным зрением
                    Bigger — современные технологии для людей с ослабленным зрением                 Сергей Эйзенштейн в РОСИЗО
                    Сергей Эйзенштейн в РОСИЗО                 История слова «goodbye»
                    История слова «goodbye»                 Я уеду жить в Мурманск: какие льготы получают учителя на Крайнем Севере
                    Я уеду жить в Мурманск: какие льготы получают учителя на Крайнем Севере                 Осенью не копайте, а сейте, чтобы почва работала весной: 7 вопросов-ответов о
                    Осенью не копайте, а сейте, чтобы почва работала весной: 7 вопросов-ответов о                
             Битва за Херсон? Что принесет России контроль над западной частью агломерации
                    Битва за Херсон? Что принесет России контроль над западной частью агломерации                 Генералы, расстрелянные в песчаном карьере
                    Генералы, расстрелянные в песчаном карьере                 Красота и глупое величие
                    Красота и глупое величие                 
             
             
            
