Size: a a a

Compiler Development

2020 March 25

DP

Dmitry Ponyatov in Compiler Development
Михаил Бахтерев
Такое ощущение, что человек не разобрался, что такое гошный ассемблер и критикует его с какой-то очень перпендикулярной реальности позиции.

Пассаж о необходимости использования мощых линковщиков тоже малопонятен, потому что скорость компиляции была целью разработки Go, а в современном языкостроении в llvm- или gcc- стиле линковка одна из самых тяжёлых и медленных (уж не знаю, почему) операций.

Go, может быть, и shit, но уж точно не по этим причинам.

На Plan9 тоже взгляд странный. Проект провалился не из-за технических причин, а потому что AT&T решила торговать unix-next операционкой во времена восхода Linux и BSD. Технически, Plan9 до сих пор может то, чего не может Linux: раздавать по сети вычислительные ресурсы - и может это хорошо. GUI там, конечно, отстойный по нынешним временам и unix-овым консольщикам не заходит (тоже одна из ошибок AT&T). Но это можно было бы исправить, если бы AT&T выпустила ОС в свободное плавание. Но вот не решилась.
Plan9 GPLная с 2014
источник

p

polunin.ai in Compiler Development
Gymmasssorla
ML-синтаксис?
Ну и кстати ML посложнее парсить чем сишный синтаксис
источник

G

Gymmasssorla in Compiler Development
polunin.ai
Ну и кстати ML посложнее парсить чем сишный синтаксис
Хм, почему?
источник

VK

Vladimir Kazanov in Compiler Development
Михаил Бахтерев
Вот это, кстати, Plan9 умела делать из коробки, и обработка почты, например, там была элементарной задачей.

Бережно, в общем, храню исошечку с образом Plan9, как источник мудрости. Когда наступит апокалипсис, пригодится :)
Ну, если в контексте этого чата говорить, то я от компилятореой публики не раз слышал критику в сторону авторов плана:-)

Хотя мне, конечно, вся моих работа импонирует
источник

VK

Vladimir Kazanov in Compiler Development
Dmitry Ponyatov
Plan9 GPLная с 2014
Теперь-то кому какое дело... да и было ли кому до них дело? :-)
источник

VK

Vladimir Kazanov in Compiler Development
Peter Sovietov
Ну, раз ссылка на старую заметку из блога до сих пор вызывает дебаты, то вот вам дискуссия на HN с ответом Пайка:

https://news.ycombinator.com/item?id=8815778

На мой взгляд, разъяснения были даны вполне исчерпывающие.

Теперь вернемся, все-таки, к тематике чата. Как известно, компилятор Томпсона из Plan9 использовался в Inferno и для процесса раскрутки (bootstrapping) компилятора Go.
В этой связи любопытно в ретроспективе посмотреть на решения kencc. И на этот счет есть заметка от самого Томпсона:

http://doc.cat-v.org/bell_labs/new_c_compilers/new_c_compiler.pdf

А здесь можно изучить код компилятора:

https://github.com/aryx/fork-kencc/tree/master/cc

Обсудим?
Насколько понимаю, в современный Си переехали почти все эти расширения языка.

У авторов ощутимо нет никаких священных коров типа стандартов, портативности и т.д. Душа Bell labs!

А компилятор особо что там обсуждать? :-) там ж 7 тыс строк кода плюс по 6 тыс на каждый из 3х описанных бэкэндов
источник

Ɖ

Ɖrēw in Compiler Development
Михаил Бахтерев
Лисп :) Во-первых, очень экзотично по нынешним временам. Во-вторых, можно сразу брать книгу о том, как написать интерпретатор Scheme за 48 часов, и на выходе уже будет нечто программируемое, а не просто парсер.

На Википедии есть обзор всяких разных синтаксических заморочек

https://ru.m.wikipedia.org/wiki/%D0%A1%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_(%D1%81%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%81)
Спасибо)
источник

PS

Peter Sovietov in Compiler Development
Vladimir Kazanov
Насколько понимаю, в современный Си переехали почти все эти расширения языка.

У авторов ощутимо нет никаких священных коров типа стандартов, портативности и т.д. Душа Bell labs!

А компилятор особо что там обсуждать? :-) там ж 7 тыс строк кода плюс по 6 тыс на каждый из 3х описанных бэкэндов
Мы же здесь с интересом обсуждали разнообразные игрушечные компиляторы Си. А тут -- "серьезный" компилятор от Кена Томпсона, последний -- за ним уже Go.

Почему, например, там наличие или отсутствие volatile ничего не ломает? Как выглядит IR (hint: он древовидный и даже вещи в духе "+=" не раскрываются до самой генерации целевого кода)? Как работает выбор команд и что там за схема разметки такая для адресных деревьев? Как выглядит распределение регистров (уравнения потоков данных вычисляются, но раскраски графа нет)? Какие-то вещи раскрыты в приложенном мной документе, но и в коде есть, что посмотреть.

