Програмування * на * мову порівняно з написанням коду С в Ruby


10

Досконалий код стану , що ви повинні Візитки код в мові , на відміну від коду в ньому. Під цим вони мають на увазі

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

Чи це не призводить до використання одного стилю програмування на будь-якій мові там, незалежно від конкретних сильних і слабких сторін мови, що існує?

Або поставити питання в більш відповідальному форматі:

Ви б запропонували, що вам слід спробувати якомога чіткіше кодувати свою проблему з докладною інформацією про мову, або вам слід шукати найелегантніше рішення в цілому, навіть якщо це означає, що вам потрібно реалізувати можливі незграбні конструкції, які не існують спочатку. мовою?


5
+1 хороше запитання. Я можу писати на Perl на півтисячі різних мов, на даний момент.
Ден Рей

@Dan Ray - дивно! Я завжди пишу С на Perl.
Джеймс Андерсон

Відповіді:


7

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

Такий підхід називається програмою, орієнтованою на мову . Існує багато прийомів ефективного втілення мов, орієнтованих на домен , і це особливо гостра тема для спільноти Ruby.


1
Спільнота Haskell також охоплює доменні мови, а мова програмування Haskell особливо підходить для їх реалізації.
tdammers

Чи вважається впровадження спеціальної системи сценаріїв на основі вбудованої мови, як-от Lua або Tkl, як написання DSL? Якщо так, то як ви маєте справу з недоліками, наприклад, Луа?
bastibe

@Paperflyer, в деяких випадках має сенс реалізувати мови поверх чогось на зразок Lua (особливо якщо це Metalua), але простіше написати належний компілятор для більшості типових DSL.
SK-логіка

@tdammers, так, Haskell і Scala - це все про DSL. Але я з темної сторони Сили: мій кращий підхід - це метапрограмування. Я вважаю, що спеціальні перекладачі майже завжди поступаються компіляторам.
SK-логіка

2
@tdammers, DSL, що реалізується на додаток до функцій високого порядку, - це практично спеціальний перекладач. Ви не можете розширити синтаксис Haskell так само, як ви розширите, скажімо, Lisp. Навіть із шаблоном Haskell. Це зовсім інший (і, я б сказав, обмежений) спосіб реалізації DSL. У багатьох випадках це нормально, але для будь-якого, що насправді є складним, це призводить до абсолютно нечитабельних реалізацій, тоді як багатоступеневе метапрограмування просто тривіально, незалежно від того, наскільки великий і чужий ваш DSL.
SK-логіка

2

Я вважаю правильною відповіддю, і одна, яка призначена книгою:

слід намагатися якомога чіткіше кодувати свою проблему з деталізаціями своєї мови

Програмуючи мову, я завжди припускав, що це використовувати методи поза нормальним стилем мови, де це призведе до користі . Це ключова відмінність написання в одному стилі на всіх мовах.

Наприклад, навчання Haskell значно покращило мою навичку використання функцій вищого порядку. Тепер при програмуванні на c # я використовую різні IEnumerableметоди, такі як Selectчастіше, оскільки використання цих методів призводить до отримання більш чистого коду, ніж для запису в циклі. Я також схильний використовувати функції передачі та використання (тобто Func<int, int>) частіше через свій досвід haskell. Моє використання спадщини впало через це, і більшість часу результат - простіший код.

Однак я не використовую такі поняття, як монади чи алгебраїчні типи даних у c #. Це пояснюється тим, що жоден з них не є чітко представленим в c #, і не призводить до мало користі в обмін на велику неясність.

Тому я використовую інструменти мови, щоб використовувати найкращі ефекти, які я маю. Я вважаю, що це програмування на мову.


0

Ви б запропонували, що вам слід спробувати якомога чіткіше кодувати свою проблему з докладною інформацією про мову, або вам слід шукати найелегантніше рішення в цілому, навіть якщо це означає, що вам потрібно реалізувати можливі незграбні конструкції, які не існують спочатку. мовою?

Справа в тому , що хороші програмісти не мають на мові. Цитата з книги розповідає про "інструменти програмування в їх розпорядженні" - це означає, що якщо ви знаєте perl та Java, то, можливо, вам слід скористатися perl для цієї швидкої маніпуляції з рядками. Мови програмування - це не обмеження для нас, а засоби, які ми використовуємо для вирішення проблем. Це (imo), до чого надходить Code Complete. Не кодуйте у вікні мови програмування / середовища, вкладайте найкраще рішення в найкращу мову / середовище програмування для вас, вашої проблеми та вашого рішення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.