LINUX.ORG.RU
ФорумTalks

Почему современные яп делают удобными для парсеров, а не для людей?

 ,


1

2

Все эти fn, fun, func, val, var и паскалевское указание типа...

Очевидно, что подобное замусоревание синтаксиса делают ради того, чтобы упростить парсинг исходников. Но неужели программисты менее ценны?

★★★★★

Последнее исправление: ya-betmen (всего исправлений: 1)
Ответ на: комментарий от yu-boot

Чем может быть, например, запись «int abc(int a, int b,…) {код}», кроме как функцией?

int a();

это предварительное объявление функции «a» или объявление переменной «a» с конструктором по умолчанию?

No ★★
()
Ответ на: комментарий от olelookoe

чтобы отличать такого?

bool a = b = c;

но, если не разрешать

if ( bool a = b )
    ;

или использовать = для инициализации новых объектов, а не присваивания, там, где требуется условие в конструкциях if или while, то неоднозначности не возникает

vM ★★
()
Ответ на: комментарий от vM

да, но тогда все что внутри if это другой ЯП. сомнительная идея.

olelookoe ★★★
()
Ответ на: комментарий от No

int a();

это предварительное объявление функции «a» или объявление переменной «a» с конструктором по умолчанию?

Если что-то может быть воспринято как прототип функции, оно и будет так воспринято.

akk ★★★★★
()
Ответ на: комментарий от EXL

Язык с begin/end не может быть няшным, читабельным и лаконичным.

Расскажите это пишущим на Верилоге и не любящим ВХДЛ за его якобы многословность.

akk ★★★★★
()
Ответ на: комментарий от Aber

Да что ты несёшь то?

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

я сразу вижу сигнатуру,

Сигнатура не включает в себя полное описание возвращаемого типа. Ты ж не будешь описание возвращаемого указателя на структуру считать частью сигнатуры функции? Тут то же самое.

firkax ★★★★★
()
Ответ на: комментарий от No

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

int a(void); - прототип функции.

firkax ★★★★★
()

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

Clayman ★★
()
Ответ на: комментарий от No

Тут уел, ок. Хотя по контексту можно понять наверное, опять к сложности парсера возвращаемся.

Но если дальше код идёт в {}, очевидно, что это функция, и нет никакого смысла отдельно это подчёркивать.

yu-boot ★★★★★
()

Пишите с галеры где вас задолбало набирать fn, fun, func, val, var ? Ну откройте для себя ctrl-c -> ctrl-v

anc ★★★★★
()
Ответ на: комментарий от untitl3d

ООП в новых ЯП уже ещё не делают

исправил

anc ★★★★★
()
Ответ на: комментарий от Clayman

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

+много-очень-много! Когда-то это было в первых строчках...

anc ★★★★★
()
Ответ на: комментарий от rekket

Но паскалевская система намного лучше

Лучше чем?

чем сишная

Вы или поверхностно знакомы что с одним, что с другим. Или плотно на паскакаль подсели.

anc ★★★★★
()
Ответ на: комментарий от yu-boot

Внутри условия ифа дать возможность присвоение делать? Под какими веществами это может понадобиться?

if (auto arg=foo(...)) {
   ...
   [work with foo]
   ...
}
thunar ★★★★★
()
Ответ на: комментарий от Clayman

Излюбленная тема для любого нубаса ламерья - перетереть за синтаксис ЯП.

вот так оно имхо правильней.

anc ★★★★★
()

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

mydibyje ★★★★
()
Последнее исправление: mydibyje (всего исправлений: 1)
Ответ на: комментарий от yu-boot

Мне кажется, что тут недалеко до кодинга пробелами, прям как в Пайтоне.

CryNet ★★★★★
()
Ответ на: комментарий от olelookoe

ЯП и естественный язык — разные вещи, один строить на основе другого не стоит. COBOL и hypercard как-то не прижились.

PolarFox ★★★★★
()
Ответ на: комментарий от mydibyje

Для остального есть no-code.

Для этого вашего no code нужно чтобы кто-то писал этот code

