Чому Google використовує мову програмування Java, а не Haskell?

Зазвичай люди скаржаться наскільки незручно і непродумано розроблений мова програмування Java , А з іншого боку хвалять Haskell за його надійність і простоту у використанні. З огляду на величезну базу, яка належить Google , Було б логічніше використовувати Haskell. КВ зібрали найцікавіші відповіді користувачів сайту Quora .

Майкл О. Черч

Єдиний аргумент, який зазвичай висувається людьми проти Haskell, полягає в тому, що в ньому складно розібратися. Але це не може бути вагомою причиною невикористання даного мови, з огляду на те, що на корпорацію працюють одні з найрозумніших програмістів у всьому світі.

Так чому ж Google вибрав Java замість Haskell? І чому вони наполягають на використанні мови програмування Go замість Haskell або Idris зараз? Запам'ятайте це історична подія: Майкл О. Черч збирається захищати Google, критикуючи один зі своїх улюблених мов (Haskell).

У 1998 році дослідження в області мов програмування вважалося безглуздим. Більшість великих ідей, які зараз виходять на перший план у таких мовах, як Clojure і Haskell, виникли вже в 1970-х і 80-х роках.

В кінці 1990-х Haskell не був настільки добре продуманим і стабільним мовою програмування як зараз. Чи реально було б заснувати компанію масштабу Google за допомогою Haskell в 2014 році? Напевно, так. У вас, швидше за все, виникнуть деякі невідповідності при роботі з будь-сервісної програмою, але ви можете знайти ринок збуту, тим самим зробивши свій внесок на основі відкритого коду в якості додаткового доходу компанії, і проблема вирішена. В кінці 1990-х років, коли ви тільки що ризиковано вклали капітал і у вас не було часу на навчання 100 інженерів "незрозумілого" мови, який (в той час) не мав навіть бібліотечної підтримки? Напевно ні. Обговорення мови Haskell - ще один безнадійний розмова, який неминучий з інвесторами і який відніме у вас багато часу, замість того, щоб якісно розробляти новий продукт.

Незважаючи ні на що, мова C ++ повинен був бути включений в білий список Google. Існує багато способів використання даної мови, але навіть в 2014 році жоден інша мова не працює також, як він. При створенні чогось масштабу Google, знадобиться мову керованої пам'яті. Слід зазначити, що людям подобається більше C, і вони стверджують, що C ++ є функціонально надлишковим і ресурсомісткість програмним забезпеченням. Адже Google не вигідно, щоб велика кількість програмістів писали свої власні хеш-таблиці і альтернативні рядкові типи, тому компанія (мудро) вирішила змінити C ++ в кращу сторону настільки, наскільки це можливо. І (хоча я розкритикував жахливий Legacy Project) я знаходжу велику частину коду C ++ в Google дуже хорошою і набагато більш наочною, ніж коди в "кращих" мовах програмування типових компаній.

Java (який цінується не так високо, як C ++ в Google) потрапив в білий список шляхом придбання. Якщо ви збираєтеся підтримувати кожну недопрацьовану фінансовану кимось операційну діяльність, то виконавець надає послугу, а потім ви витрачаєте багато Java. Таким чином, мова Java також можна включити в білий список.

Python числиться в списку як експериментальний мови "високого рівня", але (за станом на 2011) його необгрунтовано не рекомендують пускати в розробку.

Таким чином, основний необхідний набір Google заповнюється мовами Go, Dart і декількома іншими внутрішніми мовами ... але корпорація не бачить необхідності вдосконалення Lisp або Haskell. Google не є компанією, яка розробляє мови програмування. Дійсно, це одна з помилок, яку роблять все з нас (включаючи мене) щодо Google, чекаючи, що вона буде "технологічним лідером" у всьому. Потім, коли ми дізнаємося, що компанія використовує багато Java або що вона насправді не приділяє багато уваги якості гри в продукті G +, ми приголомшені таким недбалим ставленням щодо речей, які так важливі для нас.

Проте, Google не може дозволити собі бути лідером у всьому. Чи є використання такої кількості Java (за рахунок Clojure і Haskell) вірним рішенням для технологічного лідера? Звичайно, ні. Чи підходить це для Google? Цілком можливо. Будемо вважати це бізнес-рішенням, про яке нам не відомі всі показники. Помилково та небезпечно припущення, що одна компанія (яка торгує публічно, яка підзвітна інвесторам) могла б бути "технологічним лідером" в усіх напрямках. Це лише наше захмарна очікування.

Джонатан Полсон, інженер-програміст в Google

Джонатан Полсон, інженер-програміст в Google

У Google існує ряд вагомих причин не використовувати Haskell.

