Запитання з тегом «language-design»

Питання, що стосуються дизайну та структури мов програмування.

2
Чому бітові оператори мають нижчий пріоритет, ніж порівняння?
Чи може хтось пояснити обґрунтування, чому в купі найбільш популярних мов (див. Примітку нижче) оператори порівняння (==,! =, <,>, <=,> =) Мають більший пріоритет, ніж бітові оператори (&, |, ^ , ~)? Я не думаю, що я коли-небудь стикався з використанням, де цей пріоритет був би природним. Це завжди такі …

6
Чому C # був створений за допомогою "нових" та "віртуальних + переопрацьованих" ключових слів на відміну від Java?
У Java є немає virtual, new, overrideключові слова для визначення методу. Тож роботу методу легко зрозуміти. Причина, якщо DerivedClass розширює BaseClass і має метод з тим самим ім'ям і такою ж підписом BaseClass, то переосмислення відбуватиметься при поліморфізмі під час виконання (за умови, що методу немає static). BaseClass bcdc = …

9
Чому мови не включають значення як логічний оператор?
Це може бути дивним питанням, але чому немає ніяких наслідків як логічного оператора для багатьох мов (Java, C, C ++, Python Haskell - хоча, як останній, визначені користувачем оператори його тривіально додавати)? Мені здається, що логічний підхід набагато зрозуміліше писати (особливо у твердженнях або висловлюваннях, подібних до висловлювань), тоді заперечення …

4
Чому тип має назву змінної у сучасних мовах програмування?
Чому так, що майже в усіх сучасних мовах програмування (Go, Rust, Kotlin, Swift, Scala, Nim, навіть остання версія Python) типи завжди приходять після імені змінної в декларації змінної, а не раніше? Чому x: int = 42і ні int x = 42? Чи останні не є більш читабельними, ніж перші? Це …

2
Чому "недійсний" не дозволений як загальний тип у C #
Які дизайнерські рішення стверджували на користь того, що їх voidне можна було сконструювати та не допустити як загальний тип? Зрештою, це просто спеціальний порожній structі уникнув би загального ПДФА, який мав чітких Funcта Actionделегатів. (C ++ дозволяє явні voidповернення та дозволяє voidяк параметр шаблону)

3
Що таке система типів?
Фон Я проектую мову, як побічний проект. У мене є робочий асемблер, статичний аналізатор і віртуальна машина для цього. Оскільки я вже можу компілювати та запускати нетривіальні програми, використовуючи побудовану інфраструктуру, я подумав над тим, щоб подати презентацію у своєму університеті. Під час своєї розмови я зазначив, що VM забезпечує …

5
Чому всі функції <алгоритму> приймають лише діапазони, а не контейнери?
У програмах є багато корисних функцій &lt;algorithm&gt;, але всі вони працюють на «послідовностях» - парах ітераторів. Наприклад, якщо я маю контейнер і люблю бігати std::accumulateпо ньому, мені потрібно написати: std::vector&lt;int&gt; myContainer = ...; int sum = std::accumulate(myContainer.begin(), myContainer.end(), 0); Коли все, що я маю намір зробити: int sum = std::accumulate(myContainer, …

4
Чому ітератори в Python створюють виняток?
Ось синтаксис ітераторів на Java (дещо схожий синтаксис у C #): Iterator it = sequence.iterator(); while (it.hasNext()) { System.out.println(it.next()); } Що має сенс. Ось еквівалентний синтаксис у Python: it = iter(sequence) while True: try: value = it.next() except StopIteration: break print(value) Я вважав, що Винятки повинні використовуватися лише у, виняткових …

8
Навіщо проектувати сучасну мову без механізму обробки винятків?
Багато сучасних мов надають багато функцій обробки винятків , але мова програмування Swift Apple не забезпечує механізм обробки винятків . Як і я, керуючись винятками, у мене виникають проблеми з обгортанням того, що це означає. Свіфт має твердження і, звичайно, повертає значення; але у мене виникають труднощі уявити, як мій …

13
Чому оператор призначення присвоює ліву частину?
Я почав викладати друга програмуванню зовсім недавно (ми використовуємо Python), і коли ми почали обговорювати створення змінних та оператора призначення, вона запитала, чому значення праворуч присвоюється імені зліва, а не навпаки . Раніше я не надто замислювався над цим, бо це мені здавалося природним, але вона сказала, що ліво-праворуч їй …

5
Чому старі мови програмування продовжують переглядати?
Це питання не: "Чому люди все ще використовують старі мови програмування?" Я це добре розумію. Насправді дві мови програмування, які я найкраще знаю, - це C і схема, обидві вони датуються 70 -ми. Нещодавно я читав про зміни в C99 та C11 порівняно з C89 (що, здається, все ще є …

4
Чому структури та класи є окремими поняттями в C #?
Програмуючи в C #, я натрапив на дивне рішення дизайну мови, яке я просто не можу зрозуміти. Отже, C # (і CLR) має два сукупні типи даних: struct(тип значення, що зберігається в стеку, без успадкування) і class(тип посилання, зберігається в купі, має спадщину). Ця настройка спочатку звучить приємно, але потім …

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

15
Як мови вплинули на дизайн процесора? [зачинено]
Нам часто кажуть, що апаратне забезпечення не хвилює, на якій мові написана програма, оскільки вона бачить лише скомпільований двійковий код, однак це не вся правда. Наприклад, розгляньте скромну Z80; його розширення до набору інструкцій 8080 включають такі інструкції, як CPIR, які корисні для сканування рядків у стилі C (з NULL), …

22
Чи був пробіл в ідентифікаторах колись ідіоматичним? [зачинено]
Стиль C # пропонує використовувати CamelCase в ідентифікаторах для розмежування слів. Традиція Lisp пропонує замість цього тире-тире. Чи існувала коли-небудь мова програмування, де використання пробілів в ідентифікаторах було не тільки дозволено, але і загальновживану ідіому при використанні багатослівних ідентифікаторів? У деяких реалізаціях схеми можуть бути ідентифікатори з пробілами , але …

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