Код, разумеется, написан в архаичном стиле, но общие архитектурные решения местами заслуживают внимания. Как и следование KISS-принципу в целом :)

P.S. Я предполагаю, что kencc был написан в начале 90-х. В этой связи, удивительно, насколько компиляторы Оберона того же времени технологически опережали разработки от Bell Labs, при схожем следовании KISS.
Сравните сами: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.28.580&rep=rep1&type=pdf (там полезно пройтись по ссылкам на литературу)
источник

__

_________ _________ in Compiler Development
Алексей Герасимов
сделай его пожалуйста expression oriented, а то задолбало писать
var x: string;
if (a) {
 x = get_a();
} else {
 x = get_b();
}

вместо простого и понятного
const x = if a { get_a() } else { get_b() }
н
у и так же со switch, {}, и другими конструкциями
а есть еще какие то примеры?
источник

АГ

Алексей Герасимов in Compiler Development
_________ _________
а есть еще какие то примеры?
примеры чего, expression orientedness? весь хацкель с окамлом и иже с ними
источник

__

_________ _________ in Compiler Development
Алексей Герасимов
примеры чего, expression orientedness? весь хацкель с окамлом и иже с ними
вот со свичом чонить такое же как выше
источник

АГ

Алексей Герасимов in Compiler Development
да элементарно
let y = match x {
   | 1…5 => «foo»,
   | x if x % 2 == 0 => bar(),
   _ => return baz
};
источник

__

_________ _________ in Compiler Development
))
источник

AT

Alexander Tchitchigin in Compiler Development
_________ _________
вот со свичом чонить такое же как выше
Так сейчас даже в C# и Java switch - это выражение. 🤷‍♀️
источник

BD

Berkus Decker in Compiler Development
_________ _________
вот со свичом чонить такое же как выше
let a = if true { 5 } else { 7 };
источник

AK

Andrei Kurosh in Compiler Development
Alexander Tchitchigin
Так сейчас даже в C# и Java switch - это выражение. 🤷‍♀️
Точнее, в шарпе есть два свича, один из которых выражение :)
источник

AT

Alexander Tchitchigin in Compiler Development
Andrei Kurosh
Точнее, в шарпе есть два свича, один из которых выражение :)
В Java, наверное, тоже, но тем не менее. 😊
источник

VK

Vladimir Kazanov in Compiler Development
Peter Sovietov
Мы же здесь с интересом обсуждали разнообразные игрушечные компиляторы Си. А тут -- "серьезный" компилятор от Кена Томпсона, последний -- за ним уже Go.

Почему, например, там наличие или отсутствие volatile ничего не ломает? Как выглядит IR (hint: он древовидный и даже вещи в духе "+=" не раскрываются до самой генерации целевого кода)? Как работает выбор команд и что там за схема разметки такая для адресных деревьев? Как выглядит распределение регистров (уравнения потоков данных вычисляются, но раскраски графа нет)? Какие-то вещи раскрыты в приложенном мной документе, но и в коде есть, что посмотреть.

Код, разумеется, написан в архаичном стиле, но общие архитектурные решения местами заслуживают внимания. Как и следование KISS-принципу в целом :)

P.S. Я предполагаю, что kencc был написан в начале 90-х. В этой связи, удивительно, насколько компиляторы Оберона того же времени технологически опережали разработки от Bell Labs, при схожем следовании KISS.
Сравните сами: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.28.580&rep=rep1&type=pdf (там полезно пройтись по ссылкам на литературу)
замечу, что Томпосон и компания писали ОС прежде всего и все инструменты к ним, Вирт же в большей степени концентрировался на языках и компиляторах к ним 😊 Соответственно распределены были и усилия
источник

PS

Peter Sovietov in Compiler Development
Vladimir Kazanov
замечу, что Томпосон и компания писали ОС прежде всего и все инструменты к ним, Вирт же в большей степени концентрировался на языках и компиляторах к ним 😊 Соответственно распределены были и усилия
Я, в данном случае, даже не про Вирта говорю. Вирт, насколько мне известно, никогда серьезно не интересовался оптимизирующими компиляторами. А вот его более молодые коллеги из ETH — другое дело. У некоторых из них в 90-е были не менее важные для развития компиляторных технологий работы, чем у того же Клика.
источник

АГ

Алексей Герасимов in Compiler Development
Alexander Tchitchigin
В Java, наверное, тоже, но тем не менее. 😊
в джаве все-таки решили по-умному(как по мне) сделать switch выражением а не городить отдельную синтаксическую конструкцию.
источник