Я працюю протягом багатьох років з Python, який був і є одним з підтримуваних мов Google. Мені часто не вистачає доступних внутрішніх інструментів мови C ++, (бібліотек MapReduce, коду форматування, взаємозалежних фіксаторів, редакторської підтримки автозаповнення ...). І ця потреба все ще існує після * декількох років * роботи в Python; а Haskell взагалі довелося б починати все з нуля.

Виконати всі це - тонна роботи, але ж довелося б все це зробити по-новому для Haskell. Haskell також повинен бути в змозі підтримувати всі стандартні API Google: MapReduce, буфер протоколу, BigTable і т.д. І це ще один великий шматок роботи.

З іншого боку, Haskell знадобляться також дуже хороші бібліотеки. Чи є у Haskell відмінна підтримка i18n? SSL? машинне навчання ? Чи підтримуються в належному стані всі ці бібліотеки? А перевіряв чи хто-небудь роботу Haskell до тисячі машин і тисячі запитів в секунду? Чи добре він працює? Чи є непередбачені проблеми? Все це, напевно, неможливо, але дуже ризиковано.

Складність вивчення Haskell є ще однією причиною. Крім його, вже існує велика кількість нових інноваційних речей від Google, які необхідно освоїти співробітникам. Наскільки стабільний Haskell? Чи збирається прийти ще один GHC і зруйнувати мільйон рядків коду ? Навіть банальна зворотна несумісність завдасть значної шкоди.

Однак всі існуючі мови Google не збираються зникати. Так що це просто "черговий мову" співробітників Googlе, з яким доведеться мати справу, і мову, який має підтримувати робочу групу обслуговування інфраструктур (якщо я створюю нову базову API в Google, то я повинен зробити також реалізацію Haskell). Очевидно, що ці проблеми були вирішені.

Може бути, Google повинен використовувати Haskell. Може бути, немає. Але справжня причина полягає не в тому, що Haskell занадто важко освоїти.

Тім Армстронг

Я не згоден з припущенням, що Java - поганий мову програмування, і я можу назвати кілька причин, що не залежать від того, яка мова швидше.

По-перше, модель використання Java набагато простіше, ніж Haskell: досить легко зрозуміти витрати центрального процесора даної частини коду Java з тих пір, як він розташований недалеко від апаратного забезпечення. Спостерігаючи за кодом Haskell, набагато важче передбачити, чи буде компілює програма в змозі оптимізувати код настільки, щоб він відображався добре на обладнанні. Також нетривіально буде дати оцінку використанню програми Haskell в просторі, так як визначення того, які перетворювачі були або не були оцінені, часто вимагає досить глибокого розуміння мови. Бездіяльність Haskell є головним винуватцем в даній ситуації. Я добре розбираюся в Haskell, але якби переді мною була поставлена ​​задача, переглянути код цієї мови, то у мене виникли б деякі сумніви.

По-друге, JVM є гарною платформою з якісним профілюванням і засобами контролю, які важливі для проведення операцій.

Мова є невеликим обмеженням, в якому можуть бути реалізовані структурні дані в чистому вигляді. Функціональні структурні дані надзвичайно цікаві і мають деякі переваги. Однак обмежуючи себе тільки ними, можна упустити багато корисних структурних даних і алгоритмів. При використанні критично важливих кодів, ймовірно, знадобляться матриці , Хеш-таблиці і інші структури необхідних даних, щоб домогтися максимальної продуктивності. Для багатьох інших послуг Google також існують великі індекси в пам'яті, кеш і т.д., які розподілені між програмними потоками. Існує багато способів, за допомогою яких можна інтегрувати все це в Haskell з різними Монада, але мені здається, що ви підете в мінус з Haskell, як тільки ви таємно поділіться змінним режимом. Я припускаю, що буде дійсно важко переконати багатьох фахівців, що це все варто робити таким непростим способом.

Так чому ж Google вибрав Java замість Haskell?
І чому вони наполягають на використанні мови програмування Go замість Haskell або Idris зараз?
Чи реально було б заснувати компанію масштабу Google за допомогою Haskell в 2014 році?
В кінці 1990-х років, коли ви тільки що ризиковано вклали капітал і у вас не було часу на навчання 100 інженерів "незрозумілого" мови, який (в той час) не мав навіть бібліотечної підтримки?
Чи є використання такої кількості Java (за рахунок Clojure і Haskell) вірним рішенням для технологічного лідера?
Чи підходить це для Google?
Чи є у Haskell відмінна підтримка i18n?
SSL?
Чи підтримуються в належному стані всі ці бібліотеки?
А перевіряв чи хто-небудь роботу Haskell до тисячі машин і тисячі запитів в секунду?

Дополнительная информация

rss
Карта