Пока всё что я видел похожи на wordpress с плагинами. Как бе чтобы макаки могли мышкой «кодить» нужны разработчики плагинов.

ritsufag ★★★★★
()
Ответ на: комментарий от PolarFox

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

«маленький вагончик едет в Прагу»

и

let транспорт: вагон
транспорт = новый вагон(маленький, красный)
function движется(кто, куда)
   
main
   result = движется(транспорт, Прага)

ну не ппц?)

olelookoe ★★★
()
Ответ на: комментарий от vM

s/work with foo/work with arg, конечно. В том смысле, что существует множество случаев когда функция возвращает или значимую величину или нейтральный элемент, что вполне себе кастуется в bool. И тогда семантика вполне чёткая: если результат значимый — работаем с ним в теле if'a, если нет — не замусориваем текущий namespace ненужными переменными.

thunar ★★★★★
()
Ответ на: комментарий от yu-boot

Чем может быть, например, запись «int abc(int a, int b,…) {код}», кроме как функцией?

Такой синтаксис деклараций не позволяет языку иметь LL(1) грамматику. А это уже плохо.

Psilocybe ★★★★★
()
Ответ на: комментарий от Psilocybe

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

olelookoe ★★★
()
Ответ на: комментарий от olelookoe

плохо парсеру, а мы кагбэ разработчики, нам хорошо.

Ну не жалуйся тогда, что всё компилиться 3 часа вместо 3-х минут.

Мы же хотим, чтобы всё быстро компилилось?

Psilocybe ★★★★★
()
Последнее исправление: Psilocybe (всего исправлений: 1)
Ответ на: комментарий от Psilocybe

ну шо сказать

а) я тут на скорость канпеляции не жаловался, силу аргумента тем не менее признаю, но это не ко мне

б) пожирателей времени работы компилятора и без контекстно-зависимой грамматики много

с) сишечка и жаба при всех своих недостатках от медленной компиляции ваще не страдают, в отличии от не будем тыкать пальцами. хотя и с ними до LL(1) тоже как до Луны. но да, было бы побыстрее-повеселее, но кагбэ на прирост по времени равный «отхлебнуть из чашки кофею» класть все тот же наш надежный прибор.

olelookoe ★★★
()
Ответ на: комментарий от ritsufag

чтобы макаки могли мышкой «кодить»

Ещё бы где-то это довели до приемлемого состояния.

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

Пока вот это no-code и «мышкой» везде будет примерно такое «дружелюбное», нафиг оно надо, да.

yu-boot ★★★★★
()
Ответ на: комментарий от yu-boot

вапще-то это была иллюстрация к вопросу «а нужны ли операторы сравнения за пределами if и while?»

и типа вот он ответ! нужны!

и надо же как-то различать где оператор сравнения, а где присваивается значение, нет?

«а давай запретим логические операторы везде, кроме if и while!» - окай, давай запретим. ну в смысле в дополнение к тому, что мы уже запретили присваивать в проверках условий.

olelookoe ★★★
()
Ответ на: комментарий от olelookoe

и типа вот он ответ! нужны!

если(а=б) в=да иначе в=нет

так? если так уж надо сохранить на будущее ответ на вопрос «равны ли были а и б в тот момент?»

и надо же как-то различать где оператор сравнения, а где присваивается значение, нет?

Я к тому и веду, что по мне - нет. Что по-русски оба варианта будут «равно», что в англ «equals». Я против введения в язык таких вот некрасивых вещей для "...а зато я теперь могу спину ногой почесать!" :) Перфекционизм, да.

yu-boot ★★★★★
()
Ответ на: комментарий от Psilocybe

Ну не жалуйся тогда, что всё компилиться 3 часа вместо 3-х минут.

Чушь. Разбор занимает крайне малую часть компиляции.

Что, кстати, с временем компиляции у Раста с его опорными кейвордами?

Siborgium ★★★★★
()
Ответ на: комментарий от anc

где вас задолбало набирать

Речь не о кейворде, а о правилах языка.

Siborgium ★★★★★
()
Ответ на: комментарий от Aber

Такой глупый вопрос может быть только от сишника вылезшего из vim =) В современных IDE статические анализаторы для нормальных языков работают практически в real-time. Т.е. не нужно ждать комплияцию или запускать отдельную службу статической проверки на CI, а можно получать нотификаци прямо во время написания

В виме-то конечно такого нет, даааа)

pihter ★★★★★
()
Ответ на: комментарий от Siborgium

alysnix'у, для него ты ничего не понимаешь в компиляторах если не фанбоишь LL1

untitl3d
()
Ответ на: комментарий от ya-betmen

Обявление функции легко отличить даже если его не помечать отдельным ключевым словом.

Открыл файл с кодом в простом блокноте и как мне быстро пробежаться по функциям? Сейчас нажал кнопку поиска, ввел «ФУНКЦИЯ-бла-бла» и далее, далее.

sagittarius
()
Ответ на: комментарий от Spoofing

поэтому на любом языке пишутся фреймворки, усугубляющие недостатки самого языка, на котором они написаны.

Fixed.

pr849
()
Ответ на: комментарий от olelookoe

А функции С-шные ты тогда как читаешь?

int* foo(int a);

А эти «инопланетные» слова читаются вполне по-человечески.

// Пусть x - 32-х битное целочисленное, равное 69.
let x: i32 = 69;

// Функция foo, принимающая аргумент a - 32-х битное целочисленное, возвращает ссылку на 32-х битное целочисленное.
fn foo(a: i32) -> &i32) { ... }

// Функция bar, принимающая a - ссылку на массив 32-х битных чисел, возвращает итератор с типом элемента - ссылкой на 32-х битное целочисленное.
fn bar(a: &[i32]) -> Iterator<Item=&i32> { ... }
anonymous-angler ★☆
()
Ответ на: комментарий от anonymous-angler

насчет инопланетности не ко мне, но

let x: i32 = 69;

vs

int32_t x = 69; 

минус «let» минус «:». вот ты как воспринимаешь на слух речь, в которой через слово «кароч», «типа», «внатуре» и прочие слова паразиты?

кароч эта фигулина ля пусть тута;
кароч эта загогулина ля пусть тама;

ухи вянут же, ну.

едем дальше

fn foo(a: i32) -> &i32) { ... }

про навязчивое двоеточие уже молчу, хрен с ним

fn - это зачем? -> нафейхоа?

int32t* foo(int32_t a)

все, ничего лишнего. все четко, ясно и по делу.

olelookoe ★★★
()
Ответ на: комментарий от olelookoe

Я вроде сразу сказал, что это какая-то высосанная из пальца проблема. Но «паскалевская» конвенция мне нравится больше, потому что имена выравнены и это проще читать.

fn foo(
  foo: VeryLongGenericType<T, U>,
  bar: Vec<i32>,
  baz: i32,
) -> SomeType {
  let foo1: VeryLongGenericType<T, U> = ...;
  let bar1: Vec<i32> = ...;
  let baz1: i32 = ...;
  ...
}
anonymous-angler ★☆
()
Ответ на: комментарий от anonymous-angler

про то что и как можно клево отформатировать давай не будем, ок? )

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

объективно - можно обойтись без всех этих «:», «fn», «->» ? можно. значит это просто шум, слова паразиты. «а мне нравится!» - ок, у меня нет возражений.

крч братан давай, типа увидимся, внатуре. )

olelookoe ★★★
()
Ответ на: комментарий от CryNet

А смысл, если они обычно похожи? Понимаю, если это js с прототипными хаками... Но он все равно похож на популярные языки. Даже питон похож на си с классами, просто скобочек нет.

Shadow ★★★★★
()
Последнее исправление: Shadow (всего исправлений: 1)

чо? Я нифига не понял, как это мешает людям или как это делает парсеры удобнее. Если хочешь посмотреть на язык, удобрый для парсеров, смотри в сторону Scheme или Forth.

hateyoufeel ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.